mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Don't BIND DHCP socket if more interfaces may come along later.
This commit is contained in:
@@ -50,6 +50,12 @@ version 2.67
|
|||||||
Log when the maximum number of concurrent DNS queries is
|
Log when the maximum number of concurrent DNS queries is
|
||||||
reached. Thanks to Marcelo Salhab Brogliato for the patch.
|
reached. Thanks to Marcelo Salhab Brogliato for the patch.
|
||||||
|
|
||||||
|
If wildcards are used in --interface, don't assume that
|
||||||
|
there will only ever be one available interface for DHCP
|
||||||
|
just because there is one at start-up. More may appear, so
|
||||||
|
we can't use SO_BINDTODEVICE. Thanks to Natrio for the bug
|
||||||
|
report.
|
||||||
|
|
||||||
|
|
||||||
version 2.66
|
version 2.66
|
||||||
Add the ability to act as an authoritative DNS
|
Add the ability to act as an authoritative DNS
|
||||||
|
|||||||
@@ -347,21 +347,27 @@ void bindtodevice(int fd)
|
|||||||
to that device. This is for the use case of (eg) OpenStack, which runs a new
|
to that device. This is for the use case of (eg) OpenStack, which runs a new
|
||||||
dnsmasq instance for each VLAN interface it creates. Without the BINDTODEVICE,
|
dnsmasq instance for each VLAN interface it creates. Without the BINDTODEVICE,
|
||||||
individual processes don't always see the packets they should.
|
individual processes don't always see the packets they should.
|
||||||
SO_BINDTODEVICE is only available Linux. */
|
SO_BINDTODEVICE is only available Linux.
|
||||||
|
|
||||||
|
Note that if wildcards are used in --interface, or a configured interface doesn't
|
||||||
|
yet exist, then more interfaces may arrive later, so we can't safely assert there
|
||||||
|
is only one interface and proceed.
|
||||||
|
*/
|
||||||
|
|
||||||
struct irec *iface, *found;
|
struct irec *iface, *found;
|
||||||
|
struct iname *if_tmp;
|
||||||
|
|
||||||
|
for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next)
|
||||||
|
if (if_tmp->name && (!if_tmp->used || strchr(if_tmp->name, '*')))
|
||||||
|
return;
|
||||||
|
|
||||||
for (found = NULL, iface = daemon->interfaces; iface; iface = iface->next)
|
for (found = NULL, iface = daemon->interfaces; iface; iface = iface->next)
|
||||||
if (iface->dhcp_ok)
|
if (iface->dhcp_ok)
|
||||||
{
|
{
|
||||||
if (!found)
|
if (!found)
|
||||||
found = iface;
|
found = iface;
|
||||||
else if (strcmp(found->name, iface->name) != 0)
|
else if (strcmp(found->name, iface->name) != 0)
|
||||||
{
|
return; /* more than one. */
|
||||||
/* more than one. */
|
|
||||||
found = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (found)
|
if (found)
|
||||||
|
|||||||
Reference in New Issue
Block a user