source: branches/samba-3.5.x/librpc/gen_ndr/srv_samr.c

Last change on this file was 414, checked in by Herwig Bauernfeind, 15 years ago

Samba 3.5.0: Initial import

File size: 134.7 KB
Line 
1/*
2 * Unix SMB/CIFS implementation.
3 * server auto-generated by pidl. DO NOT MODIFY!
4 */
5
6#include "includes.h"
7#include "../librpc/gen_ndr/srv_samr.h"
8
9static bool api_samr_Connect(pipes_struct *p)
10{
11 const struct ndr_interface_call *call;
12 struct ndr_pull *pull;
13 struct ndr_push *push;
14 enum ndr_err_code ndr_err;
15 DATA_BLOB blob;
16 struct samr_Connect *r;
17
18 call = &ndr_table_samr.calls[NDR_SAMR_CONNECT];
19
20 r = talloc(talloc_tos(), struct samr_Connect);
21 if (r == NULL) {
22 return false;
23 }
24
25 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
26 talloc_free(r);
27 return false;
28 }
29
30 pull = ndr_pull_init_blob(&blob, r, NULL);
31 if (pull == NULL) {
32 talloc_free(r);
33 return false;
34 }
35
36 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
37 ndr_err = call->ndr_pull(pull, NDR_IN, r);
38 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
39 talloc_free(r);
40 return false;
41 }
42
43 if (DEBUGLEVEL >= 10) {
44 NDR_PRINT_IN_DEBUG(samr_Connect, r);
45 }
46
47 ZERO_STRUCT(r->out);
48 r->out.connect_handle = talloc_zero(r, struct policy_handle);
49 if (r->out.connect_handle == NULL) {
50 talloc_free(r);
51 return false;
52 }
53
54 r->out.result = _samr_Connect(p, r);
55
56 if (p->rng_fault_state) {
57 talloc_free(r);
58 /* Return true here, srv_pipe_hnd.c will take care */
59 return true;
60 }
61
62 if (DEBUGLEVEL >= 10) {
63 NDR_PRINT_OUT_DEBUG(samr_Connect, r);
64 }
65
66 push = ndr_push_init_ctx(r, NULL);
67 if (push == NULL) {
68 talloc_free(r);
69 return false;
70 }
71
72 ndr_err = call->ndr_push(push, NDR_OUT, r);
73 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
74 talloc_free(r);
75 return false;
76 }
77
78 blob = ndr_push_blob(push);
79 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
80 talloc_free(r);
81 return false;
82 }
83
84 talloc_free(r);
85
86 return true;
87}
88
89static bool api_samr_Close(pipes_struct *p)
90{
91 const struct ndr_interface_call *call;
92 struct ndr_pull *pull;
93 struct ndr_push *push;
94 enum ndr_err_code ndr_err;
95 DATA_BLOB blob;
96 struct samr_Close *r;
97
98 call = &ndr_table_samr.calls[NDR_SAMR_CLOSE];
99
100 r = talloc(talloc_tos(), struct samr_Close);
101 if (r == NULL) {
102 return false;
103 }
104
105 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
106 talloc_free(r);
107 return false;
108 }
109
110 pull = ndr_pull_init_blob(&blob, r, NULL);
111 if (pull == NULL) {
112 talloc_free(r);
113 return false;
114 }
115
116 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
117 ndr_err = call->ndr_pull(pull, NDR_IN, r);
118 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
119 talloc_free(r);
120 return false;
121 }
122
123 if (DEBUGLEVEL >= 10) {
124 NDR_PRINT_IN_DEBUG(samr_Close, r);
125 }
126
127 ZERO_STRUCT(r->out);
128 r->out.handle = r->in.handle;
129 r->out.result = _samr_Close(p, r);
130
131 if (p->rng_fault_state) {
132 talloc_free(r);
133 /* Return true here, srv_pipe_hnd.c will take care */
134 return true;
135 }
136
137 if (DEBUGLEVEL >= 10) {
138 NDR_PRINT_OUT_DEBUG(samr_Close, r);
139 }
140
141 push = ndr_push_init_ctx(r, NULL);
142 if (push == NULL) {
143 talloc_free(r);
144 return false;
145 }
146
147 ndr_err = call->ndr_push(push, NDR_OUT, r);
148 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
149 talloc_free(r);
150 return false;
151 }
152
153 blob = ndr_push_blob(push);
154 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
155 talloc_free(r);
156 return false;
157 }
158
159 talloc_free(r);
160
161 return true;
162}
163
164static bool api_samr_SetSecurity(pipes_struct *p)
165{
166 const struct ndr_interface_call *call;
167 struct ndr_pull *pull;
168 struct ndr_push *push;
169 enum ndr_err_code ndr_err;
170 DATA_BLOB blob;
171 struct samr_SetSecurity *r;
172
173 call = &ndr_table_samr.calls[NDR_SAMR_SETSECURITY];
174
175 r = talloc(talloc_tos(), struct samr_SetSecurity);
176 if (r == NULL) {
177 return false;
178 }
179
180 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
181 talloc_free(r);
182 return false;
183 }
184
185 pull = ndr_pull_init_blob(&blob, r, NULL);
186 if (pull == NULL) {
187 talloc_free(r);
188 return false;
189 }
190
191 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
192 ndr_err = call->ndr_pull(pull, NDR_IN, r);
193 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
194 talloc_free(r);
195 return false;
196 }
197
198 if (DEBUGLEVEL >= 10) {
199 NDR_PRINT_IN_DEBUG(samr_SetSecurity, r);
200 }
201
202 r->out.result = _samr_SetSecurity(p, r);
203
204 if (p->rng_fault_state) {
205 talloc_free(r);
206 /* Return true here, srv_pipe_hnd.c will take care */
207 return true;
208 }
209
210 if (DEBUGLEVEL >= 10) {
211 NDR_PRINT_OUT_DEBUG(samr_SetSecurity, r);
212 }
213
214 push = ndr_push_init_ctx(r, NULL);
215 if (push == NULL) {
216 talloc_free(r);
217 return false;
218 }
219
220 ndr_err = call->ndr_push(push, NDR_OUT, r);
221 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
222 talloc_free(r);
223 return false;
224 }
225
226 blob = ndr_push_blob(push);
227 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
228 talloc_free(r);
229 return false;
230 }
231
232 talloc_free(r);
233
234 return true;
235}
236
237static bool api_samr_QuerySecurity(pipes_struct *p)
238{
239 const struct ndr_interface_call *call;
240 struct ndr_pull *pull;
241 struct ndr_push *push;
242 enum ndr_err_code ndr_err;
243 DATA_BLOB blob;
244 struct samr_QuerySecurity *r;
245
246 call = &ndr_table_samr.calls[NDR_SAMR_QUERYSECURITY];
247
248 r = talloc(talloc_tos(), struct samr_QuerySecurity);
249 if (r == NULL) {
250 return false;
251 }
252
253 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
254 talloc_free(r);
255 return false;
256 }
257
258 pull = ndr_pull_init_blob(&blob, r, NULL);
259 if (pull == NULL) {
260 talloc_free(r);
261 return false;
262 }
263
264 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
265 ndr_err = call->ndr_pull(pull, NDR_IN, r);
266 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
267 talloc_free(r);
268 return false;
269 }
270
271 if (DEBUGLEVEL >= 10) {
272 NDR_PRINT_IN_DEBUG(samr_QuerySecurity, r);
273 }
274
275 ZERO_STRUCT(r->out);
276 r->out.sdbuf = talloc_zero(r, struct sec_desc_buf *);
277 if (r->out.sdbuf == NULL) {
278 talloc_free(r);
279 return false;
280 }
281
282 r->out.result = _samr_QuerySecurity(p, r);
283
284 if (p->rng_fault_state) {
285 talloc_free(r);
286 /* Return true here, srv_pipe_hnd.c will take care */
287 return true;
288 }
289
290 if (DEBUGLEVEL >= 10) {
291 NDR_PRINT_OUT_DEBUG(samr_QuerySecurity, r);
292 }
293
294 push = ndr_push_init_ctx(r, NULL);
295 if (push == NULL) {
296 talloc_free(r);
297 return false;
298 }
299
300 ndr_err = call->ndr_push(push, NDR_OUT, r);
301 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
302 talloc_free(r);
303 return false;
304 }
305
306 blob = ndr_push_blob(push);
307 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
308 talloc_free(r);
309 return false;
310 }
311
312 talloc_free(r);
313
314 return true;
315}
316
317static bool api_samr_Shutdown(pipes_struct *p)
318{
319 const struct ndr_interface_call *call;
320 struct ndr_pull *pull;
321 struct ndr_push *push;
322 enum ndr_err_code ndr_err;
323 DATA_BLOB blob;
324 struct samr_Shutdown *r;
325
326 call = &ndr_table_samr.calls[NDR_SAMR_SHUTDOWN];
327
328 r = talloc(talloc_tos(), struct samr_Shutdown);
329 if (r == NULL) {
330 return false;
331 }
332
333 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
334 talloc_free(r);
335 return false;
336 }
337
338 pull = ndr_pull_init_blob(&blob, r, NULL);
339 if (pull == NULL) {
340 talloc_free(r);
341 return false;
342 }
343
344 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
345 ndr_err = call->ndr_pull(pull, NDR_IN, r);
346 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
347 talloc_free(r);
348 return false;
349 }
350
351 if (DEBUGLEVEL >= 10) {
352 NDR_PRINT_IN_DEBUG(samr_Shutdown, r);
353 }
354
355 r->out.result = _samr_Shutdown(p, r);
356
357 if (p->rng_fault_state) {
358 talloc_free(r);
359 /* Return true here, srv_pipe_hnd.c will take care */
360 return true;
361 }
362
363 if (DEBUGLEVEL >= 10) {
364 NDR_PRINT_OUT_DEBUG(samr_Shutdown, r);
365 }
366
367 push = ndr_push_init_ctx(r, NULL);
368 if (push == NULL) {
369 talloc_free(r);
370 return false;
371 }
372
373 ndr_err = call->ndr_push(push, NDR_OUT, r);
374 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
375 talloc_free(r);
376 return false;
377 }
378
379 blob = ndr_push_blob(push);
380 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
381 talloc_free(r);
382 return false;
383 }
384
385 talloc_free(r);
386
387 return true;
388}
389
390static bool api_samr_LookupDomain(pipes_struct *p)
391{
392 const struct ndr_interface_call *call;
393 struct ndr_pull *pull;
394 struct ndr_push *push;
395 enum ndr_err_code ndr_err;
396 DATA_BLOB blob;
397 struct samr_LookupDomain *r;
398
399 call = &ndr_table_samr.calls[NDR_SAMR_LOOKUPDOMAIN];
400
401 r = talloc(talloc_tos(), struct samr_LookupDomain);
402 if (r == NULL) {
403 return false;
404 }
405
406 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
407 talloc_free(r);
408 return false;
409 }
410
411 pull = ndr_pull_init_blob(&blob, r, NULL);
412 if (pull == NULL) {
413 talloc_free(r);
414 return false;
415 }
416
417 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
418 ndr_err = call->ndr_pull(pull, NDR_IN, r);
419 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
420 talloc_free(r);
421 return false;
422 }
423
424 if (DEBUGLEVEL >= 10) {
425 NDR_PRINT_IN_DEBUG(samr_LookupDomain, r);
426 }
427
428 ZERO_STRUCT(r->out);
429 r->out.sid = talloc_zero(r, struct dom_sid2 *);
430 if (r->out.sid == NULL) {
431 talloc_free(r);
432 return false;
433 }
434
435 r->out.result = _samr_LookupDomain(p, r);
436
437 if (p->rng_fault_state) {
438 talloc_free(r);
439 /* Return true here, srv_pipe_hnd.c will take care */
440 return true;
441 }
442
443 if (DEBUGLEVEL >= 10) {
444 NDR_PRINT_OUT_DEBUG(samr_LookupDomain, r);
445 }
446
447 push = ndr_push_init_ctx(r, NULL);
448 if (push == NULL) {
449 talloc_free(r);
450 return false;
451 }
452
453 ndr_err = call->ndr_push(push, NDR_OUT, r);
454 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
455 talloc_free(r);
456 return false;
457 }
458
459 blob = ndr_push_blob(push);
460 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
461 talloc_free(r);
462 return false;
463 }
464
465 talloc_free(r);
466
467 return true;
468}
469
470static bool api_samr_EnumDomains(pipes_struct *p)
471{
472 const struct ndr_interface_call *call;
473 struct ndr_pull *pull;
474 struct ndr_push *push;
475 enum ndr_err_code ndr_err;
476 DATA_BLOB blob;
477 struct samr_EnumDomains *r;
478
479 call = &ndr_table_samr.calls[NDR_SAMR_ENUMDOMAINS];
480
481 r = talloc(talloc_tos(), struct samr_EnumDomains);
482 if (r == NULL) {
483 return false;
484 }
485
486 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
487 talloc_free(r);
488 return false;
489 }
490
491 pull = ndr_pull_init_blob(&blob, r, NULL);
492 if (pull == NULL) {
493 talloc_free(r);
494 return false;
495 }
496
497 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
498 ndr_err = call->ndr_pull(pull, NDR_IN, r);
499 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
500 talloc_free(r);
501 return false;
502 }
503
504 if (DEBUGLEVEL >= 10) {
505 NDR_PRINT_IN_DEBUG(samr_EnumDomains, r);
506 }
507
508 ZERO_STRUCT(r->out);
509 r->out.resume_handle = r->in.resume_handle;
510 r->out.sam = talloc_zero(r, struct samr_SamArray *);
511 if (r->out.sam == NULL) {
512 talloc_free(r);
513 return false;
514 }
515
516 r->out.num_entries = talloc_zero(r, uint32_t);
517 if (r->out.num_entries == NULL) {
518 talloc_free(r);
519 return false;
520 }
521
522 r->out.result = _samr_EnumDomains(p, r);
523
524 if (p->rng_fault_state) {
525 talloc_free(r);
526 /* Return true here, srv_pipe_hnd.c will take care */
527 return true;
528 }
529
530 if (DEBUGLEVEL >= 10) {
531 NDR_PRINT_OUT_DEBUG(samr_EnumDomains, r);
532 }
533
534 push = ndr_push_init_ctx(r, NULL);
535 if (push == NULL) {
536 talloc_free(r);
537 return false;
538 }
539
540 ndr_err = call->ndr_push(push, NDR_OUT, r);
541 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
542 talloc_free(r);
543 return false;
544 }
545
546 blob = ndr_push_blob(push);
547 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
548 talloc_free(r);
549 return false;
550 }
551
552 talloc_free(r);
553
554 return true;
555}
556
557static bool api_samr_OpenDomain(pipes_struct *p)
558{
559 const struct ndr_interface_call *call;
560 struct ndr_pull *pull;
561 struct ndr_push *push;
562 enum ndr_err_code ndr_err;
563 DATA_BLOB blob;
564 struct samr_OpenDomain *r;
565
566 call = &ndr_table_samr.calls[NDR_SAMR_OPENDOMAIN];
567
568 r = talloc(talloc_tos(), struct samr_OpenDomain);
569 if (r == NULL) {
570 return false;
571 }
572
573 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
574 talloc_free(r);
575 return false;
576 }
577
578 pull = ndr_pull_init_blob(&blob, r, NULL);
579 if (pull == NULL) {
580 talloc_free(r);
581 return false;
582 }
583
584 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
585 ndr_err = call->ndr_pull(pull, NDR_IN, r);
586 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
587 talloc_free(r);
588 return false;
589 }
590
591 if (DEBUGLEVEL >= 10) {
592 NDR_PRINT_IN_DEBUG(samr_OpenDomain, r);
593 }
594
595 ZERO_STRUCT(r->out);
596 r->out.domain_handle = talloc_zero(r, struct policy_handle);
597 if (r->out.domain_handle == NULL) {
598 talloc_free(r);
599 return false;
600 }
601
602 r->out.result = _samr_OpenDomain(p, r);
603
604 if (p->rng_fault_state) {
605 talloc_free(r);
606 /* Return true here, srv_pipe_hnd.c will take care */
607 return true;
608 }
609
610 if (DEBUGLEVEL >= 10) {
611 NDR_PRINT_OUT_DEBUG(samr_OpenDomain, r);
612 }
613
614 push = ndr_push_init_ctx(r, NULL);
615 if (push == NULL) {
616 talloc_free(r);
617 return false;
618 }
619
620 ndr_err = call->ndr_push(push, NDR_OUT, r);
621 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
622 talloc_free(r);
623 return false;
624 }
625
626 blob = ndr_push_blob(push);
627 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
628 talloc_free(r);
629 return false;
630 }
631
632 talloc_free(r);
633
634 return true;
635}
636
637static bool api_samr_QueryDomainInfo(pipes_struct *p)
638{
639 const struct ndr_interface_call *call;
640 struct ndr_pull *pull;
641 struct ndr_push *push;
642 enum ndr_err_code ndr_err;
643 DATA_BLOB blob;
644 struct samr_QueryDomainInfo *r;
645
646 call = &ndr_table_samr.calls[NDR_SAMR_QUERYDOMAININFO];
647
648 r = talloc(talloc_tos(), struct samr_QueryDomainInfo);
649 if (r == NULL) {
650 return false;
651 }
652
653 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
654 talloc_free(r);
655 return false;
656 }
657
658 pull = ndr_pull_init_blob(&blob, r, NULL);
659 if (pull == NULL) {
660 talloc_free(r);
661 return false;
662 }
663
664 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
665 ndr_err = call->ndr_pull(pull, NDR_IN, r);
666 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
667 talloc_free(r);
668 return false;
669 }
670
671 if (DEBUGLEVEL >= 10) {
672 NDR_PRINT_IN_DEBUG(samr_QueryDomainInfo, r);
673 }
674
675 ZERO_STRUCT(r->out);
676 r->out.info = talloc_zero(r, union samr_DomainInfo *);
677 if (r->out.info == NULL) {
678 talloc_free(r);
679 return false;
680 }
681
682 r->out.result = _samr_QueryDomainInfo(p, r);
683
684 if (p->rng_fault_state) {
685 talloc_free(r);
686 /* Return true here, srv_pipe_hnd.c will take care */
687 return true;
688 }
689
690 if (DEBUGLEVEL >= 10) {
691 NDR_PRINT_OUT_DEBUG(samr_QueryDomainInfo, r);
692 }
693
694 push = ndr_push_init_ctx(r, NULL);
695 if (push == NULL) {
696 talloc_free(r);
697 return false;
698 }
699
700 ndr_err = call->ndr_push(push, NDR_OUT, r);
701 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
702 talloc_free(r);
703 return false;
704 }
705
706 blob = ndr_push_blob(push);
707 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
708 talloc_free(r);
709 return false;
710 }
711
712 talloc_free(r);
713
714 return true;
715}
716
717static bool api_samr_SetDomainInfo(pipes_struct *p)
718{
719 const struct ndr_interface_call *call;
720 struct ndr_pull *pull;
721 struct ndr_push *push;
722 enum ndr_err_code ndr_err;
723 DATA_BLOB blob;
724 struct samr_SetDomainInfo *r;
725
726 call = &ndr_table_samr.calls[NDR_SAMR_SETDOMAININFO];
727
728 r = talloc(talloc_tos(), struct samr_SetDomainInfo);
729 if (r == NULL) {
730 return false;
731 }
732
733 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
734 talloc_free(r);
735 return false;
736 }
737
738 pull = ndr_pull_init_blob(&blob, r, NULL);
739 if (pull == NULL) {
740 talloc_free(r);
741 return false;
742 }
743
744 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
745 ndr_err = call->ndr_pull(pull, NDR_IN, r);
746 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
747 talloc_free(r);
748 return false;
749 }
750
751 if (DEBUGLEVEL >= 10) {
752 NDR_PRINT_IN_DEBUG(samr_SetDomainInfo, r);
753 }
754
755 r->out.result = _samr_SetDomainInfo(p, r);
756
757 if (p->rng_fault_state) {
758 talloc_free(r);
759 /* Return true here, srv_pipe_hnd.c will take care */
760 return true;
761 }
762
763 if (DEBUGLEVEL >= 10) {
764 NDR_PRINT_OUT_DEBUG(samr_SetDomainInfo, r);
765 }
766
767 push = ndr_push_init_ctx(r, NULL);
768 if (push == NULL) {
769 talloc_free(r);
770 return false;
771 }
772
773 ndr_err = call->ndr_push(push, NDR_OUT, r);
774 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
775 talloc_free(r);
776 return false;
777 }
778
779 blob = ndr_push_blob(push);
780 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
781 talloc_free(r);
782 return false;
783 }
784
785 talloc_free(r);
786
787 return true;
788}
789
790static bool api_samr_CreateDomainGroup(pipes_struct *p)
791{
792 const struct ndr_interface_call *call;
793 struct ndr_pull *pull;
794 struct ndr_push *push;
795 enum ndr_err_code ndr_err;
796 DATA_BLOB blob;
797 struct samr_CreateDomainGroup *r;
798
799 call = &ndr_table_samr.calls[NDR_SAMR_CREATEDOMAINGROUP];
800
801 r = talloc(talloc_tos(), struct samr_CreateDomainGroup);
802 if (r == NULL) {
803 return false;
804 }
805
806 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
807 talloc_free(r);
808 return false;
809 }
810
811 pull = ndr_pull_init_blob(&blob, r, NULL);
812 if (pull == NULL) {
813 talloc_free(r);
814 return false;
815 }
816
817 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
818 ndr_err = call->ndr_pull(pull, NDR_IN, r);
819 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
820 talloc_free(r);
821 return false;
822 }
823
824 if (DEBUGLEVEL >= 10) {
825 NDR_PRINT_IN_DEBUG(samr_CreateDomainGroup, r);
826 }
827
828 ZERO_STRUCT(r->out);
829 r->out.group_handle = talloc_zero(r, struct policy_handle);
830 if (r->out.group_handle == NULL) {
831 talloc_free(r);
832 return false;
833 }
834
835 r->out.rid = talloc_zero(r, uint32_t);
836 if (r->out.rid == NULL) {
837 talloc_free(r);
838 return false;
839 }
840
841 r->out.result = _samr_CreateDomainGroup(p, r);
842
843 if (p->rng_fault_state) {
844 talloc_free(r);
845 /* Return true here, srv_pipe_hnd.c will take care */
846 return true;
847 }
848
849 if (DEBUGLEVEL >= 10) {
850 NDR_PRINT_OUT_DEBUG(samr_CreateDomainGroup, r);
851 }
852
853 push = ndr_push_init_ctx(r, NULL);
854 if (push == NULL) {
855 talloc_free(r);
856 return false;
857 }
858
859 ndr_err = call->ndr_push(push, NDR_OUT, r);
860 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
861 talloc_free(r);
862 return false;
863 }
864
865 blob = ndr_push_blob(push);
866 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
867 talloc_free(r);
868 return false;
869 }
870
871 talloc_free(r);
872
873 return true;
874}
875
876static bool api_samr_EnumDomainGroups(pipes_struct *p)
877{
878 const struct ndr_interface_call *call;
879 struct ndr_pull *pull;
880 struct ndr_push *push;
881 enum ndr_err_code ndr_err;
882 DATA_BLOB blob;
883 struct samr_EnumDomainGroups *r;
884
885 call = &ndr_table_samr.calls[NDR_SAMR_ENUMDOMAINGROUPS];
886
887 r = talloc(talloc_tos(), struct samr_EnumDomainGroups);
888 if (r == NULL) {
889 return false;
890 }
891
892 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
893 talloc_free(r);
894 return false;
895 }
896
897 pull = ndr_pull_init_blob(&blob, r, NULL);
898 if (pull == NULL) {
899 talloc_free(r);
900 return false;
901 }
902
903 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
904 ndr_err = call->ndr_pull(pull, NDR_IN, r);
905 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
906 talloc_free(r);
907 return false;
908 }
909
910 if (DEBUGLEVEL >= 10) {
911 NDR_PRINT_IN_DEBUG(samr_EnumDomainGroups, r);
912 }
913
914 ZERO_STRUCT(r->out);
915 r->out.resume_handle = r->in.resume_handle;
916 r->out.sam = talloc_zero(r, struct samr_SamArray *);
917 if (r->out.sam == NULL) {
918 talloc_free(r);
919 return false;
920 }
921
922 r->out.num_entries = talloc_zero(r, uint32_t);
923 if (r->out.num_entries == NULL) {
924 talloc_free(r);
925 return false;
926 }
927
928 r->out.result = _samr_EnumDomainGroups(p, r);
929
930 if (p->rng_fault_state) {
931 talloc_free(r);
932 /* Return true here, srv_pipe_hnd.c will take care */
933 return true;
934 }
935
936 if (DEBUGLEVEL >= 10) {
937 NDR_PRINT_OUT_DEBUG(samr_EnumDomainGroups, r);
938 }
939
940 push = ndr_push_init_ctx(r, NULL);
941 if (push == NULL) {
942 talloc_free(r);
943 return false;
944 }
945
946 ndr_err = call->ndr_push(push, NDR_OUT, r);
947 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
948 talloc_free(r);
949 return false;
950 }
951
952 blob = ndr_push_blob(push);
953 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
954 talloc_free(r);
955 return false;
956 }
957
958 talloc_free(r);
959
960 return true;
961}
962
963static bool api_samr_CreateUser(pipes_struct *p)
964{
965 const struct ndr_interface_call *call;
966 struct ndr_pull *pull;
967 struct ndr_push *push;
968 enum ndr_err_code ndr_err;
969 DATA_BLOB blob;
970 struct samr_CreateUser *r;
971
972 call = &ndr_table_samr.calls[NDR_SAMR_CREATEUSER];
973
974 r = talloc(talloc_tos(), struct samr_CreateUser);
975 if (r == NULL) {
976 return false;
977 }
978
979 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
980 talloc_free(r);
981 return false;
982 }
983
984 pull = ndr_pull_init_blob(&blob, r, NULL);
985 if (pull == NULL) {
986 talloc_free(r);
987 return false;
988 }
989
990 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
991 ndr_err = call->ndr_pull(pull, NDR_IN, r);
992 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
993 talloc_free(r);
994 return false;
995 }
996
997 if (DEBUGLEVEL >= 10) {
998 NDR_PRINT_IN_DEBUG(samr_CreateUser, r);
999 }
1000
1001 ZERO_STRUCT(r->out);
1002 r->out.user_handle = talloc_zero(r, struct policy_handle);
1003 if (r->out.user_handle == NULL) {
1004 talloc_free(r);
1005 return false;
1006 }
1007
1008 r->out.rid = talloc_zero(r, uint32_t);
1009 if (r->out.rid == NULL) {
1010 talloc_free(r);
1011 return false;
1012 }
1013
1014 r->out.result = _samr_CreateUser(p, r);
1015
1016 if (p->rng_fault_state) {
1017 talloc_free(r);
1018 /* Return true here, srv_pipe_hnd.c will take care */
1019 return true;
1020 }
1021
1022 if (DEBUGLEVEL >= 10) {
1023 NDR_PRINT_OUT_DEBUG(samr_CreateUser, r);
1024 }
1025
1026 push = ndr_push_init_ctx(r, NULL);
1027 if (push == NULL) {
1028 talloc_free(r);
1029 return false;
1030 }
1031
1032 ndr_err = call->ndr_push(push, NDR_OUT, r);
1033 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1034 talloc_free(r);
1035 return false;
1036 }
1037
1038 blob = ndr_push_blob(push);
1039 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
1040 talloc_free(r);
1041 return false;
1042 }
1043
1044 talloc_free(r);
1045
1046 return true;
1047}
1048
1049static bool api_samr_EnumDomainUsers(pipes_struct *p)
1050{
1051 const struct ndr_interface_call *call;
1052 struct ndr_pull *pull;
1053 struct ndr_push *push;
1054 enum ndr_err_code ndr_err;
1055 DATA_BLOB blob;
1056 struct samr_EnumDomainUsers *r;
1057
1058 call = &ndr_table_samr.calls[NDR_SAMR_ENUMDOMAINUSERS];
1059
1060 r = talloc(talloc_tos(), struct samr_EnumDomainUsers);
1061 if (r == NULL) {
1062 return false;
1063 }
1064
1065 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
1066 talloc_free(r);
1067 return false;
1068 }
1069
1070 pull = ndr_pull_init_blob(&blob, r, NULL);
1071 if (pull == NULL) {
1072 talloc_free(r);
1073 return false;
1074 }
1075
1076 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1077 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1078 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1079 talloc_free(r);
1080 return false;
1081 }
1082
1083 if (DEBUGLEVEL >= 10) {
1084 NDR_PRINT_IN_DEBUG(samr_EnumDomainUsers, r);
1085 }
1086
1087 ZERO_STRUCT(r->out);
1088 r->out.resume_handle = r->in.resume_handle;
1089 r->out.sam = talloc_zero(r, struct samr_SamArray *);
1090 if (r->out.sam == NULL) {
1091 talloc_free(r);
1092 return false;
1093 }
1094
1095 r->out.num_entries = talloc_zero(r, uint32_t);
1096 if (r->out.num_entries == NULL) {
1097 talloc_free(r);
1098 return false;
1099 }
1100
1101 r->out.result = _samr_EnumDomainUsers(p, r);
1102
1103 if (p->rng_fault_state) {
1104 talloc_free(r);
1105 /* Return true here, srv_pipe_hnd.c will take care */
1106 return true;
1107 }
1108
1109 if (DEBUGLEVEL >= 10) {
1110 NDR_PRINT_OUT_DEBUG(samr_EnumDomainUsers, r);
1111 }
1112
1113 push = ndr_push_init_ctx(r, NULL);
1114 if (push == NULL) {
1115 talloc_free(r);
1116 return false;
1117 }
1118
1119 ndr_err = call->ndr_push(push, NDR_OUT, r);
1120 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1121 talloc_free(r);
1122 return false;
1123 }
1124
1125 blob = ndr_push_blob(push);
1126 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
1127 talloc_free(r);
1128 return false;
1129 }
1130
1131 talloc_free(r);
1132
1133 return true;
1134}
1135
1136static bool api_samr_CreateDomAlias(pipes_struct *p)
1137{
1138 const struct ndr_interface_call *call;
1139 struct ndr_pull *pull;
1140 struct ndr_push *push;
1141 enum ndr_err_code ndr_err;
1142 DATA_BLOB blob;
1143 struct samr_CreateDomAlias *r;
1144
1145 call = &ndr_table_samr.calls[NDR_SAMR_CREATEDOMALIAS];
1146
1147 r = talloc(talloc_tos(), struct samr_CreateDomAlias);
1148 if (r == NULL) {
1149 return false;
1150 }
1151
1152 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
1153 talloc_free(r);
1154 return false;
1155 }
1156
1157 pull = ndr_pull_init_blob(&blob, r, NULL);
1158 if (pull == NULL) {
1159 talloc_free(r);
1160 return false;
1161 }
1162
1163 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1164 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1165 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1166 talloc_free(r);
1167 return false;
1168 }
1169
1170 if (DEBUGLEVEL >= 10) {
1171 NDR_PRINT_IN_DEBUG(samr_CreateDomAlias, r);
1172 }
1173
1174 ZERO_STRUCT(r->out);
1175 r->out.alias_handle = talloc_zero(r, struct policy_handle);
1176 if (r->out.alias_handle == NULL) {
1177 talloc_free(r);
1178 return false;
1179 }
1180
1181 r->out.rid = talloc_zero(r, uint32_t);
1182 if (r->out.rid == NULL) {
1183 talloc_free(r);
1184 return false;
1185 }
1186
1187 r->out.result = _samr_CreateDomAlias(p, r);
1188
1189 if (p->rng_fault_state) {
1190 talloc_free(r);
1191 /* Return true here, srv_pipe_hnd.c will take care */
1192 return true;
1193 }
1194
1195 if (DEBUGLEVEL >= 10) {
1196 NDR_PRINT_OUT_DEBUG(samr_CreateDomAlias, r);
1197 }
1198
1199 push = ndr_push_init_ctx(r, NULL);
1200 if (push == NULL) {
1201 talloc_free(r);
1202 return false;
1203 }
1204
1205 ndr_err = call->ndr_push(push, NDR_OUT, r);
1206 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1207 talloc_free(r);
1208 return false;
1209 }
1210
1211 blob = ndr_push_blob(push);
1212 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
1213 talloc_free(r);
1214 return false;
1215 }
1216
1217 talloc_free(r);
1218
1219 return true;
1220}
1221
1222static bool api_samr_EnumDomainAliases(pipes_struct *p)
1223{
1224 const struct ndr_interface_call *call;
1225 struct ndr_pull *pull;
1226 struct ndr_push *push;
1227 enum ndr_err_code ndr_err;
1228 DATA_BLOB blob;
1229 struct samr_EnumDomainAliases *r;
1230
1231 call = &ndr_table_samr.calls[NDR_SAMR_ENUMDOMAINALIASES];
1232
1233 r = talloc(talloc_tos(), struct samr_EnumDomainAliases);
1234 if (r == NULL) {
1235 return false;
1236 }
1237
1238 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
1239 talloc_free(r);
1240 return false;
1241 }
1242
1243 pull = ndr_pull_init_blob(&blob, r, NULL);
1244 if (pull == NULL) {
1245 talloc_free(r);
1246 return false;
1247 }
1248
1249 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1250 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1251 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1252 talloc_free(r);
1253 return false;
1254 }
1255
1256 if (DEBUGLEVEL >= 10) {
1257 NDR_PRINT_IN_DEBUG(samr_EnumDomainAliases, r);
1258 }
1259
1260 ZERO_STRUCT(r->out);
1261 r->out.resume_handle = r->in.resume_handle;
1262 r->out.sam = talloc_zero(r, struct samr_SamArray *);
1263 if (r->out.sam == NULL) {
1264 talloc_free(r);
1265 return false;
1266 }
1267
1268 r->out.num_entries = talloc_zero(r, uint32_t);
1269 if (r->out.num_entries == NULL) {
1270 talloc_free(r);
1271 return false;
1272 }
1273
1274 r->out.result = _samr_EnumDomainAliases(p, r);
1275
1276 if (p->rng_fault_state) {
1277 talloc_free(r);
1278 /* Return true here, srv_pipe_hnd.c will take care */
1279 return true;
1280 }
1281
1282 if (DEBUGLEVEL >= 10) {
1283 NDR_PRINT_OUT_DEBUG(samr_EnumDomainAliases, r);
1284 }
1285
1286 push = ndr_push_init_ctx(r, NULL);
1287 if (push == NULL) {
1288 talloc_free(r);
1289 return false;
1290 }
1291
1292 ndr_err = call->ndr_push(push, NDR_OUT, r);
1293 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1294 talloc_free(r);
1295 return false;
1296 }
1297
1298 blob = ndr_push_blob(push);
1299 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
1300 talloc_free(r);
1301 return false;
1302 }
1303
1304 talloc_free(r);
1305
1306 return true;
1307}
1308
1309static bool api_samr_GetAliasMembership(pipes_struct *p)
1310{
1311 const struct ndr_interface_call *call;
1312 struct ndr_pull *pull;
1313 struct ndr_push *push;
1314 enum ndr_err_code ndr_err;
1315 DATA_BLOB blob;
1316 struct samr_GetAliasMembership *r;
1317
1318 call = &ndr_table_samr.calls[NDR_SAMR_GETALIASMEMBERSHIP];
1319
1320 r = talloc(talloc_tos(), struct samr_GetAliasMembership);
1321 if (r == NULL) {
1322 return false;
1323 }
1324
1325 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
1326 talloc_free(r);
1327 return false;
1328 }
1329
1330 pull = ndr_pull_init_blob(&blob, r, NULL);
1331 if (pull == NULL) {
1332 talloc_free(r);
1333 return false;
1334 }
1335
1336 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1337 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1338 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1339 talloc_free(r);
1340 return false;
1341 }
1342
1343 if (DEBUGLEVEL >= 10) {
1344 NDR_PRINT_IN_DEBUG(samr_GetAliasMembership, r);
1345 }
1346
1347 ZERO_STRUCT(r->out);
1348 r->out.rids = talloc_zero(r, struct samr_Ids);
1349 if (r->out.rids == NULL) {
1350 talloc_free(r);
1351 return false;
1352 }
1353
1354 r->out.result = _samr_GetAliasMembership(p, r);
1355
1356 if (p->rng_fault_state) {
1357 talloc_free(r);
1358 /* Return true here, srv_pipe_hnd.c will take care */
1359 return true;
1360 }
1361
1362 if (DEBUGLEVEL >= 10) {
1363 NDR_PRINT_OUT_DEBUG(samr_GetAliasMembership, r);
1364 }
1365
1366 push = ndr_push_init_ctx(r, NULL);
1367 if (push == NULL) {
1368 talloc_free(r);
1369 return false;
1370 }
1371
1372 ndr_err = call->ndr_push(push, NDR_OUT, r);
1373 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1374 talloc_free(r);
1375 return false;
1376 }
1377
1378 blob = ndr_push_blob(push);
1379 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
1380 talloc_free(r);
1381 return false;
1382 }
1383
1384 talloc_free(r);
1385
1386 return true;
1387}
1388
1389static bool api_samr_LookupNames(pipes_struct *p)
1390{
1391 const struct ndr_interface_call *call;
1392 struct ndr_pull *pull;
1393 struct ndr_push *push;
1394 enum ndr_err_code ndr_err;
1395 DATA_BLOB blob;
1396 struct samr_LookupNames *r;
1397
1398 call = &ndr_table_samr.calls[NDR_SAMR_LOOKUPNAMES];
1399
1400 r = talloc(talloc_tos(), struct samr_LookupNames);
1401 if (r == NULL) {
1402 return false;
1403 }
1404
1405 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
1406 talloc_free(r);
1407 return false;
1408 }
1409
1410 pull = ndr_pull_init_blob(&blob, r, NULL);
1411 if (pull == NULL) {
1412 talloc_free(r);
1413 return false;
1414 }
1415
1416 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1417 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1418 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1419 talloc_free(r);
1420 return false;
1421 }
1422
1423 if (DEBUGLEVEL >= 10) {
1424 NDR_PRINT_IN_DEBUG(samr_LookupNames, r);
1425 }
1426
1427 ZERO_STRUCT(r->out);
1428 r->out.rids = talloc_zero(r, struct samr_Ids);
1429 if (r->out.rids == NULL) {
1430 talloc_free(r);
1431 return false;
1432 }
1433
1434 r->out.types = talloc_zero(r, struct samr_Ids);
1435 if (r->out.types == NULL) {
1436 talloc_free(r);
1437 return false;
1438 }
1439
1440 r->out.result = _samr_LookupNames(p, r);
1441
1442 if (p->rng_fault_state) {
1443 talloc_free(r);
1444 /* Return true here, srv_pipe_hnd.c will take care */
1445 return true;
1446 }
1447
1448 if (DEBUGLEVEL >= 10) {
1449 NDR_PRINT_OUT_DEBUG(samr_LookupNames, r);
1450 }
1451
1452 push = ndr_push_init_ctx(r, NULL);
1453 if (push == NULL) {
1454 talloc_free(r);
1455 return false;
1456 }
1457
1458 ndr_err = call->ndr_push(push, NDR_OUT, r);
1459 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1460 talloc_free(r);
1461 return false;
1462 }
1463
1464 blob = ndr_push_blob(push);
1465 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
1466 talloc_free(r);
1467 return false;
1468 }
1469
1470 talloc_free(r);
1471
1472 return true;
1473}
1474
1475static bool api_samr_LookupRids(pipes_struct *p)
1476{
1477 const struct ndr_interface_call *call;
1478 struct ndr_pull *pull;
1479 struct ndr_push *push;
1480 enum ndr_err_code ndr_err;
1481 DATA_BLOB blob;
1482 struct samr_LookupRids *r;
1483
1484 call = &ndr_table_samr.calls[NDR_SAMR_LOOKUPRIDS];
1485
1486 r = talloc(talloc_tos(), struct samr_LookupRids);
1487 if (r == NULL) {
1488 return false;
1489 }
1490
1491 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
1492 talloc_free(r);
1493 return false;
1494 }
1495
1496 pull = ndr_pull_init_blob(&blob, r, NULL);
1497 if (pull == NULL) {
1498 talloc_free(r);
1499 return false;
1500 }
1501
1502 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1503 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1504 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1505 talloc_free(r);
1506 return false;
1507 }
1508
1509 if (DEBUGLEVEL >= 10) {
1510 NDR_PRINT_IN_DEBUG(samr_LookupRids, r);
1511 }
1512
1513 ZERO_STRUCT(r->out);
1514 r->out.names = talloc_zero(r, struct lsa_Strings);
1515 if (r->out.names == NULL) {
1516 talloc_free(r);
1517 return false;
1518 }
1519
1520 r->out.types = talloc_zero(r, struct samr_Ids);
1521 if (r->out.types == NULL) {
1522 talloc_free(r);
1523 return false;
1524 }
1525
1526 r->out.result = _samr_LookupRids(p, r);
1527
1528 if (p->rng_fault_state) {
1529 talloc_free(r);
1530 /* Return true here, srv_pipe_hnd.c will take care */
1531 return true;
1532 }
1533
1534 if (DEBUGLEVEL >= 10) {
1535 NDR_PRINT_OUT_DEBUG(samr_LookupRids, r);
1536 }
1537
1538 push = ndr_push_init_ctx(r, NULL);
1539 if (push == NULL) {
1540 talloc_free(r);
1541 return false;
1542 }
1543
1544 ndr_err = call->ndr_push(push, NDR_OUT, r);
1545 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1546 talloc_free(r);
1547 return false;
1548 }
1549
1550 blob = ndr_push_blob(push);
1551 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
1552 talloc_free(r);
1553 return false;
1554 }
1555
1556 talloc_free(r);
1557
1558 return true;
1559}
1560
1561static bool api_samr_OpenGroup(pipes_struct *p)
1562{
1563 const struct ndr_interface_call *call;
1564 struct ndr_pull *pull;
1565 struct ndr_push *push;
1566 enum ndr_err_code ndr_err;
1567 DATA_BLOB blob;
1568 struct samr_OpenGroup *r;
1569
1570 call = &ndr_table_samr.calls[NDR_SAMR_OPENGROUP];
1571
1572 r = talloc(talloc_tos(), struct samr_OpenGroup);
1573 if (r == NULL) {
1574 return false;
1575 }
1576
1577 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
1578 talloc_free(r);
1579 return false;
1580 }
1581
1582 pull = ndr_pull_init_blob(&blob, r, NULL);
1583 if (pull == NULL) {
1584 talloc_free(r);
1585 return false;
1586 }
1587
1588 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1589 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1590 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1591 talloc_free(r);
1592 return false;
1593 }
1594
1595 if (DEBUGLEVEL >= 10) {
1596 NDR_PRINT_IN_DEBUG(samr_OpenGroup, r);
1597 }
1598
1599 ZERO_STRUCT(r->out);
1600 r->out.group_handle = talloc_zero(r, struct policy_handle);
1601 if (r->out.group_handle == NULL) {
1602 talloc_free(r);
1603 return false;
1604 }
1605
1606 r->out.result = _samr_OpenGroup(p, r);
1607
1608 if (p->rng_fault_state) {
1609 talloc_free(r);
1610 /* Return true here, srv_pipe_hnd.c will take care */
1611 return true;
1612 }
1613
1614 if (DEBUGLEVEL >= 10) {
1615 NDR_PRINT_OUT_DEBUG(samr_OpenGroup, r);
1616 }
1617
1618 push = ndr_push_init_ctx(r, NULL);
1619 if (push == NULL) {
1620 talloc_free(r);
1621 return false;
1622 }
1623
1624 ndr_err = call->ndr_push(push, NDR_OUT, r);
1625 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1626 talloc_free(r);
1627 return false;
1628 }
1629
1630 blob = ndr_push_blob(push);
1631 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
1632 talloc_free(r);
1633 return false;
1634 }
1635
1636 talloc_free(r);
1637
1638 return true;
1639}
1640
1641static bool api_samr_QueryGroupInfo(pipes_struct *p)
1642{
1643 const struct ndr_interface_call *call;
1644 struct ndr_pull *pull;
1645 struct ndr_push *push;
1646 enum ndr_err_code ndr_err;
1647 DATA_BLOB blob;
1648 struct samr_QueryGroupInfo *r;
1649
1650 call = &ndr_table_samr.calls[NDR_SAMR_QUERYGROUPINFO];
1651
1652 r = talloc(talloc_tos(), struct samr_QueryGroupInfo);
1653 if (r == NULL) {
1654 return false;
1655 }
1656
1657 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
1658 talloc_free(r);
1659 return false;
1660 }
1661
1662 pull = ndr_pull_init_blob(&blob, r, NULL);
1663 if (pull == NULL) {
1664 talloc_free(r);
1665 return false;
1666 }
1667
1668 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1669 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1670 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1671 talloc_free(r);
1672 return false;
1673 }
1674
1675 if (DEBUGLEVEL >= 10) {
1676 NDR_PRINT_IN_DEBUG(samr_QueryGroupInfo, r);
1677 }
1678
1679 ZERO_STRUCT(r->out);
1680 r->out.info = talloc_zero(r, union samr_GroupInfo *);
1681 if (r->out.info == NULL) {
1682 talloc_free(r);
1683 return false;
1684 }
1685
1686 r->out.result = _samr_QueryGroupInfo(p, r);
1687
1688 if (p->rng_fault_state) {
1689 talloc_free(r);
1690 /* Return true here, srv_pipe_hnd.c will take care */
1691 return true;
1692 }
1693
1694 if (DEBUGLEVEL >= 10) {
1695 NDR_PRINT_OUT_DEBUG(samr_QueryGroupInfo, r);
1696 }
1697
1698 push = ndr_push_init_ctx(r, NULL);
1699 if (push == NULL) {
1700 talloc_free(r);
1701 return false;
1702 }
1703
1704 ndr_err = call->ndr_push(push, NDR_OUT, r);
1705 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1706 talloc_free(r);
1707 return false;
1708 }
1709
1710 blob = ndr_push_blob(push);
1711 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
1712 talloc_free(r);
1713 return false;
1714 }
1715
1716 talloc_free(r);
1717
1718 return true;
1719}
1720
1721static bool api_samr_SetGroupInfo(pipes_struct *p)
1722{
1723 const struct ndr_interface_call *call;
1724 struct ndr_pull *pull;
1725 struct ndr_push *push;
1726 enum ndr_err_code ndr_err;
1727 DATA_BLOB blob;
1728 struct samr_SetGroupInfo *r;
1729
1730 call = &ndr_table_samr.calls[NDR_SAMR_SETGROUPINFO];
1731
1732 r = talloc(talloc_tos(), struct samr_SetGroupInfo);
1733 if (r == NULL) {
1734 return false;
1735 }
1736
1737 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
1738 talloc_free(r);
1739 return false;
1740 }
1741
1742 pull = ndr_pull_init_blob(&blob, r, NULL);
1743 if (pull == NULL) {
1744 talloc_free(r);
1745 return false;
1746 }
1747
1748 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1749 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1750 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1751 talloc_free(r);
1752 return false;
1753 }
1754
1755 if (DEBUGLEVEL >= 10) {
1756 NDR_PRINT_IN_DEBUG(samr_SetGroupInfo, r);
1757 }
1758
1759 r->out.result = _samr_SetGroupInfo(p, r);
1760
1761 if (p->rng_fault_state) {
1762 talloc_free(r);
1763 /* Return true here, srv_pipe_hnd.c will take care */
1764 return true;
1765 }
1766
1767 if (DEBUGLEVEL >= 10) {
1768 NDR_PRINT_OUT_DEBUG(samr_SetGroupInfo, r);
1769 }
1770
1771 push = ndr_push_init_ctx(r, NULL);
1772 if (push == NULL) {
1773 talloc_free(r);
1774 return false;
1775 }
1776
1777 ndr_err = call->ndr_push(push, NDR_OUT, r);
1778 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1779 talloc_free(r);
1780 return false;
1781 }
1782
1783 blob = ndr_push_blob(push);
1784 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
1785 talloc_free(r);
1786 return false;
1787 }
1788
1789 talloc_free(r);
1790
1791 return true;
1792}
1793
1794static bool api_samr_AddGroupMember(pipes_struct *p)
1795{
1796 const struct ndr_interface_call *call;
1797 struct ndr_pull *pull;
1798 struct ndr_push *push;
1799 enum ndr_err_code ndr_err;
1800 DATA_BLOB blob;
1801 struct samr_AddGroupMember *r;
1802
1803 call = &ndr_table_samr.calls[NDR_SAMR_ADDGROUPMEMBER];
1804
1805 r = talloc(talloc_tos(), struct samr_AddGroupMember);
1806 if (r == NULL) {
1807 return false;
1808 }
1809
1810 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
1811 talloc_free(r);
1812 return false;
1813 }
1814
1815 pull = ndr_pull_init_blob(&blob, r, NULL);
1816 if (pull == NULL) {
1817 talloc_free(r);
1818 return false;
1819 }
1820
1821 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1822 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1823 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1824 talloc_free(r);
1825 return false;
1826 }
1827
1828 if (DEBUGLEVEL >= 10) {
1829 NDR_PRINT_IN_DEBUG(samr_AddGroupMember, r);
1830 }
1831
1832 r->out.result = _samr_AddGroupMember(p, r);
1833
1834 if (p->rng_fault_state) {
1835 talloc_free(r);
1836 /* Return true here, srv_pipe_hnd.c will take care */
1837 return true;
1838 }
1839
1840 if (DEBUGLEVEL >= 10) {
1841 NDR_PRINT_OUT_DEBUG(samr_AddGroupMember, r);
1842 }
1843
1844 push = ndr_push_init_ctx(r, NULL);
1845 if (push == NULL) {
1846 talloc_free(r);
1847 return false;
1848 }
1849
1850 ndr_err = call->ndr_push(push, NDR_OUT, r);
1851 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1852 talloc_free(r);
1853 return false;
1854 }
1855
1856 blob = ndr_push_blob(push);
1857 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
1858 talloc_free(r);
1859 return false;
1860 }
1861
1862 talloc_free(r);
1863
1864 return true;
1865}
1866
1867static bool api_samr_DeleteDomainGroup(pipes_struct *p)
1868{
1869 const struct ndr_interface_call *call;
1870 struct ndr_pull *pull;
1871 struct ndr_push *push;
1872 enum ndr_err_code ndr_err;
1873 DATA_BLOB blob;
1874 struct samr_DeleteDomainGroup *r;
1875
1876 call = &ndr_table_samr.calls[NDR_SAMR_DELETEDOMAINGROUP];
1877
1878 r = talloc(talloc_tos(), struct samr_DeleteDomainGroup);
1879 if (r == NULL) {
1880 return false;
1881 }
1882
1883 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
1884 talloc_free(r);
1885 return false;
1886 }
1887
1888 pull = ndr_pull_init_blob(&blob, r, NULL);
1889 if (pull == NULL) {
1890 talloc_free(r);
1891 return false;
1892 }
1893
1894 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1895 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1896 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1897 talloc_free(r);
1898 return false;
1899 }
1900
1901 if (DEBUGLEVEL >= 10) {
1902 NDR_PRINT_IN_DEBUG(samr_DeleteDomainGroup, r);
1903 }
1904
1905 ZERO_STRUCT(r->out);
1906 r->out.group_handle = r->in.group_handle;
1907 r->out.result = _samr_DeleteDomainGroup(p, r);
1908
1909 if (p->rng_fault_state) {
1910 talloc_free(r);
1911 /* Return true here, srv_pipe_hnd.c will take care */
1912 return true;
1913 }
1914
1915 if (DEBUGLEVEL >= 10) {
1916 NDR_PRINT_OUT_DEBUG(samr_DeleteDomainGroup, r);
1917 }
1918
1919 push = ndr_push_init_ctx(r, NULL);
1920 if (push == NULL) {
1921 talloc_free(r);
1922 return false;
1923 }
1924
1925 ndr_err = call->ndr_push(push, NDR_OUT, r);
1926 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1927 talloc_free(r);
1928 return false;
1929 }
1930
1931 blob = ndr_push_blob(push);
1932 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
1933 talloc_free(r);
1934 return false;
1935 }
1936
1937 talloc_free(r);
1938
1939 return true;
1940}
1941
1942static bool api_samr_DeleteGroupMember(pipes_struct *p)
1943{
1944 const struct ndr_interface_call *call;
1945 struct ndr_pull *pull;
1946 struct ndr_push *push;
1947 enum ndr_err_code ndr_err;
1948 DATA_BLOB blob;
1949 struct samr_DeleteGroupMember *r;
1950
1951 call = &ndr_table_samr.calls[NDR_SAMR_DELETEGROUPMEMBER];
1952
1953 r = talloc(talloc_tos(), struct samr_DeleteGroupMember);
1954 if (r == NULL) {
1955 return false;
1956 }
1957
1958 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
1959 talloc_free(r);
1960 return false;
1961 }
1962
1963 pull = ndr_pull_init_blob(&blob, r, NULL);
1964 if (pull == NULL) {
1965 talloc_free(r);
1966 return false;
1967 }
1968
1969 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1970 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1971 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1972 talloc_free(r);
1973 return false;
1974 }
1975
1976 if (DEBUGLEVEL >= 10) {
1977 NDR_PRINT_IN_DEBUG(samr_DeleteGroupMember, r);
1978 }
1979
1980 r->out.result = _samr_DeleteGroupMember(p, r);
1981
1982 if (p->rng_fault_state) {
1983 talloc_free(r);
1984 /* Return true here, srv_pipe_hnd.c will take care */
1985 return true;
1986 }
1987
1988 if (DEBUGLEVEL >= 10) {
1989 NDR_PRINT_OUT_DEBUG(samr_DeleteGroupMember, r);
1990 }
1991
1992 push = ndr_push_init_ctx(r, NULL);
1993 if (push == NULL) {
1994 talloc_free(r);
1995 return false;
1996 }
1997
1998 ndr_err = call->ndr_push(push, NDR_OUT, r);
1999 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2000 talloc_free(r);
2001 return false;
2002 }
2003
2004 blob = ndr_push_blob(push);
2005 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
2006 talloc_free(r);
2007 return false;
2008 }
2009
2010 talloc_free(r);
2011
2012 return true;
2013}
2014
2015static bool api_samr_QueryGroupMember(pipes_struct *p)
2016{
2017 const struct ndr_interface_call *call;
2018 struct ndr_pull *pull;
2019 struct ndr_push *push;
2020 enum ndr_err_code ndr_err;
2021 DATA_BLOB blob;
2022 struct samr_QueryGroupMember *r;
2023
2024 call = &ndr_table_samr.calls[NDR_SAMR_QUERYGROUPMEMBER];
2025
2026 r = talloc(talloc_tos(), struct samr_QueryGroupMember);
2027 if (r == NULL) {
2028 return false;
2029 }
2030
2031 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
2032 talloc_free(r);
2033 return false;
2034 }
2035
2036 pull = ndr_pull_init_blob(&blob, r, NULL);
2037 if (pull == NULL) {
2038 talloc_free(r);
2039 return false;
2040 }
2041
2042 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2043 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2044 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2045 talloc_free(r);
2046 return false;
2047 }
2048
2049 if (DEBUGLEVEL >= 10) {
2050 NDR_PRINT_IN_DEBUG(samr_QueryGroupMember, r);
2051 }
2052
2053 ZERO_STRUCT(r->out);
2054 r->out.rids = talloc_zero(r, struct samr_RidTypeArray *);
2055 if (r->out.rids == NULL) {
2056 talloc_free(r);
2057 return false;
2058 }
2059
2060 r->out.result = _samr_QueryGroupMember(p, r);
2061
2062 if (p->rng_fault_state) {
2063 talloc_free(r);
2064 /* Return true here, srv_pipe_hnd.c will take care */
2065 return true;
2066 }
2067
2068 if (DEBUGLEVEL >= 10) {
2069 NDR_PRINT_OUT_DEBUG(samr_QueryGroupMember, r);
2070 }
2071
2072 push = ndr_push_init_ctx(r, NULL);
2073 if (push == NULL) {
2074 talloc_free(r);
2075 return false;
2076 }
2077
2078 ndr_err = call->ndr_push(push, NDR_OUT, r);
2079 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2080 talloc_free(r);
2081 return false;
2082 }
2083
2084 blob = ndr_push_blob(push);
2085 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
2086 talloc_free(r);
2087 return false;
2088 }
2089
2090 talloc_free(r);
2091
2092 return true;
2093}
2094
2095static bool api_samr_SetMemberAttributesOfGroup(pipes_struct *p)
2096{
2097 const struct ndr_interface_call *call;
2098 struct ndr_pull *pull;
2099 struct ndr_push *push;
2100 enum ndr_err_code ndr_err;
2101 DATA_BLOB blob;
2102 struct samr_SetMemberAttributesOfGroup *r;
2103
2104 call = &ndr_table_samr.calls[NDR_SAMR_SETMEMBERATTRIBUTESOFGROUP];
2105
2106 r = talloc(talloc_tos(), struct samr_SetMemberAttributesOfGroup);
2107 if (r == NULL) {
2108 return false;
2109 }
2110
2111 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
2112 talloc_free(r);
2113 return false;
2114 }
2115
2116 pull = ndr_pull_init_blob(&blob, r, NULL);
2117 if (pull == NULL) {
2118 talloc_free(r);
2119 return false;
2120 }
2121
2122 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2123 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2124 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2125 talloc_free(r);
2126 return false;
2127 }
2128
2129 if (DEBUGLEVEL >= 10) {
2130 NDR_PRINT_IN_DEBUG(samr_SetMemberAttributesOfGroup, r);
2131 }
2132
2133 r->out.result = _samr_SetMemberAttributesOfGroup(p, r);
2134
2135 if (p->rng_fault_state) {
2136 talloc_free(r);
2137 /* Return true here, srv_pipe_hnd.c will take care */
2138 return true;
2139 }
2140
2141 if (DEBUGLEVEL >= 10) {
2142 NDR_PRINT_OUT_DEBUG(samr_SetMemberAttributesOfGroup, r);
2143 }
2144
2145 push = ndr_push_init_ctx(r, NULL);
2146 if (push == NULL) {
2147 talloc_free(r);
2148 return false;
2149 }
2150
2151 ndr_err = call->ndr_push(push, NDR_OUT, r);
2152 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2153 talloc_free(r);
2154 return false;
2155 }
2156
2157 blob = ndr_push_blob(push);
2158 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
2159 talloc_free(r);
2160 return false;
2161 }
2162
2163 talloc_free(r);
2164
2165 return true;
2166}
2167
2168static bool api_samr_OpenAlias(pipes_struct *p)
2169{
2170 const struct ndr_interface_call *call;
2171 struct ndr_pull *pull;
2172 struct ndr_push *push;
2173 enum ndr_err_code ndr_err;
2174 DATA_BLOB blob;
2175 struct samr_OpenAlias *r;
2176
2177 call = &ndr_table_samr.calls[NDR_SAMR_OPENALIAS];
2178
2179 r = talloc(talloc_tos(), struct samr_OpenAlias);
2180 if (r == NULL) {
2181 return false;
2182 }
2183
2184 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
2185 talloc_free(r);
2186 return false;
2187 }
2188
2189 pull = ndr_pull_init_blob(&blob, r, NULL);
2190 if (pull == NULL) {
2191 talloc_free(r);
2192 return false;
2193 }
2194
2195 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2196 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2197 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2198 talloc_free(r);
2199 return false;
2200 }
2201
2202 if (DEBUGLEVEL >= 10) {
2203 NDR_PRINT_IN_DEBUG(samr_OpenAlias, r);
2204 }
2205
2206 ZERO_STRUCT(r->out);
2207 r->out.alias_handle = talloc_zero(r, struct policy_handle);
2208 if (r->out.alias_handle == NULL) {
2209 talloc_free(r);
2210 return false;
2211 }
2212
2213 r->out.result = _samr_OpenAlias(p, r);
2214
2215 if (p->rng_fault_state) {
2216 talloc_free(r);
2217 /* Return true here, srv_pipe_hnd.c will take care */
2218 return true;
2219 }
2220
2221 if (DEBUGLEVEL >= 10) {
2222 NDR_PRINT_OUT_DEBUG(samr_OpenAlias, r);
2223 }
2224
2225 push = ndr_push_init_ctx(r, NULL);
2226 if (push == NULL) {
2227 talloc_free(r);
2228 return false;
2229 }
2230
2231 ndr_err = call->ndr_push(push, NDR_OUT, r);
2232 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2233 talloc_free(r);
2234 return false;
2235 }
2236
2237 blob = ndr_push_blob(push);
2238 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
2239 talloc_free(r);
2240 return false;
2241 }
2242
2243 talloc_free(r);
2244
2245 return true;
2246}
2247
2248static bool api_samr_QueryAliasInfo(pipes_struct *p)
2249{
2250 const struct ndr_interface_call *call;
2251 struct ndr_pull *pull;
2252 struct ndr_push *push;
2253 enum ndr_err_code ndr_err;
2254 DATA_BLOB blob;
2255 struct samr_QueryAliasInfo *r;
2256
2257 call = &ndr_table_samr.calls[NDR_SAMR_QUERYALIASINFO];
2258
2259 r = talloc(talloc_tos(), struct samr_QueryAliasInfo);
2260 if (r == NULL) {
2261 return false;
2262 }
2263
2264 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
2265 talloc_free(r);
2266 return false;
2267 }
2268
2269 pull = ndr_pull_init_blob(&blob, r, NULL);
2270 if (pull == NULL) {
2271 talloc_free(r);
2272 return false;
2273 }
2274
2275 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2276 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2277 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2278 talloc_free(r);
2279 return false;
2280 }
2281
2282 if (DEBUGLEVEL >= 10) {
2283 NDR_PRINT_IN_DEBUG(samr_QueryAliasInfo, r);
2284 }
2285
2286 ZERO_STRUCT(r->out);
2287 r->out.info = talloc_zero(r, union samr_AliasInfo *);
2288 if (r->out.info == NULL) {
2289 talloc_free(r);
2290 return false;
2291 }
2292
2293 r->out.result = _samr_QueryAliasInfo(p, r);
2294
2295 if (p->rng_fault_state) {
2296 talloc_free(r);
2297 /* Return true here, srv_pipe_hnd.c will take care */
2298 return true;
2299 }
2300
2301 if (DEBUGLEVEL >= 10) {
2302 NDR_PRINT_OUT_DEBUG(samr_QueryAliasInfo, r);
2303 }
2304
2305 push = ndr_push_init_ctx(r, NULL);
2306 if (push == NULL) {
2307 talloc_free(r);
2308 return false;
2309 }
2310
2311 ndr_err = call->ndr_push(push, NDR_OUT, r);
2312 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2313 talloc_free(r);
2314 return false;
2315 }
2316
2317 blob = ndr_push_blob(push);
2318 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
2319 talloc_free(r);
2320 return false;
2321 }
2322
2323 talloc_free(r);
2324
2325 return true;
2326}
2327
2328static bool api_samr_SetAliasInfo(pipes_struct *p)
2329{
2330 const struct ndr_interface_call *call;
2331 struct ndr_pull *pull;
2332 struct ndr_push *push;
2333 enum ndr_err_code ndr_err;
2334 DATA_BLOB blob;
2335 struct samr_SetAliasInfo *r;
2336
2337 call = &ndr_table_samr.calls[NDR_SAMR_SETALIASINFO];
2338
2339 r = talloc(talloc_tos(), struct samr_SetAliasInfo);
2340 if (r == NULL) {
2341 return false;
2342 }
2343
2344 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
2345 talloc_free(r);
2346 return false;
2347 }
2348
2349 pull = ndr_pull_init_blob(&blob, r, NULL);
2350 if (pull == NULL) {
2351 talloc_free(r);
2352 return false;
2353 }
2354
2355 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2356 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2357 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2358 talloc_free(r);
2359 return false;
2360 }
2361
2362 if (DEBUGLEVEL >= 10) {
2363 NDR_PRINT_IN_DEBUG(samr_SetAliasInfo, r);
2364 }
2365
2366 r->out.result = _samr_SetAliasInfo(p, r);
2367
2368 if (p->rng_fault_state) {
2369 talloc_free(r);
2370 /* Return true here, srv_pipe_hnd.c will take care */
2371 return true;
2372 }
2373
2374 if (DEBUGLEVEL >= 10) {
2375 NDR_PRINT_OUT_DEBUG(samr_SetAliasInfo, r);
2376 }
2377
2378 push = ndr_push_init_ctx(r, NULL);
2379 if (push == NULL) {
2380 talloc_free(r);
2381 return false;
2382 }
2383
2384 ndr_err = call->ndr_push(push, NDR_OUT, r);
2385 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2386 talloc_free(r);
2387 return false;
2388 }
2389
2390 blob = ndr_push_blob(push);
2391 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
2392 talloc_free(r);
2393 return false;
2394 }
2395
2396 talloc_free(r);
2397
2398 return true;
2399}
2400
2401static bool api_samr_DeleteDomAlias(pipes_struct *p)
2402{
2403 const struct ndr_interface_call *call;
2404 struct ndr_pull *pull;
2405 struct ndr_push *push;
2406 enum ndr_err_code ndr_err;
2407 DATA_BLOB blob;
2408 struct samr_DeleteDomAlias *r;
2409
2410 call = &ndr_table_samr.calls[NDR_SAMR_DELETEDOMALIAS];
2411
2412 r = talloc(talloc_tos(), struct samr_DeleteDomAlias);
2413 if (r == NULL) {
2414 return false;
2415 }
2416
2417 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
2418 talloc_free(r);
2419 return false;
2420 }
2421
2422 pull = ndr_pull_init_blob(&blob, r, NULL);
2423 if (pull == NULL) {
2424 talloc_free(r);
2425 return false;
2426 }
2427
2428 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2429 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2430 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2431 talloc_free(r);
2432 return false;
2433 }
2434
2435 if (DEBUGLEVEL >= 10) {
2436 NDR_PRINT_IN_DEBUG(samr_DeleteDomAlias, r);
2437 }
2438
2439 ZERO_STRUCT(r->out);
2440 r->out.alias_handle = r->in.alias_handle;
2441 r->out.result = _samr_DeleteDomAlias(p, r);
2442
2443 if (p->rng_fault_state) {
2444 talloc_free(r);
2445 /* Return true here, srv_pipe_hnd.c will take care */
2446 return true;
2447 }
2448
2449 if (DEBUGLEVEL >= 10) {
2450 NDR_PRINT_OUT_DEBUG(samr_DeleteDomAlias, r);
2451 }
2452
2453 push = ndr_push_init_ctx(r, NULL);
2454 if (push == NULL) {
2455 talloc_free(r);
2456 return false;
2457 }
2458
2459 ndr_err = call->ndr_push(push, NDR_OUT, r);
2460 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2461 talloc_free(r);
2462 return false;
2463 }
2464
2465 blob = ndr_push_blob(push);
2466 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
2467 talloc_free(r);
2468 return false;
2469 }
2470
2471 talloc_free(r);
2472
2473 return true;
2474}
2475
2476static bool api_samr_AddAliasMember(pipes_struct *p)
2477{
2478 const struct ndr_interface_call *call;
2479 struct ndr_pull *pull;
2480 struct ndr_push *push;
2481 enum ndr_err_code ndr_err;
2482 DATA_BLOB blob;
2483 struct samr_AddAliasMember *r;
2484
2485 call = &ndr_table_samr.calls[NDR_SAMR_ADDALIASMEMBER];
2486
2487 r = talloc(talloc_tos(), struct samr_AddAliasMember);
2488 if (r == NULL) {
2489 return false;
2490 }
2491
2492 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
2493 talloc_free(r);
2494 return false;
2495 }
2496
2497 pull = ndr_pull_init_blob(&blob, r, NULL);
2498 if (pull == NULL) {
2499 talloc_free(r);
2500 return false;
2501 }
2502
2503 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2504 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2505 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2506 talloc_free(r);
2507 return false;
2508 }
2509
2510 if (DEBUGLEVEL >= 10) {
2511 NDR_PRINT_IN_DEBUG(samr_AddAliasMember, r);
2512 }
2513
2514 r->out.result = _samr_AddAliasMember(p, r);
2515
2516 if (p->rng_fault_state) {
2517 talloc_free(r);
2518 /* Return true here, srv_pipe_hnd.c will take care */
2519 return true;
2520 }
2521
2522 if (DEBUGLEVEL >= 10) {
2523 NDR_PRINT_OUT_DEBUG(samr_AddAliasMember, r);
2524 }
2525
2526 push = ndr_push_init_ctx(r, NULL);
2527 if (push == NULL) {
2528 talloc_free(r);
2529 return false;
2530 }
2531
2532 ndr_err = call->ndr_push(push, NDR_OUT, r);
2533 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2534 talloc_free(r);
2535 return false;
2536 }
2537
2538 blob = ndr_push_blob(push);
2539 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
2540 talloc_free(r);
2541 return false;
2542 }
2543
2544 talloc_free(r);
2545
2546 return true;
2547}
2548
2549static bool api_samr_DeleteAliasMember(pipes_struct *p)
2550{
2551 const struct ndr_interface_call *call;
2552 struct ndr_pull *pull;
2553 struct ndr_push *push;
2554 enum ndr_err_code ndr_err;
2555 DATA_BLOB blob;
2556 struct samr_DeleteAliasMember *r;
2557
2558 call = &ndr_table_samr.calls[NDR_SAMR_DELETEALIASMEMBER];
2559
2560 r = talloc(talloc_tos(), struct samr_DeleteAliasMember);
2561 if (r == NULL) {
2562 return false;
2563 }
2564
2565 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
2566 talloc_free(r);
2567 return false;
2568 }
2569
2570 pull = ndr_pull_init_blob(&blob, r, NULL);
2571 if (pull == NULL) {
2572 talloc_free(r);
2573 return false;
2574 }
2575
2576 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2577 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2578 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2579 talloc_free(r);
2580 return false;
2581 }
2582
2583 if (DEBUGLEVEL >= 10) {
2584 NDR_PRINT_IN_DEBUG(samr_DeleteAliasMember, r);
2585 }
2586
2587 r->out.result = _samr_DeleteAliasMember(p, r);
2588
2589 if (p->rng_fault_state) {
2590 talloc_free(r);
2591 /* Return true here, srv_pipe_hnd.c will take care */
2592 return true;
2593 }
2594
2595 if (DEBUGLEVEL >= 10) {
2596 NDR_PRINT_OUT_DEBUG(samr_DeleteAliasMember, r);
2597 }
2598
2599 push = ndr_push_init_ctx(r, NULL);
2600 if (push == NULL) {
2601 talloc_free(r);
2602 return false;
2603 }
2604
2605 ndr_err = call->ndr_push(push, NDR_OUT, r);
2606 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2607 talloc_free(r);
2608 return false;
2609 }
2610
2611 blob = ndr_push_blob(push);
2612 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
2613 talloc_free(r);
2614 return false;
2615 }
2616
2617 talloc_free(r);
2618
2619 return true;
2620}
2621
2622static bool api_samr_GetMembersInAlias(pipes_struct *p)
2623{
2624 const struct ndr_interface_call *call;
2625 struct ndr_pull *pull;
2626 struct ndr_push *push;
2627 enum ndr_err_code ndr_err;
2628 DATA_BLOB blob;
2629 struct samr_GetMembersInAlias *r;
2630
2631 call = &ndr_table_samr.calls[NDR_SAMR_GETMEMBERSINALIAS];
2632
2633 r = talloc(talloc_tos(), struct samr_GetMembersInAlias);
2634 if (r == NULL) {
2635 return false;
2636 }
2637
2638 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
2639 talloc_free(r);
2640 return false;
2641 }
2642
2643 pull = ndr_pull_init_blob(&blob, r, NULL);
2644 if (pull == NULL) {
2645 talloc_free(r);
2646 return false;
2647 }
2648
2649 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2650 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2651 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2652 talloc_free(r);
2653 return false;
2654 }
2655
2656 if (DEBUGLEVEL >= 10) {
2657 NDR_PRINT_IN_DEBUG(samr_GetMembersInAlias, r);
2658 }
2659
2660 ZERO_STRUCT(r->out);
2661 r->out.sids = talloc_zero(r, struct lsa_SidArray);
2662 if (r->out.sids == NULL) {
2663 talloc_free(r);
2664 return false;
2665 }
2666
2667 r->out.result = _samr_GetMembersInAlias(p, r);
2668
2669 if (p->rng_fault_state) {
2670 talloc_free(r);
2671 /* Return true here, srv_pipe_hnd.c will take care */
2672 return true;
2673 }
2674
2675 if (DEBUGLEVEL >= 10) {
2676 NDR_PRINT_OUT_DEBUG(samr_GetMembersInAlias, r);
2677 }
2678
2679 push = ndr_push_init_ctx(r, NULL);
2680 if (push == NULL) {
2681 talloc_free(r);
2682 return false;
2683 }
2684
2685 ndr_err = call->ndr_push(push, NDR_OUT, r);
2686 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2687 talloc_free(r);
2688 return false;
2689 }
2690
2691 blob = ndr_push_blob(push);
2692 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
2693 talloc_free(r);
2694 return false;
2695 }
2696
2697 talloc_free(r);
2698
2699 return true;
2700}
2701
2702static bool api_samr_OpenUser(pipes_struct *p)
2703{
2704 const struct ndr_interface_call *call;
2705 struct ndr_pull *pull;
2706 struct ndr_push *push;
2707 enum ndr_err_code ndr_err;
2708 DATA_BLOB blob;
2709 struct samr_OpenUser *r;
2710
2711 call = &ndr_table_samr.calls[NDR_SAMR_OPENUSER];
2712
2713 r = talloc(talloc_tos(), struct samr_OpenUser);
2714 if (r == NULL) {
2715 return false;
2716 }
2717
2718 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
2719 talloc_free(r);
2720 return false;
2721 }
2722
2723 pull = ndr_pull_init_blob(&blob, r, NULL);
2724 if (pull == NULL) {
2725 talloc_free(r);
2726 return false;
2727 }
2728
2729 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2730 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2731 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2732 talloc_free(r);
2733 return false;
2734 }
2735
2736 if (DEBUGLEVEL >= 10) {
2737 NDR_PRINT_IN_DEBUG(samr_OpenUser, r);
2738 }
2739
2740 ZERO_STRUCT(r->out);
2741 r->out.user_handle = talloc_zero(r, struct policy_handle);
2742 if (r->out.user_handle == NULL) {
2743 talloc_free(r);
2744 return false;
2745 }
2746
2747 r->out.result = _samr_OpenUser(p, r);
2748
2749 if (p->rng_fault_state) {
2750 talloc_free(r);
2751 /* Return true here, srv_pipe_hnd.c will take care */
2752 return true;
2753 }
2754
2755 if (DEBUGLEVEL >= 10) {
2756 NDR_PRINT_OUT_DEBUG(samr_OpenUser, r);
2757 }
2758
2759 push = ndr_push_init_ctx(r, NULL);
2760 if (push == NULL) {
2761 talloc_free(r);
2762 return false;
2763 }
2764
2765 ndr_err = call->ndr_push(push, NDR_OUT, r);
2766 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2767 talloc_free(r);
2768 return false;
2769 }
2770
2771 blob = ndr_push_blob(push);
2772 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
2773 talloc_free(r);
2774 return false;
2775 }
2776
2777 talloc_free(r);
2778
2779 return true;
2780}
2781
2782static bool api_samr_DeleteUser(pipes_struct *p)
2783{
2784 const struct ndr_interface_call *call;
2785 struct ndr_pull *pull;
2786 struct ndr_push *push;
2787 enum ndr_err_code ndr_err;
2788 DATA_BLOB blob;
2789 struct samr_DeleteUser *r;
2790
2791 call = &ndr_table_samr.calls[NDR_SAMR_DELETEUSER];
2792
2793 r = talloc(talloc_tos(), struct samr_DeleteUser);
2794 if (r == NULL) {
2795 return false;
2796 }
2797
2798 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
2799 talloc_free(r);
2800 return false;
2801 }
2802
2803 pull = ndr_pull_init_blob(&blob, r, NULL);
2804 if (pull == NULL) {
2805 talloc_free(r);
2806 return false;
2807 }
2808
2809 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2810 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2811 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2812 talloc_free(r);
2813 return false;
2814 }
2815
2816 if (DEBUGLEVEL >= 10) {
2817 NDR_PRINT_IN_DEBUG(samr_DeleteUser, r);
2818 }
2819
2820 ZERO_STRUCT(r->out);
2821 r->out.user_handle = r->in.user_handle;
2822 r->out.result = _samr_DeleteUser(p, r);
2823
2824 if (p->rng_fault_state) {
2825 talloc_free(r);
2826 /* Return true here, srv_pipe_hnd.c will take care */
2827 return true;
2828 }
2829
2830 if (DEBUGLEVEL >= 10) {
2831 NDR_PRINT_OUT_DEBUG(samr_DeleteUser, r);
2832 }
2833
2834 push = ndr_push_init_ctx(r, NULL);
2835 if (push == NULL) {
2836 talloc_free(r);
2837 return false;
2838 }
2839
2840 ndr_err = call->ndr_push(push, NDR_OUT, r);
2841 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2842 talloc_free(r);
2843 return false;
2844 }
2845
2846 blob = ndr_push_blob(push);
2847 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
2848 talloc_free(r);
2849 return false;
2850 }
2851
2852 talloc_free(r);
2853
2854 return true;
2855}
2856
2857static bool api_samr_QueryUserInfo(pipes_struct *p)
2858{
2859 const struct ndr_interface_call *call;
2860 struct ndr_pull *pull;
2861 struct ndr_push *push;
2862 enum ndr_err_code ndr_err;
2863 DATA_BLOB blob;
2864 struct samr_QueryUserInfo *r;
2865
2866 call = &ndr_table_samr.calls[NDR_SAMR_QUERYUSERINFO];
2867
2868 r = talloc(talloc_tos(), struct samr_QueryUserInfo);
2869 if (r == NULL) {
2870 return false;
2871 }
2872
2873 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
2874 talloc_free(r);
2875 return false;
2876 }
2877
2878 pull = ndr_pull_init_blob(&blob, r, NULL);
2879 if (pull == NULL) {
2880 talloc_free(r);
2881 return false;
2882 }
2883
2884 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2885 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2886 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2887 talloc_free(r);
2888 return false;
2889 }
2890
2891 if (DEBUGLEVEL >= 10) {
2892 NDR_PRINT_IN_DEBUG(samr_QueryUserInfo, r);
2893 }
2894
2895 ZERO_STRUCT(r->out);
2896 r->out.info = talloc_zero(r, union samr_UserInfo *);
2897 if (r->out.info == NULL) {
2898 talloc_free(r);
2899 return false;
2900 }
2901
2902 r->out.result = _samr_QueryUserInfo(p, r);
2903
2904 if (p->rng_fault_state) {
2905 talloc_free(r);
2906 /* Return true here, srv_pipe_hnd.c will take care */
2907 return true;
2908 }
2909
2910 if (DEBUGLEVEL >= 10) {
2911 NDR_PRINT_OUT_DEBUG(samr_QueryUserInfo, r);
2912 }
2913
2914 push = ndr_push_init_ctx(r, NULL);
2915 if (push == NULL) {
2916 talloc_free(r);
2917 return false;
2918 }
2919
2920 ndr_err = call->ndr_push(push, NDR_OUT, r);
2921 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2922 talloc_free(r);
2923 return false;
2924 }
2925
2926 blob = ndr_push_blob(push);
2927 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
2928 talloc_free(r);
2929 return false;
2930 }
2931
2932 talloc_free(r);
2933
2934 return true;
2935}
2936
2937static bool api_samr_SetUserInfo(pipes_struct *p)
2938{
2939 const struct ndr_interface_call *call;
2940 struct ndr_pull *pull;
2941 struct ndr_push *push;
2942 enum ndr_err_code ndr_err;
2943 DATA_BLOB blob;
2944 struct samr_SetUserInfo *r;
2945
2946 call = &ndr_table_samr.calls[NDR_SAMR_SETUSERINFO];
2947
2948 r = talloc(talloc_tos(), struct samr_SetUserInfo);
2949 if (r == NULL) {
2950 return false;
2951 }
2952
2953 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
2954 talloc_free(r);
2955 return false;
2956 }
2957
2958 pull = ndr_pull_init_blob(&blob, r, NULL);
2959 if (pull == NULL) {
2960 talloc_free(r);
2961 return false;
2962 }
2963
2964 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2965 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2966 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2967 talloc_free(r);
2968 return false;
2969 }
2970
2971 if (DEBUGLEVEL >= 10) {
2972 NDR_PRINT_IN_DEBUG(samr_SetUserInfo, r);
2973 }
2974
2975 r->out.result = _samr_SetUserInfo(p, r);
2976
2977 if (p->rng_fault_state) {
2978 talloc_free(r);
2979 /* Return true here, srv_pipe_hnd.c will take care */
2980 return true;
2981 }
2982
2983 if (DEBUGLEVEL >= 10) {
2984 NDR_PRINT_OUT_DEBUG(samr_SetUserInfo, r);
2985 }
2986
2987 push = ndr_push_init_ctx(r, NULL);
2988 if (push == NULL) {
2989 talloc_free(r);
2990 return false;
2991 }
2992
2993 ndr_err = call->ndr_push(push, NDR_OUT, r);
2994 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2995 talloc_free(r);
2996 return false;
2997 }
2998
2999 blob = ndr_push_blob(push);
3000 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
3001 talloc_free(r);
3002 return false;
3003 }
3004
3005 talloc_free(r);
3006
3007 return true;
3008}
3009
3010static bool api_samr_ChangePasswordUser(pipes_struct *p)
3011{
3012 const struct ndr_interface_call *call;
3013 struct ndr_pull *pull;
3014 struct ndr_push *push;
3015 enum ndr_err_code ndr_err;
3016 DATA_BLOB blob;
3017 struct samr_ChangePasswordUser *r;
3018
3019 call = &ndr_table_samr.calls[NDR_SAMR_CHANGEPASSWORDUSER];
3020
3021 r = talloc(talloc_tos(), struct samr_ChangePasswordUser);
3022 if (r == NULL) {
3023 return false;
3024 }
3025
3026 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
3027 talloc_free(r);
3028 return false;
3029 }
3030
3031 pull = ndr_pull_init_blob(&blob, r, NULL);
3032 if (pull == NULL) {
3033 talloc_free(r);
3034 return false;
3035 }
3036
3037 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3038 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3039 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3040 talloc_free(r);
3041 return false;
3042 }
3043
3044 if (DEBUGLEVEL >= 10) {
3045 NDR_PRINT_IN_DEBUG(samr_ChangePasswordUser, r);
3046 }
3047
3048 r->out.result = _samr_ChangePasswordUser(p, r);
3049
3050 if (p->rng_fault_state) {
3051 talloc_free(r);
3052 /* Return true here, srv_pipe_hnd.c will take care */
3053 return true;
3054 }
3055
3056 if (DEBUGLEVEL >= 10) {
3057 NDR_PRINT_OUT_DEBUG(samr_ChangePasswordUser, r);
3058 }
3059
3060 push = ndr_push_init_ctx(r, NULL);
3061 if (push == NULL) {
3062 talloc_free(r);
3063 return false;
3064 }
3065
3066 ndr_err = call->ndr_push(push, NDR_OUT, r);
3067 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3068 talloc_free(r);
3069 return false;
3070 }
3071
3072 blob = ndr_push_blob(push);
3073 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
3074 talloc_free(r);
3075 return false;
3076 }
3077
3078 talloc_free(r);
3079
3080 return true;
3081}
3082
3083static bool api_samr_GetGroupsForUser(pipes_struct *p)
3084{
3085 const struct ndr_interface_call *call;
3086 struct ndr_pull *pull;
3087 struct ndr_push *push;
3088 enum ndr_err_code ndr_err;
3089 DATA_BLOB blob;
3090 struct samr_GetGroupsForUser *r;
3091
3092 call = &ndr_table_samr.calls[NDR_SAMR_GETGROUPSFORUSER];
3093
3094 r = talloc(talloc_tos(), struct samr_GetGroupsForUser);
3095 if (r == NULL) {
3096 return false;
3097 }
3098
3099 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
3100 talloc_free(r);
3101 return false;
3102 }
3103
3104 pull = ndr_pull_init_blob(&blob, r, NULL);
3105 if (pull == NULL) {
3106 talloc_free(r);
3107 return false;
3108 }
3109
3110 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3111 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3112 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3113 talloc_free(r);
3114 return false;
3115 }
3116
3117 if (DEBUGLEVEL >= 10) {
3118 NDR_PRINT_IN_DEBUG(samr_GetGroupsForUser, r);
3119 }
3120
3121 ZERO_STRUCT(r->out);
3122 r->out.rids = talloc_zero(r, struct samr_RidWithAttributeArray *);
3123 if (r->out.rids == NULL) {
3124 talloc_free(r);
3125 return false;
3126 }
3127
3128 r->out.result = _samr_GetGroupsForUser(p, r);
3129
3130 if (p->rng_fault_state) {
3131 talloc_free(r);
3132 /* Return true here, srv_pipe_hnd.c will take care */
3133 return true;
3134 }
3135
3136 if (DEBUGLEVEL >= 10) {
3137 NDR_PRINT_OUT_DEBUG(samr_GetGroupsForUser, r);
3138 }
3139
3140 push = ndr_push_init_ctx(r, NULL);
3141 if (push == NULL) {
3142 talloc_free(r);
3143 return false;
3144 }
3145
3146 ndr_err = call->ndr_push(push, NDR_OUT, r);
3147 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3148 talloc_free(r);
3149 return false;
3150 }
3151
3152 blob = ndr_push_blob(push);
3153 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
3154 talloc_free(r);
3155 return false;
3156 }
3157
3158 talloc_free(r);
3159
3160 return true;
3161}
3162
3163static bool api_samr_QueryDisplayInfo(pipes_struct *p)
3164{
3165 const struct ndr_interface_call *call;
3166 struct ndr_pull *pull;
3167 struct ndr_push *push;
3168 enum ndr_err_code ndr_err;
3169 DATA_BLOB blob;
3170 struct samr_QueryDisplayInfo *r;
3171
3172 call = &ndr_table_samr.calls[NDR_SAMR_QUERYDISPLAYINFO];
3173
3174 r = talloc(talloc_tos(), struct samr_QueryDisplayInfo);
3175 if (r == NULL) {
3176 return false;
3177 }
3178
3179 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
3180 talloc_free(r);
3181 return false;
3182 }
3183
3184 pull = ndr_pull_init_blob(&blob, r, NULL);
3185 if (pull == NULL) {
3186 talloc_free(r);
3187 return false;
3188 }
3189
3190 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3191 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3192 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3193 talloc_free(r);
3194 return false;
3195 }
3196
3197 if (DEBUGLEVEL >= 10) {
3198 NDR_PRINT_IN_DEBUG(samr_QueryDisplayInfo, r);
3199 }
3200
3201 ZERO_STRUCT(r->out);
3202 r->out.total_size = talloc_zero(r, uint32_t);
3203 if (r->out.total_size == NULL) {
3204 talloc_free(r);
3205 return false;
3206 }
3207
3208 r->out.returned_size = talloc_zero(r, uint32_t);
3209 if (r->out.returned_size == NULL) {
3210 talloc_free(r);
3211 return false;
3212 }
3213
3214 r->out.info = talloc_zero(r, union samr_DispInfo);
3215 if (r->out.info == NULL) {
3216 talloc_free(r);
3217 return false;
3218 }
3219
3220 r->out.result = _samr_QueryDisplayInfo(p, r);
3221
3222 if (p->rng_fault_state) {
3223 talloc_free(r);
3224 /* Return true here, srv_pipe_hnd.c will take care */
3225 return true;
3226 }
3227
3228 if (DEBUGLEVEL >= 10) {
3229 NDR_PRINT_OUT_DEBUG(samr_QueryDisplayInfo, r);
3230 }
3231
3232 push = ndr_push_init_ctx(r, NULL);
3233 if (push == NULL) {
3234 talloc_free(r);
3235 return false;
3236 }
3237
3238 ndr_err = call->ndr_push(push, NDR_OUT, r);
3239 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3240 talloc_free(r);
3241 return false;
3242 }
3243
3244 blob = ndr_push_blob(push);
3245 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
3246 talloc_free(r);
3247 return false;
3248 }
3249
3250 talloc_free(r);
3251
3252 return true;
3253}
3254
3255static bool api_samr_GetDisplayEnumerationIndex(pipes_struct *p)
3256{
3257 const struct ndr_interface_call *call;
3258 struct ndr_pull *pull;
3259 struct ndr_push *push;
3260 enum ndr_err_code ndr_err;
3261 DATA_BLOB blob;
3262 struct samr_GetDisplayEnumerationIndex *r;
3263
3264 call = &ndr_table_samr.calls[NDR_SAMR_GETDISPLAYENUMERATIONINDEX];
3265
3266 r = talloc(talloc_tos(), struct samr_GetDisplayEnumerationIndex);
3267 if (r == NULL) {
3268 return false;
3269 }
3270
3271 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
3272 talloc_free(r);
3273 return false;
3274 }
3275
3276 pull = ndr_pull_init_blob(&blob, r, NULL);
3277 if (pull == NULL) {
3278 talloc_free(r);
3279 return false;
3280 }
3281
3282 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3283 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3284 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3285 talloc_free(r);
3286 return false;
3287 }
3288
3289 if (DEBUGLEVEL >= 10) {
3290 NDR_PRINT_IN_DEBUG(samr_GetDisplayEnumerationIndex, r);
3291 }
3292
3293 ZERO_STRUCT(r->out);
3294 r->out.idx = talloc_zero(r, uint32_t);
3295 if (r->out.idx == NULL) {
3296 talloc_free(r);
3297 return false;
3298 }
3299
3300 r->out.result = _samr_GetDisplayEnumerationIndex(p, r);
3301
3302 if (p->rng_fault_state) {
3303 talloc_free(r);
3304 /* Return true here, srv_pipe_hnd.c will take care */
3305 return true;
3306 }
3307
3308 if (DEBUGLEVEL >= 10) {
3309 NDR_PRINT_OUT_DEBUG(samr_GetDisplayEnumerationIndex, r);
3310 }
3311
3312 push = ndr_push_init_ctx(r, NULL);
3313 if (push == NULL) {
3314 talloc_free(r);
3315 return false;
3316 }
3317
3318 ndr_err = call->ndr_push(push, NDR_OUT, r);
3319 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3320 talloc_free(r);
3321 return false;
3322 }
3323
3324 blob = ndr_push_blob(push);
3325 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
3326 talloc_free(r);
3327 return false;
3328 }
3329
3330 talloc_free(r);
3331
3332 return true;
3333}
3334
3335static bool api_samr_TestPrivateFunctionsDomain(pipes_struct *p)
3336{
3337 const struct ndr_interface_call *call;
3338 struct ndr_pull *pull;
3339 struct ndr_push *push;
3340 enum ndr_err_code ndr_err;
3341 DATA_BLOB blob;
3342 struct samr_TestPrivateFunctionsDomain *r;
3343
3344 call = &ndr_table_samr.calls[NDR_SAMR_TESTPRIVATEFUNCTIONSDOMAIN];
3345
3346 r = talloc(talloc_tos(), struct samr_TestPrivateFunctionsDomain);
3347 if (r == NULL) {
3348 return false;
3349 }
3350
3351 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
3352 talloc_free(r);
3353 return false;
3354 }
3355
3356 pull = ndr_pull_init_blob(&blob, r, NULL);
3357 if (pull == NULL) {
3358 talloc_free(r);
3359 return false;
3360 }
3361
3362 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3363 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3364 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3365 talloc_free(r);
3366 return false;
3367 }
3368
3369 if (DEBUGLEVEL >= 10) {
3370 NDR_PRINT_IN_DEBUG(samr_TestPrivateFunctionsDomain, r);
3371 }
3372
3373 r->out.result = _samr_TestPrivateFunctionsDomain(p, r);
3374
3375 if (p->rng_fault_state) {
3376 talloc_free(r);
3377 /* Return true here, srv_pipe_hnd.c will take care */
3378 return true;
3379 }
3380
3381 if (DEBUGLEVEL >= 10) {
3382 NDR_PRINT_OUT_DEBUG(samr_TestPrivateFunctionsDomain, r);
3383 }
3384
3385 push = ndr_push_init_ctx(r, NULL);
3386 if (push == NULL) {
3387 talloc_free(r);
3388 return false;
3389 }
3390
3391 ndr_err = call->ndr_push(push, NDR_OUT, r);
3392 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3393 talloc_free(r);
3394 return false;
3395 }
3396
3397 blob = ndr_push_blob(push);
3398 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
3399 talloc_free(r);
3400 return false;
3401 }
3402
3403 talloc_free(r);
3404
3405 return true;
3406}
3407
3408static bool api_samr_TestPrivateFunctionsUser(pipes_struct *p)
3409{
3410 const struct ndr_interface_call *call;
3411 struct ndr_pull *pull;
3412 struct ndr_push *push;
3413 enum ndr_err_code ndr_err;
3414 DATA_BLOB blob;
3415 struct samr_TestPrivateFunctionsUser *r;
3416
3417 call = &ndr_table_samr.calls[NDR_SAMR_TESTPRIVATEFUNCTIONSUSER];
3418
3419 r = talloc(talloc_tos(), struct samr_TestPrivateFunctionsUser);
3420 if (r == NULL) {
3421 return false;
3422 }
3423
3424 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
3425 talloc_free(r);
3426 return false;
3427 }
3428
3429 pull = ndr_pull_init_blob(&blob, r, NULL);
3430 if (pull == NULL) {
3431 talloc_free(r);
3432 return false;
3433 }
3434
3435 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3436 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3437 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3438 talloc_free(r);
3439 return false;
3440 }
3441
3442 if (DEBUGLEVEL >= 10) {
3443 NDR_PRINT_IN_DEBUG(samr_TestPrivateFunctionsUser, r);
3444 }
3445
3446 r->out.result = _samr_TestPrivateFunctionsUser(p, r);
3447
3448 if (p->rng_fault_state) {
3449 talloc_free(r);
3450 /* Return true here, srv_pipe_hnd.c will take care */
3451 return true;
3452 }
3453
3454 if (DEBUGLEVEL >= 10) {
3455 NDR_PRINT_OUT_DEBUG(samr_TestPrivateFunctionsUser, r);
3456 }
3457
3458 push = ndr_push_init_ctx(r, NULL);
3459 if (push == NULL) {
3460 talloc_free(r);
3461 return false;
3462 }
3463
3464 ndr_err = call->ndr_push(push, NDR_OUT, r);
3465 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3466 talloc_free(r);
3467 return false;
3468 }
3469
3470 blob = ndr_push_blob(push);
3471 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
3472 talloc_free(r);
3473 return false;
3474 }
3475
3476 talloc_free(r);
3477
3478 return true;
3479}
3480
3481static bool api_samr_GetUserPwInfo(pipes_struct *p)
3482{
3483 const struct ndr_interface_call *call;
3484 struct ndr_pull *pull;
3485 struct ndr_push *push;
3486 enum ndr_err_code ndr_err;
3487 DATA_BLOB blob;
3488 struct samr_GetUserPwInfo *r;
3489
3490 call = &ndr_table_samr.calls[NDR_SAMR_GETUSERPWINFO];
3491
3492 r = talloc(talloc_tos(), struct samr_GetUserPwInfo);
3493 if (r == NULL) {
3494 return false;
3495 }
3496
3497 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
3498 talloc_free(r);
3499 return false;
3500 }
3501
3502 pull = ndr_pull_init_blob(&blob, r, NULL);
3503 if (pull == NULL) {
3504 talloc_free(r);
3505 return false;
3506 }
3507
3508 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3509 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3510 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3511 talloc_free(r);
3512 return false;
3513 }
3514
3515 if (DEBUGLEVEL >= 10) {
3516 NDR_PRINT_IN_DEBUG(samr_GetUserPwInfo, r);
3517 }
3518
3519 ZERO_STRUCT(r->out);
3520 r->out.info = talloc_zero(r, struct samr_PwInfo);
3521 if (r->out.info == NULL) {
3522 talloc_free(r);
3523 return false;
3524 }
3525
3526 r->out.result = _samr_GetUserPwInfo(p, r);
3527
3528 if (p->rng_fault_state) {
3529 talloc_free(r);
3530 /* Return true here, srv_pipe_hnd.c will take care */
3531 return true;
3532 }
3533
3534 if (DEBUGLEVEL >= 10) {
3535 NDR_PRINT_OUT_DEBUG(samr_GetUserPwInfo, r);
3536 }
3537
3538 push = ndr_push_init_ctx(r, NULL);
3539 if (push == NULL) {
3540 talloc_free(r);
3541 return false;
3542 }
3543
3544 ndr_err = call->ndr_push(push, NDR_OUT, r);
3545 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3546 talloc_free(r);
3547 return false;
3548 }
3549
3550 blob = ndr_push_blob(push);
3551 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
3552 talloc_free(r);
3553 return false;
3554 }
3555
3556 talloc_free(r);
3557
3558 return true;
3559}
3560
3561static bool api_samr_RemoveMemberFromForeignDomain(pipes_struct *p)
3562{
3563 const struct ndr_interface_call *call;
3564 struct ndr_pull *pull;
3565 struct ndr_push *push;
3566 enum ndr_err_code ndr_err;
3567 DATA_BLOB blob;
3568 struct samr_RemoveMemberFromForeignDomain *r;
3569
3570 call = &ndr_table_samr.calls[NDR_SAMR_REMOVEMEMBERFROMFOREIGNDOMAIN];
3571
3572 r = talloc(talloc_tos(), struct samr_RemoveMemberFromForeignDomain);
3573 if (r == NULL) {
3574 return false;
3575 }
3576
3577 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
3578 talloc_free(r);
3579 return false;
3580 }
3581
3582 pull = ndr_pull_init_blob(&blob, r, NULL);
3583 if (pull == NULL) {
3584 talloc_free(r);
3585 return false;
3586 }
3587
3588 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3589 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3590 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3591 talloc_free(r);
3592 return false;
3593 }
3594
3595 if (DEBUGLEVEL >= 10) {
3596 NDR_PRINT_IN_DEBUG(samr_RemoveMemberFromForeignDomain, r);
3597 }
3598
3599 r->out.result = _samr_RemoveMemberFromForeignDomain(p, r);
3600
3601 if (p->rng_fault_state) {
3602 talloc_free(r);
3603 /* Return true here, srv_pipe_hnd.c will take care */
3604 return true;
3605 }
3606
3607 if (DEBUGLEVEL >= 10) {
3608 NDR_PRINT_OUT_DEBUG(samr_RemoveMemberFromForeignDomain, r);
3609 }
3610
3611 push = ndr_push_init_ctx(r, NULL);
3612 if (push == NULL) {
3613 talloc_free(r);
3614 return false;
3615 }
3616
3617 ndr_err = call->ndr_push(push, NDR_OUT, r);
3618 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3619 talloc_free(r);
3620 return false;
3621 }
3622
3623 blob = ndr_push_blob(push);
3624 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
3625 talloc_free(r);
3626 return false;
3627 }
3628
3629 talloc_free(r);
3630
3631 return true;
3632}
3633
3634static bool api_samr_QueryDomainInfo2(pipes_struct *p)
3635{
3636 const struct ndr_interface_call *call;
3637 struct ndr_pull *pull;
3638 struct ndr_push *push;
3639 enum ndr_err_code ndr_err;
3640 DATA_BLOB blob;
3641 struct samr_QueryDomainInfo2 *r;
3642
3643 call = &ndr_table_samr.calls[NDR_SAMR_QUERYDOMAININFO2];
3644
3645 r = talloc(talloc_tos(), struct samr_QueryDomainInfo2);
3646 if (r == NULL) {
3647 return false;
3648 }
3649
3650 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
3651 talloc_free(r);
3652 return false;
3653 }
3654
3655 pull = ndr_pull_init_blob(&blob, r, NULL);
3656 if (pull == NULL) {
3657 talloc_free(r);
3658 return false;
3659 }
3660
3661 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3662 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3663 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3664 talloc_free(r);
3665 return false;
3666 }
3667
3668 if (DEBUGLEVEL >= 10) {
3669 NDR_PRINT_IN_DEBUG(samr_QueryDomainInfo2, r);
3670 }
3671
3672 ZERO_STRUCT(r->out);
3673 r->out.info = talloc_zero(r, union samr_DomainInfo *);
3674 if (r->out.info == NULL) {
3675 talloc_free(r);
3676 return false;
3677 }
3678
3679 r->out.result = _samr_QueryDomainInfo2(p, r);
3680
3681 if (p->rng_fault_state) {
3682 talloc_free(r);
3683 /* Return true here, srv_pipe_hnd.c will take care */
3684 return true;
3685 }
3686
3687 if (DEBUGLEVEL >= 10) {
3688 NDR_PRINT_OUT_DEBUG(samr_QueryDomainInfo2, r);
3689 }
3690
3691 push = ndr_push_init_ctx(r, NULL);
3692 if (push == NULL) {
3693 talloc_free(r);
3694 return false;
3695 }
3696
3697 ndr_err = call->ndr_push(push, NDR_OUT, r);
3698 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3699 talloc_free(r);
3700 return false;
3701 }
3702
3703 blob = ndr_push_blob(push);
3704 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
3705 talloc_free(r);
3706 return false;
3707 }
3708
3709 talloc_free(r);
3710
3711 return true;
3712}
3713
3714static bool api_samr_QueryUserInfo2(pipes_struct *p)
3715{
3716 const struct ndr_interface_call *call;
3717 struct ndr_pull *pull;
3718 struct ndr_push *push;
3719 enum ndr_err_code ndr_err;
3720 DATA_BLOB blob;
3721 struct samr_QueryUserInfo2 *r;
3722
3723 call = &ndr_table_samr.calls[NDR_SAMR_QUERYUSERINFO2];
3724
3725 r = talloc(talloc_tos(), struct samr_QueryUserInfo2);
3726 if (r == NULL) {
3727 return false;
3728 }
3729
3730 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
3731 talloc_free(r);
3732 return false;
3733 }
3734
3735 pull = ndr_pull_init_blob(&blob, r, NULL);
3736 if (pull == NULL) {
3737 talloc_free(r);
3738 return false;
3739 }
3740
3741 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3742 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3743 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3744 talloc_free(r);
3745 return false;
3746 }
3747
3748 if (DEBUGLEVEL >= 10) {
3749 NDR_PRINT_IN_DEBUG(samr_QueryUserInfo2, r);
3750 }
3751
3752 ZERO_STRUCT(r->out);
3753 r->out.info = talloc_zero(r, union samr_UserInfo *);
3754 if (r->out.info == NULL) {
3755 talloc_free(r);
3756 return false;
3757 }
3758
3759 r->out.result = _samr_QueryUserInfo2(p, r);
3760
3761 if (p->rng_fault_state) {
3762 talloc_free(r);
3763 /* Return true here, srv_pipe_hnd.c will take care */
3764 return true;
3765 }
3766
3767 if (DEBUGLEVEL >= 10) {
3768 NDR_PRINT_OUT_DEBUG(samr_QueryUserInfo2, r);
3769 }
3770
3771 push = ndr_push_init_ctx(r, NULL);
3772 if (push == NULL) {
3773 talloc_free(r);
3774 return false;
3775 }
3776
3777 ndr_err = call->ndr_push(push, NDR_OUT, r);
3778 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3779 talloc_free(r);
3780 return false;
3781 }
3782
3783 blob = ndr_push_blob(push);
3784 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
3785 talloc_free(r);
3786 return false;
3787 }
3788
3789 talloc_free(r);
3790
3791 return true;
3792}
3793
3794static bool api_samr_QueryDisplayInfo2(pipes_struct *p)
3795{
3796 const struct ndr_interface_call *call;
3797 struct ndr_pull *pull;
3798 struct ndr_push *push;
3799 enum ndr_err_code ndr_err;
3800 DATA_BLOB blob;
3801 struct samr_QueryDisplayInfo2 *r;
3802
3803 call = &ndr_table_samr.calls[NDR_SAMR_QUERYDISPLAYINFO2];
3804
3805 r = talloc(talloc_tos(), struct samr_QueryDisplayInfo2);
3806 if (r == NULL) {
3807 return false;
3808 }
3809
3810 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
3811 talloc_free(r);
3812 return false;
3813 }
3814
3815 pull = ndr_pull_init_blob(&blob, r, NULL);
3816 if (pull == NULL) {
3817 talloc_free(r);
3818 return false;
3819 }
3820
3821 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3822 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3823 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3824 talloc_free(r);
3825 return false;
3826 }
3827
3828 if (DEBUGLEVEL >= 10) {
3829 NDR_PRINT_IN_DEBUG(samr_QueryDisplayInfo2, r);
3830 }
3831
3832 ZERO_STRUCT(r->out);
3833 r->out.total_size = talloc_zero(r, uint32_t);
3834 if (r->out.total_size == NULL) {
3835 talloc_free(r);
3836 return false;
3837 }
3838
3839 r->out.returned_size = talloc_zero(r, uint32_t);
3840 if (r->out.returned_size == NULL) {
3841 talloc_free(r);
3842 return false;
3843 }
3844
3845 r->out.info = talloc_zero(r, union samr_DispInfo);
3846 if (r->out.info == NULL) {
3847 talloc_free(r);
3848 return false;
3849 }
3850
3851 r->out.result = _samr_QueryDisplayInfo2(p, r);
3852
3853 if (p->rng_fault_state) {
3854 talloc_free(r);
3855 /* Return true here, srv_pipe_hnd.c will take care */
3856 return true;
3857 }
3858
3859 if (DEBUGLEVEL >= 10) {
3860 NDR_PRINT_OUT_DEBUG(samr_QueryDisplayInfo2, r);
3861 }
3862
3863 push = ndr_push_init_ctx(r, NULL);
3864 if (push == NULL) {
3865 talloc_free(r);
3866 return false;
3867 }
3868
3869 ndr_err = call->ndr_push(push, NDR_OUT, r);
3870 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3871 talloc_free(r);
3872 return false;
3873 }
3874
3875 blob = ndr_push_blob(push);
3876 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
3877 talloc_free(r);
3878 return false;
3879 }
3880
3881 talloc_free(r);
3882
3883 return true;
3884}
3885
3886static bool api_samr_GetDisplayEnumerationIndex2(pipes_struct *p)
3887{
3888 const struct ndr_interface_call *call;
3889 struct ndr_pull *pull;
3890 struct ndr_push *push;
3891 enum ndr_err_code ndr_err;
3892 DATA_BLOB blob;
3893 struct samr_GetDisplayEnumerationIndex2 *r;
3894
3895 call = &ndr_table_samr.calls[NDR_SAMR_GETDISPLAYENUMERATIONINDEX2];
3896
3897 r = talloc(talloc_tos(), struct samr_GetDisplayEnumerationIndex2);
3898 if (r == NULL) {
3899 return false;
3900 }
3901
3902 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
3903 talloc_free(r);
3904 return false;
3905 }
3906
3907 pull = ndr_pull_init_blob(&blob, r, NULL);
3908 if (pull == NULL) {
3909 talloc_free(r);
3910 return false;
3911 }
3912
3913 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3914 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3915 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3916 talloc_free(r);
3917 return false;
3918 }
3919
3920 if (DEBUGLEVEL >= 10) {
3921 NDR_PRINT_IN_DEBUG(samr_GetDisplayEnumerationIndex2, r);
3922 }
3923
3924 ZERO_STRUCT(r->out);
3925 r->out.idx = talloc_zero(r, uint32_t);
3926 if (r->out.idx == NULL) {
3927 talloc_free(r);
3928 return false;
3929 }
3930
3931 r->out.result = _samr_GetDisplayEnumerationIndex2(p, r);
3932
3933 if (p->rng_fault_state) {
3934 talloc_free(r);
3935 /* Return true here, srv_pipe_hnd.c will take care */
3936 return true;
3937 }
3938
3939 if (DEBUGLEVEL >= 10) {
3940 NDR_PRINT_OUT_DEBUG(samr_GetDisplayEnumerationIndex2, r);
3941 }
3942
3943 push = ndr_push_init_ctx(r, NULL);
3944 if (push == NULL) {
3945 talloc_free(r);
3946 return false;
3947 }
3948
3949 ndr_err = call->ndr_push(push, NDR_OUT, r);
3950 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3951 talloc_free(r);
3952 return false;
3953 }
3954
3955 blob = ndr_push_blob(push);
3956 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
3957 talloc_free(r);
3958 return false;
3959 }
3960
3961 talloc_free(r);
3962
3963 return true;
3964}
3965
3966static bool api_samr_CreateUser2(pipes_struct *p)
3967{
3968 const struct ndr_interface_call *call;
3969 struct ndr_pull *pull;
3970 struct ndr_push *push;
3971 enum ndr_err_code ndr_err;
3972 DATA_BLOB blob;
3973 struct samr_CreateUser2 *r;
3974
3975 call = &ndr_table_samr.calls[NDR_SAMR_CREATEUSER2];
3976
3977 r = talloc(talloc_tos(), struct samr_CreateUser2);
3978 if (r == NULL) {
3979 return false;
3980 }
3981
3982 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
3983 talloc_free(r);
3984 return false;
3985 }
3986
3987 pull = ndr_pull_init_blob(&blob, r, NULL);
3988 if (pull == NULL) {
3989 talloc_free(r);
3990 return false;
3991 }
3992
3993 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3994 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3995 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3996 talloc_free(r);
3997 return false;
3998 }
3999
4000 if (DEBUGLEVEL >= 10) {
4001 NDR_PRINT_IN_DEBUG(samr_CreateUser2, r);
4002 }
4003
4004 ZERO_STRUCT(r->out);
4005 r->out.user_handle = talloc_zero(r, struct policy_handle);
4006 if (r->out.user_handle == NULL) {
4007 talloc_free(r);
4008 return false;
4009 }
4010
4011 r->out.access_granted = talloc_zero(r, uint32_t);
4012 if (r->out.access_granted == NULL) {
4013 talloc_free(r);
4014 return false;
4015 }
4016
4017 r->out.rid = talloc_zero(r, uint32_t);
4018 if (r->out.rid == NULL) {
4019 talloc_free(r);
4020 return false;
4021 }
4022
4023 r->out.result = _samr_CreateUser2(p, r);
4024
4025 if (p->rng_fault_state) {
4026 talloc_free(r);
4027 /* Return true here, srv_pipe_hnd.c will take care */
4028 return true;
4029 }
4030
4031 if (DEBUGLEVEL >= 10) {
4032 NDR_PRINT_OUT_DEBUG(samr_CreateUser2, r);
4033 }
4034
4035 push = ndr_push_init_ctx(r, NULL);
4036 if (push == NULL) {
4037 talloc_free(r);
4038 return false;
4039 }
4040
4041 ndr_err = call->ndr_push(push, NDR_OUT, r);
4042 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4043 talloc_free(r);
4044 return false;
4045 }
4046
4047 blob = ndr_push_blob(push);
4048 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
4049 talloc_free(r);
4050 return false;
4051 }
4052
4053 talloc_free(r);
4054
4055 return true;
4056}
4057
4058static bool api_samr_QueryDisplayInfo3(pipes_struct *p)
4059{
4060 const struct ndr_interface_call *call;
4061 struct ndr_pull *pull;
4062 struct ndr_push *push;
4063 enum ndr_err_code ndr_err;
4064 DATA_BLOB blob;
4065 struct samr_QueryDisplayInfo3 *r;
4066
4067 call = &ndr_table_samr.calls[NDR_SAMR_QUERYDISPLAYINFO3];
4068
4069 r = talloc(talloc_tos(), struct samr_QueryDisplayInfo3);
4070 if (r == NULL) {
4071 return false;
4072 }
4073
4074 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
4075 talloc_free(r);
4076 return false;
4077 }
4078
4079 pull = ndr_pull_init_blob(&blob, r, NULL);
4080 if (pull == NULL) {
4081 talloc_free(r);
4082 return false;
4083 }
4084
4085 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
4086 ndr_err = call->ndr_pull(pull, NDR_IN, r);
4087 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4088 talloc_free(r);
4089 return false;
4090 }
4091
4092 if (DEBUGLEVEL >= 10) {
4093 NDR_PRINT_IN_DEBUG(samr_QueryDisplayInfo3, r);
4094 }
4095
4096 ZERO_STRUCT(r->out);
4097 r->out.total_size = talloc_zero(r, uint32_t);
4098 if (r->out.total_size == NULL) {
4099 talloc_free(r);
4100 return false;
4101 }
4102
4103 r->out.returned_size = talloc_zero(r, uint32_t);
4104 if (r->out.returned_size == NULL) {
4105 talloc_free(r);
4106 return false;
4107 }
4108
4109 r->out.info = talloc_zero(r, union samr_DispInfo);
4110 if (r->out.info == NULL) {
4111 talloc_free(r);
4112 return false;
4113 }
4114
4115 r->out.result = _samr_QueryDisplayInfo3(p, r);
4116
4117 if (p->rng_fault_state) {
4118 talloc_free(r);
4119 /* Return true here, srv_pipe_hnd.c will take care */
4120 return true;
4121 }
4122
4123 if (DEBUGLEVEL >= 10) {
4124 NDR_PRINT_OUT_DEBUG(samr_QueryDisplayInfo3, r);
4125 }
4126
4127 push = ndr_push_init_ctx(r, NULL);
4128 if (push == NULL) {
4129 talloc_free(r);
4130 return false;
4131 }
4132
4133 ndr_err = call->ndr_push(push, NDR_OUT, r);
4134 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4135 talloc_free(r);
4136 return false;
4137 }
4138
4139 blob = ndr_push_blob(push);
4140 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
4141 talloc_free(r);
4142 return false;
4143 }
4144
4145 talloc_free(r);
4146
4147 return true;
4148}
4149
4150static bool api_samr_AddMultipleMembersToAlias(pipes_struct *p)
4151{
4152 const struct ndr_interface_call *call;
4153 struct ndr_pull *pull;
4154 struct ndr_push *push;
4155 enum ndr_err_code ndr_err;
4156 DATA_BLOB blob;
4157 struct samr_AddMultipleMembersToAlias *r;
4158
4159 call = &ndr_table_samr.calls[NDR_SAMR_ADDMULTIPLEMEMBERSTOALIAS];
4160
4161 r = talloc(talloc_tos(), struct samr_AddMultipleMembersToAlias);
4162 if (r == NULL) {
4163 return false;
4164 }
4165
4166 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
4167 talloc_free(r);
4168 return false;
4169 }
4170
4171 pull = ndr_pull_init_blob(&blob, r, NULL);
4172 if (pull == NULL) {
4173 talloc_free(r);
4174 return false;
4175 }
4176
4177 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
4178 ndr_err = call->ndr_pull(pull, NDR_IN, r);
4179 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4180 talloc_free(r);
4181 return false;
4182 }
4183
4184 if (DEBUGLEVEL >= 10) {
4185 NDR_PRINT_IN_DEBUG(samr_AddMultipleMembersToAlias, r);
4186 }
4187
4188 r->out.result = _samr_AddMultipleMembersToAlias(p, r);
4189
4190 if (p->rng_fault_state) {
4191 talloc_free(r);
4192 /* Return true here, srv_pipe_hnd.c will take care */
4193 return true;
4194 }
4195
4196 if (DEBUGLEVEL >= 10) {
4197 NDR_PRINT_OUT_DEBUG(samr_AddMultipleMembersToAlias, r);
4198 }
4199
4200 push = ndr_push_init_ctx(r, NULL);
4201 if (push == NULL) {
4202 talloc_free(r);
4203 return false;
4204 }
4205
4206 ndr_err = call->ndr_push(push, NDR_OUT, r);
4207 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4208 talloc_free(r);
4209 return false;
4210 }
4211
4212 blob = ndr_push_blob(push);
4213 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
4214 talloc_free(r);
4215 return false;
4216 }
4217
4218 talloc_free(r);
4219
4220 return true;
4221}
4222
4223static bool api_samr_RemoveMultipleMembersFromAlias(pipes_struct *p)
4224{
4225 const struct ndr_interface_call *call;
4226 struct ndr_pull *pull;
4227 struct ndr_push *push;
4228 enum ndr_err_code ndr_err;
4229 DATA_BLOB blob;
4230 struct samr_RemoveMultipleMembersFromAlias *r;
4231
4232 call = &ndr_table_samr.calls[NDR_SAMR_REMOVEMULTIPLEMEMBERSFROMALIAS];
4233
4234 r = talloc(talloc_tos(), struct samr_RemoveMultipleMembersFromAlias);
4235 if (r == NULL) {
4236 return false;
4237 }
4238
4239 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
4240 talloc_free(r);
4241 return false;
4242 }
4243
4244 pull = ndr_pull_init_blob(&blob, r, NULL);
4245 if (pull == NULL) {
4246 talloc_free(r);
4247 return false;
4248 }
4249
4250 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
4251 ndr_err = call->ndr_pull(pull, NDR_IN, r);
4252 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4253 talloc_free(r);
4254 return false;
4255 }
4256
4257 if (DEBUGLEVEL >= 10) {
4258 NDR_PRINT_IN_DEBUG(samr_RemoveMultipleMembersFromAlias, r);
4259 }
4260
4261 r->out.result = _samr_RemoveMultipleMembersFromAlias(p, r);
4262
4263 if (p->rng_fault_state) {
4264 talloc_free(r);
4265 /* Return true here, srv_pipe_hnd.c will take care */
4266 return true;
4267 }
4268
4269 if (DEBUGLEVEL >= 10) {
4270 NDR_PRINT_OUT_DEBUG(samr_RemoveMultipleMembersFromAlias, r);
4271 }
4272
4273 push = ndr_push_init_ctx(r, NULL);
4274 if (push == NULL) {
4275 talloc_free(r);
4276 return false;
4277 }
4278
4279 ndr_err = call->ndr_push(push, NDR_OUT, r);
4280 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4281 talloc_free(r);
4282 return false;
4283 }
4284
4285 blob = ndr_push_blob(push);
4286 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
4287 talloc_free(r);
4288 return false;
4289 }
4290
4291 talloc_free(r);
4292
4293 return true;
4294}
4295
4296static bool api_samr_OemChangePasswordUser2(pipes_struct *p)
4297{
4298 const struct ndr_interface_call *call;
4299 struct ndr_pull *pull;
4300 struct ndr_push *push;
4301 enum ndr_err_code ndr_err;
4302 DATA_BLOB blob;
4303 struct samr_OemChangePasswordUser2 *r;
4304
4305 call = &ndr_table_samr.calls[NDR_SAMR_OEMCHANGEPASSWORDUSER2];
4306
4307 r = talloc(talloc_tos(), struct samr_OemChangePasswordUser2);
4308 if (r == NULL) {
4309 return false;
4310 }
4311
4312 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
4313 talloc_free(r);
4314 return false;
4315 }
4316
4317 pull = ndr_pull_init_blob(&blob, r, NULL);
4318 if (pull == NULL) {
4319 talloc_free(r);
4320 return false;
4321 }
4322
4323 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
4324 ndr_err = call->ndr_pull(pull, NDR_IN, r);
4325 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4326 talloc_free(r);
4327 return false;
4328 }
4329
4330 if (DEBUGLEVEL >= 10) {
4331 NDR_PRINT_IN_DEBUG(samr_OemChangePasswordUser2, r);
4332 }
4333
4334 r->out.result = _samr_OemChangePasswordUser2(p, r);
4335
4336 if (p->rng_fault_state) {
4337 talloc_free(r);
4338 /* Return true here, srv_pipe_hnd.c will take care */
4339 return true;
4340 }
4341
4342 if (DEBUGLEVEL >= 10) {
4343 NDR_PRINT_OUT_DEBUG(samr_OemChangePasswordUser2, r);
4344 }
4345
4346 push = ndr_push_init_ctx(r, NULL);
4347 if (push == NULL) {
4348 talloc_free(r);
4349 return false;
4350 }
4351
4352 ndr_err = call->ndr_push(push, NDR_OUT, r);
4353 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4354 talloc_free(r);
4355 return false;
4356 }
4357
4358 blob = ndr_push_blob(push);
4359 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
4360 talloc_free(r);
4361 return false;
4362 }
4363
4364 talloc_free(r);
4365
4366 return true;
4367}
4368
4369static bool api_samr_ChangePasswordUser2(pipes_struct *p)
4370{
4371 const struct ndr_interface_call *call;
4372 struct ndr_pull *pull;
4373 struct ndr_push *push;
4374 enum ndr_err_code ndr_err;
4375 DATA_BLOB blob;
4376 struct samr_ChangePasswordUser2 *r;
4377
4378 call = &ndr_table_samr.calls[NDR_SAMR_CHANGEPASSWORDUSER2];
4379
4380 r = talloc(talloc_tos(), struct samr_ChangePasswordUser2);
4381 if (r == NULL) {
4382 return false;
4383 }
4384
4385 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
4386 talloc_free(r);
4387 return false;
4388 }
4389
4390 pull = ndr_pull_init_blob(&blob, r, NULL);
4391 if (pull == NULL) {
4392 talloc_free(r);
4393 return false;
4394 }
4395
4396 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
4397 ndr_err = call->ndr_pull(pull, NDR_IN, r);
4398 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4399 talloc_free(r);
4400 return false;
4401 }
4402
4403 if (DEBUGLEVEL >= 10) {
4404 NDR_PRINT_IN_DEBUG(samr_ChangePasswordUser2, r);
4405 }
4406
4407 r->out.result = _samr_ChangePasswordUser2(p, r);
4408
4409 if (p->rng_fault_state) {
4410 talloc_free(r);
4411 /* Return true here, srv_pipe_hnd.c will take care */
4412 return true;
4413 }
4414
4415 if (DEBUGLEVEL >= 10) {
4416 NDR_PRINT_OUT_DEBUG(samr_ChangePasswordUser2, r);
4417 }
4418
4419 push = ndr_push_init_ctx(r, NULL);
4420 if (push == NULL) {
4421 talloc_free(r);
4422 return false;
4423 }
4424
4425 ndr_err = call->ndr_push(push, NDR_OUT, r);
4426 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4427 talloc_free(r);
4428 return false;
4429 }
4430
4431 blob = ndr_push_blob(push);
4432 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
4433 talloc_free(r);
4434 return false;
4435 }
4436
4437 talloc_free(r);
4438
4439 return true;
4440}
4441
4442static bool api_samr_GetDomPwInfo(pipes_struct *p)
4443{
4444 const struct ndr_interface_call *call;
4445 struct ndr_pull *pull;
4446 struct ndr_push *push;
4447 enum ndr_err_code ndr_err;
4448 DATA_BLOB blob;
4449 struct samr_GetDomPwInfo *r;
4450
4451 call = &ndr_table_samr.calls[NDR_SAMR_GETDOMPWINFO];
4452
4453 r = talloc(talloc_tos(), struct samr_GetDomPwInfo);
4454 if (r == NULL) {
4455 return false;
4456 }
4457
4458 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
4459 talloc_free(r);
4460 return false;
4461 }
4462
4463 pull = ndr_pull_init_blob(&blob, r, NULL);
4464 if (pull == NULL) {
4465 talloc_free(r);
4466 return false;
4467 }
4468
4469 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
4470 ndr_err = call->ndr_pull(pull, NDR_IN, r);
4471 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4472 talloc_free(r);
4473 return false;
4474 }
4475
4476 if (DEBUGLEVEL >= 10) {
4477 NDR_PRINT_IN_DEBUG(samr_GetDomPwInfo, r);
4478 }
4479
4480 ZERO_STRUCT(r->out);
4481 r->out.info = talloc_zero(r, struct samr_PwInfo);
4482 if (r->out.info == NULL) {
4483 talloc_free(r);
4484 return false;
4485 }
4486
4487 r->out.result = _samr_GetDomPwInfo(p, r);
4488
4489 if (p->rng_fault_state) {
4490 talloc_free(r);
4491 /* Return true here, srv_pipe_hnd.c will take care */
4492 return true;
4493 }
4494
4495 if (DEBUGLEVEL >= 10) {
4496 NDR_PRINT_OUT_DEBUG(samr_GetDomPwInfo, r);
4497 }
4498
4499 push = ndr_push_init_ctx(r, NULL);
4500 if (push == NULL) {
4501 talloc_free(r);
4502 return false;
4503 }
4504
4505 ndr_err = call->ndr_push(push, NDR_OUT, r);
4506 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4507 talloc_free(r);
4508 return false;
4509 }
4510
4511 blob = ndr_push_blob(push);
4512 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
4513 talloc_free(r);
4514 return false;
4515 }
4516
4517 talloc_free(r);
4518
4519 return true;
4520}
4521
4522static bool api_samr_Connect2(pipes_struct *p)
4523{
4524 const struct ndr_interface_call *call;
4525 struct ndr_pull *pull;
4526 struct ndr_push *push;
4527 enum ndr_err_code ndr_err;
4528 DATA_BLOB blob;
4529 struct samr_Connect2 *r;
4530
4531 call = &ndr_table_samr.calls[NDR_SAMR_CONNECT2];
4532
4533 r = talloc(talloc_tos(), struct samr_Connect2);
4534 if (r == NULL) {
4535 return false;
4536 }
4537
4538 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
4539 talloc_free(r);
4540 return false;
4541 }
4542
4543 pull = ndr_pull_init_blob(&blob, r, NULL);
4544 if (pull == NULL) {
4545 talloc_free(r);
4546 return false;
4547 }
4548
4549 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
4550 ndr_err = call->ndr_pull(pull, NDR_IN, r);
4551 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4552 talloc_free(r);
4553 return false;
4554 }
4555
4556 if (DEBUGLEVEL >= 10) {
4557 NDR_PRINT_IN_DEBUG(samr_Connect2, r);
4558 }
4559
4560 ZERO_STRUCT(r->out);
4561 r->out.connect_handle = talloc_zero(r, struct policy_handle);
4562 if (r->out.connect_handle == NULL) {
4563 talloc_free(r);
4564 return false;
4565 }
4566
4567 r->out.result = _samr_Connect2(p, r);
4568
4569 if (p->rng_fault_state) {
4570 talloc_free(r);
4571 /* Return true here, srv_pipe_hnd.c will take care */
4572 return true;
4573 }
4574
4575 if (DEBUGLEVEL >= 10) {
4576 NDR_PRINT_OUT_DEBUG(samr_Connect2, r);
4577 }
4578
4579 push = ndr_push_init_ctx(r, NULL);
4580 if (push == NULL) {
4581 talloc_free(r);
4582 return false;
4583 }
4584
4585 ndr_err = call->ndr_push(push, NDR_OUT, r);
4586 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4587 talloc_free(r);
4588 return false;
4589 }
4590
4591 blob = ndr_push_blob(push);
4592 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
4593 talloc_free(r);
4594 return false;
4595 }
4596
4597 talloc_free(r);
4598
4599 return true;
4600}
4601
4602static bool api_samr_SetUserInfo2(pipes_struct *p)
4603{
4604 const struct ndr_interface_call *call;
4605 struct ndr_pull *pull;
4606 struct ndr_push *push;
4607 enum ndr_err_code ndr_err;
4608 DATA_BLOB blob;
4609 struct samr_SetUserInfo2 *r;
4610
4611 call = &ndr_table_samr.calls[NDR_SAMR_SETUSERINFO2];
4612
4613 r = talloc(talloc_tos(), struct samr_SetUserInfo2);
4614 if (r == NULL) {
4615 return false;
4616 }
4617
4618 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
4619 talloc_free(r);
4620 return false;
4621 }
4622
4623 pull = ndr_pull_init_blob(&blob, r, NULL);
4624 if (pull == NULL) {
4625 talloc_free(r);
4626 return false;
4627 }
4628
4629 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
4630 ndr_err = call->ndr_pull(pull, NDR_IN, r);
4631 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4632 talloc_free(r);
4633 return false;
4634 }
4635
4636 if (DEBUGLEVEL >= 10) {
4637 NDR_PRINT_IN_DEBUG(samr_SetUserInfo2, r);
4638 }
4639
4640 r->out.result = _samr_SetUserInfo2(p, r);
4641
4642 if (p->rng_fault_state) {
4643 talloc_free(r);
4644 /* Return true here, srv_pipe_hnd.c will take care */
4645 return true;
4646 }
4647
4648 if (DEBUGLEVEL >= 10) {
4649 NDR_PRINT_OUT_DEBUG(samr_SetUserInfo2, r);
4650 }
4651
4652 push = ndr_push_init_ctx(r, NULL);
4653 if (push == NULL) {
4654 talloc_free(r);
4655 return false;
4656 }
4657
4658 ndr_err = call->ndr_push(push, NDR_OUT, r);
4659 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4660 talloc_free(r);
4661 return false;
4662 }
4663
4664 blob = ndr_push_blob(push);
4665 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
4666 talloc_free(r);
4667 return false;
4668 }
4669
4670 talloc_free(r);
4671
4672 return true;
4673}
4674
4675static bool api_samr_SetBootKeyInformation(pipes_struct *p)
4676{
4677 const struct ndr_interface_call *call;
4678 struct ndr_pull *pull;
4679 struct ndr_push *push;
4680 enum ndr_err_code ndr_err;
4681 DATA_BLOB blob;
4682 struct samr_SetBootKeyInformation *r;
4683
4684 call = &ndr_table_samr.calls[NDR_SAMR_SETBOOTKEYINFORMATION];
4685
4686 r = talloc(talloc_tos(), struct samr_SetBootKeyInformation);
4687 if (r == NULL) {
4688 return false;
4689 }
4690
4691 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
4692 talloc_free(r);
4693 return false;
4694 }
4695
4696 pull = ndr_pull_init_blob(&blob, r, NULL);
4697 if (pull == NULL) {
4698 talloc_free(r);
4699 return false;
4700 }
4701
4702 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
4703 ndr_err = call->ndr_pull(pull, NDR_IN, r);
4704 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4705 talloc_free(r);
4706 return false;
4707 }
4708
4709 if (DEBUGLEVEL >= 10) {
4710 NDR_PRINT_IN_DEBUG(samr_SetBootKeyInformation, r);
4711 }
4712
4713 r->out.result = _samr_SetBootKeyInformation(p, r);
4714
4715 if (p->rng_fault_state) {
4716 talloc_free(r);
4717 /* Return true here, srv_pipe_hnd.c will take care */
4718 return true;
4719 }
4720
4721 if (DEBUGLEVEL >= 10) {
4722 NDR_PRINT_OUT_DEBUG(samr_SetBootKeyInformation, r);
4723 }
4724
4725 push = ndr_push_init_ctx(r, NULL);
4726 if (push == NULL) {
4727 talloc_free(r);
4728 return false;
4729 }
4730
4731 ndr_err = call->ndr_push(push, NDR_OUT, r);
4732 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4733 talloc_free(r);
4734 return false;
4735 }
4736
4737 blob = ndr_push_blob(push);
4738 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
4739 talloc_free(r);
4740 return false;
4741 }
4742
4743 talloc_free(r);
4744
4745 return true;
4746}
4747
4748static bool api_samr_GetBootKeyInformation(pipes_struct *p)
4749{
4750 const struct ndr_interface_call *call;
4751 struct ndr_pull *pull;
4752 struct ndr_push *push;
4753 enum ndr_err_code ndr_err;
4754 DATA_BLOB blob;
4755 struct samr_GetBootKeyInformation *r;
4756
4757 call = &ndr_table_samr.calls[NDR_SAMR_GETBOOTKEYINFORMATION];
4758
4759 r = talloc(talloc_tos(), struct samr_GetBootKeyInformation);
4760 if (r == NULL) {
4761 return false;
4762 }
4763
4764 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
4765 talloc_free(r);
4766 return false;
4767 }
4768
4769 pull = ndr_pull_init_blob(&blob, r, NULL);
4770 if (pull == NULL) {
4771 talloc_free(r);
4772 return false;
4773 }
4774
4775 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
4776 ndr_err = call->ndr_pull(pull, NDR_IN, r);
4777 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4778 talloc_free(r);
4779 return false;
4780 }
4781
4782 if (DEBUGLEVEL >= 10) {
4783 NDR_PRINT_IN_DEBUG(samr_GetBootKeyInformation, r);
4784 }
4785
4786 ZERO_STRUCT(r->out);
4787 r->out.unknown = talloc_zero(r, uint32_t);
4788 if (r->out.unknown == NULL) {
4789 talloc_free(r);
4790 return false;
4791 }
4792
4793 r->out.result = _samr_GetBootKeyInformation(p, r);
4794
4795 if (p->rng_fault_state) {
4796 talloc_free(r);
4797 /* Return true here, srv_pipe_hnd.c will take care */
4798 return true;
4799 }
4800
4801 if (DEBUGLEVEL >= 10) {
4802 NDR_PRINT_OUT_DEBUG(samr_GetBootKeyInformation, r);
4803 }
4804
4805 push = ndr_push_init_ctx(r, NULL);
4806 if (push == NULL) {
4807 talloc_free(r);
4808 return false;
4809 }
4810
4811 ndr_err = call->ndr_push(push, NDR_OUT, r);
4812 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4813 talloc_free(r);
4814 return false;
4815 }
4816
4817 blob = ndr_push_blob(push);
4818 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
4819 talloc_free(r);
4820 return false;
4821 }
4822
4823 talloc_free(r);
4824
4825 return true;
4826}
4827
4828static bool api_samr_Connect3(pipes_struct *p)
4829{
4830 const struct ndr_interface_call *call;
4831 struct ndr_pull *pull;
4832 struct ndr_push *push;
4833 enum ndr_err_code ndr_err;
4834 DATA_BLOB blob;
4835 struct samr_Connect3 *r;
4836
4837 call = &ndr_table_samr.calls[NDR_SAMR_CONNECT3];
4838
4839 r = talloc(talloc_tos(), struct samr_Connect3);
4840 if (r == NULL) {
4841 return false;
4842 }
4843
4844 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
4845 talloc_free(r);
4846 return false;
4847 }
4848
4849 pull = ndr_pull_init_blob(&blob, r, NULL);
4850 if (pull == NULL) {
4851 talloc_free(r);
4852 return false;
4853 }
4854
4855 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
4856 ndr_err = call->ndr_pull(pull, NDR_IN, r);
4857 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4858 talloc_free(r);
4859 return false;
4860 }
4861
4862 if (DEBUGLEVEL >= 10) {
4863 NDR_PRINT_IN_DEBUG(samr_Connect3, r);
4864 }
4865
4866 ZERO_STRUCT(r->out);
4867 r->out.connect_handle = talloc_zero(r, struct policy_handle);
4868 if (r->out.connect_handle == NULL) {
4869 talloc_free(r);
4870 return false;
4871 }
4872
4873 r->out.result = _samr_Connect3(p, r);
4874
4875 if (p->rng_fault_state) {
4876 talloc_free(r);
4877 /* Return true here, srv_pipe_hnd.c will take care */
4878 return true;
4879 }
4880
4881 if (DEBUGLEVEL >= 10) {
4882 NDR_PRINT_OUT_DEBUG(samr_Connect3, r);
4883 }
4884
4885 push = ndr_push_init_ctx(r, NULL);
4886 if (push == NULL) {
4887 talloc_free(r);
4888 return false;
4889 }
4890
4891 ndr_err = call->ndr_push(push, NDR_OUT, r);
4892 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4893 talloc_free(r);
4894 return false;
4895 }
4896
4897 blob = ndr_push_blob(push);
4898 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
4899 talloc_free(r);
4900 return false;
4901 }
4902
4903 talloc_free(r);
4904
4905 return true;
4906}
4907
4908static bool api_samr_Connect4(pipes_struct *p)
4909{
4910 const struct ndr_interface_call *call;
4911 struct ndr_pull *pull;
4912 struct ndr_push *push;
4913 enum ndr_err_code ndr_err;
4914 DATA_BLOB blob;
4915 struct samr_Connect4 *r;
4916
4917 call = &ndr_table_samr.calls[NDR_SAMR_CONNECT4];
4918
4919 r = talloc(talloc_tos(), struct samr_Connect4);
4920 if (r == NULL) {
4921 return false;
4922 }
4923
4924 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
4925 talloc_free(r);
4926 return false;
4927 }
4928
4929 pull = ndr_pull_init_blob(&blob, r, NULL);
4930 if (pull == NULL) {
4931 talloc_free(r);
4932 return false;
4933 }
4934
4935 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
4936 ndr_err = call->ndr_pull(pull, NDR_IN, r);
4937 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4938 talloc_free(r);
4939 return false;
4940 }
4941
4942 if (DEBUGLEVEL >= 10) {
4943 NDR_PRINT_IN_DEBUG(samr_Connect4, r);
4944 }
4945
4946 ZERO_STRUCT(r->out);
4947 r->out.connect_handle = talloc_zero(r, struct policy_handle);
4948 if (r->out.connect_handle == NULL) {
4949 talloc_free(r);
4950 return false;
4951 }
4952
4953 r->out.result = _samr_Connect4(p, r);
4954
4955 if (p->rng_fault_state) {
4956 talloc_free(r);
4957 /* Return true here, srv_pipe_hnd.c will take care */
4958 return true;
4959 }
4960
4961 if (DEBUGLEVEL >= 10) {
4962 NDR_PRINT_OUT_DEBUG(samr_Connect4, r);
4963 }
4964
4965 push = ndr_push_init_ctx(r, NULL);
4966 if (push == NULL) {
4967 talloc_free(r);
4968 return false;
4969 }
4970
4971 ndr_err = call->ndr_push(push, NDR_OUT, r);
4972 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
4973 talloc_free(r);
4974 return false;
4975 }
4976
4977 blob = ndr_push_blob(push);
4978 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
4979 talloc_free(r);
4980 return false;
4981 }
4982
4983 talloc_free(r);
4984
4985 return true;
4986}
4987
4988static bool api_samr_ChangePasswordUser3(pipes_struct *p)
4989{
4990 const struct ndr_interface_call *call;
4991 struct ndr_pull *pull;
4992 struct ndr_push *push;
4993 enum ndr_err_code ndr_err;
4994 DATA_BLOB blob;
4995 struct samr_ChangePasswordUser3 *r;
4996
4997 call = &ndr_table_samr.calls[NDR_SAMR_CHANGEPASSWORDUSER3];
4998
4999 r = talloc(talloc_tos(), struct samr_ChangePasswordUser3);
5000 if (r == NULL) {
5001 return false;
5002 }
5003
5004 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
5005 talloc_free(r);
5006 return false;
5007 }
5008
5009 pull = ndr_pull_init_blob(&blob, r, NULL);
5010 if (pull == NULL) {
5011 talloc_free(r);
5012 return false;
5013 }
5014
5015 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
5016 ndr_err = call->ndr_pull(pull, NDR_IN, r);
5017 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
5018 talloc_free(r);
5019 return false;
5020 }
5021
5022 if (DEBUGLEVEL >= 10) {
5023 NDR_PRINT_IN_DEBUG(samr_ChangePasswordUser3, r);
5024 }
5025
5026 ZERO_STRUCT(r->out);
5027 r->out.dominfo = talloc_zero(r, struct samr_DomInfo1 *);
5028 if (r->out.dominfo == NULL) {
5029 talloc_free(r);
5030 return false;
5031 }
5032
5033 r->out.reject = talloc_zero(r, struct samr_ChangeReject *);
5034 if (r->out.reject == NULL) {
5035 talloc_free(r);
5036 return false;
5037 }
5038
5039 r->out.result = _samr_ChangePasswordUser3(p, r);
5040
5041 if (p->rng_fault_state) {
5042 talloc_free(r);
5043 /* Return true here, srv_pipe_hnd.c will take care */
5044 return true;
5045 }
5046
5047 if (DEBUGLEVEL >= 10) {
5048 NDR_PRINT_OUT_DEBUG(samr_ChangePasswordUser3, r);
5049 }
5050
5051 push = ndr_push_init_ctx(r, NULL);
5052 if (push == NULL) {
5053 talloc_free(r);
5054 return false;
5055 }
5056
5057 ndr_err = call->ndr_push(push, NDR_OUT, r);
5058 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
5059 talloc_free(r);
5060 return false;
5061 }
5062
5063 blob = ndr_push_blob(push);
5064 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
5065 talloc_free(r);
5066 return false;
5067 }
5068
5069 talloc_free(r);
5070
5071 return true;
5072}
5073
5074static bool api_samr_Connect5(pipes_struct *p)
5075{
5076 const struct ndr_interface_call *call;
5077 struct ndr_pull *pull;
5078 struct ndr_push *push;
5079 enum ndr_err_code ndr_err;
5080 DATA_BLOB blob;
5081 struct samr_Connect5 *r;
5082
5083 call = &ndr_table_samr.calls[NDR_SAMR_CONNECT5];
5084
5085 r = talloc(talloc_tos(), struct samr_Connect5);
5086 if (r == NULL) {
5087 return false;
5088 }
5089
5090 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
5091 talloc_free(r);
5092 return false;
5093 }
5094
5095 pull = ndr_pull_init_blob(&blob, r, NULL);
5096 if (pull == NULL) {
5097 talloc_free(r);
5098 return false;
5099 }
5100
5101 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
5102 ndr_err = call->ndr_pull(pull, NDR_IN, r);
5103 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
5104 talloc_free(r);
5105 return false;
5106 }
5107
5108 if (DEBUGLEVEL >= 10) {
5109 NDR_PRINT_IN_DEBUG(samr_Connect5, r);
5110 }
5111
5112 ZERO_STRUCT(r->out);
5113 r->out.level_out = talloc_zero(r, uint32_t);
5114 if (r->out.level_out == NULL) {
5115 talloc_free(r);
5116 return false;
5117 }
5118
5119 r->out.info_out = talloc_zero(r, union samr_ConnectInfo);
5120 if (r->out.info_out == NULL) {
5121 talloc_free(r);
5122 return false;
5123 }
5124
5125 r->out.connect_handle = talloc_zero(r, struct policy_handle);
5126 if (r->out.connect_handle == NULL) {
5127 talloc_free(r);
5128 return false;
5129 }
5130
5131 r->out.result = _samr_Connect5(p, r);
5132
5133 if (p->rng_fault_state) {
5134 talloc_free(r);
5135 /* Return true here, srv_pipe_hnd.c will take care */
5136 return true;
5137 }
5138
5139 if (DEBUGLEVEL >= 10) {
5140 NDR_PRINT_OUT_DEBUG(samr_Connect5, r);
5141 }
5142
5143 push = ndr_push_init_ctx(r, NULL);
5144 if (push == NULL) {
5145 talloc_free(r);
5146 return false;
5147 }
5148
5149 ndr_err = call->ndr_push(push, NDR_OUT, r);
5150 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
5151 talloc_free(r);
5152 return false;
5153 }
5154
5155 blob = ndr_push_blob(push);
5156 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
5157 talloc_free(r);
5158 return false;
5159 }
5160
5161 talloc_free(r);
5162
5163 return true;
5164}
5165
5166static bool api_samr_RidToSid(pipes_struct *p)
5167{
5168 const struct ndr_interface_call *call;
5169 struct ndr_pull *pull;
5170 struct ndr_push *push;
5171 enum ndr_err_code ndr_err;
5172 DATA_BLOB blob;
5173 struct samr_RidToSid *r;
5174
5175 call = &ndr_table_samr.calls[NDR_SAMR_RIDTOSID];
5176
5177 r = talloc(talloc_tos(), struct samr_RidToSid);
5178 if (r == NULL) {
5179 return false;
5180 }
5181
5182 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
5183 talloc_free(r);
5184 return false;
5185 }
5186
5187 pull = ndr_pull_init_blob(&blob, r, NULL);
5188 if (pull == NULL) {
5189 talloc_free(r);
5190 return false;
5191 }
5192
5193 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
5194 ndr_err = call->ndr_pull(pull, NDR_IN, r);
5195 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
5196 talloc_free(r);
5197 return false;
5198 }
5199
5200 if (DEBUGLEVEL >= 10) {
5201 NDR_PRINT_IN_DEBUG(samr_RidToSid, r);
5202 }
5203
5204 ZERO_STRUCT(r->out);
5205 r->out.sid = talloc_zero(r, struct dom_sid2 *);
5206 if (r->out.sid == NULL) {
5207 talloc_free(r);
5208 return false;
5209 }
5210
5211 r->out.result = _samr_RidToSid(p, r);
5212
5213 if (p->rng_fault_state) {
5214 talloc_free(r);
5215 /* Return true here, srv_pipe_hnd.c will take care */
5216 return true;
5217 }
5218
5219 if (DEBUGLEVEL >= 10) {
5220 NDR_PRINT_OUT_DEBUG(samr_RidToSid, r);
5221 }
5222
5223 push = ndr_push_init_ctx(r, NULL);
5224 if (push == NULL) {
5225 talloc_free(r);
5226 return false;
5227 }
5228
5229 ndr_err = call->ndr_push(push, NDR_OUT, r);
5230 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
5231 talloc_free(r);
5232 return false;
5233 }
5234
5235 blob = ndr_push_blob(push);
5236 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
5237 talloc_free(r);
5238 return false;
5239 }
5240
5241 talloc_free(r);
5242
5243 return true;
5244}
5245
5246static bool api_samr_SetDsrmPassword(pipes_struct *p)
5247{
5248 const struct ndr_interface_call *call;
5249 struct ndr_pull *pull;
5250 struct ndr_push *push;
5251 enum ndr_err_code ndr_err;
5252 DATA_BLOB blob;
5253 struct samr_SetDsrmPassword *r;
5254
5255 call = &ndr_table_samr.calls[NDR_SAMR_SETDSRMPASSWORD];
5256
5257 r = talloc(talloc_tos(), struct samr_SetDsrmPassword);
5258 if (r == NULL) {
5259 return false;
5260 }
5261
5262 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
5263 talloc_free(r);
5264 return false;
5265 }
5266
5267 pull = ndr_pull_init_blob(&blob, r, NULL);
5268 if (pull == NULL) {
5269 talloc_free(r);
5270 return false;
5271 }
5272
5273 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
5274 ndr_err = call->ndr_pull(pull, NDR_IN, r);
5275 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
5276 talloc_free(r);
5277 return false;
5278 }
5279
5280 if (DEBUGLEVEL >= 10) {
5281 NDR_PRINT_IN_DEBUG(samr_SetDsrmPassword, r);
5282 }
5283
5284 r->out.result = _samr_SetDsrmPassword(p, r);
5285
5286 if (p->rng_fault_state) {
5287 talloc_free(r);
5288 /* Return true here, srv_pipe_hnd.c will take care */
5289 return true;
5290 }
5291
5292 if (DEBUGLEVEL >= 10) {
5293 NDR_PRINT_OUT_DEBUG(samr_SetDsrmPassword, r);
5294 }
5295
5296 push = ndr_push_init_ctx(r, NULL);
5297 if (push == NULL) {
5298 talloc_free(r);
5299 return false;
5300 }
5301
5302 ndr_err = call->ndr_push(push, NDR_OUT, r);
5303 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
5304 talloc_free(r);
5305 return false;
5306 }
5307
5308 blob = ndr_push_blob(push);
5309 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
5310 talloc_free(r);
5311 return false;
5312 }
5313
5314 talloc_free(r);
5315
5316 return true;
5317}
5318
5319static bool api_samr_ValidatePassword(pipes_struct *p)
5320{
5321 const struct ndr_interface_call *call;
5322 struct ndr_pull *pull;
5323 struct ndr_push *push;
5324 enum ndr_err_code ndr_err;
5325 DATA_BLOB blob;
5326 struct samr_ValidatePassword *r;
5327
5328 call = &ndr_table_samr.calls[NDR_SAMR_VALIDATEPASSWORD];
5329
5330 r = talloc(talloc_tos(), struct samr_ValidatePassword);
5331 if (r == NULL) {
5332 return false;
5333 }
5334
5335 if (!prs_data_blob(&p->in_data.data, &blob, r)) {
5336 talloc_free(r);
5337 return false;
5338 }
5339
5340 pull = ndr_pull_init_blob(&blob, r, NULL);
5341 if (pull == NULL) {
5342 talloc_free(r);
5343 return false;
5344 }
5345
5346 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
5347 ndr_err = call->ndr_pull(pull, NDR_IN, r);
5348 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
5349 talloc_free(r);
5350 return false;
5351 }
5352
5353 if (DEBUGLEVEL >= 10) {
5354 NDR_PRINT_IN_DEBUG(samr_ValidatePassword, r);
5355 }
5356
5357 ZERO_STRUCT(r->out);
5358 r->out.rep = talloc_zero(r, union samr_ValidatePasswordRep *);
5359 if (r->out.rep == NULL) {
5360 talloc_free(r);
5361 return false;
5362 }
5363
5364 r->out.result = _samr_ValidatePassword(p, r);
5365
5366 if (p->rng_fault_state) {
5367 talloc_free(r);
5368 /* Return true here, srv_pipe_hnd.c will take care */
5369 return true;
5370 }
5371
5372 if (DEBUGLEVEL >= 10) {
5373 NDR_PRINT_OUT_DEBUG(samr_ValidatePassword, r);
5374 }
5375
5376 push = ndr_push_init_ctx(r, NULL);
5377 if (push == NULL) {
5378 talloc_free(r);
5379 return false;
5380 }
5381
5382 ndr_err = call->ndr_push(push, NDR_OUT, r);
5383 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
5384 talloc_free(r);
5385 return false;
5386 }
5387
5388 blob = ndr_push_blob(push);
5389 if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
5390 talloc_free(r);
5391 return false;
5392 }
5393
5394 talloc_free(r);
5395
5396 return true;
5397}
5398
5399
5400/* Tables */
5401static struct api_struct api_samr_cmds[] =
5402{
5403 {"SAMR_CONNECT", NDR_SAMR_CONNECT, api_samr_Connect},
5404 {"SAMR_CLOSE", NDR_SAMR_CLOSE, api_samr_Close},
5405 {"SAMR_SETSECURITY", NDR_SAMR_SETSECURITY, api_samr_SetSecurity},
5406 {"SAMR_QUERYSECURITY", NDR_SAMR_QUERYSECURITY, api_samr_QuerySecurity},
5407 {"SAMR_SHUTDOWN", NDR_SAMR_SHUTDOWN, api_samr_Shutdown},
5408 {"SAMR_LOOKUPDOMAIN", NDR_SAMR_LOOKUPDOMAIN, api_samr_LookupDomain},
5409 {"SAMR_ENUMDOMAINS", NDR_SAMR_ENUMDOMAINS, api_samr_EnumDomains},
5410 {"SAMR_OPENDOMAIN", NDR_SAMR_OPENDOMAIN, api_samr_OpenDomain},
5411 {"SAMR_QUERYDOMAININFO", NDR_SAMR_QUERYDOMAININFO, api_samr_QueryDomainInfo},
5412 {"SAMR_SETDOMAININFO", NDR_SAMR_SETDOMAININFO, api_samr_SetDomainInfo},
5413 {"SAMR_CREATEDOMAINGROUP", NDR_SAMR_CREATEDOMAINGROUP, api_samr_CreateDomainGroup},
5414 {"SAMR_ENUMDOMAINGROUPS", NDR_SAMR_ENUMDOMAINGROUPS, api_samr_EnumDomainGroups},
5415 {"SAMR_CREATEUSER", NDR_SAMR_CREATEUSER, api_samr_CreateUser},
5416 {"SAMR_ENUMDOMAINUSERS", NDR_SAMR_ENUMDOMAINUSERS, api_samr_EnumDomainUsers},
5417 {"SAMR_CREATEDOMALIAS", NDR_SAMR_CREATEDOMALIAS, api_samr_CreateDomAlias},
5418 {"SAMR_ENUMDOMAINALIASES", NDR_SAMR_ENUMDOMAINALIASES, api_samr_EnumDomainAliases},
5419 {"SAMR_GETALIASMEMBERSHIP", NDR_SAMR_GETALIASMEMBERSHIP, api_samr_GetAliasMembership},
5420 {"SAMR_LOOKUPNAMES", NDR_SAMR_LOOKUPNAMES, api_samr_LookupNames},
5421 {"SAMR_LOOKUPRIDS", NDR_SAMR_LOOKUPRIDS, api_samr_LookupRids},
5422 {"SAMR_OPENGROUP", NDR_SAMR_OPENGROUP, api_samr_OpenGroup},
5423 {"SAMR_QUERYGROUPINFO", NDR_SAMR_QUERYGROUPINFO, api_samr_QueryGroupInfo},
5424 {"SAMR_SETGROUPINFO", NDR_SAMR_SETGROUPINFO, api_samr_SetGroupInfo},
5425 {"SAMR_ADDGROUPMEMBER", NDR_SAMR_ADDGROUPMEMBER, api_samr_AddGroupMember},
5426 {"SAMR_DELETEDOMAINGROUP", NDR_SAMR_DELETEDOMAINGROUP, api_samr_DeleteDomainGroup},
5427 {"SAMR_DELETEGROUPMEMBER", NDR_SAMR_DELETEGROUPMEMBER, api_samr_DeleteGroupMember},
5428 {"SAMR_QUERYGROUPMEMBER", NDR_SAMR_QUERYGROUPMEMBER, api_samr_QueryGroupMember},
5429 {"SAMR_SETMEMBERATTRIBUTESOFGROUP", NDR_SAMR_SETMEMBERATTRIBUTESOFGROUP, api_samr_SetMemberAttributesOfGroup},
5430 {"SAMR_OPENALIAS", NDR_SAMR_OPENALIAS, api_samr_OpenAlias},
5431 {"SAMR_QUERYALIASINFO", NDR_SAMR_QUERYALIASINFO, api_samr_QueryAliasInfo},
5432 {"SAMR_SETALIASINFO", NDR_SAMR_SETALIASINFO, api_samr_SetAliasInfo},
5433 {"SAMR_DELETEDOMALIAS", NDR_SAMR_DELETEDOMALIAS, api_samr_DeleteDomAlias},
5434 {"SAMR_ADDALIASMEMBER", NDR_SAMR_ADDALIASMEMBER, api_samr_AddAliasMember},
5435 {"SAMR_DELETEALIASMEMBER", NDR_SAMR_DELETEALIASMEMBER, api_samr_DeleteAliasMember},
5436 {"SAMR_GETMEMBERSINALIAS", NDR_SAMR_GETMEMBERSINALIAS, api_samr_GetMembersInAlias},
5437 {"SAMR_OPENUSER", NDR_SAMR_OPENUSER, api_samr_OpenUser},
5438 {"SAMR_DELETEUSER", NDR_SAMR_DELETEUSER, api_samr_DeleteUser},
5439 {"SAMR_QUERYUSERINFO", NDR_SAMR_QUERYUSERINFO, api_samr_QueryUserInfo},
5440 {"SAMR_SETUSERINFO", NDR_SAMR_SETUSERINFO, api_samr_SetUserInfo},
5441 {"SAMR_CHANGEPASSWORDUSER", NDR_SAMR_CHANGEPASSWORDUSER, api_samr_ChangePasswordUser},
5442 {"SAMR_GETGROUPSFORUSER", NDR_SAMR_GETGROUPSFORUSER, api_samr_GetGroupsForUser},
5443 {"SAMR_QUERYDISPLAYINFO", NDR_SAMR_QUERYDISPLAYINFO, api_samr_QueryDisplayInfo},
5444 {"SAMR_GETDISPLAYENUMERATIONINDEX", NDR_SAMR_GETDISPLAYENUMERATIONINDEX, api_samr_GetDisplayEnumerationIndex},
5445 {"SAMR_TESTPRIVATEFUNCTIONSDOMAIN", NDR_SAMR_TESTPRIVATEFUNCTIONSDOMAIN, api_samr_TestPrivateFunctionsDomain},
5446 {"SAMR_TESTPRIVATEFUNCTIONSUSER", NDR_SAMR_TESTPRIVATEFUNCTIONSUSER, api_samr_TestPrivateFunctionsUser},
5447 {"SAMR_GETUSERPWINFO", NDR_SAMR_GETUSERPWINFO, api_samr_GetUserPwInfo},
5448 {"SAMR_REMOVEMEMBERFROMFOREIGNDOMAIN", NDR_SAMR_REMOVEMEMBERFROMFOREIGNDOMAIN, api_samr_RemoveMemberFromForeignDomain},
5449 {"SAMR_QUERYDOMAININFO2", NDR_SAMR_QUERYDOMAININFO2, api_samr_QueryDomainInfo2},
5450 {"SAMR_QUERYUSERINFO2", NDR_SAMR_QUERYUSERINFO2, api_samr_QueryUserInfo2},
5451 {"SAMR_QUERYDISPLAYINFO2", NDR_SAMR_QUERYDISPLAYINFO2, api_samr_QueryDisplayInfo2},
5452 {"SAMR_GETDISPLAYENUMERATIONINDEX2", NDR_SAMR_GETDISPLAYENUMERATIONINDEX2, api_samr_GetDisplayEnumerationIndex2},
5453 {"SAMR_CREATEUSER2", NDR_SAMR_CREATEUSER2, api_samr_CreateUser2},
5454 {"SAMR_QUERYDISPLAYINFO3", NDR_SAMR_QUERYDISPLAYINFO3, api_samr_QueryDisplayInfo3},
5455 {"SAMR_ADDMULTIPLEMEMBERSTOALIAS", NDR_SAMR_ADDMULTIPLEMEMBERSTOALIAS, api_samr_AddMultipleMembersToAlias},
5456 {"SAMR_REMOVEMULTIPLEMEMBERSFROMALIAS", NDR_SAMR_REMOVEMULTIPLEMEMBERSFROMALIAS, api_samr_RemoveMultipleMembersFromAlias},
5457 {"SAMR_OEMCHANGEPASSWORDUSER2", NDR_SAMR_OEMCHANGEPASSWORDUSER2, api_samr_OemChangePasswordUser2},
5458 {"SAMR_CHANGEPASSWORDUSER2", NDR_SAMR_CHANGEPASSWORDUSER2, api_samr_ChangePasswordUser2},
5459 {"SAMR_GETDOMPWINFO", NDR_SAMR_GETDOMPWINFO, api_samr_GetDomPwInfo},
5460 {"SAMR_CONNECT2", NDR_SAMR_CONNECT2, api_samr_Connect2},
5461 {"SAMR_SETUSERINFO2", NDR_SAMR_SETUSERINFO2, api_samr_SetUserInfo2},
5462 {"SAMR_SETBOOTKEYINFORMATION", NDR_SAMR_SETBOOTKEYINFORMATION, api_samr_SetBootKeyInformation},
5463 {"SAMR_GETBOOTKEYINFORMATION", NDR_SAMR_GETBOOTKEYINFORMATION, api_samr_GetBootKeyInformation},
5464 {"SAMR_CONNECT3", NDR_SAMR_CONNECT3, api_samr_Connect3},
5465 {"SAMR_CONNECT4", NDR_SAMR_CONNECT4, api_samr_Connect4},
5466 {"SAMR_CHANGEPASSWORDUSER3", NDR_SAMR_CHANGEPASSWORDUSER3, api_samr_ChangePasswordUser3},
5467 {"SAMR_CONNECT5", NDR_SAMR_CONNECT5, api_samr_Connect5},
5468 {"SAMR_RIDTOSID", NDR_SAMR_RIDTOSID, api_samr_RidToSid},
5469 {"SAMR_SETDSRMPASSWORD", NDR_SAMR_SETDSRMPASSWORD, api_samr_SetDsrmPassword},
5470 {"SAMR_VALIDATEPASSWORD", NDR_SAMR_VALIDATEPASSWORD, api_samr_ValidatePassword},
5471};
5472
5473void samr_get_pipe_fns(struct api_struct **fns, int *n_fns)
5474{
5475 *fns = api_samr_cmds;
5476 *n_fns = sizeof(api_samr_cmds) / sizeof(struct api_struct);
5477}
5478
5479NTSTATUS rpc_samr_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const struct ndr_interface_table *table, uint32_t opnum, void *_r)
5480{
5481 if (cli->pipes_struct == NULL) {
5482 return NT_STATUS_INVALID_PARAMETER;
5483 }
5484
5485 switch (opnum)
5486 {
5487 case NDR_SAMR_CONNECT: {
5488 struct samr_Connect *r = (struct samr_Connect *)_r;
5489 ZERO_STRUCT(r->out);
5490 r->out.connect_handle = talloc_zero(mem_ctx, struct policy_handle);
5491 if (r->out.connect_handle == NULL) {
5492 return NT_STATUS_NO_MEMORY;
5493 }
5494
5495 r->out.result = _samr_Connect(cli->pipes_struct, r);
5496 return NT_STATUS_OK;
5497 }
5498
5499 case NDR_SAMR_CLOSE: {
5500 struct samr_Close *r = (struct samr_Close *)_r;
5501 ZERO_STRUCT(r->out);
5502 r->out.handle = r->in.handle;
5503 r->out.result = _samr_Close(cli->pipes_struct, r);
5504 return NT_STATUS_OK;
5505 }
5506
5507 case NDR_SAMR_SETSECURITY: {
5508 struct samr_SetSecurity *r = (struct samr_SetSecurity *)_r;
5509 r->out.result = _samr_SetSecurity(cli->pipes_struct, r);
5510 return NT_STATUS_OK;
5511 }
5512
5513 case NDR_SAMR_QUERYSECURITY: {
5514 struct samr_QuerySecurity *r = (struct samr_QuerySecurity *)_r;
5515 ZERO_STRUCT(r->out);
5516 r->out.sdbuf = talloc_zero(mem_ctx, struct sec_desc_buf *);
5517 if (r->out.sdbuf == NULL) {
5518 return NT_STATUS_NO_MEMORY;
5519 }
5520
5521 r->out.result = _samr_QuerySecurity(cli->pipes_struct, r);
5522 return NT_STATUS_OK;
5523 }
5524
5525 case NDR_SAMR_SHUTDOWN: {
5526 struct samr_Shutdown *r = (struct samr_Shutdown *)_r;
5527 r->out.result = _samr_Shutdown(cli->pipes_struct, r);
5528 return NT_STATUS_OK;
5529 }
5530
5531 case NDR_SAMR_LOOKUPDOMAIN: {
5532 struct samr_LookupDomain *r = (struct samr_LookupDomain *)_r;
5533 ZERO_STRUCT(r->out);
5534 r->out.sid = talloc_zero(mem_ctx, struct dom_sid2 *);
5535 if (r->out.sid == NULL) {
5536 return NT_STATUS_NO_MEMORY;
5537 }
5538
5539 r->out.result = _samr_LookupDomain(cli->pipes_struct, r);
5540 return NT_STATUS_OK;
5541 }
5542
5543 case NDR_SAMR_ENUMDOMAINS: {
5544 struct samr_EnumDomains *r = (struct samr_EnumDomains *)_r;
5545 ZERO_STRUCT(r->out);
5546 r->out.resume_handle = r->in.resume_handle;
5547 r->out.sam = talloc_zero(mem_ctx, struct samr_SamArray *);
5548 if (r->out.sam == NULL) {
5549 return NT_STATUS_NO_MEMORY;
5550 }
5551
5552 r->out.num_entries = talloc_zero(mem_ctx, uint32_t);
5553 if (r->out.num_entries == NULL) {
5554 return NT_STATUS_NO_MEMORY;
5555 }
5556
5557 r->out.result = _samr_EnumDomains(cli->pipes_struct, r);
5558 return NT_STATUS_OK;
5559 }
5560
5561 case NDR_SAMR_OPENDOMAIN: {
5562 struct samr_OpenDomain *r = (struct samr_OpenDomain *)_r;
5563 ZERO_STRUCT(r->out);
5564 r->out.domain_handle = talloc_zero(mem_ctx, struct policy_handle);
5565 if (r->out.domain_handle == NULL) {
5566 return NT_STATUS_NO_MEMORY;
5567 }
5568
5569 r->out.result = _samr_OpenDomain(cli->pipes_struct, r);
5570 return NT_STATUS_OK;
5571 }
5572
5573 case NDR_SAMR_QUERYDOMAININFO: {
5574 struct samr_QueryDomainInfo *r = (struct samr_QueryDomainInfo *)_r;
5575 ZERO_STRUCT(r->out);
5576 r->out.info = talloc_zero(mem_ctx, union samr_DomainInfo *);
5577 if (r->out.info == NULL) {
5578 return NT_STATUS_NO_MEMORY;
5579 }
5580
5581 r->out.result = _samr_QueryDomainInfo(cli->pipes_struct, r);
5582 return NT_STATUS_OK;
5583 }
5584
5585 case NDR_SAMR_SETDOMAININFO: {
5586 struct samr_SetDomainInfo *r = (struct samr_SetDomainInfo *)_r;
5587 r->out.result = _samr_SetDomainInfo(cli->pipes_struct, r);
5588 return NT_STATUS_OK;
5589 }
5590
5591 case NDR_SAMR_CREATEDOMAINGROUP: {
5592 struct samr_CreateDomainGroup *r = (struct samr_CreateDomainGroup *)_r;
5593 ZERO_STRUCT(r->out);
5594 r->out.group_handle = talloc_zero(mem_ctx, struct policy_handle);
5595 if (r->out.group_handle == NULL) {
5596 return NT_STATUS_NO_MEMORY;
5597 }
5598
5599 r->out.rid = talloc_zero(mem_ctx, uint32_t);
5600 if (r->out.rid == NULL) {
5601 return NT_STATUS_NO_MEMORY;
5602 }
5603
5604 r->out.result = _samr_CreateDomainGroup(cli->pipes_struct, r);
5605 return NT_STATUS_OK;
5606 }
5607
5608 case NDR_SAMR_ENUMDOMAINGROUPS: {
5609 struct samr_EnumDomainGroups *r = (struct samr_EnumDomainGroups *)_r;
5610 ZERO_STRUCT(r->out);
5611 r->out.resume_handle = r->in.resume_handle;
5612 r->out.sam = talloc_zero(mem_ctx, struct samr_SamArray *);
5613 if (r->out.sam == NULL) {
5614 return NT_STATUS_NO_MEMORY;
5615 }
5616
5617 r->out.num_entries = talloc_zero(mem_ctx, uint32_t);
5618 if (r->out.num_entries == NULL) {
5619 return NT_STATUS_NO_MEMORY;
5620 }
5621
5622 r->out.result = _samr_EnumDomainGroups(cli->pipes_struct, r);
5623 return NT_STATUS_OK;
5624 }
5625
5626 case NDR_SAMR_CREATEUSER: {
5627 struct samr_CreateUser *r = (struct samr_CreateUser *)_r;
5628 ZERO_STRUCT(r->out);
5629 r->out.user_handle = talloc_zero(mem_ctx, struct policy_handle);
5630 if (r->out.user_handle == NULL) {
5631 return NT_STATUS_NO_MEMORY;
5632 }
5633
5634 r->out.rid = talloc_zero(mem_ctx, uint32_t);
5635 if (r->out.rid == NULL) {
5636 return NT_STATUS_NO_MEMORY;
5637 }
5638
5639 r->out.result = _samr_CreateUser(cli->pipes_struct, r);
5640 return NT_STATUS_OK;
5641 }
5642
5643 case NDR_SAMR_ENUMDOMAINUSERS: {
5644 struct samr_EnumDomainUsers *r = (struct samr_EnumDomainUsers *)_r;
5645 ZERO_STRUCT(r->out);
5646 r->out.resume_handle = r->in.resume_handle;
5647 r->out.sam = talloc_zero(mem_ctx, struct samr_SamArray *);
5648 if (r->out.sam == NULL) {
5649 return NT_STATUS_NO_MEMORY;
5650 }
5651
5652 r->out.num_entries = talloc_zero(mem_ctx, uint32_t);
5653 if (r->out.num_entries == NULL) {
5654 return NT_STATUS_NO_MEMORY;
5655 }
5656
5657 r->out.result = _samr_EnumDomainUsers(cli->pipes_struct, r);
5658 return NT_STATUS_OK;
5659 }
5660
5661 case NDR_SAMR_CREATEDOMALIAS: {
5662 struct samr_CreateDomAlias *r = (struct samr_CreateDomAlias *)_r;
5663 ZERO_STRUCT(r->out);
5664 r->out.alias_handle = talloc_zero(mem_ctx, struct policy_handle);
5665 if (r->out.alias_handle == NULL) {
5666 return NT_STATUS_NO_MEMORY;
5667 }
5668
5669 r->out.rid = talloc_zero(mem_ctx, uint32_t);
5670 if (r->out.rid == NULL) {
5671 return NT_STATUS_NO_MEMORY;
5672 }
5673
5674 r->out.result = _samr_CreateDomAlias(cli->pipes_struct, r);
5675 return NT_STATUS_OK;
5676 }
5677
5678 case NDR_SAMR_ENUMDOMAINALIASES: {
5679 struct samr_EnumDomainAliases *r = (struct samr_EnumDomainAliases *)_r;
5680 ZERO_STRUCT(r->out);
5681 r->out.resume_handle = r->in.resume_handle;
5682 r->out.sam = talloc_zero(mem_ctx, struct samr_SamArray *);
5683 if (r->out.sam == NULL) {
5684 return NT_STATUS_NO_MEMORY;
5685 }
5686
5687 r->out.num_entries = talloc_zero(mem_ctx, uint32_t);
5688 if (r->out.num_entries == NULL) {
5689 return NT_STATUS_NO_MEMORY;
5690 }
5691
5692 r->out.result = _samr_EnumDomainAliases(cli->pipes_struct, r);
5693 return NT_STATUS_OK;
5694 }
5695
5696 case NDR_SAMR_GETALIASMEMBERSHIP: {
5697 struct samr_GetAliasMembership *r = (struct samr_GetAliasMembership *)_r;
5698 ZERO_STRUCT(r->out);
5699 r->out.rids = talloc_zero(mem_ctx, struct samr_Ids);
5700 if (r->out.rids == NULL) {
5701 return NT_STATUS_NO_MEMORY;
5702 }
5703
5704 r->out.result = _samr_GetAliasMembership(cli->pipes_struct, r);
5705 return NT_STATUS_OK;
5706 }
5707
5708 case NDR_SAMR_LOOKUPNAMES: {
5709 struct samr_LookupNames *r = (struct samr_LookupNames *)_r;
5710 ZERO_STRUCT(r->out);
5711 r->out.rids = talloc_zero(mem_ctx, struct samr_Ids);
5712 if (r->out.rids == NULL) {
5713 return NT_STATUS_NO_MEMORY;
5714 }
5715
5716 r->out.types = talloc_zero(mem_ctx, struct samr_Ids);
5717 if (r->out.types == NULL) {
5718 return NT_STATUS_NO_MEMORY;
5719 }
5720
5721 r->out.result = _samr_LookupNames(cli->pipes_struct, r);
5722 return NT_STATUS_OK;
5723 }
5724
5725 case NDR_SAMR_LOOKUPRIDS: {
5726 struct samr_LookupRids *r = (struct samr_LookupRids *)_r;
5727 ZERO_STRUCT(r->out);
5728 r->out.names = talloc_zero(mem_ctx, struct lsa_Strings);
5729 if (r->out.names == NULL) {
5730 return NT_STATUS_NO_MEMORY;
5731 }
5732
5733 r->out.types = talloc_zero(mem_ctx, struct samr_Ids);
5734 if (r->out.types == NULL) {
5735 return NT_STATUS_NO_MEMORY;
5736 }
5737
5738 r->out.result = _samr_LookupRids(cli->pipes_struct, r);
5739 return NT_STATUS_OK;
5740 }
5741
5742 case NDR_SAMR_OPENGROUP: {
5743 struct samr_OpenGroup *r = (struct samr_OpenGroup *)_r;
5744 ZERO_STRUCT(r->out);
5745 r->out.group_handle = talloc_zero(mem_ctx, struct policy_handle);
5746 if (r->out.group_handle == NULL) {
5747 return NT_STATUS_NO_MEMORY;
5748 }
5749
5750 r->out.result = _samr_OpenGroup(cli->pipes_struct, r);
5751 return NT_STATUS_OK;
5752 }
5753
5754 case NDR_SAMR_QUERYGROUPINFO: {
5755 struct samr_QueryGroupInfo *r = (struct samr_QueryGroupInfo *)_r;
5756 ZERO_STRUCT(r->out);
5757 r->out.info = talloc_zero(mem_ctx, union samr_GroupInfo *);
5758 if (r->out.info == NULL) {
5759 return NT_STATUS_NO_MEMORY;
5760 }
5761
5762 r->out.result = _samr_QueryGroupInfo(cli->pipes_struct, r);
5763 return NT_STATUS_OK;
5764 }
5765
5766 case NDR_SAMR_SETGROUPINFO: {
5767 struct samr_SetGroupInfo *r = (struct samr_SetGroupInfo *)_r;
5768 r->out.result = _samr_SetGroupInfo(cli->pipes_struct, r);
5769 return NT_STATUS_OK;
5770 }
5771
5772 case NDR_SAMR_ADDGROUPMEMBER: {
5773 struct samr_AddGroupMember *r = (struct samr_AddGroupMember *)_r;
5774 r->out.result = _samr_AddGroupMember(cli->pipes_struct, r);
5775 return NT_STATUS_OK;
5776 }
5777
5778 case NDR_SAMR_DELETEDOMAINGROUP: {
5779 struct samr_DeleteDomainGroup *r = (struct samr_DeleteDomainGroup *)_r;
5780 ZERO_STRUCT(r->out);
5781 r->out.group_handle = r->in.group_handle;
5782 r->out.result = _samr_DeleteDomainGroup(cli->pipes_struct, r);
5783 return NT_STATUS_OK;
5784 }
5785
5786 case NDR_SAMR_DELETEGROUPMEMBER: {
5787 struct samr_DeleteGroupMember *r = (struct samr_DeleteGroupMember *)_r;
5788 r->out.result = _samr_DeleteGroupMember(cli->pipes_struct, r);
5789 return NT_STATUS_OK;
5790 }
5791
5792 case NDR_SAMR_QUERYGROUPMEMBER: {
5793 struct samr_QueryGroupMember *r = (struct samr_QueryGroupMember *)_r;
5794 ZERO_STRUCT(r->out);
5795 r->out.rids = talloc_zero(mem_ctx, struct samr_RidTypeArray *);
5796 if (r->out.rids == NULL) {
5797 return NT_STATUS_NO_MEMORY;
5798 }
5799
5800 r->out.result = _samr_QueryGroupMember(cli->pipes_struct, r);
5801 return NT_STATUS_OK;
5802 }
5803
5804 case NDR_SAMR_SETMEMBERATTRIBUTESOFGROUP: {
5805 struct samr_SetMemberAttributesOfGroup *r = (struct samr_SetMemberAttributesOfGroup *)_r;
5806 r->out.result = _samr_SetMemberAttributesOfGroup(cli->pipes_struct, r);
5807 return NT_STATUS_OK;
5808 }
5809
5810 case NDR_SAMR_OPENALIAS: {
5811 struct samr_OpenAlias *r = (struct samr_OpenAlias *)_r;
5812 ZERO_STRUCT(r->out);
5813 r->out.alias_handle = talloc_zero(mem_ctx, struct policy_handle);
5814 if (r->out.alias_handle == NULL) {
5815 return NT_STATUS_NO_MEMORY;
5816 }
5817
5818 r->out.result = _samr_OpenAlias(cli->pipes_struct, r);
5819 return NT_STATUS_OK;
5820 }
5821
5822 case NDR_SAMR_QUERYALIASINFO: {
5823 struct samr_QueryAliasInfo *r = (struct samr_QueryAliasInfo *)_r;
5824 ZERO_STRUCT(r->out);
5825 r->out.info = talloc_zero(mem_ctx, union samr_AliasInfo *);
5826 if (r->out.info == NULL) {
5827 return NT_STATUS_NO_MEMORY;
5828 }
5829
5830 r->out.result = _samr_QueryAliasInfo(cli->pipes_struct, r);
5831 return NT_STATUS_OK;
5832 }
5833
5834 case NDR_SAMR_SETALIASINFO: {
5835 struct samr_SetAliasInfo *r = (struct samr_SetAliasInfo *)_r;
5836 r->out.result = _samr_SetAliasInfo(cli->pipes_struct, r);
5837 return NT_STATUS_OK;
5838 }
5839
5840 case NDR_SAMR_DELETEDOMALIAS: {
5841 struct samr_DeleteDomAlias *r = (struct samr_DeleteDomAlias *)_r;
5842 ZERO_STRUCT(r->out);
5843 r->out.alias_handle = r->in.alias_handle;
5844 r->out.result = _samr_DeleteDomAlias(cli->pipes_struct, r);
5845 return NT_STATUS_OK;
5846 }
5847
5848 case NDR_SAMR_ADDALIASMEMBER: {
5849 struct samr_AddAliasMember *r = (struct samr_AddAliasMember *)_r;
5850 r->out.result = _samr_AddAliasMember(cli->pipes_struct, r);
5851 return NT_STATUS_OK;
5852 }
5853
5854 case NDR_SAMR_DELETEALIASMEMBER: {
5855 struct samr_DeleteAliasMember *r = (struct samr_DeleteAliasMember *)_r;
5856 r->out.result = _samr_DeleteAliasMember(cli->pipes_struct, r);
5857 return NT_STATUS_OK;
5858 }
5859
5860 case NDR_SAMR_GETMEMBERSINALIAS: {
5861 struct samr_GetMembersInAlias *r = (struct samr_GetMembersInAlias *)_r;
5862 ZERO_STRUCT(r->out);
5863 r->out.sids = talloc_zero(mem_ctx, struct lsa_SidArray);
5864 if (r->out.sids == NULL) {
5865 return NT_STATUS_NO_MEMORY;
5866 }
5867
5868 r->out.result = _samr_GetMembersInAlias(cli->pipes_struct, r);
5869 return NT_STATUS_OK;
5870 }
5871
5872 case NDR_SAMR_OPENUSER: {
5873 struct samr_OpenUser *r = (struct samr_OpenUser *)_r;
5874 ZERO_STRUCT(r->out);
5875 r->out.user_handle = talloc_zero(mem_ctx, struct policy_handle);
5876 if (r->out.user_handle == NULL) {
5877 return NT_STATUS_NO_MEMORY;
5878 }
5879
5880 r->out.result = _samr_OpenUser(cli->pipes_struct, r);
5881 return NT_STATUS_OK;
5882 }
5883
5884 case NDR_SAMR_DELETEUSER: {
5885 struct samr_DeleteUser *r = (struct samr_DeleteUser *)_r;
5886 ZERO_STRUCT(r->out);
5887 r->out.user_handle = r->in.user_handle;
5888 r->out.result = _samr_DeleteUser(cli->pipes_struct, r);
5889 return NT_STATUS_OK;
5890 }
5891
5892 case NDR_SAMR_QUERYUSERINFO: {
5893 struct samr_QueryUserInfo *r = (struct samr_QueryUserInfo *)_r;
5894 ZERO_STRUCT(r->out);
5895 r->out.info = talloc_zero(mem_ctx, union samr_UserInfo *);
5896 if (r->out.info == NULL) {
5897 return NT_STATUS_NO_MEMORY;
5898 }
5899
5900 r->out.result = _samr_QueryUserInfo(cli->pipes_struct, r);
5901 return NT_STATUS_OK;
5902 }
5903
5904 case NDR_SAMR_SETUSERINFO: {
5905 struct samr_SetUserInfo *r = (struct samr_SetUserInfo *)_r;
5906 r->out.result = _samr_SetUserInfo(cli->pipes_struct, r);
5907 return NT_STATUS_OK;
5908 }
5909
5910 case NDR_SAMR_CHANGEPASSWORDUSER: {
5911 struct samr_ChangePasswordUser *r = (struct samr_ChangePasswordUser *)_r;
5912 r->out.result = _samr_ChangePasswordUser(cli->pipes_struct, r);
5913 return NT_STATUS_OK;
5914 }
5915
5916 case NDR_SAMR_GETGROUPSFORUSER: {
5917 struct samr_GetGroupsForUser *r = (struct samr_GetGroupsForUser *)_r;
5918 ZERO_STRUCT(r->out);
5919 r->out.rids = talloc_zero(mem_ctx, struct samr_RidWithAttributeArray *);
5920 if (r->out.rids == NULL) {
5921 return NT_STATUS_NO_MEMORY;
5922 }
5923
5924 r->out.result = _samr_GetGroupsForUser(cli->pipes_struct, r);
5925 return NT_STATUS_OK;
5926 }
5927
5928 case NDR_SAMR_QUERYDISPLAYINFO: {
5929 struct samr_QueryDisplayInfo *r = (struct samr_QueryDisplayInfo *)_r;
5930 ZERO_STRUCT(r->out);
5931 r->out.total_size = talloc_zero(mem_ctx, uint32_t);
5932 if (r->out.total_size == NULL) {
5933 return NT_STATUS_NO_MEMORY;
5934 }
5935
5936 r->out.returned_size = talloc_zero(mem_ctx, uint32_t);
5937 if (r->out.returned_size == NULL) {
5938 return NT_STATUS_NO_MEMORY;
5939 }
5940
5941 r->out.info = talloc_zero(mem_ctx, union samr_DispInfo);
5942 if (r->out.info == NULL) {
5943 return NT_STATUS_NO_MEMORY;
5944 }
5945
5946 r->out.result = _samr_QueryDisplayInfo(cli->pipes_struct, r);
5947 return NT_STATUS_OK;
5948 }
5949
5950 case NDR_SAMR_GETDISPLAYENUMERATIONINDEX: {
5951 struct samr_GetDisplayEnumerationIndex *r = (struct samr_GetDisplayEnumerationIndex *)_r;
5952 ZERO_STRUCT(r->out);
5953 r->out.idx = talloc_zero(mem_ctx, uint32_t);
5954 if (r->out.idx == NULL) {
5955 return NT_STATUS_NO_MEMORY;
5956 }
5957
5958 r->out.result = _samr_GetDisplayEnumerationIndex(cli->pipes_struct, r);
5959 return NT_STATUS_OK;
5960 }
5961
5962 case NDR_SAMR_TESTPRIVATEFUNCTIONSDOMAIN: {
5963 struct samr_TestPrivateFunctionsDomain *r = (struct samr_TestPrivateFunctionsDomain *)_r;
5964 r->out.result = _samr_TestPrivateFunctionsDomain(cli->pipes_struct, r);
5965 return NT_STATUS_OK;
5966 }
5967
5968 case NDR_SAMR_TESTPRIVATEFUNCTIONSUSER: {
5969 struct samr_TestPrivateFunctionsUser *r = (struct samr_TestPrivateFunctionsUser *)_r;
5970 r->out.result = _samr_TestPrivateFunctionsUser(cli->pipes_struct, r);
5971 return NT_STATUS_OK;
5972 }
5973
5974 case NDR_SAMR_GETUSERPWINFO: {
5975 struct samr_GetUserPwInfo *r = (struct samr_GetUserPwInfo *)_r;
5976 ZERO_STRUCT(r->out);
5977 r->out.info = talloc_zero(mem_ctx, struct samr_PwInfo);
5978 if (r->out.info == NULL) {
5979 return NT_STATUS_NO_MEMORY;
5980 }
5981
5982 r->out.result = _samr_GetUserPwInfo(cli->pipes_struct, r);
5983 return NT_STATUS_OK;
5984 }
5985
5986 case NDR_SAMR_REMOVEMEMBERFROMFOREIGNDOMAIN: {
5987 struct samr_RemoveMemberFromForeignDomain *r = (struct samr_RemoveMemberFromForeignDomain *)_r;
5988 r->out.result = _samr_RemoveMemberFromForeignDomain(cli->pipes_struct, r);
5989 return NT_STATUS_OK;
5990 }
5991
5992 case NDR_SAMR_QUERYDOMAININFO2: {
5993 struct samr_QueryDomainInfo2 *r = (struct samr_QueryDomainInfo2 *)_r;
5994 ZERO_STRUCT(r->out);
5995 r->out.info = talloc_zero(mem_ctx, union samr_DomainInfo *);
5996 if (r->out.info == NULL) {
5997 return NT_STATUS_NO_MEMORY;
5998 }
5999
6000 r->out.result = _samr_QueryDomainInfo2(cli->pipes_struct, r);
6001 return NT_STATUS_OK;
6002 }
6003
6004 case NDR_SAMR_QUERYUSERINFO2: {
6005 struct samr_QueryUserInfo2 *r = (struct samr_QueryUserInfo2 *)_r;
6006 ZERO_STRUCT(r->out);
6007 r->out.info = talloc_zero(mem_ctx, union samr_UserInfo *);
6008 if (r->out.info == NULL) {
6009 return NT_STATUS_NO_MEMORY;
6010 }
6011
6012 r->out.result = _samr_QueryUserInfo2(cli->pipes_struct, r);
6013 return NT_STATUS_OK;
6014 }
6015
6016 case NDR_SAMR_QUERYDISPLAYINFO2: {
6017 struct samr_QueryDisplayInfo2 *r = (struct samr_QueryDisplayInfo2 *)_r;
6018 ZERO_STRUCT(r->out);
6019 r->out.total_size = talloc_zero(mem_ctx, uint32_t);
6020 if (r->out.total_size == NULL) {
6021 return NT_STATUS_NO_MEMORY;
6022 }
6023
6024 r->out.returned_size = talloc_zero(mem_ctx, uint32_t);
6025 if (r->out.returned_size == NULL) {
6026 return NT_STATUS_NO_MEMORY;
6027 }
6028
6029 r->out.info = talloc_zero(mem_ctx, union samr_DispInfo);
6030 if (r->out.info == NULL) {
6031 return NT_STATUS_NO_MEMORY;
6032 }
6033
6034 r->out.result = _samr_QueryDisplayInfo2(cli->pipes_struct, r);
6035 return NT_STATUS_OK;
6036 }
6037
6038 case NDR_SAMR_GETDISPLAYENUMERATIONINDEX2: {
6039 struct samr_GetDisplayEnumerationIndex2 *r = (struct samr_GetDisplayEnumerationIndex2 *)_r;
6040 ZERO_STRUCT(r->out);
6041 r->out.idx = talloc_zero(mem_ctx, uint32_t);
6042 if (r->out.idx == NULL) {
6043 return NT_STATUS_NO_MEMORY;
6044 }
6045
6046 r->out.result = _samr_GetDisplayEnumerationIndex2(cli->pipes_struct, r);
6047 return NT_STATUS_OK;
6048 }
6049
6050 case NDR_SAMR_CREATEUSER2: {
6051 struct samr_CreateUser2 *r = (struct samr_CreateUser2 *)_r;
6052 ZERO_STRUCT(r->out);
6053 r->out.user_handle = talloc_zero(mem_ctx, struct policy_handle);
6054 if (r->out.user_handle == NULL) {
6055 return NT_STATUS_NO_MEMORY;
6056 }
6057
6058 r->out.access_granted = talloc_zero(mem_ctx, uint32_t);
6059 if (r->out.access_granted == NULL) {
6060 return NT_STATUS_NO_MEMORY;
6061 }
6062
6063 r->out.rid = talloc_zero(mem_ctx, uint32_t);
6064 if (r->out.rid == NULL) {
6065 return NT_STATUS_NO_MEMORY;
6066 }
6067
6068 r->out.result = _samr_CreateUser2(cli->pipes_struct, r);
6069 return NT_STATUS_OK;
6070 }
6071
6072 case NDR_SAMR_QUERYDISPLAYINFO3: {
6073 struct samr_QueryDisplayInfo3 *r = (struct samr_QueryDisplayInfo3 *)_r;
6074 ZERO_STRUCT(r->out);
6075 r->out.total_size = talloc_zero(mem_ctx, uint32_t);
6076 if (r->out.total_size == NULL) {
6077 return NT_STATUS_NO_MEMORY;
6078 }
6079
6080 r->out.returned_size = talloc_zero(mem_ctx, uint32_t);
6081 if (r->out.returned_size == NULL) {
6082 return NT_STATUS_NO_MEMORY;
6083 }
6084
6085 r->out.info = talloc_zero(mem_ctx, union samr_DispInfo);
6086 if (r->out.info == NULL) {
6087 return NT_STATUS_NO_MEMORY;
6088 }
6089
6090 r->out.result = _samr_QueryDisplayInfo3(cli->pipes_struct, r);
6091 return NT_STATUS_OK;
6092 }
6093
6094 case NDR_SAMR_ADDMULTIPLEMEMBERSTOALIAS: {
6095 struct samr_AddMultipleMembersToAlias *r = (struct samr_AddMultipleMembersToAlias *)_r;
6096 r->out.result = _samr_AddMultipleMembersToAlias(cli->pipes_struct, r);
6097 return NT_STATUS_OK;
6098 }
6099
6100 case NDR_SAMR_REMOVEMULTIPLEMEMBERSFROMALIAS: {
6101 struct samr_RemoveMultipleMembersFromAlias *r = (struct samr_RemoveMultipleMembersFromAlias *)_r;
6102 r->out.result = _samr_RemoveMultipleMembersFromAlias(cli->pipes_struct, r);
6103 return NT_STATUS_OK;
6104 }
6105
6106 case NDR_SAMR_OEMCHANGEPASSWORDUSER2: {
6107 struct samr_OemChangePasswordUser2 *r = (struct samr_OemChangePasswordUser2 *)_r;
6108 r->out.result = _samr_OemChangePasswordUser2(cli->pipes_struct, r);
6109 return NT_STATUS_OK;
6110 }
6111
6112 case NDR_SAMR_CHANGEPASSWORDUSER2: {
6113 struct samr_ChangePasswordUser2 *r = (struct samr_ChangePasswordUser2 *)_r;
6114 r->out.result = _samr_ChangePasswordUser2(cli->pipes_struct, r);
6115 return NT_STATUS_OK;
6116 }
6117
6118 case NDR_SAMR_GETDOMPWINFO: {
6119 struct samr_GetDomPwInfo *r = (struct samr_GetDomPwInfo *)_r;
6120 ZERO_STRUCT(r->out);
6121 r->out.info = talloc_zero(mem_ctx, struct samr_PwInfo);
6122 if (r->out.info == NULL) {
6123 return NT_STATUS_NO_MEMORY;
6124 }
6125
6126 r->out.result = _samr_GetDomPwInfo(cli->pipes_struct, r);
6127 return NT_STATUS_OK;
6128 }
6129
6130 case NDR_SAMR_CONNECT2: {
6131 struct samr_Connect2 *r = (struct samr_Connect2 *)_r;
6132 ZERO_STRUCT(r->out);
6133 r->out.connect_handle = talloc_zero(mem_ctx, struct policy_handle);
6134 if (r->out.connect_handle == NULL) {
6135 return NT_STATUS_NO_MEMORY;
6136 }
6137
6138 r->out.result = _samr_Connect2(cli->pipes_struct, r);
6139 return NT_STATUS_OK;
6140 }
6141
6142 case NDR_SAMR_SETUSERINFO2: {
6143 struct samr_SetUserInfo2 *r = (struct samr_SetUserInfo2 *)_r;
6144 r->out.result = _samr_SetUserInfo2(cli->pipes_struct, r);
6145 return NT_STATUS_OK;
6146 }
6147
6148 case NDR_SAMR_SETBOOTKEYINFORMATION: {
6149 struct samr_SetBootKeyInformation *r = (struct samr_SetBootKeyInformation *)_r;
6150 r->out.result = _samr_SetBootKeyInformation(cli->pipes_struct, r);
6151 return NT_STATUS_OK;
6152 }
6153
6154 case NDR_SAMR_GETBOOTKEYINFORMATION: {
6155 struct samr_GetBootKeyInformation *r = (struct samr_GetBootKeyInformation *)_r;
6156 ZERO_STRUCT(r->out);
6157 r->out.unknown = talloc_zero(mem_ctx, uint32_t);
6158 if (r->out.unknown == NULL) {
6159 return NT_STATUS_NO_MEMORY;
6160 }
6161
6162 r->out.result = _samr_GetBootKeyInformation(cli->pipes_struct, r);
6163 return NT_STATUS_OK;
6164 }
6165
6166 case NDR_SAMR_CONNECT3: {
6167 struct samr_Connect3 *r = (struct samr_Connect3 *)_r;
6168 ZERO_STRUCT(r->out);
6169 r->out.connect_handle = talloc_zero(mem_ctx, struct policy_handle);
6170 if (r->out.connect_handle == NULL) {
6171 return NT_STATUS_NO_MEMORY;
6172 }
6173
6174 r->out.result = _samr_Connect3(cli->pipes_struct, r);
6175 return NT_STATUS_OK;
6176 }
6177
6178 case NDR_SAMR_CONNECT4: {
6179 struct samr_Connect4 *r = (struct samr_Connect4 *)_r;
6180 ZERO_STRUCT(r->out);
6181 r->out.connect_handle = talloc_zero(mem_ctx, struct policy_handle);
6182 if (r->out.connect_handle == NULL) {
6183 return NT_STATUS_NO_MEMORY;
6184 }
6185
6186 r->out.result = _samr_Connect4(cli->pipes_struct, r);
6187 return NT_STATUS_OK;
6188 }
6189
6190 case NDR_SAMR_CHANGEPASSWORDUSER3: {
6191 struct samr_ChangePasswordUser3 *r = (struct samr_ChangePasswordUser3 *)_r;
6192 ZERO_STRUCT(r->out);
6193 r->out.dominfo = talloc_zero(mem_ctx, struct samr_DomInfo1 *);
6194 if (r->out.dominfo == NULL) {
6195 return NT_STATUS_NO_MEMORY;
6196 }
6197
6198 r->out.reject = talloc_zero(mem_ctx, struct samr_ChangeReject *);
6199 if (r->out.reject == NULL) {
6200 return NT_STATUS_NO_MEMORY;
6201 }
6202
6203 r->out.result = _samr_ChangePasswordUser3(cli->pipes_struct, r);
6204 return NT_STATUS_OK;
6205 }
6206
6207 case NDR_SAMR_CONNECT5: {
6208 struct samr_Connect5 *r = (struct samr_Connect5 *)_r;
6209 ZERO_STRUCT(r->out);
6210 r->out.level_out = talloc_zero(mem_ctx, uint32_t);
6211 if (r->out.level_out == NULL) {
6212 return NT_STATUS_NO_MEMORY;
6213 }
6214
6215 r->out.info_out = talloc_zero(mem_ctx, union samr_ConnectInfo);
6216 if (r->out.info_out == NULL) {
6217 return NT_STATUS_NO_MEMORY;
6218 }
6219
6220 r->out.connect_handle = talloc_zero(mem_ctx, struct policy_handle);
6221 if (r->out.connect_handle == NULL) {
6222 return NT_STATUS_NO_MEMORY;
6223 }
6224
6225 r->out.result = _samr_Connect5(cli->pipes_struct, r);
6226 return NT_STATUS_OK;
6227 }
6228
6229 case NDR_SAMR_RIDTOSID: {
6230 struct samr_RidToSid *r = (struct samr_RidToSid *)_r;
6231 ZERO_STRUCT(r->out);
6232 r->out.sid = talloc_zero(mem_ctx, struct dom_sid2 *);
6233 if (r->out.sid == NULL) {
6234 return NT_STATUS_NO_MEMORY;
6235 }
6236
6237 r->out.result = _samr_RidToSid(cli->pipes_struct, r);
6238 return NT_STATUS_OK;
6239 }
6240
6241 case NDR_SAMR_SETDSRMPASSWORD: {
6242 struct samr_SetDsrmPassword *r = (struct samr_SetDsrmPassword *)_r;
6243 r->out.result = _samr_SetDsrmPassword(cli->pipes_struct, r);
6244 return NT_STATUS_OK;
6245 }
6246
6247 case NDR_SAMR_VALIDATEPASSWORD: {
6248 struct samr_ValidatePassword *r = (struct samr_ValidatePassword *)_r;
6249 ZERO_STRUCT(r->out);
6250 r->out.rep = talloc_zero(mem_ctx, union samr_ValidatePasswordRep *);
6251 if (r->out.rep == NULL) {
6252 return NT_STATUS_NO_MEMORY;
6253 }
6254
6255 r->out.result = _samr_ValidatePassword(cli->pipes_struct, r);
6256 return NT_STATUS_OK;
6257 }
6258
6259 default:
6260 return NT_STATUS_NOT_IMPLEMENTED;
6261 }
6262}
6263
6264NTSTATUS rpc_samr_init(void)
6265{
6266 return rpc_srv_register(SMB_RPC_INTERFACE_VERSION, "samr", "samr", &ndr_table_samr, api_samr_cmds, sizeof(api_samr_cmds) / sizeof(struct api_struct));
6267}
Note: See TracBrowser for help on using the repository browser.