diff options
author | Andreas Schneider <asn@samba.org> | 2017-11-10 09:18:18 +0100 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2017-11-28 11:37:06 +0100 |
commit | 8736013dc42c5755b75bbb2e843a290bcd545909 (patch) | |
tree | 9ae0fd62144e94907265f2e070893c3d56bdc3a8 /source4/smbd | |
parent | bfafabfb942668328401a3c89fc55b50dc56c209 (diff) | |
download | samba-8736013dc42c5755b75bbb2e843a290bcd545909.tar.gz |
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@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'source4/smbd')
-rw-r--r-- | source4/smbd/server.c | 11 |
1 files changed, 9 insertions, 2 deletions
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. */ |