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");
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");