There appears to be no reason why we have to execute the
authorTim Potter <tpot@samba.org>
Tue, 6 May 2003 02:32:47 +0000 (02:32 +0000)
committerTim Potter <tpot@samba.org>
Tue, 6 May 2003 02:32:47 +0000 (02:32 +0000)
initialisation code in winbindd_init_common() after the fork when
running in dual daemon mode.

The only tricky bit is we have to run a tdb_reopen_all() somewhere in
the child to avoid tdb corruption.

Fixed bug #60.

source/nsswitch/winbindd.c
source/nsswitch/winbindd_dual.c

index ff21a4644f80cfaf1f1e4250e47e318bdc8b54fb..fb6f67625c0da72b44f3ef1080bd84db44269896 100644 (file)
@@ -730,59 +730,6 @@ static void process_loop(void)
        }
 }
 
-
-/*
-  these are split out from the main winbindd for use by the background daemon
- */
-BOOL winbind_setup_common(void)
-{
-       load_interfaces();
-
-       if (!secrets_init()) {
-
-               DEBUG(0,("Could not initialize domain trust account secrets. Giving up\n"));
-               return False;
-       }
-
-       namecache_enable();     /* Enable netbios namecache */
-
-       /* Check winbindd parameters are valid */
-
-       ZERO_STRUCT(server_state);
-
-       if (!winbindd_param_init())
-               return False;
-
-       /* Winbind daemon initialisation */
-
-       if (!winbindd_idmap_init())
-               return False;
-
-       /* Unblock all signals we are interested in as they may have been
-          blocked by the parent process. */
-
-       BlockSignals(False, SIGINT);
-       BlockSignals(False, SIGQUIT);
-       BlockSignals(False, SIGTERM);
-       BlockSignals(False, SIGUSR1);
-       BlockSignals(False, SIGUSR2);
-       BlockSignals(False, SIGHUP);
-
-       /* Setup signal handlers */
-       
-       CatchSignal(SIGINT, termination_handler);      /* Exit on these sigs */
-       CatchSignal(SIGQUIT, termination_handler);
-       CatchSignal(SIGTERM, termination_handler);
-
-       CatchSignal(SIGPIPE, SIG_IGN);                 /* Ignore sigpipe */
-
-       CatchSignal(SIGUSR2, sigusr2_handler);         /* Debugging sigs */
-       CatchSignal(SIGHUP, sighup_handler);
-
-       return True;
-}
-
-
 /* Main function */
 
 struct winbindd_state server_state;   /* Server state information */
@@ -866,6 +813,51 @@ int main(int argc, char **argv)
        if (!init_names())
                exit(1);
 
+       load_interfaces();
+
+       if (!secrets_init()) {
+
+               DEBUG(0,("Could not initialize domain trust account secrets. Giving up\n"));
+               return False;
+       }
+
+       /* Enable netbios namecache */
+
+       namecache_enable();
+
+       /* Check winbindd parameters are valid */
+
+       ZERO_STRUCT(server_state);
+
+       if (!winbindd_param_init())
+               return 1;
+
+       /* Winbind daemon initialisation */
+
+       if (!winbindd_idmap_init())
+               return 1;
+
+       /* Unblock all signals we are interested in as they may have been
+          blocked by the parent process. */
+
+       BlockSignals(False, SIGINT);
+       BlockSignals(False, SIGQUIT);
+       BlockSignals(False, SIGTERM);
+       BlockSignals(False, SIGUSR1);
+       BlockSignals(False, SIGUSR2);
+       BlockSignals(False, SIGHUP);
+
+       /* Setup signal handlers */
+       
+       CatchSignal(SIGINT, termination_handler);      /* Exit on these sigs */
+       CatchSignal(SIGQUIT, termination_handler);
+       CatchSignal(SIGTERM, termination_handler);
+
+       CatchSignal(SIGPIPE, SIG_IGN);                 /* Ignore sigpipe */
+
+       CatchSignal(SIGUSR2, sigusr2_handler);         /* Debugging sigs */
+       CatchSignal(SIGHUP, sighup_handler);
+
        if (!interactive)
                become_daemon(Fork);
 
@@ -880,10 +872,6 @@ int main(int argc, char **argv)
                setpgid( (pid_t)0, (pid_t)0);
 #endif
 
-       if (!winbind_setup_common()) {
-               return 1;
-       }
-
        if (opt_dual_daemon) {
                do_dual_daemon();
        }
index 3597171005cfd5090d26af519c08e5e03a2be911..167630b0e1ff09ac0e8ed8126027a0093412017c 100644 (file)
@@ -166,9 +166,6 @@ void do_dual_daemon(void)
                _exit(0);
        }
        
-       if (!winbind_setup_common()) 
-               _exit(0);
-
        dual_daemon_pipe = -1;
        opt_dual_daemon = False;