firewall: make invalid redirects and duplicate zones non-fatal, print a notice and...
authorJo-Philipp Wich <jow@openwrt.org>
Thu, 16 Sep 2010 11:47:35 +0000 (11:47 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Thu, 16 Sep 2010 11:47:35 +0000 (11:47 +0000)
SVN-Revision: 23080

package/firewall/Makefile
package/firewall/files/lib/core.sh
package/firewall/files/lib/core_init.sh
package/firewall/files/lib/core_redirect.sh

index 8cf22e8348920cc5cbacbc8cbfd6df5213925c8e..93e41bf58f1d54f0c972d16b9c09f4ff5af154b5 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 PKG_NAME:=firewall
 
 PKG_VERSION:=2
-PKG_RELEASE:=15
+PKG_RELEASE:=16
 
 include $(INCLUDE_DIR)/package.mk
 
index c350e8f0f61b76931d542235c2ca415285387563..c383597810e38703c7e4ebe95eb1ed4610708df2 100644 (file)
@@ -107,10 +107,8 @@ fw_die() {
 
 fw_log() {
        local level="$1"
-       [ -n "$2" ] || {
-               shift
-               level=notice
-       }
+       [ -n "$2" ] && shift || level=notice
+       [ "$level" != error ] || echo "Error: $@" >&2
        logger -t firewall -p user.$level "$@"
 }
 
index e1f80ba3fca15cfc3ed93e1dbfa6b32396d0e71f..56e19b7b86e198a3d79dfe0418ec13b2c57b1550 100644 (file)
@@ -42,7 +42,7 @@ fw_load_defaults() {
                boolean disable_ipv6 0 \
        } || return
        [ -n "$FW_DEFAULTS_APPLIED" ] && {
-               echo "Error: multiple defaults sections detected"
+               fw_log error "duplicate defaults section detected, skipping"
                return 1
        }
        FW_DEFAULTS_APPLIED=1
@@ -159,7 +159,8 @@ fw_load_zone() {
        fw_config_get_zone "$1"
 
        list_contains FW_ZONES $zone_name && {
-               fw_die "zone ${zone_name}: duplicated zone"
+               fw_log error "zone ${zone_name}: duplicated zone, skipping"
+               return 0
        }
        append FW_ZONES $zone_name
 
index 72364a99e959bd30f717d4745ce4ac598614cb23..3a37bb7ee6f5d73413e77cd0f77c8511105fd658 100644 (file)
@@ -30,7 +30,8 @@ fw_load_redirect() {
        local fwdchain natchain natopt nataddr natports srcdaddr srcdports
        if [ "$redirect_target" == "DNAT" ]; then
                [ -n "$redirect_src" -a -n "$redirect_dest_ip$redirect_dest_port" ] || {
-                       fw_die "DNAT redirect ${redirect_name}: needs src and dest_ip or dest_port"
+                       fw_log error "DNAT redirect ${redirect_name}: needs src and dest_ip or dest_port, skipping"
+                       return 0
                }
 
                fwdchain="zone_${redirect_src}_forward"
@@ -48,7 +49,8 @@ fw_load_redirect() {
 
        elif [ "$redirect_target" == "SNAT" ]; then
                [ -n "$redirect_dest" -a -n "$redirect_src_dip" ] || {
-                       fw_die "SNAT redirect ${redirect_name}: needs dest and src_dip"
+                       fw_log error "SNAT redirect ${redirect_name}: needs dest and src_dip, skipping"
+                       return 0
                }
 
                fwdchain="${redirect_src:+zone_${redirect_src}_forward}"
@@ -65,7 +67,8 @@ fw_load_redirect() {
                        append FW_CONNTRACK_ZONES $redirect_dest
 
        else
-               fw_die "redirect ${redirect_name}: target must be either DNAT or SNAT"
+               fw_log error "redirect ${redirect_name}: target must be either DNAT or SNAT, skipping"
+               return 0
        fi
 
        local mode