]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 4145: squid_endian.h compile errors with OpenBSD 5.6
authorAmos Jeffries <squid3@treenet.co.nz>
Wed, 3 Dec 2014 11:53:03 +0000 (03:53 -0800)
committerAmos Jeffries <squid3@treenet.co.nz>
Wed, 3 Dec 2014 11:53:03 +0000 (03:53 -0800)
* 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.

compat/compat.h
configure.ac
helpers/ntlm_auth/modules.m4
include/squid_endian.h [deleted file]
lib/ntlmauth/Makefile.am
lib/ntlmauth/ntlmauth.h
lib/ntlmauth/support_endian.h [new file with mode: 0644]

index dde0a5f217d6cfc39399a02e131cb0e8191dd90f..e72ee189fe04effadaf7a491c4162adab28e0e7f 100644 (file)
@@ -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
index f0663d35144a49de8572a4bedb4a7e23e08a82c1..74f558cc8afa4fcb4013e447b8158267f84fb346 100644 (file)
@@ -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 \
index a62af485517bc73c2a3844da47496f7c9587c1f3..82da147d212ed88c6be28d4b33e3b9f9d27df6b3 100644 (file)
@@ -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 (file)
index 13c8f30..0000000
+++ /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 <byteswap.h>
- *
- * Some systems define bswap16() and bswap32() in <sys/bswap.h>.
- *
- * Some systems define htobe16()/be16toh() and friends in <sys/endian.h>.
- */
-#if HAVE_BYTESWAP_H
-#  include <byteswap.h>
-#endif /* HAVE_BYTESWAP_H */
-#if HAVE_MACHINE_BYTE_SWAP_H
-#  include <machine/byte_swap.h>
-#endif /* HAVE_MACHINE_BYTE_SWAP_H */
-#if HAVE_SYS_BSWAP_H
-#  include <sys/bswap.h>
-#endif /* HAVE_SYS_BSWAP_H */
-#if HAVE_SYS_ENDIAN_H
-#  include <sys/endian.h>
-#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 */
index 762f0d9e3e4d621b9dd25012e9d44224476d19b5..91ae50fc111fb1f6e21f9b52acf34a5fa9b63a67 100644 (file)
@@ -8,4 +8,5 @@ noinst_LTLIBRARIES = libntlmauth.la
 libntlmauth_la_SOURCES = \
        ntlmauth.cc \
        ntlmauth.h \
-       support_bits.cci
+       support_bits.cci \
+       support_endian.h
index c47633f1630f1e9f597a269dcfc7636d468cac55..241253c945e8e534c2fddc3114e825747cb30aa8 100644 (file)
@@ -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 (file)
index 0000000..2131dd3
--- /dev/null
@@ -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 <byteswap.h>
+#endif
+#if HAVE_MACHINE_BYTE_SWAP_H
+#include <machine/byte_swap.h>
+#endif
+#if HAVE_SYS_BSWAP_H
+#include <sys/bswap.h>
+#endif
+#if HAVE_ENDIAN_H
+#include <endian.h>
+#endif
+#if HAVE_SYS_ENDIAN_H
+#include <sys/endian.h>
+#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 */