2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-30 22:15:20 +00:00

make the qpzone database loadable

add database API methods needed for loading rdatasets into memory
(currentversion, beginload, endload), plus the methods used by
zone_postload() for zone consistency checks (getoriginnode, find,
findnode, findrdataset, attachnode, detachnode, deletedata).

the QP trie doesn't support the find callback mechanism available
in dns_rbt_findnode() which allows examination of intermediate nodes
while searching, so the detection of wildcard and delegation nodes
is now done by scanning QP chains after calling dns_qp_lookup().

Note that the lookup in previous_closest_nsec() cannot return
ISC_R_NOTFOUND. In RBTDB, we checked for this return value and
ovewrote the result with ISC_R_NOMORE if it occurred. In the
qpzone implementation, we insist that this return value cannot happen.
dns_qp_lookup() would only return ISC_R_NOTFOUND if we asked for a
name outside the zone's authoritative domain, and we never do that
when looking up a predecessor NSEC record.

named-checkzone is now able to load a zone and check it for errors,
but cannot dump it.
This commit is contained in:
Evan Hunt
2023-11-04 15:40:49 +01:00
parent d8292991fe
commit 628fa8a3d6
3 changed files with 2844 additions and 92 deletions

View File

@@ -18,5 +18,5 @@ example.com. SOA marka.isc.org. a.root.servers.nil. (
600 ; minimum
)
example.com. DNAME example.net.
example.com. NS ns.example.com
example.com. NS ns.example.com.
ns.example.com. A 192.168.0.2

File diff suppressed because it is too large Load Diff

View File

@@ -1546,7 +1546,7 @@ expiredata(dns_db_t *db, dns_dbnode_t *node, void *data) {
NODE_WRLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, &nlocktype);
dns__cacherbt_expireheader(header, &tlocktype,
dns_expire_flush DNS__DB_FLARG_PASS);
dns_expire_flush DNS__DB_FILELINE);
NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, &nlocktype);
INSIST(tlocktype == isc_rwlocktype_none);
}