summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-01-04 17:37:49 (GMT)
committerLennart Poettering <lennart@poettering.net>2013-01-04 22:26:20 (GMT)
commit46a2911bf2780f616396df5671dd901cc7cb54fd (patch)
treed6e19b0d4439e03cd53211fce7a491c727de38eb
parent1328f66ad16b5afeb5684858c27e121a46c1959e (diff)
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.
-rw-r--r--src/core/hostname-setup.c111
-rw-r--r--src/core/locale-setup.c96
-rw-r--r--src/timedate/timedated.c17
-rw-r--r--src/vconsole/vconsole-setup.c135
4 files changed, 10 insertions, 349 deletions
diff --git a/src/core/hostname-setup.c b/src/core/hostname-setup.c
index dbd2227..7894f8a 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 8821fc2..48b59bf 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 784dadc..fdb4335 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 ca20849..b9d8681 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;