Commit d0edff7d authored by Giovanni Bajo's avatar Giovanni Bajo Committed by Simon Kelley

Insert all DNSKEY/DS records into cache in one transaction.

parent ccca70cb
...@@ -323,7 +323,6 @@ int dnssec_parsekey(struct dns_header *header, size_t pktlen, char *owner, unsig ...@@ -323,7 +323,6 @@ int dnssec_parsekey(struct dns_header *header, size_t pktlen, char *owner, unsig
return 0; return 0;
} }
cache_start_insert();
/* TODO: time(0) is correct here? */ /* TODO: time(0) is correct here? */
crecp = cache_insert(owner, NULL, time(0), ttl, F_FORWARD | F_DNSKEY); crecp = cache_insert(owner, NULL, time(0), ttl, F_FORWARD | F_DNSKEY);
if (crecp) if (crecp)
...@@ -343,7 +342,6 @@ int dnssec_parsekey(struct dns_header *header, size_t pktlen, char *owner, unsig ...@@ -343,7 +342,6 @@ int dnssec_parsekey(struct dns_header *header, size_t pktlen, char *owner, unsig
printf("DNSKEY: cache insertion failure\n"); printf("DNSKEY: cache insertion failure\n");
return 0; return 0;
} }
cache_end_insert();
return 1; return 1;
} }
...@@ -364,6 +362,9 @@ int dnssec_validate(struct dns_header *header, size_t pktlen) ...@@ -364,6 +362,9 @@ int dnssec_validate(struct dns_header *header, size_t pktlen)
return 0; return 0;
if (!(reply = p = skip_questions(header, pktlen))) if (!(reply = p = skip_questions(header, pktlen)))
return 0; return 0;
/* First, process DNSKEY/DS records and add them to the cache. */
cache_start_insert();
for (i = 0; i < ntohs(header->ancount); i++) for (i = 0; i < ntohs(header->ancount); i++)
{ {
if (!extract_name(header, pktlen, &p, owner, 1, 10)) if (!extract_name(header, pktlen, &p, owner, 1, 10))
...@@ -384,8 +385,9 @@ int dnssec_validate(struct dns_header *header, size_t pktlen) ...@@ -384,8 +385,9 @@ int dnssec_validate(struct dns_header *header, size_t pktlen)
} }
p += rdlen; p += rdlen;
} }
cache_end_insert();
/* After we have parsed DNSKEY/DS records, start looking for RRSIGs. /* After we have cached DNSKEY/DS records, start looking for RRSIGs.
We want to do this in a separate step because we want the cache We want to do this in a separate step because we want the cache
to be already populated with DNSKEYs before parsing signatures. */ to be already populated with DNSKEYs before parsing signatures. */
p = reply; p = reply;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment