From 2aff261d44fe933cf1c20b1fd093324c41cea4ba Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Wed, 7 Feb 2007 13:58:23 +0100 Subject: [PATCH] src/utils_dns.c: Fix the handling of the `struct udphdr' under the GNU libc and other systems. --- configure.in | 15 +++++++++++++++ src/utils_dns.c | 15 ++++++++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/configure.in b/configure.in index 760c9184..a15be257 100644 --- a/configure.in +++ b/configure.in @@ -452,6 +452,21 @@ AC_CHECK_MEMBERS([struct net_device_stats.rx_bytes, struct net_device_stats.tx_p #include ]) +# [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 + #include + ]) +# [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 + #include + ]) + AC_MSG_CHECKING([for kernel type ($host_os)]) case $host_os in *linux*) diff --git a/src/utils_dns.c b/src/utils_dns.c index 89c03203..a6643bbf 100644 --- a/src/utils_dns.c +++ b/src/utils_dns.c @@ -110,9 +110,14 @@ # 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)) -- 2.11.0