The Samba-Bugzilla – Attachment 13821 Details for
Bug 13129
The samba daemons should not double fork when started by systemd
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
patch for 4.7
fix_samba_systemd_v2.patch (text/plain), 10.75 KB, created by
Andreas Schneider
on 2017-11-29 10:56:01 UTC
(
hide
)
Description:
patch for 4.7
Filename:
MIME Type:
Creator:
Andreas Schneider
Created:
2017-11-29 10:56:01 UTC
Size:
10.75 KB
patch
obsolete
>From e696afd2d810fef403c6e5d35a44cc0f22128310 Mon Sep 17 00:00:00 2001 >From: Gary Lockyer <gary@catalyst.net.nz> >Date: Mon, 21 Aug 2017 15:12:04 +1200 >Subject: [PATCH 1/4] s4/smbd: set the process group. >MIME-Version: 1.0 >Content-Type: text/plain; charset=UTF-8 >Content-Transfer-Encoding: 8bit > >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@catalyst.net.nz> >Reviewed-by: Andrew Bartlett <abartlet@samba.org> >Reviewed-by: Ralph Boehme <slow@samba.org> > >Autobuild-User(master): Ralph Böhme <slow@samba.org> >Autobuild-Date(master): Mon Sep 18 04:39:50 CEST 2017 on sn-devel-144 >--- > selftest/target/Samba4.pm | 2 +- > source4/smbd/server.c | 18 +++++++++++++++++- > 2 files changed, 18 insertions(+), 2 deletions(-) > >diff --git a/selftest/target/Samba4.pm b/selftest/target/Samba4.pm >index 772f982cb9d..6a1856ef642 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/source4/smbd/server.c b/source4/smbd/server.c >index a8bad06bed3..ba520e0a8f5 100644 >--- a/source4/smbd/server.c >+++ b/source4/smbd/server.c >@@ -341,6 +341,7 @@ static int binary_smbd_main(const char *binary_name, > { > bool opt_daemon = false; > bool opt_interactive = false; >+ bool opt_no_process_group = false; > int opt; > poptContext pc; > #define _MODULE_PROTO(init) extern NTSTATUS init(TALLOC_CTX *); >@@ -356,7 +357,8 @@ static int binary_smbd_main(const char *binary_name, > OPT_DAEMON = 1000, > OPT_INTERACTIVE, > OPT_PROCESS_MODEL, >- OPT_SHOW_BUILD >+ OPT_SHOW_BUILD, >+ OPT_NO_PROCESS_GROUP, > }; > struct poptOption long_options[] = { > POPT_AUTOHELP >@@ -371,6 +373,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 } >@@ -393,6 +397,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)); >@@ -508,6 +515,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); >-- >2.15.0 > > >From 1e3f38e58d52c7424831855c8db63c391e0b4b75 Mon Sep 17 00:00:00 2001 >From: Andreas Schneider <asn@samba.org> >Date: Wed, 15 Nov 2017 10:00:52 +0100 >Subject: [PATCH 2/4] s4:samba: Do not segfault if we run into issues > >Signed-off-by: Andreas Schneider <asn@samba.org> >Reviewed-by: Andrew Bartlett <abartlet@samba.org> >(cherry picked from commit bfafabfb942668328401a3c89fc55b50dc56c209) >--- > source4/smbd/server.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > >diff --git a/source4/smbd/server.c b/source4/smbd/server.c >index ba520e0a8f5..406f79593b9 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); >-- >2.15.0 > > >From b7d08eda158ba540dc7ca8755a6a8fdf34e52501 Mon Sep 17 00:00:00 2001 >From: Andreas Schneider <asn@samba.org> >Date: Fri, 10 Nov 2017 09:18:18 +0100 >Subject: [PATCH 3/4] 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> > >(cherry picked from commit 8736013dc42c5755b75bbb2e843a290bcd545909) >--- > source3/smbd/server.c | 2 +- > source4/smbd/server.c | 13 ++++++++++--- > 2 files changed, 11 insertions(+), 4 deletions(-) > >diff --git a/source3/smbd/server.c b/source3/smbd/server.c >index 181bcd1e123..252b43190d7 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 406f79593b9..2349d5c7fa0 100644 >--- a/source4/smbd/server.c >+++ b/source4/smbd/server.c >@@ -348,6 +348,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; >@@ -363,6 +364,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, >@@ -372,6 +374,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, >@@ -396,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; >@@ -422,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; > } >@@ -458,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. */ >-- >2.15.0 > > >From 90588e8d08dcf38d97249eb39d87c5eb36f1fcd3 Mon Sep 17 00:00:00 2001 >From: Andreas Schneider <asn@samba.org> >Date: Fri, 10 Nov 2017 09:32:27 +0100 >Subject: [PATCH 4/4] systemd: Start processes in forground and without a > process group > >We should not double fork in notify mode or systemd think something >during startup will be wrong and send SIGTERM to the process. So >sometimes the daemon will not start up correctly. > >systemd will also handle the process group. > >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> > >(cherry picked from commit 8b6f58194da7e849cdb9d20712dff49b17a93a77) >--- > packaging/systemd/nmb.service | 2 +- > packaging/systemd/samba.service | 2 +- > packaging/systemd/smb.service | 2 +- > packaging/systemd/winbind.service | 2 +- > 4 files changed, 4 insertions(+), 4 deletions(-) > >diff --git a/packaging/systemd/nmb.service b/packaging/systemd/nmb.service >index 992c0cd9d2b..71c93d6088b 100644 >--- a/packaging/systemd/nmb.service >+++ b/packaging/systemd/nmb.service >@@ -7,7 +7,7 @@ Type=notify > NotifyAccess=all > PIDFile=/run/nmbd.pid > EnvironmentFile=-/etc/sysconfig/samba >-ExecStart=/usr/sbin/nmbd $NMBDOPTIONS >+ExecStart=/usr/sbin/nmbd --foreground --no-process-group $NMBDOPTIONS > ExecReload=/usr/bin/kill -HUP $MAINPID > LimitCORE=infinity > >diff --git a/packaging/systemd/samba.service b/packaging/systemd/samba.service >index 824f89c2030..1b64c3b779d 100644 >--- a/packaging/systemd/samba.service >+++ b/packaging/systemd/samba.service >@@ -8,7 +8,7 @@ NotifyAccess=all > PIDFile=/run/samba.pid > LimitNOFILE=16384 > EnvironmentFile=-/etc/sysconfig/samba >-ExecStart=/usr/sbin/samba $SAMBAOPTIONS >+ExecStart=/usr/sbin/samba --foreground --no-process-group $SAMBAOPTIONS > ExecReload=/usr/bin/kill -HUP $MAINPID > > [Install] >diff --git a/packaging/systemd/smb.service b/packaging/systemd/smb.service >index 6053a5caaa5..adf6684c7d9 100644 >--- a/packaging/systemd/smb.service >+++ b/packaging/systemd/smb.service >@@ -8,7 +8,7 @@ NotifyAccess=all > PIDFile=/run/smbd.pid > LimitNOFILE=16384 > EnvironmentFile=-/etc/sysconfig/samba >-ExecStart=/usr/sbin/smbd $SMBDOPTIONS >+ExecStart=/usr/sbin/smbd --foreground --no-process-group $SMBDOPTIONS > ExecReload=/usr/bin/kill -HUP $MAINPID > LimitCORE=infinity > >diff --git a/packaging/systemd/winbind.service b/packaging/systemd/winbind.service >index c511488166e..46b3797251d 100644 >--- a/packaging/systemd/winbind.service >+++ b/packaging/systemd/winbind.service >@@ -7,7 +7,7 @@ Type=notify > NotifyAccess=all > PIDFile=/run/winbindd.pid > EnvironmentFile=-/etc/sysconfig/samba >-ExecStart=/usr/sbin/winbindd "$WINBINDOPTIONS" >+ExecStart=/usr/sbin/winbindd --foreground --no-process-group "$WINBINDOPTIONS" > ExecReload=/usr/bin/kill -HUP $MAINPID > LimitCORE=infinity > >-- >2.15.0 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
ab
:
review+
Actions:
View
Attachments on
bug 13129
:
13816
|
13817
| 13821 |
13875
|
13878
|
13940