summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/hostname-setup.c25
-rw-r--r--src/shared/util.c10
-rw-r--r--src/shared/util.h1
3 files changed, 17 insertions, 19 deletions
diff --git a/src/core/hostname-setup.c b/src/core/hostname-setup.c
index 03b5f472a5..e3ea5fe767 100644
--- a/src/core/hostname-setup.c
+++ b/src/core/hostname-setup.c
@@ -151,31 +151,20 @@ int hostname_setup(void) {
r = read_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;
- if (!hn) {
- /* Don't override the hostname if it is unset and not
- * explicitly configured */
-
- char *old_hostname = NULL;
-
- old_hostname = gethostname_malloc();
- if (old_hostname) {
- bool already_set;
-
- already_set = old_hostname[0] != 0;
- free(old_hostname);
-
- if (already_set)
- goto finish;
- }
+ if (isempty(hn)) {
+ /* Don't override the hostname if it is already set
+ * and not explicitly configured */
+ if (hostname_is_set())
+ goto finish;
if (enoent)
log_info("No hostname configured.");
diff --git a/src/shared/util.c b/src/shared/util.c
index ae0ce320ad..0234f3b483 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -2949,12 +2949,20 @@ char* gethostname_malloc(void) {
assert_se(uname(&u) >= 0);
- if (u.nodename[0])
+ if (!isempty(u.nodename) && !streq(u.nodename, "(none)"))
return strdup(u.nodename);
return strdup(u.sysname);
}
+bool hostname_is_set(void) {
+ struct utsname u;
+
+ assert_se(uname(&u) >= 0);
+
+ return !isempty(u.nodename) && !streq(u.nodename, "(none)");
+}
+
char* getlogname_malloc(void) {
uid_t uid;
long bufsize;
diff --git a/src/shared/util.h b/src/shared/util.h
index 3dce047b40..e727ee7389 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -337,6 +337,7 @@ void rename_process(const char name[8]);
void sigset_add_many(sigset_t *ss, ...);
char* gethostname_malloc(void);
+bool hostname_is_set(void);
char* getlogname_malloc(void);
int getttyname_malloc(int fd, char **r);