Fix bug #5504. winbindd children and parent were handing SIGTERM in the same way...
authorJeremy Allison <jra@samba.org>
Sat, 31 May 2008 00:52:54 +0000 (17:52 -0700)
committerJeremy Allison <jra@samba.org>
Sat, 31 May 2008 00:52:54 +0000 (17:52 -0700)
Jeremy.
(This used to be commit 3ab5a3883e33eba159152aa02544d71f047c7e45)

source3/winbindd/winbindd.c
source3/winbindd/winbindd_dual.c
source3/winbindd/winbindd_proto.h

index 57eee20f49dfd7ad80e7d257d0a83a3e4f59df6e..c017916f09a5a7c4ff32cd6b421c17f3f7546e70 100644 (file)
@@ -131,15 +131,20 @@ static void flush_caches(void)
 
 /* Handle the signal by unlinking socket and exiting */
 
-static void terminate(void)
+static void terminate(bool is_parent)
 {
-       char *path = NULL;
-
-       /* Remove socket file */
-       if (asprintf(&path, "%s/%s",
+       if (is_parent) {
+               /* When parent goes away we should
+                * remove the socket file. Not so
+                * when children terminate.
+                */ 
+               char *path = NULL;
+
+               if (asprintf(&path, "%s/%s",
                        get_winbind_pipe_dir(), WINBINDD_SOCKET_NAME) > 0) {
-               unlink(path);
-               SAFE_FREE(path);
+                       unlink(path);
+                       SAFE_FREE(path);
+               }
        }
 
        idmap_close();
@@ -810,10 +815,10 @@ void winbind_check_sighup(void)
 }
 
 /* check if TERM has been received */
-void winbind_check_sigterm(void)
+void winbind_check_sigterm(bool is_parent)
 {
        if (do_sigterm)
-               terminate();
+               terminate(is_parent);
 }
 
 /* Process incoming clients on listen_sock.  We use a tricky non-blocking,
@@ -975,7 +980,7 @@ static void process_loop(void)
 
        /* Check signal handling things */
 
-       winbind_check_sigterm();
+       winbind_check_sigterm(true);
        winbind_check_sighup();
 
        if (do_sigusr2) {
index ae042563ed37b368797467563b9e3b5bb0f97c37..b8c0ab9113ff026e539a5c498dc026dbf7e73c00 100644 (file)
@@ -1097,7 +1097,7 @@ static bool fork_domain_child(struct winbindd_child *child)
                TALLOC_CTX *frame = talloc_stackframe();
 
                /* check for signals */
-               winbind_check_sigterm();
+               winbind_check_sigterm(false);
                winbind_check_sighup();
 
                run_events(winbind_event_context(), 0, NULL, NULL);
index f6a0da8fff0ddcbe1dc89676ab0fee3d997fe713..356d4aaf79aed15ff55ab6d3b0576412e12c4765 100644 (file)
@@ -67,7 +67,7 @@ void request_error(struct winbindd_cli_state *state);
 void request_ok(struct winbindd_cli_state *state);
 void request_finished_cont(void *private_data, bool success);
 void winbind_check_sighup(void);
-void winbind_check_sigterm(void);
+void winbind_check_sigterm(bool in_parent);
 int main(int argc, char **argv, char **envp);
 
 /* The following definitions come from winbindd/winbindd_ads.c  */