]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Print the expiration time of the stale records (not ancient)
authorOndřej Surý <ondrej@isc.org>
Mon, 3 Feb 2025 10:15:15 +0000 (11:15 +0100)
committerOndřej Surý <ondrej@isc.org>
Tue, 4 Feb 2025 17:07:59 +0000 (18:07 +0100)
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.

(cherry picked from commit 355fc4847299ef1546ba96292086906a8c127002)

bin/tests/system/serve-stale/tests.sh
lib/dns/include/dns/rdataset.h
lib/dns/masterdump.c
lib/dns/qpcache.c
lib/dns/rbtdb.c

index 6dc3c20308a10aba8c08ad4f8011bcfaedb6445e..42b94dbeb5a0ebce3b0782ce587415dad5e31a12 100755 (executable)
@@ -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
index 662f9314463e14d3efbdaaa328072b54cda1f57b..3c557171441ec1f931defd7b85841bb9f10f38e3 100644 (file)
@@ -146,7 +146,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
index 7b8346320a22b3ff495af8601372a8e2fa3d01f8..1aaf772fae167a0d7b887a3d4d16606ebb13cd43 100644 (file)
@@ -1162,7 +1162,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");
                        }
index 633d527a80c2e27cc73a31b517b64a7e2f338b28..5eab24bc586b064ee7ea490224d6c720ab4a0aa9 100644 (file)
@@ -1107,6 +1107,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->ttl;
        } else if (!ACTIVE(header, now)) {
                rdataset->attributes |= DNS_RDATASETATTR_ANCIENT;
                rdataset->ttl = 0;
index cb69d6be0ce76d06527a8df78b56ed2ffcbff64e..53ba14b3478a651f5e90c2f86d77293715719c9c 100644 (file)
@@ -2192,6 +2192,7 @@ dns__rbtdb_bindrdataset(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node,
                        rdataset->attributes |= DNS_RDATASETATTR_STALE_WINDOW;
                }
                rdataset->attributes |= DNS_RDATASETATTR_STALE;
+               rdataset->expire = header->ttl;
        } else if (IS_CACHE(rbtdb) && !ACTIVE(header, now)) {
                rdataset->attributes |= DNS_RDATASETATTR_ANCIENT;
                rdataset->ttl = 0;