Explorar el Código

dnsmasq: switch to /tmp/resolv.conf.d/resolv.conf.auto

Mount-bind directory instead of resolv.conf.auto file in jail to
avoid problems when the file is deleted/replaced.

Signed-off-by: Daniel Golle <[email protected]>
Daniel Golle hace 6 años
padre
commit
cd48d8d342

+ 1 - 1
package/network/services/dnsmasq/files/dhcp.conf

@@ -13,7 +13,7 @@ config dnsmasq
 	option authoritative	1
 	option authoritative	1
 	option readethers	1
 	option readethers	1
 	option leasefile	'/tmp/dhcp.leases'
 	option leasefile	'/tmp/dhcp.leases'
-	option resolvfile	'/tmp/resolv.conf.auto'
+	option resolvfile	'/tmp/resolv.conf.d/resolv.conf.auto'
 	#list server		'/mycompany.local/1.2.3.4'
 	#list server		'/mycompany.local/1.2.3.4'
 	option nonwildcard	1 # bind to & keep track of interfaces
 	option nonwildcard	1 # bind to & keep track of interfaces
 	#list interface		br-lan
 	#list interface		br-lan

+ 7 - 6
package/network/services/dnsmasq/files/dnsmasq.init

@@ -768,7 +768,7 @@ dnsmasq_start()
 {
 {
 	local cfg="$1"
 	local cfg="$1"
 	local disabled user_dhcpscript
 	local disabled user_dhcpscript
-	local resolvfile localuse=0
+	local resolvfile resolvdir localuse=0
 
 
 	config_get_bool disabled "$cfg" disabled 0
 	config_get_bool disabled "$cfg" disabled 0
 	[ "$disabled" -gt 0 ] && return 0
 	[ "$disabled" -gt 0 ] && return 0
@@ -923,10 +923,11 @@ dnsmasq_start()
 
 
 	config_get_bool noresolv "$cfg" noresolv 0
 	config_get_bool noresolv "$cfg" noresolv 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.d/resolv.conf.auto
 		[ -n "$resolvfile" -a ! -e "$resolvfile" ] && touch "$resolvfile"
 		[ -n "$resolvfile" -a ! -e "$resolvfile" ] && touch "$resolvfile"
 		xappend "--resolv-file=$resolvfile"
 		xappend "--resolv-file=$resolvfile"
-		[ "$resolvfile" = "/tmp/resolv.conf.auto" ] && localuse=1
+		[ "$resolvfile" = "/tmp/resolv.conf.d/resolv.conf.auto" ] && localuse=1
+		resolvdir="$(dirname "$resolvfile")"
 	fi
 	fi
 	config_get_bool localuse "$cfg" localuse "$localuse"
 	config_get_bool localuse "$cfg" localuse "$localuse"
 
 
@@ -1070,7 +1071,7 @@ dnsmasq_start()
 	procd_set_param respawn
 	procd_set_param respawn
 
 
 	procd_add_jail dnsmasq ubus log
 	procd_add_jail dnsmasq ubus log
-	procd_add_jail_mount $CONFIGFILE $TRUSTANCHORSFILE $HOSTFILE $RFC6761FILE $DHCPBOGUSHOSTNAMEFILE /etc/passwd /etc/group /etc/TZ /dev/null /dev/urandom $dnsmasqconffile $dnsmasqconfdir $resolvfile $user_dhcpscript /etc/hosts /etc/ethers /sbin/hotplug-call $EXTRA_MOUNT $DHCPSCRIPT
+	procd_add_jail_mount $CONFIGFILE $TRUSTANCHORSFILE $HOSTFILE $RFC6761FILE $DHCPBOGUSHOSTNAMEFILE /etc/passwd /etc/group /etc/TZ /dev/null /dev/urandom $dnsmasqconffile $dnsmasqconfdir $resolvdir $user_dhcpscript /etc/hosts /etc/ethers /sbin/hotplug-call $EXTRA_MOUNT $DHCPSCRIPT
 	procd_add_jail_mount_rw /var/run/dnsmasq/ $leasefile
 	procd_add_jail_mount_rw /var/run/dnsmasq/ $leasefile
 
 
 	procd_close_instance
 	procd_close_instance
@@ -1084,9 +1085,9 @@ dnsmasq_stop()
 	config_get_bool noresolv "$cfg" noresolv 0
 	config_get_bool noresolv "$cfg" noresolv 0
 	config_get resolvfile "$cfg" "resolvfile"
 	config_get resolvfile "$cfg" "resolvfile"
 
 
-	[ "$noresolv" = 0 -a "$resolvfile" = "/tmp/resolv.conf.auto" ] && localuse=1
+	[ "$noresolv" = 0 -a "$resolvfile" = "/tmp/resolv.conf.d/resolv.conf.auto" ] && localuse=1
 	config_get_bool localuse "$cfg" localuse "$localuse"
 	config_get_bool localuse "$cfg" localuse "$localuse"
-	[ "$localuse" -gt 0 ] && ln -sf "/tmp/resolv.conf.auto" /tmp/resolv.conf
+	[ "$localuse" -gt 0 ] && ln -sf "/tmp/resolv.conf.d/resolv.conf.auto" /tmp/resolv.conf
 
 
 	rm -f ${BASEDHCPSTAMPFILE}.${cfg}.*.dhcp
 	rm -f ${BASEDHCPSTAMPFILE}.${cfg}.*.dhcp
 }
 }