hostnamed: stop discriminating against "localhost" in /etc/hostname

We would sometimes ignore localhost-style names in /etc/hostname. That is
brittle. If the user configured some hostname, it's most likely because they
want to use that as the hostname. If they don't want to use such a hostname,
they should just not create the config. Everything becomes simples if we just
use the configured hostname as-is.

This behaviour seems to have been a workaround for Anaconda installer and other
tools writing out /etc/hostname with the default of "localhost.localdomain".
Anaconda PR to stop doing that: https://github.com/rhinstaller/anaconda/pull/3040.
That might have been useful as a work-around for other programs misbehaving if
/etc/hostname was not present, but nowadays it's not useful because systemd
mostly controls the hostname and it is perfectly happy without that file.

Apart from making things simpler, this allows users to set a hostname like
"localhost" and have it honoured, if such a whim strikes them.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2020-12-16 11:02:18 +01:00
parent 468695c8cd
commit d39079fcaa
2 changed files with 6 additions and 17 deletions
+4 -15
View File
@@ -312,15 +312,11 @@ static char* context_fallback_icon_name(Context *c) {
return strdup("computer");
}
static bool hostname_is_useful(const char *hn) {
return !isempty(hn) && !is_localhost(hn);
}
static int context_update_kernel_hostname(
Context *c,
const char *transient_hn) {
const char *static_hn, *hn;
const char *hn;
struct utsname u;
int r;
@@ -333,21 +329,14 @@ static int context_update_kernel_hostname(
isempty(u.nodename) || streq(u.nodename, "(none)") ? NULL : u.nodename;
}
static_hn = c->data[PROP_STATIC_HOSTNAME];
/* /etc/hostname with something other than "localhost"
* has the highest preference ... */
if (hostname_is_useful(static_hn))
hn = static_hn;
/* /etc/hostname has the highest preference ... */
if (c->data[PROP_STATIC_HOSTNAME])
hn = c->data[PROP_STATIC_HOSTNAME];
/* ... the transient hostname, (ie: DHCP) comes next ... */
else if (!isempty(transient_hn))
hn = transient_hn;
/* ... fallback to static "localhost.*" ignored above ... */
else if (!isempty(static_hn))
hn = static_hn;
/* ... and the ultimate fallback */
else
hn = FALLBACK_HOSTNAME;