s3-epmd: Cleanup endpoint mapper correctly.
authorAndreas Schneider <asn@samba.org>
Mon, 14 Mar 2011 13:50:09 +0000 (14:50 +0100)
committerAndreas Schneider <asn@samba.org>
Thu, 24 Mar 2011 08:25:50 +0000 (09:25 +0100)
(cherry picked from commit d6a1469f4350fa24204e11bb9aee0e33f8d21c34)

source3/rpc_server/epmd.c

index 159c04c485c961080d693cee40a40fe2c8123e54..0b5d671775bb6d577666d997666ae03cae296ebf 100644 (file)
@@ -25,6 +25,7 @@
 #include "../librpc/gen_ndr/messaging.h"
 #include "../librpc/gen_ndr/srv_epmapper.h"
 #include "rpc_server/rpc_server.h"
+#include "rpc_server/epmapper/srv_epmapper.h"
 
 #define DAEMON_NAME "epmd"
 
@@ -141,6 +142,8 @@ static void epmd_sig_term_handler(struct tevent_context *ev,
                                  void *siginfo,
                                  void *private_data)
 {
+       rpc_epmapper_shutdown();
+
        exit_server_cleanly("termination signal");
 }
 
@@ -186,14 +189,25 @@ static void epmd_setup_sig_hup_handler(struct tevent_context *ev_ctx,
        }
 }
 
+static bool epmapper_shutdown_cb(void *ptr) {
+       srv_epmapper_cleanup();
+
+       return true;
+}
+
 void start_epmd(struct tevent_context *ev_ctx,
                struct messaging_context *msg_ctx)
 {
+       struct rpc_srv_callbacks epmapper_cb;
        NTSTATUS status;
        pid_t pid;
        bool ok;
        int rc;
 
+       epmapper_cb.init = NULL;
+       epmapper_cb.shutdown = epmapper_shutdown_cb;
+       epmapper_cb.private_data = NULL;
+
        DEBUG(1, ("Forking Endpoint Mapper Daemon\n"));
 
        pid = sys_fork();
@@ -239,7 +253,7 @@ void start_epmd(struct tevent_context *ev_ctx,
                           MSG_SMB_CONF_UPDATED,
                           epmd_smb_conf_updated);
 
-       status = rpc_epmapper_init(NULL);
+       status = rpc_epmapper_init(&epmapper_cb);
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(0, ("Failed to register epmd rpc inteface! (%s)\n",
                          nt_errstr(status)));