]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add better ZEROTTL handling in bindrdataset()
authorOndřej Surý <ondrej@isc.org>
Sun, 2 Feb 2025 12:38:04 +0000 (13:38 +0100)
committerOndřej Surý <ondrej@isc.org>
Mon, 3 Feb 2025 14:04:36 +0000 (15:04 +0100)
If we know that the header has ZEROTTL set, the server should never send
stale records for it and the TTL should never be anything else than 0.
The comment was already there, but the code was not matching the
comment.

(cherry picked from commit cfee6aa56557f9fde8bd47949c5165edaf350113)

lib/dns/rbtdb.c

index 37bd522ef10a4a11427b790894726bd128ea0488..87ef54fb2583639b7a1633738e75cae680fed3ad 100644 (file)
@@ -3136,7 +3136,7 @@ bind_rdataset(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node, rdatasetheader_t *header,
                 * (these records should not be cached anyway).
                 */
 
-               if (KEEPSTALE(rbtdb) && stale_ttl > now) {
+               if (!ZEROTTL(header) && KEEPSTALE(rbtdb) && stale_ttl > now) {
                        stale = true;
                } else {
                        /*
@@ -3152,6 +3152,7 @@ bind_rdataset(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node, rdatasetheader_t *header,
        rdataset->type = RBTDB_RDATATYPE_BASE(header->type);
        rdataset->covers = RBTDB_RDATATYPE_EXT(header->type);
        rdataset->ttl = header->rdh_ttl - now;
+       rdataset->ttl = !ZEROTTL(header) ? header->rdh_ttl - now : 0;
        rdataset->trust = header->trust;
 
        if (NEGATIVE(header)) {