From: Dave Hart Date: Sun, 18 Oct 2009 01:54:01 +0000 (+0000) Subject: [Bug 1343] lib/isc build breaks on systems without IPv6 headers. X-Git-Tag: NTP_4_2_5P235_RC~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a39ea72a1172979e1cff0bf080c6ef83e7f64c4c;p=thirdparty%2Fntp.git [Bug 1343] lib/isc build breaks on systems without IPv6 headers. bk: 4ada75392Jax0_yYjvBynGQ5sAznhw --- diff --git a/ChangeLog b/ChangeLog index 3692ca0ed..4fa396f90 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,4 @@ +* [Bug 1343] lib/isc build breaks on systems without IPv6 headers. (4.2.5p234-RC) 2009/10/16 Released by Harlan Stenn * [Bug 1339] redux, use unmodified lib/isc/win32/strerror.c and move #define strerror... to a header not used by lib/isc code. diff --git a/configure.ac b/configure.ac index 7dcfb88d0..852c53d7f 100644 --- a/configure.ac +++ b/configure.ac @@ -750,16 +750,28 @@ fi # # Look for in_port_t. # -AC_MSG_CHECKING([for in_port_t]) -AC_TRY_COMPILE([ -#include -#include ], -[in_port_t port = 25; return (0);], - [AC_MSG_RESULT(yes) - ], - [AC_MSG_RESULT(no) - AC_DEFINE(ISC_PLATFORM_NEEDPORTT, 1, [Do we need our own in_port_t?]) - ]) +AC_CACHE_CHECK( + [for in_port_t], + isc_cv_have_in_port_t, + [ + AC_TRY_COMPILE( + [ + #include + #include + ], + [ + in_port_t port = 25; + return (0); + ], + [isc_cv_have_in_port_t=yes], + [isc_cv_have_in_port_t=no] + ) + ] +) +case "$isc_cv_have_in_port_t" in + no) + AC_DEFINE(ISC_PLATFORM_NEEDPORTT, 1, [Declare in_port_t?]) +esac AC_CACHE_CHECK([for a fallback value for HZ], ac_cv_var_default_hz, [ac_cv_var_default_hz=100 @@ -880,19 +892,6 @@ if test $ac_cv_struct_ppsclockev = yes; then AC_DEFINE(HAVE_STRUCT_PPSCLOCKEV, 1, [Does a system header define struct ppsclockev?]) fi -AC_CACHE_CHECK([struct sockaddr for sa_len], ac_cv_struct_sockaddr_has_sa_len, -[AC_TRY_COMPILE([ -#include -#include ],[ -extern struct sockaddr *ps; -return ps->sa_len;], - ac_cv_struct_sockaddr_has_sa_len=yes, - ac_cv_struct_sockaddr_has_sa_len=no) -]) -if test $ac_cv_struct_sockaddr_has_sa_len = yes; then - AC_DEFINE(HAVE_SA_LEN_IN_STRUCT_SOCKADDR, 1, [Should be obvious...]) -fi - AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_struct_sockaddr_storage, [AC_TRY_COMPILE([ #include diff --git a/include/ntp_rfc2553.h b/include/ntp_rfc2553.h index 9794604b2..ef3374c9e 100644 --- a/include/ntp_rfc2553.h +++ b/include/ntp_rfc2553.h @@ -74,11 +74,6 @@ */ #include #include -/* - * Don't include any additional IPv6 definitions - * We are defining our own here. - */ -#define ISC_IPV6_H 1 #include #include "ntp_types.h" @@ -97,7 +92,7 @@ # define _SS_MAXSIZE 128 # define _SS_ALIGNSIZE (sizeof(ntp_uint64_t)) -# ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +# ifdef ISC_PLATFORM_HAVESALEN # define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(u_char) - sizeof(ntp_u_int8_t)) # define _SS_PAD2SIZE (_SS_MAXSIZE - sizeof(u_char) - sizeof(ntp_u_int8_t) - \ _SS_PAD1SIZE - _SS_ALIGNSIZE) @@ -105,7 +100,7 @@ # define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(short)) # define _SS_PAD2SIZE (_SS_MAXSIZE - sizeof(short) - \ _SS_PAD1SIZE - _SS_ALIGNSIZE) -# endif /* HAVE_SA_LEN_IN_STRUCT_SOCKADDR */ +# endif /* ISC_PLATFORM_HAVESALEN */ #endif #ifndef INET6_ADDRSTRLEN @@ -119,7 +114,7 @@ #ifndef HAVE_STRUCT_SOCKADDR_STORAGE struct sockaddr_storage { -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +#ifdef ISC_PLATFORM_HAVESALEN ntp_u_int8_t ss_len; /* address length */ ntp_u_int8_t ss_family; /* address family */ #else @@ -151,87 +146,9 @@ struct sockaddr_storage { #endif #ifndef ISC_PLATFORM_HAVEIPV6 -/* - * Definition of some useful macros to handle IP6 addresses - */ -#ifdef ISC_PLATFORM_NEEDIN6ADDRANY -#ifdef SYS_WINNT -#define IN6ADDR_ANY_INIT {{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }} -#else -#define IN6ADDR_ANY_INIT \ - {{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}} -#endif -#endif - -/* - * IPv6 address - */ #ifdef SYS_WINNT -#define in6_addr in_addr6 -#else - -struct in6_addr { - union { - ntp_u_int8_t __u6_addr8[16]; - ntp_u_int16_t __u6_addr16[8]; - ntp_u_int32_t __u6_addr32[4]; - } __u6_addr; /* 128-bit IP6 address */ -}; - -#define s6_addr __u6_addr.__u6_addr8 -#endif - -#if defined(ISC_PLATFORM_HAVEIPV6) && defined(ISC_PLATFORM_NEEDIN6ADDRANY) -extern const struct in6_addr in6addr_any; -#endif - -#define SIN6_LEN -#ifndef HAVE_SOCKADDR_IN6 -struct sockaddr_in6 { -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR - ntp_u_int8_t sin6_len; /* length of this struct(sa_family_t)*/ - ntp_u_int8_t sin6_family; /* AF_INET6 (sa_family_t) */ -#else - short sin6_family; /* AF_INET6 (sa_family_t) */ -#endif - ntp_u_int16_t sin6_port; /* Transport layer port # (in_port_t)*/ - ntp_u_int32_t sin6_flowinfo; /* IP6 flow information */ - struct in6_addr sin6_addr; /* IP6 address */ - ntp_u_int32_t sin6_scope_id; /* scope zone index */ -}; -#endif - -/* - * Unspecified - */ -#ifndef IN6_IS_ADDR_UNSPECIFIED -#define IN6_IS_ADDR_UNSPECIFIED(a) \ - ((*(const ntp_u_int32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \ - (*(const ntp_u_int32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \ - (*(const ntp_u_int32_t *)(const void *)(&(a)->s6_addr[8]) == 0) && \ - (*(const ntp_u_int32_t *)(const void *)(&(a)->s6_addr[12]) == 0)) -#endif -/* - * Multicast - */ -#ifndef IN6_IS_ADDR_MULTICAST -#define IN6_IS_ADDR_MULTICAST(a) ((a)->s6_addr[0] == 0xff) -#endif -/* - * Unicast link / site local. - */ -#ifndef IN6_IS_ADDR_LINKLOCAL -#define IN6_IS_ADDR_LINKLOCAL(a) (\ -(*((u_long *)((a)->s6_addr) ) == 0xfe) && \ -((*((u_long *)((a)->s6_addr) + 1) & 0xc0) == 0x80)) -#endif - -#ifndef IN6_IS_ADDR_SITELOCAL -#define IN6_IS_ADDR_SITELOCAL(a) (\ -(*((u_long *)((a)->s6_addr) ) == 0xfe) && \ -((*((u_long *)((a)->s6_addr) + 1) & 0xc0) == 0xc0)) +# define in6_addr in_addr6 #endif struct addrinfo { diff --git a/lib/isc/unix/include/isc/net.h b/lib/isc/unix/include/isc/net.h index 53bebd75a..7d478833c 100644 --- a/lib/isc/unix/include/isc/net.h +++ b/lib/isc/unix/include/isc/net.h @@ -187,7 +187,7 @@ struct in6_pktinfo { }; #endif -#if defined(ISC_PLATFORM_HAVEIPV6) && defined(ISC_PLATFORM_NEEDIN6ADDRANY) +#if defined(ISC_PLATFORM_NEEDIN6ADDRANY) extern const struct in6_addr isc_net_in6addrany; /*% * Cope with a missing in6addr_any and in6addr_loopback. diff --git a/lib/isc/unix/net.c b/lib/isc/unix/net.c index 12c8776ae..a21dbc946 100644 --- a/lib/isc/unix/net.c +++ b/lib/isc/unix/net.c @@ -92,10 +92,11 @@ #endif /* HAVE_SYSCTLBYNAME */ -#if defined(ISC_PLATFORM_HAVEIPV6) -# if defined(ISC_PLATFORM_NEEDIN6ADDRANY) +#if defined(ISC_PLATFORM_NEEDIN6ADDRANY) const struct in6_addr isc_net_in6addrany = IN6ADDR_ANY_INIT; -# endif +#endif + +#if defined(ISC_PLATFORM_HAVEIPV6) # if defined(ISC_PLATFORM_NEEDIN6ADDRLOOPBACK) const struct in6_addr isc_net_in6addrloop = IN6ADDR_LOOPBACK_INIT; diff --git a/lib/isc/win32/include/isc/ipv6.h b/lib/isc/win32/include/isc/ipv6.h index c9add0b37..a212a504b 100644 --- a/lib/isc/win32/include/isc/ipv6.h +++ b/lib/isc/win32/include/isc/ipv6.h @@ -54,8 +54,8 @@ #define IN6ADDR_LOOPBACK_INIT {{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }} #endif -LIBISC_EXTERNAL_DATA extern const struct in6_addr isc_in6addr_any; -LIBISC_EXTERNAL_DATA extern const struct in6_addr isc_in6addr_loopback; +LIBISC_EXTERNAL_DATA extern const struct in6_addr isc_net_in6addrany; +LIBISC_EXTERNAL_DATA extern const struct in6_addr isc_net_in6addrloop; /* * Unspecified diff --git a/lib/isc/win32/include/isc/net.h b/lib/isc/win32/include/isc/net.h index 249a50a83..b0bba80bb 100644 --- a/lib/isc/win32/include/isc/net.h +++ b/lib/isc/win32/include/isc/net.h @@ -118,8 +118,8 @@ struct in6_pktinfo { #endif #if _MSC_VER < 1300 -#define in6addr_any isc_in6addr_any -#define in6addr_loopback isc_in6addr_loopback +#define in6addr_any isc_net_in6addrany +#define in6addr_loopback isc_net_in6addrloop #endif /* diff --git a/lib/isc/win32/net.c b/lib/isc/win32/net.c index 0a7c885c1..e53d4b318 100644 --- a/lib/isc/win32/net.c +++ b/lib/isc/win32/net.c @@ -51,6 +51,11 @@ const struct in6_addr isc_net_in6addrany = IN6ADDR_ANY_INIT; #endif +#if defined(ISC_PLATFORM_HAVEIPV6) && defined(ISC_PLATFORM_NEEDIN6ADDRLOOPBACK) +const struct in6_addr isc_net_in6addrloop = IN6ADDR_LOOPBACK_INIT; +#endif + + static isc_once_t once = ISC_ONCE_INIT; static isc_once_t once_ipv6only = ISC_ONCE_INIT; static isc_once_t once_ipv6pktinfo = ISC_ONCE_INIT; diff --git a/libntp/ntp_rfc2553.c b/libntp/ntp_rfc2553.c index 01a3c26d6..cd0db8503 100644 --- a/libntp/ntp_rfc2553.c +++ b/libntp/ntp_rfc2553.c @@ -362,7 +362,7 @@ do_nodename( sockin6->sin6_addr = in6addr_any; */ } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +#ifdef ISC_PLATFORM_HAVESALEN ai->ai_addr->sa_len = SOCKLEN(ai->ai_addr); #endif @@ -428,7 +428,7 @@ do_nodename( sockin = (struct sockaddr_in *)ai->ai_addr; memcpy(&sockin->sin_addr, hp->h_addr, hp->h_length); ai->ai_addr->sa_family = hp->h_addrtype; -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +#ifdef ISC_PLATFORM_HAVESALEN ai->ai_addr->sa_len = sizeof(struct sockaddr); #endif if (hints != NULL && hints->ai_flags & AI_CANONNAME) diff --git a/ntpd/ntp_request.c b/ntpd/ntp_request.c index d9e53bcfd..925f3dbde 100644 --- a/ntpd/ntp_request.c +++ b/ntpd/ntp_request.c @@ -847,7 +847,7 @@ peer_info ( AF(&addr) = AF_INET; NSRCADR(&addr) = ipl->addr; } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +#ifdef ISC_PLATFORM_HAVESALEN addr.sas.ss_len = SOCKLEN(&addr); #endif ipl++; @@ -980,7 +980,7 @@ peer_stats ( AF(&addr) = AF_INET; NSRCADR(&addr) = ipl->addr; } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +#ifdef ISC_PLATFORM_HAVESALEN addr.sas.ss_len = SOCKLEN(&addr); #endif DPRINTF(1, ("peer_stats: looking for %s, %d, %d\n", @@ -1406,7 +1406,7 @@ do_conf( } NSRCPORT(&peeraddr) = htons(NTP_PORT); -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +#ifdef ISC_PLATFORM_HAVESALEN peeraddr.sas.ss_len = SOCKLEN(&peeraddr); #endif @@ -1570,7 +1570,7 @@ do_unconf( NSRCADR(&peeraddr) = temp_cp.peeraddr; } SET_PORT(&peeraddr, NTP_PORT); -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +#ifdef ISC_PLATFORM_HAVESALEN peeraddr.sas.ss_len = SOCKLEN(&peeraddr); #endif found = 0; @@ -1615,7 +1615,7 @@ do_unconf( NSRCADR(&peeraddr) = temp_cp.peeraddr; } SET_PORT(&peeraddr, NTP_PORT); -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +#ifdef ISC_PLATFORM_HAVESALEN peeraddr.sas.ss_len = SOCKLEN(&peeraddr); #endif found = 0; @@ -2099,7 +2099,7 @@ reset_peer( NSRCADR(&peeraddr) = cp->peeraddr; } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +#ifdef ISC_PLATFORM_HAVESALEN peeraddr.sas.ss_len = SOCKLEN(&peeraddr); #endif peer = findexistingpeer(&peeraddr, NULL, -1); @@ -2130,7 +2130,7 @@ reset_peer( NSRCADR(&peeraddr) = cp->peeraddr; } SET_PORT(&peeraddr, 123); -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +#ifdef ISC_PLATFORM_HAVESALEN peeraddr.sas.ss_len = SOCKLEN(&peeraddr); #endif peer = findexistingpeer(&peeraddr, NULL, -1); @@ -2636,7 +2636,7 @@ get_clock_info( ZERO_SOCK(&addr); AF(&addr) = AF_INET; -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +#ifdef ISC_PLATFORM_HAVESALEN addr.sas.ss_len = SOCKLEN(&addr); #endif SET_PORT(&addr, NTP_PORT); @@ -2708,7 +2708,7 @@ set_clock_fudge( while (items-- > 0) { AF(&addr) = AF_INET; NSRCADR(&addr) = cf->clockadr; -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +#ifdef ISC_PLATFORM_HAVESALEN addr.sas.ss_len = SOCKLEN(&addr); #endif SET_PORT(&addr, NTP_PORT); @@ -2775,7 +2775,7 @@ get_clkbug_info( ZERO_SOCK(&addr); AF(&addr) = AF_INET; -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +#ifdef ISC_PLATFORM_HAVESALEN addr.sas.ss_len = SOCKLEN(&addr); #endif SET_PORT(&addr, NTP_PORT); diff --git a/ntpdc/ntpdc_ops.c b/ntpdc/ntpdc_ops.c index f4e1a769a..161e8a50d 100644 --- a/ntpdc/ntpdc_ops.c +++ b/ntpdc/ntpdc_ops.c @@ -231,7 +231,7 @@ struct xcmd opcmds[] = { * SET_SS_LEN_IF_PRESENT - used by SET_ADDR, SET_ADDRS macros */ -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +#ifdef ISC_PLATFORM_HAVESALEN #define SET_SS_LEN_IF_PRESENT(psau) \ do { \ (psau)->sas.ss_len = SOCKLEN(psau); \ @@ -833,7 +833,7 @@ again: NSRCADR(&dst) = pp->dstadr; NSRCADR(&src) = pp->srcadr; } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR +#ifdef ISC_PLATFORM_HAVESALEN src.sas.ss_len = SOCKLEN(&src); dst.sas.ss_len = SOCKLEN(&dst); #endif diff --git a/ports/winnt/vs2008/libntp/libntp.vcproj b/ports/winnt/vs2008/libntp/libntp.vcproj index 35811a518..e508ac251 100644 --- a/ports/winnt/vs2008/libntp/libntp.vcproj +++ b/ports/winnt/vs2008/libntp/libntp.vcproj @@ -641,7 +641,7 @@ > -#include - ], - [ struct sockaddr_storage s; s.ss_family = 1; ], - [ ac_cv_have_ss_family_in_struct_ss="yes" ], - [ ac_cv_have_ss_family_in_struct_ss="no" ], + [ + #include + #include + ], + [ + struct sockaddr_storage s; + s.ss_family = 1; + ], + [ac_cv_have_ss_family_in_struct_ss=yes], + [ac_cv_have_ss_family_in_struct_ss=no] ) -]) + ] +) if test "x$ac_cv_have_ss_family_in_struct_ss" = "xyes" ; then AC_DEFINE(HAVE_SS_FAMILY_IN_SS, 1, [Does struct sockaddr_storage have ss_family?]) else @@ -254,16 +260,21 @@ else esac fi -AC_CACHE_CHECK([for __ss_family field in struct sockaddr_storage], - ac_cv_have___ss_family_in_struct_ss, [ +AC_CACHE_CHECK( + [for __ss_family field in struct sockaddr_storage], + ac_cv_have___ss_family_in_struct_ss, + [ AC_TRY_COMPILE( - [ -#include -#include - ], - [ struct sockaddr_storage s; s.__ss_family = 1; ], - [ ac_cv_have___ss_family_in_struct_ss="yes" ], - [ ac_cv_have___ss_family_in_struct_ss="no" ] + [ + #include + #include + ], + [ + struct sockaddr_storage s; + s.__ss_family = 1; + ], + [ac_cv_have___ss_family_in_struct_ss=yes], + [ac_cv_have___ss_family_in_struct_ss=no] ) ]) if test "x$ac_cv_have___ss_family_in_struct_ss" = "xyes" ; then @@ -276,6 +287,31 @@ AH_VERBATIM([X_HAVE_SS_FAMILY_IN_SS], # define ss_family __ss_family #endif /* !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE_SA_FAMILY_IN_SS) */]) +# +# Look for in_port_t. +# +AC_CACHE_CHECK( + [for in_port_t], + isc_cv_have_in_port_t, + [ + AC_TRY_COMPILE( + [ + #include + #include + ], + [ + in_port_t port = 25; + return (0); + ], + [isc_cv_have_in_port_t=yes], + [isc_cv_have_in_port_t=no] + ) + ] +) +case "$isc_cv_have_in_port_t" in + no) + AC_DEFINE(ISC_PLATFORM_NEEDPORTT, 1, [Declare in_port_t?]) +esac AC_ARG_ENABLE([ipv6], [AC_HELP_STRING([--enable-ipv6], [s use IPv6?])]) @@ -292,12 +328,11 @@ case "$enable_ipv6" in ;; esac - AC_CACHE_CHECK( [for IPv6 structures], ac_cv_isc_found_ipv6, [ - AC_COMPILE_IFELSE( + AC_COMPILE_IFELSE( [ AC_LANG_PROGRAM( [