------------------------------------------------------------ revno: 13189 revision-id: squid3@treenet.co.nz-20141203115303-e0ftfsbvvzzcndg3 parent: squid3@treenet.co.nz-20141113081906-80ipwnow6uscfk8a fixes bug: http://bugs.squid-cache.org/show_bug.cgi?id=4145 committer: Amos Jeffries branch nick: 3.4 timestamp: Wed 2014-12-03 03:53:03 -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-20141203115303-e0ftfsbvvzzcndg3 # target_branch: http://bzr.squid-cache.org/bzr/squid3/3.4 # testament_sha1: 9647dab84b652a8ca8731e3516afb384cdf3fd77 # timestamp: 2014-12-03 11:54:07 +0000 # source_branch: http://bzr.squid-cache.org/bzr/squid3/3.4 # base_revision_id: squid3@treenet.co.nz-20141113081906-\ # 80ipwnow6uscfk8a # # Begin patch === modified file 'compat/compat.h' --- compat/compat.h 2014-04-23 05:09:22 +0000 +++ compat/compat.h 2014-12-03 11:53:03 +0000 @@ -94,9 +94,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 09:21:51 +0000 +++ configure.ac 2014-12-03 11:53:03 +0000 @@ -2251,7 +2251,6 @@ limits.h \ linux/posix_types.h \ linux/types.h \ - machine/byte_swap.h \ malloc.h \ map \ math.h \ @@ -2290,8 +2289,6 @@ string.h \ strings.h \ sys/bitypes.h \ - sys/bswap.h \ - sys/endian.h \ sys/file.h \ sys/ioctl.h \ sys/ipc.cc \ @@ -3064,10 +3061,6 @@ AC_CHECK_FUNCS(\ backtrace_symbols_fd \ bcopy \ - bswap_16 \ - bswap_32 \ - bswap16 \ - bswap32 \ eui64_aton \ fchmod \ getdtablesize \ @@ -3078,8 +3071,6 @@ getspnam \ gettimeofday \ glob \ - htobe16 \ - htole16 \ lrand48 \ mallinfo \ mallocblksize \ === modified file 'helpers/ntlm_auth/modules.m4' --- helpers/ntlm_auth/modules.m4 2013-05-04 06:34:24 +0000 +++ helpers/ntlm_auth/modules.m4 2014-12-03 11:53:03 +0000 @@ -59,3 +59,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 2010-10-16 23:19:46 +0000 +++ lib/ntlmauth/Makefile.am 2014-12-03 11:53:03 +0000 @@ -8,4 +8,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 2012-09-01 14:38:36 +0000 +++ lib/ntlmauth/ntlmauth.h 2014-12-03 11:53:03 +0000 @@ -54,6 +54,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 2012-09-01 14:38:36 +0000 +++ lib/ntlmauth/support_endian.h 2014-12-03 11:53:03 +0000 @@ -1,6 +1,4 @@ /* - * AUTHOR: Alan Barrett - * * SQUID Web Proxy Cache http://www.squid-cache.org/ * ---------------------------------------------------------- * @@ -28,9 +26,24 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. * */ +#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 @@ -40,113 +53,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 */