From: Lennart Poettering Date: Mon, 19 Jun 2023 16:46:36 +0000 (+0200) Subject: hostnamed: don't read DMI data within a container X-Git-Tag: v254-rc1~163^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e7932afe1bb91412c8ff26dba46513605199196e;p=thirdparty%2Fsystemd.git hostnamed: don't read DMI data within a container If we run in a container we should show info about the container, not the host. --- diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c index 97b1c61748a..2f63ac4dcf9 100644 --- a/src/hostname/hostnamed.c +++ b/src/hostname/hostnamed.c @@ -179,12 +179,34 @@ static void context_read_os_release(Context *c) { c->etc_os_release_stat = current_stat; } +static bool use_dmi_data(void) { + int r; + + r = getenv_bool("SYSTEMD_HOSTNAME_FORCE_DMI"); + if (r >= 0) { + log_debug("Honouring $SYSTEMD_HOSTNAME_FORCE_DMI override: %s", yes_no(r)); + return r; + } + if (r != -ENXIO) + log_debug_errno(r, "Failed to parse $SYSTEMD_HOSTNAME_FORCE_DMI, ignoring: %m"); + + if (detect_container() > 0) { + log_debug("Running in a container, not using DMI hardware data."); + return false; + } + + return true; +} + static int get_dmi_data(const char *database_key, const char *regular_key, char **ret) { _cleanup_(sd_device_unrefp) sd_device *device = NULL; _cleanup_free_ char *b = NULL; const char *s = NULL; int r; + if (!use_dmi_data()) + return -ENOENT; + r = sd_device_new_from_syspath(&device, "/sys/class/dmi/id"); if (r < 0) return log_debug_errno(r, "Failed to open /sys/class/dmi/id device, ignoring: %m"); @@ -223,6 +245,9 @@ static int get_hardware_firmware_data(const char *sysattr, char **ret) { assert(sysattr); + if (!use_dmi_data()) + return -ENOENT; + r = sd_device_new_from_syspath(&device, "/sys/class/dmi/id"); if (r < 0) return log_debug_errno(r, "Failed to open /sys/class/dmi/id device, ignoring: %m"); diff --git a/test/units/testsuite-71.sh b/test/units/testsuite-71.sh index 1c884324cbf..6f99ecadd81 100755 --- a/test/units/testsuite-71.sh +++ b/test/units/testsuite-71.sh @@ -112,6 +112,7 @@ testcase_firmware_date() { cat >/run/systemd/system/systemd-hostnamed.service.d/override.conf <