From boyang - ensure we never "return" from a forked child, always _exit().
authorJeremy Allison <jra@samba.org>
Tue, 13 Jan 2009 23:42:56 +0000 (15:42 -0800)
committerJeremy Allison <jra@samba.org>
Tue, 13 Jan 2009 23:42:56 +0000 (15:42 -0800)
Jeremy.

source3/winbindd/winbindd_cm.c
source3/winbindd/winbindd_dual.c

index 4e5659d..962b6e6 100644 (file)
@@ -216,7 +216,7 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
        if (!override_logfile) {
                if (asprintf(&lfile, "%s/log.winbindd-dc-connect", get_dyn_LOGFILEBASE()) == -1) {
                        DEBUG(0, ("fork_child_dc_connect: out of memory.\n"));
-                       return false;
+                       _exit(1);
                }
        }
 
@@ -226,7 +226,7 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
                                   MSG_WINBIND_FAILED_TO_GO_ONLINE,
                                   (uint8 *)domain->name,
                                   strlen(domain->name)+1);
-               _exit(0);
+               _exit(1);
        }
        SAFE_FREE(lfile);
 
@@ -238,7 +238,7 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
                                   MSG_WINBIND_FAILED_TO_GO_ONLINE,
                                   (uint8 *)domain->name,
                                   strlen(domain->name)+1);
-               _exit(0);
+               _exit(1);
        }
 
        if ((!get_dcs(mem_ctx, domain, &dcs, &num_dcs)) || (num_dcs == 0)) {
index 9f91153..9be8baf 100644 (file)
@@ -1393,7 +1393,7 @@ static bool fork_domain_child(struct winbindd_child *child)
                        DEBUG(0,("select error occured\n"));
                        TALLOC_FREE(frame);
                        perror("select");
-                       return False;
+                       _exit(1);
                }
 
                /* fetch a request from the main daemon */
@@ -1401,7 +1401,7 @@ static bool fork_domain_child(struct winbindd_child *child)
 
                if (state.finished) {
                        /* we lost contact with our parent */
-                       exit(0);
+                       _exit(0);
                }
 
                DEBUG(4,("child daemon request %d\n", (int)state.request.cmd));