From 06f3091db39b0ad2f701d3132d6c8a91d9fb0522 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Fri, 25 Apr 2014 18:51:26 +0100 Subject: [PATCH 2/2] Try to read /etc/machine-id before inventing a new /var/lib/dbus/machine-id It's least confusing if the two files have the same contents. systemd already knows how to pick up our /var/lib/dbus/machine-id if it exists and /etc/machine-id doesn't, but the converse is not currently true. We should make it true, so that it doesn't matter what order systemd-machine-id-setup and "dbus-uuidgen --ensure" were invoked in. In Debian, systemd currently Recommends dbus, so "dbus-uuidgen --ensure" will *usually* - but not always! - run first, and the two files will match. However, if you install systemd without dbus, and then install dbus later, there will be a mismatch. With this change, it doesn't matter which one is installed first: whichever one happens to come first, it will generate the machine ID, and then the other one will copy it. --- dbus/dbus-sysdeps-unix.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c index fcf5df6..fa804f0 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -3597,7 +3597,7 @@ _dbus_read_local_machine_uuid (DBusGUID *machine_id, _dbus_string_init_const (&filename, DBUS_MACHINE_UUID_FILE); - b = _dbus_read_uuid_file (&filename, machine_id, create_if_not_found, error); + b = _dbus_read_uuid_file (&filename, machine_id, FALSE, error); if (b) return TRUE; @@ -3605,7 +3605,26 @@ _dbus_read_local_machine_uuid (DBusGUID *machine_id, /* Fallback to the system machine ID */ _dbus_string_init_const (&filename, "/etc/machine-id"); - return _dbus_read_uuid_file (&filename, machine_id, FALSE, error); + b = _dbus_read_uuid_file (&filename, machine_id, FALSE, error); + + if (b) + { + /* try to copy it to the DBUS_MACHINE_UUID_FILE, but do not + * complain if that isn't possible for whatever reason */ + _dbus_string_init_const (&filename, DBUS_MACHINE_UUID_FILE); + _dbus_write_uuid_file (&filename, machine_id, NULL); + + return TRUE; + } + + if (!create_if_not_found) + return FALSE; + + /* if none found, try to make a new one */ + dbus_error_free (error); + _dbus_string_init_const (&filename, DBUS_MACHINE_UUID_FILE); + _dbus_generate_uuid (machine_id); + return _dbus_write_uuid_file (&filename, machine_id, error); } /** -- 2.0.0.rc0