mirror of
https://github.com/systemd/systemd.git
synced 2024-10-28 11:55:44 +03:00
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.
This commit is contained in:
parent
dafd65b150
commit
e7932afe1b
@ -179,12 +179,34 @@ static void context_read_os_release(Context *c) {
|
|||||||
c->etc_os_release_stat = current_stat;
|
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) {
|
static int get_dmi_data(const char *database_key, const char *regular_key, char **ret) {
|
||||||
_cleanup_(sd_device_unrefp) sd_device *device = NULL;
|
_cleanup_(sd_device_unrefp) sd_device *device = NULL;
|
||||||
_cleanup_free_ char *b = NULL;
|
_cleanup_free_ char *b = NULL;
|
||||||
const char *s = NULL;
|
const char *s = NULL;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
if (!use_dmi_data())
|
||||||
|
return -ENOENT;
|
||||||
|
|
||||||
r = sd_device_new_from_syspath(&device, "/sys/class/dmi/id");
|
r = sd_device_new_from_syspath(&device, "/sys/class/dmi/id");
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_debug_errno(r, "Failed to open /sys/class/dmi/id device, ignoring: %m");
|
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);
|
assert(sysattr);
|
||||||
|
|
||||||
|
if (!use_dmi_data())
|
||||||
|
return -ENOENT;
|
||||||
|
|
||||||
r = sd_device_new_from_syspath(&device, "/sys/class/dmi/id");
|
r = sd_device_new_from_syspath(&device, "/sys/class/dmi/id");
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_debug_errno(r, "Failed to open /sys/class/dmi/id device, ignoring: %m");
|
return log_debug_errno(r, "Failed to open /sys/class/dmi/id device, ignoring: %m");
|
||||||
|
@ -112,6 +112,7 @@ testcase_firmware_date() {
|
|||||||
cat >/run/systemd/system/systemd-hostnamed.service.d/override.conf <<EOF
|
cat >/run/systemd/system/systemd-hostnamed.service.d/override.conf <<EOF
|
||||||
[Service]
|
[Service]
|
||||||
Environment="SYSTEMD_DEVICE_VERIFY_SYSFS=0"
|
Environment="SYSTEMD_DEVICE_VERIFY_SYSFS=0"
|
||||||
|
Environment="SYSTEMD_HOSTNAME_FORCE_DMI=1"
|
||||||
EOF
|
EOF
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user