Projects
openEuler:22.03:LTS:LoongArch
bind
_service:tar_scm_kernel_repo:backport-Fix-rndc-...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm_kernel_repo:backport-Fix-rndc-dumpdb-expired-for-stuck-cache-contents.patch of Package bind
From f8ad7501dcc3a4008764c5bdd78ae65622c8b905 Mon Sep 17 00:00:00 2001 From: Matthijs Mekking <matthijs@isc.org> Date: Wed, 20 Jul 2022 11:22:01 +0200 Subject: [PATCH] Fix rndc dumpdb -expired for stuck cache contents The command 'rndc dumpdb -expired' will include expired RRsets in the output, but only for the RBTDB_VIRTUAL time (of 5 minutes). This means that if there is a cache cleaning problem and contents are not cleaned up, the rndc command has little diagnostic value. Fix this by including all RRsets in the dumpdb output if the '-expired' flag is set. (cherry picked from commit 930ba2c914a0abc07fd087d663a7bfb57850d4ca) --- lib/dns/rbtdb.c | 43 +++++++------------------------------------ 1 file changed, 7 insertions(+), 36 deletions(-) diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c index 87944980ec0..75832e32085 100644 --- a/lib/dns/rbtdb.c +++ b/lib/dns/rbtdb.c @@ -9102,15 +9102,10 @@ rdatasetiter_first(dns_rdatasetiter_t *iterator) { dns_rbtnode_t *rbtnode = rbtiterator->common.node; rbtdb_version_t *rbtversion = rbtiterator->common.version; rdatasetheader_t *header, *top_next; - rbtdb_serial_t serial; - isc_stdtime_t now; + rbtdb_serial_t serial = 1; - if (IS_CACHE(rbtdb)) { - serial = 1; - now = rbtiterator->common.now; - } else { + if (!IS_CACHE(rbtdb)) { serial = rbtversion->serial; - now = 0; } NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, @@ -9122,19 +9117,9 @@ rdatasetiter_first(dns_rdatasetiter_t *iterator) { if (header->serial <= serial && !IGNORE(header)) { /* * Is this a "this rdataset doesn't exist" - * record? Or is it too old in the cache? - * - * Note: unlike everywhere else, we - * check for now > header->rdh_ttl instead - * of ">=". This allows ANY and RRSIG - * queries for 0 TTL rdatasets to work. + * record? */ - if (NONEXISTENT(header) || - (now != 0 && - (now - RBTDB_VIRTUAL) > - header->rdh_ttl + - rbtdb->serve_stale_ttl)) - { + if (NONEXISTENT(header)) { header = NULL; } break; @@ -9166,22 +9151,17 @@ rdatasetiter_next(dns_rdatasetiter_t *iterator) { dns_rbtnode_t *rbtnode = rbtiterator->common.node; rbtdb_version_t *rbtversion = rbtiterator->common.version; rdatasetheader_t *header, *top_next; - rbtdb_serial_t serial; - isc_stdtime_t now; rbtdb_rdatatype_t type, negtype; dns_rdatatype_t rdtype, covers; + rbtdb_serial_t serial = 1; header = rbtiterator->current; if (header == NULL) { return (ISC_R_NOMORE); } - if (IS_CACHE(rbtdb)) { - serial = 1; - now = rbtiterator->common.now; - } else { + if (!IS_CACHE(rbtdb)) { serial = rbtversion->serial; - now = 0; } NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, @@ -9207,17 +9187,8 @@ rdatasetiter_next(dns_rdatasetiter_t *iterator) { /* * Is this a "this rdataset doesn't * exist" record? - * - * Note: unlike everywhere else, we - * check for now > header->ttl instead - * of ">=". This allows ANY and RRSIG - * queries for 0 TTL rdatasets to work. */ - if (NONEXISTENT(header) || - (now != 0 && - (now - RBTDB_VIRTUAL) > - header->rdh_ttl)) - { + if (NONEXISTENT(header)) { header = NULL; } break; -- GitLab
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.