|
|
5bc043 |
From 3d113137fd64cd0723cbecab6a36a75d3ecfb0a6 Mon Sep 17 00:00:00 2001
|
|
|
5bc043 |
From: =?UTF-8?q?Harald=20Jens=C3=A5s?= <hjensas@redhat.com>
|
|
|
5bc043 |
Date: Thu, 7 May 2020 00:33:54 +0200
|
|
|
5bc043 |
Subject: [PATCH 1/1] Fix regression in s_config_in_context() method
|
|
|
5bc043 |
|
|
|
5bc043 |
Prior to commit 137286e9baecf6a3ba97722ef1b49c851b531810
|
|
|
5bc043 |
a config would not be considered in context if:
|
|
|
5bc043 |
a) it has no address family flags set
|
|
|
5bc043 |
b) it has the address family flag of current context set
|
|
|
5bc043 |
|
|
|
5bc043 |
Since above commit config is considered in context if the
|
|
|
5bc043 |
address family is the opposite of current context.
|
|
|
5bc043 |
|
|
|
5bc043 |
The result is that a config with two dhcp-host records,
|
|
|
5bc043 |
one for IPv6 and another for IPv4 no longer works, for
|
|
|
5bc043 |
example with the below config the config with the IPv6
|
|
|
5bc043 |
address would be considered in context for a DHCP(v4)
|
|
|
5bc043 |
request.
|
|
|
5bc043 |
dhcp-host=52:54:00:bc:c3:fd,172.20.0.11,host2
|
|
|
5bc043 |
dhcp-host=52:54:00:bc:c3:fd,[fd12:3456:789a:1::aadd],host2
|
|
|
5bc043 |
|
|
|
5bc043 |
This commit restores the previous behavior.
|
|
|
5bc043 |
---
|
|
|
5bc043 |
src/dhcp-common.c | 10 +++++++---
|
|
|
5bc043 |
1 file changed, 7 insertions(+), 3 deletions(-)
|
|
|
5bc043 |
|
|
|
5bc043 |
diff --git a/src/dhcp-common.c b/src/dhcp-common.c
|
|
|
5bc043 |
index eae9886..ffc78ca 100644
|
|
|
5bc043 |
--- a/src/dhcp-common.c
|
|
|
5bc043 |
+++ b/src/dhcp-common.c
|
|
|
5bc043 |
@@ -280,14 +280,18 @@ static int is_config_in_context(struct dhcp_context *context, struct dhcp_config
|
|
|
5bc043 |
{
|
|
|
5bc043 |
if (!context) /* called via find_config() from lease_update_from_configs() */
|
|
|
5bc043 |
return 1;
|
|
|
5bc043 |
-
|
|
|
5bc043 |
+
|
|
|
5bc043 |
+ /* No address present in config == in context */
|
|
|
5bc043 |
+ if (!(config->flags & (CONFIG_ADDR | CONFIG_ADDR6)))
|
|
|
5bc043 |
+ return 1;
|
|
|
5bc043 |
+
|
|
|
5bc043 |
#ifdef HAVE_DHCP6
|
|
|
5bc043 |
if (context->flags & CONTEXT_V6)
|
|
|
5bc043 |
{
|
|
|
5bc043 |
struct addrlist *addr_list;
|
|
|
5bc043 |
|
|
|
5bc043 |
if (!(config->flags & CONFIG_ADDR6))
|
|
|
5bc043 |
- return 1;
|
|
|
5bc043 |
+ return 0;
|
|
|
5bc043 |
|
|
|
5bc043 |
for (; context; context = context->current)
|
|
|
5bc043 |
for (addr_list = config->addr6; addr_list; addr_list = addr_list->next)
|
|
|
5bc043 |
@@ -303,7 +307,7 @@ static int is_config_in_context(struct dhcp_context *context, struct dhcp_config
|
|
|
5bc043 |
#endif
|
|
|
5bc043 |
{
|
|
|
5bc043 |
if (!(config->flags & CONFIG_ADDR))
|
|
|
5bc043 |
- return 1;
|
|
|
5bc043 |
+ return 0;
|
|
|
5bc043 |
|
|
|
5bc043 |
for (; context; context = context->current)
|
|
|
5bc043 |
if ((config->flags & CONFIG_ADDR) && is_same_net(config->addr, context->start, context->netmask))
|
|
|
5bc043 |
--
|
|
|
5bc043 |
2.25.4
|