From: Ondřej Surý Date: Mon, 3 Feb 2025 10:15:15 +0000 (+0100) Subject: Print the expiration time of the stale records (not ancient) X-Git-Tag: v9.21.5~8^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=355fc4847299ef1546ba96292086906a8c127002;p=thirdparty%2Fbind9.git Print the expiration time of the stale records (not ancient) In #1870, the expiration time of ANCIENT records were printed, but actually the ancient records are very short lived, and the information carries a little value. Instead of printing the expiration of ANCIENT records, print the expiration time of STALE records. --- diff --git a/bin/tests/system/serve-stale/tests.sh b/bin/tests/system/serve-stale/tests.sh index 6dc3c20308a..42b94dbeb5a 100755 --- a/bin/tests/system/serve-stale/tests.sh +++ b/bin/tests/system/serve-stale/tests.sh @@ -115,8 +115,8 @@ sleep 2 # stale for somewhere between 3500-3599 seconds. echo_i "check rndc dump stale data.example ($n)" rndc_dumpdb ns1 || ret=1 -awk '/; stale/ { x=$0; getline; print x, $0}' ns1/named_dump.db.test$n \ - | grep "; stale data\.example.*3[56]...*TXT.*A text record with a 2 second ttl" >/dev/null 2>&1 || ret=1 +awk '/; stale since [0-9]*/ { x=$0; getline; print x, $0}' ns1/named_dump.db.test$n \ + | grep "; stale since [0-9]* data\.example.*3[56]...*TXT.*A text record with a 2 second ttl" >/dev/null 2>&1 || ret=1 # Also make sure the not expired data does not have a stale comment. awk '/; authanswer/ { x=$0; getline; print x, $0}' ns1/named_dump.db.test$n \ | grep "; authanswer longttl\.example.*[56]...*TXT.*A text record with a 600 second ttl" >/dev/null 2>&1 || ret=1 diff --git a/lib/dns/include/dns/rdataset.h b/lib/dns/include/dns/rdataset.h index 89518b0ebfc..027d70cc040 100644 --- a/lib/dns/include/dns/rdataset.h +++ b/lib/dns/include/dns/rdataset.h @@ -143,7 +143,10 @@ struct dns_rdataset { * This RRSIG RRset should be re-generated around this time. * Only valid if DNS_RDATASETATTR_RESIGN is set in attributes. */ - isc_stdtime_t resign; + union { + isc_stdtime_t resign; + isc_stdtime_t expire; + }; /*% * Extra fields used by various rdataset implementations, that is, by diff --git a/lib/dns/masterdump.c b/lib/dns/masterdump.c index 89ae4154b1e..f2df38687db 100644 --- a/lib/dns/masterdump.c +++ b/lib/dns/masterdump.c @@ -1160,7 +1160,12 @@ again: } else { isc_result_t result; if (STALE(rds)) { - fprintf(f, "; stale\n"); + isc_buffer_t b; + char buf[sizeof("YYYYMMDDHHMMSS")]; + memset(buf, 0, sizeof(buf)); + isc_buffer_init(&b, buf, sizeof(buf) - 1); + dns_time64_totext((uint64_t)rds->expire, &b); + fprintf(f, "; stale since %s\n", buf); } else if (ANCIENT(rds)) { fprintf(f, "; expired (awaiting cleanup)\n"); } diff --git a/lib/dns/qpcache.c b/lib/dns/qpcache.c index 4c3a0754cb5..560812a6d17 100644 --- a/lib/dns/qpcache.c +++ b/lib/dns/qpcache.c @@ -1105,6 +1105,7 @@ bindrdataset(qpcache_t *qpdb, qpcnode_t *node, dns_slabheader_t *header, rdataset->attributes |= DNS_RDATASETATTR_STALE_WINDOW; } rdataset->attributes |= DNS_RDATASETATTR_STALE; + rdataset->expire = header->expire; } else if (!ACTIVE(header, now)) { rdataset->attributes |= DNS_RDATASETATTR_ANCIENT; rdataset->ttl = 0;