From 48662847ecd28f418a911a5fa0e7f2c71495cbaf Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 5 Nov 2020 13:34:22 +0100 Subject: [PATCH] =?UTF-8?q?answer:=20minor=20refactor=20=E2=80=93=20move?= =?UTF-8?q?=20link=20local=20check=20into=20RR=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/resolve/resolved-dns-answer.c | 5 +---- src/resolve/resolved-dns-rr.c | 14 ++++++++++++++ src/resolve/resolved-dns-rr.h | 2 ++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/resolve/resolved-dns-answer.c b/src/resolve/resolved-dns-answer.c index 8591ed0f3b..7746cb08ea 100644 --- a/src/resolve/resolved-dns-answer.c +++ b/src/resolve/resolved-dns-answer.c @@ -713,10 +713,7 @@ void dns_answer_order_by_scope(DnsAnswer *a, bool prefer_link_local) { items = newa(DnsAnswerItem, a->n_rrs); for (i = 0; i < a->n_rrs; i++) { - - if (a->items[i].rr->key->class == DNS_CLASS_IN && - ((a->items[i].rr->key->type == DNS_TYPE_A && in_addr_is_link_local(AF_INET, (union in_addr_union*) &a->items[i].rr->a.in_addr) != prefer_link_local) || - (a->items[i].rr->key->type == DNS_TYPE_AAAA && in_addr_is_link_local(AF_INET6, (union in_addr_union*) &a->items[i].rr->aaaa.in6_addr) != prefer_link_local))) + if (dns_resource_record_is_link_local_address(a->items[i].rr) != prefer_link_local) /* Order address records that are not preferred to the end of the array */ items[end--] = a->items[i]; else diff --git a/src/resolve/resolved-dns-rr.c b/src/resolve/resolved-dns-rr.c index 19e075479f..9e64c6dd31 100644 --- a/src/resolve/resolved-dns-rr.c +++ b/src/resolve/resolved-dns-rr.c @@ -1721,6 +1721,20 @@ int dns_resource_record_clamp_ttl(DnsResourceRecord **rr, uint32_t max_ttl) { return 1; } +bool dns_resource_record_is_link_local_address(DnsResourceRecord *rr) { + + if (rr->key->class != DNS_CLASS_IN) + return false; + + if (rr->key->type == DNS_TYPE_A) + return in4_addr_is_link_local(&rr->a.in_addr); + + if (rr->key->type == DNS_TYPE_AAAA) + return IN6_IS_ADDR_LINKLOCAL(&rr->aaaa.in6_addr); + + return false; +} + DnsTxtItem *dns_txt_item_free_all(DnsTxtItem *i) { DnsTxtItem *n; diff --git a/src/resolve/resolved-dns-rr.h b/src/resolve/resolved-dns-rr.h index aa17d6d391..d788d797fc 100644 --- a/src/resolve/resolved-dns-rr.h +++ b/src/resolve/resolved-dns-rr.h @@ -324,6 +324,8 @@ int dns_resource_record_is_synthetic(DnsResourceRecord *rr); int dns_resource_record_clamp_ttl(DnsResourceRecord **rr, uint32_t max_ttl); +bool dns_resource_record_is_link_local_address(DnsResourceRecord *rr); + DnsTxtItem *dns_txt_item_free_all(DnsTxtItem *i); bool dns_txt_item_equal(DnsTxtItem *a, DnsTxtItem *b); DnsTxtItem *dns_txt_item_copy(DnsTxtItem *i);