From af38d73b06c0c40ef59c2ffe0fc6580b0787b7d0 Mon Sep 17 00:00:00 2001 From: Gary Lockyer Date: Mon, 21 Aug 2017 15:12:04 +1200 Subject: [PATCH] s4/smbd: set the process group. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Andrew Bartlett Reviewed-by: Ralph Boehme Autobuild-User(master): Ralph Böhme Autobuild-Date(master): Mon Sep 18 04:39:50 CEST 2017 on sn-devel-144 --- selftest/target/Samba4.pm | 2 +- source4/smbd/server.c | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/selftest/target/Samba4.pm b/selftest/target/Samba4.pm index f0f704237c6..3d148850e07 100755 --- a/selftest/target/Samba4.pm +++ b/selftest/target/Samba4.pm @@ -158,7 +158,7 @@ sub check_or_start($$$) close($env_vars->{STDIN_PIPE}); open STDIN, ">&", $STDIN_READER or die "can't dup STDIN_READER to STDIN: $!"; - exec(@preargs, Samba::bindir_path($self, "samba"), "-M", $process_model, "-i", "--maximum-runtime=$self->{server_maxtime}", $env_vars->{CONFIGURATION}, @optargs) or die("Unable to start samba: $!"); + exec(@preargs, Samba::bindir_path($self, "samba"), "-M", $process_model, "-i", "--no-process-group", "--maximum-runtime=$self->{server_maxtime}", $env_vars->{CONFIGURATION}, @optargs) or die("Unable to start samba: $!"); } $env_vars->{SAMBA_PID} = $pid; print "DONE ($pid)\n"; 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); -- 2.34.1