diff --git a/bin/tests/system/serve-stale/tests.sh b/bin/tests/system/serve-stale/tests.sh index d4a88ab396..b787c816ab 100755 --- a/bin/tests/system/serve-stale/tests.sh +++ b/bin/tests/system/serve-stale/tests.sh @@ -1245,7 +1245,7 @@ if [ $ret != 0 ]; then echo_i "failed"; fi status=$((status+ret)) # Check that expired records are not dumped. ret=0 -grep "; expired (awaiting cleanup)" ns5/named_dump.db.test$n && ret=1 +grep "; expired since .* (awaiting cleanup)" ns5/named_dump.db.test$n && ret=1 if [ $ret != 0 ]; then echo_i "failed"; fi status=$((status+ret)) @@ -1261,13 +1261,13 @@ status=$((status+ret)) echo_i "check rndc dump expired data.example ($n)" ret=0 awk '/; expired/ { x=$0; getline; print x, $0}' ns5/named_dump.db.test$n | - grep "; expired (awaiting cleanup) data\.example\..*A text record with a 2 second ttl" > /dev/null 2>&1 || ret=1 + grep "; expired since .* (awaiting cleanup) data\.example\..*A text record with a 2 second ttl" > /dev/null 2>&1 || ret=1 awk '/; expired/ { x=$0; getline; print x, $0}' ns5/named_dump.db.test$n | - grep "; expired (awaiting cleanup) nodata\.example\." > /dev/null 2>&1 || ret=1 + grep "; expired since .* (awaiting cleanup) nodata\.example\." > /dev/null 2>&1 || ret=1 awk '/; expired/ { x=$0; getline; print x, $0}' ns5/named_dump.db.test$n | - grep "; expired (awaiting cleanup) nxdomain\.example\." > /dev/null 2>&1 || ret=1 + grep "; expired since .* (awaiting cleanup) nxdomain\.example\." > /dev/null 2>&1 || ret=1 awk '/; expired/ { x=$0; getline; print x, $0}' ns5/named_dump.db.test$n | - grep "; expired (awaiting cleanup) othertype\.example\." > /dev/null 2>&1 || ret=1 + grep "; expired since .* (awaiting cleanup) othertype\.example\." > /dev/null 2>&1 || ret=1 # Also make sure the not expired data does not have an expired comment. awk '/; answer/ { x=$0; getline; print x, $0}' ns5/named_dump.db.test$n | grep "; answer longttl\.example.*A text record with a 600 second ttl" > /dev/null 2>&1 || ret=1 diff --git a/lib/dns/masterdump.c b/lib/dns/masterdump.c index 27da0d5cb6..edd4fcaaa0 100644 --- a/lib/dns/masterdump.c +++ b/lib/dns/masterdump.c @@ -1114,7 +1114,15 @@ again: (rds->stale_ttl - ctx->serve_stale_ttl)); } else if (ANCIENT(rds)) { - fprintf(f, "; expired (awaiting cleanup)\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->stale_ttl, &b); + fprintf(f, + "; expired since %s " + "(awaiting cleanup)\n", + buf); } result = dump_rdataset(mctx, name, rds, ctx, buffer, f); if (result != ISC_R_SUCCESS) { diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c index e23bab0b39..3867e96ddc 100644 --- a/lib/dns/rbtdb.c +++ b/lib/dns/rbtdb.c @@ -3146,7 +3146,7 @@ bind_rdataset(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node, rdatasetheader_t *header, rdataset->ttl = 0; } else if (header->rdh_ttl < now) { rdataset->attributes |= DNS_RDATASETATTR_ANCIENT; - rdataset->stale_ttl = 0; + rdataset->stale_ttl = header->rdh_ttl; rdataset->ttl = 0; }