summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2021-12-31 03:48:17 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2021-12-31 03:58:06 +0900
commitd8d6b2275f7b7a5b58c6b0d89b78c927333c6af9 (patch)
tree63f1d579f01ec0677bb2710938166ba5e440bd06
parent1e65eb8f9b7d567462030b2e625998d77677e636 (diff)
downloadsystemd-d8d6b2275f7b7a5b58c6b0d89b78c927333c6af9.tar.gz
hostname-setup: gracefully handle kernel with empty CONFIG_DEFAULT_HOSTNAME
Previously, sethostname_idempotent_full() calls gethostname_full() with GET_HOSTNAME_ALLOW_NONE and GET_HOSTNAME_ALLOW_LOCALHOST flags. That intended to get any values set by kernel. But, that does not work, as the hostname may be empty. Let's simplify the logic. The function sethostname_idempotent_full() intends to set the requested hostname only when the current hostname is different from the requested one. So, no check in getostname_full() is required. Hence, simply use the result of uname() here. Fixes #21896.
-rw-r--r--src/shared/hostname-setup.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/src/shared/hostname-setup.c b/src/shared/hostname-setup.c
index 1329b0d189..0fac0ecab7 100644
--- a/src/shared/hostname-setup.c
+++ b/src/shared/hostname-setup.c
@@ -20,16 +20,13 @@
#include "util.h"
static int sethostname_idempotent_full(const char *s, bool really) {
- _cleanup_free_ char *buf = NULL;
- int r;
+ struct utsname u;
assert(s);
- r = gethostname_full(GET_HOSTNAME_ALLOW_NONE | GET_HOSTNAME_ALLOW_LOCALHOST, &buf);
- if (r < 0)
- return r;
+ assert_se(uname(&u) >= 0);
- if (streq(buf, s))
+ if (streq_ptr(s, u.nodename))
return 0;
if (really &&