]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
hostnamed: don't read DMI data within a container
authorLennart Poettering <lennart@poettering.net>
Mon, 19 Jun 2023 16:46:36 +0000 (18:46 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 20 Jun 2023 13:04:31 +0000 (15:04 +0200)
If we run in a container we should show info about the container, not
the host.

src/hostname/hostnamed.c
test/units/testsuite-71.sh

index 97b1c61748ae7ada7622a4375b28bf139575fb8e..2f63ac4dcf987aed403297cce75528f4cf598c7d 100644 (file)
@@ -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");
index 1c884324cbfaba5ce5df2be58aa2ad087c779549..6f99ecadd81424b51bd062ca19346d6dd3a350f5 100755 (executable)
@@ -112,6 +112,7 @@ testcase_firmware_date() {
     cat >/run/systemd/system/systemd-hostnamed.service.d/override.conf <<EOF
 [Service]
 Environment="SYSTEMD_DEVICE_VERIFY_SYSFS=0"
+Environment="SYSTEMD_HOSTNAME_FORCE_DMI=1"
 EOF
     systemctl daemon-reload