dnsmasq: add 'extraconftext' parameter

Users can now freely add new dnsmasq parameters (i.e. a whole config)
via extraconf. This means users can add their own parameters without
changes to init or GUI.

Co-opted the default of confdir also to include the instance name.
This way each instance gets its own .d directory (and separate instances
do not all inherit the same 'extraconftext').

Usage:
config dnsmasq 'config'
	...
	option extraconftext 'cache-size=2048\nlog-async=20'

config dnsmasq 'blah'
	...
	option extraconftext 'cache-size=128\nlog-async=5'

or even (which would produce staggered output but still valid)

config dnsmasq 'blah'
	...
	option extraconftext 'cache-size=128
							log-async=5'

See https://forum.openwrt.org/t/add-dnsmasq-custom-options-field-in-luci-gui/193184

Tested on: 23.05.3, 22.03.6

Signed-off-by: Paul Donald <newtwen+github@gmail.com>
Tested-by: Vladimir Kochkovski <ask@getvladimir.com>
Link: https://github.com/openwrt/openwrt/pull/14975
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
Paul Donald 2024-04-06 19:44:19 +02:00 committed by Hauke Mehrtens
parent 137ac21596
commit bd81d97e19

View File

@ -12,6 +12,7 @@ ADD_WAN_FQDN=0
ADD_LOCAL_FQDN=""
BASECONFIGFILE="/var/etc/dnsmasq.conf"
EXTRACONFFILE="extraconfig.conf"
BASEHOSTFILE="/tmp/hosts/dhcp"
TRUSTANCHORSFILE="/usr/share/dnsmasq/trust-anchors.conf"
TIMEVALIDFILE="/var/state/dnsmasqsec"
@ -1121,14 +1122,19 @@ dnsmasq_start()
xappend "--dhcp-broadcast=tag:needs-broadcast"
config_get dnsmasqconfdir "$cfg" confdir "/tmp/dnsmasq.d"
# Create a dnsmasq.d dir for each instance
config_get dnsmasqconfdir "$cfg" confdir "/tmp/dnsmasq${cfg:+.$cfg}.d"
xappend "--conf-dir=$dnsmasqconfdir"
dnsmasqconfdir="${dnsmasqconfdir%%,*}"
[ ! -d "$dnsmasqconfdir" ] && mkdir -p $dnsmasqconfdir
[ ! -d "$dnsmasqconfdir" ] && mkdir -p "$dnsmasqconfdir"
xappend "--user=dnsmasq"
xappend "--group=dnsmasq"
echo >> $CONFIGFILE_TMP
# EXTRACONFFILE allows new dnsmasq parameters before they are natively handled in this init file
config_get extraconftext "$cfg" extraconftext
[ -n "$extraconftext" ] && echo -e "$extraconftext" > "$dnsmasqconfdir"/"$EXTRACONFFILE"
config_get_bool enable_tftp "$cfg" enable_tftp 0
[ "$enable_tftp" -gt 0 ] && {
config_get tftp_root "$cfg" tftp_root