mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-10 17:50:00 -04:00
dns_nsec3_addnsec3() can fail when iterating back
when adding a new NSEC3 record, dns_nsec3_addnsec3() uses a dbiterator to seek to the newly created node and then find its predecessor. dbiterators in the qpzone use snapshots, so changes to the database are not reflected in an already-existing iterator. consequently, when we add a new node, we have to create a new iterator before we can seek to it.
This commit is contained in:
parent
4df0e76083
commit
5da31b753a
1 changed files with 12 additions and 1 deletions
|
|
@ -779,7 +779,7 @@ addnsec3:
|
|||
/*
|
||||
* Create the node if it doesn't exist and hold
|
||||
* a reference to it until we have added the NSEC3
|
||||
* or we discover we don't need to add make a change.
|
||||
* or we discover we don't need to make a change.
|
||||
*/
|
||||
CHECK(dns_db_findnsec3node(db, hashname, true, &newnode));
|
||||
result = dns_db_findrdataset(db, newnode, version,
|
||||
|
|
@ -795,6 +795,17 @@ addnsec3:
|
|||
if (result != ISC_R_NOMORE) {
|
||||
goto failure;
|
||||
}
|
||||
} else if (result == ISC_R_NOTFOUND) {
|
||||
/*
|
||||
* If we didn't find an NSEC3 in the node,
|
||||
* then the node must have been newly created
|
||||
* by dns_db_findnsec3node(). The iterator
|
||||
* needs to be updated so we can seek for
|
||||
* the node's predecessor.
|
||||
*/
|
||||
dns_dbiterator_destroy(&dbit);
|
||||
CHECK(dns_db_createiterator(db, DNS_DB_NSEC3ONLY,
|
||||
&dbit));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue