From 156df5dd3c60df6d01e9c6bea296210468a201e3 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Fri, 20 Feb 2015 22:06:56 +0000 Subject: [PATCH 7/8] dbus-launch: use libdbus to read the UUID As a side benefit, this means that dbus-launch now understands /etc/machine-id and not just /var/lib/dbus/machine-id. Since machine_uuid comes out of libdbus allocated with dbus_malloc, to avoid having to copy it from malloc-allocated to dbus_malloc-allocated storage, it makes sense to change it to be consistently dbus_malloc-allocated (particularly now that Bug #83115 has made use of internal symbols relatively painless). However, I'm deliberately not changing the allocation model of any other strings in dbus-launch right now; that's a larger yak-shaving exercise. --- tools/Makefile.am | 16 +++++++++++----- tools/dbus-launch.c | 38 ++++++++------------------------------ tools/dbus-launch.h | 2 ++ 3 files changed, 21 insertions(+), 35 deletions(-) diff --git a/tools/Makefile.am b/tools/Makefile.am index 68a5970..0743b52 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -51,7 +51,17 @@ else dbus_launch_SOURCES= \ dbus-launch.c \ dbus-launch-x11.c \ - dbus-launch.h + dbus-launch.h \ + tool-common.c \ + tool-common.h \ + $(NULL) +dbus_launch_CPPFLAGS = \ + $(AM_CPPFLAGS) \ + $(NULL) +dbus_launch_LDADD = \ + $(top_builddir)/dbus/libdbus-1.la \ + $(DBUS_X_LIBS) \ + $(NULL) dbus_run_session_SOURCES = \ dbus-run-session.c @@ -80,10 +90,6 @@ dbus_uuidgen_LDADD = \ $(top_builddir)/dbus/libdbus-1.la \ $(NULL) -dbus_launch_LDADD = \ - $(DBUS_X_LIBS) \ - $(NULL) - examplesdir = ${docdir}/examples dist_examples_SCRIPTS = \ GetAllMatchRules.py \ diff --git a/tools/dbus-launch.c b/tools/dbus-launch.c index 41a20e8..604663e 100644 --- a/tools/dbus-launch.c +++ b/tools/dbus-launch.c @@ -38,6 +38,9 @@ #include #include +#include +#include "dbus/dbus-internals.h" + #ifdef DBUS_BUILD_X11 #include extern Display *xdisplay; @@ -102,50 +105,25 @@ save_machine_uuid (const char *uuid_arg) exit (1); } - machine_uuid = xstrdup (uuid_arg); + machine_uuid = _dbus_strdup (uuid_arg); } #ifdef DBUS_BUILD_X11 -#define UUID_MAXLEN 40 /* Read the machine uuid from file if needed. Returns TRUE if machine_uuid is * set after this function */ static int read_machine_uuid_if_needed (void) { - FILE *f; - char uuid[UUID_MAXLEN]; - size_t len; - int ret = FALSE; - if (machine_uuid != NULL) return TRUE; - f = fopen (DBUS_MACHINE_UUID_FILE, "r"); - if (f == NULL) - return FALSE; - - if (fgets (uuid, UUID_MAXLEN, f) == NULL) - goto out; - - len = strlen (uuid); - if (len < 32) - goto out; + machine_uuid = dbus_get_local_machine_id (); - /* rstrip the read uuid */ - while (len > 31 && isspace((int) uuid[len - 1])) - len--; - - if (len != 32) - goto out; + if (machine_uuid == NULL) + return FALSE; - uuid[len] = '\0'; - machine_uuid = xstrdup (uuid); verbose ("UID: %s\n", machine_uuid); - ret = TRUE; - -out: - fclose(f); - return ret; + return TRUE; } #endif /* DBUS_BUILD_X11 */ diff --git a/tools/dbus-launch.h b/tools/dbus-launch.h index 8220bb8..d0ede6b 100644 --- a/tools/dbus-launch.h +++ b/tools/dbus-launch.h @@ -26,6 +26,8 @@ #include +#include + #ifndef TRUE #define TRUE (1) #endif -- 2.1.4