]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3:rpc_server: Reinitialize dcesrv_context in external mdssd daemon
authorSamuel Cabrero <scabrero@suse.de>
Tue, 26 Feb 2019 14:52:43 +0000 (15:52 +0100)
committerSamuel Cabrero <scabrero@sn-devel-184>
Fri, 20 Mar 2020 15:36:32 +0000 (15:36 +0000)
Signed-off-by: Samuel Cabrero <scabrero@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source3/rpc_server/mdssd.c
source3/rpc_server/mdssd.h
source3/smbd/server.c

index 931cb838ddbf03f371bd7c17d27145d0fc2a0575..494a9b9384ae37a3bbe1d6622330dc565f4c3902 100644 (file)
@@ -29,6 +29,7 @@
 #include "lib/server_prefork.h"
 #include "lib/server_prefork_util.h"
 #include "librpc/rpc/dcerpc_ep.h"
+#include "librpc/rpc/dcesrv_core.h"
 
 #include "rpc_server/rpc_server.h"
 #include "rpc_server/rpc_ep_register.h"
@@ -59,9 +60,6 @@ static struct pf_daemon_config default_pf_mdssd_cfg = {
 };
 static struct pf_daemon_config pf_mdssd_cfg = { 0 };
 
-void start_mdssd(struct tevent_context *ev_ctx,
-                struct messaging_context *msg_ctx);
-
 static void mdssd_smb_conf_updated(struct messaging_context *msg,
                                   void *private_data,
                                   uint32_t msg_type,
@@ -605,7 +603,8 @@ done:
 }
 
 void start_mdssd(struct tevent_context *ev_ctx,
-                struct messaging_context *msg_ctx)
+                struct messaging_context *msg_ctx,
+                struct dcesrv_context *dce_ctx)
 {
        NTSTATUS status;
        struct pf_listen_fd listen_fd[MDSSD_MAX_SOCKETS];
@@ -672,6 +671,15 @@ void start_mdssd(struct tevent_context *ev_ctx,
                exit(1);
        }
 
+       DBG_INFO("Reinitializing DCE/RPC server context\n");
+
+       status = dcesrv_reinit_context(dce_ctx);
+       if (!NT_STATUS_IS_OK(status)) {
+               DBG_ERR("Failed to reinit DCE/RPC context: %s\n",
+                       nt_errstr(status));
+               exit(1);
+       }
+
        ok = mdssd_create_sockets(ev_ctx, msg_ctx, listen_fd, &listen_fd_size);
        if (!ok) {
                exit(1);
index 3747dc8e0aed9555acee56ddb733a5f9908dfe0a..8a008b43227b4acf8f3dd67ee0201e52643272bc 100644 (file)
 #include "replace.h"
 #include "messages.h"
 
+struct dcesrv_context;
+
 void start_mdssd(struct tevent_context *ev_ctx,
-                struct messaging_context *msg_ctx);
+                struct messaging_context *msg_ctx,
+                struct dcesrv_context *dce_ctx);
 
 #endif
index f1c461eb1eab36180cf3ad61c70f1342d7b33be0..f00bd56209d1ea717e778ce2d4c93fd7a3ff869a 100644 (file)
@@ -2129,7 +2129,7 @@ extern void build_options(bool screen);
 #ifdef WITH_SPOTLIGHT
                if ((rpc_mdssvc_mode() == RPC_SERVICE_MODE_EXTERNAL) &&
                    (rpc_mdssd_daemon() == RPC_DAEMON_FORK)) {
-                       start_mdssd(ev_ctx, msg_ctx);
+                       start_mdssd(ev_ctx, msg_ctx, dce_ctx);
                }
 #endif
        } else if (!lp__disable_spoolss() &&