diff options
author | Martin Pitt <martin.pitt@ubuntu.com> | 2016-12-22 07:58:02 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-22 07:58:02 +0100 |
commit | 4050e04b2c3ff2a1ae458089735ff787fadb0038 (patch) | |
tree | a5004b85e134ec9f13690c0b8fbdd10b14b0f385 /src/resolve | |
parent | eb64b435ebb2a7cb1274d5f8d8c323905caf29bc (diff) |
resolved: correctly handle non-address RR types with /etc/hosts lookups (#4808)
Fix wrong condition test in manager_etc_hosts_lookup(), which caused it to
return an IPv4 answer when an IPv6 question was asked, and vice versa.
Also only return success if we actually found any A or AAAA record.
In systemd-resolved.service(8), point out that /etc/hosts mappings only
affect address-type lookups, not other types.
The test case currently disables DNSSEC in resolved, as there is a bug
where "-t MX" fails due to "DNSSEC validation failed" even after
"downgrading to non-DNSSEC mode". This should be dropped once that bug
gets fixed.
Fixes #4801
Diffstat (limited to 'src/resolve')
-rw-r--r-- | src/resolve/resolved-etc-hosts.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/resolve/resolved-etc-hosts.c b/src/resolve/resolved-etc-hosts.c index 40d650949d..0a284825a1 100644 --- a/src/resolve/resolved-etc-hosts.c +++ b/src/resolve/resolved-etc-hosts.c @@ -431,8 +431,8 @@ int manager_etc_hosts_lookup(Manager *m, DnsQuestion* q, DnsAnswer **answer) { for (i = 0; i < bn->n_items; i++) { _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL; - if ((found_a && bn->items[i]->family != AF_INET) && - (found_aaaa && bn->items[i]->family != AF_INET6)) + if ((!found_a && bn->items[i]->family == AF_INET) || + (!found_aaaa && bn->items[i]->family == AF_INET6)) continue; r = dns_resource_record_new_address(&rr, bn->items[i]->family, &bn->items[i]->address, bn->name); @@ -444,5 +444,5 @@ int manager_etc_hosts_lookup(Manager *m, DnsQuestion* q, DnsAnswer **answer) { return r; } - return 1; + return found_a || found_aaaa; } |