From 8736013dc42c5755b75bbb2e843a290bcd545909 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Fri, 10 Nov 2017 09:18:18 +0100 Subject: 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 Reviewed-by: Andrew Bartlett --- source4/smbd/server.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'source4/smbd') diff --git a/source4/smbd/server.c b/source4/smbd/server.c index f107350e1af..006f76bc859 100644 --- a/source4/smbd/server.c +++ b/source4/smbd/server.c @@ -367,6 +367,7 @@ 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; @@ -382,6 +383,7 @@ 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, @@ -391,6 +393,8 @@ static int binary_smbd_main(const char *binary_name, 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, @@ -417,6 +421,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; @@ -443,7 +450,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; } @@ -480,7 +487,7 @@ static int binary_smbd_main(const char *binary_name, if (opt_daemon) { DBG_NOTICE("Becoming a daemon.\n"); - become_daemon(true, false, false); + become_daemon(opt_fork, opt_no_process_group, false); } /* Create the memory context to hang everything off. */ -- cgit v1.2.1