Compare commits

...

1 Commits

Author SHA1 Message Date
Mark Andrews
446d38b239 validitor.c:check_signer now clones val->event->sigrdataset
spurious validation failures where traced back to check_signer
looping over val->event->sigrdataset directly.  Cloning this
rdataset prevents check_signer from interacting with looping
events.
2021-11-22 17:32:51 +11:00

View File

@@ -1632,14 +1632,16 @@ check_signer(dns_validator_t *val, dns_rdata_t *keyrdata, uint16_t keyid,
dns_rdata_rrsig_t sig;
dst_key_t *dstkey = NULL;
isc_result_t result;
dns_rdataset_t rdataset;
for (result = dns_rdataset_first(val->event->sigrdataset);
result == ISC_R_SUCCESS;
result = dns_rdataset_next(val->event->sigrdataset))
dns_rdataset_init(&rdataset);
dns_rdataset_clone(val->event->sigrdataset, &rdataset);
for (result = dns_rdataset_first(&rdataset); result == ISC_R_SUCCESS;
result = dns_rdataset_next(&rdataset))
{
dns_rdata_t rdata = DNS_RDATA_INIT;
dns_rdataset_current(val->event->sigrdataset, &rdata);
dns_rdataset_current(&rdataset, &rdata);
result = dns_rdata_tostruct(&rdata, &sig, NULL);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
if (keyid != sig.keyid || algorithm != sig.algorithm) {
@@ -1665,6 +1667,7 @@ check_signer(dns_validator_t *val, dns_rdata_t *keyrdata, uint16_t keyid,
if (dstkey != NULL) {
dst_key_free(&dstkey);
}
dns_rdataset_disassociate(&rdataset);
return (result);
}