63 lines
2.1 KiB
Diff
63 lines
2.1 KiB
Diff
|
From 3d113137fd64cd0723cbecab6a36a75d3ecfb0a6 Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Harald=20Jens=C3=A5s?= <hjensas@redhat.com>
|
||
|
Date: Thu, 7 May 2020 00:33:54 +0200
|
||
|
Subject: [PATCH 1/1] Fix regression in s_config_in_context() method
|
||
|
|
||
|
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.25.4
|