dnsmasq: fix start if dhcp-range is not correct

If the uci 'dhcp' configuration for the dhcp leases is incorrect then
the call to 'ipclac' fails. However, the problem is that the dnsmasq
configuration option 'dhcp-range' is still written for this uci section
even though the information generated by ipcalc is incorrect or not set.

Due to the incorrectly generated configuration for dnsmasq, the service
cannot start.

To prevent an incorrect configuration from being written to the configuration,
a check is now made beforehand to ensure that the required variables are
present and valid. If the configuration is incorrect, a message is emitted
to the log that this configuration section is incorrect and this uci
configuration section is omitted.

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
Link: https://github.com/openwrt/openwrt/pull/18641
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
Florian Eckert 2025-04-29 15:26:36 +02:00 committed by Hauke Mehrtens
parent b90feed6ba
commit ae198c6ba0
2 changed files with 14 additions and 4 deletions

View file

@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=dnsmasq PKG_NAME:=dnsmasq
PKG_UPSTREAM_VERSION:=2.91 PKG_UPSTREAM_VERSION:=2.91
PKG_VERSION:=$(subst test,~~test,$(subst rc,~rc,$(PKG_UPSTREAM_VERSION))) PKG_VERSION:=$(subst test,~~test,$(subst rc,~rc,$(PKG_UPSTREAM_VERSION)))
PKG_RELEASE:=1 PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_UPSTREAM_VERSION).tar.xz PKG_SOURCE:=$(PKG_NAME)-$(PKG_UPSTREAM_VERSION).tar.xz
PKG_SOURCE_URL:=https://thekelleys.org.uk/dnsmasq/ PKG_SOURCE_URL:=https://thekelleys.org.uk/dnsmasq/

View file

@ -597,11 +597,21 @@ dhcp_add() {
nettag="${networkid:+set:${networkid},}" nettag="${networkid:+set:${networkid},}"
# make sure the DHCP range is not empty # make sure the DHCP range is not empty
if [ "$dhcpv4" != "disabled" ] && ipcalc "$ipaddr/$prefix_or_netmask" "$start" "$limit" ; then if [ "$dhcpv4" != "disabled" ]; then
[ "$dynamicdhcpv4" = "0" ] && END="static" unset START
unset END
unset NETMASK
ipcalc "$ipaddr/$prefix_or_netmask" "$start" "$limit"
if [ -z "$START" ] || [ -z "$END" ] || [ -z "$NETMASK" ]; then
logger -t dnsmasq \
"unable to set dhcp-range for dhcp uci config section '$cfg'" \
"on interface '$ifname', please check your config"
else
[ "$dynamicdhcpv4" = "0" ] && END="static"
xappend "--dhcp-range=$tags$nettag$START,$END,$NETMASK,$leasetime${options:+ $options}" xappend "--dhcp-range=$tags$nettag$START,$END,$NETMASK,$leasetime${options:+ $options}"
fi fi
fi
if [ "$dynamicdhcpv6" = "0" ] ; then if [ "$dynamicdhcpv6" = "0" ] ; then
dhcp6range="::,static" dhcp6range="::,static"