From 63003524cb7c27b50583cc4d90b5d81af5f7a7f6 Mon Sep 17 00:00:00 2001 From: "David R. Hedges" Date: Thu, 18 Feb 2016 21:31:38 -0600 Subject: [PATCH] *.localdomain != localhost ".localdomain" is not a reserved suffix (or prefix). I'm not aware of any product expecting *.localdomain to resolve to localhost, however I am aware of at least one product that defaults to ".localdomain" as its DNS suffix provided via DHCP (pfSense). This leads to unexpected results when attempting to access a host that's offline (or a host that's online, when nsswitch.conf is [mis-]configured to have myhostname ahead of DNS). Operate on: localhost (and localhost.) *.localhost (and *.localhost.) localhost.localdomain (and localhost.localdomain.) *.localhost.localdomain (and *.localhost.localdomain.) We should not cover: *.localdomain (nor *.localdomain.) localdomain (nor localdomain.) --- man/nss-myhostname.xml | 7 ++++--- man/systemd-resolved.service.xml | 7 ++++--- src/basic/hostname-util.c | 10 +++++----- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/man/nss-myhostname.xml b/man/nss-myhostname.xml index 251bdecbad..e339e6b44e 100644 --- a/man/nss-myhostname.xml +++ b/man/nss-myhostname.xml @@ -71,9 +71,10 @@ is on the local loopback) and the IPv6 address ::1 (which is the local host). - The hostname localhost (as well as any hostname ending in - .localhost, .localdomain or equal to localdomain) is - resolved to the IP addresses 127.0.0.1 and ::1. + The hostnames localhost and + localhost.localdomain (as well as any hostname + ending in .localhost or .localhost.localdomain) + are resolved to the IP addresses 127.0.0.1 and ::1. The hostname gateway is resolved to all current default routing gateway addresses, diff --git a/man/systemd-resolved.service.xml b/man/systemd-resolved.service.xml index 7a9e23a2c6..829729ca09 100644 --- a/man/systemd-resolved.service.xml +++ b/man/systemd-resolved.service.xml @@ -87,9 +87,10 @@ is on the local loopback) and the IPv6 address ::1 (which is the local host). - The hostname localhost (as well as any hostname ending in - .localhost, .localdomain or equal to localdomain) is - resolved to the IP addresses 127.0.0.1 and ::1. + The hostnames localhost and + localhost.localdomain (as well as any hostname + ending in .localhost or .localhost.localdomain) + are resolved to the IP addresses 127.0.0.1 and ::1. The hostname gateway is resolved to all current default routing gateway addresses, diff --git a/src/basic/hostname-util.c b/src/basic/hostname-util.c index 7bb23448ed..4fe6a725aa 100644 --- a/src/basic/hostname-util.c +++ b/src/basic/hostname-util.c @@ -150,16 +150,16 @@ bool is_localhost(const char *hostname) { assert(hostname); /* This tries to identify local host and domain names - * described in RFC6761 plus the redhatism of .localdomain */ + * described in RFC6761 plus the redhatism of localdomain */ return strcaseeq(hostname, "localhost") || strcaseeq(hostname, "localhost.") || - strcaseeq(hostname, "localdomain.") || - strcaseeq(hostname, "localdomain") || + strcaseeq(hostname, "localhost.localdomain") || + strcaseeq(hostname, "localhost.localdomain.") || endswith_no_case(hostname, ".localhost") || endswith_no_case(hostname, ".localhost.") || - endswith_no_case(hostname, ".localdomain") || - endswith_no_case(hostname, ".localdomain."); + endswith_no_case(hostname, ".localhost.localdomain") || + endswith_no_case(hostname, ".localhost.localdomain."); } bool is_gateway_hostname(const char *hostname) {