[OpenWrt-Devel] [PATCH] dnsmasq: skip options that are not compiled in
Yousong Zhou
yszhou4tech at gmail.com
Sun May 26 12:06:47 EDT 2019
This is to make life easier for users with customized build of
dnsmasq-full variant. E.g. dnsmasq config generated by current service
script will be rejected by dnsmasq without DHCP
- Options like --dhcp-leasefile have default values. Deleting them
from uci config or setting them to empty value will make them take on
default value in the end
- Options like --dhcp-broadcast are output unconditionally
Tackle this by
- Check availablility of features from output "dnsmasq --version"
- Make a list of options guarded by HAVE_xx macros in src/options.c of
dnsmasq source code
- Ignore these options in xappend()
Two things to note in this implementation
- The option list is not exhausted. Supposedly only those options that
may cause dnsmasq to reject with "unsupported option (check that
dnsmasq was compiled with DHCP/TFTP/DNSSEC/DBus support)" are taken
into account here
- This provides a way out but users' cooperation is still needed. E.g.
option dnssec needs to be turned off, otherwise the service script
will try to add --conf-file pointing to dnssec specific anchor file
which dnsmasq lacking dnssec support will reject
Resolves FS#2281
Signed-off-by: Yousong Zhou <yszhou4tech at gmail.com>
---
package/network/services/dnsmasq/Makefile | 2 +-
.../services/dnsmasq/files/dnsmasq.init | 36 +++++++++++++++++--
2 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/package/network/services/dnsmasq/Makefile b/package/network/services/dnsmasq/Makefile
index 1710ded5f8..419526bdd8 100644
--- a/package/network/services/dnsmasq/Makefile
+++ b/package/network/services/dnsmasq/Makefile
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=dnsmasq
PKG_UPSTREAM_VERSION:=2.80
PKG_VERSION:=$(subst test,~~test,$(subst rc,~rc,$(PKG_UPSTREAM_VERSION)))
-PKG_RELEASE:=11
+PKG_RELEASE:=12
PKG_SOURCE:=$(PKG_NAME)-$(PKG_UPSTREAM_VERSION).tar.xz
PKG_SOURCE_URL:=http://thekelleys.org.uk/dnsmasq
diff --git a/package/network/services/dnsmasq/files/dnsmasq.init b/package/network/services/dnsmasq/files/dnsmasq.init
index 93a8f9a108..e19c56f6a9 100644
--- a/package/network/services/dnsmasq/files/dnsmasq.init
+++ b/package/network/services/dnsmasq/files/dnsmasq.init
@@ -22,10 +22,42 @@ DHCPSCRIPT="/usr/lib/dnsmasq/dhcp-script.sh"
DNSMASQ_DHCP_VER=4
+dnsmasq_features="$(dnsmasq --version | grep -m1 'Compile time options:' | cut -d: -f2) "
+[ "${dnsmasq_features#* DHCP }" = "$dnsmasq_features" ] || dnsmasq_has_dhcp=1
+[ "${dnsmasq_features#* DHCPv6 }" = "$dnsmasq_features" ] || dnsmasq_has_dhcp6=1
+[ "${dnsmasq_features#* DNSSEC }" = "$dnsmasq_features" ] || dnsmasq_has_dnssec=1
+[ "${dnsmasq_features#* TFTP }" = "$dnsmasq_features" ] || dnsmasq_has_tftp=1
+[ "${dnsmasq_features#* ipset }" = "$dnsmasq_features" ] || dnsmasq_has_ipset=1
+dnsmasq_ignore_opt() {
+ local opt="$1"
+
+ case "$opt" in
+ dhcp-duid|\
+ ra-param)
+ [ -z "$dnsmasq_has_dhcp6" ] ;;
+ dhcp-*|\
+ bootp-*|\
+ pxe-*)
+ [ -z "$dnsmasq_has_dhcp" ] ;;
+ dnssec-*|\
+ trust-anchor)
+ [ -z "$dnsmasq_has_dnssec" ] ;;
+ tftp-*)
+ [ -z "$dnsmasq_has_tftp" ] ;;
+ ipset)
+ [ -z "$dnsmasq_has_ipset" ] ;;
+ *)
+ return 1
+ esac
+}
+
xappend() {
- local value="$1"
+ local value="${1#--}"
+ local opt="${value%%=*}"
- echo "${value#--}" >> $CONFIGFILE_TMP
+ if ! dnsmasq_ignore_opt "$opt"; then
+ echo "$value" >>$CONFIGFILE_TMP
+ fi
}
hex_to_hostid() {
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list