From 2fc9784656900c4dc3715db506096ddc23fdd87c Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 14 Mar 2011 23:41:47 +0100 Subject: container: skip a few things when we are run in a container such as accessing /proc/cmdline --- src/condition.c | 3 +++ src/fsck.c | 3 +++ src/locale-setup.c | 41 +++++++++++++++++++++-------------------- src/quotacheck.c | 3 +++ src/target.c | 3 +++ src/vconsole-setup.c | 25 +++++++++++++------------ 6 files changed, 46 insertions(+), 32 deletions(-) (limited to 'src') diff --git a/src/condition.c b/src/condition.c index 1d6cf12ad4..1dce276c00 100644 --- a/src/condition.c +++ b/src/condition.c @@ -67,6 +67,9 @@ static bool test_kernel_command_line(const char *parameter) { assert(parameter); + if (detect_virtualization(NULL) > 0) + return false; + if ((r = read_one_line_file("/proc/cmdline", &line)) < 0) { log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); return false; diff --git a/src/fsck.c b/src/fsck.c index b5d8764e00..a3c83c3c24 100644 --- a/src/fsck.c +++ b/src/fsck.c @@ -106,6 +106,9 @@ static int parse_proc_cmdline(void) { int r; size_t l; + if (detect_virtualization(NULL) > 0) + return 0; + if ((r = read_one_line_file("/proc/cmdline", &line)) < 0) { log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); return 0; diff --git a/src/locale-setup.c b/src/locale-setup.c index 7684681cca..055c1fa3f3 100644 --- a/src/locale-setup.c +++ b/src/locale-setup.c @@ -69,28 +69,29 @@ int locale_setup(void) { zero(variables); - if ((r = parse_env_file("/proc/cmdline", WHITESPACE, + if (detect_virtualization(NULL) <= 0) + if ((r = parse_env_file("/proc/cmdline", WHITESPACE, #ifdef TARGET_FEDORA - "LANG", &variables[VARIABLE_LANG], + "LANG", &variables[VARIABLE_LANG], #endif - "locale.LANG", &variables[VARIABLE_LANG], - "locale.LC_CTYPE", &variables[VARIABLE_LC_CTYPE], - "locale.LC_NUMERIC", &variables[VARIABLE_LC_NUMERIC], - "locale.LC_TIME", &variables[VARIABLE_LC_TIME], - "locale.LC_COLLATE", &variables[VARIABLE_LC_COLLATE], - "locale.LC_MONETARY", &variables[VARIABLE_LC_MONETARY], - "locale.LC_MESSAGES", &variables[VARIABLE_LC_MESSAGES], - "locale.LC_PAPER", &variables[VARIABLE_LC_PAPER], - "locale.LC_NAME", &variables[VARIABLE_LC_NAME], - "locale.LC_ADDRESS", &variables[VARIABLE_LC_ADDRESS], - "locale.LC_TELEPHONE", &variables[VARIABLE_LC_TELEPHONE], - "locale.LC_MEASUREMENT", &variables[VARIABLE_LC_MEASUREMENT], - "locale.LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION], - NULL)) < 0) { - - if (r != -ENOENT) - log_warning("Failed to read /proc/cmdline: %s", strerror(-r)); - } + "locale.LANG", &variables[VARIABLE_LANG], + "locale.LC_CTYPE", &variables[VARIABLE_LC_CTYPE], + "locale.LC_NUMERIC", &variables[VARIABLE_LC_NUMERIC], + "locale.LC_TIME", &variables[VARIABLE_LC_TIME], + "locale.LC_COLLATE", &variables[VARIABLE_LC_COLLATE], + "locale.LC_MONETARY", &variables[VARIABLE_LC_MONETARY], + "locale.LC_MESSAGES", &variables[VARIABLE_LC_MESSAGES], + "locale.LC_PAPER", &variables[VARIABLE_LC_PAPER], + "locale.LC_NAME", &variables[VARIABLE_LC_NAME], + "locale.LC_ADDRESS", &variables[VARIABLE_LC_ADDRESS], + "locale.LC_TELEPHONE", &variables[VARIABLE_LC_TELEPHONE], + "locale.LC_MEASUREMENT", &variables[VARIABLE_LC_MEASUREMENT], + "locale.LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION], + NULL)) < 0) { + + if (r != -ENOENT) + log_warning("Failed to read /proc/cmdline: %s", strerror(-r)); + } /* Hmm, nothing set on the kernel cmd line? Then let's * try /etc/locale.conf */ diff --git a/src/quotacheck.c b/src/quotacheck.c index da2da3b2e0..057d8617c2 100644 --- a/src/quotacheck.c +++ b/src/quotacheck.c @@ -35,6 +35,9 @@ static int parse_proc_cmdline(void) { int r; size_t l; + if (detect_virtualization(NULL) > 0) + return 0; + if ((r = read_one_line_file("/proc/cmdline", &line)) < 0) { log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); return 0; diff --git a/src/target.c b/src/target.c index e61255c123..b8d4a01b64 100644 --- a/src/target.c +++ b/src/target.c @@ -92,6 +92,9 @@ static int target_add_getty_dependencies(Target *t) { if (!unit_has_name(UNIT(t), SPECIAL_GETTY_TARGET)) return 0; + if (detect_container(NULL) > 0) + return 1; + if (read_one_line_file("/sys/class/tty/console/active", &active) >= 0) { const char *tty; diff --git a/src/vconsole-setup.c b/src/vconsole-setup.c index 5b977126fa..29ce7be77e 100644 --- a/src/vconsole-setup.c +++ b/src/vconsole-setup.c @@ -176,21 +176,22 @@ int main(int argc, char **argv) { utf8 = is_locale_utf8(); - if ((r = parse_env_file("/proc/cmdline", WHITESPACE, + if (detect_virtualization(NULL) <= 0) + if ((r = parse_env_file("/proc/cmdline", WHITESPACE, #ifdef TARGET_FEDORA - "SYSFONT", &vc_font, - "KEYTABLE", &vc_keymap, + "SYSFONT", &vc_font, + "KEYTABLE", &vc_keymap, #endif - "vconsole.keymap", &vc_keymap, - "vconsole.keymap.toggle", &vc_keymap_toggle, - "vconsole.font", &vc_font, - "vconsole.font.map", &vc_font_map, - "vconsole.font.unimap", &vc_font_unimap, - NULL)) < 0) { + "vconsole.keymap", &vc_keymap, + "vconsole.keymap.toggle", &vc_keymap_toggle, + "vconsole.font", &vc_font, + "vconsole.font.map", &vc_font_map, + "vconsole.font.unimap", &vc_font_unimap, + NULL)) < 0) { - if (r != -ENOENT) - log_warning("Failed to read /proc/cmdline: %s", strerror(-r)); - } + if (r != -ENOENT) + log_warning("Failed to read /proc/cmdline: %s", strerror(-r)); + } /* Hmm, nothing set on the kernel cmd line? Then let's * try /etc/vconsole.conf */ -- cgit v1.2.3-54-g00ecf