1/* parser auto-generated by pidl */
2
3#include "includes.h"
4#include "../librpc/gen_ndr/ndr_ntlmssp.h"
5
6static enum ndr_err_code ndr_push_ntlmssp_MessageType(struct ndr_push *ndr, int ndr_flags, enum ntlmssp_MessageType r)
7{
8	NDR_CHECK(ndr_push_enum_uint32(ndr, NDR_SCALARS, r));
9	return NDR_ERR_SUCCESS;
10}
11
12static enum ndr_err_code ndr_pull_ntlmssp_MessageType(struct ndr_pull *ndr, int ndr_flags, enum ntlmssp_MessageType *r)
13{
14	uint32_t v;
15	NDR_CHECK(ndr_pull_enum_uint32(ndr, NDR_SCALARS, &v));
16	*r = v;
17	return NDR_ERR_SUCCESS;
18}
19
20_PUBLIC_ void ndr_print_ntlmssp_MessageType(struct ndr_print *ndr, const char *name, enum ntlmssp_MessageType r)
21{
22	const char *val = NULL;
23
24	switch (r) {
25		case NtLmNegotiate: val = "NtLmNegotiate"; break;
26		case NtLmChallenge: val = "NtLmChallenge"; break;
27		case NtLmAuthenticate: val = "NtLmAuthenticate"; break;
28	}
29	ndr_print_enum(ndr, name, "ENUM", val, r);
30}
31
32static enum ndr_err_code ndr_push_NEGOTIATE(struct ndr_push *ndr, int ndr_flags, uint32_t r)
33{
34	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
35	return NDR_ERR_SUCCESS;
36}
37
38static enum ndr_err_code ndr_pull_NEGOTIATE(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
39{
40	uint32_t v;
41	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
42	*r = v;
43	return NDR_ERR_SUCCESS;
44}
45
46_PUBLIC_ void ndr_print_NEGOTIATE(struct ndr_print *ndr, const char *name, uint32_t r)
47{
48	ndr_print_uint32(ndr, name, r);
49	ndr->depth++;
50	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_UNICODE", NTLMSSP_NEGOTIATE_UNICODE, r);
51	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_OEM", NTLMSSP_NEGOTIATE_OEM, r);
52	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_REQUEST_TARGET", NTLMSSP_REQUEST_TARGET, r);
53	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_SIGN", NTLMSSP_NEGOTIATE_SIGN, r);
54	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_SEAL", NTLMSSP_NEGOTIATE_SEAL, r);
55	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_DATAGRAM", NTLMSSP_NEGOTIATE_DATAGRAM, r);
56	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_LM_KEY", NTLMSSP_NEGOTIATE_LM_KEY, r);
57	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_NETWARE", NTLMSSP_NEGOTIATE_NETWARE, r);
58	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_NTLM", NTLMSSP_NEGOTIATE_NTLM, r);
59	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_NT_ONLY", NTLMSSP_NEGOTIATE_NT_ONLY, r);
60	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_ANONYMOUS", NTLMSSP_ANONYMOUS, r);
61	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED", NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED, r);
62	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED", NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED, r);
63	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_THIS_IS_LOCAL_CALL", NTLMSSP_NEGOTIATE_THIS_IS_LOCAL_CALL, r);
64	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_ALWAYS_SIGN", NTLMSSP_NEGOTIATE_ALWAYS_SIGN, r);
65	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_TARGET_TYPE_DOMAIN", NTLMSSP_TARGET_TYPE_DOMAIN, r);
66	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_TARGET_TYPE_SERVER", NTLMSSP_TARGET_TYPE_SERVER, r);
67	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_TARGET_TYPE_SHARE", NTLMSSP_TARGET_TYPE_SHARE, r);
68	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY", NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY, r);
69	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_IDENTIFY", NTLMSSP_NEGOTIATE_IDENTIFY, r);
70	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_REQUEST_NON_NT_SESSION_KEY", NTLMSSP_REQUEST_NON_NT_SESSION_KEY, r);
71	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_TARGET_INFO", NTLMSSP_NEGOTIATE_TARGET_INFO, r);
72	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_VERSION", NTLMSSP_NEGOTIATE_VERSION, r);
73	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_128", NTLMSSP_NEGOTIATE_128, r);
74	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_KEY_EXCH", NTLMSSP_NEGOTIATE_KEY_EXCH, r);
75	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_56", NTLMSSP_NEGOTIATE_56, r);
76	ndr->depth--;
77}
78
79static enum ndr_err_code ndr_push_ntlmssp_WindowsMajorVersion(struct ndr_push *ndr, int ndr_flags, enum ntlmssp_WindowsMajorVersion r)
80{
81	NDR_CHECK(ndr_push_enum_uint8(ndr, NDR_SCALARS, r));
82	return NDR_ERR_SUCCESS;
83}
84
85static enum ndr_err_code ndr_pull_ntlmssp_WindowsMajorVersion(struct ndr_pull *ndr, int ndr_flags, enum ntlmssp_WindowsMajorVersion *r)
86{
87	uint8_t v;
88	NDR_CHECK(ndr_pull_enum_uint8(ndr, NDR_SCALARS, &v));
89	*r = v;
90	return NDR_ERR_SUCCESS;
91}
92
93_PUBLIC_ void ndr_print_ntlmssp_WindowsMajorVersion(struct ndr_print *ndr, const char *name, enum ntlmssp_WindowsMajorVersion r)
94{
95	const char *val = NULL;
96
97	switch (r) {
98		case NTLMSSP_WINDOWS_MAJOR_VERSION_5: val = "NTLMSSP_WINDOWS_MAJOR_VERSION_5"; break;
99		case NTLMSSP_WINDOWS_MAJOR_VERSION_6: val = "NTLMSSP_WINDOWS_MAJOR_VERSION_6"; break;
100	}
101	ndr_print_enum(ndr, name, "ENUM", val, r);
102}
103
104static enum ndr_err_code ndr_push_ntlmssp_WindowsMinorVersion(struct ndr_push *ndr, int ndr_flags, enum ntlmssp_WindowsMinorVersion r)
105{
106	NDR_CHECK(ndr_push_enum_uint8(ndr, NDR_SCALARS, r));
107	return NDR_ERR_SUCCESS;
108}
109
110static enum ndr_err_code ndr_pull_ntlmssp_WindowsMinorVersion(struct ndr_pull *ndr, int ndr_flags, enum ntlmssp_WindowsMinorVersion *r)
111{
112	uint8_t v;
113	NDR_CHECK(ndr_pull_enum_uint8(ndr, NDR_SCALARS, &v));
114	*r = v;
115	return NDR_ERR_SUCCESS;
116}
117
118_PUBLIC_ void ndr_print_ntlmssp_WindowsMinorVersion(struct ndr_print *ndr, const char *name, enum ntlmssp_WindowsMinorVersion r)
119{
120	const char *val = NULL;
121
122	switch (r) {
123		case NTLMSSP_WINDOWS_MINOR_VERSION_0: val = "NTLMSSP_WINDOWS_MINOR_VERSION_0"; break;
124		case NTLMSSP_WINDOWS_MINOR_VERSION_1: val = "NTLMSSP_WINDOWS_MINOR_VERSION_1"; break;
125		case NTLMSSP_WINDOWS_MINOR_VERSION_2: val = "NTLMSSP_WINDOWS_MINOR_VERSION_2"; break;
126	}
127	ndr_print_enum(ndr, name, "ENUM", val, r);
128}
129
130static enum ndr_err_code ndr_push_ntlmssp_NTLMRevisionCurrent(struct ndr_push *ndr, int ndr_flags, enum ntlmssp_NTLMRevisionCurrent r)
131{
132	NDR_CHECK(ndr_push_enum_uint8(ndr, NDR_SCALARS, r));
133	return NDR_ERR_SUCCESS;
134}
135
136static enum ndr_err_code ndr_pull_ntlmssp_NTLMRevisionCurrent(struct ndr_pull *ndr, int ndr_flags, enum ntlmssp_NTLMRevisionCurrent *r)
137{
138	uint8_t v;
139	NDR_CHECK(ndr_pull_enum_uint8(ndr, NDR_SCALARS, &v));
140	*r = v;
141	return NDR_ERR_SUCCESS;
142}
143
144_PUBLIC_ void ndr_print_ntlmssp_NTLMRevisionCurrent(struct ndr_print *ndr, const char *name, enum ntlmssp_NTLMRevisionCurrent r)
145{
146	const char *val = NULL;
147
148	switch (r) {
149		case NTLMSSP_REVISION_W2K3_RC1: val = "NTLMSSP_REVISION_W2K3_RC1"; break;
150		case NTLMSSP_REVISION_W2K3: val = "NTLMSSP_REVISION_W2K3"; break;
151	}
152	ndr_print_enum(ndr, name, "ENUM", val, r);
153}
154
155static enum ndr_err_code ndr_push_VERSION(struct ndr_push *ndr, int ndr_flags, const struct VERSION *r)
156{
157	if (ndr_flags & NDR_SCALARS) {
158		NDR_CHECK(ndr_push_align(ndr, 2));
159		NDR_CHECK(ndr_push_ntlmssp_WindowsMajorVersion(ndr, NDR_SCALARS, r->ProductMajorVersion));
160		NDR_CHECK(ndr_push_ntlmssp_WindowsMinorVersion(ndr, NDR_SCALARS, r->ProductMinorVersion));
161		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->ProductBuild));
162		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->Reserved, 3));
163		NDR_CHECK(ndr_push_ntlmssp_NTLMRevisionCurrent(ndr, NDR_SCALARS, r->NTLMRevisionCurrent));
164		NDR_CHECK(ndr_push_trailer_align(ndr, 2));
165	}
166	if (ndr_flags & NDR_BUFFERS) {
167	}
168	return NDR_ERR_SUCCESS;
169}
170
171static enum ndr_err_code ndr_pull_VERSION(struct ndr_pull *ndr, int ndr_flags, struct VERSION *r)
172{
173	if (ndr_flags & NDR_SCALARS) {
174		NDR_CHECK(ndr_pull_align(ndr, 2));
175		NDR_CHECK(ndr_pull_ntlmssp_WindowsMajorVersion(ndr, NDR_SCALARS, &r->ProductMajorVersion));
176		NDR_CHECK(ndr_pull_ntlmssp_WindowsMinorVersion(ndr, NDR_SCALARS, &r->ProductMinorVersion));
177		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->ProductBuild));
178		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Reserved, 3));
179		NDR_CHECK(ndr_pull_ntlmssp_NTLMRevisionCurrent(ndr, NDR_SCALARS, &r->NTLMRevisionCurrent));
180		NDR_CHECK(ndr_pull_trailer_align(ndr, 2));
181	}
182	if (ndr_flags & NDR_BUFFERS) {
183	}
184	return NDR_ERR_SUCCESS;
185}
186
187_PUBLIC_ void ndr_print_VERSION(struct ndr_print *ndr, const char *name, const struct VERSION *r)
188{
189	ndr_print_struct(ndr, name, "VERSION");
190	ndr->depth++;
191	ndr_print_ntlmssp_WindowsMajorVersion(ndr, "ProductMajorVersion", r->ProductMajorVersion);
192	ndr_print_ntlmssp_WindowsMinorVersion(ndr, "ProductMinorVersion", r->ProductMinorVersion);
193	ndr_print_uint16(ndr, "ProductBuild", r->ProductBuild);
194	ndr_print_array_uint8(ndr, "Reserved", r->Reserved, 3);
195	ndr_print_ntlmssp_NTLMRevisionCurrent(ndr, "NTLMRevisionCurrent", r->NTLMRevisionCurrent);
196	ndr->depth--;
197}
198
199static enum ndr_err_code ndr_push_ntlmssp_Version(struct ndr_push *ndr, int ndr_flags, const union ntlmssp_Version *r)
200{
201	if (ndr_flags & NDR_SCALARS) {
202		int level = ndr_push_get_switch_value(ndr, r);
203		NDR_CHECK(ndr_push_union_align(ndr, 2));
204		switch (level) {
205			case NTLMSSP_NEGOTIATE_VERSION: {
206				NDR_CHECK(ndr_push_VERSION(ndr, NDR_SCALARS, &r->version));
207			break; }
208
209			default: {
210			break; }
211
212		}
213	}
214	if (ndr_flags & NDR_BUFFERS) {
215		int level = ndr_push_get_switch_value(ndr, r);
216		switch (level) {
217			case NTLMSSP_NEGOTIATE_VERSION:
218			break;
219
220			default:
221			break;
222
223		}
224	}
225	return NDR_ERR_SUCCESS;
226}
227
228static enum ndr_err_code ndr_pull_ntlmssp_Version(struct ndr_pull *ndr, int ndr_flags, union ntlmssp_Version *r)
229{
230	int level;
231	level = ndr_pull_get_switch_value(ndr, r);
232	if (ndr_flags & NDR_SCALARS) {
233		NDR_CHECK(ndr_pull_union_align(ndr, 2));
234		switch (level) {
235			case NTLMSSP_NEGOTIATE_VERSION: {
236				NDR_CHECK(ndr_pull_VERSION(ndr, NDR_SCALARS, &r->version));
237			break; }
238
239			default: {
240			break; }
241
242		}
243	}
244	if (ndr_flags & NDR_BUFFERS) {
245		switch (level) {
246			case NTLMSSP_NEGOTIATE_VERSION:
247			break;
248
249			default:
250			break;
251
252		}
253	}
254	return NDR_ERR_SUCCESS;
255}
256
257_PUBLIC_ enum ndr_err_code ndr_push_NEGOTIATE_MESSAGE(struct ndr_push *ndr, int ndr_flags, const struct NEGOTIATE_MESSAGE *r)
258{
259	if (ndr_flags & NDR_SCALARS) {
260		NDR_CHECK(ndr_push_align(ndr, 5));
261		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, "NTLMSSP", 8, sizeof(uint8_t), CH_DOS));
262		NDR_CHECK(ndr_push_ntlmssp_MessageType(ndr, NDR_SCALARS, NtLmNegotiate));
263		NDR_CHECK(ndr_push_NEGOTIATE(ndr, NDR_SCALARS, r->NegotiateFlags));
264		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen(r->DomainName)));
265		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen(r->DomainName)));
266		{
267			uint32_t _flags_save_string = ndr->flags;
268			ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM));
269			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->DomainName));
270			ndr->flags = _flags_save_string;
271		}
272		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen(r->Workstation)));
273		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen(r->Workstation)));
274		{
275			uint32_t _flags_save_string = ndr->flags;
276			ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM));
277			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->Workstation));
278			ndr->flags = _flags_save_string;
279		}
280		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION));
281		NDR_CHECK(ndr_push_ntlmssp_Version(ndr, NDR_SCALARS, &r->Version));
282		NDR_CHECK(ndr_push_trailer_align(ndr, 5));
283	}
284	if (ndr_flags & NDR_BUFFERS) {
285		{
286			uint32_t _flags_save_string = ndr->flags;
287			ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM));
288			if (r->DomainName) {
289				NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->DomainName));
290				{
291					struct ndr_push *_ndr_DomainName;
292					NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_DomainName, 0, strlen(r->DomainName)));
293					NDR_CHECK(ndr_push_string(_ndr_DomainName, NDR_SCALARS, r->DomainName));
294					NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_DomainName, 0, strlen(r->DomainName)));
295				}
296				NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->DomainName));
297			}
298			ndr->flags = _flags_save_string;
299		}
300		{
301			uint32_t _flags_save_string = ndr->flags;
302			ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM));
303			if (r->Workstation) {
304				NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->Workstation));
305				{
306					struct ndr_push *_ndr_Workstation;
307					NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_Workstation, 0, strlen(r->Workstation)));
308					NDR_CHECK(ndr_push_string(_ndr_Workstation, NDR_SCALARS, r->Workstation));
309					NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_Workstation, 0, strlen(r->Workstation)));
310				}
311				NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->Workstation));
312			}
313			ndr->flags = _flags_save_string;
314		}
315		NDR_CHECK(ndr_push_ntlmssp_Version(ndr, NDR_BUFFERS, &r->Version));
316	}
317	return NDR_ERR_SUCCESS;
318}
319
320_PUBLIC_ enum ndr_err_code ndr_pull_NEGOTIATE_MESSAGE(struct ndr_pull *ndr, int ndr_flags, struct NEGOTIATE_MESSAGE *r)
321{
322	uint32_t _ptr_DomainName;
323	TALLOC_CTX *_mem_save_DomainName_0;
324	uint32_t _ptr_Workstation;
325	TALLOC_CTX *_mem_save_Workstation_0;
326	if (ndr_flags & NDR_SCALARS) {
327		NDR_CHECK(ndr_pull_align(ndr, 5));
328		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->Signature, 8, sizeof(uint8_t), CH_DOS));
329		NDR_CHECK(ndr_pull_ntlmssp_MessageType(ndr, NDR_SCALARS, &r->MessageType));
330		NDR_CHECK(ndr_pull_NEGOTIATE(ndr, NDR_SCALARS, &r->NegotiateFlags));
331		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->DomainNameLen));
332		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->DomainNameMaxLen));
333		{
334			uint32_t _flags_save_string = ndr->flags;
335			ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM));
336			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_DomainName));
337			if (_ptr_DomainName) {
338				NDR_PULL_ALLOC(ndr, r->DomainName);
339				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->DomainName, _ptr_DomainName));
340			} else {
341				r->DomainName = NULL;
342			}
343			ndr->flags = _flags_save_string;
344		}
345		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->WorkstationLen));
346		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->WorkstationMaxLen));
347		{
348			uint32_t _flags_save_string = ndr->flags;
349			ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM));
350			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Workstation));
351			if (_ptr_Workstation) {
352				NDR_PULL_ALLOC(ndr, r->Workstation);
353				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->Workstation, _ptr_Workstation));
354			} else {
355				r->Workstation = NULL;
356			}
357			ndr->flags = _flags_save_string;
358		}
359		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION));
360		NDR_CHECK(ndr_pull_ntlmssp_Version(ndr, NDR_SCALARS, &r->Version));
361		NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
362	}
363	if (ndr_flags & NDR_BUFFERS) {
364		{
365			uint32_t _flags_save_string = ndr->flags;
366			ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM));
367			if (r->DomainName) {
368				uint32_t _relative_save_offset;
369				_relative_save_offset = ndr->offset;
370				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->DomainName));
371				_mem_save_DomainName_0 = NDR_PULL_GET_MEM_CTX(ndr);
372				NDR_PULL_SET_MEM_CTX(ndr, r->DomainName, 0);
373				{
374					struct ndr_pull *_ndr_DomainName;
375					NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_DomainName, 0, r->DomainNameLen));
376					NDR_CHECK(ndr_pull_string(_ndr_DomainName, NDR_SCALARS, &r->DomainName));
377					NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_DomainName, 0, r->DomainNameLen));
378				}
379				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_DomainName_0, 0);
380				ndr->offset = _relative_save_offset;
381			}
382			ndr->flags = _flags_save_string;
383		}
384		{
385			uint32_t _flags_save_string = ndr->flags;
386			ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM));
387			if (r->Workstation) {
388				uint32_t _relative_save_offset;
389				_relative_save_offset = ndr->offset;
390				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->Workstation));
391				_mem_save_Workstation_0 = NDR_PULL_GET_MEM_CTX(ndr);
392				NDR_PULL_SET_MEM_CTX(ndr, r->Workstation, 0);
393				{
394					struct ndr_pull *_ndr_Workstation;
395					NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_Workstation, 0, r->WorkstationLen));
396					NDR_CHECK(ndr_pull_string(_ndr_Workstation, NDR_SCALARS, &r->Workstation));
397					NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_Workstation, 0, r->WorkstationLen));
398				}
399				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Workstation_0, 0);
400				ndr->offset = _relative_save_offset;
401			}
402			ndr->flags = _flags_save_string;
403		}
404		NDR_CHECK(ndr_pull_ntlmssp_Version(ndr, NDR_BUFFERS, &r->Version));
405	}
406	return NDR_ERR_SUCCESS;
407}
408
409_PUBLIC_ void ndr_print_NEGOTIATE_MESSAGE(struct ndr_print *ndr, const char *name, const struct NEGOTIATE_MESSAGE *r)
410{
411	ndr_print_struct(ndr, name, "NEGOTIATE_MESSAGE");
412	ndr->depth++;
413	ndr_print_string(ndr, "Signature", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?"NTLMSSP":r->Signature);
414	ndr_print_ntlmssp_MessageType(ndr, "MessageType", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?NtLmNegotiate:r->MessageType);
415	ndr_print_NEGOTIATE(ndr, "NegotiateFlags", r->NegotiateFlags);
416	ndr_print_uint16(ndr, "DomainNameLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen(r->DomainName):r->DomainNameLen);
417	ndr_print_uint16(ndr, "DomainNameMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->DomainNameLen:r->DomainNameMaxLen);
418	ndr_print_ptr(ndr, "DomainName", r->DomainName);
419	ndr->depth++;
420	if (r->DomainName) {
421		ndr_print_string(ndr, "DomainName", r->DomainName);
422	}
423	ndr->depth--;
424	ndr_print_uint16(ndr, "WorkstationLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen(r->Workstation):r->WorkstationLen);
425	ndr_print_uint16(ndr, "WorkstationMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->WorkstationLen:r->WorkstationMaxLen);
426	ndr_print_ptr(ndr, "Workstation", r->Workstation);
427	ndr->depth++;
428	if (r->Workstation) {
429		ndr_print_string(ndr, "Workstation", r->Workstation);
430	}
431	ndr->depth--;
432	ndr_print_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION);
433	ndr_print_ntlmssp_Version(ndr, "Version", &r->Version);
434	ndr->depth--;
435}
436
437static enum ndr_err_code ndr_push_ntlmssp_AvId(struct ndr_push *ndr, int ndr_flags, enum ntlmssp_AvId r)
438{
439	NDR_CHECK(ndr_push_enum_uint1632(ndr, NDR_SCALARS, r));
440	return NDR_ERR_SUCCESS;
441}
442
443static enum ndr_err_code ndr_pull_ntlmssp_AvId(struct ndr_pull *ndr, int ndr_flags, enum ntlmssp_AvId *r)
444{
445	uint16_t v;
446	NDR_CHECK(ndr_pull_enum_uint1632(ndr, NDR_SCALARS, &v));
447	*r = v;
448	return NDR_ERR_SUCCESS;
449}
450
451_PUBLIC_ void ndr_print_ntlmssp_AvId(struct ndr_print *ndr, const char *name, enum ntlmssp_AvId r)
452{
453	const char *val = NULL;
454
455	switch (r) {
456		case MsvAvEOL: val = "MsvAvEOL"; break;
457		case MsvAvNbComputerName: val = "MsvAvNbComputerName"; break;
458		case MsvAvNbDomainName: val = "MsvAvNbDomainName"; break;
459		case MsvAvDnsComputerName: val = "MsvAvDnsComputerName"; break;
460		case MsvAvDnsDomainName: val = "MsvAvDnsDomainName"; break;
461		case MsvAvDnsTreeName: val = "MsvAvDnsTreeName"; break;
462		case MsvAvFlags: val = "MsvAvFlags"; break;
463		case MsvAvTimestamp: val = "MsvAvTimestamp"; break;
464		case MsAvRestrictions: val = "MsAvRestrictions"; break;
465		case MsvAvTargetName: val = "MsvAvTargetName"; break;
466		case MsvChannelBindings: val = "MsvChannelBindings"; break;
467	}
468	ndr_print_enum(ndr, name, "ENUM", val, r);
469}
470
471static enum ndr_err_code ndr_push_Restriction_Encoding(struct ndr_push *ndr, int ndr_flags, const struct Restriction_Encoding *r)
472{
473	if (ndr_flags & NDR_SCALARS) {
474		NDR_CHECK(ndr_push_align(ndr, 4));
475		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->Size));
476		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
477		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->IntegrityLevel));
478		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->SubjectIntegrityLevel));
479		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->MachineId, 32));
480		NDR_CHECK(ndr_push_trailer_align(ndr, 4));
481	}
482	if (ndr_flags & NDR_BUFFERS) {
483	}
484	return NDR_ERR_SUCCESS;
485}
486
487static enum ndr_err_code ndr_pull_Restriction_Encoding(struct ndr_pull *ndr, int ndr_flags, struct Restriction_Encoding *r)
488{
489	if (ndr_flags & NDR_SCALARS) {
490		NDR_CHECK(ndr_pull_align(ndr, 4));
491		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Size));
492		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Z4));
493		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->IntegrityLevel));
494		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->SubjectIntegrityLevel));
495		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->MachineId, 32));
496		NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
497	}
498	if (ndr_flags & NDR_BUFFERS) {
499	}
500	return NDR_ERR_SUCCESS;
501}
502
503_PUBLIC_ void ndr_print_Restriction_Encoding(struct ndr_print *ndr, const char *name, const struct Restriction_Encoding *r)
504{
505	ndr_print_struct(ndr, name, "Restriction_Encoding");
506	ndr->depth++;
507	ndr_print_uint32(ndr, "Size", r->Size);
508	ndr_print_uint32(ndr, "Z4", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?0:r->Z4);
509	ndr_print_uint32(ndr, "IntegrityLevel", r->IntegrityLevel);
510	ndr_print_uint32(ndr, "SubjectIntegrityLevel", r->SubjectIntegrityLevel);
511	ndr_print_array_uint8(ndr, "MachineId", r->MachineId, 32);
512	ndr->depth--;
513}
514
515static enum ndr_err_code ndr_push_ntlmssp_AvFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
516{
517	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
518	return NDR_ERR_SUCCESS;
519}
520
521static enum ndr_err_code ndr_pull_ntlmssp_AvFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
522{
523	uint32_t v;
524	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
525	*r = v;
526	return NDR_ERR_SUCCESS;
527}
528
529_PUBLIC_ void ndr_print_ntlmssp_AvFlags(struct ndr_print *ndr, const char *name, uint32_t r)
530{
531	ndr_print_uint32(ndr, name, r);
532	ndr->depth++;
533	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_AVFLAG_CONSTRAINTED_ACCOUNT", NTLMSSP_AVFLAG_CONSTRAINTED_ACCOUNT, r);
534	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_AVFLAG_MIC_IN_AUTHENTICATE_MESSAGE", NTLMSSP_AVFLAG_MIC_IN_AUTHENTICATE_MESSAGE, r);
535	ndr->depth--;
536}
537
538static enum ndr_err_code ndr_push_ntlmssp_AvValue(struct ndr_push *ndr, int ndr_flags, const union ntlmssp_AvValue *r)
539{
540	{
541		uint32_t _flags_save_UNION = ndr->flags;
542		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
543		if (ndr_flags & NDR_SCALARS) {
544			int level = ndr_push_get_switch_value(ndr, r);
545			NDR_CHECK(ndr_push_union_align(ndr, 4));
546			switch (level) {
547				case MsvAvEOL: {
548				break; }
549
550				case MsvAvNbComputerName: {
551					{
552						uint32_t _flags_save_string = ndr->flags;
553						ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE));
554						NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->AvNbComputerName));
555						ndr->flags = _flags_save_string;
556					}
557				break; }
558
559				case MsvAvNbDomainName: {
560					{
561						uint32_t _flags_save_string = ndr->flags;
562						ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE));
563						NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->AvNbDomainName));
564						ndr->flags = _flags_save_string;
565					}
566				break; }
567
568				case MsvAvDnsComputerName: {
569					{
570						uint32_t _flags_save_string = ndr->flags;
571						ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE));
572						NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->AvDnsComputerName));
573						ndr->flags = _flags_save_string;
574					}
575				break; }
576
577				case MsvAvDnsDomainName: {
578					{
579						uint32_t _flags_save_string = ndr->flags;
580						ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE));
581						NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->AvDnsDomainName));
582						ndr->flags = _flags_save_string;
583					}
584				break; }
585
586				case MsvAvDnsTreeName: {
587					{
588						uint32_t _flags_save_string = ndr->flags;
589						ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE));
590						NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->AvDnsTreeName));
591						ndr->flags = _flags_save_string;
592					}
593				break; }
594
595				case MsvAvFlags: {
596					NDR_CHECK(ndr_push_ntlmssp_AvFlags(ndr, NDR_SCALARS, r->AvFlags));
597				break; }
598
599				case MsvAvTimestamp: {
600					NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->AvTimestamp));
601				break; }
602
603				case MsAvRestrictions: {
604					NDR_CHECK(ndr_push_Restriction_Encoding(ndr, NDR_SCALARS, &r->AvRestrictions));
605				break; }
606
607				case MsvAvTargetName: {
608					{
609						uint32_t _flags_save_string = ndr->flags;
610						ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE));
611						NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->AvTargetName));
612						ndr->flags = _flags_save_string;
613					}
614				break; }
615
616				case MsvChannelBindings: {
617					NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->ChannelBindings, 16));
618				break; }
619
620				default: {
621					{
622						uint32_t _flags_save_DATA_BLOB = ndr->flags;
623						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
624						NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->blob));
625						ndr->flags = _flags_save_DATA_BLOB;
626					}
627				break; }
628
629			}
630		}
631		if (ndr_flags & NDR_BUFFERS) {
632			int level = ndr_push_get_switch_value(ndr, r);
633			switch (level) {
634				case MsvAvEOL:
635				break;
636
637				case MsvAvNbComputerName:
638				break;
639
640				case MsvAvNbDomainName:
641				break;
642
643				case MsvAvDnsComputerName:
644				break;
645
646				case MsvAvDnsDomainName:
647				break;
648
649				case MsvAvDnsTreeName:
650				break;
651
652				case MsvAvFlags:
653				break;
654
655				case MsvAvTimestamp:
656				break;
657
658				case MsAvRestrictions:
659				break;
660
661				case MsvAvTargetName:
662				break;
663
664				case MsvChannelBindings:
665				break;
666
667				default:
668				break;
669
670			}
671		}
672		ndr->flags = _flags_save_UNION;
673	}
674	return NDR_ERR_SUCCESS;
675}
676
677static enum ndr_err_code ndr_pull_ntlmssp_AvValue(struct ndr_pull *ndr, int ndr_flags, union ntlmssp_AvValue *r)
678{
679	int level;
680	{
681		uint32_t _flags_save_UNION = ndr->flags;
682		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
683		level = ndr_pull_get_switch_value(ndr, r);
684		if (ndr_flags & NDR_SCALARS) {
685			NDR_CHECK(ndr_pull_union_align(ndr, 4));
686			switch (level) {
687				case MsvAvEOL: {
688				break; }
689
690				case MsvAvNbComputerName: {
691					{
692						uint32_t _flags_save_string = ndr->flags;
693						ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE));
694						NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->AvNbComputerName));
695						ndr->flags = _flags_save_string;
696					}
697				break; }
698
699				case MsvAvNbDomainName: {
700					{
701						uint32_t _flags_save_string = ndr->flags;
702						ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE));
703						NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->AvNbDomainName));
704						ndr->flags = _flags_save_string;
705					}
706				break; }
707
708				case MsvAvDnsComputerName: {
709					{
710						uint32_t _flags_save_string = ndr->flags;
711						ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE));
712						NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->AvDnsComputerName));
713						ndr->flags = _flags_save_string;
714					}
715				break; }
716
717				case MsvAvDnsDomainName: {
718					{
719						uint32_t _flags_save_string = ndr->flags;
720						ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE));
721						NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->AvDnsDomainName));
722						ndr->flags = _flags_save_string;
723					}
724				break; }
725
726				case MsvAvDnsTreeName: {
727					{
728						uint32_t _flags_save_string = ndr->flags;
729						ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE));
730						NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->AvDnsTreeName));
731						ndr->flags = _flags_save_string;
732					}
733				break; }
734
735				case MsvAvFlags: {
736					NDR_CHECK(ndr_pull_ntlmssp_AvFlags(ndr, NDR_SCALARS, &r->AvFlags));
737				break; }
738
739				case MsvAvTimestamp: {
740					NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->AvTimestamp));
741				break; }
742
743				case MsAvRestrictions: {
744					NDR_CHECK(ndr_pull_Restriction_Encoding(ndr, NDR_SCALARS, &r->AvRestrictions));
745				break; }
746
747				case MsvAvTargetName: {
748					{
749						uint32_t _flags_save_string = ndr->flags;
750						ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE));
751						NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->AvTargetName));
752						ndr->flags = _flags_save_string;
753					}
754				break; }
755
756				case MsvChannelBindings: {
757					NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->ChannelBindings, 16));
758				break; }
759
760				default: {
761					{
762						uint32_t _flags_save_DATA_BLOB = ndr->flags;
763						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
764						NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->blob));
765						ndr->flags = _flags_save_DATA_BLOB;
766					}
767				break; }
768
769			}
770		}
771		if (ndr_flags & NDR_BUFFERS) {
772			switch (level) {
773				case MsvAvEOL:
774				break;
775
776				case MsvAvNbComputerName:
777				break;
778
779				case MsvAvNbDomainName:
780				break;
781
782				case MsvAvDnsComputerName:
783				break;
784
785				case MsvAvDnsDomainName:
786				break;
787
788				case MsvAvDnsTreeName:
789				break;
790
791				case MsvAvFlags:
792				break;
793
794				case MsvAvTimestamp:
795				break;
796
797				case MsAvRestrictions:
798				break;
799
800				case MsvAvTargetName:
801				break;
802
803				case MsvChannelBindings:
804				break;
805
806				default:
807				break;
808
809			}
810		}
811		ndr->flags = _flags_save_UNION;
812	}
813	return NDR_ERR_SUCCESS;
814}
815
816_PUBLIC_ void ndr_print_ntlmssp_AvValue(struct ndr_print *ndr, const char *name, const union ntlmssp_AvValue *r)
817{
818	int level;
819	{
820		uint32_t _flags_save_UNION = ndr->flags;
821		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
822		level = ndr_print_get_switch_value(ndr, r);
823		ndr_print_union(ndr, name, level, "ntlmssp_AvValue");
824		switch (level) {
825			case MsvAvEOL:
826			break;
827
828			case MsvAvNbComputerName:
829				ndr_print_string(ndr, "AvNbComputerName", r->AvNbComputerName);
830			break;
831
832			case MsvAvNbDomainName:
833				ndr_print_string(ndr, "AvNbDomainName", r->AvNbDomainName);
834			break;
835
836			case MsvAvDnsComputerName:
837				ndr_print_string(ndr, "AvDnsComputerName", r->AvDnsComputerName);
838			break;
839
840			case MsvAvDnsDomainName:
841				ndr_print_string(ndr, "AvDnsDomainName", r->AvDnsDomainName);
842			break;
843
844			case MsvAvDnsTreeName:
845				ndr_print_string(ndr, "AvDnsTreeName", r->AvDnsTreeName);
846			break;
847
848			case MsvAvFlags:
849				ndr_print_ntlmssp_AvFlags(ndr, "AvFlags", r->AvFlags);
850			break;
851
852			case MsvAvTimestamp:
853				ndr_print_NTTIME(ndr, "AvTimestamp", r->AvTimestamp);
854			break;
855
856			case MsAvRestrictions:
857				ndr_print_Restriction_Encoding(ndr, "AvRestrictions", &r->AvRestrictions);
858			break;
859
860			case MsvAvTargetName:
861				ndr_print_string(ndr, "AvTargetName", r->AvTargetName);
862			break;
863
864			case MsvChannelBindings:
865				ndr_print_array_uint8(ndr, "ChannelBindings", r->ChannelBindings, 16);
866			break;
867
868			default:
869				ndr_print_DATA_BLOB(ndr, "blob", r->blob);
870			break;
871
872		}
873		ndr->flags = _flags_save_UNION;
874	}
875}
876
877static size_t ndr_size_ntlmssp_AvValue(const union ntlmssp_AvValue *r, uint32_t level, struct smb_iconv_convenience *ic, int flags)
878{
879	flags |= LIBNDR_FLAG_NOALIGN;
880	return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_ntlmssp_AvValue, ic);
881}
882
883_PUBLIC_ enum ndr_err_code ndr_push_AV_PAIR(struct ndr_push *ndr, int ndr_flags, const struct AV_PAIR *r)
884{
885	{
886		uint32_t _flags_save_STRUCT = ndr->flags;
887		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
888		if (ndr_flags & NDR_SCALARS) {
889			NDR_CHECK(ndr_push_align(ndr, 4));
890			NDR_CHECK(ndr_push_ntlmssp_AvId(ndr, NDR_SCALARS, r->AvId));
891			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_ntlmssp_AvValue(&r->Value, r->AvId, ndr->iconv_convenience, 0)));
892			{
893				struct ndr_push *_ndr_Value;
894				NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_Value, 0, ndr_size_ntlmssp_AvValue(&r->Value, r->AvId, ndr->iconv_convenience, 0)));
895				NDR_CHECK(ndr_push_set_switch_value(_ndr_Value, &r->Value, r->AvId));
896				NDR_CHECK(ndr_push_ntlmssp_AvValue(_ndr_Value, NDR_SCALARS|NDR_BUFFERS, &r->Value));
897				NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_Value, 0, ndr_size_ntlmssp_AvValue(&r->Value, r->AvId, ndr->iconv_convenience, 0)));
898			}
899			NDR_CHECK(ndr_push_trailer_align(ndr, 4));
900		}
901		if (ndr_flags & NDR_BUFFERS) {
902		}
903		ndr->flags = _flags_save_STRUCT;
904	}
905	return NDR_ERR_SUCCESS;
906}
907
908_PUBLIC_ enum ndr_err_code ndr_pull_AV_PAIR(struct ndr_pull *ndr, int ndr_flags, struct AV_PAIR *r)
909{
910	{
911		uint32_t _flags_save_STRUCT = ndr->flags;
912		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
913		if (ndr_flags & NDR_SCALARS) {
914			NDR_CHECK(ndr_pull_align(ndr, 4));
915			NDR_CHECK(ndr_pull_ntlmssp_AvId(ndr, NDR_SCALARS, &r->AvId));
916			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->AvLen));
917			{
918				struct ndr_pull *_ndr_Value;
919				NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_Value, 0, r->AvLen));
920				NDR_CHECK(ndr_pull_set_switch_value(_ndr_Value, &r->Value, r->AvId));
921				NDR_CHECK(ndr_pull_ntlmssp_AvValue(_ndr_Value, NDR_SCALARS|NDR_BUFFERS, &r->Value));
922				NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_Value, 0, r->AvLen));
923			}
924			NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
925		}
926		if (ndr_flags & NDR_BUFFERS) {
927		}
928		ndr->flags = _flags_save_STRUCT;
929	}
930	return NDR_ERR_SUCCESS;
931}
932
933_PUBLIC_ void ndr_print_AV_PAIR(struct ndr_print *ndr, const char *name, const struct AV_PAIR *r)
934{
935	ndr_print_struct(ndr, name, "AV_PAIR");
936	{
937		uint32_t _flags_save_STRUCT = ndr->flags;
938		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
939		ndr->depth++;
940		ndr_print_ntlmssp_AvId(ndr, "AvId", r->AvId);
941		ndr_print_uint16(ndr, "AvLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_ntlmssp_AvValue(&r->Value, r->AvId, ndr->iconv_convenience, 0):r->AvLen);
942		ndr_print_set_switch_value(ndr, &r->Value, r->AvId);
943		ndr_print_ntlmssp_AvValue(ndr, "Value", &r->Value);
944		ndr->depth--;
945		ndr->flags = _flags_save_STRUCT;
946	}
947}
948
949_PUBLIC_ void ndr_print_AV_PAIR_LIST(struct ndr_print *ndr, const char *name, const struct AV_PAIR_LIST *r)
950{
951	uint32_t cntr_pair_0;
952	ndr_print_struct(ndr, name, "AV_PAIR_LIST");
953	{
954		uint32_t _flags_save_STRUCT = ndr->flags;
955		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
956		ndr->depth++;
957		ndr_print_uint32(ndr, "count", r->count);
958		ndr->print(ndr, "%s: ARRAY(%d)", "pair", (int)r->count);
959		ndr->depth++;
960		for (cntr_pair_0=0;cntr_pair_0<r->count;cntr_pair_0++) {
961			char *idx_0=NULL;
962			if (asprintf(&idx_0, "[%d]", cntr_pair_0) != -1) {
963				ndr_print_AV_PAIR(ndr, "pair", &r->pair[cntr_pair_0]);
964				free(idx_0);
965			}
966		}
967		ndr->depth--;
968		ndr->depth--;
969		ndr->flags = _flags_save_STRUCT;
970	}
971}
972
973static size_t ndr_size_AV_PAIR_LIST(const struct AV_PAIR_LIST *r, struct smb_iconv_convenience *ic, int flags)
974{
975	flags |= LIBNDR_FLAG_NOALIGN;
976	return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_AV_PAIR_LIST, ic);
977}
978
979_PUBLIC_ enum ndr_err_code ndr_push_CHALLENGE_MESSAGE(struct ndr_push *ndr, int ndr_flags, const struct CHALLENGE_MESSAGE *r)
980{
981	{
982		uint32_t _flags_save_STRUCT = ndr->flags;
983		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
984		if (ndr_flags & NDR_SCALARS) {
985			NDR_CHECK(ndr_push_align(ndr, 5));
986			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, "NTLMSSP", 8, sizeof(uint8_t), CH_DOS));
987			NDR_CHECK(ndr_push_ntlmssp_MessageType(ndr, NDR_SCALARS, NtLmChallenge));
988			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->TargetName)));
989			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->TargetName)));
990			{
991				uint32_t _flags_save_string = ndr->flags;
992				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
993				NDR_CHECK(ndr_push_relative_ptr1(ndr, r->TargetName));
994				ndr->flags = _flags_save_string;
995			}
996			NDR_CHECK(ndr_push_NEGOTIATE(ndr, NDR_SCALARS, r->NegotiateFlags));
997			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->ServerChallenge, 8));
998			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->Reserved, 8));
999			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_AV_PAIR_LIST(r->TargetInfo, ndr->iconv_convenience, ndr->flags)));
1000			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_AV_PAIR_LIST(r->TargetInfo, ndr->iconv_convenience, ndr->flags)));
1001			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->TargetInfo));
1002			NDR_CHECK(ndr_push_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION));
1003			NDR_CHECK(ndr_push_ntlmssp_Version(ndr, NDR_SCALARS, &r->Version));
1004			NDR_CHECK(ndr_push_trailer_align(ndr, 5));
1005		}
1006		if (ndr_flags & NDR_BUFFERS) {
1007			{
1008				uint32_t _flags_save_string = ndr->flags;
1009				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
1010				if (r->TargetName) {
1011					NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->TargetName));
1012					{
1013						struct ndr_push *_ndr_TargetName;
1014						NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_TargetName, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->TargetName)));
1015						NDR_CHECK(ndr_push_string(_ndr_TargetName, NDR_SCALARS, r->TargetName));
1016						NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_TargetName, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->TargetName)));
1017					}
1018					NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->TargetName));
1019				}
1020				ndr->flags = _flags_save_string;
1021			}
1022			if (r->TargetInfo) {
1023				NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->TargetInfo));
1024				{
1025					struct ndr_push *_ndr_TargetInfo;
1026					NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_TargetInfo, 0, ndr_size_AV_PAIR_LIST(r->TargetInfo, ndr->iconv_convenience, ndr->flags)));
1027					NDR_CHECK(ndr_push_AV_PAIR_LIST(_ndr_TargetInfo, NDR_SCALARS|NDR_BUFFERS, r->TargetInfo));
1028					NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_TargetInfo, 0, ndr_size_AV_PAIR_LIST(r->TargetInfo, ndr->iconv_convenience, ndr->flags)));
1029				}
1030				NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->TargetInfo));
1031			}
1032			NDR_CHECK(ndr_push_ntlmssp_Version(ndr, NDR_BUFFERS, &r->Version));
1033		}
1034		ndr->flags = _flags_save_STRUCT;
1035	}
1036	return NDR_ERR_SUCCESS;
1037}
1038
1039_PUBLIC_ enum ndr_err_code ndr_pull_CHALLENGE_MESSAGE(struct ndr_pull *ndr, int ndr_flags, struct CHALLENGE_MESSAGE *r)
1040{
1041	uint32_t _ptr_TargetName;
1042	TALLOC_CTX *_mem_save_TargetName_0;
1043	uint32_t _ptr_TargetInfo;
1044	TALLOC_CTX *_mem_save_TargetInfo_0;
1045	{
1046		uint32_t _flags_save_STRUCT = ndr->flags;
1047		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1048		if (ndr_flags & NDR_SCALARS) {
1049			NDR_CHECK(ndr_pull_align(ndr, 5));
1050			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->Signature, 8, sizeof(uint8_t), CH_DOS));
1051			NDR_CHECK(ndr_pull_ntlmssp_MessageType(ndr, NDR_SCALARS, &r->MessageType));
1052			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->TargetNameLen));
1053			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->TargetNameMaxLen));
1054			{
1055				uint32_t _flags_save_string = ndr->flags;
1056				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
1057				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_TargetName));
1058				if (_ptr_TargetName) {
1059					NDR_PULL_ALLOC(ndr, r->TargetName);
1060					NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->TargetName, _ptr_TargetName));
1061				} else {
1062					r->TargetName = NULL;
1063				}
1064				ndr->flags = _flags_save_string;
1065			}
1066			NDR_CHECK(ndr_pull_NEGOTIATE(ndr, NDR_SCALARS, &r->NegotiateFlags));
1067			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->ServerChallenge, 8));
1068			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Reserved, 8));
1069			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->TargetInfoLen));
1070			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->TargetNameInfoMaxLen));
1071			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_TargetInfo));
1072			if (_ptr_TargetInfo) {
1073				NDR_PULL_ALLOC(ndr, r->TargetInfo);
1074				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->TargetInfo, _ptr_TargetInfo));
1075			} else {
1076				r->TargetInfo = NULL;
1077			}
1078			NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION));
1079			NDR_CHECK(ndr_pull_ntlmssp_Version(ndr, NDR_SCALARS, &r->Version));
1080			NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
1081		}
1082		if (ndr_flags & NDR_BUFFERS) {
1083			{
1084				uint32_t _flags_save_string = ndr->flags;
1085				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
1086				if (r->TargetName) {
1087					uint32_t _relative_save_offset;
1088					_relative_save_offset = ndr->offset;
1089					NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->TargetName));
1090					_mem_save_TargetName_0 = NDR_PULL_GET_MEM_CTX(ndr);
1091					NDR_PULL_SET_MEM_CTX(ndr, r->TargetName, 0);
1092					{
1093						struct ndr_pull *_ndr_TargetName;
1094						NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_TargetName, 0, r->TargetNameLen));
1095						NDR_CHECK(ndr_pull_string(_ndr_TargetName, NDR_SCALARS, &r->TargetName));
1096						NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_TargetName, 0, r->TargetNameLen));
1097					}
1098					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_TargetName_0, 0);
1099					ndr->offset = _relative_save_offset;
1100				}
1101				ndr->flags = _flags_save_string;
1102			}
1103			if (r->TargetInfo) {
1104				uint32_t _relative_save_offset;
1105				_relative_save_offset = ndr->offset;
1106				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->TargetInfo));
1107				_mem_save_TargetInfo_0 = NDR_PULL_GET_MEM_CTX(ndr);
1108				NDR_PULL_SET_MEM_CTX(ndr, r->TargetInfo, 0);
1109				{
1110					struct ndr_pull *_ndr_TargetInfo;
1111					NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_TargetInfo, 0, r->TargetInfoLen));
1112					NDR_CHECK(ndr_pull_AV_PAIR_LIST(_ndr_TargetInfo, NDR_SCALARS|NDR_BUFFERS, r->TargetInfo));
1113					NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_TargetInfo, 0, r->TargetInfoLen));
1114				}
1115				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_TargetInfo_0, 0);
1116				ndr->offset = _relative_save_offset;
1117			}
1118			NDR_CHECK(ndr_pull_ntlmssp_Version(ndr, NDR_BUFFERS, &r->Version));
1119		}
1120		ndr->flags = _flags_save_STRUCT;
1121	}
1122	return NDR_ERR_SUCCESS;
1123}
1124
1125_PUBLIC_ void ndr_print_CHALLENGE_MESSAGE(struct ndr_print *ndr, const char *name, const struct CHALLENGE_MESSAGE *r)
1126{
1127	ndr_print_struct(ndr, name, "CHALLENGE_MESSAGE");
1128	{
1129		uint32_t _flags_save_STRUCT = ndr->flags;
1130		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1131		ndr->depth++;
1132		ndr_print_string(ndr, "Signature", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?"NTLMSSP":r->Signature);
1133		ndr_print_ntlmssp_MessageType(ndr, "MessageType", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?NtLmChallenge:r->MessageType);
1134		ndr_print_uint16(ndr, "TargetNameLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_ntlmssp_string_length(r->NegotiateFlags, r->TargetName):r->TargetNameLen);
1135		ndr_print_uint16(ndr, "TargetNameMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->TargetNameLen:r->TargetNameMaxLen);
1136		ndr_print_ptr(ndr, "TargetName", r->TargetName);
1137		ndr->depth++;
1138		if (r->TargetName) {
1139			ndr_print_string(ndr, "TargetName", r->TargetName);
1140		}
1141		ndr->depth--;
1142		ndr_print_NEGOTIATE(ndr, "NegotiateFlags", r->NegotiateFlags);
1143		ndr_print_array_uint8(ndr, "ServerChallenge", r->ServerChallenge, 8);
1144		ndr_print_array_uint8(ndr, "Reserved", r->Reserved, 8);
1145		ndr_print_uint16(ndr, "TargetInfoLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_AV_PAIR_LIST(r->TargetInfo, ndr->iconv_convenience, ndr->flags):r->TargetInfoLen);
1146		ndr_print_uint16(ndr, "TargetNameInfoMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->TargetInfoLen:r->TargetNameInfoMaxLen);
1147		ndr_print_ptr(ndr, "TargetInfo", r->TargetInfo);
1148		ndr->depth++;
1149		if (r->TargetInfo) {
1150			ndr_print_AV_PAIR_LIST(ndr, "TargetInfo", r->TargetInfo);
1151		}
1152		ndr->depth--;
1153		ndr_print_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION);
1154		ndr_print_ntlmssp_Version(ndr, "Version", &r->Version);
1155		ndr->depth--;
1156		ndr->flags = _flags_save_STRUCT;
1157	}
1158}
1159
1160_PUBLIC_ enum ndr_err_code ndr_push_LM_RESPONSE(struct ndr_push *ndr, int ndr_flags, const struct LM_RESPONSE *r)
1161{
1162	{
1163		uint32_t _flags_save_STRUCT = ndr->flags;
1164		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1165		if (ndr_flags & NDR_SCALARS) {
1166			NDR_CHECK(ndr_push_align(ndr, 1));
1167			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->Response, 24));
1168			NDR_CHECK(ndr_push_trailer_align(ndr, 1));
1169		}
1170		if (ndr_flags & NDR_BUFFERS) {
1171		}
1172		ndr->flags = _flags_save_STRUCT;
1173	}
1174	return NDR_ERR_SUCCESS;
1175}
1176
1177_PUBLIC_ enum ndr_err_code ndr_pull_LM_RESPONSE(struct ndr_pull *ndr, int ndr_flags, struct LM_RESPONSE *r)
1178{
1179	{
1180		uint32_t _flags_save_STRUCT = ndr->flags;
1181		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1182		if (ndr_flags & NDR_SCALARS) {
1183			NDR_CHECK(ndr_pull_align(ndr, 1));
1184			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Response, 24));
1185			NDR_CHECK(ndr_pull_trailer_align(ndr, 1));
1186		}
1187		if (ndr_flags & NDR_BUFFERS) {
1188		}
1189		ndr->flags = _flags_save_STRUCT;
1190	}
1191	return NDR_ERR_SUCCESS;
1192}
1193
1194_PUBLIC_ void ndr_print_LM_RESPONSE(struct ndr_print *ndr, const char *name, const struct LM_RESPONSE *r)
1195{
1196	ndr_print_struct(ndr, name, "LM_RESPONSE");
1197	{
1198		uint32_t _flags_save_STRUCT = ndr->flags;
1199		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1200		ndr->depth++;
1201		ndr_print_array_uint8(ndr, "Response", r->Response, 24);
1202		ndr->depth--;
1203		ndr->flags = _flags_save_STRUCT;
1204	}
1205}
1206
1207_PUBLIC_ enum ndr_err_code ndr_push_LMv2_RESPONSE(struct ndr_push *ndr, int ndr_flags, const struct LMv2_RESPONSE *r)
1208{
1209	{
1210		uint32_t _flags_save_STRUCT = ndr->flags;
1211		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1212		if (ndr_flags & NDR_SCALARS) {
1213			NDR_CHECK(ndr_push_align(ndr, 1));
1214			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->Response, 16));
1215			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->ChallengeFromClient, 8));
1216			NDR_CHECK(ndr_push_trailer_align(ndr, 1));
1217		}
1218		if (ndr_flags & NDR_BUFFERS) {
1219		}
1220		ndr->flags = _flags_save_STRUCT;
1221	}
1222	return NDR_ERR_SUCCESS;
1223}
1224
1225_PUBLIC_ enum ndr_err_code ndr_pull_LMv2_RESPONSE(struct ndr_pull *ndr, int ndr_flags, struct LMv2_RESPONSE *r)
1226{
1227	{
1228		uint32_t _flags_save_STRUCT = ndr->flags;
1229		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1230		if (ndr_flags & NDR_SCALARS) {
1231			NDR_CHECK(ndr_pull_align(ndr, 1));
1232			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Response, 16));
1233			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->ChallengeFromClient, 8));
1234			NDR_CHECK(ndr_pull_trailer_align(ndr, 1));
1235		}
1236		if (ndr_flags & NDR_BUFFERS) {
1237		}
1238		ndr->flags = _flags_save_STRUCT;
1239	}
1240	return NDR_ERR_SUCCESS;
1241}
1242
1243_PUBLIC_ void ndr_print_LMv2_RESPONSE(struct ndr_print *ndr, const char *name, const struct LMv2_RESPONSE *r)
1244{
1245	ndr_print_struct(ndr, name, "LMv2_RESPONSE");
1246	{
1247		uint32_t _flags_save_STRUCT = ndr->flags;
1248		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1249		ndr->depth++;
1250		ndr_print_array_uint8(ndr, "Response", r->Response, 16);
1251		ndr_print_array_uint8(ndr, "ChallengeFromClient", r->ChallengeFromClient, 8);
1252		ndr->depth--;
1253		ndr->flags = _flags_save_STRUCT;
1254	}
1255}
1256
1257static enum ndr_err_code ndr_push_ntlmssp_LM_RESPONSE(struct ndr_push *ndr, int ndr_flags, const union ntlmssp_LM_RESPONSE *r)
1258{
1259	if (ndr_flags & NDR_SCALARS) {
1260		int level = ndr_push_get_switch_value(ndr, r);
1261		NDR_CHECK(ndr_push_union_align(ndr, 1));
1262		switch (level) {
1263			case 24: {
1264				NDR_CHECK(ndr_push_LM_RESPONSE(ndr, NDR_SCALARS, &r->v1));
1265			break; }
1266
1267			default: {
1268			break; }
1269
1270		}
1271	}
1272	if (ndr_flags & NDR_BUFFERS) {
1273		int level = ndr_push_get_switch_value(ndr, r);
1274		switch (level) {
1275			case 24:
1276			break;
1277
1278			default:
1279			break;
1280
1281		}
1282	}
1283	return NDR_ERR_SUCCESS;
1284}
1285
1286static enum ndr_err_code ndr_pull_ntlmssp_LM_RESPONSE(struct ndr_pull *ndr, int ndr_flags, union ntlmssp_LM_RESPONSE *r)
1287{
1288	int level;
1289	level = ndr_pull_get_switch_value(ndr, r);
1290	if (ndr_flags & NDR_SCALARS) {
1291		NDR_CHECK(ndr_pull_union_align(ndr, 1));
1292		switch (level) {
1293			case 24: {
1294				NDR_CHECK(ndr_pull_LM_RESPONSE(ndr, NDR_SCALARS, &r->v1));
1295			break; }
1296
1297			default: {
1298			break; }
1299
1300		}
1301	}
1302	if (ndr_flags & NDR_BUFFERS) {
1303		switch (level) {
1304			case 24:
1305			break;
1306
1307			default:
1308			break;
1309
1310		}
1311	}
1312	return NDR_ERR_SUCCESS;
1313}
1314
1315_PUBLIC_ void ndr_print_ntlmssp_LM_RESPONSE(struct ndr_print *ndr, const char *name, const union ntlmssp_LM_RESPONSE *r)
1316{
1317	int level;
1318	level = ndr_print_get_switch_value(ndr, r);
1319	ndr_print_union(ndr, name, level, "ntlmssp_LM_RESPONSE");
1320	switch (level) {
1321		case 24:
1322			ndr_print_LM_RESPONSE(ndr, "v1", &r->v1);
1323		break;
1324
1325		default:
1326		break;
1327
1328	}
1329}
1330
1331_PUBLIC_ enum ndr_err_code ndr_push_NTLM_RESPONSE(struct ndr_push *ndr, int ndr_flags, const struct NTLM_RESPONSE *r)
1332{
1333	{
1334		uint32_t _flags_save_STRUCT = ndr->flags;
1335		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1336		if (ndr_flags & NDR_SCALARS) {
1337			NDR_CHECK(ndr_push_align(ndr, 1));
1338			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->Response, 24));
1339			NDR_CHECK(ndr_push_trailer_align(ndr, 1));
1340		}
1341		if (ndr_flags & NDR_BUFFERS) {
1342		}
1343		ndr->flags = _flags_save_STRUCT;
1344	}
1345	return NDR_ERR_SUCCESS;
1346}
1347
1348_PUBLIC_ enum ndr_err_code ndr_pull_NTLM_RESPONSE(struct ndr_pull *ndr, int ndr_flags, struct NTLM_RESPONSE *r)
1349{
1350	{
1351		uint32_t _flags_save_STRUCT = ndr->flags;
1352		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1353		if (ndr_flags & NDR_SCALARS) {
1354			NDR_CHECK(ndr_pull_align(ndr, 1));
1355			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Response, 24));
1356			NDR_CHECK(ndr_pull_trailer_align(ndr, 1));
1357		}
1358		if (ndr_flags & NDR_BUFFERS) {
1359		}
1360		ndr->flags = _flags_save_STRUCT;
1361	}
1362	return NDR_ERR_SUCCESS;
1363}
1364
1365_PUBLIC_ void ndr_print_NTLM_RESPONSE(struct ndr_print *ndr, const char *name, const struct NTLM_RESPONSE *r)
1366{
1367	ndr_print_struct(ndr, name, "NTLM_RESPONSE");
1368	{
1369		uint32_t _flags_save_STRUCT = ndr->flags;
1370		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1371		ndr->depth++;
1372		ndr_print_array_uint8(ndr, "Response", r->Response, 24);
1373		ndr->depth--;
1374		ndr->flags = _flags_save_STRUCT;
1375	}
1376}
1377
1378static enum ndr_err_code ndr_push_NTLMv2_CLIENT_CHALLENGE(struct ndr_push *ndr, int ndr_flags, const struct NTLMv2_CLIENT_CHALLENGE *r)
1379{
1380	{
1381		uint32_t _flags_save_STRUCT = ndr->flags;
1382		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1383		if (ndr_flags & NDR_SCALARS) {
1384			NDR_CHECK(ndr_push_align(ndr, 4));
1385			NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, 1));
1386			NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, 1));
1387			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->Reserved1));
1388			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->Reserved2));
1389			NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->TimeStamp));
1390			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->ChallengeFromClient, 8));
1391			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->Reserved3));
1392			{
1393				uint32_t _flags_save_AV_PAIR_LIST = ndr->flags;
1394				ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
1395				{
1396					struct ndr_push *_ndr_AvPairs;
1397					NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_AvPairs, 0, -1));
1398					NDR_CHECK(ndr_push_AV_PAIR_LIST(_ndr_AvPairs, NDR_SCALARS|NDR_BUFFERS, &r->AvPairs));
1399					NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_AvPairs, 0, -1));
1400				}
1401				ndr->flags = _flags_save_AV_PAIR_LIST;
1402			}
1403			NDR_CHECK(ndr_push_trailer_align(ndr, 4));
1404		}
1405		if (ndr_flags & NDR_BUFFERS) {
1406			{
1407				uint32_t _flags_save_AV_PAIR_LIST = ndr->flags;
1408				ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
1409				ndr->flags = _flags_save_AV_PAIR_LIST;
1410			}
1411		}
1412		ndr->flags = _flags_save_STRUCT;
1413	}
1414	return NDR_ERR_SUCCESS;
1415}
1416
1417static enum ndr_err_code ndr_pull_NTLMv2_CLIENT_CHALLENGE(struct ndr_pull *ndr, int ndr_flags, struct NTLMv2_CLIENT_CHALLENGE *r)
1418{
1419	{
1420		uint32_t _flags_save_STRUCT = ndr->flags;
1421		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1422		if (ndr_flags & NDR_SCALARS) {
1423			NDR_CHECK(ndr_pull_align(ndr, 4));
1424			NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->RespType));
1425			NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->HiRespType));
1426			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Reserved1));
1427			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Reserved2));
1428			NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->TimeStamp));
1429			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->ChallengeFromClient, 8));
1430			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Reserved3));
1431			{
1432				uint32_t _flags_save_AV_PAIR_LIST = ndr->flags;
1433				ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
1434				{
1435					struct ndr_pull *_ndr_AvPairs;
1436					NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_AvPairs, 0, -1));
1437					NDR_CHECK(ndr_pull_AV_PAIR_LIST(_ndr_AvPairs, NDR_SCALARS|NDR_BUFFERS, &r->AvPairs));
1438					NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_AvPairs, 0, -1));
1439				}
1440				ndr->flags = _flags_save_AV_PAIR_LIST;
1441			}
1442			NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
1443		}
1444		if (ndr_flags & NDR_BUFFERS) {
1445			{
1446				uint32_t _flags_save_AV_PAIR_LIST = ndr->flags;
1447				ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
1448				ndr->flags = _flags_save_AV_PAIR_LIST;
1449			}
1450		}
1451		ndr->flags = _flags_save_STRUCT;
1452	}
1453	return NDR_ERR_SUCCESS;
1454}
1455
1456_PUBLIC_ void ndr_print_NTLMv2_CLIENT_CHALLENGE(struct ndr_print *ndr, const char *name, const struct NTLMv2_CLIENT_CHALLENGE *r)
1457{
1458	ndr_print_struct(ndr, name, "NTLMv2_CLIENT_CHALLENGE");
1459	{
1460		uint32_t _flags_save_STRUCT = ndr->flags;
1461		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1462		ndr->depth++;
1463		ndr_print_uint8(ndr, "RespType", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?1:r->RespType);
1464		ndr_print_uint8(ndr, "HiRespType", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?1:r->HiRespType);
1465		ndr_print_uint16(ndr, "Reserved1", r->Reserved1);
1466		ndr_print_uint32(ndr, "Reserved2", r->Reserved2);
1467		ndr_print_NTTIME(ndr, "TimeStamp", r->TimeStamp);
1468		ndr_print_array_uint8(ndr, "ChallengeFromClient", r->ChallengeFromClient, 8);
1469		ndr_print_uint32(ndr, "Reserved3", r->Reserved3);
1470		ndr_print_AV_PAIR_LIST(ndr, "AvPairs", &r->AvPairs);
1471		ndr->depth--;
1472		ndr->flags = _flags_save_STRUCT;
1473	}
1474}
1475
1476_PUBLIC_ enum ndr_err_code ndr_push_NTLMv2_RESPONSE(struct ndr_push *ndr, int ndr_flags, const struct NTLMv2_RESPONSE *r)
1477{
1478	{
1479		uint32_t _flags_save_STRUCT = ndr->flags;
1480		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1481		if (ndr_flags & NDR_SCALARS) {
1482			NDR_CHECK(ndr_push_align(ndr, 4));
1483			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->Response, 16));
1484			NDR_CHECK(ndr_push_NTLMv2_CLIENT_CHALLENGE(ndr, NDR_SCALARS, &r->Challenge));
1485			NDR_CHECK(ndr_push_trailer_align(ndr, 4));
1486		}
1487		if (ndr_flags & NDR_BUFFERS) {
1488			NDR_CHECK(ndr_push_NTLMv2_CLIENT_CHALLENGE(ndr, NDR_BUFFERS, &r->Challenge));
1489		}
1490		ndr->flags = _flags_save_STRUCT;
1491	}
1492	return NDR_ERR_SUCCESS;
1493}
1494
1495_PUBLIC_ enum ndr_err_code ndr_pull_NTLMv2_RESPONSE(struct ndr_pull *ndr, int ndr_flags, struct NTLMv2_RESPONSE *r)
1496{
1497	{
1498		uint32_t _flags_save_STRUCT = ndr->flags;
1499		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1500		if (ndr_flags & NDR_SCALARS) {
1501			NDR_CHECK(ndr_pull_align(ndr, 4));
1502			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Response, 16));
1503			NDR_CHECK(ndr_pull_NTLMv2_CLIENT_CHALLENGE(ndr, NDR_SCALARS, &r->Challenge));
1504			NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
1505		}
1506		if (ndr_flags & NDR_BUFFERS) {
1507			NDR_CHECK(ndr_pull_NTLMv2_CLIENT_CHALLENGE(ndr, NDR_BUFFERS, &r->Challenge));
1508		}
1509		ndr->flags = _flags_save_STRUCT;
1510	}
1511	return NDR_ERR_SUCCESS;
1512}
1513
1514_PUBLIC_ void ndr_print_NTLMv2_RESPONSE(struct ndr_print *ndr, const char *name, const struct NTLMv2_RESPONSE *r)
1515{
1516	ndr_print_struct(ndr, name, "NTLMv2_RESPONSE");
1517	{
1518		uint32_t _flags_save_STRUCT = ndr->flags;
1519		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
1520		ndr->depth++;
1521		ndr_print_array_uint8(ndr, "Response", r->Response, 16);
1522		ndr_print_NTLMv2_CLIENT_CHALLENGE(ndr, "Challenge", &r->Challenge);
1523		ndr->depth--;
1524		ndr->flags = _flags_save_STRUCT;
1525	}
1526}
1527
1528_PUBLIC_ enum ndr_err_code ndr_push_ntlmssp_NTLM_RESPONSE(struct ndr_push *ndr, int ndr_flags, const union ntlmssp_NTLM_RESPONSE *r)
1529{
1530	if (ndr_flags & NDR_SCALARS) {
1531		int level = ndr_push_get_switch_value(ndr, r);
1532		NDR_CHECK(ndr_push_union_align(ndr, 4));
1533		switch (level) {
1534			case 0: {
1535			break; }
1536
1537			case 0x18: {
1538				NDR_CHECK(ndr_push_NTLM_RESPONSE(ndr, NDR_SCALARS, &r->v1));
1539			break; }
1540
1541			default: {
1542				NDR_CHECK(ndr_push_NTLMv2_RESPONSE(ndr, NDR_SCALARS, &r->v2));
1543			break; }
1544
1545		}
1546	}
1547	if (ndr_flags & NDR_BUFFERS) {
1548		int level = ndr_push_get_switch_value(ndr, r);
1549		switch (level) {
1550			case 0:
1551			break;
1552
1553			case 0x18:
1554			break;
1555
1556			default:
1557				NDR_CHECK(ndr_push_NTLMv2_RESPONSE(ndr, NDR_BUFFERS, &r->v2));
1558			break;
1559
1560		}
1561	}
1562	return NDR_ERR_SUCCESS;
1563}
1564
1565_PUBLIC_ enum ndr_err_code ndr_pull_ntlmssp_NTLM_RESPONSE(struct ndr_pull *ndr, int ndr_flags, union ntlmssp_NTLM_RESPONSE *r)
1566{
1567	int level;
1568	level = ndr_pull_get_switch_value(ndr, r);
1569	if (ndr_flags & NDR_SCALARS) {
1570		NDR_CHECK(ndr_pull_union_align(ndr, 4));
1571		switch (level) {
1572			case 0: {
1573			break; }
1574
1575			case 0x18: {
1576				NDR_CHECK(ndr_pull_NTLM_RESPONSE(ndr, NDR_SCALARS, &r->v1));
1577			break; }
1578
1579			default: {
1580				NDR_CHECK(ndr_pull_NTLMv2_RESPONSE(ndr, NDR_SCALARS, &r->v2));
1581			break; }
1582
1583		}
1584	}
1585	if (ndr_flags & NDR_BUFFERS) {
1586		switch (level) {
1587			case 0:
1588			break;
1589
1590			case 0x18:
1591			break;
1592
1593			default:
1594				NDR_CHECK(ndr_pull_NTLMv2_RESPONSE(ndr, NDR_BUFFERS, &r->v2));
1595			break;
1596
1597		}
1598	}
1599	return NDR_ERR_SUCCESS;
1600}
1601
1602_PUBLIC_ void ndr_print_ntlmssp_NTLM_RESPONSE(struct ndr_print *ndr, const char *name, const union ntlmssp_NTLM_RESPONSE *r)
1603{
1604	int level;
1605	level = ndr_print_get_switch_value(ndr, r);
1606	ndr_print_union(ndr, name, level, "ntlmssp_NTLM_RESPONSE");
1607	switch (level) {
1608		case 0:
1609		break;
1610
1611		case 0x18:
1612			ndr_print_NTLM_RESPONSE(ndr, "v1", &r->v1);
1613		break;
1614
1615		default:
1616			ndr_print_NTLMv2_RESPONSE(ndr, "v2", &r->v2);
1617		break;
1618
1619	}
1620}
1621
1622_PUBLIC_ enum ndr_err_code ndr_push_AUTHENTICATE_MESSAGE(struct ndr_push *ndr, int ndr_flags, const struct AUTHENTICATE_MESSAGE *r)
1623{
1624	{
1625		uint32_t _flags_save_STRUCT = ndr->flags;
1626		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
1627		if (ndr_flags & NDR_SCALARS) {
1628			NDR_CHECK(ndr_push_align(ndr, 5));
1629			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, "NTLMSSP", 8, sizeof(uint8_t), CH_DOS));
1630			NDR_CHECK(ndr_push_ntlmssp_MessageType(ndr, NDR_SCALARS, NtLmAuthenticate));
1631			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->LmChallengeResponseLen));
1632			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->LmChallengeResponseLen));
1633			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->LmChallengeResponse));
1634			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->NtChallengeResponseLen));
1635			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->NtChallengeResponseLen));
1636			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->NtChallengeResponse));
1637			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->DomainName)));
1638			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->DomainName)));
1639			{
1640				uint32_t _flags_save_string = ndr->flags;
1641				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
1642				NDR_CHECK(ndr_push_relative_ptr1(ndr, r->DomainName));
1643				ndr->flags = _flags_save_string;
1644			}
1645			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->UserName)));
1646			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->UserName)));
1647			{
1648				uint32_t _flags_save_string = ndr->flags;
1649				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
1650				NDR_CHECK(ndr_push_relative_ptr1(ndr, r->UserName));
1651				ndr->flags = _flags_save_string;
1652			}
1653			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->Workstation)));
1654			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->Workstation)));
1655			{
1656				uint32_t _flags_save_string = ndr->flags;
1657				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
1658				NDR_CHECK(ndr_push_relative_ptr1(ndr, r->Workstation));
1659				ndr->flags = _flags_save_string;
1660			}
1661			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->EncryptedRandomSessionKey->length));
1662			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->EncryptedRandomSessionKey->length));
1663			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->EncryptedRandomSessionKey));
1664			NDR_CHECK(ndr_push_NEGOTIATE(ndr, NDR_SCALARS, r->NegotiateFlags));
1665			NDR_CHECK(ndr_push_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION));
1666			NDR_CHECK(ndr_push_ntlmssp_Version(ndr, NDR_SCALARS, &r->Version));
1667			NDR_CHECK(ndr_push_trailer_align(ndr, 5));
1668		}
1669		if (ndr_flags & NDR_BUFFERS) {
1670			if (r->LmChallengeResponse) {
1671				NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->LmChallengeResponse));
1672				{
1673					struct ndr_push *_ndr_LmChallengeResponse;
1674					NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_LmChallengeResponse, 0, r->LmChallengeResponseLen));
1675					NDR_CHECK(ndr_push_set_switch_value(_ndr_LmChallengeResponse, r->LmChallengeResponse, r->LmChallengeResponseLen));
1676					NDR_CHECK(ndr_push_ntlmssp_LM_RESPONSE(_ndr_LmChallengeResponse, NDR_SCALARS|NDR_BUFFERS, r->LmChallengeResponse));
1677					NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_LmChallengeResponse, 0, r->LmChallengeResponseLen));
1678				}
1679				NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->LmChallengeResponse));
1680			}
1681			if (r->NtChallengeResponse) {
1682				NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->NtChallengeResponse));
1683				{
1684					struct ndr_push *_ndr_NtChallengeResponse;
1685					NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_NtChallengeResponse, 0, r->NtChallengeResponseLen));
1686					NDR_CHECK(ndr_push_set_switch_value(_ndr_NtChallengeResponse, r->NtChallengeResponse, r->NtChallengeResponseLen));
1687					NDR_CHECK(ndr_push_ntlmssp_NTLM_RESPONSE(_ndr_NtChallengeResponse, NDR_SCALARS|NDR_BUFFERS, r->NtChallengeResponse));
1688					NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_NtChallengeResponse, 0, r->NtChallengeResponseLen));
1689				}
1690				NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->NtChallengeResponse));
1691			}
1692			{
1693				uint32_t _flags_save_string = ndr->flags;
1694				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
1695				if (r->DomainName) {
1696					NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->DomainName));
1697					{
1698						struct ndr_push *_ndr_DomainName;
1699						NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_DomainName, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->DomainName)));
1700						NDR_CHECK(ndr_push_string(_ndr_DomainName, NDR_SCALARS, r->DomainName));
1701						NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_DomainName, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->DomainName)));
1702					}
1703					NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->DomainName));
1704				}
1705				ndr->flags = _flags_save_string;
1706			}
1707			{
1708				uint32_t _flags_save_string = ndr->flags;
1709				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
1710				if (r->UserName) {
1711					NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->UserName));
1712					{
1713						struct ndr_push *_ndr_UserName;
1714						NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_UserName, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->UserName)));
1715						NDR_CHECK(ndr_push_string(_ndr_UserName, NDR_SCALARS, r->UserName));
1716						NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_UserName, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->UserName)));
1717					}
1718					NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->UserName));
1719				}
1720				ndr->flags = _flags_save_string;
1721			}
1722			{
1723				uint32_t _flags_save_string = ndr->flags;
1724				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
1725				if (r->Workstation) {
1726					NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->Workstation));
1727					{
1728						struct ndr_push *_ndr_Workstation;
1729						NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_Workstation, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->Workstation)));
1730						NDR_CHECK(ndr_push_string(_ndr_Workstation, NDR_SCALARS, r->Workstation));
1731						NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_Workstation, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->Workstation)));
1732					}
1733					NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->Workstation));
1734				}
1735				ndr->flags = _flags_save_string;
1736			}
1737			if (r->EncryptedRandomSessionKey) {
1738				NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->EncryptedRandomSessionKey));
1739				{
1740					struct ndr_push *_ndr_EncryptedRandomSessionKey;
1741					NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_EncryptedRandomSessionKey, 0, r->EncryptedRandomSessionKey->length));
1742					NDR_CHECK(ndr_push_DATA_BLOB(_ndr_EncryptedRandomSessionKey, NDR_SCALARS, *r->EncryptedRandomSessionKey));
1743					NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_EncryptedRandomSessionKey, 0, r->EncryptedRandomSessionKey->length));
1744				}
1745				NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->EncryptedRandomSessionKey));
1746			}
1747			NDR_CHECK(ndr_push_ntlmssp_Version(ndr, NDR_BUFFERS, &r->Version));
1748		}
1749		ndr->flags = _flags_save_STRUCT;
1750	}
1751	return NDR_ERR_SUCCESS;
1752}
1753
1754_PUBLIC_ enum ndr_err_code ndr_pull_AUTHENTICATE_MESSAGE(struct ndr_pull *ndr, int ndr_flags, struct AUTHENTICATE_MESSAGE *r)
1755{
1756	uint32_t _ptr_LmChallengeResponse;
1757	TALLOC_CTX *_mem_save_LmChallengeResponse_0;
1758	uint32_t _ptr_NtChallengeResponse;
1759	TALLOC_CTX *_mem_save_NtChallengeResponse_0;
1760	uint32_t _ptr_DomainName;
1761	TALLOC_CTX *_mem_save_DomainName_0;
1762	uint32_t _ptr_UserName;
1763	TALLOC_CTX *_mem_save_UserName_0;
1764	uint32_t _ptr_Workstation;
1765	TALLOC_CTX *_mem_save_Workstation_0;
1766	uint32_t _ptr_EncryptedRandomSessionKey;
1767	TALLOC_CTX *_mem_save_EncryptedRandomSessionKey_0;
1768	{
1769		uint32_t _flags_save_STRUCT = ndr->flags;
1770		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
1771		if (ndr_flags & NDR_SCALARS) {
1772			NDR_CHECK(ndr_pull_align(ndr, 5));
1773			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->Signature, 8, sizeof(uint8_t), CH_DOS));
1774			NDR_CHECK(ndr_pull_ntlmssp_MessageType(ndr, NDR_SCALARS, &r->MessageType));
1775			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->LmChallengeResponseLen));
1776			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->LmChallengeResponseMaxLen));
1777			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_LmChallengeResponse));
1778			if (_ptr_LmChallengeResponse) {
1779				NDR_PULL_ALLOC(ndr, r->LmChallengeResponse);
1780				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->LmChallengeResponse, _ptr_LmChallengeResponse));
1781			} else {
1782				r->LmChallengeResponse = NULL;
1783			}
1784			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->NtChallengeResponseLen));
1785			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->NtChallengeResponseMaxLen));
1786			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_NtChallengeResponse));
1787			if (_ptr_NtChallengeResponse) {
1788				NDR_PULL_ALLOC(ndr, r->NtChallengeResponse);
1789				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->NtChallengeResponse, _ptr_NtChallengeResponse));
1790			} else {
1791				r->NtChallengeResponse = NULL;
1792			}
1793			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->DomainNameLen));
1794			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->DomainNameMaxLen));
1795			{
1796				uint32_t _flags_save_string = ndr->flags;
1797				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
1798				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_DomainName));
1799				if (_ptr_DomainName) {
1800					NDR_PULL_ALLOC(ndr, r->DomainName);
1801					NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->DomainName, _ptr_DomainName));
1802				} else {
1803					r->DomainName = NULL;
1804				}
1805				ndr->flags = _flags_save_string;
1806			}
1807			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->UserNameLen));
1808			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->UserNameMaxLen));
1809			{
1810				uint32_t _flags_save_string = ndr->flags;
1811				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
1812				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_UserName));
1813				if (_ptr_UserName) {
1814					NDR_PULL_ALLOC(ndr, r->UserName);
1815					NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->UserName, _ptr_UserName));
1816				} else {
1817					r->UserName = NULL;
1818				}
1819				ndr->flags = _flags_save_string;
1820			}
1821			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->WorkstationLen));
1822			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->WorkstationMaxLen));
1823			{
1824				uint32_t _flags_save_string = ndr->flags;
1825				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
1826				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Workstation));
1827				if (_ptr_Workstation) {
1828					NDR_PULL_ALLOC(ndr, r->Workstation);
1829					NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->Workstation, _ptr_Workstation));
1830				} else {
1831					r->Workstation = NULL;
1832				}
1833				ndr->flags = _flags_save_string;
1834			}
1835			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->EncryptedRandomSessionKeyLen));
1836			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->EncryptedRandomSessionKeyMaxLen));
1837			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_EncryptedRandomSessionKey));
1838			if (_ptr_EncryptedRandomSessionKey) {
1839				NDR_PULL_ALLOC(ndr, r->EncryptedRandomSessionKey);
1840				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->EncryptedRandomSessionKey, _ptr_EncryptedRandomSessionKey));
1841			} else {
1842				r->EncryptedRandomSessionKey = NULL;
1843			}
1844			NDR_CHECK(ndr_pull_NEGOTIATE(ndr, NDR_SCALARS, &r->NegotiateFlags));
1845			NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION));
1846			NDR_CHECK(ndr_pull_ntlmssp_Version(ndr, NDR_SCALARS, &r->Version));
1847			NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
1848		}
1849		if (ndr_flags & NDR_BUFFERS) {
1850			if (r->LmChallengeResponse) {
1851				uint32_t _relative_save_offset;
1852				_relative_save_offset = ndr->offset;
1853				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->LmChallengeResponse));
1854				_mem_save_LmChallengeResponse_0 = NDR_PULL_GET_MEM_CTX(ndr);
1855				NDR_PULL_SET_MEM_CTX(ndr, r->LmChallengeResponse, 0);
1856				{
1857					struct ndr_pull *_ndr_LmChallengeResponse;
1858					NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_LmChallengeResponse, 0, r->LmChallengeResponseLen));
1859					NDR_CHECK(ndr_pull_set_switch_value(_ndr_LmChallengeResponse, r->LmChallengeResponse, r->LmChallengeResponseLen));
1860					NDR_CHECK(ndr_pull_ntlmssp_LM_RESPONSE(_ndr_LmChallengeResponse, NDR_SCALARS|NDR_BUFFERS, r->LmChallengeResponse));
1861					NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_LmChallengeResponse, 0, r->LmChallengeResponseLen));
1862				}
1863				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_LmChallengeResponse_0, 0);
1864				ndr->offset = _relative_save_offset;
1865			}
1866			if (r->NtChallengeResponse) {
1867				uint32_t _relative_save_offset;
1868				_relative_save_offset = ndr->offset;
1869				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->NtChallengeResponse));
1870				_mem_save_NtChallengeResponse_0 = NDR_PULL_GET_MEM_CTX(ndr);
1871				NDR_PULL_SET_MEM_CTX(ndr, r->NtChallengeResponse, 0);
1872				{
1873					struct ndr_pull *_ndr_NtChallengeResponse;
1874					NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_NtChallengeResponse, 0, r->NtChallengeResponseMaxLen));
1875					NDR_CHECK(ndr_pull_set_switch_value(_ndr_NtChallengeResponse, r->NtChallengeResponse, r->NtChallengeResponseLen));
1876					NDR_CHECK(ndr_pull_ntlmssp_NTLM_RESPONSE(_ndr_NtChallengeResponse, NDR_SCALARS|NDR_BUFFERS, r->NtChallengeResponse));
1877					NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_NtChallengeResponse, 0, r->NtChallengeResponseMaxLen));
1878				}
1879				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_NtChallengeResponse_0, 0);
1880				ndr->offset = _relative_save_offset;
1881			}
1882			{
1883				uint32_t _flags_save_string = ndr->flags;
1884				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
1885				if (r->DomainName) {
1886					uint32_t _relative_save_offset;
1887					_relative_save_offset = ndr->offset;
1888					NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->DomainName));
1889					_mem_save_DomainName_0 = NDR_PULL_GET_MEM_CTX(ndr);
1890					NDR_PULL_SET_MEM_CTX(ndr, r->DomainName, 0);
1891					{
1892						struct ndr_pull *_ndr_DomainName;
1893						NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_DomainName, 0, r->DomainNameLen));
1894						NDR_CHECK(ndr_pull_string(_ndr_DomainName, NDR_SCALARS, &r->DomainName));
1895						NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_DomainName, 0, r->DomainNameLen));
1896					}
1897					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_DomainName_0, 0);
1898					ndr->offset = _relative_save_offset;
1899				}
1900				ndr->flags = _flags_save_string;
1901			}
1902			{
1903				uint32_t _flags_save_string = ndr->flags;
1904				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
1905				if (r->UserName) {
1906					uint32_t _relative_save_offset;
1907					_relative_save_offset = ndr->offset;
1908					NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->UserName));
1909					_mem_save_UserName_0 = NDR_PULL_GET_MEM_CTX(ndr);
1910					NDR_PULL_SET_MEM_CTX(ndr, r->UserName, 0);
1911					{
1912						struct ndr_pull *_ndr_UserName;
1913						NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_UserName, 0, r->UserNameLen));
1914						NDR_CHECK(ndr_pull_string(_ndr_UserName, NDR_SCALARS, &r->UserName));
1915						NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_UserName, 0, r->UserNameLen));
1916					}
1917					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_UserName_0, 0);
1918					ndr->offset = _relative_save_offset;
1919				}
1920				ndr->flags = _flags_save_string;
1921			}
1922			{
1923				uint32_t _flags_save_string = ndr->flags;
1924				ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags));
1925				if (r->Workstation) {
1926					uint32_t _relative_save_offset;
1927					_relative_save_offset = ndr->offset;
1928					NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->Workstation));
1929					_mem_save_Workstation_0 = NDR_PULL_GET_MEM_CTX(ndr);
1930					NDR_PULL_SET_MEM_CTX(ndr, r->Workstation, 0);
1931					{
1932						struct ndr_pull *_ndr_Workstation;
1933						NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_Workstation, 0, r->WorkstationLen));
1934						NDR_CHECK(ndr_pull_string(_ndr_Workstation, NDR_SCALARS, &r->Workstation));
1935						NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_Workstation, 0, r->WorkstationLen));
1936					}
1937					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Workstation_0, 0);
1938					ndr->offset = _relative_save_offset;
1939				}
1940				ndr->flags = _flags_save_string;
1941			}
1942			if (r->EncryptedRandomSessionKey) {
1943				uint32_t _relative_save_offset;
1944				_relative_save_offset = ndr->offset;
1945				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->EncryptedRandomSessionKey));
1946				_mem_save_EncryptedRandomSessionKey_0 = NDR_PULL_GET_MEM_CTX(ndr);
1947				NDR_PULL_SET_MEM_CTX(ndr, r->EncryptedRandomSessionKey, 0);
1948				{
1949					struct ndr_pull *_ndr_EncryptedRandomSessionKey;
1950					NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_EncryptedRandomSessionKey, 0, r->EncryptedRandomSessionKeyLen));
1951					NDR_CHECK(ndr_pull_DATA_BLOB(_ndr_EncryptedRandomSessionKey, NDR_SCALARS, r->EncryptedRandomSessionKey));
1952					NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_EncryptedRandomSessionKey, 0, r->EncryptedRandomSessionKeyLen));
1953				}
1954				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_EncryptedRandomSessionKey_0, 0);
1955				ndr->offset = _relative_save_offset;
1956			}
1957			NDR_CHECK(ndr_pull_ntlmssp_Version(ndr, NDR_BUFFERS, &r->Version));
1958		}
1959		ndr->flags = _flags_save_STRUCT;
1960	}
1961	return NDR_ERR_SUCCESS;
1962}
1963
1964_PUBLIC_ void ndr_print_AUTHENTICATE_MESSAGE(struct ndr_print *ndr, const char *name, const struct AUTHENTICATE_MESSAGE *r)
1965{
1966	ndr_print_struct(ndr, name, "AUTHENTICATE_MESSAGE");
1967	{
1968		uint32_t _flags_save_STRUCT = ndr->flags;
1969		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
1970		ndr->depth++;
1971		ndr_print_string(ndr, "Signature", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?"NTLMSSP":r->Signature);
1972		ndr_print_ntlmssp_MessageType(ndr, "MessageType", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?NtLmAuthenticate:r->MessageType);
1973		ndr_print_uint16(ndr, "LmChallengeResponseLen", r->LmChallengeResponseLen);
1974		ndr_print_uint16(ndr, "LmChallengeResponseMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->LmChallengeResponseLen:r->LmChallengeResponseMaxLen);
1975		ndr_print_ptr(ndr, "LmChallengeResponse", r->LmChallengeResponse);
1976		ndr->depth++;
1977		if (r->LmChallengeResponse) {
1978			ndr_print_set_switch_value(ndr, r->LmChallengeResponse, r->LmChallengeResponseLen);
1979			ndr_print_ntlmssp_LM_RESPONSE(ndr, "LmChallengeResponse", r->LmChallengeResponse);
1980		}
1981		ndr->depth--;
1982		ndr_print_uint16(ndr, "NtChallengeResponseLen", r->NtChallengeResponseLen);
1983		ndr_print_uint16(ndr, "NtChallengeResponseMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->NtChallengeResponseLen:r->NtChallengeResponseMaxLen);
1984		ndr_print_ptr(ndr, "NtChallengeResponse", r->NtChallengeResponse);
1985		ndr->depth++;
1986		if (r->NtChallengeResponse) {
1987			ndr_print_set_switch_value(ndr, r->NtChallengeResponse, r->NtChallengeResponseLen);
1988			ndr_print_ntlmssp_NTLM_RESPONSE(ndr, "NtChallengeResponse", r->NtChallengeResponse);
1989		}
1990		ndr->depth--;
1991		ndr_print_uint16(ndr, "DomainNameLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_ntlmssp_string_length(r->NegotiateFlags, r->DomainName):r->DomainNameLen);
1992		ndr_print_uint16(ndr, "DomainNameMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->DomainNameLen:r->DomainNameMaxLen);
1993		ndr_print_ptr(ndr, "DomainName", r->DomainName);
1994		ndr->depth++;
1995		if (r->DomainName) {
1996			ndr_print_string(ndr, "DomainName", r->DomainName);
1997		}
1998		ndr->depth--;
1999		ndr_print_uint16(ndr, "UserNameLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_ntlmssp_string_length(r->NegotiateFlags, r->UserName):r->UserNameLen);
2000		ndr_print_uint16(ndr, "UserNameMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->UserNameLen:r->UserNameMaxLen);
2001		ndr_print_ptr(ndr, "UserName", r->UserName);
2002		ndr->depth++;
2003		if (r->UserName) {
2004			ndr_print_string(ndr, "UserName", r->UserName);
2005		}
2006		ndr->depth--;
2007		ndr_print_uint16(ndr, "WorkstationLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_ntlmssp_string_length(r->NegotiateFlags, r->Workstation):r->WorkstationLen);
2008		ndr_print_uint16(ndr, "WorkstationMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->WorkstationLen:r->WorkstationMaxLen);
2009		ndr_print_ptr(ndr, "Workstation", r->Workstation);
2010		ndr->depth++;
2011		if (r->Workstation) {
2012			ndr_print_string(ndr, "Workstation", r->Workstation);
2013		}
2014		ndr->depth--;
2015		ndr_print_uint16(ndr, "EncryptedRandomSessionKeyLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->EncryptedRandomSessionKey->length:r->EncryptedRandomSessionKeyLen);
2016		ndr_print_uint16(ndr, "EncryptedRandomSessionKeyMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->EncryptedRandomSessionKeyLen:r->EncryptedRandomSessionKeyMaxLen);
2017		ndr_print_ptr(ndr, "EncryptedRandomSessionKey", r->EncryptedRandomSessionKey);
2018		ndr->depth++;
2019		if (r->EncryptedRandomSessionKey) {
2020			ndr_print_DATA_BLOB(ndr, "EncryptedRandomSessionKey", *r->EncryptedRandomSessionKey);
2021		}
2022		ndr->depth--;
2023		ndr_print_NEGOTIATE(ndr, "NegotiateFlags", r->NegotiateFlags);
2024		ndr_print_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION);
2025		ndr_print_ntlmssp_Version(ndr, "Version", &r->Version);
2026		ndr->depth--;
2027		ndr->flags = _flags_save_STRUCT;
2028	}
2029}
2030
2031_PUBLIC_ enum ndr_err_code ndr_push_NTLMSSP_MESSAGE_SIGNATURE(struct ndr_push *ndr, int ndr_flags, const struct NTLMSSP_MESSAGE_SIGNATURE *r)
2032{
2033	if (ndr_flags & NDR_SCALARS) {
2034		NDR_CHECK(ndr_push_align(ndr, 4));
2035		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, NTLMSSP_SIGN_VERSION));
2036		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->RandomPad));
2037		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->Checksum));
2038		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->SeqNum));
2039		NDR_CHECK(ndr_push_trailer_align(ndr, 4));
2040	}
2041	if (ndr_flags & NDR_BUFFERS) {
2042	}
2043	return NDR_ERR_SUCCESS;
2044}
2045
2046_PUBLIC_ enum ndr_err_code ndr_pull_NTLMSSP_MESSAGE_SIGNATURE(struct ndr_pull *ndr, int ndr_flags, struct NTLMSSP_MESSAGE_SIGNATURE *r)
2047{
2048	if (ndr_flags & NDR_SCALARS) {
2049		NDR_CHECK(ndr_pull_align(ndr, 4));
2050		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Version));
2051		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->RandomPad));
2052		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Checksum));
2053		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->SeqNum));
2054		NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
2055	}
2056	if (ndr_flags & NDR_BUFFERS) {
2057	}
2058	return NDR_ERR_SUCCESS;
2059}
2060
2061_PUBLIC_ void ndr_print_NTLMSSP_MESSAGE_SIGNATURE(struct ndr_print *ndr, const char *name, const struct NTLMSSP_MESSAGE_SIGNATURE *r)
2062{
2063	ndr_print_struct(ndr, name, "NTLMSSP_MESSAGE_SIGNATURE");
2064	ndr->depth++;
2065	ndr_print_uint32(ndr, "Version", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?NTLMSSP_SIGN_VERSION:r->Version);
2066	ndr_print_uint32(ndr, "RandomPad", r->RandomPad);
2067	ndr_print_uint32(ndr, "Checksum", r->Checksum);
2068	ndr_print_uint32(ndr, "SeqNum", r->SeqNum);
2069	ndr->depth--;
2070}
2071
2072_PUBLIC_ enum ndr_err_code ndr_push_NTLMSSP_MESSAGE_SIGNATURE_NTLMv2(struct ndr_push *ndr, int ndr_flags, const struct NTLMSSP_MESSAGE_SIGNATURE_NTLMv2 *r)
2073{
2074	{
2075		uint32_t _flags_save_STRUCT = ndr->flags;
2076		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
2077		if (ndr_flags & NDR_SCALARS) {
2078			NDR_CHECK(ndr_push_align(ndr, 4));
2079			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, NTLMSSP_SIGN_VERSION));
2080			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->Checksum, 8));
2081			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->SeqNum));
2082			NDR_CHECK(ndr_push_trailer_align(ndr, 4));
2083		}
2084		if (ndr_flags & NDR_BUFFERS) {
2085		}
2086		ndr->flags = _flags_save_STRUCT;
2087	}
2088	return NDR_ERR_SUCCESS;
2089}
2090
2091_PUBLIC_ enum ndr_err_code ndr_pull_NTLMSSP_MESSAGE_SIGNATURE_NTLMv2(struct ndr_pull *ndr, int ndr_flags, struct NTLMSSP_MESSAGE_SIGNATURE_NTLMv2 *r)
2092{
2093	{
2094		uint32_t _flags_save_STRUCT = ndr->flags;
2095		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
2096		if (ndr_flags & NDR_SCALARS) {
2097			NDR_CHECK(ndr_pull_align(ndr, 4));
2098			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Version));
2099			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Checksum, 8));
2100			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->SeqNum));
2101			NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
2102		}
2103		if (ndr_flags & NDR_BUFFERS) {
2104		}
2105		ndr->flags = _flags_save_STRUCT;
2106	}
2107	return NDR_ERR_SUCCESS;
2108}
2109
2110_PUBLIC_ void ndr_print_NTLMSSP_MESSAGE_SIGNATURE_NTLMv2(struct ndr_print *ndr, const char *name, const struct NTLMSSP_MESSAGE_SIGNATURE_NTLMv2 *r)
2111{
2112	ndr_print_struct(ndr, name, "NTLMSSP_MESSAGE_SIGNATURE_NTLMv2");
2113	{
2114		uint32_t _flags_save_STRUCT = ndr->flags;
2115		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
2116		ndr->depth++;
2117		ndr_print_uint32(ndr, "Version", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?NTLMSSP_SIGN_VERSION:r->Version);
2118		ndr_print_array_uint8(ndr, "Checksum", r->Checksum, 8);
2119		ndr_print_uint32(ndr, "SeqNum", r->SeqNum);
2120		ndr->depth--;
2121		ndr->flags = _flags_save_STRUCT;
2122	}
2123}
2124
2125static enum ndr_err_code ndr_push_decode_NEGOTIATE_MESSAGE(struct ndr_push *ndr, int flags, const struct decode_NEGOTIATE_MESSAGE *r)
2126{
2127	if (flags & NDR_IN) {
2128		NDR_CHECK(ndr_push_NEGOTIATE_MESSAGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.negotiate));
2129	}
2130	if (flags & NDR_OUT) {
2131	}
2132	return NDR_ERR_SUCCESS;
2133}
2134
2135static enum ndr_err_code ndr_pull_decode_NEGOTIATE_MESSAGE(struct ndr_pull *ndr, int flags, struct decode_NEGOTIATE_MESSAGE *r)
2136{
2137	if (flags & NDR_IN) {
2138		NDR_CHECK(ndr_pull_NEGOTIATE_MESSAGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.negotiate));
2139	}
2140	if (flags & NDR_OUT) {
2141	}
2142	return NDR_ERR_SUCCESS;
2143}
2144
2145_PUBLIC_ void ndr_print_decode_NEGOTIATE_MESSAGE(struct ndr_print *ndr, const char *name, int flags, const struct decode_NEGOTIATE_MESSAGE *r)
2146{
2147	ndr_print_struct(ndr, name, "decode_NEGOTIATE_MESSAGE");
2148	ndr->depth++;
2149	if (flags & NDR_SET_VALUES) {
2150		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
2151	}
2152	if (flags & NDR_IN) {
2153		ndr_print_struct(ndr, "in", "decode_NEGOTIATE_MESSAGE");
2154		ndr->depth++;
2155		ndr_print_NEGOTIATE_MESSAGE(ndr, "negotiate", &r->in.negotiate);
2156		ndr->depth--;
2157	}
2158	if (flags & NDR_OUT) {
2159		ndr_print_struct(ndr, "out", "decode_NEGOTIATE_MESSAGE");
2160		ndr->depth++;
2161		ndr->depth--;
2162	}
2163	ndr->depth--;
2164}
2165
2166static enum ndr_err_code ndr_push_decode_CHALLENGE_MESSAGE(struct ndr_push *ndr, int flags, const struct decode_CHALLENGE_MESSAGE *r)
2167{
2168	if (flags & NDR_IN) {
2169		NDR_CHECK(ndr_push_CHALLENGE_MESSAGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.challenge));
2170	}
2171	if (flags & NDR_OUT) {
2172	}
2173	return NDR_ERR_SUCCESS;
2174}
2175
2176static enum ndr_err_code ndr_pull_decode_CHALLENGE_MESSAGE(struct ndr_pull *ndr, int flags, struct decode_CHALLENGE_MESSAGE *r)
2177{
2178	if (flags & NDR_IN) {
2179		NDR_CHECK(ndr_pull_CHALLENGE_MESSAGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.challenge));
2180	}
2181	if (flags & NDR_OUT) {
2182	}
2183	return NDR_ERR_SUCCESS;
2184}
2185
2186_PUBLIC_ void ndr_print_decode_CHALLENGE_MESSAGE(struct ndr_print *ndr, const char *name, int flags, const struct decode_CHALLENGE_MESSAGE *r)
2187{
2188	ndr_print_struct(ndr, name, "decode_CHALLENGE_MESSAGE");
2189	ndr->depth++;
2190	if (flags & NDR_SET_VALUES) {
2191		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
2192	}
2193	if (flags & NDR_IN) {
2194		ndr_print_struct(ndr, "in", "decode_CHALLENGE_MESSAGE");
2195		ndr->depth++;
2196		ndr_print_CHALLENGE_MESSAGE(ndr, "challenge", &r->in.challenge);
2197		ndr->depth--;
2198	}
2199	if (flags & NDR_OUT) {
2200		ndr_print_struct(ndr, "out", "decode_CHALLENGE_MESSAGE");
2201		ndr->depth++;
2202		ndr->depth--;
2203	}
2204	ndr->depth--;
2205}
2206
2207static enum ndr_err_code ndr_push_decode_AUTHENTICATE_MESSAGE(struct ndr_push *ndr, int flags, const struct decode_AUTHENTICATE_MESSAGE *r)
2208{
2209	if (flags & NDR_IN) {
2210		NDR_CHECK(ndr_push_AUTHENTICATE_MESSAGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.authenticate));
2211	}
2212	if (flags & NDR_OUT) {
2213	}
2214	return NDR_ERR_SUCCESS;
2215}
2216
2217static enum ndr_err_code ndr_pull_decode_AUTHENTICATE_MESSAGE(struct ndr_pull *ndr, int flags, struct decode_AUTHENTICATE_MESSAGE *r)
2218{
2219	if (flags & NDR_IN) {
2220		NDR_CHECK(ndr_pull_AUTHENTICATE_MESSAGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.authenticate));
2221	}
2222	if (flags & NDR_OUT) {
2223	}
2224	return NDR_ERR_SUCCESS;
2225}
2226
2227_PUBLIC_ void ndr_print_decode_AUTHENTICATE_MESSAGE(struct ndr_print *ndr, const char *name, int flags, const struct decode_AUTHENTICATE_MESSAGE *r)
2228{
2229	ndr_print_struct(ndr, name, "decode_AUTHENTICATE_MESSAGE");
2230	ndr->depth++;
2231	if (flags & NDR_SET_VALUES) {
2232		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
2233	}
2234	if (flags & NDR_IN) {
2235		ndr_print_struct(ndr, "in", "decode_AUTHENTICATE_MESSAGE");
2236		ndr->depth++;
2237		ndr_print_AUTHENTICATE_MESSAGE(ndr, "authenticate", &r->in.authenticate);
2238		ndr->depth--;
2239	}
2240	if (flags & NDR_OUT) {
2241		ndr_print_struct(ndr, "out", "decode_AUTHENTICATE_MESSAGE");
2242		ndr->depth++;
2243		ndr->depth--;
2244	}
2245	ndr->depth--;
2246}
2247
2248static enum ndr_err_code ndr_push_decode_NTLMv2_CLIENT_CHALLENGE(struct ndr_push *ndr, int flags, const struct decode_NTLMv2_CLIENT_CHALLENGE *r)
2249{
2250	if (flags & NDR_IN) {
2251		NDR_CHECK(ndr_push_NTLMv2_CLIENT_CHALLENGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.challenge));
2252	}
2253	if (flags & NDR_OUT) {
2254	}
2255	return NDR_ERR_SUCCESS;
2256}
2257
2258static enum ndr_err_code ndr_pull_decode_NTLMv2_CLIENT_CHALLENGE(struct ndr_pull *ndr, int flags, struct decode_NTLMv2_CLIENT_CHALLENGE *r)
2259{
2260	if (flags & NDR_IN) {
2261		NDR_CHECK(ndr_pull_NTLMv2_CLIENT_CHALLENGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.challenge));
2262	}
2263	if (flags & NDR_OUT) {
2264	}
2265	return NDR_ERR_SUCCESS;
2266}
2267
2268_PUBLIC_ void ndr_print_decode_NTLMv2_CLIENT_CHALLENGE(struct ndr_print *ndr, const char *name, int flags, const struct decode_NTLMv2_CLIENT_CHALLENGE *r)
2269{
2270	ndr_print_struct(ndr, name, "decode_NTLMv2_CLIENT_CHALLENGE");
2271	ndr->depth++;
2272	if (flags & NDR_SET_VALUES) {
2273		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
2274	}
2275	if (flags & NDR_IN) {
2276		ndr_print_struct(ndr, "in", "decode_NTLMv2_CLIENT_CHALLENGE");
2277		ndr->depth++;
2278		ndr_print_NTLMv2_CLIENT_CHALLENGE(ndr, "challenge", &r->in.challenge);
2279		ndr->depth--;
2280	}
2281	if (flags & NDR_OUT) {
2282		ndr_print_struct(ndr, "out", "decode_NTLMv2_CLIENT_CHALLENGE");
2283		ndr->depth++;
2284		ndr->depth--;
2285	}
2286	ndr->depth--;
2287}
2288
2289static const struct ndr_interface_call ntlmssp_calls[] = {
2290	{
2291		"decode_NEGOTIATE_MESSAGE",
2292		sizeof(struct decode_NEGOTIATE_MESSAGE),
2293		(ndr_push_flags_fn_t) ndr_push_decode_NEGOTIATE_MESSAGE,
2294		(ndr_pull_flags_fn_t) ndr_pull_decode_NEGOTIATE_MESSAGE,
2295		(ndr_print_function_t) ndr_print_decode_NEGOTIATE_MESSAGE,
2296		false,
2297	},
2298	{
2299		"decode_CHALLENGE_MESSAGE",
2300		sizeof(struct decode_CHALLENGE_MESSAGE),
2301		(ndr_push_flags_fn_t) ndr_push_decode_CHALLENGE_MESSAGE,
2302		(ndr_pull_flags_fn_t) ndr_pull_decode_CHALLENGE_MESSAGE,
2303		(ndr_print_function_t) ndr_print_decode_CHALLENGE_MESSAGE,
2304		false,
2305	},
2306	{
2307		"decode_AUTHENTICATE_MESSAGE",
2308		sizeof(struct decode_AUTHENTICATE_MESSAGE),
2309		(ndr_push_flags_fn_t) ndr_push_decode_AUTHENTICATE_MESSAGE,
2310		(ndr_pull_flags_fn_t) ndr_pull_decode_AUTHENTICATE_MESSAGE,
2311		(ndr_print_function_t) ndr_print_decode_AUTHENTICATE_MESSAGE,
2312		false,
2313	},
2314	{
2315		"decode_NTLMv2_CLIENT_CHALLENGE",
2316		sizeof(struct decode_NTLMv2_CLIENT_CHALLENGE),
2317		(ndr_push_flags_fn_t) ndr_push_decode_NTLMv2_CLIENT_CHALLENGE,
2318		(ndr_pull_flags_fn_t) ndr_pull_decode_NTLMv2_CLIENT_CHALLENGE,
2319		(ndr_print_function_t) ndr_print_decode_NTLMv2_CLIENT_CHALLENGE,
2320		false,
2321	},
2322	{ NULL, 0, NULL, NULL, NULL, false }
2323};
2324
2325static const char * const ntlmssp_endpoint_strings[] = {
2326	"ncacn_np:[\\pipe\\ntlmssp]",
2327};
2328
2329static const struct ndr_interface_string_array ntlmssp_endpoints = {
2330	.count	= 1,
2331	.names	= ntlmssp_endpoint_strings
2332};
2333
2334static const char * const ntlmssp_authservice_strings[] = {
2335	"host",
2336};
2337
2338static const struct ndr_interface_string_array ntlmssp_authservices = {
2339	.count	= 1,
2340	.names	= ntlmssp_authservice_strings
2341};
2342
2343
2344const struct ndr_interface_table ndr_table_ntlmssp = {
2345	.name		= "ntlmssp",
2346	.syntax_id	= {
2347		{0x6e746c6d,0x7373,0x700a,{0x00,0x00},{0x00,0x00,0x00,0x00}},
2348		NDR_NTLMSSP_VERSION
2349	},
2350	.helpstring	= NDR_NTLMSSP_HELPSTRING,
2351	.num_calls	= 4,
2352	.calls		= ntlmssp_calls,
2353	.endpoints	= &ntlmssp_endpoints,
2354	.authservices	= &ntlmssp_authservices
2355};
2356
2357