2 * Unix SMB/CIFS implementation.
4 * SMBD RPC service callbacks
6 * Copyright (c) 2011 Andreas Schneider <asn@samba.org>
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 3 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, see <http://www.gnu.org/licenses/>.
25 #include "../librpc/gen_ndr/ndr_epmapper_c.h"
26 #include "../librpc/gen_ndr/srv_epmapper.h"
27 #include "../librpc/gen_ndr/srv_srvsvc.h"
28 #include "../librpc/gen_ndr/srv_winreg.h"
29 #include "../librpc/gen_ndr/srv_dfs.h"
30 #include "../librpc/gen_ndr/srv_dssetup.h"
31 #include "../librpc/gen_ndr/srv_echo.h"
32 #include "../librpc/gen_ndr/srv_eventlog.h"
33 #include "../librpc/gen_ndr/srv_initshutdown.h"
34 #include "../librpc/gen_ndr/srv_lsa.h"
35 #include "../librpc/gen_ndr/srv_netlogon.h"
36 #include "../librpc/gen_ndr/srv_ntsvcs.h"
37 #include "../librpc/gen_ndr/srv_samr.h"
38 #include "../librpc/gen_ndr/srv_spoolss.h"
39 #include "../librpc/gen_ndr/srv_svcctl.h"
40 #include "../librpc/gen_ndr/srv_wkssvc.h"
42 #include "printing/nt_printing_migrate_internal.h"
43 #include "rpc_server/eventlog/srv_eventlog_reg.h"
44 #include "rpc_server/svcctl/srv_svcctl_reg.h"
45 #include "rpc_server/spoolss/srv_spoolss_nt.h"
46 #include "rpc_server/svcctl/srv_svcctl_nt.h"
48 #include "librpc/rpc/dcerpc_ep.h"
49 #include "rpc_server/rpc_sock_helper.h"
50 #include "rpc_server/rpc_service_setup.h"
51 #include "rpc_server/rpc_ep_register.h"
52 #include "rpc_server/rpc_server.h"
53 #include "rpc_server/epmapper/srv_epmapper.h"
55 enum rpc_service_mode_e rpc_epmapper_mode(void)
57 const char *rpcsrv_type;
58 enum rpc_service_mode_e state;
60 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
65 if (strcasecmp_m(rpcsrv_type, "external") == 0) {
66 state = RPC_SERVICE_MODE_EXTERNAL;
67 } else if (strcasecmp_m(rpcsrv_type, "daemon") == 0) {
68 state = RPC_SERVICE_MODE_DAEMON;
70 state = RPC_SERVICE_MODE_DISABLED;
76 static bool rpc_setup_epmapper(struct tevent_context *ev_ctx,
77 struct messaging_context *msg_ctx)
79 const char *rpcsrv_type;
82 /* start endpoint mapper only if enabled */
83 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
88 if (strcasecmp_m(rpcsrv_type, "none") == 0) {
89 status = rpc_epmapper_init(NULL);
90 if (!NT_STATUS_IS_OK(rpc_epmapper_init(NULL))) {
95 if (strcasecmp_m(rpcsrv_type, "embedded") == 0) {
96 status = rpc_setup_tcpip_sockets(ev_ctx,
101 if (!NT_STATUS_IS_OK(status)) {
109 static bool rpc_setup_winreg(struct tevent_context *ev_ctx,
110 struct messaging_context *msg_ctx,
111 const struct dcerpc_binding_vector *v)
113 const struct ndr_interface_table *t = &ndr_table_winreg;
114 const char *pipe_name = "winreg";
115 struct dcerpc_binding_vector *v2;
116 const char *rpcsrv_type;
120 status = rpc_winreg_init(NULL);
121 if (!NT_STATUS_IS_OK(status)) {
125 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
130 if (strcasecmp_m(rpcsrv_type, "embedded") == 0 ||
131 strcasecmp_m(rpcsrv_type, "daemon") == 0) {
132 v2 = dcerpc_binding_vector_dup(talloc_tos(), v);
137 status = dcerpc_binding_vector_replace_iface(t, v2);
138 if (!NT_STATUS_IS_OK(status)) {
142 status = dcerpc_binding_vector_add_np_default(t, v2);
143 if (!NT_STATUS_IS_OK(status)) {
147 ok = setup_dcerpc_ncalrpc_socket(ev_ctx,
155 status = dcerpc_binding_vector_add_unix(t, v2, pipe_name);
156 if (!NT_STATUS_IS_OK(status)) {
160 status = rpc_ep_register(ev_ctx,
164 if (!NT_STATUS_IS_OK(status)) {
172 static bool rpc_setup_srvsvc(struct tevent_context *ev_ctx,
173 struct messaging_context *msg_ctx,
174 const struct dcerpc_binding_vector *v)
176 const struct ndr_interface_table *t = &ndr_table_srvsvc;
177 const char *pipe_name = "srvsvc";
178 struct dcerpc_binding_vector *v2;
179 const char *rpcsrv_type;
183 status = rpc_srvsvc_init(NULL);
184 if (!NT_STATUS_IS_OK(status)) {
188 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
193 if (strcasecmp_m(rpcsrv_type, "embedded") == 0 ||
194 strcasecmp_m(rpcsrv_type, "daemon") == 0) {
195 v2 = dcerpc_binding_vector_dup(talloc_tos(), v);
200 status = dcerpc_binding_vector_replace_iface(t, v2);
201 if (!NT_STATUS_IS_OK(status)) {
205 status = dcerpc_binding_vector_add_np_default(t, v2);
206 if (!NT_STATUS_IS_OK(status)) {
210 ok = setup_dcerpc_ncalrpc_socket(ev_ctx,
218 status = dcerpc_binding_vector_add_unix(t, v2, pipe_name);
219 if (!NT_STATUS_IS_OK(status)) {
223 status = rpc_ep_register(ev_ctx,
227 if (!NT_STATUS_IS_OK(status)) {
235 static bool rpc_setup_lsarpc(struct tevent_context *ev_ctx,
236 struct messaging_context *msg_ctx,
237 const struct dcerpc_binding_vector *v)
239 const struct ndr_interface_table *t = &ndr_table_lsarpc;
240 const char *pipe_name = "lsarpc";
241 struct dcerpc_binding_vector *v2;
242 const char *rpcsrv_type;
246 status = rpc_lsarpc_init(NULL);
247 if (!NT_STATUS_IS_OK(status)) {
251 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
256 if (strcasecmp_m(rpcsrv_type, "embedded") == 0 ||
257 strcasecmp_m(rpcsrv_type, "daemon") == 0) {
258 v2 = dcerpc_binding_vector_dup(talloc_tos(), v);
263 status = dcerpc_binding_vector_replace_iface(t, v2);
264 if (!NT_STATUS_IS_OK(status)) {
268 status = dcerpc_binding_vector_add_np_default(t, v2);
269 if (!NT_STATUS_IS_OK(status)) {
273 ok = setup_dcerpc_ncalrpc_socket(ev_ctx,
281 status = dcerpc_binding_vector_add_unix(t, v2, pipe_name);
282 if (!NT_STATUS_IS_OK(status)) {
286 status = rpc_ep_register(ev_ctx,
290 if (!NT_STATUS_IS_OK(status)) {
298 static bool rpc_setup_samr(struct tevent_context *ev_ctx,
299 struct messaging_context *msg_ctx,
300 const struct dcerpc_binding_vector *v)
302 const struct ndr_interface_table *t = &ndr_table_samr;
303 const char *pipe_name = "samr";
304 struct dcerpc_binding_vector *v2;
305 const char *rpcsrv_type;
309 status = rpc_samr_init(NULL);
310 if (!NT_STATUS_IS_OK(status)) {
314 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
319 if (strcasecmp_m(rpcsrv_type, "embedded") == 0 ||
320 strcasecmp_m(rpcsrv_type, "daemon") == 0) {
321 v2 = dcerpc_binding_vector_dup(talloc_tos(), v);
326 status = dcerpc_binding_vector_replace_iface(t, v2);
327 if (!NT_STATUS_IS_OK(status)) {
331 status = dcerpc_binding_vector_add_np_default(t, v2);
332 if (!NT_STATUS_IS_OK(status)) {
336 ok = setup_dcerpc_ncalrpc_socket(ev_ctx,
344 status = dcerpc_binding_vector_add_unix(t, v2, pipe_name);
345 if (!NT_STATUS_IS_OK(status)) {
349 status = rpc_ep_register(ev_ctx,
353 if (!NT_STATUS_IS_OK(status)) {
361 static bool rpc_setup_netlogon(struct tevent_context *ev_ctx,
362 struct messaging_context *msg_ctx,
363 const struct dcerpc_binding_vector *v)
365 const struct ndr_interface_table *t = &ndr_table_netlogon;
366 const char *pipe_name = "netlogon";
367 struct dcerpc_binding_vector *v2;
368 const char *rpcsrv_type;
372 status = rpc_netlogon_init(NULL);
373 if (!NT_STATUS_IS_OK(status)) {
377 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
382 if (strcasecmp_m(rpcsrv_type, "embedded") == 0 ||
383 strcasecmp_m(rpcsrv_type, "daemon") == 0) {
384 v2 = dcerpc_binding_vector_dup(talloc_tos(), v);
389 status = dcerpc_binding_vector_replace_iface(t, v2);
390 if (!NT_STATUS_IS_OK(status)) {
394 status = dcerpc_binding_vector_add_np_default(t, v2);
395 if (!NT_STATUS_IS_OK(status)) {
399 ok = setup_dcerpc_ncalrpc_socket(ev_ctx,
407 status = dcerpc_binding_vector_add_unix(t, v2, pipe_name);
408 if (!NT_STATUS_IS_OK(status)) {
412 status = rpc_ep_register(ev_ctx,
416 if (!NT_STATUS_IS_OK(status)) {
424 static bool rpc_setup_netdfs(struct tevent_context *ev_ctx,
425 struct messaging_context *msg_ctx,
426 const struct dcerpc_binding_vector *v)
428 const struct ndr_interface_table *t = &ndr_table_netdfs;
429 const char *pipe_name = "netdfs";
430 struct dcerpc_binding_vector *v2;
431 const char *rpcsrv_type;
435 status = rpc_netdfs_init(NULL);
436 if (!NT_STATUS_IS_OK(status)) {
440 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
445 if (strcasecmp_m(rpcsrv_type, "embedded") == 0 ||
446 strcasecmp_m(rpcsrv_type, "daemon") == 0) {
447 v2 = dcerpc_binding_vector_dup(talloc_tos(), v);
452 status = dcerpc_binding_vector_replace_iface(t, v2);
453 if (!NT_STATUS_IS_OK(status)) {
457 status = dcerpc_binding_vector_add_np_default(t, v2);
458 if (!NT_STATUS_IS_OK(status)) {
462 ok = setup_dcerpc_ncalrpc_socket(ev_ctx,
470 status = dcerpc_binding_vector_add_unix(t, v2, pipe_name);
471 if (!NT_STATUS_IS_OK(status)) {
475 status = rpc_ep_register(ev_ctx,
479 if (!NT_STATUS_IS_OK(status)) {
488 static bool rpc_setup_rpcecho(struct tevent_context *ev_ctx,
489 struct messaging_context *msg_ctx,
490 const struct dcerpc_binding_vector *v)
492 const struct ndr_interface_table *t = &ndr_table_rpcecho;
493 const char *pipe_name = "rpcecho";
494 struct dcerpc_binding_vector *v2;
495 const char *rpcsrv_type;
499 status = rpc_rpcecho_init(NULL);
500 if (!NT_STATUS_IS_OK(status)) {
504 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
509 if (strcasecmp_m(rpcsrv_type, "embedded") == 0 ||
510 strcasecmp_m(rpcsrv_type, "daemon") == 0) {
511 v2 = dcerpc_binding_vector_dup(talloc_tos(), v);
516 status = dcerpc_binding_vector_replace_iface(t, v2);
517 if (!NT_STATUS_IS_OK(status)) {
521 status = dcerpc_binding_vector_add_np_default(t, v2);
522 if (!NT_STATUS_IS_OK(status)) {
526 ok = setup_dcerpc_ncalrpc_socket(ev_ctx,
534 status = dcerpc_binding_vector_add_unix(t, v2, pipe_name);
535 if (!NT_STATUS_IS_OK(status)) {
539 status = rpc_ep_register(ev_ctx,
543 if (!NT_STATUS_IS_OK(status)) {
552 static bool rpc_setup_dssetup(struct tevent_context *ev_ctx,
553 struct messaging_context *msg_ctx,
554 const struct dcerpc_binding_vector *v)
556 const struct ndr_interface_table *t = &ndr_table_dssetup;
557 const char *pipe_name = "dssetup";
558 struct dcerpc_binding_vector *v2;
559 const char *rpcsrv_type;
563 status = rpc_dssetup_init(NULL);
564 if (!NT_STATUS_IS_OK(status)) {
568 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
573 if (strcasecmp_m(rpcsrv_type, "embedded") == 0 ||
574 strcasecmp_m(rpcsrv_type, "daemon") == 0) {
575 v2 = dcerpc_binding_vector_dup(talloc_tos(), v);
580 status = dcerpc_binding_vector_replace_iface(t, v2);
581 if (!NT_STATUS_IS_OK(status)) {
585 status = dcerpc_binding_vector_add_np_default(t, v2);
586 if (!NT_STATUS_IS_OK(status)) {
590 ok = setup_dcerpc_ncalrpc_socket(ev_ctx,
598 status = dcerpc_binding_vector_add_unix(t, v2, pipe_name);
599 if (!NT_STATUS_IS_OK(status)) {
603 status = rpc_ep_register(ev_ctx,
607 if (!NT_STATUS_IS_OK(status)) {
615 static bool rpc_setup_wkssvc(struct tevent_context *ev_ctx,
616 struct messaging_context *msg_ctx,
617 const struct dcerpc_binding_vector *v)
619 const struct ndr_interface_table *t = &ndr_table_wkssvc;
620 const char *pipe_name = "wkssvc";
621 struct dcerpc_binding_vector *v2;
622 const char *rpcsrv_type;
626 status = rpc_wkssvc_init(NULL);
627 if (!NT_STATUS_IS_OK(status)) {
631 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
636 if (strcasecmp_m(rpcsrv_type, "embedded") == 0 ||
637 strcasecmp_m(rpcsrv_type, "daemon") == 0) {
638 v2 = dcerpc_binding_vector_dup(talloc_tos(), v);
643 status = dcerpc_binding_vector_replace_iface(t, v2);
644 if (!NT_STATUS_IS_OK(status)) {
648 status = dcerpc_binding_vector_add_np_default(t, v2);
649 if (!NT_STATUS_IS_OK(status)) {
653 ok = setup_dcerpc_ncalrpc_socket(ev_ctx,
661 status = dcerpc_binding_vector_add_unix(t, v2, pipe_name);
662 if (!NT_STATUS_IS_OK(status)) {
666 status = rpc_ep_register(ev_ctx,
670 if (!NT_STATUS_IS_OK(status)) {
678 static bool spoolss_init_cb(void *ptr)
680 struct messaging_context *msg_ctx =
681 talloc_get_type_abort(ptr, struct messaging_context);
685 * Migrate the printers first.
687 ok = nt_printing_tdb_migrate(msg_ctx);
695 static bool spoolss_shutdown_cb(void *ptr)
697 srv_spoolss_cleanup();
702 static bool rpc_setup_spoolss(struct tevent_context *ev_ctx,
703 struct messaging_context *msg_ctx)
705 const struct ndr_interface_table *t = &ndr_table_spoolss;
706 struct rpc_srv_callbacks spoolss_cb;
707 const char *rpcsrv_type;
708 struct dcerpc_binding_vector *v;
711 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
716 if (strcasecmp_m(rpcsrv_type, "embedded") == 0) {
717 spoolss_cb.init = spoolss_init_cb;
718 spoolss_cb.shutdown = spoolss_shutdown_cb;
719 spoolss_cb.private_data = msg_ctx;
721 status = rpc_spoolss_init(&spoolss_cb);
722 } else if (strcasecmp_m(rpcsrv_type, "daemon") == 0 ||
723 strcasecmp_m(rpcsrv_type, "external") == 0) {
724 status = rpc_spoolss_init(NULL);
726 if (!NT_STATUS_IS_OK(status)) {
730 if (strcasecmp_m(rpcsrv_type, "embedded")) {
731 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
736 if (strcasecmp_m(rpcsrv_type, "embedded") == 0 ||
737 strcasecmp_m(rpcsrv_type, "daemon") == 0) {
738 status = dcerpc_binding_vector_new(talloc_tos(), &v);
739 if (!NT_STATUS_IS_OK(status)) {
743 status = dcerpc_binding_vector_add_np_default(t, v);
744 if (!NT_STATUS_IS_OK(status)) {
748 status = rpc_ep_register(ev_ctx,
752 if (!NT_STATUS_IS_OK(status)) {
761 static bool svcctl_init_cb(void *ptr)
763 struct messaging_context *msg_ctx =
764 talloc_get_type_abort(ptr, struct messaging_context);
767 /* initialize the control hooks */
768 init_service_op_table();
770 ok = svcctl_init_winreg(msg_ctx);
778 static bool svcctl_shutdown_cb(void *ptr)
780 shutdown_service_op_table();
785 static bool rpc_setup_svcctl(struct tevent_context *ev_ctx,
786 struct messaging_context *msg_ctx)
788 const struct ndr_interface_table *t = &ndr_table_svcctl;
789 const char *pipe_name = "svcctl";
790 struct dcerpc_binding_vector *v;
791 struct rpc_srv_callbacks svcctl_cb;
792 const char *rpcsrv_type;
796 svcctl_cb.init = svcctl_init_cb;
797 svcctl_cb.shutdown = svcctl_shutdown_cb;
798 svcctl_cb.private_data = msg_ctx;
800 status = rpc_svcctl_init(&svcctl_cb);
801 if (!NT_STATUS_IS_OK(status)) {
805 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
810 if (strcasecmp_m(rpcsrv_type, "embedded") == 0 ||
811 strcasecmp_m(rpcsrv_type, "daemon") == 0) {
812 status = dcerpc_binding_vector_new(talloc_tos(), &v);
813 if (!NT_STATUS_IS_OK(status)) {
817 status = dcerpc_binding_vector_add_np_default(t, v);
818 if (!NT_STATUS_IS_OK(status)) {
822 ok = setup_dcerpc_ncalrpc_socket(ev_ctx,
830 status = dcerpc_binding_vector_add_unix(t, v, pipe_name);
831 if (!NT_STATUS_IS_OK(status)) {
835 status = rpc_ep_register(ev_ctx,
839 if (!NT_STATUS_IS_OK(status)) {
847 static bool rpc_setup_ntsvcs(struct tevent_context *ev_ctx,
848 struct messaging_context *msg_ctx)
850 const struct ndr_interface_table *t = &ndr_table_ntsvcs;
851 struct dcerpc_binding_vector *v;
852 const char *rpcsrv_type;
855 status = rpc_ntsvcs_init(NULL);
856 if (!NT_STATUS_IS_OK(status)) {
860 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
865 if (strcasecmp_m(rpcsrv_type, "embedded") == 0 ||
866 strcasecmp_m(rpcsrv_type, "daemon") == 0) {
867 status = dcerpc_binding_vector_new(talloc_tos(), &v);
868 if (!NT_STATUS_IS_OK(status)) {
872 status = dcerpc_binding_vector_add_np_default(t, v);
873 if (!NT_STATUS_IS_OK(status)) {
877 status = rpc_ep_register(ev_ctx,
881 if (!NT_STATUS_IS_OK(status)) {
889 static bool eventlog_init_cb(void *ptr)
891 struct messaging_context *msg_ctx =
892 talloc_get_type_abort(ptr, struct messaging_context);
895 ok = eventlog_init_winreg(msg_ctx);
903 static bool rpc_setup_eventlog(struct tevent_context *ev_ctx,
904 struct messaging_context *msg_ctx)
906 const struct ndr_interface_table *t = &ndr_table_eventlog;
907 struct rpc_srv_callbacks eventlog_cb;
908 struct dcerpc_binding_vector *v;
909 const char *rpcsrv_type;
912 eventlog_cb.init = eventlog_init_cb;
913 eventlog_cb.shutdown = NULL;
914 eventlog_cb.private_data = msg_ctx;
916 status = rpc_eventlog_init(&eventlog_cb);
917 if (!NT_STATUS_IS_OK(status)) {
921 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
926 if (strcasecmp_m(rpcsrv_type, "embedded") == 0 ||
927 strcasecmp_m(rpcsrv_type, "daemon") == 0) {
928 status = dcerpc_binding_vector_new(talloc_tos(), &v);
929 if (!NT_STATUS_IS_OK(status)) {
933 status = dcerpc_binding_vector_add_np_default(t, v);
934 if (!NT_STATUS_IS_OK(status)) {
938 status = rpc_ep_register(ev_ctx,
942 if (!NT_STATUS_IS_OK(status)) {
950 static bool rpc_setup_initshutdown(struct tevent_context *ev_ctx,
951 struct messaging_context *msg_ctx)
953 const struct ndr_interface_table *t = &ndr_table_initshutdown;
954 struct dcerpc_binding_vector *v;
955 const char *rpcsrv_type;
958 status = rpc_initshutdown_init(NULL);
959 if (!NT_STATUS_IS_OK(status)) {
963 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
968 if (strcasecmp_m(rpcsrv_type, "embedded") == 0 ||
969 strcasecmp_m(rpcsrv_type, "daemon") == 0) {
970 status = dcerpc_binding_vector_new(talloc_tos(), &v);
971 if (!NT_STATUS_IS_OK(status)) {
975 status = dcerpc_binding_vector_add_np_default(t, v);
976 if (!NT_STATUS_IS_OK(status)) {
980 status = rpc_ep_register(ev_ctx,
984 if (!NT_STATUS_IS_OK(status)) {
992 bool dcesrv_ep_setup(struct tevent_context *ev_ctx,
993 struct messaging_context *msg_ctx)
995 struct dcerpc_binding_vector *v;
996 const char *rpcsrv_type;
1001 tmp_ctx = talloc_stackframe();
1002 if (tmp_ctx == NULL) {
1006 status = dcerpc_binding_vector_new(tmp_ctx,
1008 if (!NT_STATUS_IS_OK(status)) {
1013 ok = rpc_setup_epmapper(ev_ctx, msg_ctx);
1018 rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
1023 if (strcasecmp_m(rpcsrv_type, "yes") == 0 ||
1024 strcasecmp_m(rpcsrv_type, "true") == 0) {
1025 status = rpc_setup_tcpip_sockets(ev_ctx,
1030 if (!NT_STATUS_IS_OK(status)) {
1036 ok = rpc_setup_winreg(ev_ctx, msg_ctx, v);
1041 ok = rpc_setup_srvsvc(ev_ctx, msg_ctx, v);
1046 ok = rpc_setup_lsarpc(ev_ctx, msg_ctx, v);
1051 ok = rpc_setup_samr(ev_ctx, msg_ctx, v);
1056 ok = rpc_setup_netlogon(ev_ctx, msg_ctx, v);
1061 ok = rpc_setup_netdfs(ev_ctx, msg_ctx, v);
1067 ok = rpc_setup_rpcecho(ev_ctx, msg_ctx, v);
1073 ok = rpc_setup_dssetup(ev_ctx, msg_ctx, v);
1078 ok = rpc_setup_wkssvc(ev_ctx, msg_ctx, v);
1083 ok = rpc_setup_spoolss(ev_ctx, msg_ctx);
1088 ok = rpc_setup_svcctl(ev_ctx, msg_ctx);
1093 ok = rpc_setup_ntsvcs(ev_ctx, msg_ctx);
1098 ok = rpc_setup_eventlog(ev_ctx, msg_ctx);
1103 ok = rpc_setup_initshutdown(ev_ctx, msg_ctx);
1109 talloc_free(tmp_ctx);
1113 /* vim: set ts=8 sw=8 noet cindent ft=c.doxygen: */