dns_qp_lookup was returning ISC_R_NOTFOUND rather than DNS_R_PARTIALMATCH
when there wasn't a parent with a NSEC record in the cache. This was
causing find_coveringnsec to fail rather than returing the covering NSEC.
*/
result = dns_qp_lookup(search->qpdb->nsec, name, DNS_DBNAMESPACE_NSEC,
NULL, &iter, NULL, (void **)&node, NULL);
- if (result != DNS_R_PARTIALMATCH) {
+ /*
+ * When DNS_R_PARTIALMATCH or ISC_R_NOTFOUND is returned from
+ * dns_qp_lookup there is potentially a covering NSEC present
+ * in the cache so we need to search for it. Otherwise we are
+ * done here.
+ */
+ if (result != DNS_R_PARTIALMATCH && result != ISC_R_NOTFOUND) {
return ISC_R_NOTFOUND;
}