diff --git a/src/resolve/resolved-etc-hosts.c b/src/resolve/resolved-etc-hosts.c index aac7d986ba..fd5c6b7814 100644 --- a/src/resolve/resolved-etc-hosts.c +++ b/src/resolve/resolved-etc-hosts.c @@ -381,6 +381,20 @@ static int manager_etc_hosts_read(Manager *m) { return 1; } +static int answer_add_ptr(DnsAnswer *answer, DnsResourceKey *key, const char *name) { + _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL; + + rr = dns_resource_record_new(key); + if (!rr) + return -ENOMEM; + + rr->ptr.name = strdup(name); + if (!rr->ptr.name) + return -ENOMEM; + + return dns_answer_add(answer, rr, 0, DNS_ANSWER_AUTHENTICATED, NULL); +} + static int etc_hosts_lookup_by_address( EtcHosts *hosts, DnsQuestion *q, @@ -427,18 +441,17 @@ static int etc_hosts_lookup_by_address( if (r < 0) return r; + if (item->canonical_name) { + r = answer_add_ptr(*answer, found_ptr, item->canonical_name); + if (r < 0) + return r; + } + SET_FOREACH(n, item->names) { - _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL; + if (n == item->canonical_name) + continue; - rr = dns_resource_record_new(found_ptr); - if (!rr) - return -ENOMEM; - - rr->ptr.name = strdup(n); - if (!rr->ptr.name) - return -ENOMEM; - - r = dns_answer_add(*answer, rr, 0, DNS_ANSWER_AUTHENTICATED, NULL); + r = answer_add_ptr(*answer, found_ptr, n); if (r < 0) return r; } diff --git a/test/units/testsuite-75.sh b/test/units/testsuite-75.sh index ef0e42a81d..504d1038e5 100755 --- a/test/units/testsuite-75.sh +++ b/test/units/testsuite-75.sh @@ -160,10 +160,12 @@ ip link del hoge.foo ### SETUP ### # Configure network hostnamectl hostname ns1.unsigned.test -{ - echo "10.0.0.1 ns1.unsigned.test" - echo "fd00:dead:beef:cafe::1 ns1.unsigned.test" -} >>/etc/hosts +cat >>/etc/hosts </etc/systemd/network/dns0.netdev <