diff options
author | Gary Lockyer <gary@catalyst.net.nz> | 2017-08-21 15:12:04 +1200 |
---|---|---|
committer | Ralph Boehme <slow@samba.org> | 2017-09-18 04:39:50 +0200 |
commit | af38d73b06c0c40ef59c2ffe0fc6580b0787b7d0 (patch) | |
tree | 7b9f83fb25868d6b400df002cfddee528744682f /source4/smbd | |
parent | c8e325c7655ae4199e9db5ab90cce9cb5cb665e4 (diff) | |
download | samba-af38d73b06c0c40ef59c2ffe0fc6580b0787b7d0.tar.gz |
s4/smbd: set the process group.
Set the process group in the samba daemon, the --no-process-group option
allows this to be disabled. The no-process-group option needs to be
disabled in self test.
Signed-off-by: Gary Lockyer <gary@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
Autobuild-User(master): Ralph Böhme <slow@samba.org>
Autobuild-Date(master): Mon Sep 18 04:39:50 CEST 2017 on sn-devel-144
Diffstat (limited to 'source4/smbd')
-rw-r--r-- | source4/smbd/server.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/source4/smbd/server.c b/source4/smbd/server.c index a8bad06bed3..ba520e0a8f5 100644 --- a/source4/smbd/server.c +++ b/source4/smbd/server.c @@ -341,6 +341,7 @@ static int binary_smbd_main(const char *binary_name, { bool opt_daemon = false; bool opt_interactive = false; + bool opt_no_process_group = false; int opt; poptContext pc; #define _MODULE_PROTO(init) extern NTSTATUS init(TALLOC_CTX *); @@ -356,7 +357,8 @@ static int binary_smbd_main(const char *binary_name, OPT_DAEMON = 1000, OPT_INTERACTIVE, OPT_PROCESS_MODEL, - OPT_SHOW_BUILD + OPT_SHOW_BUILD, + OPT_NO_PROCESS_GROUP, }; struct poptOption long_options[] = { POPT_AUTOHELP @@ -371,6 +373,8 @@ static int binary_smbd_main(const char *binary_name, "till autotermination", "seconds"}, {"show-build", 'b', POPT_ARG_NONE, NULL, OPT_SHOW_BUILD, "show build info", NULL }, + {"no-process-group", '\0', POPT_ARG_NONE, NULL, + OPT_NO_PROCESS_GROUP, "Don't create a new process group" }, POPT_COMMON_SAMBA POPT_COMMON_VERSION { NULL } @@ -393,6 +397,9 @@ static int binary_smbd_main(const char *binary_name, case OPT_SHOW_BUILD: show_build(); break; + case OPT_NO_PROCESS_GROUP: + opt_no_process_group = true; + break; default: fprintf(stderr, "\nInvalid option %s: %s\n\n", poptBadOption(pc, 0), poptStrerror(opt)); @@ -508,6 +515,15 @@ static int binary_smbd_main(const char *binary_name, stdin_event_flags = 0; } +#if HAVE_SETPGID + /* + * If we're interactive we want to set our own process group for + * signal management, unless --no-process-group specified. + */ + if (opt_interactive && !opt_no_process_group) + setpgid((pid_t)0, (pid_t)0); +#endif + /* catch EOF on stdin */ #ifdef SIGTTIN signal(SIGTTIN, SIG_IGN); |