diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2017-07-11 02:15:08 -0400 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2017-07-31 14:41:56 -0400 |
commit | 5248e7e1f11aba6859de0b28f0dd3778b22842f2 (patch) | |
tree | 62143442856913034994562e5d2597ebba7f76a8 | |
parent | 0926f3489dbc93a2e91ec8607a0ceb5d4d8a53e3 (diff) | |
download | systemd-5248e7e1f11aba6859de0b28f0dd3778b22842f2.tar.gz |
resolved,nss-myhostname: use _gateway for the gateway
This changes the symbolic name for the default gateway from "gateway" to
"_gateway". A new configuration option -Dcompat-gateway-hostname=true|false
is added. If it is set, the old name is also supported, but the new name
is used as the canonical name in either case. This is intended as a temporary
measure to make the transition easier, and the option should be removed
after a few releases, at which point only the new name will be used.
The old "gateway" name mostly works OK, but hasn't gained widespread acceptance
because of the following (potential) conflicts:
- it is completely legal to have a host called "gateway"
- there is no guarantee that "gateway" will not be registered as a TLD, even
though this currently seems unlikely. (Even then, there would be no
conflict except for the case when the top-level domain itself was being resolved.
The "gateway" or "_gateway" labels have only special meaning when the
whole name consists of a single label, so resolution of any subdomain
of the hypothetical gateway. TLD would still work OK. )
Moving to "_gateway" avoids those issues because underscores are not allowed
in host names (RFC 1123, §2.1) and avoids potential conflicts with local or
global names.
v2:
- simplify the logic to hardcode "_gateway" and allow
-Dcompat-gateway-hostname=true as a temporary measure.
-rw-r--r-- | meson.build | 3 | ||||
-rw-r--r-- | meson_options.txt | 2 | ||||
-rw-r--r-- | src/basic/hostname-util.c | 7 | ||||
-rw-r--r-- | src/nss-myhostname/nss-myhostname.c | 6 | ||||
-rw-r--r-- | src/resolve/resolved-dns-synthesize.c | 2 | ||||
-rw-r--r-- | src/test/test-nss.c | 2 |
6 files changed, 15 insertions, 7 deletions
diff --git a/meson.build b/meson.build index ba8bb81856..2be88c5ea1 100644 --- a/meson.build +++ b/meson.build @@ -537,6 +537,8 @@ endforeach ############################################################ conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname')) +conf.set10('ENABLE_COMPAT_GATEWAY_HOSTNAME', get_option('compat-gateway-hostname')) +gateway_hostnames = ['_gateway'] + (conf.get('ENABLE_COMPAT_GATEWAY_HOSTNAME') == 1 ? ['gateway'] : []) default_hierarchy = get_option('default-hierarchy') conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy, @@ -2399,6 +2401,7 @@ status = [ 'nobody user name: @0@'.format(get_option('nobody-user')), 'nobody group name: @0@'.format(get_option('nobody-group')), 'fallback hostname: @0@'.format(get_option('fallback-hostname')), + 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)), 'default DNSSEC mode: @0@'.format(default_dnssec), 'default cgroup hierarchy: @0@'.format(default_hierarchy), diff --git a/meson_options.txt b/meson_options.txt index 0cd8fb02e7..a2de6aba3a 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -120,6 +120,8 @@ option('pamconfdir', type : 'string', option('fallback-hostname', type : 'string', value : 'localhost', description : 'the hostname used if none configured') +option('compat-gateway-hostname', type : 'boolean', value : 'false', + description : 'allow "gateway" as the symbolic name for default gateway') option('default-hierarchy', type : 'combo', choices : ['legacy', 'hybrid', 'unified'], value : 'hybrid', description : 'default cgroup hierarchy') diff --git a/src/basic/hostname-util.c b/src/basic/hostname-util.c index a94037b303..b511a36301 100644 --- a/src/basic/hostname-util.c +++ b/src/basic/hostname-util.c @@ -196,8 +196,11 @@ bool is_gateway_hostname(const char *hostname) { * synthetic "gateway" host. */ return - strcaseeq(hostname, "gateway") || - strcaseeq(hostname, "gateway."); + strcaseeq(hostname, "_gateway") || strcaseeq(hostname, "_gateway.") +#if ENABLE_COMPAT_GATEWAY_HOSTNAME + || strcaseeq(hostname, "gateway") || strcaseeq(hostname, "gateway.") +#endif + ; } int sethostname_idempotent(const char *s) { diff --git a/src/nss-myhostname/nss-myhostname.c b/src/nss-myhostname/nss-myhostname.c index 0570fde592..9ebdbb7cf3 100644 --- a/src/nss-myhostname/nss-myhostname.c +++ b/src/nss-myhostname/nss-myhostname.c @@ -86,7 +86,7 @@ enum nss_status _nss_myhostname_gethostbyname4_r( return NSS_STATUS_NOTFOUND; } - canonical = "gateway"; + canonical = "_gateway"; } else { hn = gethostname_malloc(); @@ -356,7 +356,7 @@ enum nss_status _nss_myhostname_gethostbyname3_r( return NSS_STATUS_NOTFOUND; } - canonical = "gateway"; + canonical = "_gateway"; } else { hn = gethostname_malloc(); @@ -467,7 +467,7 @@ enum nss_status _nss_myhostname_gethostbyaddr2_r( continue; if (memcmp(addr, &a->address, FAMILY_ADDRESS_SIZE(af)) == 0) { - canonical = "gateway"; + canonical = "_gateway"; goto found; } } diff --git a/src/resolve/resolved-dns-synthesize.c b/src/resolve/resolved-dns-synthesize.c index e3003411f7..c454f64049 100644 --- a/src/resolve/resolved-dns-synthesize.c +++ b/src/resolve/resolved-dns-synthesize.c @@ -334,7 +334,7 @@ static int synthesize_gateway_ptr(Manager *m, int af, const union in_addr_union if (n < 0) return n; - return answer_add_addresses_ptr(answer, "gateway", addresses, n, af, address); + return answer_add_addresses_ptr(answer, "_gateway", addresses, n, af, address); } int dns_synthesize_answer( diff --git a/src/test/test-nss.c b/src/test/test-nss.c index 57eeb8e40c..44570caa6c 100644 --- a/src/test/test-nss.c +++ b/src/test/test-nss.c @@ -491,7 +491,7 @@ static int parse_argv(int argc, char **argv, if (!hostname) return -ENOMEM; - names = strv_new("localhost", "gateway", "foo_no_such_host", hostname, NULL); + names = strv_new("localhost", "_gateway", "foo_no_such_host", hostname, NULL); if (!names) return -ENOMEM; |