s4/smbd: set the process group.
authorGary Lockyer <gary@catalyst.net.nz>
Mon, 21 Aug 2017 03:12:04 +0000 (15:12 +1200)
committerRalph Boehme <slow@samba.org>
Mon, 18 Sep 2017 02:39:50 +0000 (04:39 +0200)
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

selftest/target/Samba4.pm
source4/smbd/server.c

index f0f704237c6d37569deb02fc411c0351739444a5..3d148850e07e44e295f00d790e4113dc0dc9bfbd 100755 (executable)
@@ -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";
index a8bad06bed352a270c395e45de017c7b0eb74405..ba520e0a8f50e42b0ef70bf6f048fce6b96e4263 100644 (file)
@@ -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);