diff --git a/src/resolve/resolved-dns-answer.c b/src/resolve/resolved-dns-answer.c index a667ab5ede4..5fbff81c255 100644 --- a/src/resolve/resolved-dns-answer.c +++ b/src/resolve/resolved-dns-answer.c @@ -963,3 +963,22 @@ void dns_answer_randomize(DnsAnswer *a) { SWAP_TWO(a->items[i], a->items[k]); } } + +uint32_t dns_answer_min_ttl(DnsAnswer *a) { + uint32_t ttl = UINT32_MAX; + DnsResourceRecord *rr; + + /* Return the smallest TTL of all RRs in this answer */ + + DNS_ANSWER_FOREACH(rr, a) { + /* Don't consider OPT (where the TTL field is used for other purposes than an actual TTL) */ + + if (dns_type_is_pseudo(rr->key->type) || + dns_class_is_pseudo(rr->key->class)) + continue; + + ttl = MIN(ttl, rr->ttl); + } + + return ttl; +} diff --git a/src/resolve/resolved-dns-answer.h b/src/resolve/resolved-dns-answer.h index 7d19eee4e2b..447da5d6cc3 100644 --- a/src/resolve/resolved-dns-answer.h +++ b/src/resolve/resolved-dns-answer.h @@ -87,6 +87,8 @@ void dns_answer_dump(DnsAnswer *answer, FILE *f); void dns_answer_randomize(DnsAnswer *a); +uint32_t dns_answer_min_ttl(DnsAnswer *a); + DEFINE_TRIVIAL_CLEANUP_FUNC(DnsAnswer*, dns_answer_unref); #define _DNS_ANSWER_FOREACH(q, kk, a) \