diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-12-31 03:48:17 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-12-31 03:58:06 +0900 |
commit | d8d6b2275f7b7a5b58c6b0d89b78c927333c6af9 (patch) | |
tree | 63f1d579f01ec0677bb2710938166ba5e440bd06 | |
parent | 1e65eb8f9b7d567462030b2e625998d77677e636 (diff) | |
download | systemd-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.c | 9 |
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 && |