chiark / gitweb /
core: drop support for old per-distro configuration files for console, hostname,...
authorLennart Poettering <lennart@poettering.net>
Fri, 4 Jan 2013 17:37:49 +0000 (18:37 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 4 Jan 2013 22:26:20 +0000 (23:26 +0100)
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.

src/core/hostname-setup.c
src/core/locale-setup.c
src/timedate/timedated.c
src/vconsole/vconsole-setup.c

index dbd2227e212d47464d190eba8a77c43d9de6f4cb..7894f8a5f2e5f35528d8512e5359f73a778c375e 100644 (file)
 #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;
 }
index 8821fc2a2d6efbc10cde1f08fe1a19949516ee97..48b59bf4486fc60efd53f2506c2ca726d40f69a1 100644 (file)
@@ -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]) {
index 784dadc631bde15e49c6b7aab9889d172a241e55..fdb4335464fd6dbfe1981d86b2b412568498592e 100644 (file)
@@ -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;
 }
 
index ca208497c35a4d43670babd827119dac2d1f5fa3..b9d8681a8562072b91903784a9ebca7f91a83de1 100644 (file)
@@ -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;