mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Handle two interface-names, different interface, same name.
This commit is contained in:
39
src/auth.c
39
src/auth.c
@@ -357,29 +357,30 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
|
|||||||
flag = F_IPV6;
|
flag = F_IPV6;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (intr = daemon->int_names; intr; intr = intr->next)
|
if (flag)
|
||||||
if (hostname_isequal(name, intr->name))
|
for (intr = daemon->int_names; intr; intr = intr->next)
|
||||||
{
|
if (hostname_isequal(name, intr->name))
|
||||||
struct addrlist *addrlist;
|
{
|
||||||
|
struct addrlist *addrlist;
|
||||||
|
|
||||||
addrlist = intr->addr4;
|
addrlist = intr->addr4;
|
||||||
#ifdef HAVE_IPV6
|
#ifdef HAVE_IPV6
|
||||||
if (qtype == T_AAAA)
|
if (qtype == T_AAAA)
|
||||||
addrlist = intr->addr6;
|
addrlist = intr->addr6;
|
||||||
#endif
|
#endif
|
||||||
nxdomain = 0;
|
nxdomain = 0;
|
||||||
|
|
||||||
for (; addrlist; addrlist = addrlist->next)
|
for (; addrlist; addrlist = addrlist->next)
|
||||||
if (local_query || filter_constructed_dhcp(zone, flag, &addrlist->addr))
|
if (local_query || filter_constructed_dhcp(zone, flag, &addrlist->addr))
|
||||||
{
|
{
|
||||||
found = 1;
|
found = 1;
|
||||||
log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
|
log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
|
||||||
if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
|
if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
|
||||||
daemon->auth_ttl, NULL, qtype, C_IN,
|
daemon->auth_ttl, NULL, qtype, C_IN,
|
||||||
qtype == T_A ? "4" : "6", &addrlist->addr))
|
qtype == T_A ? "4" : "6", &addrlist->addr))
|
||||||
anscount++;
|
anscount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (a = daemon->cnames; a; a = a->next)
|
for (a = daemon->cnames; a; a = a->next)
|
||||||
if (hostname_isequal(name, a->alias) )
|
if (hostname_isequal(name, a->alias) )
|
||||||
|
|||||||
@@ -1725,29 +1725,39 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
|
|||||||
if (intr)
|
if (intr)
|
||||||
{
|
{
|
||||||
struct addrlist *addrlist;
|
struct addrlist *addrlist;
|
||||||
|
int gotit = 0;
|
||||||
|
|
||||||
enumerate_interfaces(0);
|
enumerate_interfaces(0);
|
||||||
|
|
||||||
addrlist = intr->addr4;
|
for (intr = daemon->int_names; intr; intr = intr->next)
|
||||||
|
if (hostname_isequal(name, intr->name))
|
||||||
|
{
|
||||||
|
addrlist = intr->addr4;
|
||||||
#ifdef HAVE_IPV6
|
#ifdef HAVE_IPV6
|
||||||
if (type == T_AAAA)
|
if (type == T_AAAA)
|
||||||
addrlist = intr->addr6;
|
addrlist = intr->addr6;
|
||||||
#endif
|
#endif
|
||||||
ans = 1;
|
ans = 1;
|
||||||
if (!dryrun)
|
if (!dryrun)
|
||||||
{
|
|
||||||
if (!addrlist)
|
|
||||||
log_query(F_FORWARD | F_CONFIG | flag | F_NEG, name, NULL, NULL);
|
|
||||||
else
|
|
||||||
for (; addrlist; addrlist = addrlist->next)
|
|
||||||
{
|
{
|
||||||
log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
|
if (addrlist)
|
||||||
if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
|
{
|
||||||
daemon->local_ttl, NULL, type, C_IN,
|
gotit = 1;
|
||||||
type == T_A ? "4" : "6", &addrlist->addr))
|
for (; addrlist; addrlist = addrlist->next)
|
||||||
anscount++;
|
{
|
||||||
|
log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
|
||||||
|
if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
|
||||||
|
daemon->local_ttl, NULL, type, C_IN,
|
||||||
|
type == T_A ? "4" : "6", &addrlist->addr))
|
||||||
|
anscount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!dryrun && !gotit)
|
||||||
|
log_query(F_FORWARD | F_CONFIG | flag | F_NEG, name, NULL, NULL);
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user