49 lines
1.6 KiB
Diff
49 lines
1.6 KiB
Diff
|
From 7e3250d52921b5f75bdbe0b794514bb78a209969 Mon Sep 17 00:00:00 2001
|
||
|
From: Petr Mensik <pemensik@redhat.com>
|
||
|
Date: Wed, 3 Jul 2019 17:02:16 +0200
|
||
|
Subject: [PATCH 2/5] Compare address and interface index for allowed interface
|
||
|
|
||
|
If interface is recreated with the same address but different index, it
|
||
|
would not change any other parameter.
|
||
|
|
||
|
Test also address family on incoming TCP queries.
|
||
|
---
|
||
|
src/dnsmasq.c | 3 ++-
|
||
|
src/network.c | 3 ++-
|
||
|
2 files changed, 4 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/src/dnsmasq.c b/src/dnsmasq.c
|
||
|
index f3d2671..7812be8 100644
|
||
|
--- a/src/dnsmasq.c
|
||
|
+++ b/src/dnsmasq.c
|
||
|
@@ -1667,7 +1667,8 @@ static void check_dns_listeners(time_t now)
|
||
|
#endif
|
||
|
|
||
|
for (iface = daemon->interfaces; iface; iface = iface->next)
|
||
|
- if (iface->index == if_index)
|
||
|
+ if (iface->index == if_index &&
|
||
|
+ iface->addr.sa.sa_family == tcp_addr.sa.sa_family)
|
||
|
break;
|
||
|
|
||
|
if (!iface && !loopback_exception(listener->tcpfd, tcp_addr.sa.sa_family, &addr, intr_name))
|
||
|
diff --git a/src/network.c b/src/network.c
|
||
|
index fd90288..f247811 100644
|
||
|
--- a/src/network.c
|
||
|
+++ b/src/network.c
|
||
|
@@ -404,10 +404,11 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
|
||
|
/* check whether the interface IP has been added already
|
||
|
we call this routine multiple times. */
|
||
|
for (iface = daemon->interfaces; iface; iface = iface->next)
|
||
|
- if (sockaddr_isequal(&iface->addr, addr))
|
||
|
+ if (sockaddr_isequal(&iface->addr, addr) && iface->index == if_index)
|
||
|
{
|
||
|
iface->dad = !!(iface_flags & IFACE_TENTATIVE);
|
||
|
iface->found = 1; /* for garbage collection */
|
||
|
+ iface->netmask = netmask;
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
--
|
||
|
2.20.1
|
||
|
|