]> git.ipfire.org Git - people/ms/dnsmasq.git/commitdiff
Fix endian bug in --local-service code.
authorRichard Genoud <richard.genoud@gmail.com>
Wed, 17 Sep 2014 20:12:00 +0000 (21:12 +0100)
committerSimon Kelley <simon@thekelleys.org.uk>
Wed, 17 Sep 2014 20:12:00 +0000 (21:12 +0100)
CHANGELOG
src/forward.c

index 11464130ce106d3f1a7500d91e1f83fd3cec6d0a..a499107c5b0421d0370618451a9a309ea29573a7 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -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
index 3afd1b197d39ba3674967f0bb0dfb804f45e7ee6..4895efeba89a0cb9177b13b71ba9881f649f355a 100644 (file)
@@ -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;