[SCM] Samba Shared Repository - branch master updated

Andreas Schneider asn at samba.org
Thu Aug 17 09:49:02 UTC 2017


The branch, master has been updated
       via  9468d0f util: Add error handling to become_daemon()
       via  ed8c914 util: Move become_daemon.c to samba-util-core
       via  b9804e9 util: Modernise logging
       via  a500925 util: Make function definitions consistent with header file
       via  298af74 util: Add become_daemon.h
       via  2b982fc util: Avoid use of includes.h
      from  beeec1f tests: replace traffic_summary test with python blackbox test

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 9468d0f41e37d505502f3faee736aaf3b44a17ff
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Aug 15 12:41:03 2017 +1000

    util: Add error handling to become_daemon()
    
    Log failure and exit if fork() or setsid() fails.
    
    Leave the logic in the non-setsid() code as it is.  This is probably
    meant to fall through on failure of either opening /dev/tty or
    ioctl().  Documentation for the ioctl() failure case is far from
    clear.
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Andreas Schneider <asn at samba.org>
    
    Autobuild-User(master): Andreas Schneider <asn at cryptomilk.org>
    Autobuild-Date(master): Thu Aug 17 11:48:32 CEST 2017 on sn-devel-144

commit ed8c914b42428eaf134bb88770e4e6edaf83d494
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Aug 15 11:43:12 2017 +1000

    util: Move become_daemon.c to samba-util-core
    
    So that CTDB can use it.
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit b9804e9e3c665bd2f5e43407226040231737fc63
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Aug 15 11:41:58 2017 +1000

    util: Modernise logging
    
    Switch to using DBG_ERR(), wrap logging/sd_notifyf() lines.
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit a50092531af8c837c6e45c3c755fcb20b6ce323b
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Aug 15 11:22:45 2017 +1000

    util: Make function definitions consistent with header file
    
    no_process_group -> no_session, name -> daemon, drop _PUBLIC_.
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit 298af748ac09963f0bcacdba200ee43e081bbaa8
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Aug 15 11:12:35 2017 +1000

    util: Add become_daemon.h
    
    Rename argument no_process_group to no_session to describe what it
    actually does.  Consistently use "daemon" for name of daemon argument.
    Add documentation.
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit 2b982fc309c6c09e5f451075f135a3478be5eabf
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Aug 15 11:11:39 2017 +1000

    util: Avoid use of includes.h
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Andreas Schneider <asn at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 lib/util/become_daemon.c | 66 ++++++++++++++++++++++---------------
 lib/util/become_daemon.h | 86 ++++++++++++++++++++++++++++++++++++++++++++++++
 lib/util/samba_util.h    | 28 +---------------
 lib/util/wscript_build   |  5 +--
 4 files changed, 130 insertions(+), 55 deletions(-)
 create mode 100644 lib/util/become_daemon.h


Changeset truncated at 500 lines:

diff --git a/lib/util/become_daemon.c b/lib/util/become_daemon.c
index 9979fad..22c1778 100644
--- a/lib/util/become_daemon.c
+++ b/lib/util/become_daemon.c
@@ -21,40 +21,41 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "includes.h"
+#include "replace.h"
 #include "system/filesys.h"
 #include "system/locale.h"
 #if defined(HAVE_LIBSYSTEMD_DAEMON) || defined(HAVE_LIBSYSTEMD)
 #include <systemd/sd-daemon.h>
 #endif
-#include "lib/util/close_low_fd.h"
+
+#include "close_low_fd.h"
+#include "debug.h"
+
+#include "become_daemon.h"
 
 /*******************************************************************
  Close the low 3 fd's and open dev/null in their place.
 ********************************************************************/
 
-_PUBLIC_ void close_low_fds(bool stdin_too, bool stdout_too, bool stderr_too)
+void close_low_fds(bool stdin_too, bool stdout_too, bool stderr_too)
 {
 
 	if (stdin_too) {
 		int ret = close_low_fd(0);
 		if (ret != 0) {
-			DEBUG(0, ("%s: close_low_fd(0) failed: %s\n",
-				  __func__, strerror(ret)));
+			DBG_ERR("close_low_fd(0) failed: %s\n", strerror(ret));
 		}
 	}
 	if (stdout_too) {
 		int ret = close_low_fd(1);
 		if (ret != 0) {
-			DEBUG(0, ("%s: close_low_fd(1) failed: %s\n",
-				  __func__, strerror(ret)));
+			DBG_ERR("close_low_fd(1) failed: %s\n", strerror(ret));
 		}
 	}
 	if (stderr_too) {
 		int ret = close_low_fd(2);
 		if (ret != 0) {
-			DEBUG(0, ("%s: close_low_fd(2) failed: %s\n",
-				  __func__, strerror(ret)));
+			DBG_ERR("close_low_fd(2) failed: %s\n", strerror(ret));
 		}
 	}
 }
@@ -63,14 +64,20 @@ _PUBLIC_ void close_low_fds(bool stdin_too, bool stdout_too, bool stderr_too)
  Become a daemon, discarding the controlling terminal.
 ****************************************************************************/
 
-_PUBLIC_ void become_daemon(bool do_fork, bool no_process_group, bool log_stdout)
+void become_daemon(bool do_fork, bool no_session, bool log_stdout)
 {
 	pid_t newpid;
 	if (do_fork) {
 		newpid = fork();
+		if (newpid == -1) {
+			exit_daemon("Fork failed", errno);
+		}
 		if (newpid) {
 #if defined(HAVE_LIBSYSTEMD_DAEMON) || defined(HAVE_LIBSYSTEMD)
-			sd_notifyf(0, "READY=0\nSTATUS=Starting process...\nMAINPID=%lu", (unsigned long) newpid);
+			sd_notifyf(0,
+				   "READY=0\nSTATUS=Starting process...\n"
+				   "MAINPID=%lu",
+				   (unsigned long) newpid);
 #endif /* HAVE_LIBSYSTEMD_DAEMON */
 			_exit(0);
 		}
@@ -78,9 +85,14 @@ _PUBLIC_ void become_daemon(bool do_fork, bool no_process_group, bool log_stdout
 
 	/* detach from the terminal */
 #ifdef HAVE_SETSID
-	if (!no_process_group) setsid();
+	if (!no_session) {
+		int ret = setsid();
+		if (ret == -1) {
+			exit_daemon("Failed to create session", errno);
+		}
+	}
 #elif defined(TIOCNOTTY)
-	if (!no_process_group) {
+	if (!no_session) {
 		int i = open("/dev/tty", O_RDWR, 0);
 		if (i != -1) {
 			ioctl(i, (int) TIOCNOTTY, (char *)0);
@@ -96,7 +108,7 @@ _PUBLIC_ void become_daemon(bool do_fork, bool no_process_group, bool log_stdout
 	close_low_fds(do_fork, !log_stdout, false);
 }
 
-_PUBLIC_ void exit_daemon(const char *msg, int error)
+void exit_daemon(const char *msg, int error)
 {
 #if defined(HAVE_LIBSYSTEMD_DAEMON) || defined(HAVE_LIBSYSTEMD)
 	if (msg == NULL) {
@@ -108,29 +120,31 @@ _PUBLIC_ void exit_daemon(const char *msg, int error)
 				  msg,
 				  error);
 #endif
-	DEBUG(0, ("STATUS=daemon failed to start: %s, error code %d\n", msg, error));
+	DBG_ERR("STATUS=daemon failed to start: %s, error code %d\n",
+		msg, error);
 	exit(1);
 }
 
-_PUBLIC_ void daemon_ready(const char *name)
+void daemon_ready(const char *daemon)
 {
-	if (name == NULL) {
-		name = "Samba";
+	if (daemon == NULL) {
+		daemon = "Samba";
 	}
 #if defined(HAVE_LIBSYSTEMD_DAEMON) || defined(HAVE_LIBSYSTEMD)
-	sd_notifyf(0, "READY=1\nSTATUS=%s: ready to serve connections...", name);
+	sd_notifyf(0, "READY=1\nSTATUS=%s: ready to serve connections...",
+		   daemon);
 #endif
-	DEBUG(0, ("STATUS=daemon '%s' finished starting up and ready to serve "
-		  "connections\n", name));
+	DBG_ERR("STATUS=daemon '%s' finished starting up and ready to serve "
+		"connections\n", daemon);
 }
 
-_PUBLIC_ void daemon_status(const char *name, const char *msg)
+void daemon_status(const char *daemon, const char *msg)
 {
-	if (name == NULL) {
-		name = "Samba";
+	if (daemon == NULL) {
+		daemon = "Samba";
 	}
 #if defined(HAVE_LIBSYSTEMD_DAEMON) || defined(HAVE_LIBSYSTEMD)
-	sd_notifyf(0, "\nSTATUS=%s: %s", name, msg);
+	sd_notifyf(0, "\nSTATUS=%s: %s", daemon, msg);
 #endif
-	DEBUG(0, ("STATUS=daemon '%s' : %s", name, msg));
+	DBG_ERR("STATUS=daemon '%s' : %s", daemon, msg);
 }
diff --git a/lib/util/become_daemon.h b/lib/util/become_daemon.h
new file mode 100644
index 0000000..d697a68
--- /dev/null
+++ b/lib/util/become_daemon.h
@@ -0,0 +1,86 @@
+/*
+   Unix SMB/CIFS implementation.
+   Samba utility functions
+   Copyright (C) Andrew Tridgell 1992-1998
+   Copyright (C) Jeremy Allison 2001-2002
+   Copyright (C) Simo Sorce 2001
+   Copyright (C) Jim McDonough (jmcd at us.ibm.com)  2003.
+   Copyright (C) James J Myers 2003
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _BECOME_DAEMON_H
+#define _BECOME_DAEMON_H
+
+#include <stdbool.h>
+
+/**
+ * @file become_daemon.h
+ *
+ * @brief Utilities for demonising
+ */
+
+/**
+ * @brief Close the low 3 file descriptors and open /dev/null in their place
+ *
+ * @param[in] stdin_too Should stdin be closed?
+ * @param[in] stdout_too Should stdout be closed?
+ * @param[in] stderr_too Should stderr be closed?
+**/
+void close_low_fds(bool stdin_too, bool stdout_too, bool stderr_too);
+
+/**
+ * @brief Become a daemon, optionally discarding the controlling terminal
+ *
+ * @param[in] do_fork Should the process fork?
+ * @param[in] no_session Don't start a new session
+ * @param[in] log_stdour Should stdout be closed?
+**/
+void become_daemon(bool do_fork, bool no_session, bool log_stdout);
+
+/**
+ * @brief Exit daemon and log an error message at ERR level
+ *
+ * Optionally report failure to systemd if systemd integration is
+ * enabled.
+ *
+ * @param[in] msg Message to log, generated from error if NULL
+ * @param[in] error Errno of error that occurred
+**/
+void exit_daemon(const char *msg, int error);
+
+/**
+ * @brief Log at ERR level that the daemon is ready to serve connections
+ *
+ * Optionally report status to systemd if systemd integration is enabled.
+ *
+ * @param[in] daemon Name of daemon to include it message
+**/
+void daemon_ready(const char *daemon);
+
+/**
+ * @brief Log at ERR level the specified daemon status
+ *
+ * For example if it is not ready to serve connections and is waiting
+ * for some event to happen.
+ *
+ * Optionally report status to systemd if systemd integration is enabled.
+ *
+ * @param[in] daemon Name of daemon to include it message
+ * @param[in] msg Message to log
+**/
+void daemon_status(const char *daemon, const char *msg);
+
+#endif /* _BECOME_DAEMON_H */
diff --git a/lib/util/samba_util.h b/lib/util/samba_util.h
index 0bb04b3..3daf3df 100644
--- a/lib/util/samba_util.h
+++ b/lib/util/samba_util.h
@@ -567,33 +567,7 @@ int gen_fnmatch(const char *pattern, const char *string);
 #include "idtree.h"
 #include "idtree_random.h"
 
-/**
- Close the low 3 fd's and open dev/null in their place
-**/
-_PUBLIC_ void close_low_fds(bool stdin_too, bool stdout_too, bool stderr_too);
-
-/**
- Become a daemon, discarding the controlling terminal.
-**/
-_PUBLIC_ void become_daemon(bool do_fork, bool no_process_group, bool log_stdout);
-
-/**
- Exit daemon and print error message to the log at level 0
- Optionally report failure to systemd if systemd integration is enabled
-**/
-_PUBLIC_ void exit_daemon(const char *msg, int error);
-
-/**
- Report that the daemon is ready to serve connections to the log at level 0
- Optionally report status to systemd if systemd integration is enabled
-**/
-_PUBLIC_ void daemon_ready(const char *daemon);
-
-/*
- * Report the daemon status. For example if it is not ready to serve connections
- * and is waiting for some event to happen.
- */
-_PUBLIC_ void daemon_status(const char *name, const char *msg);
+#include "become_daemon.h"
 
 /**
  * @brief Get a password from the console.
diff --git a/lib/util/wscript_build b/lib/util/wscript_build
index 989db36..bb3cdd1 100644
--- a/lib/util/wscript_build
+++ b/lib/util/wscript_build
@@ -71,7 +71,8 @@ bld.SAMBA_SUBSYSTEM('samba-util-core',
                     source='''data_blob.c util_file.c time.c
                               signal.c util.c idtree.c fault.c
                               substitute.c util_process.c util_strlist.c
-                              strv_util.c bitmap.c select.c pidfile.c''',
+                              strv_util.c bitmap.c select.c pidfile.c
+                              become_daemon.c ''',
                     deps='''time-basic samba-debug socket-blocking talloc
                             tevent execinfo pthread strv''',
                     local_include=False)
@@ -114,7 +115,7 @@ else:
 
     bld.SAMBA_LIBRARY('samba-util',
                   source='''talloc_stack.c smb_threads.c
-                    rbtree.c rfc1738.c become_daemon.c system.c getpass.c
+                    rbtree.c rfc1738.c system.c getpass.c
                     genrand_util.c fsusage.c
                     params.c util_id.c util_net.c
                     util_strlist_v3.c util_paths.c


-- 
Samba Shared Repository



More information about the samba-cvs mailing list