diff options
Diffstat (limited to 'package/firewall/files/lib')
| -rw-r--r-- | package/firewall/files/lib/core_interface.sh | 50 | 
1 files changed, 39 insertions, 11 deletions
| diff --git a/package/firewall/files/lib/core_interface.sh b/package/firewall/files/lib/core_interface.sh index bc9eb96dd..5386292a4 100644 --- a/package/firewall/files/lib/core_interface.sh +++ b/package/firewall/files/lib/core_interface.sh @@ -1,27 +1,55 @@ -# 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% }" +	local list="$(uci_get_state firewall core $var)" +	      list=" ${list:+$list }" + +	for item in $item; do +		case "$list" in +			"* $item *") continue;; +			*) list="$list$item ";; +		esac +	done + +	list="${list% }" +	list="${list# }" +  	uci_revert_state firewall core $var -	uci_set_state firewall core $var "${val:+$val }$item" +	uci_set_state firewall core $var "$list"  }  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% }" +	echo "del[$item]" + +	local list val +	for val in $(uci_get_state firewall core "$var" | sort -u); do +		list="${list:+$list }$val" +	done + +	echo "list[$list]" +  	uci_revert_state firewall core $var -	uci_set_state firewall core $var "$val" + +	[ -n "$list" ] && { +		list=" $list " + +		for item in $item; do +			list="${list// $item / }" +		done + +		list="${list# }" +		list="${list% }" + +		echo "list2[$list]" + +		uci_set_state firewall core $var "$list" +	}  }  fw_configure_interface() { | 
