diff options
| author | Michael Biebl <biebl@debian.org> | 2022-01-13 22:34:27 +0100 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2022-01-13 22:34:27 +0100 |
| commit | dd97d276b5d70c3397a4e59c978ca5228f06ba44 (patch) | |
| tree | 5fb3f5e0f5da28e39d3261d50561349a512ba297 /src/libnm-systemd-shared/src/basic/hostname-util.c | |
| parent | 3e2f6719468f8d957ae3cb112f3cb75b9c82d6a7 (diff) | |
| parent | 88c227d90a6b7b388c5c85d72802a0ca8f05ed5c (diff) | |
Update upstream source from tag 'upstream/1.34.0'
Update to upstream version '1.34.0' with Debian dir b598c27ee9cef517760bc745aa6a3bb7d9fb2ecb
Diffstat (limited to 'src/libnm-systemd-shared/src/basic/hostname-util.c')
| -rw-r--r-- | src/libnm-systemd-shared/src/basic/hostname-util.c | 71 |
1 files changed, 23 insertions, 48 deletions
diff --git a/src/libnm-systemd-shared/src/basic/hostname-util.c b/src/libnm-systemd-shared/src/basic/hostname-util.c index 8f7679b6..3063cc7c 100644 --- a/src/libnm-systemd-shared/src/basic/hostname-util.c +++ b/src/libnm-systemd-shared/src/basic/hostname-util.c @@ -39,69 +39,42 @@ char* get_default_hostname(void) { return strdup(FALLBACK_HOSTNAME); } -char* gethostname_malloc(void) { +int gethostname_full(GetHostnameFlags flags, char **ret) { + _cleanup_free_ char *buf = NULL, *fallback = NULL; struct utsname u; const char *s; - /* This call tries to return something useful, either the actual hostname - * or it makes something up. The only reason it might fail is OOM. - * It might even return "localhost" if that's set. */ + assert(ret); assert_se(uname(&u) >= 0); s = u.nodename; - if (isempty(s) || streq(s, "(none)")) - return get_default_hostname(); - - return strdup(s); -} - -char* gethostname_short_malloc(void) { - struct utsname u; - const char *s; - _cleanup_free_ char *f = NULL; - - /* Like above, but kills the FQDN part if present. */ - - assert_se(uname(&u) >= 0); - - s = u.nodename; - if (isempty(s) || streq(s, "(none)") || s[0] == '.') { - s = f = get_default_hostname(); + if (isempty(s) || + (!FLAGS_SET(flags, GET_HOSTNAME_ALLOW_NONE) && 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)) + return -ENXIO; + + s = fallback = get_default_hostname(); if (!s) - return NULL; + return -ENOMEM; - assert(s[0] != '.'); + if (FLAGS_SET(flags, GET_HOSTNAME_SHORT) && s[0] == '.') + return -ENXIO; } - return strndup(s, strcspn(s, ".")); -} -#endif /* NM_IGNORED */ - -int gethostname_strict(char **ret) { - struct utsname u; - char *k; - - /* This call will rather fail than make up a name. It will not return "localhost" either. */ - - assert_se(uname(&u) >= 0); - - if (isempty(u.nodename)) - return -ENXIO; - - if (streq(u.nodename, "(none)")) - return -ENXIO; - - if (is_localhost(u.nodename)) - return -ENXIO; - - k = strdup(u.nodename); - if (!k) + if (FLAGS_SET(flags, GET_HOSTNAME_SHORT)) + buf = strndup(s, strcspn(s, ".")); + else + buf = strdup(s); + if (!buf) return -ENOMEM; - *ret = k; + *ret = TAKE_PTR(buf); return 0; } +#endif /* NM_IGNORED */ bool valid_ldh_char(char c) { /* "LDH" → "Letters, digits, hyphens", as per RFC 5890, Section 2.3.1 */ @@ -168,6 +141,7 @@ bool hostname_is_valid(const char *s, ValidHostnameFlags flags) { return true; } +#if 0 /* NM_IGNORED */ char* hostname_cleanup(char *s) { char *p, *d; bool dot, hyphen; @@ -205,6 +179,7 @@ char* hostname_cleanup(char *s) { return s; } +#endif /* NM_IGNORED */ bool is_localhost(const char *hostname) { assert(hostname); |