From: Lennart Poettering Date: Fri, 4 Jan 2013 17:37:49 +0000 (+0100) Subject: core: drop support for old per-distro configuration files for console, hostname,... X-Git-Tag: v197~59 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=46a2911bf2780f616396df5671dd901cc7cb54fd core: drop support for old per-distro configuration files for console, hostname, locale, timezone This simplifies the upstream system code quite a bit. If downstream distributions want to maintain compatibility with their old configuration files, they are welcome to do so, but need to maintain this as patches downstream. The burden needs to be on the distributions to maintain differences here. Our suggestion however is to just convert the old configuration files on upgrade, as multiple distributions already do. --- diff --git a/src/core/hostname-setup.c b/src/core/hostname-setup.c index dbd2227e2..7894f8a5f 100644 --- a/src/core/hostname-setup.c +++ b/src/core/hostname-setup.c @@ -30,14 +30,6 @@ #include "util.h" #include "log.h" -#if defined(TARGET_ALTLINUX) || defined(TARGET_MANDRIVA) || defined(TARGET_MAGEIA) -#define FILENAME "/etc/sysconfig/network" -#elif defined(TARGET_SUSE) || defined(TARGET_SLACKWARE) -#define FILENAME "/etc/HOSTNAME" -#elif defined(TARGET_GENTOO) -#define FILENAME "/etc/conf.d/hostname" -#endif - static int read_and_strip_hostname(const char *path, char **hn) { char *s; int r; @@ -57,103 +49,23 @@ static int read_and_strip_hostname(const char *path, char **hn) { } *hn = s; - - return 0; -} - -static int read_distro_hostname(char **hn) { - -#if defined(TARGET_GENTOO) || defined(TARGET_ALTLINUX) || defined(TARGET_MANDRIVA) || defined(TARGET_MAGEIA) - int r; - _cleanup_fclose_ FILE *f = NULL; - - assert(hn); - - f = fopen(FILENAME, "re"); - if (!f) - return -errno; - - for (;;) { - char line[LINE_MAX]; - char *s, *k; - - if (!fgets(line, sizeof(line), f)) { - if (feof(f)) - break; - - r = -errno; - goto finish; - } - - s = strstrip(line); - - if (!startswith_no_case(s, "HOSTNAME=")) - continue; - - k = strdup(s+9); - if (!k) { - r = -ENOMEM; - goto finish; - } - - hostname_cleanup(k); - - if (isempty(k)) { - free(k); - r = -ENOENT; - goto finish; - } - - *hn = k; - r = 0; - goto finish; - } - - r = -ENOENT; - -finish: - return r; - -#elif defined(TARGET_SUSE) || defined(TARGET_SLACKWARE) - return read_and_strip_hostname(FILENAME, hn); -#else - return -ENOENT; -#endif -} - -static int read_hostname(char **hn) { - int r; - - assert(hn); - - /* First, try to load the generic hostname configuration file, - * that we support on all distributions */ - - r = read_and_strip_hostname("/etc/hostname", hn); - if (r < 0) { - if (r == -ENOENT) - return read_distro_hostname(hn); - - return r; - } - return 0; } int hostname_setup(void) { int r; - char *b = NULL; - const char *hn = NULL; + _cleanup_free_ char *b = NULL; + const char *hn; bool enoent = false; - r = read_hostname(&b); + r = read_and_strip_hostname("/etc/hostname", &b); if (r < 0) { - hn = NULL; - if (r == -ENOENT) enoent = true; else log_warning("Failed to read configured hostname: %s", strerror(-r)); + + hn = NULL; } else hn = b; @@ -161,7 +73,7 @@ int hostname_setup(void) { /* Don't override the hostname if it is already set * and not explicitly configured */ if (hostname_is_set()) - goto finish; + return 0; if (enoent) log_info("No hostname configured."); @@ -171,12 +83,9 @@ int hostname_setup(void) { if (sethostname(hn, strlen(hn)) < 0) { log_warning("Failed to set hostname to <%s>: %m", hn); - r = -errno; - } else - log_info("Set hostname to <%s>.", hn); - -finish: - free(b); + return -errno; + } - return r; + log_info("Set hostname to <%s>.", hn); + return 0; } diff --git a/src/core/locale-setup.c b/src/core/locale-setup.c index 8821fc2a2..48b59bf44 100644 --- a/src/core/locale-setup.c +++ b/src/core/locale-setup.c @@ -74,9 +74,6 @@ int locale_setup(void) { if (detect_container(NULL) <= 0) { r = parse_env_file("/proc/cmdline", WHITESPACE, -#if defined(TARGET_FEDORA) - "LANG", &variables[VARIABLE_LANG], -#endif "locale.LANG", &variables[VARIABLE_LANG], "locale.LANGUAGE", &variables[VARIABLE_LANGUAGE], "locale.LC_CTYPE", &variables[VARIABLE_LC_CTYPE], @@ -121,99 +118,6 @@ int locale_setup(void) { log_warning("Failed to read /etc/locale.conf: %s", strerror(-r)); } -#if defined(TARGET_ALTLINUX) - if (r <= 0) { - r = parse_env_file("/etc/sysconfig/i18n", NEWLINE, - "LANG", &variables[VARIABLE_LANG], - NULL); - - if (r < 0 && r != -ENOENT) - log_warning("Failed to read /etc/sysconfig/i18n: %s", strerror(-r)); - } - -#elif defined(TARGET_SUSE) - if (r <= 0) { - r = parse_env_file("/etc/sysconfig/language", NEWLINE, - "RC_LANG", &variables[VARIABLE_LANG], - NULL); - - if (r < 0 && r != -ENOENT) - log_warning("Failed to read /etc/sysconfig/language: %s", strerror(-r)); - } - -#elif defined(TARGET_DEBIAN) || defined(TARGET_ANGSTROM) - if (r <= 0) { - r = parse_env_file("/etc/default/locale", NEWLINE, - "LANG", &variables[VARIABLE_LANG], - "LC_CTYPE", &variables[VARIABLE_LC_CTYPE], - "LC_NUMERIC", &variables[VARIABLE_LC_NUMERIC], - "LC_TIME", &variables[VARIABLE_LC_TIME], - "LC_COLLATE", &variables[VARIABLE_LC_COLLATE], - "LC_MONETARY", &variables[VARIABLE_LC_MONETARY], - "LC_MESSAGES", &variables[VARIABLE_LC_MESSAGES], - "LC_PAPER", &variables[VARIABLE_LC_PAPER], - "LC_NAME", &variables[VARIABLE_LC_NAME], - "LC_ADDRESS", &variables[VARIABLE_LC_ADDRESS], - "LC_TELEPHONE", &variables[VARIABLE_LC_TELEPHONE], - "LC_MEASUREMENT", &variables[VARIABLE_LC_MEASUREMENT], - "LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION], - NULL); - - if (r < 0 && r != -ENOENT) - log_warning("Failed to read /etc/default/locale: %s", strerror(-r)); - } - -#elif defined(TARGET_GENTOO) - /* Gentoo's openrc expects locale variables in /etc/env.d/ - * These files are later compiled by env-update into shell - * export commands at /etc/profile.env, with variables being - * exported by openrc's runscript (so /etc/init.d/) - */ - if (r <= 0) { - r = parse_env_file("/etc/profile.env", NEWLINE, - "export LANG", &variables[VARIABLE_LANG], - "export LC_CTYPE", &variables[VARIABLE_LC_CTYPE], - "export LC_NUMERIC", &variables[VARIABLE_LC_NUMERIC], - "export LC_TIME", &variables[VARIABLE_LC_TIME], - "export LC_COLLATE", &variables[VARIABLE_LC_COLLATE], - "export LC_MONETARY", &variables[VARIABLE_LC_MONETARY], - "export LC_MESSAGES", &variables[VARIABLE_LC_MESSAGES], - "export LC_PAPER", &variables[VARIABLE_LC_PAPER], - "export LC_NAME", &variables[VARIABLE_LC_NAME], - "export LC_ADDRESS", &variables[VARIABLE_LC_ADDRESS], - "export LC_TELEPHONE", &variables[VARIABLE_LC_TELEPHONE], - "export LC_MEASUREMENT", &variables[VARIABLE_LC_MEASUREMENT], - "export LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION], - NULL); - - if (r < 0 && r != -ENOENT) - log_warning("Failed to read /etc/profile.env: %s", strerror(-r)); - } - -#elif defined(TARGET_MANDRIVA) || defined(TARGET_MAGEIA) - if (r <= 0) { - r = parse_env_file("/etc/sysconfig/i18n", NEWLINE, - "LANG", &variables[VARIABLE_LANG], - "LC_CTYPE", &variables[VARIABLE_LC_CTYPE], - "LC_NUMERIC", &variables[VARIABLE_LC_NUMERIC], - "LC_TIME", &variables[VARIABLE_LC_TIME], - "LC_COLLATE", &variables[VARIABLE_LC_COLLATE], - "LC_MONETARY", &variables[VARIABLE_LC_MONETARY], - "LC_MESSAGES", &variables[VARIABLE_LC_MESSAGES], - "LC_PAPER", &variables[VARIABLE_LC_PAPER], - "LC_NAME", &variables[VARIABLE_LC_NAME], - "LC_ADDRESS", &variables[VARIABLE_LC_ADDRESS], - "LC_TELEPHONE", &variables[VARIABLE_LC_TELEPHONE], - "LC_MEASUREMENT", &variables[VARIABLE_LC_MEASUREMENT], - "LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION], - NULL); - - if (r < 0 && r != -ENOENT) - log_warning("Failed to read /etc/sysconfig/i18n: %s", strerror(-r)); - } - -#endif - if (!variables[VARIABLE_LANG]) { variables[VARIABLE_LANG] = strdup("C"); if (!variables[VARIABLE_LANG]) { diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c index 784dadc63..fdb433546 100644 --- a/src/timedate/timedated.c +++ b/src/timedate/timedated.c @@ -199,19 +199,10 @@ static int write_data_timezone(void) { int r = 0; _cleanup_free_ char *p = NULL; -#ifdef TARGET_DEBIAN - struct stat st; -#endif - if (!tz.zone) { if (unlink("/etc/localtime") < 0 && errno != ENOENT) r = -errno; -#ifdef TARGET_DEBIAN - if (unlink("/etc/timezone") < 0 && errno != ENOENT) - r = -errno; -#endif - return r; } @@ -223,14 +214,6 @@ static int write_data_timezone(void) { if (r < 0) return r; -#ifdef TARGET_DEBIAN - if (stat("/etc/timezone", &st) == 0 && S_ISREG(st.st_mode)) { - r = write_one_line_file_atomic("/etc/timezone", tz.zone); - if (r < 0) - return r; - } -#endif - return 0; } diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c index ca208497c..b9d8681a8 100644 --- a/src/vconsole/vconsole-setup.c +++ b/src/vconsole/vconsole-setup.c @@ -164,12 +164,6 @@ int main(int argc, char **argv) { char *vc_font = NULL; char *vc_font_map = NULL; char *vc_font_unimap = NULL; -#ifdef TARGET_GENTOO - char *vc_unicode = NULL; -#endif -#if defined(TARGET_MANDRIVA) || defined(TARGET_MAGEIA) - char *vc_keytable = NULL; -#endif int fd = -1; bool utf8; int r = EXIT_FAILURE; @@ -230,135 +224,6 @@ int main(int argc, char **argv) { } if (r <= 0) { -#if defined(TARGET_SUSE) - r = parse_env_file("/etc/sysconfig/keyboard", NEWLINE, - "KEYTABLE", &vc_keymap, - NULL); - if (r < 0 && r != -ENOENT) - log_warning("Failed to read /etc/sysconfig/keyboard: %s", strerror(-r)); - - r = parse_env_file("/etc/sysconfig/console", NEWLINE, - "CONSOLE_FONT", &vc_font, - "CONSOLE_SCREENMAP", &vc_font_map, - "CONSOLE_UNICODEMAP", &vc_font_unimap, - NULL); - if (r < 0 && r != -ENOENT) - log_warning("Failed to read /etc/sysconfig/console: %s", strerror(-r)); - -#elif defined(TARGET_ALTLINUX) - r = parse_env_file("/etc/sysconfig/keyboard", NEWLINE, - "KEYTABLE", &vc_keymap, - NULL) - if (r < 0 && r != -ENOENT) - log_warning("Failed to read /etc/sysconfig/keyboard: %s", strerror(-r)); - - r = parse_env_file("/etc/sysconfig/consolefont", NEWLINE, - "SYSFONT", &vc_font, - NULL); - if (r < 0 && r != -ENOENT) - log_warning("Failed to read /etc/sysconfig/consolefont: %s", strerror(-r)); - -#elif defined(TARGET_GENTOO) - r = parse_env_file("/etc/rc.conf", NEWLINE, - "unicode", &vc_unicode, - NULL); - if (r < 0 && r != -ENOENT) - log_warning("Failed to read /etc/rc.conf: %s", strerror(-r)); - - if (vc_unicode) { - int rc_unicode; - - rc_unicode = parse_boolean(vc_unicode); - if (rc_unicode < 0) - log_warning("Unknown value for /etc/rc.conf unicode=%s", vc_unicode); - else { - if (rc_unicode && !utf8) - log_warning("/etc/rc.conf wants unicode, but current locale is not UTF-8 capable!"); - else if (!rc_unicode && utf8) { - log_debug("/etc/rc.conf does not want unicode, leave it on in kernel but does not apply to vconsole."); - utf8 = false; - } - } - } - - /* /etc/conf.d/consolefont comments and gentoo - * documentation mention uppercase, but the actual - * contents are lowercase. the existing - * /etc/init.d/consolefont tries both - */ - r = parse_env_file("/etc/conf.d/consolefont", NEWLINE, - "CONSOLEFONT", &vc_font, - "consolefont", &vc_font, - "consoletranslation", &vc_font_map, - "CONSOLETRANSLATION", &vc_font_map, - "unicodemap", &vc_font_unimap, - "UNICODEMAP", &vc_font_unimap, - NULL); - if (r < 0 && r != -ENOENT) - log_warning("Failed to read /etc/conf.d/consolefont: %s", strerror(-r)); - - r = parse_env_file("/etc/conf.d/keymaps", NEWLINE, - "keymap", &vc_keymap, - "KEYMAP", &vc_keymap, - NULL); - if (r < 0 && r != -ENOENT) - log_warning("Failed to read /etc/conf.d/keymaps: %s", strerror(-r)); - -#elif defined(TARGET_MANDRIVA) || defined (TARGET_MAGEIA) - - r = parse_env_file("/etc/sysconfig/i18n", NEWLINE, - "SYSFONT", &vc_font, - "SYSFONTACM", &vc_font_map, - "UNIMAP", &vc_font_unimap, - NULL); - if (r < 0 && r != -ENOENT) - log_warning("Failed to read /etc/sysconfig/i18n: %s", strerror(-r)); - - r = parse_env_file("/etc/sysconfig/keyboard", NEWLINE, - "KEYTABLE", &vc_keytable, - "KEYMAP", &vc_keymap, - "UNIKEYTABLE", &vc_keymap, - "GRP_TOGGLE", &vc_keymap_toggle, - NULL); - if (r < 0 && r != -ENOENT) - log_warning("Failed to read /etc/sysconfig/keyboard: %s", strerror(-r)); - - if (vc_keytable) { - free(vc_keymap); - if (utf8) { - if (endswith(vc_keytable, ".uni") || strstr(vc_keytable, ".uni.")) - vc_keymap = strdup(vc_keytable); - else { - char *s; - s = strstr(vc_keytable, ".map"); - if (s) - vc_keytable[s-vc_keytable+1] = '\0'; - vc_keymap = strappend(vc_keytable, ".uni"); - } - } else - vc_keymap = strdup(vc_keytable); - - free(vc_keytable); - - if (!vc_keymap) { - log_oom(); - goto finish; - } - } - - if (access("/etc/sysconfig/console/default.kmap", F_OK) >= 0) { - char *t; - - t = strdup("/etc/sysconfig/console/default.kmap"); - if (!t) { - log_oom(); - goto finish; - } - - free(vc_keymap); - vc_keymap = t; - } -#endif } r = EXIT_FAILURE;