diff options
author | Lennart Poettering <lennart@poettering.net> | 2017-08-01 09:43:41 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-01 09:43:41 +0200 |
commit | f19ca6105e9f74b01e799d02c280eec67696c228 (patch) | |
tree | a2b530b2c214dd24a022c175474aca4251cea952 | |
parent | 7f18ef0a555a3c3cef08e0965dc453fe5954b5a7 (diff) | |
parent | d5da77077d9a9727d42e1d1a77d1db52c258c207 (diff) | |
download | systemd-f19ca6105e9f74b01e799d02c280eec67696c228.tar.gz |
Merge pull request #6420 from keszybz/gateway-name
Rename "gateway" to "_gateway" and other resolved changes
-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-stub.c | 8 | ||||
-rw-r--r-- | src/resolve/resolved-dns-synthesize.c | 2 | ||||
-rw-r--r-- | src/shared/dns-domain.c | 29 | ||||
-rw-r--r-- | src/test/test-dns-domain.c | 6 | ||||
-rw-r--r-- | src/test/test-nss.c | 2 |
9 files changed, 55 insertions, 10 deletions
diff --git a/meson.build b/meson.build index 5cc2e35570..f73729d392 100644 --- a/meson.build +++ b/meson.build @@ -545,6 +545,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, @@ -2409,6 +2411,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 a37e8176a0..3de72acf95 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 869d233d49..1f27e06e6f 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-stub.c b/src/resolve/resolved-dns-stub.c index 7afbfedfb0..6f7b5ab9e8 100644 --- a/src/resolve/resolved-dns-stub.c +++ b/src/resolve/resolved-dns-stub.c @@ -543,6 +543,14 @@ int manager_dns_stub_start(Manager *m) { assert(m); + if (m->dns_stub_listener_mode == DNS_STUB_LISTENER_NO) + log_debug("Not creating stub listener."); + else + log_debug("Creating stub listener using %s.", + m->dns_stub_listener_mode == DNS_STUB_LISTENER_UDP ? "UDP" : + m->dns_stub_listener_mode == DNS_STUB_LISTENER_TCP ? "TCP" : + "UDP/TCP"); + if (IN_SET(m->dns_stub_listener_mode, DNS_STUB_LISTENER_YES, DNS_STUB_LISTENER_UDP)) r = manager_dns_stub_udp_fd(m); 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/shared/dns-domain.c b/src/shared/dns-domain.c index 12c4d65dd3..139d286af8 100644 --- a/src/shared/dns-domain.c +++ b/src/shared/dns-domain.c @@ -1274,15 +1274,38 @@ int dns_name_apply_idna(const char *name, char **ret) { #if defined(HAVE_LIBIDN2) int r; + _cleanup_free_ char *t = NULL; assert(name); assert(ret); - r = idn2_lookup_u8((uint8_t*) name, (uint8_t**) ret, + r = idn2_lookup_u8((uint8_t*) name, (uint8_t**) &t, IDN2_NFC_INPUT | IDN2_NONTRANSITIONAL); - if (r == IDN2_OK) + log_debug("idn2_lookup_u8: %s → %s", name, t); + if (r == IDN2_OK) { + if (!startswith(name, "xn--")) { + _cleanup_free_ char *s = NULL; + + r = idn2_to_unicode_8z8z(t, &s, 0); + if (r != IDN2_OK) { + log_debug("idn2_to_unicode_8z8z(\"%s\") failed: %d/%s", + t, r, idn2_strerror(r)); + return 0; + } + + if (!streq_ptr(name, s)) { + log_debug("idn2 roundtrip failed: \"%s\" → \"%s\" → \"%s\", ignoring.", + name, t, s); + return 0; + } + } + + *ret = t; + t = NULL; return 1; /* *ret has been written */ - log_debug("idn2_lookup_u8(\"%s\") failed: %s", name, idn2_strerror(r)); + } + + log_debug("idn2_lookup_u8(\"%s\") failed: %d/%s", name, r, idn2_strerror(r)); if (r == IDN2_2HYPHEN) /* The name has two hypens — forbidden by IDNA2008 in some cases */ return 0; diff --git a/src/test/test-dns-domain.c b/src/test/test-dns-domain.c index 11cf0b1f0b..cbd2d1e656 100644 --- a/src/test/test-dns-domain.c +++ b/src/test/test-dns-domain.c @@ -652,6 +652,12 @@ static void test_dns_name_apply_idna(void) { test_dns_name_apply_idna_one("föö.bär.", ret, "xn--f-1gaa.xn--br-via"); test_dns_name_apply_idna_one("xn--f-1gaa.xn--br-via", ret, "xn--f-1gaa.xn--br-via"); + test_dns_name_apply_idna_one("_443._tcp.fedoraproject.org", ret2, + "_443._tcp.fedoraproject.org"); + test_dns_name_apply_idna_one("_443", ret2, "_443"); + test_dns_name_apply_idna_one("gateway", ret, "gateway"); + test_dns_name_apply_idna_one("_gateway", ret2, "_gateway"); + test_dns_name_apply_idna_one("r3---sn-ab5l6ne7.googlevideo.com", ret2, ret2 ? "r3---sn-ab5l6ne7.googlevideo.com" : ""); } 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; |