+ --- 9.9.3-P1 released ---
+
+3584. [security] Caching data from an incompletely signed zone could
+ trigger an assertion failure in resolver.c [RT #33690]
+
--- 9.9.3 released ---
3568. [cleanup] Add a product description line to the version file,
static inline isc_result_t
findnoqname(fetchctx_t *fctx, dns_name_t *name, dns_rdatatype_t type,
- dns_name_t **noqname)
+ dns_name_t **noqnamep)
{
dns_rdataset_t *nrdataset, *next, *sigrdataset;
dns_rdata_rrsig_t rrsig;
dns_fixedname_t fclosest;
dns_name_t *nearest;
dns_fixedname_t fnearest;
+ dns_rdatatype_t found = dns_rdatatype_none;
+ dns_name_t *noqname = NULL;
FCTXTRACE("findnoqname");
- REQUIRE(noqname != NULL && *noqname == NULL);
+ REQUIRE(noqnamep != NULL && *noqnamep == NULL);
/*
* Find the SIG for this rdataset, if we have it.
&data, NULL, fctx_log,
fctx)))
{
- if (!exists)
- *noqname = nsec;
+ if (!exists) {
+ noqname = nsec;
+ found = dns_rdatatype_nsec;
+ }
}
if (nrdataset->type == dns_rdatatype_nsec3 &&
closest, nearest,
fctx_log, fctx)))
{
- if (!exists && setnearest)
- *noqname = nsec;
+ if (!exists && setnearest) {
+ noqname = nsec;
+ found = dns_rdatatype_nsec3;
+ }
}
}
}
if (result == ISC_R_NOMORE)
result = ISC_R_SUCCESS;
+ if (noqname != NULL) {
+ for (sigrdataset = ISC_LIST_HEAD(noqname->list);
+ sigrdataset != NULL;
+ sigrdataset = ISC_LIST_NEXT(sigrdataset, link)) {
+ if (sigrdataset->type == dns_rdatatype_rrsig &&
+ sigrdataset->covers == found)
+ break;
+ }
+ if (sigrdataset != NULL)
+ *noqnamep = noqname;
+ }
return (result);
}