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_dssetup.h"
8
9static bool api_dssetup_DsRoleGetPrimaryDomainInformation(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 dssetup_DsRoleGetPrimaryDomainInformation *r;
17
18	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEGETPRIMARYDOMAININFORMATION];
19
20	r = talloc(talloc_tos(), struct dssetup_DsRoleGetPrimaryDomainInformation);
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(dssetup_DsRoleGetPrimaryDomainInformation, r);
45	}
46
47	ZERO_STRUCT(r->out);
48	r->out.info = talloc_zero(r, union dssetup_DsRoleInfo);
49	if (r->out.info == NULL) {
50		talloc_free(r);
51		return false;
52	}
53
54	r->out.result = _dssetup_DsRoleGetPrimaryDomainInformation(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(dssetup_DsRoleGetPrimaryDomainInformation, 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_dssetup_DsRoleDnsNameToFlatName(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 dssetup_DsRoleDnsNameToFlatName *r;
97
98	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEDNSNAMETOFLATNAME];
99
100	r = talloc(talloc_tos(), struct dssetup_DsRoleDnsNameToFlatName);
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(dssetup_DsRoleDnsNameToFlatName, r);
125	}
126
127	r->out.result = _dssetup_DsRoleDnsNameToFlatName(p, r);
128
129	if (p->rng_fault_state) {
130		talloc_free(r);
131		/* Return true here, srv_pipe_hnd.c will take care */
132		return true;
133	}
134
135	if (DEBUGLEVEL >= 10) {
136		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleDnsNameToFlatName, r);
137	}
138
139	push = ndr_push_init_ctx(r, NULL);
140	if (push == NULL) {
141		talloc_free(r);
142		return false;
143	}
144
145	ndr_err = call->ndr_push(push, NDR_OUT, r);
146	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
147		talloc_free(r);
148		return false;
149	}
150
151	blob = ndr_push_blob(push);
152	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
153		talloc_free(r);
154		return false;
155	}
156
157	talloc_free(r);
158
159	return true;
160}
161
162static bool api_dssetup_DsRoleDcAsDc(pipes_struct *p)
163{
164	const struct ndr_interface_call *call;
165	struct ndr_pull *pull;
166	struct ndr_push *push;
167	enum ndr_err_code ndr_err;
168	DATA_BLOB blob;
169	struct dssetup_DsRoleDcAsDc *r;
170
171	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEDCASDC];
172
173	r = talloc(talloc_tos(), struct dssetup_DsRoleDcAsDc);
174	if (r == NULL) {
175		return false;
176	}
177
178	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
179		talloc_free(r);
180		return false;
181	}
182
183	pull = ndr_pull_init_blob(&blob, r, NULL);
184	if (pull == NULL) {
185		talloc_free(r);
186		return false;
187	}
188
189	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
190	ndr_err = call->ndr_pull(pull, NDR_IN, r);
191	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
192		talloc_free(r);
193		return false;
194	}
195
196	if (DEBUGLEVEL >= 10) {
197		NDR_PRINT_IN_DEBUG(dssetup_DsRoleDcAsDc, r);
198	}
199
200	r->out.result = _dssetup_DsRoleDcAsDc(p, r);
201
202	if (p->rng_fault_state) {
203		talloc_free(r);
204		/* Return true here, srv_pipe_hnd.c will take care */
205		return true;
206	}
207
208	if (DEBUGLEVEL >= 10) {
209		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleDcAsDc, r);
210	}
211
212	push = ndr_push_init_ctx(r, NULL);
213	if (push == NULL) {
214		talloc_free(r);
215		return false;
216	}
217
218	ndr_err = call->ndr_push(push, NDR_OUT, r);
219	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
220		talloc_free(r);
221		return false;
222	}
223
224	blob = ndr_push_blob(push);
225	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
226		talloc_free(r);
227		return false;
228	}
229
230	talloc_free(r);
231
232	return true;
233}
234
235static bool api_dssetup_DsRoleDcAsReplica(pipes_struct *p)
236{
237	const struct ndr_interface_call *call;
238	struct ndr_pull *pull;
239	struct ndr_push *push;
240	enum ndr_err_code ndr_err;
241	DATA_BLOB blob;
242	struct dssetup_DsRoleDcAsReplica *r;
243
244	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEDCASREPLICA];
245
246	r = talloc(talloc_tos(), struct dssetup_DsRoleDcAsReplica);
247	if (r == NULL) {
248		return false;
249	}
250
251	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
252		talloc_free(r);
253		return false;
254	}
255
256	pull = ndr_pull_init_blob(&blob, r, NULL);
257	if (pull == NULL) {
258		talloc_free(r);
259		return false;
260	}
261
262	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
263	ndr_err = call->ndr_pull(pull, NDR_IN, r);
264	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
265		talloc_free(r);
266		return false;
267	}
268
269	if (DEBUGLEVEL >= 10) {
270		NDR_PRINT_IN_DEBUG(dssetup_DsRoleDcAsReplica, r);
271	}
272
273	r->out.result = _dssetup_DsRoleDcAsReplica(p, r);
274
275	if (p->rng_fault_state) {
276		talloc_free(r);
277		/* Return true here, srv_pipe_hnd.c will take care */
278		return true;
279	}
280
281	if (DEBUGLEVEL >= 10) {
282		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleDcAsReplica, r);
283	}
284
285	push = ndr_push_init_ctx(r, NULL);
286	if (push == NULL) {
287		talloc_free(r);
288		return false;
289	}
290
291	ndr_err = call->ndr_push(push, NDR_OUT, r);
292	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
293		talloc_free(r);
294		return false;
295	}
296
297	blob = ndr_push_blob(push);
298	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
299		talloc_free(r);
300		return false;
301	}
302
303	talloc_free(r);
304
305	return true;
306}
307
308static bool api_dssetup_DsRoleDemoteDc(pipes_struct *p)
309{
310	const struct ndr_interface_call *call;
311	struct ndr_pull *pull;
312	struct ndr_push *push;
313	enum ndr_err_code ndr_err;
314	DATA_BLOB blob;
315	struct dssetup_DsRoleDemoteDc *r;
316
317	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEDEMOTEDC];
318
319	r = talloc(talloc_tos(), struct dssetup_DsRoleDemoteDc);
320	if (r == NULL) {
321		return false;
322	}
323
324	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
325		talloc_free(r);
326		return false;
327	}
328
329	pull = ndr_pull_init_blob(&blob, r, NULL);
330	if (pull == NULL) {
331		talloc_free(r);
332		return false;
333	}
334
335	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
336	ndr_err = call->ndr_pull(pull, NDR_IN, r);
337	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
338		talloc_free(r);
339		return false;
340	}
341
342	if (DEBUGLEVEL >= 10) {
343		NDR_PRINT_IN_DEBUG(dssetup_DsRoleDemoteDc, r);
344	}
345
346	r->out.result = _dssetup_DsRoleDemoteDc(p, r);
347
348	if (p->rng_fault_state) {
349		talloc_free(r);
350		/* Return true here, srv_pipe_hnd.c will take care */
351		return true;
352	}
353
354	if (DEBUGLEVEL >= 10) {
355		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleDemoteDc, r);
356	}
357
358	push = ndr_push_init_ctx(r, NULL);
359	if (push == NULL) {
360		talloc_free(r);
361		return false;
362	}
363
364	ndr_err = call->ndr_push(push, NDR_OUT, r);
365	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
366		talloc_free(r);
367		return false;
368	}
369
370	blob = ndr_push_blob(push);
371	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
372		talloc_free(r);
373		return false;
374	}
375
376	talloc_free(r);
377
378	return true;
379}
380
381static bool api_dssetup_DsRoleGetDcOperationProgress(pipes_struct *p)
382{
383	const struct ndr_interface_call *call;
384	struct ndr_pull *pull;
385	struct ndr_push *push;
386	enum ndr_err_code ndr_err;
387	DATA_BLOB blob;
388	struct dssetup_DsRoleGetDcOperationProgress *r;
389
390	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEGETDCOPERATIONPROGRESS];
391
392	r = talloc(talloc_tos(), struct dssetup_DsRoleGetDcOperationProgress);
393	if (r == NULL) {
394		return false;
395	}
396
397	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
398		talloc_free(r);
399		return false;
400	}
401
402	pull = ndr_pull_init_blob(&blob, r, NULL);
403	if (pull == NULL) {
404		talloc_free(r);
405		return false;
406	}
407
408	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
409	ndr_err = call->ndr_pull(pull, NDR_IN, r);
410	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
411		talloc_free(r);
412		return false;
413	}
414
415	if (DEBUGLEVEL >= 10) {
416		NDR_PRINT_IN_DEBUG(dssetup_DsRoleGetDcOperationProgress, r);
417	}
418
419	r->out.result = _dssetup_DsRoleGetDcOperationProgress(p, r);
420
421	if (p->rng_fault_state) {
422		talloc_free(r);
423		/* Return true here, srv_pipe_hnd.c will take care */
424		return true;
425	}
426
427	if (DEBUGLEVEL >= 10) {
428		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleGetDcOperationProgress, r);
429	}
430
431	push = ndr_push_init_ctx(r, NULL);
432	if (push == NULL) {
433		talloc_free(r);
434		return false;
435	}
436
437	ndr_err = call->ndr_push(push, NDR_OUT, r);
438	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
439		talloc_free(r);
440		return false;
441	}
442
443	blob = ndr_push_blob(push);
444	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
445		talloc_free(r);
446		return false;
447	}
448
449	talloc_free(r);
450
451	return true;
452}
453
454static bool api_dssetup_DsRoleGetDcOperationResults(pipes_struct *p)
455{
456	const struct ndr_interface_call *call;
457	struct ndr_pull *pull;
458	struct ndr_push *push;
459	enum ndr_err_code ndr_err;
460	DATA_BLOB blob;
461	struct dssetup_DsRoleGetDcOperationResults *r;
462
463	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEGETDCOPERATIONRESULTS];
464
465	r = talloc(talloc_tos(), struct dssetup_DsRoleGetDcOperationResults);
466	if (r == NULL) {
467		return false;
468	}
469
470	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
471		talloc_free(r);
472		return false;
473	}
474
475	pull = ndr_pull_init_blob(&blob, r, NULL);
476	if (pull == NULL) {
477		talloc_free(r);
478		return false;
479	}
480
481	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
482	ndr_err = call->ndr_pull(pull, NDR_IN, r);
483	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
484		talloc_free(r);
485		return false;
486	}
487
488	if (DEBUGLEVEL >= 10) {
489		NDR_PRINT_IN_DEBUG(dssetup_DsRoleGetDcOperationResults, r);
490	}
491
492	r->out.result = _dssetup_DsRoleGetDcOperationResults(p, r);
493
494	if (p->rng_fault_state) {
495		talloc_free(r);
496		/* Return true here, srv_pipe_hnd.c will take care */
497		return true;
498	}
499
500	if (DEBUGLEVEL >= 10) {
501		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleGetDcOperationResults, r);
502	}
503
504	push = ndr_push_init_ctx(r, NULL);
505	if (push == NULL) {
506		talloc_free(r);
507		return false;
508	}
509
510	ndr_err = call->ndr_push(push, NDR_OUT, r);
511	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
512		talloc_free(r);
513		return false;
514	}
515
516	blob = ndr_push_blob(push);
517	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
518		talloc_free(r);
519		return false;
520	}
521
522	talloc_free(r);
523
524	return true;
525}
526
527static bool api_dssetup_DsRoleCancel(pipes_struct *p)
528{
529	const struct ndr_interface_call *call;
530	struct ndr_pull *pull;
531	struct ndr_push *push;
532	enum ndr_err_code ndr_err;
533	DATA_BLOB blob;
534	struct dssetup_DsRoleCancel *r;
535
536	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLECANCEL];
537
538	r = talloc(talloc_tos(), struct dssetup_DsRoleCancel);
539	if (r == NULL) {
540		return false;
541	}
542
543	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
544		talloc_free(r);
545		return false;
546	}
547
548	pull = ndr_pull_init_blob(&blob, r, NULL);
549	if (pull == NULL) {
550		talloc_free(r);
551		return false;
552	}
553
554	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
555	ndr_err = call->ndr_pull(pull, NDR_IN, r);
556	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
557		talloc_free(r);
558		return false;
559	}
560
561	if (DEBUGLEVEL >= 10) {
562		NDR_PRINT_IN_DEBUG(dssetup_DsRoleCancel, r);
563	}
564
565	r->out.result = _dssetup_DsRoleCancel(p, r);
566
567	if (p->rng_fault_state) {
568		talloc_free(r);
569		/* Return true here, srv_pipe_hnd.c will take care */
570		return true;
571	}
572
573	if (DEBUGLEVEL >= 10) {
574		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleCancel, r);
575	}
576
577	push = ndr_push_init_ctx(r, NULL);
578	if (push == NULL) {
579		talloc_free(r);
580		return false;
581	}
582
583	ndr_err = call->ndr_push(push, NDR_OUT, r);
584	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
585		talloc_free(r);
586		return false;
587	}
588
589	blob = ndr_push_blob(push);
590	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
591		talloc_free(r);
592		return false;
593	}
594
595	talloc_free(r);
596
597	return true;
598}
599
600static bool api_dssetup_DsRoleServerSaveStateForUpgrade(pipes_struct *p)
601{
602	const struct ndr_interface_call *call;
603	struct ndr_pull *pull;
604	struct ndr_push *push;
605	enum ndr_err_code ndr_err;
606	DATA_BLOB blob;
607	struct dssetup_DsRoleServerSaveStateForUpgrade *r;
608
609	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLESERVERSAVESTATEFORUPGRADE];
610
611	r = talloc(talloc_tos(), struct dssetup_DsRoleServerSaveStateForUpgrade);
612	if (r == NULL) {
613		return false;
614	}
615
616	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
617		talloc_free(r);
618		return false;
619	}
620
621	pull = ndr_pull_init_blob(&blob, r, NULL);
622	if (pull == NULL) {
623		talloc_free(r);
624		return false;
625	}
626
627	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
628	ndr_err = call->ndr_pull(pull, NDR_IN, r);
629	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
630		talloc_free(r);
631		return false;
632	}
633
634	if (DEBUGLEVEL >= 10) {
635		NDR_PRINT_IN_DEBUG(dssetup_DsRoleServerSaveStateForUpgrade, r);
636	}
637
638	r->out.result = _dssetup_DsRoleServerSaveStateForUpgrade(p, r);
639
640	if (p->rng_fault_state) {
641		talloc_free(r);
642		/* Return true here, srv_pipe_hnd.c will take care */
643		return true;
644	}
645
646	if (DEBUGLEVEL >= 10) {
647		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleServerSaveStateForUpgrade, r);
648	}
649
650	push = ndr_push_init_ctx(r, NULL);
651	if (push == NULL) {
652		talloc_free(r);
653		return false;
654	}
655
656	ndr_err = call->ndr_push(push, NDR_OUT, r);
657	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
658		talloc_free(r);
659		return false;
660	}
661
662	blob = ndr_push_blob(push);
663	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
664		talloc_free(r);
665		return false;
666	}
667
668	talloc_free(r);
669
670	return true;
671}
672
673static bool api_dssetup_DsRoleUpgradeDownlevelServer(pipes_struct *p)
674{
675	const struct ndr_interface_call *call;
676	struct ndr_pull *pull;
677	struct ndr_push *push;
678	enum ndr_err_code ndr_err;
679	DATA_BLOB blob;
680	struct dssetup_DsRoleUpgradeDownlevelServer *r;
681
682	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEUPGRADEDOWNLEVELSERVER];
683
684	r = talloc(talloc_tos(), struct dssetup_DsRoleUpgradeDownlevelServer);
685	if (r == NULL) {
686		return false;
687	}
688
689	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
690		talloc_free(r);
691		return false;
692	}
693
694	pull = ndr_pull_init_blob(&blob, r, NULL);
695	if (pull == NULL) {
696		talloc_free(r);
697		return false;
698	}
699
700	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
701	ndr_err = call->ndr_pull(pull, NDR_IN, r);
702	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
703		talloc_free(r);
704		return false;
705	}
706
707	if (DEBUGLEVEL >= 10) {
708		NDR_PRINT_IN_DEBUG(dssetup_DsRoleUpgradeDownlevelServer, r);
709	}
710
711	r->out.result = _dssetup_DsRoleUpgradeDownlevelServer(p, r);
712
713	if (p->rng_fault_state) {
714		talloc_free(r);
715		/* Return true here, srv_pipe_hnd.c will take care */
716		return true;
717	}
718
719	if (DEBUGLEVEL >= 10) {
720		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleUpgradeDownlevelServer, r);
721	}
722
723	push = ndr_push_init_ctx(r, NULL);
724	if (push == NULL) {
725		talloc_free(r);
726		return false;
727	}
728
729	ndr_err = call->ndr_push(push, NDR_OUT, r);
730	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
731		talloc_free(r);
732		return false;
733	}
734
735	blob = ndr_push_blob(push);
736	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
737		talloc_free(r);
738		return false;
739	}
740
741	talloc_free(r);
742
743	return true;
744}
745
746static bool api_dssetup_DsRoleAbortDownlevelServerUpgrade(pipes_struct *p)
747{
748	const struct ndr_interface_call *call;
749	struct ndr_pull *pull;
750	struct ndr_push *push;
751	enum ndr_err_code ndr_err;
752	DATA_BLOB blob;
753	struct dssetup_DsRoleAbortDownlevelServerUpgrade *r;
754
755	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEABORTDOWNLEVELSERVERUPGRADE];
756
757	r = talloc(talloc_tos(), struct dssetup_DsRoleAbortDownlevelServerUpgrade);
758	if (r == NULL) {
759		return false;
760	}
761
762	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
763		talloc_free(r);
764		return false;
765	}
766
767	pull = ndr_pull_init_blob(&blob, r, NULL);
768	if (pull == NULL) {
769		talloc_free(r);
770		return false;
771	}
772
773	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
774	ndr_err = call->ndr_pull(pull, NDR_IN, r);
775	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
776		talloc_free(r);
777		return false;
778	}
779
780	if (DEBUGLEVEL >= 10) {
781		NDR_PRINT_IN_DEBUG(dssetup_DsRoleAbortDownlevelServerUpgrade, r);
782	}
783
784	r->out.result = _dssetup_DsRoleAbortDownlevelServerUpgrade(p, r);
785
786	if (p->rng_fault_state) {
787		talloc_free(r);
788		/* Return true here, srv_pipe_hnd.c will take care */
789		return true;
790	}
791
792	if (DEBUGLEVEL >= 10) {
793		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleAbortDownlevelServerUpgrade, r);
794	}
795
796	push = ndr_push_init_ctx(r, NULL);
797	if (push == NULL) {
798		talloc_free(r);
799		return false;
800	}
801
802	ndr_err = call->ndr_push(push, NDR_OUT, r);
803	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
804		talloc_free(r);
805		return false;
806	}
807
808	blob = ndr_push_blob(push);
809	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
810		talloc_free(r);
811		return false;
812	}
813
814	talloc_free(r);
815
816	return true;
817}
818
819
820/* Tables */
821static struct api_struct api_dssetup_cmds[] =
822{
823	{"DSSETUP_DSROLEGETPRIMARYDOMAININFORMATION", NDR_DSSETUP_DSROLEGETPRIMARYDOMAININFORMATION, api_dssetup_DsRoleGetPrimaryDomainInformation},
824	{"DSSETUP_DSROLEDNSNAMETOFLATNAME", NDR_DSSETUP_DSROLEDNSNAMETOFLATNAME, api_dssetup_DsRoleDnsNameToFlatName},
825	{"DSSETUP_DSROLEDCASDC", NDR_DSSETUP_DSROLEDCASDC, api_dssetup_DsRoleDcAsDc},
826	{"DSSETUP_DSROLEDCASREPLICA", NDR_DSSETUP_DSROLEDCASREPLICA, api_dssetup_DsRoleDcAsReplica},
827	{"DSSETUP_DSROLEDEMOTEDC", NDR_DSSETUP_DSROLEDEMOTEDC, api_dssetup_DsRoleDemoteDc},
828	{"DSSETUP_DSROLEGETDCOPERATIONPROGRESS", NDR_DSSETUP_DSROLEGETDCOPERATIONPROGRESS, api_dssetup_DsRoleGetDcOperationProgress},
829	{"DSSETUP_DSROLEGETDCOPERATIONRESULTS", NDR_DSSETUP_DSROLEGETDCOPERATIONRESULTS, api_dssetup_DsRoleGetDcOperationResults},
830	{"DSSETUP_DSROLECANCEL", NDR_DSSETUP_DSROLECANCEL, api_dssetup_DsRoleCancel},
831	{"DSSETUP_DSROLESERVERSAVESTATEFORUPGRADE", NDR_DSSETUP_DSROLESERVERSAVESTATEFORUPGRADE, api_dssetup_DsRoleServerSaveStateForUpgrade},
832	{"DSSETUP_DSROLEUPGRADEDOWNLEVELSERVER", NDR_DSSETUP_DSROLEUPGRADEDOWNLEVELSERVER, api_dssetup_DsRoleUpgradeDownlevelServer},
833	{"DSSETUP_DSROLEABORTDOWNLEVELSERVERUPGRADE", NDR_DSSETUP_DSROLEABORTDOWNLEVELSERVERUPGRADE, api_dssetup_DsRoleAbortDownlevelServerUpgrade},
834};
835
836void dssetup_get_pipe_fns(struct api_struct **fns, int *n_fns)
837{
838	*fns = api_dssetup_cmds;
839	*n_fns = sizeof(api_dssetup_cmds) / sizeof(struct api_struct);
840}
841
842NTSTATUS rpc_dssetup_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const struct ndr_interface_table *table, uint32_t opnum, void *_r)
843{
844	if (cli->pipes_struct == NULL) {
845		return NT_STATUS_INVALID_PARAMETER;
846	}
847
848	switch (opnum)
849	{
850		case NDR_DSSETUP_DSROLEGETPRIMARYDOMAININFORMATION: {
851			struct dssetup_DsRoleGetPrimaryDomainInformation *r = (struct dssetup_DsRoleGetPrimaryDomainInformation *)_r;
852			ZERO_STRUCT(r->out);
853			r->out.info = talloc_zero(mem_ctx, union dssetup_DsRoleInfo);
854			if (r->out.info == NULL) {
855			return NT_STATUS_NO_MEMORY;
856			}
857
858			r->out.result = _dssetup_DsRoleGetPrimaryDomainInformation(cli->pipes_struct, r);
859			return NT_STATUS_OK;
860		}
861
862		case NDR_DSSETUP_DSROLEDNSNAMETOFLATNAME: {
863			struct dssetup_DsRoleDnsNameToFlatName *r = (struct dssetup_DsRoleDnsNameToFlatName *)_r;
864			r->out.result = _dssetup_DsRoleDnsNameToFlatName(cli->pipes_struct, r);
865			return NT_STATUS_OK;
866		}
867
868		case NDR_DSSETUP_DSROLEDCASDC: {
869			struct dssetup_DsRoleDcAsDc *r = (struct dssetup_DsRoleDcAsDc *)_r;
870			r->out.result = _dssetup_DsRoleDcAsDc(cli->pipes_struct, r);
871			return NT_STATUS_OK;
872		}
873
874		case NDR_DSSETUP_DSROLEDCASREPLICA: {
875			struct dssetup_DsRoleDcAsReplica *r = (struct dssetup_DsRoleDcAsReplica *)_r;
876			r->out.result = _dssetup_DsRoleDcAsReplica(cli->pipes_struct, r);
877			return NT_STATUS_OK;
878		}
879
880		case NDR_DSSETUP_DSROLEDEMOTEDC: {
881			struct dssetup_DsRoleDemoteDc *r = (struct dssetup_DsRoleDemoteDc *)_r;
882			r->out.result = _dssetup_DsRoleDemoteDc(cli->pipes_struct, r);
883			return NT_STATUS_OK;
884		}
885
886		case NDR_DSSETUP_DSROLEGETDCOPERATIONPROGRESS: {
887			struct dssetup_DsRoleGetDcOperationProgress *r = (struct dssetup_DsRoleGetDcOperationProgress *)_r;
888			r->out.result = _dssetup_DsRoleGetDcOperationProgress(cli->pipes_struct, r);
889			return NT_STATUS_OK;
890		}
891
892		case NDR_DSSETUP_DSROLEGETDCOPERATIONRESULTS: {
893			struct dssetup_DsRoleGetDcOperationResults *r = (struct dssetup_DsRoleGetDcOperationResults *)_r;
894			r->out.result = _dssetup_DsRoleGetDcOperationResults(cli->pipes_struct, r);
895			return NT_STATUS_OK;
896		}
897
898		case NDR_DSSETUP_DSROLECANCEL: {
899			struct dssetup_DsRoleCancel *r = (struct dssetup_DsRoleCancel *)_r;
900			r->out.result = _dssetup_DsRoleCancel(cli->pipes_struct, r);
901			return NT_STATUS_OK;
902		}
903
904		case NDR_DSSETUP_DSROLESERVERSAVESTATEFORUPGRADE: {
905			struct dssetup_DsRoleServerSaveStateForUpgrade *r = (struct dssetup_DsRoleServerSaveStateForUpgrade *)_r;
906			r->out.result = _dssetup_DsRoleServerSaveStateForUpgrade(cli->pipes_struct, r);
907			return NT_STATUS_OK;
908		}
909
910		case NDR_DSSETUP_DSROLEUPGRADEDOWNLEVELSERVER: {
911			struct dssetup_DsRoleUpgradeDownlevelServer *r = (struct dssetup_DsRoleUpgradeDownlevelServer *)_r;
912			r->out.result = _dssetup_DsRoleUpgradeDownlevelServer(cli->pipes_struct, r);
913			return NT_STATUS_OK;
914		}
915
916		case NDR_DSSETUP_DSROLEABORTDOWNLEVELSERVERUPGRADE: {
917			struct dssetup_DsRoleAbortDownlevelServerUpgrade *r = (struct dssetup_DsRoleAbortDownlevelServerUpgrade *)_r;
918			r->out.result = _dssetup_DsRoleAbortDownlevelServerUpgrade(cli->pipes_struct, r);
919			return NT_STATUS_OK;
920		}
921
922		default:
923			return NT_STATUS_NOT_IMPLEMENTED;
924	}
925}
926
927NTSTATUS rpc_dssetup_init(void)
928{
929	return rpc_srv_register(SMB_RPC_INTERFACE_VERSION, "dssetup", "dssetup", &ndr_table_dssetup, api_dssetup_cmds, sizeof(api_dssetup_cmds) / sizeof(struct api_struct));
930}
931