mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Make --localise-queries apply to names from --interface-name.
This commit is contained in:
@@ -58,6 +58,13 @@ version 2.77
|
|||||||
this is Nominum's. Thanks to Dave Täht for spotting the
|
this is Nominum's. Thanks to Dave Täht for spotting the
|
||||||
bug and assisting in the fix.
|
bug and assisting in the fix.
|
||||||
|
|
||||||
|
Fix the manpage which lied that only the primary address
|
||||||
|
of an interface is used by --interface-name.
|
||||||
|
|
||||||
|
Make --localise-queries apply to names from --interface-name.
|
||||||
|
Thanks to Kevin Darbyshire-Bryant and Eric Luehrsen
|
||||||
|
for pushing this.
|
||||||
|
|
||||||
|
|
||||||
version 2.76
|
version 2.76
|
||||||
Include 0.0.0.0/8 in DNS rebind checks. This range
|
Include 0.0.0.0/8 in DNS rebind checks. This range
|
||||||
|
|||||||
@@ -289,8 +289,8 @@ option requires non-standard networking APIs and it is only available
|
|||||||
under Linux. On other platforms it falls-back to --bind-interfaces mode.
|
under Linux. On other platforms it falls-back to --bind-interfaces mode.
|
||||||
.TP
|
.TP
|
||||||
.B \-y, --localise-queries
|
.B \-y, --localise-queries
|
||||||
Return answers to DNS queries from /etc/hosts which depend on the interface over which the query was
|
Return answers to DNS queries from /etc/hosts and --interface-name which depend on the interface over which the query was
|
||||||
received. If a name in /etc/hosts has more than one address associated with
|
received. If a name has more than one address associated with
|
||||||
it, and at least one of those addresses is on the same subnet as the
|
it, and at least one of those addresses is on the same subnet as the
|
||||||
interface to which the query was sent, then return only the
|
interface to which the query was sent, then return only the
|
||||||
address(es) on that subnet. This allows for a server to have multiple
|
address(es) on that subnet. This allows for a server to have multiple
|
||||||
@@ -604,7 +604,7 @@ given by the hex data, which may be of the form 01:23:45 or 01 23 45 or
|
|||||||
012345 or any mixture of these.
|
012345 or any mixture of these.
|
||||||
.TP
|
.TP
|
||||||
.B --interface-name=<name>,<interface>[/4|/6]
|
.B --interface-name=<name>,<interface>[/4|/6]
|
||||||
Return a DNS record associating the name with the primary address on
|
Return DNS records associating the name with the address(es) of
|
||||||
the given interface. This flag specifies an A or AAAA record for the given
|
the given interface. This flag specifies an A or AAAA record for the given
|
||||||
name in the same way as an /etc/hosts line, except that the address is
|
name in the same way as an /etc/hosts line, except that the address is
|
||||||
not constant, but taken from the given interface. The interface may be
|
not constant, but taken from the given interface. The interface may be
|
||||||
@@ -614,7 +614,8 @@ down, not configured or non-existent, an empty record is returned. The
|
|||||||
matching PTR record is also created, mapping the interface address to
|
matching PTR record is also created, mapping the interface address to
|
||||||
the name. More than one name may be associated with an interface
|
the name. More than one name may be associated with an interface
|
||||||
address by repeating the flag; in that case the first instance is used
|
address by repeating the flag; in that case the first instance is used
|
||||||
for the reverse address-to-name mapping.
|
for the reverse address-to-name mapping. Note that a name used in
|
||||||
|
--interface-name may not appear in /etc/hosts.
|
||||||
.TP
|
.TP
|
||||||
.B --synth-domain=<domain>,<address range>[,<prefix>]
|
.B --synth-domain=<domain>,<address range>[,<prefix>]
|
||||||
Create artificial A/AAAA and PTR records for an address range. The
|
Create artificial A/AAAA and PTR records for an address range. The
|
||||||
|
|||||||
@@ -1516,9 +1516,24 @@ 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;
|
int gotit = 0, localise = 0;
|
||||||
|
|
||||||
enumerate_interfaces(0);
|
enumerate_interfaces(0);
|
||||||
|
|
||||||
|
/* See if a putative address is on the network from which we recieved
|
||||||
|
the query, is so we'll filter other answers. */
|
||||||
|
if (local_addr.s_addr != 0 && option_bool(OPT_LOCALISE) && type == T_A)
|
||||||
|
for (intr = daemon->int_names; intr; intr = intr->next)
|
||||||
|
if (hostname_isequal(name, intr->name))
|
||||||
|
for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
|
if (!(addrlist->flags & ADDRLIST_IPV6))
|
||||||
|
#endif
|
||||||
|
if (is_same_net(*((struct in_addr *)&addrlist->addr), local_addr, local_netmask))
|
||||||
|
{
|
||||||
|
localise = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
for (intr = daemon->int_names; intr; intr = intr->next)
|
for (intr = daemon->int_names; intr; intr = intr->next)
|
||||||
if (hostname_isequal(name, intr->name))
|
if (hostname_isequal(name, intr->name))
|
||||||
@@ -1528,6 +1543,10 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
|
|||||||
if (((addrlist->flags & ADDRLIST_IPV6) ? T_AAAA : T_A) == type)
|
if (((addrlist->flags & ADDRLIST_IPV6) ? T_AAAA : T_A) == type)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
if (localise &&
|
||||||
|
!is_same_net(*((struct in_addr *)&addrlist->addr), local_addr, local_netmask))
|
||||||
|
continue;
|
||||||
|
|
||||||
#ifdef HAVE_IPV6
|
#ifdef HAVE_IPV6
|
||||||
if (addrlist->flags & ADDRLIST_REVONLY)
|
if (addrlist->flags & ADDRLIST_REVONLY)
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
Reference in New Issue
Block a user