From 8631708741447830311aeb210f6f02bb55a423f7 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sat, 28 Jul 2018 21:46:00 +0900 Subject: [PATCH] resolve: add option to toggle reading /etc/hosts Workaround for #9718. --- man/resolved.conf.xml | 7 +++++++ src/resolve/resolved-etc-hosts.c | 3 +++ src/resolve/resolved-gperf.gperf | 1 + src/resolve/resolved-manager.c | 1 + src/resolve/resolved-manager.h | 1 + src/resolve/resolved.conf.in | 1 + 6 files changed, 14 insertions(+) diff --git a/man/resolved.conf.xml b/man/resolved.conf.xml index dbd07e8151e..055c4745926 100644 --- a/man/resolved.conf.xml +++ b/man/resolved.conf.xml @@ -248,6 +248,13 @@ in use. + + ReadEtcHosts= + Takes a boolean argument. If yes (the default), the DNS stub resolver will read + /etc/hosts, and try to resolve hosts or address by using the entries in the file before + sending query to DNS servers. + + diff --git a/src/resolve/resolved-etc-hosts.c b/src/resolve/resolved-etc-hosts.c index 2c52c91b72f..5d394a86393 100644 --- a/src/resolve/resolved-etc-hosts.c +++ b/src/resolve/resolved-etc-hosts.c @@ -324,6 +324,9 @@ int manager_etc_hosts_lookup(Manager *m, DnsQuestion* q, DnsAnswer **answer) { assert(q); assert(answer); + if (!m->read_etc_hosts) + return 0; + r = manager_etc_hosts_read(m); if (r < 0) return r; diff --git a/src/resolve/resolved-gperf.gperf b/src/resolve/resolved-gperf.gperf index 648ca4d8a24..9b9290b727e 100644 --- a/src/resolve/resolved-gperf.gperf +++ b/src/resolve/resolved-gperf.gperf @@ -26,3 +26,4 @@ Resolve.DNSSEC, config_parse_dnssec_mode, 0, Resolve.DNSOverTLS, config_parse_dns_over_tls_mode, 0, offsetof(Manager, dns_over_tls_mode) Resolve.Cache, config_parse_bool, 0, offsetof(Manager, enable_cache) Resolve.DNSStubListener, config_parse_dns_stub_listener_mode, 0, offsetof(Manager, dns_stub_listener_mode) +Resolve.ReadEtcHosts, config_parse_bool, 0, offsetof(Manager, read_etc_hosts) diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index 44a53952d24..03ca5188cb8 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -581,6 +581,7 @@ int manager_new(Manager **ret) { m->read_resolv_conf = true; m->need_builtin_fallbacks = true; m->etc_hosts_last = m->etc_hosts_mtime = USEC_INFINITY; + m->read_etc_hosts = true; r = dns_trust_anchor_load(&m->trust_anchor); if (r < 0) diff --git a/src/resolve/resolved-manager.h b/src/resolve/resolved-manager.h index be7ad2d10dd..5251ca795de 100644 --- a/src/resolve/resolved-manager.h +++ b/src/resolve/resolved-manager.h @@ -117,6 +117,7 @@ struct Manager { Set* etc_hosts_by_address; Hashmap* etc_hosts_by_name; usec_t etc_hosts_last, etc_hosts_mtime; + bool read_etc_hosts; /* Local DNS stub on 127.0.0.53:53 */ int dns_stub_udp_fd; diff --git a/src/resolve/resolved.conf.in b/src/resolve/resolved.conf.in index 2528340f74a..e559291f66c 100644 --- a/src/resolve/resolved.conf.in +++ b/src/resolve/resolved.conf.in @@ -21,3 +21,4 @@ #DNSOverTLS=@DEFAULT_DNS_OVER_TLS_MODE@ #Cache=yes #DNSStubListener=udp +#ReadEtcHosts=yes -- 2.39.2