[SCM] Samba Shared Repository - branch v4-7-test updated

Karolin Seeger kseeger at samba.org
Thu Nov 30 13:12:03 UTC 2017


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 <asn at 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 <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    
    (cherry picked from commit 8736013dc42c5755b75bbb2e843a290bcd545909)
    
    Autobuild-User(v4-7-test): Karolin Seeger <kseeger at samba.org>
    Autobuild-Date(v4-7-test): Thu Nov 30 14:11:02 CET 2017 on sn-devel-144

commit 6182708d014e1c2b48eb3d5085eff23c35aba6b6
Author: Andreas Schneider <asn at 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 <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    (cherry picked from commit bfafabfb942668328401a3c89fc55b50dc56c209)

commit e41925e5ecfd245d690719e9e1fdf7054c21302e
Author: Gary Lockyer <gary at 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 <gary at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>
    
    Autobuild-User(master): Ralph Böhme <slow at 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



More information about the samba-cvs mailing list