mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Handle unknown DS hash algos correctly.
When we can validate a DS RRset, but don't speak the hash algo it contains, treat that the same as an NSEC/3 proving that the DS doesn't exist. 4025 5.2
This commit is contained in:
13
src/dnssec.c
13
src/dnssec.c
@@ -1005,6 +1005,19 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
|
|||||||
if (crecp->flags & F_NEG)
|
if (crecp->flags & F_NEG)
|
||||||
return STAT_INSECURE_DS;
|
return STAT_INSECURE_DS;
|
||||||
|
|
||||||
|
/* 4035 5.2
|
||||||
|
If the validator does not support any of the algorithms listed in an
|
||||||
|
authenticated DS RRset, then the resolver has no supported
|
||||||
|
authentication path leading from the parent to the child. The
|
||||||
|
resolver should treat this case as it would the case of an
|
||||||
|
authenticated NSEC RRset proving that no DS RRset exists, */
|
||||||
|
for (recp1 = crecp; recp1; recp1 = cache_find_by_name(recp1, name, now, F_DS))
|
||||||
|
if (hash_find(ds_digest_name(recp1->addr.ds.digest)))
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (!recp1)
|
||||||
|
return STAT_INSECURE_DS;
|
||||||
|
|
||||||
/* NOTE, we need to find ONE DNSKEY which matches the DS */
|
/* NOTE, we need to find ONE DNSKEY which matches the DS */
|
||||||
for (valid = 0, j = ntohs(header->ancount); j != 0 && !valid; j--)
|
for (valid = 0, j = ntohs(header->ancount); j != 0 && !valid; j--)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user