mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 10:18:25 +00:00
Yet another 0x20 fix.
To complement the previous one, which fixed the retry path when the query is retried from a different id/source address, this fixes retries from the same id/source address.
This commit is contained in:
@@ -199,10 +199,15 @@ static void forward_query(int udpfd, union mysockaddr *udpaddr,
|
|||||||
struct frec_src *src;
|
struct frec_src *src;
|
||||||
unsigned int casediff = 0;
|
unsigned int casediff = 0;
|
||||||
unsigned int *bitvector = NULL;
|
unsigned int *bitvector = NULL;
|
||||||
unsigned short id;
|
unsigned short id = ntohs(header->id); /* Retrieve the id from the new query before we overwrite it. */
|
||||||
|
|
||||||
|
/* Get the case-scambled version of the query to resend. This is important because we
|
||||||
|
may fall through below and forward the query in the packet buffer again and we
|
||||||
|
want to use the same case scrambling as the first time. */
|
||||||
|
blockdata_retrieve(forward->stash, forward->stash_len, (void *)header);
|
||||||
|
|
||||||
for (src = &forward->frec_src; src; src = src->next)
|
for (src = &forward->frec_src; src; src = src->next)
|
||||||
if (src->orig_id == ntohs(header->id) &&
|
if (src->orig_id == id &&
|
||||||
sockaddr_isequal(&src->source, udpaddr))
|
sockaddr_isequal(&src->source, udpaddr))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -255,17 +260,10 @@ static void forward_query(int udpfd, union mysockaddr *udpaddr,
|
|||||||
Note the two names are guaranteed to be the same length and differ only in the case
|
Note the two names are guaranteed to be the same length and differ only in the case
|
||||||
of letters at this point.
|
of letters at this point.
|
||||||
|
|
||||||
Get the original query into the packet buffer and extract the query name it contains
|
The original query we sent is now in packet buffer and the query name in the
|
||||||
to calculate the difference in case scrambling. This is important because we
|
new instance is on daemon->namebuff. */
|
||||||
may fall through below and forward the query in the packet buffer again and we
|
|
||||||
want to use the same case scrambling as the first time.
|
if (extract_request(header, forward->stash_len, daemon->workspacename, NULL))
|
||||||
|
|
||||||
Retrieve the id from the new query before we overwrite it. */
|
|
||||||
|
|
||||||
id = ntohs(header->id);
|
|
||||||
|
|
||||||
if (blockdata_retrieve(forward->stash, forward->stash_len, (void *)header) &&
|
|
||||||
extract_request(header, forward->stash_len, daemon->workspacename, NULL))
|
|
||||||
{
|
{
|
||||||
unsigned int i, gobig = 0;
|
unsigned int i, gobig = 0;
|
||||||
char *s1, *s2;
|
char *s1, *s2;
|
||||||
|
|||||||
Reference in New Issue
Block a user