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