s3/rpc_server: add skeleton mgmt RPC server
authorDavid Disseldorp <ddiss@samba.org>
Mon, 22 Apr 2013 15:20:31 +0000 (17:20 +0200)
committerDavid Disseldorp <ddiss@samba.org>
Tue, 23 Apr 2013 09:57:55 +0000 (11:57 +0200)
source3/Makefile.in
source3/param/loadparm.c
source3/rpc_server/mgmt/srv_mgmt_nt.c [new file with mode: 0644]
source3/rpc_server/rpc_service_setup.c
source3/rpc_server/wscript_build

index 0580b7584e55798900e9918b8c0503f3eb393563..a4aeebab98ad57a899091de6f0103380499f5416 100644 (file)
@@ -398,6 +398,7 @@ LIBNDR_GEN_OBJ = autoconf/librpc/gen_ndr/ndr_wkssvc.o \
                 autoconf/librpc/gen_ndr/ndr_echo.o \
                 autoconf/librpc/gen_ndr/ndr_winreg.o \
                 autoconf/librpc/gen_ndr/ndr_initshutdown.o \
+                autoconf/librpc/gen_ndr/ndr_mgmt.o \
                 autoconf/librpc/gen_ndr/ndr_srvsvc.o \
                 autoconf/librpc/gen_ndr/ndr_eventlog.o \
                 $(LIBNDR_NETLOGON_OBJ) \
@@ -744,6 +745,9 @@ RPC_WINREG_OBJ =  rpc_server/winreg/srv_winreg_nt.o \
 
 RPC_DSSETUP_OBJ =  rpc_server/dssetup/srv_dssetup_nt.o autoconf/librpc/gen_ndr/srv_dssetup.o
 
+RPC_MGMT_OBJ = rpc_server/mgmt/srv_mgmt_nt.o \
+              autoconf/librpc/gen_ndr/srv_mgmt.o
+
 RPC_SRVSVC_OBJ = rpc_server/srvsvc/srv_srvsvc_nt.o \
                 autoconf/librpc/gen_ndr/srv_srvsvc.o
 
@@ -801,6 +805,7 @@ RPC_FSS_AGENT_OBJ = rpc_server/fss/srv_fss_agent.o rpc_server/fss/srv_fss_state.
 RPC_SERVER_OBJ = $(RPC_LSARPC_OBJ) $(RPC_WINREG_OBJ) $(RPC_INITSHUTDOWN_OBJ) \
                 $(RPC_DSSETUP_OBJ) $(RPC_WKSSVC_OBJ) $(RPC_SVCCTL_OBJ) \
                 $(RPC_NTSVCS_OBJ) $(RPC_NETLOGON_OBJ) $(RPC_NETDFS_OBJ) \
+                $(RPC_MGMT_OBJ) \
                 $(RPC_SRVSVC_OBJ) $(RPC_SPOOLSS_OBJ) $(RPC_EVENTLOG_OBJ) \
                 $(RPC_SAMR_OBJ) $(RPC_RPCECHO_OBJ) $(RPC_EPMAPPER_OBJ) \
                 $(RPC_PIPE_OBJ) $(NPA_TSTREAM_OBJ) \
@@ -2549,6 +2554,10 @@ bin/librpc_samr.@SHLIBEXT@: $(BINARY_PREREQS) $(RPC_SAMR_OBJ)
        @echo "Linking $@"
        @$(SHLD_LIBRARY) $(RPC_SAMR_OBJ)
 
+bin/librpc_mgmt.@SHLIBEXT@: $(BINARY_PREREQS) $(RPC_MGMT_OBJ)
+       @echo "Linking $@"
+       @$(SHLD_LIBRARY) $(RPC_MGMT_OBJ)
+
 bin/librpc_srvsvc.@SHLIBEXT@: $(BINARY_PREREQS) $(RPC_SRVSVC_OBJ)
        @echo "Linking $@"
        @$(SHLD_LIBRARY) $(RPC_SRVSVC_OBJ)
index acebff448ea9149f85d3e6a691cfbfd77f9eadce..fb6fad68bae409c984ce49034241d854bd26f2c9 100644 (file)
@@ -4929,6 +4929,7 @@ static bool lp_load_ex(const char *pszFname,
                lp_do_parameter(-1, "rpc_server:default", "external");
                lp_do_parameter(-1, "rpc_server:svcctl", "embedded");
                lp_do_parameter(-1, "rpc_server:srvsvc", "embedded");
+               lp_do_parameter(-1, "rpc_server:mgmt", "embedded");
                lp_do_parameter(-1, "rpc_server:eventlog", "embedded");
                lp_do_parameter(-1, "rpc_server:ntsvcs", "embedded");
                lp_do_parameter(-1, "rpc_server:winreg", "embedded");
diff --git a/source3/rpc_server/mgmt/srv_mgmt_nt.c b/source3/rpc_server/mgmt/srv_mgmt_nt.c
new file mode 100644 (file)
index 0000000..c0a4122
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Unix SMB/CIFS implementation.
+ *
+ * mgmt RPC handlers
+ *
+ * Copyright (C) David Disseldorp      2013
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "includes.h"
+#include "ntdomain.h"
+#include "include/messages.h"
+#include "include/auth.h"
+#include "../libcli/security/security.h"
+#include "../lib/tsocket/tsocket.h"
+#include "../lib/util/tevent_ntstatus.h"
+#include "../lib/smbconf/smbconf.h"
+#include "smbd/proto.h"
+#include "lib/smbconf/smbconf_init.h"
+#include "librpc/gen_ndr/srv_mgmt.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_SRV
+
+WERROR _mgmt_inq_if_ids(struct pipes_struct *p,
+                       struct mgmt_inq_if_ids *r)
+{
+       p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
+       return WERR_NOT_SUPPORTED;
+}
+
+WERROR _mgmt_inq_stats(struct pipes_struct *p,
+                      struct mgmt_inq_stats *r)
+{
+       p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
+       return WERR_NOT_SUPPORTED;
+}
+
+uint32_t _mgmt_is_server_listening(struct pipes_struct *p,
+                                  struct mgmt_is_server_listening *r)
+{
+       *r->out.status = 0;
+       return 1;
+}
+
+WERROR _mgmt_stop_server_listening(struct pipes_struct *p,
+                                  struct mgmt_stop_server_listening *r)
+{
+       p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
+       return WERR_NOT_SUPPORTED;
+}
+
+WERROR _mgmt_inq_princ_name(struct pipes_struct *p,
+                           struct mgmt_inq_princ_name *r)
+{
+       p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
+       return WERR_NOT_SUPPORTED;
+}
index b8bb8aef4492911616c855ed2de8493c1191e94d..e0c7e4349f19c8b922508e05ad32c576b4e41128 100644 (file)
@@ -32,6 +32,7 @@
 #include "../librpc/gen_ndr/srv_eventlog.h"
 #include "../librpc/gen_ndr/srv_initshutdown.h"
 #include "../librpc/gen_ndr/srv_lsa.h"
+#include "../librpc/gen_ndr/srv_mgmt.h"
 #include "../librpc/gen_ndr/srv_netlogon.h"
 #include "../librpc/gen_ndr/srv_ntsvcs.h"
 #include "../librpc/gen_ndr/srv_samr.h"
@@ -443,6 +444,24 @@ static bool rpc_setup_initshutdown(struct tevent_context *ev_ctx,
        return rpc_setup_embedded(ev_ctx, msg_ctx, t, NULL);
 }
 
+static bool rpc_setup_mgmt(struct tevent_context *ev_ctx,
+                          struct messaging_context *msg_ctx)
+{
+       const struct ndr_interface_table *t = &ndr_table_mgmt;
+       NTSTATUS status;
+       enum rpc_service_mode_e service_mode = rpc_service_mode(t->name);
+       if (service_mode != RPC_SERVICE_MODE_EMBEDDED) {
+               return true;
+       }
+
+       status = rpc_mgmt_init(NULL);
+       if (!NT_STATUS_IS_OK(status)) {
+               return false;
+       }
+
+       return rpc_setup_embedded(ev_ctx, msg_ctx, t, NULL);
+}
+
 bool dcesrv_ep_setup(struct tevent_context *ev_ctx,
                     struct messaging_context *msg_ctx)
 {
@@ -526,6 +545,11 @@ bool dcesrv_ep_setup(struct tevent_context *ev_ctx,
                goto done;
        }
 
+       ok = rpc_setup_mgmt(ev_ctx, msg_ctx);
+       if (!ok) {
+               goto done;
+       }
+
 done:
        talloc_free(tmp_ctx);
        return ok;
index 6a075765e837a310e3f316a08ddc1ca0ab98a3be..ba11d005a695eb66e5df8560bacc0ebafc280b7d 100755 (executable)
@@ -9,6 +9,7 @@ RPC_SAMR_SRC = '''samr/srv_samr_nt.c
 RPC_INITSHUTDOWN_SRC = '''initshutdown/srv_initshutdown_nt.c ../../librpc/gen_ndr/srv_initshutdown.c'''
 RPC_WINREG_SRC = '''winreg/srv_winreg_nt.c ../../librpc/gen_ndr/srv_winreg.c'''
 RPC_DSSETUP_SRC = '''dssetup/srv_dssetup_nt.c ../../librpc/gen_ndr/srv_dssetup.c'''
+RPC_MGMT_SRC = '''mgmt/srv_mgmt_nt.c ../../librpc/gen_ndr/srv_mgmt.c'''
 RPC_SRVSVC_SRC = '''srvsvc/srv_srvsvc_nt.c ../../librpc/gen_ndr/srv_srvsvc.c'''
 RPC_WKSSVC_SRC = '''wkssvc/srv_wkssvc_nt.c ../../librpc/gen_ndr/srv_wkssvc.c'''
 RPC_SVCCTL_SRC = '''svcctl/srv_svcctl_nt.c svcctl/srv_svcctl_reg.c ../../librpc/gen_ndr/srv_svcctl.c'''
@@ -116,6 +117,11 @@ bld.SAMBA3_SUBSYSTEM('RPC_NETDFS',
                     deps='samba-util',
                     vars=locals())
 
+bld.SAMBA3_SUBSYSTEM('RPC_MGMT',
+                    source=RPC_MGMT_SRC,
+                    deps='samba-util',
+                    vars=locals())
+
 bld.SAMBA3_SUBSYSTEM('RPC_SRVSVC',
                     source=RPC_SRVSVC_SRC,
                     deps='samba-util tdb',
@@ -149,7 +155,7 @@ bld.SAMBA3_SUBSYSTEM('RPC_FSS_AGENT',
 bld.SAMBA3_SUBSYSTEM('RPC_SERVER',
                     source='srv_pipe_hnd.c srv_pipe.c rpc_sock_helper.c rpc_service_setup.c',
                     deps='''RPC_CONFIG RPC_NCACN_NP RPC_SERVICE RPC_CRYPTO
-                          RPC_SAMR RPC_LSARPC RPC_WINREG RPC_INITSHUTDOWN
+                          RPC_SAMR RPC_LSARPC RPC_WINREG RPC_INITSHUTDOWN RPC_MGMT
                           RPC_DSSETUP RPC_WKSSVC RPC_SVCCTL RPC_NTSVCS
                           RPC_NETLOGON RPC_NETDFS RPC_SRVSVC RPC_SPOOLSS
                           RPC_EVENTLOG RPC_RPCECHO RPC_SERVER RPC_EPMAPPER