Set argv[0] to dbus-launch to avoid misleading info from /proc
authorChengwei Yang <chengwei.yang@intel.com>
Sat, 18 Jan 2014 04:17:43 +0000 (12:17 +0800)
committerSimon McVittie <simon.mcvittie@collabora.co.uk>
Mon, 28 Apr 2014 15:00:11 +0000 (16:00 +0100)
At previous, argv[0] is the full-qualified path of program, however, if
start dbus-launch failed, it will fall back to find one from $PATH,
while keep the argv[0] as the full-qualified path. So we'll get
misleading info from /proc or ps(1) about dbus-launch process.

One simple solution is just hard-code argv[0] to dbus-launch.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=69716
Reviewed-by: Simon McVittie
dbus/dbus-sysdeps-unix.c

index fa804f0..17b4a8d 100644 (file)
@@ -3494,6 +3494,7 @@ _dbus_get_autolaunch_address (const char *scope,
    * but that's done elsewhere, and if it worked, this function wouldn't
    * be called.) */
   const char *display;
+  char *progpath;
   char *argv[6];
   int i;
   DBusString uuid;
@@ -3533,13 +3534,19 @@ _dbus_get_autolaunch_address (const char *scope,
       goto out;
     }
 
-  i = 0;
 #ifdef DBUS_ENABLE_EMBEDDED_TESTS
   if (_dbus_getenv ("DBUS_USE_TEST_BINARY") != NULL)
-    argv[i] = TEST_BUS_LAUNCH_BINARY;
+    progpath = TEST_BUS_LAUNCH_BINARY;
   else
 #endif
-    argv[i] = DBUS_BINDIR "/dbus-launch";
+    progpath = DBUS_BINDIR "/dbus-launch";
+  /*
+   * argv[0] is always dbus-launch, that's the name what we'll
+   * get from /proc, or ps(1), regardless what the progpath is,
+   * see fd.o#69716
+   */
+  i = 0;
+  argv[i] = "dbus-launch";
   ++i;
   argv[i] = "--autolaunch";
   ++i;
@@ -3554,7 +3561,7 @@ _dbus_get_autolaunch_address (const char *scope,
 
   _dbus_assert (i == _DBUS_N_ELEMENTS (argv));
 
-  retval = _read_subprocess_line_argv (argv[0],
+  retval = _read_subprocess_line_argv (progpath,
                                        TRUE,
                                        argv, address, error);