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.
This commit is contained in:
Simon McVittie 2015-02-20 22:06:56 +00:00
parent 2a6cefbc3b
commit 71c11a9e48
3 changed files with 21 additions and 35 deletions

View file

@ -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 \

View file

@ -38,6 +38,9 @@
#include <sys/select.h>
#include <time.h>
#include <dbus/dbus.h>
#include "dbus/dbus-internals.h"
#ifdef DBUS_BUILD_X11
#include <X11/Xlib.h>
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)
machine_uuid = dbus_get_local_machine_id ();
if (machine_uuid == NULL)
return FALSE;
if (fgets (uuid, UUID_MAXLEN, f) == NULL)
goto out;
len = strlen (uuid);
if (len < 32)
goto out;
/* rstrip the read uuid */
while (len > 31 && isspace((int) uuid[len - 1]))
len--;
if (len != 32)
goto out;
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 */

View file

@ -26,6 +26,8 @@
#include <sys/types.h>
#include <dbus/dbus.h>
#ifndef TRUE
#define TRUE (1)
#endif