diff --git a/SOURCES/dnsmasq-2.81-rh1829448.patch b/SOURCES/dnsmasq-2.81-rh1829448.patch new file mode 100644 index 0000000..f31b230 --- /dev/null +++ b/SOURCES/dnsmasq-2.81-rh1829448.patch @@ -0,0 +1,62 @@ +From 3d113137fd64cd0723cbecab6a36a75d3ecfb0a6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Harald=20Jens=C3=A5s?= +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 diff --git a/SPECS/dnsmasq.spec b/SPECS/dnsmasq.spec index fb87c65..061f998 100644 --- a/SPECS/dnsmasq.spec +++ b/SPECS/dnsmasq.spec @@ -13,7 +13,7 @@ Name: dnsmasq Version: 2.79 -Release: 12%{?extraversion:.%{extraversion}}%{?dist} +Release: 13%{?extraversion:.%{extraversion}}%{?dist} Summary: A lightweight DHCP/caching DNS server License: GPLv2 or GPLv3 @@ -51,6 +51,7 @@ Patch17: dnsmasq-2.81-prefix-ranges-or-list-of-ipv6-addresses.patch Patch18: dnsmasq-2.81-tag-filtering-of-dhcp-host-directives.patch Patch19: dnsmasq-2.81-correct-range-check-of-dhcp-host-prefix.patch Patch20: dnsmasq-2.81-optimize-fds-close.patch +Patch21: dnsmasq-2.81-rh1829448.patch # This is workaround to nettle bug #1549190 # https://bugzilla.redhat.com/show_bug.cgi?id=1549190 @@ -104,6 +105,7 @@ server's leases. %patch18 -p1 -b .rh1779187-3 %patch19 -p1 -b .rh1779187-4 %patch20 -p1 -b .rh1816613 +%patch21 -p1 -b .rh1829448 # use /var/lib/dnsmasq instead of /var/lib/misc for file in dnsmasq.conf.example man/dnsmasq.8 man/es/dnsmasq.8 src/config.h; do @@ -204,6 +206,9 @@ install -Dpm 644 %{SOURCE2} %{buildroot}%{_sysusersdir}/dnsmasq.conf %{_mandir}/man1/dhcp_* %changelog +* Tue May 05 2020 Petr Menšík - 2.79-13 +- Fix mixed address family reservations on DHCP (#1829448) + * Mon Mar 30 2020 Tomas Korbar - 2.79-12 - Minimize count of close syscalls on startup (#1816613)