From: Amos Jeffries Date: Wed, 3 Dec 2014 11:53:03 +0000 (-0800) Subject: Bug 4145: squid_endian.h compile errors with OpenBSD 5.6 X-Git-Tag: SQUID_3_4_10~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=50e83de3fc22c5022216c5e3a85852741896b39a;p=thirdparty%2Fsquid.git 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. --- diff --git a/compat/compat.h b/compat/compat.h index dde0a5f217..e72ee189fe 100644 --- a/compat/compat.h +++ b/compat/compat.h @@ -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 diff --git a/configure.ac b/configure.ac index f0663d3514..74f558cc8a 100644 --- a/configure.ac +++ b/configure.ac @@ -2251,7 +2251,6 @@ AC_CHECK_HEADERS( \ limits.h \ linux/posix_types.h \ linux/types.h \ - machine/byte_swap.h \ malloc.h \ map \ math.h \ @@ -2290,8 +2289,6 @@ AC_CHECK_HEADERS( \ 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 @@ dnl Check for library functions AC_CHECK_FUNCS(\ backtrace_symbols_fd \ bcopy \ - bswap_16 \ - bswap_32 \ - bswap16 \ - bswap32 \ eui64_aton \ fchmod \ getdtablesize \ @@ -3078,8 +3071,6 @@ AC_CHECK_FUNCS(\ getspnam \ gettimeofday \ glob \ - htobe16 \ - htole16 \ lrand48 \ mallinfo \ mallocblksize \ diff --git a/helpers/ntlm_auth/modules.m4 b/helpers/ntlm_auth/modules.m4 index a62af48551..82da147d21 100644 --- a/helpers/ntlm_auth/modules.m4 +++ b/helpers/ntlm_auth/modules.m4 @@ -59,3 +59,16 @@ fi 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 diff --git a/include/squid_endian.h b/include/squid_endian.h deleted file mode 100644 index 13c8f309ea..0000000000 --- a/include/squid_endian.h +++ /dev/null @@ -1,152 +0,0 @@ -/* - * AUTHOR: Alan Barrett - * - * SQUID Web Proxy Cache http://www.squid-cache.org/ - * ---------------------------------------------------------- - * - * Squid is the result of efforts by numerous individuals from - * the Internet community; see the CONTRIBUTORS file for full - * details. Many organizations have provided support for Squid's - * development; see the SPONSORS file for full details. Squid is - * Copyrighted (C) 2001 by the Regents of the University of - * California; see the COPYRIGHT file for full details. Squid - * incorporates software developed and/or copyrighted by other - * sources; see the CREDITS file for full details. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. - * - */ - -#ifndef SQUID_ENDIAN_H -#define SQUID_ENDIAN_H - -/* - * Macros to deal with byte swapping. These macros provide - * the following interface: - * - * // Byte-swap - * 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) -# define bswap16(x) bswap_16(x) -# else -# define bswap16(x) \ - (((((uint16_t)(x)) >> 8) & 0xff) | ((((uint16_t)(x)) & 0xff) << 8)) -# endif -#endif /* ! HAVE_BSWAP16 && ! defined(bswap16) */ -#if ! HAVE_BSWAP32 && ! defined(bswap32) -# if defined(bswap_32) -# define bswap32(x) bswap_32(x) -# else -# 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) -#endif - -#if ! HAVE_HTOLE16 && ! defined(htole16) -# ifdef WORDS_BIGENDIAN -# define htole16(x) bswap16(x) -# 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) -# define htole32(x) (x) -# define le16toh(x) (x) -# define le32toh(x) (x) -# endif /* ! WORDS_BIGENDIAN */ -#endif /* ! HAVE_HTOLE16 && ! defined(htole16) */ - -#endif /* SQUID_ENDIAN_H */ diff --git a/lib/ntlmauth/Makefile.am b/lib/ntlmauth/Makefile.am index 762f0d9e3e..91ae50fc11 100644 --- a/lib/ntlmauth/Makefile.am +++ b/lib/ntlmauth/Makefile.am @@ -8,4 +8,5 @@ noinst_LTLIBRARIES = libntlmauth.la libntlmauth_la_SOURCES = \ ntlmauth.cc \ ntlmauth.h \ - support_bits.cci + support_bits.cci \ + support_endian.h diff --git a/lib/ntlmauth/ntlmauth.h b/lib/ntlmauth/ntlmauth.h index c47633f163..241253c945 100644 --- a/lib/ntlmauth/ntlmauth.h +++ b/lib/ntlmauth/ntlmauth.h @@ -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" { diff --git a/lib/ntlmauth/support_endian.h b/lib/ntlmauth/support_endian.h new file mode 100644 index 0000000000..2131dd3759 --- /dev/null +++ b/lib/ntlmauth/support_endian.h @@ -0,0 +1,115 @@ +/* + * SQUID Web Proxy Cache http://www.squid-cache.org/ + * ---------------------------------------------------------- + * + * Squid is the result of efforts by numerous individuals from + * the Internet community; see the CONTRIBUTORS file for full + * details. Many organizations have provided support for Squid's + * development; see the SPONSORS file for full details. Squid is + * Copyrighted (C) 2001 by the Regents of the University of + * California; see the COPYRIGHT file for full details. Squid + * incorporates software developed and/or copyrighted by other + * sources; see the CREDITS file for full details. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * 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 + +#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 + * the following interface: + * + * // Byte-swap + * uint16_t bswap16(uint16_t); + * uint32_t bswap32(uint32_t); + * + * // 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); + * + * 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 // 'hard way' +# define bswap16(x) \ + (((((uint16_t)(x)) >> 8) & 0xff) | ((((uint16_t)(x)) & 0xff) << 8)) +# endif +#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) +/* 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 // '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 + +/* Define htole32() in terms of bswap32(). */ +#endif +# if defined(WORDS_BIGENDIAN) +# define htole32(x) bswap32(x) +# else +# define htole32(x) (x) +# 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 */