mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Ensure request name in buffer for ipset lookup.
This commit is contained in:
@@ -535,20 +535,23 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
|
|||||||
(void) do_bit;
|
(void) do_bit;
|
||||||
|
|
||||||
#ifdef HAVE_IPSET
|
#ifdef HAVE_IPSET
|
||||||
/* Similar algorithm to search_servers. */
|
if (daemon->ipsets && extract_request(header, n, daemon->namebuff, NULL))
|
||||||
struct ipsets *ipset_pos;
|
|
||||||
unsigned int namelen = strlen(daemon->namebuff);
|
|
||||||
unsigned int matchlen = 0;
|
|
||||||
for (ipset_pos = daemon->ipsets; ipset_pos; ipset_pos = ipset_pos->next)
|
|
||||||
{
|
{
|
||||||
unsigned int domainlen = strlen(ipset_pos->domain);
|
/* Similar algorithm to search_servers. */
|
||||||
char *matchstart = daemon->namebuff + namelen - domainlen;
|
struct ipsets *ipset_pos;
|
||||||
if (namelen >= domainlen && hostname_isequal(matchstart, ipset_pos->domain) &&
|
unsigned int namelen = strlen(daemon->namebuff);
|
||||||
(domainlen == 0 || namelen == domainlen || *(matchstart - 1) == '.' ) &&
|
unsigned int matchlen = 0;
|
||||||
domainlen >= matchlen)
|
for (ipset_pos = daemon->ipsets; ipset_pos; ipset_pos = ipset_pos->next)
|
||||||
{
|
{
|
||||||
matchlen = domainlen;
|
unsigned int domainlen = strlen(ipset_pos->domain);
|
||||||
sets = ipset_pos->sets;
|
char *matchstart = daemon->namebuff + namelen - domainlen;
|
||||||
|
if (namelen >= domainlen && hostname_isequal(matchstart, ipset_pos->domain) &&
|
||||||
|
(domainlen == 0 || namelen == domainlen || *(matchstart - 1) == '.' ) &&
|
||||||
|
domainlen >= matchlen)
|
||||||
|
{
|
||||||
|
matchlen = domainlen;
|
||||||
|
sets = ipset_pos->sets;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user