mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Handle ANY queries in context of da8b6517de
This commit is contained in:
@@ -229,12 +229,18 @@ static unsigned int search_servers(time_t now, struct all_addr **addrpp, unsigne
|
|||||||
|
|
||||||
if (flags)
|
if (flags)
|
||||||
{
|
{
|
||||||
int logflags = 0;
|
if (flags == F_NXDOMAIN || flags == F_NOERR)
|
||||||
|
log_query(flags | qtype | F_NEG | F_CONFIG | F_FORWARD, qdomain, NULL, NULL);
|
||||||
if (flags == F_NXDOMAIN || flags == F_NOERR)
|
else
|
||||||
logflags = F_NEG | qtype;
|
{
|
||||||
|
/* handle F_IPV4 and F_IPV6 set on ANY query to 0.0.0.0/:: domain. */
|
||||||
log_query(logflags | flags | F_CONFIG | F_FORWARD, qdomain, *addrpp, NULL);
|
if (flags & F_IPV4)
|
||||||
|
log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV6, qdomain, *addrpp, NULL);
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
|
if (flags & F_IPV6)
|
||||||
|
log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV4, qdomain, *addrpp, NULL);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ((*type) & SERV_USE_RESOLV)
|
else if ((*type) & SERV_USE_RESOLV)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -956,22 +956,26 @@ size_t setup_reply(struct dns_header *header, size_t qlen,
|
|||||||
log_query(F_CONFIG | F_RCODE, "error", &a, NULL);
|
log_query(F_CONFIG | F_RCODE, "error", &a, NULL);
|
||||||
SET_RCODE(header, SERVFAIL);
|
SET_RCODE(header, SERVFAIL);
|
||||||
}
|
}
|
||||||
else if (flags == F_IPV4)
|
else if (flags & ( F_IPV4 | F_IPV6))
|
||||||
{ /* we know the address */
|
|
||||||
SET_RCODE(header, NOERROR);
|
|
||||||
header->ancount = htons(1);
|
|
||||||
header->hb3 |= HB3_AA;
|
|
||||||
add_resource_record(header, NULL, NULL, sizeof(struct dns_header), &p, ttl, NULL, T_A, C_IN, "4", addrp);
|
|
||||||
}
|
|
||||||
#ifdef HAVE_IPV6
|
|
||||||
else if (flags == F_IPV6)
|
|
||||||
{
|
{
|
||||||
SET_RCODE(header, NOERROR);
|
if (flags & F_IPV4)
|
||||||
header->ancount = htons(1);
|
{ /* we know the address */
|
||||||
header->hb3 |= HB3_AA;
|
SET_RCODE(header, NOERROR);
|
||||||
add_resource_record(header, NULL, NULL, sizeof(struct dns_header), &p, ttl, NULL, T_AAAA, C_IN, "6", addrp);
|
header->ancount = htons(1);
|
||||||
}
|
header->hb3 |= HB3_AA;
|
||||||
|
add_resource_record(header, NULL, NULL, sizeof(struct dns_header), &p, ttl, NULL, T_A, C_IN, "4", addrp);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
|
if (flags & F_IPV6)
|
||||||
|
{
|
||||||
|
SET_RCODE(header, NOERROR);
|
||||||
|
header->ancount = htons(ntohs(header->ancount) + 1);
|
||||||
|
header->hb3 |= HB3_AA;
|
||||||
|
add_resource_record(header, NULL, NULL, sizeof(struct dns_header), &p, ttl, NULL, T_AAAA, C_IN, "6", addrp);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
else /* nowhere to forward to */
|
else /* nowhere to forward to */
|
||||||
{
|
{
|
||||||
struct all_addr a;
|
struct all_addr a;
|
||||||
|
|||||||
Reference in New Issue
Block a user