mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Need to fixup records in the additional section when removing DNSSEC stuff.
This commit is contained in:
15
src/dnssec.c
15
src/dnssec.c
@@ -2132,7 +2132,7 @@ static int check_rrs(unsigned char *p, struct dns_header *header, size_t plen, i
|
|||||||
int i, type, class, rdlen;
|
int i, type, class, rdlen;
|
||||||
unsigned char *pp;
|
unsigned char *pp;
|
||||||
|
|
||||||
for (i = 0; i < ntohs(header->ancount) + ntohs(header->nscount); i++)
|
for (i = 0; i < ntohs(header->ancount) + ntohs(header->nscount) + ntohs(header->arcount); i++)
|
||||||
{
|
{
|
||||||
pp = p;
|
pp = p;
|
||||||
|
|
||||||
@@ -2178,7 +2178,7 @@ size_t filter_rrsigs(struct dns_header *header, size_t plen)
|
|||||||
static int rr_sz = 0;
|
static int rr_sz = 0;
|
||||||
|
|
||||||
unsigned char *p = (unsigned char *)(header+1);
|
unsigned char *p = (unsigned char *)(header+1);
|
||||||
int i, rdlen, qtype, qclass, rr_found, chop_an, chop_ns;
|
int i, rdlen, qtype, qclass, rr_found, chop_an, chop_ns, chop_ar;
|
||||||
|
|
||||||
if (ntohs(header->qdcount) != 1 ||
|
if (ntohs(header->qdcount) != 1 ||
|
||||||
!(p = skip_name(p, header, plen, 4)))
|
!(p = skip_name(p, header, plen, 4)))
|
||||||
@@ -2189,7 +2189,9 @@ size_t filter_rrsigs(struct dns_header *header, size_t plen)
|
|||||||
|
|
||||||
/* First pass, find pointers to start and end of all the records we wish to elide:
|
/* First pass, find pointers to start and end of all the records we wish to elide:
|
||||||
records added for DNSSEC, unless explicity queried for */
|
records added for DNSSEC, unless explicity queried for */
|
||||||
for (rr_found = 0, chop_ns = 0, chop_an = 0, i = 0; i < ntohs(header->ancount) + ntohs(header->nscount); i++)
|
for (rr_found = 0, chop_ns = 0, chop_an = 0, chop_ar = 0, i = 0;
|
||||||
|
i < ntohs(header->ancount) + ntohs(header->nscount) + ntohs(header->arcount);
|
||||||
|
i++)
|
||||||
{
|
{
|
||||||
unsigned char *pstart = p;
|
unsigned char *pstart = p;
|
||||||
int type, class;
|
int type, class;
|
||||||
@@ -2217,8 +2219,10 @@ size_t filter_rrsigs(struct dns_header *header, size_t plen)
|
|||||||
|
|
||||||
if (i < ntohs(header->ancount))
|
if (i < ntohs(header->ancount))
|
||||||
chop_an++;
|
chop_an++;
|
||||||
else
|
else if (i < ntohs(header->nscount))
|
||||||
chop_ns++;
|
chop_ns++;
|
||||||
|
else
|
||||||
|
chop_ar++;
|
||||||
}
|
}
|
||||||
else if (!ADD_RDLEN(header, p, plen, rdlen))
|
else if (!ADD_RDLEN(header, p, plen, rdlen))
|
||||||
return plen;
|
return plen;
|
||||||
@@ -2255,7 +2259,8 @@ size_t filter_rrsigs(struct dns_header *header, size_t plen)
|
|||||||
plen = p - (unsigned char *)header;
|
plen = p - (unsigned char *)header;
|
||||||
header->ancount = htons(ntohs(header->ancount) - chop_an);
|
header->ancount = htons(ntohs(header->ancount) - chop_an);
|
||||||
header->nscount = htons(ntohs(header->nscount) - chop_ns);
|
header->nscount = htons(ntohs(header->nscount) - chop_ns);
|
||||||
|
header->arcount = htons(ntohs(header->arcount) - chop_ar);
|
||||||
|
|
||||||
/* Fourth pass, fix up pointers in the remaining records */
|
/* Fourth pass, fix up pointers in the remaining records */
|
||||||
p = (unsigned char *)(header+1);
|
p = (unsigned char *)(header+1);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user