------------------------------------------------------------ revno: 13665 revision-id: squid3@treenet.co.nz-20141121093155-pl1an0kjpl0p8kpw parent: squid3@treenet.co.nz-20141121093001-1te1w6paikc154w0 fixes bug: http://bugs.squid-cache.org/show_bug.cgi?id=4145 committer: Amos Jeffries branch nick: 3.5 timestamp: Fri 2014-11-21 01:31:55 -0800 message: Bug 4145: squid_endian.h compile errors with OpenBSD 5.6 * Remove unused big-endian macros. * Stop making assumptions about little-endian symbols existence. Test each one explicitly and define only as necessary. * Add support for systems with endian.h available. * Move Endian hacks to libntlmauth which is the only code using them. Also, build only if NTLM is required. ------------------------------------------------------------ # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: squid3@treenet.co.nz-20141121093155-pl1an0kjpl0p8kpw # target_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 # testament_sha1: fdd9e0d8362a34888cc76625285a8ce09779e6b5 # timestamp: 2014-11-21 09:37:27 +0000 # source_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 # base_revision_id: squid3@treenet.co.nz-20141121093001-\ # 1te1w6paikc154w0 # # Begin patch === modified file 'compat/compat.h' --- compat/compat.h 2014-10-02 12:07:26 +0000 +++ compat/compat.h 2014-11-21 09:31:55 +0000 @@ -105,9 +105,6 @@ /* Valgrind API macros changed between two versions squid supports */ #include "compat/valgrind.h" -/* Endian functions are usualy handled by the OS but not always. */ -#include "squid_endian.h" - /** * A Regular Expression library is bundled with Squid. * Default is to use a system provided one, but the bundle === modified file 'configure.ac' --- configure.ac 2014-10-31 10:56:47 +0000 +++ configure.ac 2014-11-21 09:31:55 +0000 @@ -2764,7 +2764,6 @@ limits.h \ linux/posix_types.h \ linux/types.h \ - machine/byte_swap.h \ malloc.h \ math.h \ memory.h \ @@ -2789,8 +2788,6 @@ string.h \ strings.h \ sys/bitypes.h \ - sys/bswap.h \ - sys/endian.h \ sys/file.h \ sys/ioctl.h \ sys/ipc.cc \ @@ -3303,10 +3300,6 @@ AC_CHECK_FUNCS(\ backtrace_symbols_fd \ bcopy \ - bswap_16 \ - bswap_32 \ - bswap16 \ - bswap32 \ eui64_aton \ fchmod \ getdtablesize \ @@ -3317,8 +3310,6 @@ getspnam \ gettimeofday \ glob \ - htobe16 \ - htole16 \ lrand48 \ mallocblksize \ mallopt \ === modified file 'helpers/ntlm_auth/modules.m4' --- helpers/ntlm_auth/modules.m4 2014-09-13 13:31:49 +0000 +++ helpers/ntlm_auth/modules.m4 2014-11-21 09:31:55 +0000 @@ -66,3 +66,16 @@ AC_MSG_NOTICE([NTLM auth helpers to be built: $NTLM_AUTH_HELPERS]) AM_CONDITIONAL(ENABLE_AUTH_NTLM, test "x$enable_auth_ntlm" != "xno") AC_SUBST(NTLM_AUTH_HELPERS) + +## NTLM requires some special Little-Endian conversion hacks +if test "x$enable_auth_ntlm" != "xno"; then + AC_CHECK_HEADERS(machine/byte_swap.h sys/bswap.h endian.h sys/endian.h) + AC_CHECK_FUNCS( + bswap_16 bswap16 \ + bswap_32 bswap32 \ + htole16 __htole16 \ + htole32 __htole32 \ + le16toh __le16toh \ + le32toh __le32toh \ + ) +fi === modified file 'lib/ntlmauth/Makefile.am' --- lib/ntlmauth/Makefile.am 2014-09-02 01:08:58 +0000 +++ lib/ntlmauth/Makefile.am 2014-11-21 09:31:55 +0000 @@ -15,4 +15,5 @@ libntlmauth_la_SOURCES = \ ntlmauth.cc \ ntlmauth.h \ - support_bits.cci + support_bits.cci \ + support_endian.h === modified file 'lib/ntlmauth/ntlmauth.h' --- lib/ntlmauth/ntlmauth.h 2014-09-02 01:08:58 +0000 +++ lib/ntlmauth/ntlmauth.h 2014-11-21 09:31:55 +0000 @@ -10,6 +10,8 @@ #define SQUID_NTLMAUTH_H /* NP: All of this cruft is little endian */ +/* Endian functions are usualy handled by the OS but not always. */ +#include "ntlmauth/support_endian.h" #ifdef __cplusplus extern "C" { === renamed file 'include/squid_endian.h' => 'lib/ntlmauth/support_endian.h' --- include/squid_endian.h 2014-09-02 01:08:58 +0000 +++ lib/ntlmauth/support_endian.h 2014-11-21 09:31:55 +0000 @@ -6,12 +6,24 @@ * Please see the COPYING and CONTRIBUTORS files for details. */ -/* - * AUTHOR: Alan Barrett - */ +#ifndef SQUID_LIB_NTLMAUTH_SUPPORT_ENDIAN_H +#define SQUID_LIB_NTLMAUTH_SUPPORT_ENDIAN_H -#ifndef SQUID_ENDIAN_H -#define SQUID_ENDIAN_H +#if HAVE_BYTESWAP_H +#include +#endif +#if HAVE_MACHINE_BYTE_SWAP_H +#include +#endif +#if HAVE_SYS_BSWAP_H +#include +#endif +#if HAVE_ENDIAN_H +#include +#endif +#if HAVE_SYS_ENDIAN_H +#include +#endif /* * Macros to deal with byte swapping. These macros provide @@ -21,113 +33,63 @@ * uint16_t bswap16(uint16_t); * uint32_t bswap32(uint32_t); * - * // Convert from host byte order to big-endian, and vice versa. - * uint16_t htobe16(uint16_t); // equivalent to htons() - * uint32_t htobe32(uint32_t); // equivalent to htonl() - * uint16_t be16toh(uint16_t); // equivalent to ntohs() - * uint32_t be32toh(uint32_t); // equivalent to ntohs() - * * // Convert from host byte order to little-endian, and vice versa. * uint16_t htole16(uint16_t); * uint32_t htole32(uint32_t); * uint16_t le16toh(uint16_t); * uint32_t le32toh(uint32_t); - */ - -/* - * Some systems define bswap_16() and bswap_32() in - * - * Some systems define bswap16() and bswap32() in . - * - * Some systems define htobe16()/be16toh() and friends in . - */ -#if HAVE_BYTESWAP_H -# include -#endif /* HAVE_BYTESWAP_H */ -#if HAVE_MACHINE_BYTE_SWAP_H -# include -#endif /* HAVE_MACHINE_BYTE_SWAP_H */ -#if HAVE_SYS_BSWAP_H -# include -#endif /* HAVE_SYS_BSWAP_H */ -#if HAVE_SYS_ENDIAN_H -# include -#endif /* HAVE_SYS_ENDIAN_H */ - -/* - * Define bswap16() and bswap32() in terms of bswap_16() and bswap_32(), - * or the hard way. - */ -#if ! HAVE_BSWAP16 && ! defined(bswap16) -# if defined(bswap_16) + * + * XXX: What about unusual byte orders like 3412 or 2143 ? + * Never had any problems reported, so we dont worry about them. + */ + +#if !HAVE_HTOLE16 && !defined(htole16) +/* Define bswap16() in terms of bswap_16() or the hard way. */ +#if !HAVE_BSWAP16 && !defined(bswap16) +# if HAVE_BSWAP_16 || defined(bswap_16) # define bswap16(x) bswap_16(x) -# else +# else // 'hard way' # define bswap16(x) \ (((((uint16_t)(x)) >> 8) & 0xff) | ((((uint16_t)(x)) & 0xff) << 8)) # endif -#endif /* ! HAVE_BSWAP16 && ! defined(bswap16) */ +#endif + +/* Define htole16() in terms of bswap16(). */ +# if defined(WORDS_BIGENDIAN) +# define htole16(x) bswap16(x) +# else +# define htole16(x) (x) +# endif +#endif + +#if !HAVE_HTOLE32 && !defined(htole32) #if ! HAVE_BSWAP32 && ! defined(bswap32) -# if defined(bswap_32) +/* Define bswap32() in terms of bswap_32() or the hard way. */ +# if HAVE_BSWAP_32 || defined(bswap_32) # define bswap32(x) bswap_32(x) -# else +# else // 'hard way' # define bswap32(x) \ (((((uint32_t)(x)) & 0xff000000) >> 24) | \ ((((uint32_t)(x)) & 0x00ff0000) >> 8) | \ ((((uint32_t)(x)) & 0x0000ff00) << 8) | \ ((((uint32_t)(x)) & 0x000000ff) << 24)) # endif -#endif /* ! HAVE_BSWAP32 && ! defined(bswap32) */ - -/* - * Define htobe*()/be*toh() in terms of hton*()/ntoh*(). - * - * XXX: If htobe16() is missing, we assume that the other *be*() functions - * are also missing. - */ -#if ! HAVE_HTOBE16 && ! defined(htobe16) -# ifdef WORDS_BIGENDIAN -# define htobe16(x) (x) -# define htobe32(x) (x) -# define be16toh(x) (x) -# define be32toh(x) (x) -# else /* ! WORDS_BIGENDIAN */ -# define htobe16(x) htons(x) -# define htobe32(x) htonl(x) -# define be16toh(x) ntohs(x) -# define be32toh(x) ntohl(x) -# endif /* ! WORDS_BIGENDIAN */ -#endif /* ! HAVE_HTOBE16 && ! defined(htobe16) */ - -/* - * Define htole*()/le*toh() in terms of bswap*(). - * - * XXX: If htole16() is missing, we assume that the other *le*() functions - * are also missing. - * - * Except OpenBSD - htole16 & 32 exist, but not le16toh etc - */ -#if _SQUID_OPENBSD_ -# define le16toh(x) htole16(x) -# define le32toh(x) htole32(x) + +/* Define htole32() in terms of bswap32(). */ #endif - -#if ! HAVE_HTOLE16 && ! defined(htole16) -# ifdef WORDS_BIGENDIAN -# define htole16(x) bswap16(x) +# if defined(WORDS_BIGENDIAN) # define htole32(x) bswap32(x) -# define le16toh(x) bswap16(x) -# define le32toh(x) bswap32(x) -# else /* ! WORDS_BIGENDIAN */ -/* -* XXX: What about unusual byte orders like 3412 or 2143 ? -* Nothing else in squid seems to care about them, -* so we don't worry about them here either. -*/ -# define htole16(x) (x) +# else # define htole32(x) (x) -# define le16toh(x) (x) -# define le32toh(x) (x) -# endif /* ! WORDS_BIGENDIAN */ -#endif /* ! HAVE_HTOLE16 && ! defined(htole16) */ - -#endif /* SQUID_ENDIAN_H */ +# endif +#endif + +/* Define letoh*() in terms of htole*(). The swap is symmetrical. */ +#if !HAVE_LE16TOH && !defined(le16toh) +#define le16toh(x) htole16(x) +#endif +#if !HAVE_LE32TOH && !defined(le32toh) +#define le32toh(x) htole32(x) +#endif + +#endif /* SQUID_LIB_NTLMAUTH_SUPPORT_ENDIAN_H */