rbtdb_rdatatype_t type;
dns_rbtnode_t *node;
+ REQUIRE(search != NULL);
+ REQUIRE(search->zonecut != NULL);
+ REQUIRE(search->zonecut_rdataset != NULL);
+
/*
* The caller MUST NOT be holding any node locks.
*/
search.need_cleanup = false;
search.wild = false;
search.zonecut = NULL;
+ search.zonecut_rdataset = NULL;
+ search.zonecut_sigrdataset = NULL;
dns_fixedname_init(&search.zonecut_name);
dns_rbtnodechain_init(&search.chain);
search.now = now;
cache_zonecut_callback, &search);
if (result == DNS_R_PARTIALMATCH) {
- if ((search.options & DNS_DBFIND_COVERINGNSEC) != 0) {
+ /*
+ * If dns_rbt_findnode discovered a covering DNAME skip
+ * looking for a covering NSEC.
+ */
+ if ((search.options & DNS_DBFIND_COVERINGNSEC) != 0 &&
+ (search.zonecut_rdataset == NULL ||
+ search.zonecut_rdataset->type != dns_rdatatype_dname))
+ {
result = find_coveringnsec(&search, name, nodep, now,
foundname, rdataset,
sigrdataset);