[source] dnsmasq: manage resolv.conf if when listening on 127.0.0.1#53

LEDE Commits lede-commits at lists.infradead.org
Mon Jun 12 02:09:05 PDT 2017


dedeckeh pushed a commit to source.git, branch master:
https://git.lede-project.org/a53f8ba6771de64c9c82a2e6867791226f3003cb

commit a53f8ba6771de64c9c82a2e6867791226f3003cb
Author: Paul Oranje <por at xs4all.nl>
AuthorDate: Fri Jun 9 11:30:23 2017 +0200

    dnsmasq: manage resolv.conf if when listening on 127.0.0.1#53
    
    With this patch the dnsmasq init script manages resolv.conf if and only if
    when dnsmasq will listen on 127.0.0.1#53 (is main resolver instance).
    Also, resolvfile is now set irrespective of the value of noresolv.
    
    Fixes (partially) FS#785
    
    Signed-off-by: Paul Oranje <por at xs4all.nl>
---
 package/network/services/dnsmasq/Makefile          |  2 +-
 .../network/services/dnsmasq/files/dnsmasq.init    | 60 +++++++++++++---------
 2 files changed, 36 insertions(+), 26 deletions(-)

diff --git a/package/network/services/dnsmasq/Makefile b/package/network/services/dnsmasq/Makefile
index f9ab13a..35ac6b2 100644
--- a/package/network/services/dnsmasq/Makefile
+++ b/package/network/services/dnsmasq/Makefile
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=dnsmasq
 PKG_VERSION:=2.77
-PKG_RELEASE:=3
+PKG_RELEASE:=4
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_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 d5177ec..fda1140 100644
--- a/package/network/services/dnsmasq/files/dnsmasq.init
+++ b/package/network/services/dnsmasq/files/dnsmasq.init
@@ -707,6 +707,21 @@ dhcp_relay_add() {
 	fi
 }
 
+dnsmasq_ismain()
+{
+	local cfg="$1"
+	local port notinterfaces
+
+	config_get port "$cfg" port "53"
+	[ $port = "53" ] || return 1
+
+	config_get notinterfaces "$cfg" notinterface ""
+	[ -n $notinterfaces ] && list_contains $notinterfaces "loopback" || return 1
+
+	# dnsmasq instance is designated to listen on 127.0.0.1#53.
+	return 0
+}
+
 dnsmasq_start()
 {
 	local cfg="$1" disabled resolvfile user_dhcpscript
@@ -853,14 +868,10 @@ dnsmasq_start()
 	[ -n "$leasefile" -a \! -e "$leasefile" ] && touch "$leasefile"
 	config_get_bool cachelocal "$cfg" cachelocal 1
 
-	config_get_bool noresolv "$cfg" noresolv 0
-	if [ "$noresolv" != "1" ]; then
-		config_get resolvfile "$cfg" resolvfile "/tmp/resolv.conf.auto"
-		# So jail doesn't complain if file missing
-		[ -n "$resolvfile" -a \! -e "$resolvfile" ] && touch "$resolvfile"
-	fi
-
-	[ -n "$resolvfile" ] && xappend "--resolv-file=$resolvfile"
+	config_get resolvfile "$cfg" resolvfile "/tmp/resolv.conf.auto"
+	xappend "--resolv-file=$resolvfile"
+	# So jail doesn't complain if file missing
+	[ \! -e "$resolvfile" ] && touch "$resolvfile"
 
 	config_get hostsfile "$cfg" dhcphostsfile
 	[ -e "$hostsfile" ] && xappend "--dhcp-hostsfile=$hostsfile"
@@ -973,16 +984,6 @@ dnsmasq_start()
 	echo >> $CONFIGFILE_TMP
 	mv -f $CONFIGFILE_TMP $CONFIGFILE
 
-	[ "$resolvfile" = "/tmp/resolv.conf.auto" ] && {
-		rm -f /tmp/resolv.conf
-		[ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {
-			echo "search $DOMAIN" >> /tmp/resolv.conf
-		}
-		DNS_SERVERS="$DNS_SERVERS 127.0.0.1"
-		for DNS_SERVER in $DNS_SERVERS ; do
-			echo "nameserver $DNS_SERVER" >> /tmp/resolv.conf
-		done
-	}
 
 	procd_open_instance $cfg
 	procd_set_param command $PROG -C $CONFIGFILE -k -x /var/run/dnsmasq/dnsmasq."${cfg}".pid
@@ -1000,20 +1001,29 @@ dnsmasq_start()
 	procd_add_jail_mount_rw /var/run/dnsmasq/ $leasefile
 
 	procd_close_instance
+
+
+	# write /tmp/resolve.conf only for main instance
+	dnsmasq_ismain $cfg && {
+		rm -f /tmp/resolv.conf
+		[ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {
+			echo "search $DOMAIN" >> /tmp/resolv.conf
+		}
+		DNS_SERVERS="$DNS_SERVERS 127.0.0.1"
+		for DNS_SERVER in $DNS_SERVERS ; do
+			echo "nameserver $DNS_SERVER" >> /tmp/resolv.conf
+		done
+	}
 }
 
 dnsmasq_stop()
 {
 	local cfg="$1"
 
-	config_get resolvfile "$cfg" "resolvfile"
-
 	#relink /tmp/resolve.conf only for main instance
-	[ "$resolvfile" = "/tmp/resolv.conf.auto" ] && {
-		[ -f /tmp/resolv.conf ] && {
-			rm -f /tmp/resolv.conf
-			ln -s "$resolvfile" /tmp/resolv.conf
-		}
+	dnsmasq_ismain $cfg && {
+		[ -f /tmp/resolv.conf ] && rm -f /tmp/resolv.conf
+		ln -s /tmp/resolv.conf.auto /tmp/resolv.conf
 	}
 
 	rm -f ${BASEDHCPSTAMPFILE}.${cfg}.*.dhcp



More information about the lede-commits mailing list