From: Yu Watanabe Date: Thu, 30 Dec 2021 18:48:17 +0000 (+0900) Subject: hostname-setup: gracefully handle kernel with empty CONFIG_DEFAULT_HOSTNAME X-Git-Tag: v251-rc1~609^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d8d6b2275f7b7a5b58c6b0d89b78c927333c6af9;p=thirdparty%2Fsystemd.git 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. --- diff --git a/src/shared/hostname-setup.c b/src/shared/hostname-setup.c index 1329b0d1894..0fac0ecab71 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 &&