summaryrefslogtreecommitdiff
path: root/dbus/dbus-sysdeps-unix.c
diff options
context:
space:
mode:
authorChengwei Yang <chengwei.yang@intel.com>2014-01-18 12:17:43 +0800
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2014-04-28 16:00:11 +0100
commit3e5b148dcd83e948fa46bbd8e477933df24f6d65 (patch)
treed9c20b2e631c0a7b03210f873b885f72d00ced9f /dbus/dbus-sysdeps-unix.c
parent9383a022747b74bc5d1fe7db57e675c99b9507f1 (diff)
Set argv[0] to dbus-launch to avoid misleading info from /proc
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
Diffstat (limited to 'dbus/dbus-sysdeps-unix.c')
-rw-r--r--dbus/dbus-sysdeps-unix.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c
index fa804f07..17b4a8d8 100644
--- a/dbus/dbus-sysdeps-unix.c
+++ b/dbus/dbus-sysdeps-unix.c
@@ -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);