From 344de60901f0e3ce0d2f112b7be97fc6d0e2f071 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 21 May 2012 17:19:58 +0200 Subject: [PATCH] =?utf8?q?hostname-setup:=20also=20consider=20(=C5=84one)?= =?utf8?q?=20an=20unset=20hostname?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/core/hostname-setup.c | 25 +++++++------------------ src/shared/util.c | 10 +++++++++- src/shared/util.h | 1 + 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/core/hostname-setup.c b/src/core/hostname-setup.c index 03b5f472..e3ea5fe7 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 ae0ce320..0234f3b4 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 3dce047b..e727ee73 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); -- 2.39.5