[PATCH] firewall: provide examples of ssh port relocation on firewall and IPsec passt...
[openwrt/svn-archive/archive.git] / package / firewall / files / lib / core_interface.sh
index bc9eb96ddedc2faa349ccc40d72fa63203229a00..5386292a4827764db6eb387d305b9d520b61112e 100644 (file)
@@ -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() {