src/utils_dns.c: Fix the handling of the `struct udphdr' under the GNU libc and other...
authorFlorian Forster <octo@crystal.wlan.home.verplant.org>
Wed, 7 Feb 2007 12:58:23 +0000 (13:58 +0100)
committerFlorian Forster <octo@crystal.wlan.home.verplant.org>
Wed, 7 Feb 2007 12:58:23 +0000 (13:58 +0100)
configure.in
src/utils_dns.c

index 760c918..a15be25 100644 (file)
@@ -452,6 +452,21 @@ AC_CHECK_MEMBERS([struct net_device_stats.rx_bytes, struct net_device_stats.tx_p
        #include <linux/netdevice.h>
        ])
 
+#      [AC_DEFINE(HAVE_STRUCT_UDPHDR_BSD, 1, [Define if struct udphdr exists and is the BSD variant.])],
+AC_CHECK_MEMBERS([struct udphdr.uh_dport, struct udphdr.uh_sport],
+       [], [],
+       [
+       #include <sys/types.h>
+       #include <netinet/udp.h>
+       ])
+#      [AC_DEFINE(HAVE_STRUCT_UDPHDR_GNU, 1, [Define if struct udphdr exists and is the GNU variant.])],
+AC_CHECK_MEMBERS([struct udphdr.dest, struct udphdr.source],
+       [], [],
+       [
+       #include <sys/types.h>
+       #include <netinet/udp.h>
+       ])
+
 AC_MSG_CHECKING([for kernel type ($host_os)])
 case $host_os in
        *linux*)
index 89c0320..a6643bb 100644 (file)
 # define PPP_CONTROL_VAL 0x03  /* The control byte value */
 #endif
 
-#ifndef __FAVOR_BSD
-#define uh_sport source
-#define uh_dport dest
+#if HAVE_STRUCT_UDPHDR_UH_DPORT && HAVE_STRUCT_UDPHDR_UH_SPORT
+# define UDP_DEST uh_dport
+# define UDP_SRC  uh_dport
+#elif HAVE_STRUCT_UDPHDR_DEST && HAVE_STRUCT_UDPHDR_SOURCE
+# define UDP_DEST dest
+# define UDP_SRC  source
+#else
+# error "`struct udphdr' is unusable."
 #endif
 
 #include "utils_dns.h"
@@ -409,8 +414,8 @@ handle_udp(const struct udphdr *udp, int len,
        const struct in6_addr *d_addr)
 {
     char buf[PCAP_SNAPLEN];
-    if ((ntohs (udp->uh_dport) != 53)
-                   && (ntohs (udp->uh_sport) != 53))
+    if ((ntohs (udp->UDP_DEST) != 53)
+                   && (ntohs (udp->UDP_SRC) != 53))
        return 0;
     memcpy(buf, udp + 1, len - sizeof(*udp));
     if (0 == handle_dns(buf, len - sizeof(*udp), s_addr, d_addr))