cmake: Find uci.h
[project/firewall3.git] / redirects.c
index a30c540..be1bfcb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * firewall3 - 3rd OpenWrt UCI firewall implementation
  *
- *   Copyright (C) 2013-2014 Jo-Philipp Wich <jow@openwrt.org>
+ *   Copyright (C) 2013-2014 Jo-Philipp Wich <jo@mein.io>
  *
  * Permission to use, copy, modify, and/or distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -166,45 +166,13 @@ static bool
 check_local(struct uci_element *e, struct fw3_redirect *redir,
             struct fw3_state *state)
 {
-       struct fw3_zone *zone;
-       struct fw3_device *net;
-       struct fw3_address *addr, *tmp;
-
        if (redir->target != FW3_FLAG_DNAT)
                return false;
 
        if (!redir->ip_redir.set)
                redir->local = true;
 
-       if (redir->local)
-               return true;
-
-       list_for_each_entry(zone, &state->zones, list)
-       {
-               list_for_each_entry(net, &zone->networks, list)
-               {
-                       LIST_HEAD(addrs);
-
-                       fw3_ubus_address(&addrs, net->name);
-                       list_for_each_entry_safe(addr, tmp, &addrs, list)
-                       {
-                               if (!redir->local && compare_addr(&redir->ip_redir, addr)) {
-                                       warn_elem(e, "refers to a destination address on this router, "
-                                                    "assuming port redirection");
-
-                                       redir->local = true;
-                               }
-
-                               list_del(&addr->list);
-                               free(addr);
-                       }
-
-                       if (redir->local)
-                               return true;
-               }
-       }
-
-       return false;
+       return redir->local;
 }
 
 void
@@ -312,20 +280,20 @@ fw3_load_redirects(struct fw3_state *state, struct uci_package *p)
                                set(redir->_src->flags, FW3_FAMILY_V4, redir->target);
                                redir->_src->conntrack = true;
                                valid = true;
-                       }
 
-                       if (!check_local(e, redir, state) && !redir->dest.set &&
-                           resolve_dest(e, redir, state))
-                       {
-                               warn_elem(e, "does not specify a destination, assuming '%s'",
-                                         redir->dest.name);
-                       }
+                               if (!check_local(e, redir, state) && !redir->dest.set &&
+                                   resolve_dest(e, redir, state))
+                               {
+                                       warn_elem(e, "does not specify a destination, assuming '%s'",
+                                                 redir->dest.name);
+                               }
 
-                       if (redir->reflection && redir->_dest && redir->_src->masq)
-                       {
-                               set(redir->_dest->flags, FW3_FAMILY_V4, FW3_FLAG_ACCEPT);
-                               set(redir->_dest->flags, FW3_FAMILY_V4, FW3_FLAG_DNAT);
-                               set(redir->_dest->flags, FW3_FAMILY_V4, FW3_FLAG_SNAT);
+                               if (redir->reflection && redir->_dest && redir->_src->masq)
+                               {
+                                       set(redir->_dest->flags, FW3_FAMILY_V4, FW3_FLAG_ACCEPT);
+                                       set(redir->_dest->flags, FW3_FAMILY_V4, FW3_FLAG_DNAT);
+                                       set(redir->_dest->flags, FW3_FAMILY_V4, FW3_FLAG_SNAT);
+                               }
                        }
                }
                else