]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUILD: lua: build failed on FreeBSD.
authorThierry FOURNIER <thierry.fournier@ozon.io>
Fri, 23 Dec 2016 16:03:25 +0000 (17:03 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 23 Dec 2016 17:03:43 +0000 (18:03 +0100)
s6_addr* fields are not available in the userland on
BSD systems in general.

bug reported by David Carlier

needs backport to 1.7.x

src/hlua_fcn.c

index 5951fe16d1b8ae65b0265c2dde3c14fd426f35df..8406bfe5fbd6dd3528a5df6c8aaef8dacc436728 100644 (file)
@@ -1016,14 +1016,16 @@ int hlua_match_addr(lua_State *L)
                        return 1;
                }
        } else {
-               if (((addr1->addr.v6.ip.s6_addr32[0] & addr2->addr.v6.mask.s6_addr32[0]) ==
-                    (addr2->addr.v6.ip.s6_addr32[0] & addr1->addr.v6.mask.s6_addr32[0])) &&
-                   ((addr1->addr.v6.ip.s6_addr32[1] & addr2->addr.v6.mask.s6_addr32[1]) ==
-                    (addr2->addr.v6.ip.s6_addr32[1] & addr1->addr.v6.mask.s6_addr32[1])) &&
-                   ((addr1->addr.v6.ip.s6_addr32[2] & addr2->addr.v6.mask.s6_addr32[2]) ==
-                    (addr2->addr.v6.ip.s6_addr32[2] & addr1->addr.v6.mask.s6_addr32[2])) &&
-                   ((addr1->addr.v6.ip.s6_addr32[3] & addr2->addr.v6.mask.s6_addr32[3]) ==
-                    (addr2->addr.v6.ip.s6_addr32[3] & addr1->addr.v6.mask.s6_addr32[3]))) {
+               int i;
+
+               for (i = 0; i < 16; i += 4) {
+                       if ((*(uint32_t *)&addr1->addr.v6.ip.s6_addr[i] &
+                            *(uint32_t *)&addr2->addr.v6.mask.s6_addr[i]) !=
+                           (*(uint32_t *)&addr2->addr.v6.ip.s6_addr[i] &
+                            *(uint32_t *)&addr1->addr.v6.mask.s6_addr[i]))
+                               break;
+               }
+               if (i == 16) {
                        lua_pushboolean(L, 1);
                        return 1;
                }