1/* parser auto-generated by pidl */
2
3#include "includes.h"
4#include "../librpc/gen_ndr/ndr_security.h"
5
6#include "librpc/gen_ndr/ndr_misc.h"
7_PUBLIC_ enum ndr_err_code ndr_push_security_ace_flags(struct ndr_push *ndr, int ndr_flags, uint8_t r)
8{
9	NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
10	return NDR_ERR_SUCCESS;
11}
12
13_PUBLIC_ enum ndr_err_code ndr_pull_security_ace_flags(struct ndr_pull *ndr, int ndr_flags, uint8_t *r)
14{
15	uint8_t v;
16	NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
17	*r = v;
18	return NDR_ERR_SUCCESS;
19}
20
21_PUBLIC_ void ndr_print_security_ace_flags(struct ndr_print *ndr, const char *name, uint8_t r)
22{
23	ndr_print_uint8(ndr, name, r);
24	ndr->depth++;
25	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_OBJECT_INHERIT", SEC_ACE_FLAG_OBJECT_INHERIT, r);
26	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_CONTAINER_INHERIT", SEC_ACE_FLAG_CONTAINER_INHERIT, r);
27	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_NO_PROPAGATE_INHERIT", SEC_ACE_FLAG_NO_PROPAGATE_INHERIT, r);
28	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_INHERIT_ONLY", SEC_ACE_FLAG_INHERIT_ONLY, r);
29	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_INHERITED_ACE", SEC_ACE_FLAG_INHERITED_ACE, r);
30	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_VALID_INHERIT", SEC_ACE_FLAG_VALID_INHERIT, r);
31	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_SUCCESSFUL_ACCESS", SEC_ACE_FLAG_SUCCESSFUL_ACCESS, r);
32	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_FAILED_ACCESS", SEC_ACE_FLAG_FAILED_ACCESS, r);
33	ndr->depth--;
34}
35
36_PUBLIC_ enum ndr_err_code ndr_push_security_ace_type(struct ndr_push *ndr, int ndr_flags, enum security_ace_type r)
37{
38	NDR_CHECK(ndr_push_enum_uint8(ndr, NDR_SCALARS, r));
39	return NDR_ERR_SUCCESS;
40}
41
42_PUBLIC_ enum ndr_err_code ndr_pull_security_ace_type(struct ndr_pull *ndr, int ndr_flags, enum security_ace_type *r)
43{
44	uint8_t v;
45	NDR_CHECK(ndr_pull_enum_uint8(ndr, NDR_SCALARS, &v));
46	*r = v;
47	return NDR_ERR_SUCCESS;
48}
49
50_PUBLIC_ void ndr_print_security_ace_type(struct ndr_print *ndr, const char *name, enum security_ace_type r)
51{
52	const char *val = NULL;
53
54	switch (r) {
55		case SEC_ACE_TYPE_ACCESS_ALLOWED: val = "SEC_ACE_TYPE_ACCESS_ALLOWED"; break;
56		case SEC_ACE_TYPE_ACCESS_DENIED: val = "SEC_ACE_TYPE_ACCESS_DENIED"; break;
57		case SEC_ACE_TYPE_SYSTEM_AUDIT: val = "SEC_ACE_TYPE_SYSTEM_AUDIT"; break;
58		case SEC_ACE_TYPE_SYSTEM_ALARM: val = "SEC_ACE_TYPE_SYSTEM_ALARM"; break;
59		case SEC_ACE_TYPE_ALLOWED_COMPOUND: val = "SEC_ACE_TYPE_ALLOWED_COMPOUND"; break;
60		case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT: val = "SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT"; break;
61		case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT: val = "SEC_ACE_TYPE_ACCESS_DENIED_OBJECT"; break;
62		case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT: val = "SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT"; break;
63		case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT: val = "SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT"; break;
64	}
65	ndr_print_enum(ndr, name, "ENUM", val, r);
66}
67
68static enum ndr_err_code ndr_push_security_ace_object_flags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
69{
70	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
71	return NDR_ERR_SUCCESS;
72}
73
74static enum ndr_err_code ndr_pull_security_ace_object_flags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
75{
76	uint32_t v;
77	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
78	*r = v;
79	return NDR_ERR_SUCCESS;
80}
81
82_PUBLIC_ void ndr_print_security_ace_object_flags(struct ndr_print *ndr, const char *name, uint32_t r)
83{
84	ndr_print_uint32(ndr, name, r);
85	ndr->depth++;
86	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SEC_ACE_OBJECT_TYPE_PRESENT", SEC_ACE_OBJECT_TYPE_PRESENT, r);
87	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT", SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT, r);
88	ndr->depth--;
89}
90
91static enum ndr_err_code ndr_push_security_ace_object_type(struct ndr_push *ndr, int ndr_flags, const union security_ace_object_type *r)
92{
93	if (ndr_flags & NDR_SCALARS) {
94		int level = ndr_push_get_switch_value(ndr, r);
95		NDR_CHECK(ndr_push_union_align(ndr, 4));
96		switch (level) {
97			case SEC_ACE_OBJECT_TYPE_PRESENT: {
98				NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->type));
99			break; }
100
101			default: {
102			break; }
103
104		}
105	}
106	if (ndr_flags & NDR_BUFFERS) {
107		int level = ndr_push_get_switch_value(ndr, r);
108		switch (level) {
109			case SEC_ACE_OBJECT_TYPE_PRESENT:
110			break;
111
112			default:
113			break;
114
115		}
116	}
117	return NDR_ERR_SUCCESS;
118}
119
120static enum ndr_err_code ndr_pull_security_ace_object_type(struct ndr_pull *ndr, int ndr_flags, union security_ace_object_type *r)
121{
122	int level;
123	level = ndr_pull_get_switch_value(ndr, r);
124	if (ndr_flags & NDR_SCALARS) {
125		NDR_CHECK(ndr_pull_union_align(ndr, 4));
126		switch (level) {
127			case SEC_ACE_OBJECT_TYPE_PRESENT: {
128				NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->type));
129			break; }
130
131			default: {
132			break; }
133
134		}
135	}
136	if (ndr_flags & NDR_BUFFERS) {
137		switch (level) {
138			case SEC_ACE_OBJECT_TYPE_PRESENT:
139			break;
140
141			default:
142			break;
143
144		}
145	}
146	return NDR_ERR_SUCCESS;
147}
148
149_PUBLIC_ void ndr_print_security_ace_object_type(struct ndr_print *ndr, const char *name, const union security_ace_object_type *r)
150{
151	int level;
152	level = ndr_print_get_switch_value(ndr, r);
153	ndr_print_union(ndr, name, level, "security_ace_object_type");
154	switch (level) {
155		case SEC_ACE_OBJECT_TYPE_PRESENT:
156			ndr_print_GUID(ndr, "type", &r->type);
157		break;
158
159		default:
160		break;
161
162	}
163}
164
165static enum ndr_err_code ndr_push_security_ace_object_inherited_type(struct ndr_push *ndr, int ndr_flags, const union security_ace_object_inherited_type *r)
166{
167	if (ndr_flags & NDR_SCALARS) {
168		int level = ndr_push_get_switch_value(ndr, r);
169		NDR_CHECK(ndr_push_union_align(ndr, 4));
170		switch (level) {
171			case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT: {
172				NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->inherited_type));
173			break; }
174
175			default: {
176			break; }
177
178		}
179	}
180	if (ndr_flags & NDR_BUFFERS) {
181		int level = ndr_push_get_switch_value(ndr, r);
182		switch (level) {
183			case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT:
184			break;
185
186			default:
187			break;
188
189		}
190	}
191	return NDR_ERR_SUCCESS;
192}
193
194static enum ndr_err_code ndr_pull_security_ace_object_inherited_type(struct ndr_pull *ndr, int ndr_flags, union security_ace_object_inherited_type *r)
195{
196	int level;
197	level = ndr_pull_get_switch_value(ndr, r);
198	if (ndr_flags & NDR_SCALARS) {
199		NDR_CHECK(ndr_pull_union_align(ndr, 4));
200		switch (level) {
201			case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT: {
202				NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->inherited_type));
203			break; }
204
205			default: {
206			break; }
207
208		}
209	}
210	if (ndr_flags & NDR_BUFFERS) {
211		switch (level) {
212			case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT:
213			break;
214
215			default:
216			break;
217
218		}
219	}
220	return NDR_ERR_SUCCESS;
221}
222
223_PUBLIC_ void ndr_print_security_ace_object_inherited_type(struct ndr_print *ndr, const char *name, const union security_ace_object_inherited_type *r)
224{
225	int level;
226	level = ndr_print_get_switch_value(ndr, r);
227	ndr_print_union(ndr, name, level, "security_ace_object_inherited_type");
228	switch (level) {
229		case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT:
230			ndr_print_GUID(ndr, "inherited_type", &r->inherited_type);
231		break;
232
233		default:
234		break;
235
236	}
237}
238
239static enum ndr_err_code ndr_push_security_ace_object(struct ndr_push *ndr, int ndr_flags, const struct security_ace_object *r)
240{
241	if (ndr_flags & NDR_SCALARS) {
242		NDR_CHECK(ndr_push_align(ndr, 4));
243		NDR_CHECK(ndr_push_security_ace_object_flags(ndr, NDR_SCALARS, r->flags));
244		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->type, r->flags & SEC_ACE_OBJECT_TYPE_PRESENT));
245		NDR_CHECK(ndr_push_security_ace_object_type(ndr, NDR_SCALARS, &r->type));
246		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->inherited_type, r->flags & SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT));
247		NDR_CHECK(ndr_push_security_ace_object_inherited_type(ndr, NDR_SCALARS, &r->inherited_type));
248		NDR_CHECK(ndr_push_trailer_align(ndr, 4));
249	}
250	if (ndr_flags & NDR_BUFFERS) {
251		NDR_CHECK(ndr_push_security_ace_object_type(ndr, NDR_BUFFERS, &r->type));
252		NDR_CHECK(ndr_push_security_ace_object_inherited_type(ndr, NDR_BUFFERS, &r->inherited_type));
253	}
254	return NDR_ERR_SUCCESS;
255}
256
257static enum ndr_err_code ndr_pull_security_ace_object(struct ndr_pull *ndr, int ndr_flags, struct security_ace_object *r)
258{
259	if (ndr_flags & NDR_SCALARS) {
260		NDR_CHECK(ndr_pull_align(ndr, 4));
261		NDR_CHECK(ndr_pull_security_ace_object_flags(ndr, NDR_SCALARS, &r->flags));
262		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->type, r->flags & SEC_ACE_OBJECT_TYPE_PRESENT));
263		NDR_CHECK(ndr_pull_security_ace_object_type(ndr, NDR_SCALARS, &r->type));
264		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->inherited_type, r->flags & SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT));
265		NDR_CHECK(ndr_pull_security_ace_object_inherited_type(ndr, NDR_SCALARS, &r->inherited_type));
266		NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
267	}
268	if (ndr_flags & NDR_BUFFERS) {
269		NDR_CHECK(ndr_pull_security_ace_object_type(ndr, NDR_BUFFERS, &r->type));
270		NDR_CHECK(ndr_pull_security_ace_object_inherited_type(ndr, NDR_BUFFERS, &r->inherited_type));
271	}
272	return NDR_ERR_SUCCESS;
273}
274
275_PUBLIC_ void ndr_print_security_ace_object(struct ndr_print *ndr, const char *name, const struct security_ace_object *r)
276{
277	ndr_print_struct(ndr, name, "security_ace_object");
278	ndr->depth++;
279	ndr_print_security_ace_object_flags(ndr, "flags", r->flags);
280	ndr_print_set_switch_value(ndr, &r->type, r->flags & SEC_ACE_OBJECT_TYPE_PRESENT);
281	ndr_print_security_ace_object_type(ndr, "type", &r->type);
282	ndr_print_set_switch_value(ndr, &r->inherited_type, r->flags & SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT);
283	ndr_print_security_ace_object_inherited_type(ndr, "inherited_type", &r->inherited_type);
284	ndr->depth--;
285}
286
287_PUBLIC_ enum ndr_err_code ndr_push_security_ace_object_ctr(struct ndr_push *ndr, int ndr_flags, const union security_ace_object_ctr *r)
288{
289	if (ndr_flags & NDR_SCALARS) {
290		int level = ndr_push_get_switch_value(ndr, r);
291		NDR_CHECK(ndr_push_union_align(ndr, 4));
292		switch (level) {
293			case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT: {
294				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_SCALARS, &r->object));
295			break; }
296
297			case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT: {
298				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_SCALARS, &r->object));
299			break; }
300
301			case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT: {
302				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_SCALARS, &r->object));
303			break; }
304
305			case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT: {
306				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_SCALARS, &r->object));
307			break; }
308
309			default: {
310			break; }
311
312		}
313	}
314	if (ndr_flags & NDR_BUFFERS) {
315		int level = ndr_push_get_switch_value(ndr, r);
316		switch (level) {
317			case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
318				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_BUFFERS, &r->object));
319			break;
320
321			case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT:
322				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_BUFFERS, &r->object));
323			break;
324
325			case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT:
326				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_BUFFERS, &r->object));
327			break;
328
329			case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT:
330				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_BUFFERS, &r->object));
331			break;
332
333			default:
334			break;
335
336		}
337	}
338	return NDR_ERR_SUCCESS;
339}
340
341_PUBLIC_ enum ndr_err_code ndr_pull_security_ace_object_ctr(struct ndr_pull *ndr, int ndr_flags, union security_ace_object_ctr *r)
342{
343	int level;
344	level = ndr_pull_get_switch_value(ndr, r);
345	if (ndr_flags & NDR_SCALARS) {
346		NDR_CHECK(ndr_pull_union_align(ndr, 4));
347		switch (level) {
348			case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT: {
349				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_SCALARS, &r->object));
350			break; }
351
352			case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT: {
353				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_SCALARS, &r->object));
354			break; }
355
356			case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT: {
357				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_SCALARS, &r->object));
358			break; }
359
360			case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT: {
361				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_SCALARS, &r->object));
362			break; }
363
364			default: {
365			break; }
366
367		}
368	}
369	if (ndr_flags & NDR_BUFFERS) {
370		switch (level) {
371			case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
372				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_BUFFERS, &r->object));
373			break;
374
375			case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT:
376				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_BUFFERS, &r->object));
377			break;
378
379			case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT:
380				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_BUFFERS, &r->object));
381			break;
382
383			case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT:
384				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_BUFFERS, &r->object));
385			break;
386
387			default:
388			break;
389
390		}
391	}
392	return NDR_ERR_SUCCESS;
393}
394
395_PUBLIC_ void ndr_print_security_ace_object_ctr(struct ndr_print *ndr, const char *name, const union security_ace_object_ctr *r)
396{
397	int level;
398	level = ndr_print_get_switch_value(ndr, r);
399	ndr_print_union(ndr, name, level, "security_ace_object_ctr");
400	switch (level) {
401		case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
402			ndr_print_security_ace_object(ndr, "object", &r->object);
403		break;
404
405		case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT:
406			ndr_print_security_ace_object(ndr, "object", &r->object);
407		break;
408
409		case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT:
410			ndr_print_security_ace_object(ndr, "object", &r->object);
411		break;
412
413		case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT:
414			ndr_print_security_ace_object(ndr, "object", &r->object);
415		break;
416
417		default:
418		break;
419
420	}
421}
422
423_PUBLIC_ enum ndr_err_code ndr_push_security_ace(struct ndr_push *ndr, int ndr_flags, const struct security_ace *r)
424{
425	if (ndr_flags & NDR_SCALARS) {
426		NDR_CHECK(ndr_push_align(ndr, 4));
427		NDR_CHECK(ndr_push_security_ace_type(ndr, NDR_SCALARS, r->type));
428		NDR_CHECK(ndr_push_security_ace_flags(ndr, NDR_SCALARS, r->flags));
429		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_security_ace(r, ndr->iconv_convenience, ndr->flags)));
430		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->access_mask));
431		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->object, r->type));
432		NDR_CHECK(ndr_push_security_ace_object_ctr(ndr, NDR_SCALARS, &r->object));
433		NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, &r->trustee));
434		NDR_CHECK(ndr_push_trailer_align(ndr, 4));
435	}
436	if (ndr_flags & NDR_BUFFERS) {
437		NDR_CHECK(ndr_push_security_ace_object_ctr(ndr, NDR_BUFFERS, &r->object));
438	}
439	return NDR_ERR_SUCCESS;
440}
441
442_PUBLIC_ void ndr_print_security_ace(struct ndr_print *ndr, const char *name, const struct security_ace *r)
443{
444	ndr_print_struct(ndr, name, "security_ace");
445	ndr->depth++;
446	ndr_print_security_ace_type(ndr, "type", r->type);
447	ndr_print_security_ace_flags(ndr, "flags", r->flags);
448	ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_security_ace(r, ndr->iconv_convenience, ndr->flags):r->size);
449	ndr_print_uint32(ndr, "access_mask", r->access_mask);
450	ndr_print_set_switch_value(ndr, &r->object, r->type);
451	ndr_print_security_ace_object_ctr(ndr, "object", &r->object);
452	ndr_print_dom_sid(ndr, "trustee", &r->trustee);
453	ndr->depth--;
454}
455
456static enum ndr_err_code ndr_push_security_acl_revision(struct ndr_push *ndr, int ndr_flags, enum security_acl_revision r)
457{
458	NDR_CHECK(ndr_push_enum_uint1632(ndr, NDR_SCALARS, r));
459	return NDR_ERR_SUCCESS;
460}
461
462static enum ndr_err_code ndr_pull_security_acl_revision(struct ndr_pull *ndr, int ndr_flags, enum security_acl_revision *r)
463{
464	uint16_t v;
465	NDR_CHECK(ndr_pull_enum_uint1632(ndr, NDR_SCALARS, &v));
466	*r = v;
467	return NDR_ERR_SUCCESS;
468}
469
470_PUBLIC_ void ndr_print_security_acl_revision(struct ndr_print *ndr, const char *name, enum security_acl_revision r)
471{
472	const char *val = NULL;
473
474	switch (r) {
475		case SECURITY_ACL_REVISION_NT4: val = "SECURITY_ACL_REVISION_NT4"; break;
476		case SECURITY_ACL_REVISION_ADS: val = "SECURITY_ACL_REVISION_ADS"; break;
477	}
478	ndr_print_enum(ndr, name, "ENUM", val, r);
479}
480
481_PUBLIC_ enum ndr_err_code ndr_push_security_acl(struct ndr_push *ndr, int ndr_flags, const struct security_acl *r)
482{
483	uint32_t cntr_aces_0;
484	if (ndr_flags & NDR_SCALARS) {
485		NDR_CHECK(ndr_push_align(ndr, 4));
486		NDR_CHECK(ndr_push_security_acl_revision(ndr, NDR_SCALARS, r->revision));
487		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_security_acl(r, ndr->iconv_convenience, ndr->flags)));
488		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_aces));
489		for (cntr_aces_0 = 0; cntr_aces_0 < r->num_aces; cntr_aces_0++) {
490			NDR_CHECK(ndr_push_security_ace(ndr, NDR_SCALARS, &r->aces[cntr_aces_0]));
491		}
492		NDR_CHECK(ndr_push_trailer_align(ndr, 4));
493	}
494	if (ndr_flags & NDR_BUFFERS) {
495		for (cntr_aces_0 = 0; cntr_aces_0 < r->num_aces; cntr_aces_0++) {
496			NDR_CHECK(ndr_push_security_ace(ndr, NDR_BUFFERS, &r->aces[cntr_aces_0]));
497		}
498	}
499	return NDR_ERR_SUCCESS;
500}
501
502_PUBLIC_ enum ndr_err_code ndr_pull_security_acl(struct ndr_pull *ndr, int ndr_flags, struct security_acl *r)
503{
504	uint32_t cntr_aces_0;
505	TALLOC_CTX *_mem_save_aces_0;
506	if (ndr_flags & NDR_SCALARS) {
507		NDR_CHECK(ndr_pull_align(ndr, 4));
508		NDR_CHECK(ndr_pull_security_acl_revision(ndr, NDR_SCALARS, &r->revision));
509		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
510		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_aces));
511		if (r->num_aces > 1000) {
512			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
513		}
514		NDR_PULL_ALLOC_N(ndr, r->aces, r->num_aces);
515		_mem_save_aces_0 = NDR_PULL_GET_MEM_CTX(ndr);
516		NDR_PULL_SET_MEM_CTX(ndr, r->aces, 0);
517		for (cntr_aces_0 = 0; cntr_aces_0 < r->num_aces; cntr_aces_0++) {
518			NDR_CHECK(ndr_pull_security_ace(ndr, NDR_SCALARS, &r->aces[cntr_aces_0]));
519		}
520		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_aces_0, 0);
521		NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
522	}
523	if (ndr_flags & NDR_BUFFERS) {
524		_mem_save_aces_0 = NDR_PULL_GET_MEM_CTX(ndr);
525		NDR_PULL_SET_MEM_CTX(ndr, r->aces, 0);
526		for (cntr_aces_0 = 0; cntr_aces_0 < r->num_aces; cntr_aces_0++) {
527			NDR_CHECK(ndr_pull_security_ace(ndr, NDR_BUFFERS, &r->aces[cntr_aces_0]));
528		}
529		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_aces_0, 0);
530	}
531	return NDR_ERR_SUCCESS;
532}
533
534_PUBLIC_ void ndr_print_security_acl(struct ndr_print *ndr, const char *name, const struct security_acl *r)
535{
536	uint32_t cntr_aces_0;
537	ndr_print_struct(ndr, name, "security_acl");
538	ndr->depth++;
539	ndr_print_security_acl_revision(ndr, "revision", r->revision);
540	ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_security_acl(r, ndr->iconv_convenience, ndr->flags):r->size);
541	ndr_print_uint32(ndr, "num_aces", r->num_aces);
542	ndr->print(ndr, "%s: ARRAY(%d)", "aces", (int)r->num_aces);
543	ndr->depth++;
544	for (cntr_aces_0=0;cntr_aces_0<r->num_aces;cntr_aces_0++) {
545		char *idx_0=NULL;
546		if (asprintf(&idx_0, "[%d]", cntr_aces_0) != -1) {
547			ndr_print_security_ace(ndr, "aces", &r->aces[cntr_aces_0]);
548			free(idx_0);
549		}
550	}
551	ndr->depth--;
552	ndr->depth--;
553}
554
555_PUBLIC_ enum ndr_err_code ndr_push_security_descriptor_revision(struct ndr_push *ndr, int ndr_flags, enum security_descriptor_revision r)
556{
557	NDR_CHECK(ndr_push_enum_uint8(ndr, NDR_SCALARS, r));
558	return NDR_ERR_SUCCESS;
559}
560
561_PUBLIC_ enum ndr_err_code ndr_pull_security_descriptor_revision(struct ndr_pull *ndr, int ndr_flags, enum security_descriptor_revision *r)
562{
563	uint8_t v;
564	NDR_CHECK(ndr_pull_enum_uint8(ndr, NDR_SCALARS, &v));
565	*r = v;
566	return NDR_ERR_SUCCESS;
567}
568
569_PUBLIC_ void ndr_print_security_descriptor_revision(struct ndr_print *ndr, const char *name, enum security_descriptor_revision r)
570{
571	const char *val = NULL;
572
573	switch (r) {
574		case SECURITY_DESCRIPTOR_REVISION_1: val = "SECURITY_DESCRIPTOR_REVISION_1"; break;
575	}
576	ndr_print_enum(ndr, name, "ENUM", val, r);
577}
578
579_PUBLIC_ enum ndr_err_code ndr_push_security_descriptor_type(struct ndr_push *ndr, int ndr_flags, uint16_t r)
580{
581	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
582	return NDR_ERR_SUCCESS;
583}
584
585_PUBLIC_ enum ndr_err_code ndr_pull_security_descriptor_type(struct ndr_pull *ndr, int ndr_flags, uint16_t *r)
586{
587	uint16_t v;
588	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
589	*r = v;
590	return NDR_ERR_SUCCESS;
591}
592
593_PUBLIC_ void ndr_print_security_descriptor_type(struct ndr_print *ndr, const char *name, uint16_t r)
594{
595	ndr_print_uint16(ndr, name, r);
596	ndr->depth++;
597	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_OWNER_DEFAULTED", SEC_DESC_OWNER_DEFAULTED, r);
598	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_GROUP_DEFAULTED", SEC_DESC_GROUP_DEFAULTED, r);
599	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_PRESENT", SEC_DESC_DACL_PRESENT, r);
600	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_DEFAULTED", SEC_DESC_DACL_DEFAULTED, r);
601	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SACL_PRESENT", SEC_DESC_SACL_PRESENT, r);
602	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SACL_DEFAULTED", SEC_DESC_SACL_DEFAULTED, r);
603	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_TRUSTED", SEC_DESC_DACL_TRUSTED, r);
604	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SERVER_SECURITY", SEC_DESC_SERVER_SECURITY, r);
605	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_AUTO_INHERIT_REQ", SEC_DESC_DACL_AUTO_INHERIT_REQ, r);
606	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SACL_AUTO_INHERIT_REQ", SEC_DESC_SACL_AUTO_INHERIT_REQ, r);
607	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_AUTO_INHERITED", SEC_DESC_DACL_AUTO_INHERITED, r);
608	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SACL_AUTO_INHERITED", SEC_DESC_SACL_AUTO_INHERITED, r);
609	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_PROTECTED", SEC_DESC_DACL_PROTECTED, r);
610	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SACL_PROTECTED", SEC_DESC_SACL_PROTECTED, r);
611	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_RM_CONTROL_VALID", SEC_DESC_RM_CONTROL_VALID, r);
612	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SELF_RELATIVE", SEC_DESC_SELF_RELATIVE, r);
613	ndr->depth--;
614}
615
616_PUBLIC_ enum ndr_err_code ndr_push_security_descriptor(struct ndr_push *ndr, int ndr_flags, const struct security_descriptor *r)
617{
618	{
619		uint32_t _flags_save_STRUCT = ndr->flags;
620		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
621		if (ndr_flags & NDR_SCALARS) {
622			NDR_CHECK(ndr_push_align(ndr, 5));
623			NDR_CHECK(ndr_push_security_descriptor_revision(ndr, NDR_SCALARS, r->revision));
624			NDR_CHECK(ndr_push_security_descriptor_type(ndr, NDR_SCALARS, r->type));
625			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->owner_sid));
626			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->group_sid));
627			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sacl));
628			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->dacl));
629			NDR_CHECK(ndr_push_trailer_align(ndr, 5));
630		}
631		if (ndr_flags & NDR_BUFFERS) {
632			if (r->owner_sid) {
633				NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->owner_sid));
634				NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->owner_sid));
635				NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->owner_sid));
636			}
637			if (r->group_sid) {
638				NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->group_sid));
639				NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->group_sid));
640				NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->group_sid));
641			}
642			if (r->sacl) {
643				NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sacl));
644				NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->sacl));
645				NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sacl));
646			}
647			if (r->dacl) {
648				NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dacl));
649				NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->dacl));
650				NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dacl));
651			}
652		}
653		ndr->flags = _flags_save_STRUCT;
654	}
655	return NDR_ERR_SUCCESS;
656}
657
658_PUBLIC_ enum ndr_err_code ndr_pull_security_descriptor(struct ndr_pull *ndr, int ndr_flags, struct security_descriptor *r)
659{
660	uint32_t _ptr_owner_sid;
661	TALLOC_CTX *_mem_save_owner_sid_0;
662	uint32_t _ptr_group_sid;
663	TALLOC_CTX *_mem_save_group_sid_0;
664	uint32_t _ptr_sacl;
665	TALLOC_CTX *_mem_save_sacl_0;
666	uint32_t _ptr_dacl;
667	TALLOC_CTX *_mem_save_dacl_0;
668	{
669		uint32_t _flags_save_STRUCT = ndr->flags;
670		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
671		if (ndr_flags & NDR_SCALARS) {
672			NDR_CHECK(ndr_pull_align(ndr, 5));
673			NDR_CHECK(ndr_pull_security_descriptor_revision(ndr, NDR_SCALARS, &r->revision));
674			NDR_CHECK(ndr_pull_security_descriptor_type(ndr, NDR_SCALARS, &r->type));
675			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_owner_sid));
676			if (_ptr_owner_sid) {
677				NDR_PULL_ALLOC(ndr, r->owner_sid);
678				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->owner_sid, _ptr_owner_sid));
679			} else {
680				r->owner_sid = NULL;
681			}
682			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_group_sid));
683			if (_ptr_group_sid) {
684				NDR_PULL_ALLOC(ndr, r->group_sid);
685				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->group_sid, _ptr_group_sid));
686			} else {
687				r->group_sid = NULL;
688			}
689			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sacl));
690			if (_ptr_sacl) {
691				NDR_PULL_ALLOC(ndr, r->sacl);
692				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->sacl, _ptr_sacl));
693			} else {
694				r->sacl = NULL;
695			}
696			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dacl));
697			if (_ptr_dacl) {
698				NDR_PULL_ALLOC(ndr, r->dacl);
699				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->dacl, _ptr_dacl));
700			} else {
701				r->dacl = NULL;
702			}
703			NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
704		}
705		if (ndr_flags & NDR_BUFFERS) {
706			if (r->owner_sid) {
707				uint32_t _relative_save_offset;
708				_relative_save_offset = ndr->offset;
709				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->owner_sid));
710				_mem_save_owner_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
711				NDR_PULL_SET_MEM_CTX(ndr, r->owner_sid, 0);
712				NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, r->owner_sid));
713				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_owner_sid_0, 0);
714				ndr->offset = _relative_save_offset;
715			}
716			if (r->group_sid) {
717				uint32_t _relative_save_offset;
718				_relative_save_offset = ndr->offset;
719				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->group_sid));
720				_mem_save_group_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
721				NDR_PULL_SET_MEM_CTX(ndr, r->group_sid, 0);
722				NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, r->group_sid));
723				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_sid_0, 0);
724				ndr->offset = _relative_save_offset;
725			}
726			if (r->sacl) {
727				uint32_t _relative_save_offset;
728				_relative_save_offset = ndr->offset;
729				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->sacl));
730				_mem_save_sacl_0 = NDR_PULL_GET_MEM_CTX(ndr);
731				NDR_PULL_SET_MEM_CTX(ndr, r->sacl, 0);
732				NDR_CHECK(ndr_pull_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->sacl));
733				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sacl_0, 0);
734				ndr->offset = _relative_save_offset;
735			}
736			if (r->dacl) {
737				uint32_t _relative_save_offset;
738				_relative_save_offset = ndr->offset;
739				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->dacl));
740				_mem_save_dacl_0 = NDR_PULL_GET_MEM_CTX(ndr);
741				NDR_PULL_SET_MEM_CTX(ndr, r->dacl, 0);
742				NDR_CHECK(ndr_pull_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->dacl));
743				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dacl_0, 0);
744				ndr->offset = _relative_save_offset;
745			}
746		}
747		ndr->flags = _flags_save_STRUCT;
748	}
749	return NDR_ERR_SUCCESS;
750}
751
752_PUBLIC_ void ndr_print_security_descriptor(struct ndr_print *ndr, const char *name, const struct security_descriptor *r)
753{
754	ndr_print_struct(ndr, name, "security_descriptor");
755	{
756		uint32_t _flags_save_STRUCT = ndr->flags;
757		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
758		ndr->depth++;
759		ndr_print_security_descriptor_revision(ndr, "revision", r->revision);
760		ndr_print_security_descriptor_type(ndr, "type", r->type);
761		ndr_print_ptr(ndr, "owner_sid", r->owner_sid);
762		ndr->depth++;
763		if (r->owner_sid) {
764			ndr_print_dom_sid(ndr, "owner_sid", r->owner_sid);
765		}
766		ndr->depth--;
767		ndr_print_ptr(ndr, "group_sid", r->group_sid);
768		ndr->depth++;
769		if (r->group_sid) {
770			ndr_print_dom_sid(ndr, "group_sid", r->group_sid);
771		}
772		ndr->depth--;
773		ndr_print_ptr(ndr, "sacl", r->sacl);
774		ndr->depth++;
775		if (r->sacl) {
776			ndr_print_security_acl(ndr, "sacl", r->sacl);
777		}
778		ndr->depth--;
779		ndr_print_ptr(ndr, "dacl", r->dacl);
780		ndr->depth++;
781		if (r->dacl) {
782			ndr_print_security_acl(ndr, "dacl", r->dacl);
783		}
784		ndr->depth--;
785		ndr->depth--;
786		ndr->flags = _flags_save_STRUCT;
787	}
788}
789
790_PUBLIC_ enum ndr_err_code ndr_push_sec_desc_buf(struct ndr_push *ndr, int ndr_flags, const struct sec_desc_buf *r)
791{
792	if (ndr_flags & NDR_SCALARS) {
793		NDR_CHECK(ndr_push_align(ndr, 5));
794		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_size_security_descriptor(r->sd, ndr->iconv_convenience, ndr->flags)));
795		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sd));
796		NDR_CHECK(ndr_push_trailer_align(ndr, 5));
797	}
798	if (ndr_flags & NDR_BUFFERS) {
799		if (r->sd) {
800			{
801				struct ndr_push *_ndr_sd;
802				NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_sd, 4, -1));
803				NDR_CHECK(ndr_push_security_descriptor(_ndr_sd, NDR_SCALARS|NDR_BUFFERS, r->sd));
804				NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_sd, 4, -1));
805			}
806		}
807	}
808	return NDR_ERR_SUCCESS;
809}
810
811_PUBLIC_ enum ndr_err_code ndr_pull_sec_desc_buf(struct ndr_pull *ndr, int ndr_flags, struct sec_desc_buf *r)
812{
813	uint32_t _ptr_sd;
814	TALLOC_CTX *_mem_save_sd_0;
815	if (ndr_flags & NDR_SCALARS) {
816		NDR_CHECK(ndr_pull_align(ndr, 5));
817		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sd_size));
818		if (r->sd_size > 0x40000) {
819			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
820		}
821		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sd));
822		if (_ptr_sd) {
823			NDR_PULL_ALLOC(ndr, r->sd);
824		} else {
825			r->sd = NULL;
826		}
827		NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
828	}
829	if (ndr_flags & NDR_BUFFERS) {
830		if (r->sd) {
831			_mem_save_sd_0 = NDR_PULL_GET_MEM_CTX(ndr);
832			NDR_PULL_SET_MEM_CTX(ndr, r->sd, 0);
833			{
834				struct ndr_pull *_ndr_sd;
835				NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_sd, 4, -1));
836				NDR_CHECK(ndr_pull_security_descriptor(_ndr_sd, NDR_SCALARS|NDR_BUFFERS, r->sd));
837				NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_sd, 4, -1));
838			}
839			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sd_0, 0);
840		}
841	}
842	return NDR_ERR_SUCCESS;
843}
844
845_PUBLIC_ void ndr_print_sec_desc_buf(struct ndr_print *ndr, const char *name, const struct sec_desc_buf *r)
846{
847	ndr_print_struct(ndr, name, "sec_desc_buf");
848	ndr->depth++;
849	ndr_print_uint32(ndr, "sd_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_security_descriptor(r->sd, ndr->iconv_convenience, ndr->flags):r->sd_size);
850	ndr_print_ptr(ndr, "sd", r->sd);
851	ndr->depth++;
852	if (r->sd) {
853		ndr_print_security_descriptor(ndr, "sd", r->sd);
854	}
855	ndr->depth--;
856	ndr->depth--;
857}
858
859_PUBLIC_ enum ndr_err_code ndr_push_security_token(struct ndr_push *ndr, int ndr_flags, const struct security_token *r)
860{
861	uint32_t cntr_sids_0;
862	if (ndr_flags & NDR_SCALARS) {
863		NDR_CHECK(ndr_push_align(ndr, 5));
864		NDR_CHECK(ndr_push_unique_ptr(ndr, r->user_sid));
865		NDR_CHECK(ndr_push_unique_ptr(ndr, r->group_sid));
866		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_sids));
867		NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, r->num_sids));
868		for (cntr_sids_0 = 0; cntr_sids_0 < r->num_sids; cntr_sids_0++) {
869			NDR_CHECK(ndr_push_unique_ptr(ndr, r->sids[cntr_sids_0]));
870		}
871		NDR_CHECK(ndr_push_udlong(ndr, NDR_SCALARS, r->privilege_mask));
872		NDR_CHECK(ndr_push_unique_ptr(ndr, r->default_dacl));
873		NDR_CHECK(ndr_push_trailer_align(ndr, 5));
874	}
875	if (ndr_flags & NDR_BUFFERS) {
876		if (r->user_sid) {
877			NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->user_sid));
878		}
879		if (r->group_sid) {
880			NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->group_sid));
881		}
882		for (cntr_sids_0 = 0; cntr_sids_0 < r->num_sids; cntr_sids_0++) {
883			if (r->sids[cntr_sids_0]) {
884				NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->sids[cntr_sids_0]));
885			}
886		}
887		if (r->default_dacl) {
888			NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->default_dacl));
889		}
890	}
891	return NDR_ERR_SUCCESS;
892}
893
894_PUBLIC_ enum ndr_err_code ndr_pull_security_token(struct ndr_pull *ndr, int ndr_flags, struct security_token *r)
895{
896	uint32_t _ptr_user_sid;
897	TALLOC_CTX *_mem_save_user_sid_0;
898	uint32_t _ptr_group_sid;
899	TALLOC_CTX *_mem_save_group_sid_0;
900	uint32_t _ptr_sids;
901	uint32_t cntr_sids_0;
902	TALLOC_CTX *_mem_save_sids_0;
903	TALLOC_CTX *_mem_save_sids_1;
904	uint32_t _ptr_default_dacl;
905	TALLOC_CTX *_mem_save_default_dacl_0;
906	if (ndr_flags & NDR_SCALARS) {
907		NDR_CHECK(ndr_pull_align(ndr, 5));
908		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user_sid));
909		if (_ptr_user_sid) {
910			NDR_PULL_ALLOC(ndr, r->user_sid);
911		} else {
912			r->user_sid = NULL;
913		}
914		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_group_sid));
915		if (_ptr_group_sid) {
916			NDR_PULL_ALLOC(ndr, r->group_sid);
917		} else {
918			r->group_sid = NULL;
919		}
920		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_sids));
921		NDR_CHECK(ndr_pull_array_size(ndr, &r->sids));
922		NDR_PULL_ALLOC_N(ndr, r->sids, ndr_get_array_size(ndr, &r->sids));
923		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
924		NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
925		for (cntr_sids_0 = 0; cntr_sids_0 < r->num_sids; cntr_sids_0++) {
926			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sids));
927			if (_ptr_sids) {
928				NDR_PULL_ALLOC(ndr, r->sids[cntr_sids_0]);
929			} else {
930				r->sids[cntr_sids_0] = NULL;
931			}
932		}
933		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, 0);
934		NDR_CHECK(ndr_pull_udlong(ndr, NDR_SCALARS, &r->privilege_mask));
935		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_default_dacl));
936		if (_ptr_default_dacl) {
937			NDR_PULL_ALLOC(ndr, r->default_dacl);
938		} else {
939			r->default_dacl = NULL;
940		}
941		if (r->sids) {
942			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->sids, r->num_sids));
943		}
944		NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
945	}
946	if (ndr_flags & NDR_BUFFERS) {
947		if (r->user_sid) {
948			_mem_save_user_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
949			NDR_PULL_SET_MEM_CTX(ndr, r->user_sid, 0);
950			NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, r->user_sid));
951			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_sid_0, 0);
952		}
953		if (r->group_sid) {
954			_mem_save_group_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
955			NDR_PULL_SET_MEM_CTX(ndr, r->group_sid, 0);
956			NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, r->group_sid));
957			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_sid_0, 0);
958		}
959		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
960		NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
961		for (cntr_sids_0 = 0; cntr_sids_0 < r->num_sids; cntr_sids_0++) {
962			if (r->sids[cntr_sids_0]) {
963				_mem_save_sids_1 = NDR_PULL_GET_MEM_CTX(ndr);
964				NDR_PULL_SET_MEM_CTX(ndr, r->sids[cntr_sids_0], 0);
965				NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, r->sids[cntr_sids_0]));
966				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_1, 0);
967			}
968		}
969		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, 0);
970		if (r->default_dacl) {
971			_mem_save_default_dacl_0 = NDR_PULL_GET_MEM_CTX(ndr);
972			NDR_PULL_SET_MEM_CTX(ndr, r->default_dacl, 0);
973			NDR_CHECK(ndr_pull_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->default_dacl));
974			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_default_dacl_0, 0);
975		}
976	}
977	return NDR_ERR_SUCCESS;
978}
979
980_PUBLIC_ void ndr_print_security_token(struct ndr_print *ndr, const char *name, const struct security_token *r)
981{
982	uint32_t cntr_sids_0;
983	ndr_print_struct(ndr, name, "security_token");
984	ndr->depth++;
985	ndr_print_ptr(ndr, "user_sid", r->user_sid);
986	ndr->depth++;
987	if (r->user_sid) {
988		ndr_print_dom_sid(ndr, "user_sid", r->user_sid);
989	}
990	ndr->depth--;
991	ndr_print_ptr(ndr, "group_sid", r->group_sid);
992	ndr->depth++;
993	if (r->group_sid) {
994		ndr_print_dom_sid(ndr, "group_sid", r->group_sid);
995	}
996	ndr->depth--;
997	ndr_print_uint32(ndr, "num_sids", r->num_sids);
998	ndr->print(ndr, "%s: ARRAY(%d)", "sids", (int)r->num_sids);
999	ndr->depth++;
1000	for (cntr_sids_0=0;cntr_sids_0<r->num_sids;cntr_sids_0++) {
1001		char *idx_0=NULL;
1002		if (asprintf(&idx_0, "[%d]", cntr_sids_0) != -1) {
1003			ndr_print_ptr(ndr, "sids", r->sids[cntr_sids_0]);
1004			ndr->depth++;
1005			if (r->sids[cntr_sids_0]) {
1006				ndr_print_dom_sid(ndr, "sids", r->sids[cntr_sids_0]);
1007			}
1008			ndr->depth--;
1009			free(idx_0);
1010		}
1011	}
1012	ndr->depth--;
1013	ndr_print_udlong(ndr, "privilege_mask", r->privilege_mask);
1014	ndr_print_ptr(ndr, "default_dacl", r->default_dacl);
1015	ndr->depth++;
1016	if (r->default_dacl) {
1017		ndr_print_security_acl(ndr, "default_dacl", r->default_dacl);
1018	}
1019	ndr->depth--;
1020	ndr->depth--;
1021}
1022
1023_PUBLIC_ enum ndr_err_code ndr_push_security_secinfo(struct ndr_push *ndr, int ndr_flags, uint32_t r)
1024{
1025	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
1026	return NDR_ERR_SUCCESS;
1027}
1028
1029_PUBLIC_ enum ndr_err_code ndr_pull_security_secinfo(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
1030{
1031	uint32_t v;
1032	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
1033	*r = v;
1034	return NDR_ERR_SUCCESS;
1035}
1036
1037_PUBLIC_ void ndr_print_security_secinfo(struct ndr_print *ndr, const char *name, uint32_t r)
1038{
1039	ndr_print_uint32(ndr, name, r);
1040	ndr->depth++;
1041	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_OWNER", SECINFO_OWNER, r);
1042	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_GROUP", SECINFO_GROUP, r);
1043	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_DACL", SECINFO_DACL, r);
1044	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_SACL", SECINFO_SACL, r);
1045	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_UNPROTECTED_SACL", SECINFO_UNPROTECTED_SACL, r);
1046	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_UNPROTECTED_DACL", SECINFO_UNPROTECTED_DACL, r);
1047	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_PROTECTED_SACL", SECINFO_PROTECTED_SACL, r);
1048	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_PROTECTED_DACL", SECINFO_PROTECTED_DACL, r);
1049	ndr->depth--;
1050}
1051
1052_PUBLIC_ enum ndr_err_code ndr_push_kerb_EncTypes(struct ndr_push *ndr, int ndr_flags, uint32_t r)
1053{
1054	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
1055	return NDR_ERR_SUCCESS;
1056}
1057
1058_PUBLIC_ enum ndr_err_code ndr_pull_kerb_EncTypes(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
1059{
1060	uint32_t v;
1061	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
1062	*r = v;
1063	return NDR_ERR_SUCCESS;
1064}
1065
1066_PUBLIC_ void ndr_print_kerb_EncTypes(struct ndr_print *ndr, const char *name, uint32_t r)
1067{
1068	ndr_print_uint32(ndr, name, r);
1069	ndr->depth++;
1070	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "KERB_ENCTYPE_DES_CBC_CRC", KERB_ENCTYPE_DES_CBC_CRC, r);
1071	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "KERB_ENCTYPE_DES_CBC_MD5", KERB_ENCTYPE_DES_CBC_MD5, r);
1072	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "KERB_ENCTYPE_RC4_HMAC_MD5", KERB_ENCTYPE_RC4_HMAC_MD5, r);
1073	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "KERB_ENCTYPE_AES128_CTS_HMAC_SHA1_96", KERB_ENCTYPE_AES128_CTS_HMAC_SHA1_96, r);
1074	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "KERB_ENCTYPE_AES256_CTS_HMAC_SHA1_96", KERB_ENCTYPE_AES256_CTS_HMAC_SHA1_96, r);
1075	ndr->depth--;
1076}
1077
1078_PUBLIC_ enum ndr_err_code ndr_push_security_autoinherit(struct ndr_push *ndr, int ndr_flags, uint32_t r)
1079{
1080	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
1081	return NDR_ERR_SUCCESS;
1082}
1083
1084_PUBLIC_ enum ndr_err_code ndr_pull_security_autoinherit(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
1085{
1086	uint32_t v;
1087	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
1088	*r = v;
1089	return NDR_ERR_SUCCESS;
1090}
1091
1092_PUBLIC_ void ndr_print_security_autoinherit(struct ndr_print *ndr, const char *name, uint32_t r)
1093{
1094	ndr_print_uint32(ndr, name, r);
1095	ndr->depth++;
1096	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SEC_DACL_AUTO_INHERIT", SEC_DACL_AUTO_INHERIT, r);
1097	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SEC_SACL_AUTO_INHERIT", SEC_SACL_AUTO_INHERIT, r);
1098	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SEC_DEFAULT_DESCRIPTOR", SEC_DEFAULT_DESCRIPTOR, r);
1099	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SEC_OWNER_FROM_PARENT", SEC_OWNER_FROM_PARENT, r);
1100	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SEC_GROUP_FROM_PARENT", SEC_GROUP_FROM_PARENT, r);
1101	ndr->depth--;
1102}
1103
1104