diff options
Diffstat (limited to 'package/firewall/files/lib/core_interface.sh')
-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 bc9eb96dde..5386292a48 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() { |