diff options
Diffstat (limited to 'package/firewall/files')
| -rw-r--r-- | package/firewall/files/lib/core_interface.sh | 41 | 
1 files changed, 24 insertions, 17 deletions
| diff --git a/package/firewall/files/lib/core_interface.sh b/package/firewall/files/lib/core_interface.sh index bc9eb96dd..ab58201e2 100644 --- a/package/firewall/files/lib/core_interface.sh +++ b/package/firewall/files/lib/core_interface.sh @@ -1,27 +1,34 @@ -# Copyright (C) 2009-2010 OpenWrt.org +# Copyright (C) 2009-2011 OpenWrt.org  fw__uci_state_add() {  	local var="$1"  	local item="$2" -	local val=" $(uci_get_state firewall core $var) " -	val="${val// $item / }" -	val="${val# }" -	val="${val% }" -	uci_revert_state firewall core $var -	uci_set_state firewall core $var "${val:+$val }$item" +	local val="$(uci_get_state firewall core $var)" +	local e1; for e1 in $item; do +		local e2; for e2 in $val; do +			[ "$e1" = "$e2" ] && e1="" +		done +		val="${val:+$val${e1:+ }}$e1" +	done + +	uci_toggle_state $var "$val"  }  fw__uci_state_del() {  	local var="$1"  	local item="$2" -	local val=" $(uci_get_state firewall core $var) " -	val="${val// $item / }" -	val="${val# }" -	val="${val% }" -	uci_revert_state firewall core $var -	uci_set_state firewall core $var "$val" +	local rest="" +	local val="$(uci_get_state firewall core $var)" +	local e1; for e1 in $val; do +		local e2; for e2 in $item; do +			[ "$e1" = "$e2" ] && e1="" +		done +		rest="${rest:+$rest${e1:+ }}$e1" +	done + +	uci_toggle_state $var "$val"  }  fw_configure_interface() { @@ -154,14 +161,14 @@ fw_configure_interface() {  		fw_sysctl_interface $ifname  		fw_callback post interface -		uci_set_state firewall core "${iface}_aliases" "$aliases" +		uci_toggle_state firewall core "${iface}_aliases" "$aliases"  	} || {  		local subnets=  		config_get subnets core "${iface}_subnets"  		append subnets "$aliasnet"  		config_set core "${iface}_subnets" "$subnets" -		uci_set_state firewall core "${iface}_subnets" "$subnets" +		uci_toggle_state firewall core "${iface}_subnets" "$subnets"  	}  	local new_zones= @@ -180,8 +187,8 @@ fw_configure_interface() {  	}  	config_foreach load_zone zone -	uci_set_state firewall core "${iface}_zone" "$new_zones" -	uci_set_state firewall core "${iface}_ifname" "$ifname" +	uci_toggle_state firewall core "${iface}_zone" "$new_zones" +	uci_toggle_state firewall core "${iface}_ifname" "$ifname"  }  fw_sysctl_interface() { | 
