dnsmasq: allow using dnsmasq as the sole resolver

Currently it seems impossible to configure /etc/config/dhcp to achieve
the following use case

 - run dnsmasq with no-resolv
 - re-generate /etc/resolv.conf with "nameserver 127.0.0.1"

Before this change, we have to set resolvfile to /tmp/resolv.conf.auto
to achive the 2nd effect above, but setting resolvfile requires noresolv
being false.

A new boolean option "localuse" is added to indicate that we intend to
use dnsmasq as the local dns resolver.  It's false by default and to
align with old behaviour it will be true automatically if resolvfile is
set to /tmp/resolv.conf.auto

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
Acked-by: Hans Dedecker <dedeckeh@gmail.com>
v19.07.3_mercusys_ac12_duma
Yousong Zhou 5 years ago
parent d4c999bb89
commit ec2a2a2aea

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

@ -731,7 +731,9 @@ dhcp_relay_add() {
dnsmasq_start() dnsmasq_start()
{ {
local cfg="$1" disabled resolvfile user_dhcpscript local cfg="$1"
local disabled user_dhcpscript
local resolvfile localuse
config_get_bool disabled "$cfg" disabled 0 config_get_bool disabled "$cfg" disabled 0
[ "$disabled" -gt 0 ] && return 0 [ "$disabled" -gt 0 ] && return 0
@ -882,14 +884,14 @@ dnsmasq_start()
config_get_bool cachelocal "$cfg" cachelocal 1 config_get_bool cachelocal "$cfg" cachelocal 1
config_get_bool noresolv "$cfg" noresolv 0 config_get_bool noresolv "$cfg" noresolv 0
config_get_bool localuse "$cfg" localuse 0
if [ "$noresolv" != "1" ]; then if [ "$noresolv" != "1" ]; then
config_get resolvfile "$cfg" resolvfile "/tmp/resolv.conf.auto" config_get resolvfile "$cfg" resolvfile /tmp/resolv.conf.auto
# So jail doesn't complain if file missing [ -n "$resolvfile" -a ! -e "$resolvfile" ] && touch "$resolvfile"
[ -n "$resolvfile" -a \! -e "$resolvfile" ] && touch "$resolvfile" xappend "--resolv-file=$resolvfile"
[ "$resolvfile" = "/tmp/resolv.conf.auto" ] && localuse=1
fi fi
[ -n "$resolvfile" ] && xappend "--resolv-file=$resolvfile"
config_get hostsfile "$cfg" dhcphostsfile config_get hostsfile "$cfg" dhcphostsfile
[ -e "$hostsfile" ] && xappend "--dhcp-hostsfile=$hostsfile" [ -e "$hostsfile" ] && xappend "--dhcp-hostsfile=$hostsfile"
@ -1011,7 +1013,7 @@ dnsmasq_start()
mv -f $CONFIGFILE_TMP $CONFIGFILE mv -f $CONFIGFILE_TMP $CONFIGFILE
mv -f $HOSTFILE_TMP $HOSTFILE mv -f $HOSTFILE_TMP $HOSTFILE
[ "$resolvfile" = "/tmp/resolv.conf.auto" ] && { [ "$localuse" -gt 0 ] && {
rm -f /tmp/resolv.conf rm -f /tmp/resolv.conf
[ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && { [ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {
echo "search $DOMAIN" >> /tmp/resolv.conf echo "search $DOMAIN" >> /tmp/resolv.conf
@ -1037,17 +1039,15 @@ dnsmasq_start()
dnsmasq_stop() dnsmasq_stop()
{ {
local cfg="$1" resolvfile local cfg="$1"
local noresolv resolvfile localuse
config_get_bool noresolv "$cfg" noresolv 0
config_get_bool localuse "$cfg" localuse 0
config_get resolvfile "$cfg" "resolvfile" config_get resolvfile "$cfg" "resolvfile"
#relink /tmp/resolve.conf only for main instance [ "$noresolv" = 0 -a "$resolvfile" = "/tmp/resolv.conf.auto" ] && localuse=1
[ "$resolvfile" = "/tmp/resolv.conf.auto" ] && { [ "$localuse" -gt 0 ] && ln -sf "/tmp/resolv.conf.auto" /tmp/resolv.conf
[ -f /tmp/resolv.conf ] && {
rm -f /tmp/resolv.conf
ln -s "$resolvfile" /tmp/resolv.conf
}
}
rm -f ${BASEDHCPSTAMPFILE}.${cfg}.*.dhcp rm -f ${BASEDHCPSTAMPFILE}.${cfg}.*.dhcp
} }

Loading…
Cancel
Save