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,
if (r < 0)
return r;
- SET_FOREACH(n, item->names) {
- _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
-
- rr = dns_resource_record_new(found_ptr);
- if (!rr)
- return -ENOMEM;
+ if (item->canonical_name) {
+ r = answer_add_ptr(*answer, found_ptr, item->canonical_name);
+ if (r < 0)
+ return r;
+ }
- rr->ptr.name = strdup(n);
- if (!rr->ptr.name)
- return -ENOMEM;
+ SET_FOREACH(n, item->names) {
+ if (n == item->canonical_name)
+ continue;
- r = dns_answer_add(*answer, rr, 0, DNS_ANSWER_AUTHENTICATED, NULL);
+ r = answer_add_ptr(*answer, found_ptr, n);
if (r < 0)
return r;
}