diff options
-rw-r--r-- | CHANGELOG | 3 | ||||
-rw-r--r-- | src/forward.c | 4 |
2 files changed, 5 insertions, 2 deletions
@@ -49,6 +49,9 @@ version 2.71 regression introduced in 2.69. Thanks to James Hunt and the Ubuntu crowd for assistance in fixing this. + Fix problem with --local-service option on big-endian platforms + Thanks to Richard Genoud for the patch. + version 2.70 Fix crash, introduced in 2.69, on TCP request when dnsmasq diff --git a/src/forward.c b/src/forward.c index 3afd1b1..4895efe 100644 --- a/src/forward.c +++ b/src/forward.c @@ -1118,7 +1118,7 @@ void receive_query(struct listener *listen, time_t now) struct in_addr netmask; for (addr = daemon->interface_addrs; addr; addr = addr->next) { - netmask.s_addr = 0xffffffff << (32 - addr->prefixlen); + netmask.s_addr = htonl(~(in_addr_t)0 << (32 - addr->prefixlen)); if (!(addr->flags & ADDRLIST_IPV6) && is_same_net(addr->addr.addr.addr4, source_addr.in.sin_addr, netmask)) break; @@ -1652,7 +1652,7 @@ unsigned char *tcp_request(int confd, time_t now, struct in_addr netmask; for (addr = daemon->interface_addrs; addr; addr = addr->next) { - netmask.s_addr = 0xffffffff << (32 - addr->prefixlen); + netmask.s_addr = htonl(~(in_addr_t)0 << (32 - addr->prefixlen)); if (!(addr->flags & ADDRLIST_IPV6) && is_same_net(addr->addr.addr.addr4, peer_addr.in.sin_addr, netmask)) break; |