From eb6053447901906cfcd0a594983a015ad55d64c5 Mon Sep 17 00:00:00 2001 From: Guilherme Quentel Melo Date: Wed, 8 Feb 2017 14:41:16 -0200 Subject: [PATCH 2/3] Use /proc/sys/kernel/random/boot_id as last resort fallback --- dbus/dbus-internals.c | 1 + dbus/dbus-string.c | 20 ++++++++++++++++++++ dbus/dbus-string.h | 2 ++ dbus/dbus-sysdeps-unix.c | 9 +++++++++ 4 files changed, 32 insertions(+) diff --git a/dbus/dbus-internals.c b/dbus/dbus-internals.c index dd58137..dc38bf7 100644 --- a/dbus/dbus-internals.c +++ b/dbus/dbus-internals.c @@ -819,6 +819,7 @@ _dbus_read_uuid_file_without_creating (const DBusString *filename, goto error; _dbus_string_chop_white (&contents); + _dbus_string_chop_hyphens (&contents); if (_dbus_string_get_length (&contents) != DBUS_UUID_LENGTH_HEX) { diff --git a/dbus/dbus-string.c b/dbus/dbus-string.c index 29210de..0ca3214 100644 --- a/dbus/dbus-string.c +++ b/dbus/dbus-string.c @@ -2062,6 +2062,26 @@ _dbus_string_chop_white(DBusString *str) _dbus_string_set_length (str, i); } +/** + * Deletes hyphens + * + * @param str the string + */ +void +_dbus_string_chop_hyphens(DBusString *str) +{ + unsigned int i; + int start = 0; + int found; + + for (i = 0; i < 4; i++) + { + if (!_dbus_string_find (str, start, "-", &found)) break; + _dbus_string_delete (str, found, 1); + start = found; + } +} + /** * Tests two DBusString for equality. * diff --git a/dbus/dbus-string.h b/dbus/dbus-string.h index c12532c..40696d4 100644 --- a/dbus/dbus-string.h +++ b/dbus/dbus-string.h @@ -359,6 +359,8 @@ DBUS_PRIVATE_EXPORT void _dbus_string_delete_leading_blanks (DBusString *str); DBUS_PRIVATE_EXPORT void _dbus_string_chop_white (DBusString *str); +DBUS_PRIVATE_EXPORT +void _dbus_string_chop_hyphens (DBusString *str); dbus_bool_t _dbus_string_append_byte_as_hex (DBusString *str, unsigned char byte); DBUS_EMBEDDED_TESTS_EXPORT diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c index ce0e9af..ec8206e 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -4460,6 +4460,15 @@ _dbus_read_local_machine_uuid (DBusGUID *machine_id, return TRUE; } + dbus_error_free (error); + + /* Last resort fallback in case there is no system-wide dbus installed */ + _dbus_string_init_const (&filename, "/proc/sys/kernel/random/boot_id"); + + b = _dbus_read_uuid_file (&filename, machine_id, FALSE, error); + if (b) + return TRUE; + if (!create_if_not_found) { dbus_set_error (error, etc_error.name,