diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2023-12-02 11:26:29 +0100 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2023-12-06 12:51:13 +0100 |
commit | 5db7eb21f95b6538de089b17c4e856f1d1ec2f60 (patch) | |
tree | 42f4b64f28de17d4cb19ac525c84b62e615a24da /src/hostname | |
parent | hostnamectl: do not show local machine ID and boot ID when requested to show ... (diff) | |
download | systemd-5db7eb21f95b6538de089b17c4e856f1d1ec2f60.tar.xz systemd-5db7eb21f95b6538de089b17c4e856f1d1ec2f60.zip |
hostname: expose machine ID and boot ID through DBus
Fixes #30293.
Diffstat (limited to 'src/hostname')
-rw-r--r-- | src/hostname/hostnamectl.c | 45 | ||||
-rw-r--r-- | src/hostname/hostnamed.c | 52 |
2 files changed, 74 insertions, 23 deletions
diff --git a/src/hostname/hostnamectl.c b/src/hostname/hostnamectl.c index 75226e3a00..14fc160909 100644 --- a/src/hostname/hostnamectl.c +++ b/src/hostname/hostnamectl.c @@ -335,29 +335,29 @@ static int show_all_names(sd_bus *bus) { StatusInfo info = {}; static const struct bus_properties_map hostname_map[] = { - { "Hostname", "s", NULL, offsetof(StatusInfo, hostname) }, - { "StaticHostname", "s", NULL, offsetof(StatusInfo, static_hostname) }, - { "PrettyHostname", "s", NULL, offsetof(StatusInfo, pretty_hostname) }, - { "IconName", "s", NULL, offsetof(StatusInfo, icon_name) }, - { "Chassis", "s", NULL, offsetof(StatusInfo, chassis) }, - { "Deployment", "s", NULL, offsetof(StatusInfo, deployment) }, - { "Location", "s", NULL, offsetof(StatusInfo, location) }, - { "KernelName", "s", NULL, offsetof(StatusInfo, kernel_name) }, - { "KernelRelease", "s", NULL, offsetof(StatusInfo, kernel_release) }, - { "OperatingSystemPrettyName", "s", NULL, offsetof(StatusInfo, os_pretty_name) }, - { "OperatingSystemCPEName", "s", NULL, offsetof(StatusInfo, os_cpe_name) }, - { "OperatingSystemSupportEnd", "t", NULL, offsetof(StatusInfo, os_support_end) }, - { "HomeURL", "s", NULL, offsetof(StatusInfo, home_url) }, - { "HardwareVendor", "s", NULL, offsetof(StatusInfo, hardware_vendor) }, - { "HardwareModel", "s", NULL, offsetof(StatusInfo, hardware_model) }, - { "FirmwareVersion", "s", NULL, offsetof(StatusInfo, firmware_version) }, - { "FirmwareDate", "t", NULL, offsetof(StatusInfo, firmware_date) }, + { "Hostname", "s", NULL, offsetof(StatusInfo, hostname) }, + { "StaticHostname", "s", NULL, offsetof(StatusInfo, static_hostname) }, + { "PrettyHostname", "s", NULL, offsetof(StatusInfo, pretty_hostname) }, + { "IconName", "s", NULL, offsetof(StatusInfo, icon_name) }, + { "Chassis", "s", NULL, offsetof(StatusInfo, chassis) }, + { "Deployment", "s", NULL, offsetof(StatusInfo, deployment) }, + { "Location", "s", NULL, offsetof(StatusInfo, location) }, + { "KernelName", "s", NULL, offsetof(StatusInfo, kernel_name) }, + { "KernelRelease", "s", NULL, offsetof(StatusInfo, kernel_release) }, + { "OperatingSystemPrettyName", "s", NULL, offsetof(StatusInfo, os_pretty_name) }, + { "OperatingSystemCPEName", "s", NULL, offsetof(StatusInfo, os_cpe_name) }, + { "OperatingSystemSupportEnd", "t", NULL, offsetof(StatusInfo, os_support_end) }, + { "HomeURL", "s", NULL, offsetof(StatusInfo, home_url) }, + { "HardwareVendor", "s", NULL, offsetof(StatusInfo, hardware_vendor) }, + { "HardwareModel", "s", NULL, offsetof(StatusInfo, hardware_model) }, + { "FirmwareVersion", "s", NULL, offsetof(StatusInfo, firmware_version) }, + { "FirmwareDate", "t", NULL, offsetof(StatusInfo, firmware_date) }, + { "MachineID", "ay", bus_map_id128, offsetof(StatusInfo, machine_id) }, + { "BootID", "ay", bus_map_id128, offsetof(StatusInfo, boot_id) }, {} - }; - - static const struct bus_properties_map manager_map[] = { - { "Virtualization", "s", NULL, offsetof(StatusInfo, virtualization) }, - { "Architecture", "s", NULL, offsetof(StatusInfo, architecture) }, + }, manager_map[] = { + { "Virtualization", "s", NULL, offsetof(StatusInfo, virtualization) }, + { "Architecture", "s", NULL, offsetof(StatusInfo, architecture) }, {} }; @@ -387,6 +387,7 @@ static int show_all_names(sd_bus *bus) { if (r < 0) return log_error_errno(r, "Failed to query system properties: %s", bus_error_message(&error, r)); + /* For older version of hostnamed. */ if (!arg_host) { if (sd_id128_is_null(info.machine_id)) (void) sd_id128_get_machine(&info.machine_id); diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c index e1d53f2395..fc7a97fb99 100644 --- a/src/hostname/hostnamed.c +++ b/src/hostname/hostnamed.c @@ -995,6 +995,44 @@ static int property_get_uname_field( return sd_bus_message_append(reply, "s", (char*) &u + PTR_TO_SIZE(userdata)); } +static int property_get_machine_id( + sd_bus *bus, + const char *path, + const char *interface, + const char *property, + sd_bus_message *reply, + void *userdata, + sd_bus_error *error) { + + sd_id128_t id; + int r; + + r = sd_id128_get_machine(&id); + if (r < 0) + return r; + + return bus_property_get_id128(bus, path, interface, property, reply, &id, error); +} + +static int property_get_boot_id( + sd_bus *bus, + const char *path, + const char *interface, + const char *property, + sd_bus_message *reply, + void *userdata, + sd_bus_error *error) { + + sd_id128_t id; + int r; + + r = sd_id128_get_boot(&id); + if (r < 0) + return r; + + return bus_property_get_id128(bus, path, interface, property, reply, &id, error); +} + static int method_set_hostname(sd_bus_message *m, void *userdata, sd_bus_error *error) { Context *c = ASSERT_PTR(userdata); const char *name; @@ -1302,7 +1340,7 @@ static int method_describe(sd_bus_message *m, void *userdata, sd_bus_error *erro usec_t firmware_date = USEC_INFINITY, eol = USEC_INFINITY; _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL; _cleanup_(json_variant_unrefp) JsonVariant *v = NULL; - sd_id128_t product_uuid = SD_ID128_NULL; + sd_id128_t machine_id, boot_id, product_uuid = SD_ID128_NULL; Context *c = ASSERT_PTR(userdata); bool privileged; struct utsname u; @@ -1369,6 +1407,14 @@ static int method_describe(sd_bus_message *m, void *userdata, sd_bus_error *erro if (c->data[PROP_OS_SUPPORT_END]) (void) os_release_support_ended(c->data[PROP_OS_SUPPORT_END], /* quiet= */ false, &eol); + r = sd_id128_get_machine(&machine_id); + if (r < 0) + return log_error_errno(r, "Failed to get machine ID: %m"); + + r = sd_id128_get_boot(&boot_id); + if (r < 0) + return log_error_errno(r, "Failed to get boot ID: %m"); + r = json_build(&v, JSON_BUILD_OBJECT( JSON_BUILD_PAIR("Hostname", JSON_BUILD_STRING(hn)), JSON_BUILD_PAIR("StaticHostname", JSON_BUILD_STRING(c->data[PROP_STATIC_HOSTNAME])), @@ -1392,6 +1438,8 @@ static int method_describe(sd_bus_message *m, void *userdata, sd_bus_error *erro JSON_BUILD_PAIR("FirmwareVersion", JSON_BUILD_STRING(firmware_version)), JSON_BUILD_PAIR("FirmwareVendor", JSON_BUILD_STRING(firmware_vendor)), JSON_BUILD_PAIR_FINITE_USEC("FirmwareDate", firmware_date), + JSON_BUILD_PAIR_ID128("MachineID", machine_id), + JSON_BUILD_PAIR_ID128("BootID", boot_id), JSON_BUILD_PAIR_CONDITION(!sd_id128_is_null(product_uuid), "ProductUUID", JSON_BUILD_ID128(product_uuid)), JSON_BUILD_PAIR_CONDITION(sd_id128_is_null(product_uuid), "ProductUUID", JSON_BUILD_NULL))); @@ -1436,6 +1484,8 @@ static const sd_bus_vtable hostname_vtable[] = { SD_BUS_PROPERTY("FirmwareVersion", "s", property_get_firmware_version, 0, SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("FirmwareVendor", "s", property_get_firmware_vendor, 0, SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("FirmwareDate", "t", property_get_firmware_date, 0, SD_BUS_VTABLE_PROPERTY_CONST), + SD_BUS_PROPERTY("MachineID", "ay", property_get_machine_id, 0, SD_BUS_VTABLE_PROPERTY_CONST), + SD_BUS_PROPERTY("BootID", "ay", property_get_boot_id, 0, SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_METHOD_WITH_ARGS("SetHostname", SD_BUS_ARGS("s", hostname, "b", interactive), |