The branch, v4-7-test has been updated
       via  39922b5 s4:samba: Allow samba daemon to run in foreground
       via  6182708 s4:samba: Do not segfault if we run into issues
       via  e41925e s4/smbd: set the process group.
      from  00dfe4c repl_meta_data: Fix removing of backlink on deleted objects

https://git.samba.org/?p=samba.git;a=shortlog;h=v4-7-test


- Log -----------------------------------------------------------------
commit 39922b5a6fa830fcf507354ae6c0a30be0a077cc
Author: Andreas Schneider <a...@samba.org>
Date:   Fri Nov 10 09:18:18 2017 +0100

    s4:samba: Allow samba daemon to run in foreground
    
    We are passing the no_process_group to become_daemon() that setsid() is
    not called. In case we are double forking, we run in SysV daemon mode,
    setsid() should be called!
    
    See:
    https://www.freedesktop.org/software/systemd/man/daemon.html
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13129
    
    Signed-off-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Andrew Bartlett <abart...@samba.org>
    
    (cherry picked from commit 8736013dc42c5755b75bbb2e843a290bcd545909)
    
    Autobuild-User(v4-7-test): Karolin Seeger <ksee...@samba.org>
    Autobuild-Date(v4-7-test): Thu Nov 30 14:11:02 CET 2017 on sn-devel-144

commit 6182708d014e1c2b48eb3d5085eff23c35aba6b6
Author: Andreas Schneider <a...@samba.org>
Date:   Wed Nov 15 10:00:52 2017 +0100

    s4:samba: Do not segfault if we run into issues
    
    Signed-off-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Andrew Bartlett <abart...@samba.org>
    (cherry picked from commit bfafabfb942668328401a3c89fc55b50dc56c209)

commit e41925e5ecfd245d690719e9e1fdf7054c21302e
Author: Gary Lockyer <g...@catalyst.net.nz>
Date:   Mon Aug 21 15:12:04 2017 +1200

    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 <g...@catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abart...@samba.org>
    Reviewed-by: Ralph Boehme <s...@samba.org>
    
    Autobuild-User(master): Ralph Böhme <s...@samba.org>
    Autobuild-Date(master): Mon Sep 18 04:39:50 CEST 2017 on sn-devel-144

-----------------------------------------------------------------------

Summary of changes:
 selftest/target/Samba4.pm |  2 +-
 source3/smbd/server.c     |  2 +-
 source4/smbd/server.c     | 39 +++++++++++++++++++++++++++++++++++----
 3 files changed, 37 insertions(+), 6 deletions(-)


Changeset truncated at 500 lines:

diff --git a/selftest/target/Samba4.pm b/selftest/target/Samba4.pm
index 772f982..6a1856e 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/source3/smbd/server.c b/source3/smbd/server.c
index 181bcd1..252b431 100644
--- a/source3/smbd/server.c
+++ b/source3/smbd/server.c
@@ -1592,7 +1592,7 @@ extern void build_options(bool screen);
        struct poptOption long_options[] = {
        POPT_AUTOHELP
        {"daemon", 'D', POPT_ARG_NONE, NULL, OPT_DAEMON, "Become a daemon 
(default)" },
-       {"interactive", 'i', POPT_ARG_NONE, NULL, OPT_INTERACTIVE, "Run 
interactive (not a daemon)"},
+       {"interactive", 'i', POPT_ARG_NONE, NULL, OPT_INTERACTIVE, "Run 
interactive (not a daemon) and log to stdout"},
        {"foreground", 'F', POPT_ARG_NONE, NULL, OPT_FORK, "Run daemon in 
foreground (for daemontools, etc.)" },
        {"no-process-group", '\0', POPT_ARG_NONE, NULL, OPT_NO_PROCESS_GROUP, 
"Don't create a new process group" },
        {"log-stdout", 'S', POPT_ARG_NONE, NULL, OPT_LOG_STDOUT, "Log to 
stdout" },
diff --git a/source4/smbd/server.c b/source4/smbd/server.c
index a8bad06..2349d5c 100644
--- a/source4/smbd/server.c
+++ b/source4/smbd/server.c
@@ -100,8 +100,16 @@ static void cleanup_tmp_files(struct loadparm_context 
*lp_ctx)
 {
        char *path;
        TALLOC_CTX *mem_ctx = talloc_new(NULL);
+       if (mem_ctx == NULL) {
+               exit_daemon("Failed to create memory context",
+                           ENOMEM);
+       }
 
        path = smbd_tmp_path(mem_ctx, lp_ctx, NULL);
+       if (path == NULL) {
+               exit_daemon("Failed to cleanup temporary files",
+                           EINVAL);
+       }
 
        recursive_delete(path);
        talloc_free(mem_ctx);
@@ -340,7 +348,9 @@ static int binary_smbd_main(const char *binary_name,
                                const char *argv[])
 {
        bool opt_daemon = false;
+       bool opt_fork = true;
        bool opt_interactive = false;
+       bool opt_no_process_group = false;
        int opt;
        poptContext pc;
 #define _MODULE_PROTO(init) extern NTSTATUS init(TALLOC_CTX *);
@@ -354,14 +364,18 @@ static int binary_smbd_main(const char *binary_name,
        struct stat st;
        enum {
                OPT_DAEMON = 1000,
+               OPT_FOREGROUND,
                OPT_INTERACTIVE,
                OPT_PROCESS_MODEL,
-               OPT_SHOW_BUILD
+               OPT_SHOW_BUILD,
+               OPT_NO_PROCESS_GROUP,
        };
        struct poptOption long_options[] = {
                POPT_AUTOHELP
                {"daemon", 'D', POPT_ARG_NONE, NULL, OPT_DAEMON,
                 "Become a daemon (default)", NULL },
+               {"foreground", 'F', POPT_ARG_NONE, NULL, OPT_FOREGROUND,
+                "Run the daemon in foreground", NULL },
                {"interactive", 'i', POPT_ARG_NONE, NULL, OPT_INTERACTIVE,
                 "Run interactive (not a daemon)", NULL},
                {"model", 'M', POPT_ARG_STRING, NULL, OPT_PROCESS_MODEL,
@@ -371,6 +385,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 }
@@ -384,6 +400,9 @@ static int binary_smbd_main(const char *binary_name,
                case OPT_DAEMON:
                        opt_daemon = true;
                        break;
+               case OPT_FOREGROUND:
+                       opt_fork = false;
+                       break;
                case OPT_INTERACTIVE:
                        opt_interactive = true;
                        break;
@@ -393,6 +412,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));
@@ -407,7 +429,7 @@ static int binary_smbd_main(const char *binary_name,
                        "not allowed together with -D|--daemon\n\n");
                poptPrintUsage(pc, stderr, 0);
                return 1;
-       } else if (!opt_interactive) {
+       } else if (!opt_interactive && !opt_fork) {
                /* default is --daemon */
                opt_daemon = true;
        }
@@ -443,8 +465,8 @@ static int binary_smbd_main(const char *binary_name,
        }
 
        if (opt_daemon) {
-               DEBUG(3,("Becoming a daemon.\n"));
-               become_daemon(true, false, false);
+               DBG_NOTICE("Becoming a daemon.\n");
+               become_daemon(opt_fork, opt_no_process_group, false);
        }
 
        /* Create the memory context to hang everything off. */
@@ -508,6 +530,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);


-- 
Samba Shared Repository

Reply via email to