From 5ed1f5f3ec19b9b229fdb30a2779974c865fe4ed Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Tue, 12 Jul 2016 21:33:48 +0100 Subject: [PATCH 05/10] _dbus_become_daemon: use _dbus_open_standard_fds, and report errors Signed-off-by: Simon McVittie --- dbus/dbus-sysdeps-util-unix.c | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/dbus/dbus-sysdeps-util-unix.c b/dbus/dbus-sysdeps-util-unix.c index 1f9ddb9..688b97a 100644 --- a/dbus/dbus-sysdeps-util-unix.c +++ b/dbus/dbus-sysdeps-util-unix.c @@ -89,7 +89,7 @@ _dbus_become_daemon (const DBusString *pidfile, { const char *s; pid_t child_pid; - int dev_null_fd; + DBusOpenStandardFdsFlags flags; _dbus_verbose ("Becoming a daemon...\n"); @@ -114,23 +114,18 @@ _dbus_become_daemon (const DBusString *pidfile, case 0: _dbus_verbose ("in child, closing std file descriptors\n"); - /* silently ignore failures here, if someone - * doesn't have /dev/null we may as well try - * to continue anyhow - */ - - dev_null_fd = open ("/dev/null", O_RDWR); - if (dev_null_fd >= 0) + flags = DBUS_OPEN_STDIN_NULL | DBUS_OPEN_STDOUT_NULL; + s = _dbus_getenv ("DBUS_DEBUG_OUTPUT"); + + if (s == NULL || *s == '\0') + flags |= DBUS_OPEN_STDERR_NULL; + else + _dbus_verbose ("keeping stderr open due to DBUS_DEBUG_OUTPUT\n"); + + if (!_dbus_open_standard_fds (flags, &s)) { - dup2 (dev_null_fd, 0); - dup2 (dev_null_fd, 1); - - s = _dbus_getenv ("DBUS_DEBUG_OUTPUT"); - if (s == NULL || *s == '\0') - dup2 (dev_null_fd, 2); - else - _dbus_verbose ("keeping stderr open due to DBUS_DEBUG_OUTPUT\n"); - close (dev_null_fd); + _dbus_warn ("%s: %s", s, _dbus_strerror (errno)); + _exit (1); } if (!keep_umask) -- 2.8.1