From: Frederic Crozat <fcrozat@suse.com>
Date: Fri, 15 Feb 2013 16:04:39 +0000
Subject: handle /etc/HOSTNAME

(bnc#803653)
---
 src/core/hostname-setup.c |   22 +++++++++++++++++-----
 src/hostname/hostnamed.c  |   12 +++++++++++-
 2 files changed, 28 insertions(+), 6 deletions(-)

--- systemd-206/src/core/hostname-setup.c
+++ systemd-206/src/core/hostname-setup.c
@@ -61,12 +61,24 @@ int hostname_setup(void) {
 
         r = read_and_strip_hostname("/etc/hostname", &b);
         if (r < 0) {
-                if (r == -ENOENT)
-                        enoent = true;
-                else
-                        log_warning("Failed to read configured hostname: %s", strerror(-r));
+                if (r == -ENOENT) {
+                        /* use SUSE fallback */
+                        r = read_and_strip_hostname("/etc/HOSTNAME", &b);
+                        if (r < 0) {
+                                if (r == -ENOENT)
+                                        enoent = true;
+                                else
+                                        log_warning("Failed to read configured hostname: %s", strerror(-r));
+                                hn = NULL;
+                        }
+                        else
+                                hn = b;
 
-                hn = NULL;
+                }
+                else {
+                        log_warning("Failed to read configured hostname: %s", strerror(-r));
+                        hn = NULL;
+                }
         } else
                 hn = b;
 
--- systemd-209/src/hostname/hostnamed.c
+++ systemd-209/src/hostname/hostnamed.c	2014-02-28 11:36:30.594735241 +0000
@@ -89,6 +89,10 @@ static int context_read_data(Context *c)
         if (r < 0 && r != -ENOENT)
                 return r;
 
+        r = read_one_line_file("/etc/HOSTNAME", &c->data[PROP_STATIC_HOSTNAME]);
+        if (r < 0 && r != -ENOENT)
+                return r;
+
         return 0;
 }
 
@@ -246,6 +250,7 @@ static int context_write_data_hostname(C
 }
 
 static int context_write_data_static_hostname(Context *c) {
+        int r;
 
         assert(c);
 
@@ -256,7 +261,12 @@ static int context_write_data_static_hos
 
                 return 0;
         }
-        return write_string_file_atomic_label("/etc/hostname", c->data[PROP_STATIC_HOSTNAME]);
+
+        r = write_string_file_atomic_label("/etc/hostname", c->data[PROP_STATIC_HOSTNAME]);
+        if (!r) {
+                r = symlink_atomic("/etc/hostname", "/etc/HOSTNAME");
+        }
+        return r;
 }
 
 static int context_write_data_other(Context *c) {
