]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
_dbus_become_daemon: use _dbus_ensure_standard_fds, and report errors
authorSimon McVittie <smcv@debian.org>
Thu, 21 Jul 2016 07:25:21 +0000 (08:25 +0100)
committerSimon McVittie <simon.mcvittie@collabora.co.uk>
Mon, 25 Jul 2016 10:26:43 +0000 (11:26 +0100)
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=97008
Signed-off-by: Simon McVittie <smcv@debian.org>
Reviewed-by: Thiago Macieira <thiago@kde.org>
dbus/dbus-sysdeps-util-unix.c

index 1f9ddb9cab40d9917f3ace80971f1e671aa9277f..32599f76955866c4266b7f7c5c149629dcbeda01 100644 (file)
@@ -89,7 +89,7 @@ _dbus_become_daemon (const DBusString *pidfile,
 {
   const char *s;
   pid_t child_pid;
-  int dev_null_fd;
+  DBusEnsureStandardFdsFlags 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_FORCE_STDIN_NULL | DBUS_FORCE_STDOUT_NULL;
+      s = _dbus_getenv ("DBUS_DEBUG_OUTPUT");
+
+      if (s == NULL || *s == '\0')
+        flags |= DBUS_FORCE_STDERR_NULL;
+      else
+        _dbus_verbose ("keeping stderr open due to DBUS_DEBUG_OUTPUT\n");
+
+      if (!_dbus_ensure_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)