[Dnsmasq-discuss] [PATCH] Fix regression in s_config_in_context() method

Geert Stappers stappers at stappers.nl
Tue May 12 21:22:15 BST 2020


From: Harald Jensås <hjensas at redhat.com>

Prior to commit 137286e9baecf6a3ba97722ef1b49c851b531810
a config would not be considered in context if:
a) it has no address family flags set
b) it has the address family flag of current context set

Since above commit config is considered in context if the
address family is the opposite of current context.

The result is that a config with two dhcp-host records,
one for IPv6 and another for IPv4 no longer works, for
example with the below config the config with the IPv6
address would be considered in context for a DHCP(v4)
request.
 dhcp-host=52:54:00:bc:c3:fd,172.20.0.11,host2
 dhcp-host=52:54:00:bc:c3:fd,[fd12:3456:789a:1::aadd],host2

This commit restores the previous behavior.
---
 src/dhcp-common.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/dhcp-common.c b/src/dhcp-common.c
index eae9886..ffc78ca 100644
--- a/src/dhcp-common.c
+++ b/src/dhcp-common.c
@@ -280,14 +280,18 @@ static int is_config_in_context(struct dhcp_context *context, struct dhcp_config
 {
   if (!context) /* called via find_config() from lease_update_from_configs() */
     return 1; 
-  
+
+  /* No address present in config == in context */
+  if (!(config->flags & (CONFIG_ADDR | CONFIG_ADDR6)))
+    return 1;
+
 #ifdef HAVE_DHCP6
   if (context->flags & CONTEXT_V6)
     {
        struct addrlist *addr_list;
 
        if (!(config->flags & CONFIG_ADDR6))
-	 return 1;
+	 return 0;
        
         for (; context; context = context->current)
 	  for (addr_list = config->addr6; addr_list; addr_list = addr_list->next)
@@ -303,7 +307,7 @@ static int is_config_in_context(struct dhcp_context *context, struct dhcp_config
 #endif
     {
       if (!(config->flags & CONFIG_ADDR))
-	return 1;
+	return 0;
       
       for (; context; context = context->current)
 	if ((config->flags & CONFIG_ADDR) && is_same_net(config->addr, context->start, context->netmask))
-- 
2.1.4




More information about the Dnsmasq-discuss mailing list