-diff --git a/Makefile.am b/Makefile.am
-index 170465a..bce467d 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -4083,6 +4083,21 @@ if TARGET_FEDORA
- $(LN_S) ../systemd-modules-load.service systemd-modules-load.service )
- endif
+diff -dur -x '*~' -x '*.orig' systemd-208.orig/Makefile.am systemd-208/Makefile.am
+--- systemd-208.orig/Makefile.am 2013-10-02 04:57:09.000000000 +0200
++++ systemd-208/Makefile.am 2014-01-09 15:15:41.000000000 +0100
+@@ -211,6 +211,8 @@
+ TIMERS_TARGET_WANTS =
+ USER_SOCKETS_TARGET_WANTS =
+ USER_BUSNAMES_TARGET_WANTS =
++FINAL_TARGET_WANTS =
++GRAPHICAL_TARGET_WANTS =
-+ $(MKDIR_P) -m 0755 $(DESTDIR)$(systemunitdir)/final.target.wants
-+ ( cd $(DESTDIR)$(systemunitdir)/multi-user.target.wants && \
-+ rm -f rc-local.service && \
-+ $(LN_S) $(systemunitdir)/rc-local.service rc-local.service )
-+ ( cd $(DESTDIR)$(systemunitdir)/final.target.wants && \
-+ rm -f halt-local.service && \
-+ $(LN_S) $(systemunitdir)/halt-local.service halt-local.service )
+ SYSTEM_UNIT_ALIASES =
+ USER_UNIT_ALIASES =
+@@ -230,6 +232,8 @@
+ what="$(SLICES_TARGET_WANTS)" && wants=slices.target && $(add-wants)
+ what="$(USER_SOCKETS_TARGET_WANTS)" && wants=sockets.target && dir=$(userunitdir) && $(add-wants)
+ what="$(USER_BUSNAMES_TARGET_WANTS)" && wants=busnames.target && dir=$(userunitdir) && $(add-wants)
++ what="$(FINAL_TARGET_WANTS)" && wants=final.target && dir=$(systemunitdir) && $(add-wants)
++ what="$(GRAPHICAL_TARGET_WANTS)" && wants=graphical.target && dir=$(systemunitdir) && $(add-wants)
+
+ define add-wants
+ [ -z "$$what" ] || ( \
+@@ -4001,8 +4005,15 @@
+ $(systemdstatedir)
+
+ MULTI_USER_TARGET_WANTS += \
++ rc-local.service \
+ systemd-logind.service
+
++FINAL_TARGET_WANTS += \
++ halt-local.service
++
++GRAPHICAL_TARGET_WANTS += \
++ display-manager.service
++
+ SYSTEM_UNIT_ALIASES += \
+ systemd-logind.service dbus-org.freedesktop.login1.service
+
+@@ -4493,6 +4504,10 @@
+ uninstall-hook: $(UNINSTALL_DATA_HOOKS) $(UNINSTALL_EXEC_HOOKS)
+
+ install-data-hook: $(INSTALL_DATA_HOOKS)
+ ( cd $(DESTDIR)$(systemunitdir) && \
+ rm -f display-manager.service single.service && \
+ $(LN_S) prefdm.service display-manager.service && \
+ $(LN_S) rescue.service single.service )
-+ ( cd $(DESTDIR)$(systemunitdir)/graphical.target.wants && \
-+ rm -f display-manager.service && \
-+ $(LN_S) $(systemunitdir)/display-manager.service display-manager.service )
-+
- install-exec-hook: $(INSTALL_EXEC_HOOKS)
- uninstall-hook: $(UNINSTALL_DATA_HOOKS) $(UNINSTALL_EXEC_HOOKS)
-diff --git a/src/core/hostname-setup.c b/src/core/hostname-setup.c
-index 2c2f10c..754f0c7 100644
---- a/src/core/hostname-setup.c
-+++ b/src/core/hostname-setup.c
-@@ -64,13 +64,84 @@ static int read_and_strip_hostname(const char *path, char **hn) {
+ distclean-local: $(DISTCLEAN_LOCAL_HOOKS)
+
+diff -dur -x '*~' -x '*.orig' systemd-208.orig/src/core/hostname-setup.c systemd-208/src/core/hostname-setup.c
+--- systemd-208.orig/src/core/hostname-setup.c 2013-08-13 22:02:46.000000000 +0200
++++ systemd-208/src/core/hostname-setup.c 2014-01-09 15:15:41.000000000 +0100
+@@ -23,6 +23,7 @@
+
+ #include "alloc-util.h"
+ #include "fileio.h"
++#include "fd-util.h"
+ #include "hostname-setup.h"
+ #include "hostname-util.h"
+ #include "log.h"
+@@ -53,13 +53,84 @@
return 0;
}
+ /* First, try to load the generic hostname configuration file,
+ * that we support on all distributions */
+
-+ r = read_and_strip_hostname("/etc/hostname", hn);
++ r = read_hostname_config("/etc/hostname", hn);
+ if (r < 0) {
+ if (r == -ENOENT)
+ return read_distro_hostname(hn);
+}
+
int hostname_setup(void) {
- int r;
_cleanup_free_ char *b = NULL;
- const char *hn;
bool enoent = false;
+ const char *hn;
+ int r;
-- r = read_and_strip_hostname("/etc/hostname", &b);
+- r = read_hostname_config("/etc/hostname", &b);
+ r = read_hostname(&b);
if (r < 0) {
if (r == -ENOENT)
enoent = true;
-diff --git a/src/core/locale-setup.c b/src/core/locale-setup.c
-index 7f692e9..0a45854 100644
---- a/src/core/locale-setup.c
-+++ b/src/core/locale-setup.c
-@@ -74,6 +74,7 @@ int locale_setup(void) {
+diff -dur -x '*~' -x '*.orig' systemd-208.orig/src/core/locale-setup.c systemd-208/src/core/locale-setup.c
+--- systemd-208.orig/src/core/locale-setup.c 2013-10-01 00:17:21.000000000 +0200
++++ systemd-208/src/core/locale-setup.c 2014-01-09 15:15:41.000000000 +0100
+@@ -76,6 +76,7 @@
if (detect_container(NULL) <= 0) {
r = parse_env_file("/proc/cmdline", WHITESPACE,
"locale.LANG", &variables[VARIABLE_LANG],
"locale.LANGUAGE", &variables[VARIABLE_LANGUAGE],
"locale.LC_CTYPE", &variables[VARIABLE_LC_CTYPE],
-@@ -121,6 +121,15 @@ int locale_setup(void) {
+@@ -120,6 +121,15 @@
log_warning("Failed to read /etc/locale.conf: %s", strerror(-r));
}
+ log_warning("Failed to read /etc/sysconfig/i18n: %s", strerror(-r));
+ }
+
- if (!variables[VARIABLE_LANG]) {
- variables[VARIABLE_LANG] = strdup("C");
- if (!variables[VARIABLE_LANG]) {
---- systemd-196/src/timedate/timedated.c~ 2012-10-16 23:35:40.589269718 +0200
-+++ systemd-196/src/timedate/timedated.c 2012-12-21 11:46:13.545086335 +0100
-@@ -175,6 +175,13 @@
- }
- }
-
-+ r = parse_env_file("/etc/sysconfig/timezone", NEWLINE,
-+ "TIMEZONE", &tz.zone,
-+ NULL);
-+ if (r < 0) {
-+ if (r != -ENOENT)
-+ log_warning("Failed to read /etc/sysconfig/timezone: %s", strerror(-r));
-+ }
- #ifdef HAVE_DEBIAN
- r = read_one_line_file("/etc/timezone", &tz.zone);
- if (r < 0) {
-diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
-index 9196789..1d1a916 100644
---- a/src/vconsole/vconsole-setup.c
-+++ b/src/vconsole/vconsole-setup.c
-@@ -358,6 +358,14 @@
- }
+ add = NULL;
+ for (i = 0; i < _VARIABLE_MAX; i++) {
+ char *s;
+--- a/src/basic/time-util.c~ 2016-11-03 18:16:42.000000000 +0100
++++ b/src/basic/time-util.c 2016-11-12 19:54:28.457197174 +0100
+@@ -1290,8 +1290,16 @@ int get_timezone(char **tz) {
+ e = path_startswith(t, "/usr/share/zoneinfo/");
+ if (!e)
+ e = path_startswith(t, "../usr/share/zoneinfo/");
+- if (!e)
+- return -EINVAL;
++ if (!e) {
++ r = parse_env_file("/etc/sysconfig/timezone", NEWLINE,
++ "TIMEZONE", &e,
++ NULL);
++ if (r < 0) {
++ if (r != -ENOENT)
++ log_warning("Failed to read /etc/sysconfig/timezone: %s", strerror(-r));
++ return -EINVAL;
++ }
++ }
- if (r <= 0) {
-+ r = parse_env_file("/etc/sysconfig/console", NEWLINE,
-+ "CONSOLEFONT", &vc_font,
-+ "CONSOLEMAP", &vc_font_map,
-+ "CONSOLESCREENFONTMAP", &vc_font_unimap,
-+ "KEYTABLE", &vc_keymap,
-+ NULL);
-+ if (r < 0 && r != -ENOENT)
-+ log_warning("Failed to read /etc/sysconfig/console: %s", strerror(-r));
- }
+ if (!timezone_is_valid(e))
+ return -EINVAL;
+diff -dur -x '*~' -x '*.orig' systemd-208.orig/src/vconsole/vconsole-setup.c systemd-208/src/vconsole/vconsole-setup.c
+--- systemd-208.orig/src/vconsole/vconsole-setup.c 2013-08-13 22:02:47.000000000 +0200
++++ systemd-208/src/vconsole/vconsole-setup.c 2014-01-09 15:17:49.000000000 +0100
+@@ -284,6 +284,17 @@ int main(int argc, char **argv) {
+ if (r < 0 && r != -ENOENT)
+ log_warning("Failed to read /etc/vconsole.conf: %s", strerror(-r));
- r = EXIT_FAILURE;
++ if (r <= 0) {
++ int r1 = parse_env_file("/etc/sysconfig/console", NEWLINE,
++ "CONSOLEFONT", &vc_font,
++ "CONSOLEMAP", &vc_font_map,
++ "CONSOLESCREENFONTMAP", &vc_font_unimap,
++ "KEYTABLE", &vc_keymap,
++ NULL);
++ if (r1 < 0 && r1 != -ENOENT)
++ log_warning("Failed to read /etc/sysconfig/console: %s", strerror(-r1));
++ }
++
+ /* Let the kernel command line override /etc/vconsole.conf */
+ if (detect_container(NULL) <= 0) {
+ r = parse_env_file("/proc/cmdline", WHITESPACE,