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