diff options
Diffstat (limited to 'package')
| -rw-r--r-- | package/base-files/Makefile | 2 | ||||
| -rwxr-xr-x | package/base-files/files/lib/network/config.sh | 43 | ||||
| -rwxr-xr-x | package/base-files/files/sbin/ifdown | 3 | ||||
| -rwxr-xr-x | package/base-files/files/usr/share/udhcpc/default.script | 22 | 
4 files changed, 43 insertions, 27 deletions
| diff --git a/package/base-files/Makefile b/package/base-files/Makefile index 8eca0d5dd..90c804bbe 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk  include $(INCLUDE_DIR)/kernel.mk  PKG_NAME:=base-files -PKG_RELEASE:=46 +PKG_RELEASE:=47  PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/ diff --git a/package/base-files/files/lib/network/config.sh b/package/base-files/files/lib/network/config.sh index 32170bb27..1bb3a46ec 100755 --- a/package/base-files/files/lib/network/config.sh +++ b/package/base-files/files/lib/network/config.sh @@ -70,6 +70,16 @@ add_vlan() {  add_dns() {  	local cfg="$1"; shift +	remove_dns "$cfg" + +	# We may be called by pppd's ip-up which has a nonstandard umask set. +	# Create an empty file here and force its permission to 0644, otherwise +	# dnsmasq will not be able to re-read the resolv.conf.auto . +	[ ! -f /tmp/resolv.conf.auto ] && { +		touch /tmp/resolv.conf.auto +		chmod 0644 /tmp/resolv.conf.auto +	} +  	local dns  	local add  	for dns in "$@"; do @@ -79,20 +89,27 @@ add_dns() {  		}  	done -	uci_set_state network "$cfg" dns "$add" +	[ -n "$cfg" ] && { +		uci_set_state network "$cfg" dns "$add" +		uci_set_state network "$cfg" resolv_dns "$add" +	}  }  # remove dns entries of the given iface  remove_dns() {  	local cfg="$1" -	local dns -	config_get dns "$cfg" dns -	for dns in $dns; do -		sed -i -e "/^nameserver $dns$/d" /tmp/resolv.conf.auto -	done +	[ -n "$cfg" ] && { +		[ -f /tmp/resolv.conf.auto ] && { +			local dns=$(uci_get_state network "$cfg" resolv_dns) +			for dns in $dns; do +				sed -i -e "/^nameserver $dns$/d" /tmp/resolv.conf.auto +			done +		} -	uci_revert_state network "$cfg" dns +		uci_revert_state network "$cfg" dns +		uci_revert_state network "$cfg" resolv_dns +	}  }  # sort the device list, drop duplicates @@ -212,13 +229,7 @@ setup_interface_static() {  	[ -z "$ip6addr" ] || $DEBUG ifconfig "$iface" add "$ip6addr"  	[ -z "$gateway" ] || $DEBUG route add default gw "$gateway" dev "$iface"  	[ -z "$ip6gw" ] || $DEBUG route -A inet6 add default gw "$ip6gw" dev "$iface" -	[ -z "$dns" ] || { -		for ns in $dns; do -			grep "$ns" /tmp/resolv.conf.auto 2>/dev/null >/dev/null || { -				echo "nameserver $ns" >> /tmp/resolv.conf.auto -			} -		done -	} +	[ -z "$dns" ] || add_dns "$config" $dns  	config_get type "$config" TYPE  	[ "$type" = "alias" ] && return 0 @@ -363,12 +374,14 @@ setup_interface() {  stop_interface_dhcp() {  	local config="$1" -	local iface +	local ifname  	config_get ifname "$config" ifname  	local lock="/var/lock/dhcp-${ifname}"  	[ -f "$lock" ] && lock -u "$lock" +	remove_dns "$config" +  	local pidfile="/var/run/dhcp-${ifname}.pid"  	local pid="$(cat "$pidfile" 2>/dev/null)"  	[ -d "/proc/$pid" ] && { diff --git a/package/base-files/files/sbin/ifdown b/package/base-files/files/sbin/ifdown index 7c6a5b706..92cdfd2b0 100755 --- a/package/base-files/files/sbin/ifdown +++ b/package/base-files/files/sbin/ifdown @@ -40,6 +40,9 @@ done  config_get iftype "$cfg" type  [ "bridge" = "$iftype" ] && brctl delbr "$ifname" >/dev/null 2>/dev/null +# remove the interface's dns entries +remove_dns "$cfg" +  # remove the interface's network state  uci_revert_state network "$1" diff --git a/package/base-files/files/usr/share/udhcpc/default.script b/package/base-files/files/usr/share/udhcpc/default.script index ceabf4bf3..39527778a 100755 --- a/package/base-files/files/usr/share/udhcpc/default.script +++ b/package/base-files/files/usr/share/udhcpc/default.script @@ -139,21 +139,21 @@ setup_interface () {  	}  	# DNS -	config_get old_dns "$ifc" dns +	old_dns=$(uci_get_state network "$ifc" dns) +	old_domain=$(uci_get_state network "$ifc" dnsdomain)  	user_dns=$(uci_get "network.$ifc.dns")  	[ -n "$user_dns" ] && dns="$user_dns" -	[ -n "$dns" ] && [ ! -s "${RESOLV_CONF}" -o "$dns" != "$old_dns" ] && { +	[ -n "$dns" ] && [ "$dns" != "$old_dns" -o -n "$user_dns" ] && {  		echo "udhcpc: setting dns servers: $dns" -		echo -n > "${RESOLV_CONF}.tmp" -		for i in $dns ; do -			echo "nameserver $i" >> "${RESOLV_CONF}.tmp" -		done -		${domain:+echo search $domain} >> "${RESOLV_CONF}.tmp" -		mv "${RESOLV_CONF}.tmp" "$RESOLV_CONF" - -		change_state network "$ifc" dnsdomain "$domain" -		change_state network "$ifc" dns "$dns" +		add_dns "$ifc" $dns + +		[ -n "$domain" ] && [ "$domain" != "$old_domain" ] && { +			echo "udhcpc: setting dns domain: $domain" +			sed -i -e "${old_domain:+/^search $old_domain$/d; }/^search $domain$/d" "${RESOLV_CONF}" +			echo "search $domain" >> "${RESOLV_CONF}" +			change_state network "$ifc" dnsdomain "$domain" +		}  	}  	[ -n "$ifc" ] || return | 
