diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2022-01-03 19:56:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-03 19:56:57 +0100 |
commit | e97a3001483951f081d14ec5726ef6108da636f2 (patch) | |
tree | e22dbc1933ba8ffefa8f5b74b95a240f0dee23b0 | |
parent | 8fb16fee96a1563738e7fa784fc45d152b8c2694 (diff) | |
parent | 9383fa08bd263277d9a17a8999c3497458f273e3 (diff) | |
download | systemd-e97a3001483951f081d14ec5726ef6108da636f2.tar.gz |
Merge pull request #21941 from yuwata/hostname-handle-empty
hostname-setup: support kernel with empty CONFIG_DEFAULT_HOSTNAME
-rw-r--r-- | src/basic/hostname-util.c | 3 | ||||
-rw-r--r-- | src/basic/hostname-util.h | 7 | ||||
-rw-r--r-- | src/shared/hostname-setup.c | 9 | ||||
-rw-r--r-- | src/test/test-sysctl-util.c | 9 |
4 files changed, 13 insertions, 15 deletions
diff --git a/src/basic/hostname-util.c b/src/basic/hostname-util.c index 1d0640e075..136fb3e595 100644 --- a/src/basic/hostname-util.c +++ b/src/basic/hostname-util.c @@ -46,8 +46,7 @@ int gethostname_full(GetHostnameFlags flags, char **ret) { assert_se(uname(&u) >= 0); s = u.nodename; - if (isempty(s) || - (!FLAGS_SET(flags, GET_HOSTNAME_ALLOW_NONE) && streq(s, "(none)")) || + if (isempty(s) || streq(s, "(none)") || (!FLAGS_SET(flags, GET_HOSTNAME_ALLOW_LOCALHOST) && is_localhost(s)) || (FLAGS_SET(flags, GET_HOSTNAME_SHORT) && s[0] == '.')) { if (!FLAGS_SET(flags, GET_HOSTNAME_FALLBACK_DEFAULT)) diff --git a/src/basic/hostname-util.h b/src/basic/hostname-util.h index 0d1574db9e..d435bed50e 100644 --- a/src/basic/hostname-util.h +++ b/src/basic/hostname-util.h @@ -9,10 +9,9 @@ #include "strv.h" typedef enum GetHostnameFlags { - GET_HOSTNAME_ALLOW_NONE = 1 << 0, /* accepts "(none)". */ - GET_HOSTNAME_ALLOW_LOCALHOST = 1 << 1, /* accepts "localhost" or friends. */ - GET_HOSTNAME_FALLBACK_DEFAULT = 1 << 2, /* use default hostname if no hostname is set. */ - GET_HOSTNAME_SHORT = 1 << 3, /* kills the FQDN part if present. */ + GET_HOSTNAME_ALLOW_LOCALHOST = 1 << 0, /* accepts "localhost" or friends. */ + GET_HOSTNAME_FALLBACK_DEFAULT = 1 << 1, /* use default hostname if no hostname is set. */ + GET_HOSTNAME_SHORT = 1 << 2, /* kills the FQDN part if present. */ } GetHostnameFlags; int gethostname_full(GetHostnameFlags flags, char **ret); 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 && diff --git a/src/test/test-sysctl-util.c b/src/test/test-sysctl-util.c index 6464a7965b..8bd3c26152 100644 --- a/src/test/test-sysctl-util.c +++ b/src/test/test-sysctl-util.c @@ -1,5 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include <sys/utsname.h> + #include "sd-id128.h" #include "errno-util.h" @@ -38,7 +40,8 @@ TEST(sysctl_normalize) { } TEST(sysctl_read) { - _cleanup_free_ char *s = NULL, *h = NULL; + _cleanup_free_ char *s = NULL; + struct utsname u; sd_id128_t a, b; int r; @@ -63,8 +66,8 @@ TEST(sysctl_read) { s = mfree(s); assert_se(sysctl_read("kernel/hostname", &s) >= 0); - assert_se(gethostname_full(GET_HOSTNAME_ALLOW_NONE|GET_HOSTNAME_ALLOW_LOCALHOST, &h) >= 0); - assert_se(streq(s, h)); + assert_se(uname(&u) >= 0); + assert_se(streq_ptr(s, u.nodename)); r = sysctl_write("kernel/hostname", s); assert_se(r >= 0 || ERRNO_IS_PRIVILEGE(r) || r == -EROFS); |