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