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) \
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
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) \
@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)
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");
--- /dev/null
+/*
+ * 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;
+}
#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"
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)
{
goto done;
}
+ ok = rpc_setup_mgmt(ev_ctx, msg_ctx);
+ if (!ok) {
+ goto done;
+ }
+
done:
talloc_free(tmp_ctx);
return ok;
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'''
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',
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