diff --git a/lib/dns/qpcache.c b/lib/dns/qpcache.c index 83ce178ee0..25a93431d2 100644 --- a/lib/dns/qpcache.c +++ b/lib/dns/qpcache.c @@ -1058,7 +1058,7 @@ bindrdataset(qpcache_t *qpdb, qpcnode_t *node, dns_slabheader_t *header, * (these records should not be cached anyway). */ - if (KEEPSTALE(qpdb) && stale_ttl > now) { + if (!ZEROTTL(header) && KEEPSTALE(qpdb) && stale_ttl > now) { stale = true; } else { /* @@ -1073,6 +1073,7 @@ bindrdataset(qpcache_t *qpdb, qpcnode_t *node, dns_slabheader_t *header, rdataset->rdclass = qpdb->common.rdclass; rdataset->type = DNS_TYPEPAIR_TYPE(header->type); rdataset->covers = DNS_TYPEPAIR_COVERS(header->type); + rdataset->ttl = !ZEROTTL(header) ? header->ttl - now : 0; rdataset->ttl = header->ttl - now; rdataset->trust = header->trust; rdataset->resign = 0; diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c index 1a53ede503..cd81fe4550 100644 --- a/lib/dns/rbtdb.c +++ b/lib/dns/rbtdb.c @@ -2150,7 +2150,7 @@ dns__rbtdb_bindrdataset(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node, * (these records should not be cached anyway). */ - if (KEEPSTALE(rbtdb) && stale_ttl > now) { + if (!ZEROTTL(header) && KEEPSTALE(rbtdb) && stale_ttl > now) { stale = true; } else { /* @@ -2165,7 +2165,7 @@ dns__rbtdb_bindrdataset(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node, rdataset->rdclass = rbtdb->common.rdclass; rdataset->type = DNS_TYPEPAIR_TYPE(header->type); rdataset->covers = DNS_TYPEPAIR_COVERS(header->type); - rdataset->ttl = header->ttl - now; + rdataset->ttl = !ZEROTTL(header) ? header->ttl - now : 0; rdataset->trust = header->trust; if (NEGATIVE(header)) {