fw4: fix redirect destination zone resolving
authorJo-Philipp Wich <jo@mein.io>
Thu, 27 Jan 2022 18:35:14 +0000 (19:35 +0100)
committerJo-Philipp Wich <jo@mein.io>
Thu, 27 Jan 2022 18:36:28 +0000 (19:36 +0100)
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
root/usr/share/ucode/fw4.uc

index 91f472bafe00217099b7307c830dda505b829ef9..9b6fcaa24c98725ee56d0d8bd077a591e9a9f2f2 100644 (file)
@@ -2401,22 +2401,24 @@ return {
 
                let resolve_dest = (redir) => {
                        for (let zone in this.state.zones) {
-                               for (let addr in zone.related_subnets) {
-                                       if (redir.dest_ip.family != addr.family)
-                                               continue;
+                               for (let zone_addr in zone.related_subnets) {
+                                       for (let dest_addr in redir.dest_ip.addrs) {
+                                               if (dest_addr.family != zone_addr.family)
+                                                       continue;
 
-                                       let a = apply_mask(redir.dest_ip.addr, addr.bits);
-                                       let b = apply_mask(addr.addr, addr.bits);
+                                               let a = apply_mask(dest_addr.addr, zone_addr.mask);
+                                               let b = apply_mask(zone_addr.addr, zone_addr.mask);
 
-                                       if (a != b)
-                                               continue;
+                                               if (a != b)
+                                                       continue;
 
-                                       redir.dest = {
-                                               any: false,
-                                               zone: zone
-                                       };
+                                               redir.dest = {
+                                                       any: false,
+                                                       zone: zone
+                                               };
 
-                                       return true;
+                                               return true;
+                                       }
                                }
                        }