From 250c02554ec3dd52f33e33406fdd605f5d932d5f Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 21 Mar 2006 13:16:50 +0000 Subject: r14618: add --no-process-group to all server programms to make the following possible: timelimit 20000 bin/nmbd -F -S --no-process-group timelimit 20000 bin/smbd -F -S --no-process-group this is needed to 'make test' working without losing child processes metze (This used to be commit c3a9f30e2a12cc852c9fa3a7d161f5c6ee0694ce) --- source3/lib/util.c | 6 +++--- source3/nmbd/nmbd.c | 6 ++++-- source3/nsswitch/winbindd.c | 6 ++++-- source3/smbd/server.c | 7 +++++-- source3/web/startstop.c | 6 +++--- 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/source3/lib/util.c b/source3/lib/util.c index 6e0a7c0e2f..121beeecc0 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -823,7 +823,7 @@ void smb_msleep(unsigned int t) Become a daemon, discarding the controlling terminal. ****************************************************************************/ -void become_daemon(BOOL Fork) +void become_daemon(BOOL Fork, BOOL no_process_group) { if (Fork) { if (sys_fork()) { @@ -833,9 +833,9 @@ void become_daemon(BOOL Fork) /* detach from the terminal */ #ifdef HAVE_SETSID - setsid(); + if (!no_process_group) setsid(); #elif defined(TIOCNOTTY) - { + if (!no_process_group) { int i = sys_open("/dev/tty", O_RDWR, 0); if (i != -1) { ioctl(i, (int) TIOCNOTTY, (char *)0); diff --git a/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c index 38183159a2..f58c389fc9 100644 --- a/source3/nmbd/nmbd.c +++ b/source3/nmbd/nmbd.c @@ -658,11 +658,13 @@ static BOOL open_sockets(BOOL isdaemon, int port) static BOOL opt_interactive; poptContext pc; static char *p_lmhosts = dyn_LMHOSTSFILE; + static BOOL no_process_group = False; struct poptOption long_options[] = { POPT_AUTOHELP {"daemon", 'D', POPT_ARG_VAL, &is_daemon, True, "Become a daemon(default)" }, {"interactive", 'i', POPT_ARG_VAL, &opt_interactive, True, "Run interactive (not a daemon)" }, {"foreground", 'F', POPT_ARG_VAL, &Fork, False, "Run daemon in foreground (for daemontools & etc)" }, + {"no-process-group", 0, POPT_ARG_VAL, &no_process_group, True, "Don't create a new process group" }, {"log-stdout", 'S', POPT_ARG_VAL, &log_stdout, True, "Log to stdout" }, {"hosts", 'H', POPT_ARG_STRING, &p_lmhosts, 'H', "Load a netbios hosts file"}, {"port", 'p', POPT_ARG_INT, &global_nmb_port, NMB_PORT, "Listen on the specified port" }, @@ -749,7 +751,7 @@ static BOOL open_sockets(BOOL isdaemon, int port) if (is_daemon && !opt_interactive) { DEBUG( 2, ( "Becoming a daemon.\n" ) ); - become_daemon(Fork); + become_daemon(Fork, no_process_group); } #if HAVE_SETPGID @@ -757,7 +759,7 @@ static BOOL open_sockets(BOOL isdaemon, int port) * If we're interactive we want to set our own process group for * signal management. */ - if (opt_interactive) + if (opt_interactive && !no_process_group) setpgid( (pid_t)0, (pid_t)0 ); #endif diff --git a/source3/nsswitch/winbindd.c b/source3/nsswitch/winbindd.c index dc62a8563a..72dd39373b 100644 --- a/source3/nsswitch/winbindd.c +++ b/source3/nsswitch/winbindd.c @@ -912,10 +912,12 @@ int main(int argc, char **argv) pstring logfile; static BOOL Fork = True; static BOOL log_stdout = False; + static BOOL no_process_group = False; struct poptOption long_options[] = { POPT_AUTOHELP { "stdout", 'S', POPT_ARG_VAL, &log_stdout, True, "Log to stdout" }, { "foreground", 'F', POPT_ARG_VAL, &Fork, False, "Daemon in foreground mode" }, + { "no-process-group", 0, POPT_ARG_VAL, &no_process_group, True, "Don't create a new process group" }, { "interactive", 'i', POPT_ARG_NONE, NULL, 'i', "Interactive mode" }, { "no-caching", 'n', POPT_ARG_VAL, &opt_nocache, True, "Disable caching" }, POPT_COMMON_SAMBA @@ -1036,7 +1038,7 @@ int main(int argc, char **argv) CatchSignal(SIGHUP, sighup_handler); if (!interactive) - become_daemon(Fork); + become_daemon(Fork, no_process_group); pidfile_create("winbindd"); @@ -1045,7 +1047,7 @@ int main(int argc, char **argv) * If we're interactive we want to set our own process group for * signal management. */ - if (interactive) + if (interactive && !no_process_group) setpgid( (pid_t)0, (pid_t)0); #endif diff --git a/source3/smbd/server.c b/source3/smbd/server.c index 2e96b4ceb9..46ab191530 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -715,6 +715,7 @@ void build_options(BOOL screen); static BOOL is_daemon = False; static BOOL interactive = False; static BOOL Fork = True; + static BOOL no_process_group = False; static BOOL log_stdout = False; static char *ports = NULL; int opt; @@ -725,6 +726,7 @@ void build_options(BOOL screen); {"daemon", 'D', POPT_ARG_VAL, &is_daemon, True, "Become a daemon (default)" }, {"interactive", 'i', POPT_ARG_VAL, &interactive, True, "Run interactive (not a daemon)"}, {"foreground", 'F', POPT_ARG_VAL, &Fork, False, "Run daemon in foreground (for daemontools & etc)" }, + {"no-process-group", 0, POPT_ARG_VAL, &no_process_group, True, "Don't create a new process group" }, {"log-stdout", 'S', POPT_ARG_VAL, &log_stdout, True, "Log to stdout" }, {"build-options", 'b', POPT_ARG_NONE, NULL, 'b', "Print build options" }, {"port", 'p', POPT_ARG_STRING, &ports, 0, "Listen on the specified ports"}, @@ -865,7 +867,7 @@ void build_options(BOOL screen); if (is_daemon && !interactive) { DEBUG( 3, ( "Becoming a daemon.\n" ) ); - become_daemon(Fork); + become_daemon(Fork, no_process_group); } #if HAVE_SETPGID @@ -873,8 +875,9 @@ void build_options(BOOL screen); * If we're interactive we want to set our own process group for * signal management. */ - if (interactive) + if (interactive && !no_process_group) { setpgid( (pid_t)0, (pid_t)0); + } #endif if (!directory_exist(lp_lockdir(), NULL)) diff --git a/source3/web/startstop.c b/source3/web/startstop.c index 8f28748918..44945cd536 100644 --- a/source3/web/startstop.c +++ b/source3/web/startstop.c @@ -36,7 +36,7 @@ void start_smbd(void) slprintf(binfile, sizeof(pstring) - 1, "%s/smbd", dyn_SBINDIR); - become_daemon(True); + become_daemon(True, False); execl(binfile, binfile, "-D", NULL); @@ -56,7 +56,7 @@ void start_nmbd(void) slprintf(binfile, sizeof(pstring) - 1, "%s/nmbd", dyn_SBINDIR); - become_daemon(True); + become_daemon(True, False); execl(binfile, binfile, "-D", NULL); @@ -76,7 +76,7 @@ void start_winbindd(void) slprintf(binfile, sizeof(pstring) - 1, "%s/winbindd", dyn_SBINDIR); - become_daemon(True); + become_daemon(True, False); execl(binfile, binfile, NULL); -- cgit