diff -u -r -N squid-5.0.5/acinclude/lib-checks.m4 squid-5.0.6/acinclude/lib-checks.m4 --- squid-5.0.5/acinclude/lib-checks.m4 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/acinclude/lib-checks.m4 2021-05-10 21:02:34.000000000 +1200 @@ -71,10 +71,13 @@ AH_TEMPLATE(HAVE_LIBCRYPTO_X509_STORE_CTX_GET0_CERT, "Define to 1 if the X509_STORE_CTX_get0_cert() OpenSSL API function exists") AH_TEMPLATE(HAVE_LIBCRYPTO_X509_VERIFY_PARAM_GET_DEPTH, "Define to 1 if the X509_VERIFY_PARAM_get_depth() OpenSSL API function exists") AH_TEMPLATE(HAVE_LIBCRYPTO_X509_STORE_CTX_GET0_UNTRUSTED, "Define to 1 if the X509_STORE_CTX_get0_untrusted() OpenSSL API function exists") + AH_TEMPLATE(HAVE_X509_VERIFY_PARAM_SET_AUTH_LEVEL, "Define to 1 if the X509_VERIFY_PARAM_set_auth_level() OpenSSL API function exists") AH_TEMPLATE(HAVE_LIBCRYPTO_X509_UP_REF, "Define to 1 if the X509_up_ref() OpenSSL API function exists") + AH_TEMPLATE(HAVE_LIBCRYPTO_X509_CHAIN_UP_REF, "Define to 1 if the X509_chain_up_ref() OpenSSL API function exists") AH_TEMPLATE(HAVE_LIBCRYPTO_X509_CRL_UP_REF, "Define to 1 if the X509_CRL_up_ref() OpenSSL API function exists") AH_TEMPLATE(HAVE_LIBCRYPTO_DH_UP_REF, "Define to 1 if the DH_up_ref() OpenSSL API function exists") AH_TEMPLATE(HAVE_LIBCRYPTO_X509_GET0_SIGNATURE, "Define to 1 if the X509_get0_signature() OpenSSL API function exists") + AH_TEMPLATE(HAVE_SSL_GET0_PARAM, "Define to 1 of the SSL_get0_param() OpenSSL API function exists") SQUID_STATE_SAVE(check_openssl_libcrypto_api) LIBS="$LIBS $SSLLIB" AC_CHECK_LIB(crypto, OPENSSL_LH_strhash, AC_DEFINE(HAVE_LIBCRYPTO_OPENSSL_LH_STRHASH, 1)) @@ -87,10 +90,13 @@ AC_CHECK_LIB(crypto, X509_STORE_CTX_get0_cert, AC_DEFINE(HAVE_LIBCRYPTO_X509_STORE_CTX_GET0_CERT, 1)) AC_CHECK_LIB(crypto, X509_VERIFY_PARAM_get_depth, AC_DEFINE(HAVE_LIBCRYPTO_X509_VERIFY_PARAM_GET_DEPTH, 1)) AC_CHECK_LIB(crypto, X509_STORE_CTX_get0_untrusted, AC_DEFINE(HAVE_LIBCRYPTO_X509_STORE_CTX_GET0_UNTRUSTED, 1)) + AC_CHECK_LIB(crypto, X509_VERIFY_PARAM_set_auth_level, AC_DEFINE(HAVE_X509_VERIFY_PARAM_SET_AUTH_LEVEL)) AC_CHECK_LIB(crypto, X509_up_ref, AC_DEFINE(HAVE_LIBCRYPTO_X509_UP_REF, 1)) + AC_CHECK_LIB(crypto, X509_chain_up_ref, AC_DEFINE(HAVE_LIBCRYPTO_X509_CHAIN_UP_REF, 1)) AC_CHECK_LIB(crypto, X509_CRL_up_ref, AC_DEFINE(HAVE_LIBCRYPTO_X509_CRL_UP_REF, 1)) AC_CHECK_LIB(crypto, DH_up_ref, AC_DEFINE(HAVE_LIBCRYPTO_DH_UP_REF, 1)) AC_CHECK_LIB(crypto, X509_get0_signature, AC_DEFINE(HAVE_LIBCRYPTO_X509_GET0_SIGNATURE, 1), AC_DEFINE(SQUID_CONST_X509_GET0_SIGNATURE_ARGS,)) + AC_CHECK_LIB(crypto, SSL_get0_param, AC_DEFINE(HAVE_SSL_GET0_PARAM, 1)) SQUID_STATE_ROLLBACK(check_openssl_libcrypto_api) ]) diff -u -r -N squid-5.0.5/acinclude/os-deps.m4 squid-5.0.6/acinclude/os-deps.m4 --- squid-5.0.5/acinclude/os-deps.m4 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/acinclude/os-deps.m4 2021-05-10 21:02:34.000000000 +1200 @@ -792,6 +792,7 @@ AC_CACHE_CHECK([for operational CPU clock access], squid_cv_cpu_profiler_works, AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ +#include #if defined(__GNUC__) && ( defined(__i386) || defined(__i386__) ) // okay #elif defined(__GNUC__) && ( defined(__x86_64) || defined(__x86_64__) ) @@ -800,6 +801,8 @@ // okay #elif defined(_M_IX86) && defined(_MSC_VER) /* x86 platform on Microsoft C Compiler ONLY */ // okay +#elif defined(HAVE_CLOCK_GETTIME_NSEC_NP) && defined(CLOCK_MONOTONIC_RAW) +// okay #else #error This CPU is unsupported. No profiling available here. #endif diff -u -r -N squid-5.0.5/ChangeLog squid-5.0.6/ChangeLog --- squid-5.0.5/ChangeLog 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/ChangeLog 2021-05-10 21:02:34.000000000 +1200 @@ -1,3 +1,18 @@ +Changes in squid-5.0.6 (10 May 2021): + + - Bug 5057: Generated response lacks status code + - TLS: Handling missing issuer certificates for TLSv1.3 + - TLS: Detail certificate validation errors during TLS handshake + - TLS: Detail client closures of CONNECT tunnels during TLS handshake + - TLS: %ssl::negotiated_version for TLS/1.3 + - HTTP: Allow 1xx and 204 responses with Transfer-Encoding headers + - Maintenance: Start following Inclusive Naming Initiative advice + - Maintenance: Sort source file lists in Makefiles + - Maintenance: Support plugin-style scripts for source format enforcement + - Cleanup: Deduplicating IPC strand messages + - ... and some compile and debugging fixes + - ... and all fixes from 4.15 + Changes in squid-5.0.5 (02 Feb 2021): - HTTP: Do not send Connection:keep-alive/close in HTTP Upgrade requests @@ -90,6 +105,22 @@ - ... and much code cleanup and polishing - ... and all fixes from 4.10 +Changes in squid-4.15 (10 May 2021): + + - Bug 5112: Excessively loud chunked reply parsing error reporting + - Bug 5106: Broken cache manager URL parsing + - Bug 5104: Memory leak in RFC 2169 response parsing + - Bug 3556: "FD ... is not an open socket" for accept() problems + - Profiling: CPU timing implemented for MAC non-x86 + - Fix HttpHeaderStats definition to include hoErrorDetail + - Fix Squid-to-client write_timeout triggers client_lifetime timeout + - Limit HeaderLookupTable_t::lookup() to BadHdr and specific IDs + - Handle more Range requests + - Handle more partial responses + - Stop processing a response if the Store entry is gone + - ... and some portability fixes + - ... and some documentation updates + Changes in squid-4.14 (02 Feb 2021): - Regression Fix: support for non-lowercase Transfer-Encoding value diff -u -r -N squid-5.0.5/compat/Makefile.am squid-5.0.6/compat/Makefile.am --- squid-5.0.5/compat/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/compat/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -16,25 +16,25 @@ noinst_LTLIBRARIES = libcompatsquid.la libcompatsquid_la_SOURCES = \ + GnuRegex.c \ + GnuRegex.h \ assert.cc \ assert.h \ cmsg.h \ compat.cc \ compat.h \ compat_shared.h \ - cpu.h \ cppunit.h \ + cpu.h \ debug.cc \ debug.h \ - eui64_aton.h \ eui64_aton.c \ + eui64_aton.h \ fdsetsize.h \ getaddrinfo.cc \ getaddrinfo.h \ getnameinfo.cc \ getnameinfo.h \ - GnuRegex.c \ - GnuRegex.h \ inet_ntop.cc \ inet_ntop.h \ inet_pton.cc \ @@ -42,19 +42,37 @@ initgroups.h \ memrchr.cc \ memrchr.h \ + mswindows.cc \ openssl.h \ + os/aix.h \ + os/android.h \ + os/dragonfly.h \ + os/freebsd.h \ + os/hpux.h \ + os/linux.h \ + os/macosx.h \ + os/mswindows.h \ + os/netbsd.h \ + os/next.h \ + os/openbsd.h \ + os/opensolaris_10_netdb.h \ + os/os2.h \ + os/qnx.h \ + os/sgi.h \ + os/solaris.h \ + os/sunos.h \ osdetect.h \ psignal.h \ shm.cc \ shm.h \ - statvfs.h \ statvfs.cc \ + statvfs.h \ stdio.h \ stdvarargs.h \ + strnrchr.c \ + strnrchr.h \ strnstr.cc \ strtoll.h \ - strnrchr.h \ - strnrchr.c \ tempnam.h \ types.h \ valgrind.h \ @@ -66,35 +84,16 @@ xstring.cc \ xstring.h \ xstrto.cc \ - xstrto.h \ - \ - os/aix.h \ - os/android.h \ - os/dragonfly.h \ - os/freebsd.h \ - os/hpux.h \ - os/linux.h \ - os/macosx.h \ - os/mswindows.h \ - mswindows.cc \ - os/netbsd.h \ - os/next.h \ - os/openbsd.h \ - os/opensolaris_10_netdb.h \ - os/os2.h \ - os/qnx.h \ - os/sgi.h \ - os/solaris.h \ - os/sunos.h + xstrto.h libcompatsquid_la_LIBADD= $(LTLIBOBJS) check_PROGRAMS += testPreCompiler TESTS += testPreCompiler -testPreCompiler_SOURCES= \ - testPreCompiler.h \ - testPreCompiler.cc +testPreCompiler_SOURCES = \ + testPreCompiler.cc \ + testPreCompiler.h testPreCompiler_LDADD= $(LIBCPPUNIT_LIBS) testPreCompiler_LDFLAGS= diff -u -r -N squid-5.0.5/compat/Makefile.in squid-5.0.6/compat/Makefile.in --- squid-5.0.5/compat/Makefile.in 2021-02-08 13:40:44.000000000 +1300 +++ squid-5.0.6/compat/Makefile.in 2021-05-10 22:57:52.000000000 +1200 @@ -169,11 +169,11 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libcompatsquid_la_DEPENDENCIES = $(LTLIBOBJS) -am_libcompatsquid_la_OBJECTS = assert.lo compat.lo debug.lo \ - eui64_aton.lo getaddrinfo.lo getnameinfo.lo GnuRegex.lo \ - inet_ntop.lo inet_pton.lo memrchr.lo shm.lo statvfs.lo \ - strnstr.lo strnrchr.lo xalloc.lo xstrerror.lo xstring.lo \ - xstrto.lo mswindows.lo +am_libcompatsquid_la_OBJECTS = GnuRegex.lo assert.lo compat.lo \ + debug.lo eui64_aton.lo getaddrinfo.lo getnameinfo.lo \ + inet_ntop.lo inet_pton.lo memrchr.lo mswindows.lo shm.lo \ + statvfs.lo strnrchr.lo strnstr.lo xalloc.lo xstrerror.lo \ + xstring.lo xstrto.lo libcompatsquid_la_OBJECTS = $(am_libcompatsquid_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -760,25 +760,25 @@ # Port Specific Configurations noinst_LTLIBRARIES = libcompatsquid.la libcompatsquid_la_SOURCES = \ + GnuRegex.c \ + GnuRegex.h \ assert.cc \ assert.h \ cmsg.h \ compat.cc \ compat.h \ compat_shared.h \ - cpu.h \ cppunit.h \ + cpu.h \ debug.cc \ debug.h \ - eui64_aton.h \ eui64_aton.c \ + eui64_aton.h \ fdsetsize.h \ getaddrinfo.cc \ getaddrinfo.h \ getnameinfo.cc \ getnameinfo.h \ - GnuRegex.c \ - GnuRegex.h \ inet_ntop.cc \ inet_ntop.h \ inet_pton.cc \ @@ -786,19 +786,37 @@ initgroups.h \ memrchr.cc \ memrchr.h \ + mswindows.cc \ openssl.h \ + os/aix.h \ + os/android.h \ + os/dragonfly.h \ + os/freebsd.h \ + os/hpux.h \ + os/linux.h \ + os/macosx.h \ + os/mswindows.h \ + os/netbsd.h \ + os/next.h \ + os/openbsd.h \ + os/opensolaris_10_netdb.h \ + os/os2.h \ + os/qnx.h \ + os/sgi.h \ + os/solaris.h \ + os/sunos.h \ osdetect.h \ psignal.h \ shm.cc \ shm.h \ - statvfs.h \ statvfs.cc \ + statvfs.h \ stdio.h \ stdvarargs.h \ + strnrchr.c \ + strnrchr.h \ strnstr.cc \ strtoll.h \ - strnrchr.h \ - strnrchr.c \ tempnam.h \ types.h \ valgrind.h \ @@ -810,31 +828,12 @@ xstring.cc \ xstring.h \ xstrto.cc \ - xstrto.h \ - \ - os/aix.h \ - os/android.h \ - os/dragonfly.h \ - os/freebsd.h \ - os/hpux.h \ - os/linux.h \ - os/macosx.h \ - os/mswindows.h \ - mswindows.cc \ - os/netbsd.h \ - os/next.h \ - os/openbsd.h \ - os/opensolaris_10_netdb.h \ - os/os2.h \ - os/qnx.h \ - os/sgi.h \ - os/solaris.h \ - os/sunos.h + xstrto.h libcompatsquid_la_LIBADD = $(LTLIBOBJS) testPreCompiler_SOURCES = \ - testPreCompiler.h \ - testPreCompiler.cc + testPreCompiler.cc \ + testPreCompiler.h testPreCompiler_LDADD = $(LIBCPPUNIT_LIBS) testPreCompiler_LDFLAGS = diff -u -r -N squid-5.0.5/compat/openssl.h squid-5.0.6/compat/openssl.h --- squid-5.0.5/compat/openssl.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/compat/openssl.h 2021-05-10 21:02:34.000000000 +1200 @@ -222,6 +222,29 @@ #endif /* CRYPTO_LOCK_X509 */ #endif /* X509_up_ref */ +#if !HAVE_LIBCRYPTO_X509_CHAIN_UP_REF + inline STACK_OF(X509) * + X509_chain_up_ref(STACK_OF(X509) *chain) + { + if (STACK_OF(X509) *newChain = sk_X509_dup(chain)) { + bool error = false; + int i; + for (i = 0; !error && i < sk_X509_num(newChain); i++) { + X509 *cert = sk_X509_value(newChain, i); + if (!X509_up_ref(cert)) + error = true; + } + if (!error) + return newChain; + + for (int k = 0; k < i; k++) + X509_free(sk_X509_value(newChain, k)); + sk_X509_free(newChain); + } + return nullptr; + } +#endif /* X509_chain_up_ref */ + #if !HAVE_LIBCRYPTO_X509_VERIFY_PARAM_GET_DEPTH inline int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param) @@ -230,6 +253,13 @@ } #endif +#if !HAVE_SSL_GET0_PARAM + inline X509_VERIFY_PARAM * + SSL_get0_param(SSL *ssl) + { + return ssl->param; + } +#endif } /* extern "C" */ inline void diff -u -r -N squid-5.0.5/configure squid-5.0.6/configure --- squid-5.0.5/configure 2021-02-08 13:40:49.000000000 +1300 +++ squid-5.0.6/configure 2021-05-10 22:57:57.000000000 +1200 @@ -1,7 +1,7 @@ #! /bin/sh # From configure.ac Revision. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for Squid Web Proxy 5.0.5. +# Generated by GNU Autoconf 2.69 for Squid Web Proxy 5.0.6. # # Report bugs to . # @@ -595,8 +595,8 @@ # Identity of this package. PACKAGE_NAME='Squid Web Proxy' PACKAGE_TARNAME='squid' -PACKAGE_VERSION='5.0.5' -PACKAGE_STRING='Squid Web Proxy 5.0.5' +PACKAGE_VERSION='5.0.6' +PACKAGE_STRING='Squid Web Proxy 5.0.6' PACKAGE_BUGREPORT='http://bugs.squid-cache.org/' PACKAGE_URL='' @@ -1662,7 +1662,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Squid Web Proxy 5.0.5 to adapt to many kinds of systems. +\`configure' configures Squid Web Proxy 5.0.6 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1733,7 +1733,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Squid Web Proxy 5.0.5:";; + short | recursive ) echo "Configuration of Squid Web Proxy 5.0.6:";; esac cat <<\_ACEOF @@ -2166,7 +2166,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Squid Web Proxy configure 5.0.5 +Squid Web Proxy configure 5.0.6 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -3270,7 +3270,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Squid Web Proxy $as_me 5.0.5, which was +It was created by Squid Web Proxy $as_me 5.0.6, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4132,7 +4132,7 @@ # Define the identity of the package. PACKAGE='squid' - VERSION='5.0.5' + VERSION='5.0.6' cat >>confdefs.h <<_ACEOF @@ -24254,6 +24254,9 @@ + + + # save state, key is check_openssl_libcrypto_api check_openssl_libcrypto_api_CFLAGS="${CFLAGS}" check_openssl_libcrypto_api_CXXFLAGS="${CXXFLAGS}" @@ -24680,6 +24683,47 @@ fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X509_VERIFY_PARAM_set_auth_level in -lcrypto" >&5 +$as_echo_n "checking for X509_VERIFY_PARAM_set_auth_level in -lcrypto... " >&6; } +if ${ac_cv_lib_crypto_X509_VERIFY_PARAM_set_auth_level+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcrypto $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char X509_VERIFY_PARAM_set_auth_level (); +int +main () +{ +return X509_VERIFY_PARAM_set_auth_level (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_crypto_X509_VERIFY_PARAM_set_auth_level=yes +else + ac_cv_lib_crypto_X509_VERIFY_PARAM_set_auth_level=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_X509_VERIFY_PARAM_set_auth_level" >&5 +$as_echo "$ac_cv_lib_crypto_X509_VERIFY_PARAM_set_auth_level" >&6; } +if test "x$ac_cv_lib_crypto_X509_VERIFY_PARAM_set_auth_level" = xyes; then : + $as_echo "#define HAVE_X509_VERIFY_PARAM_SET_AUTH_LEVEL 1" >>confdefs.h + +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X509_up_ref in -lcrypto" >&5 $as_echo_n "checking for X509_up_ref in -lcrypto... " >&6; } if ${ac_cv_lib_crypto_X509_up_ref+:} false; then : @@ -24721,6 +24765,47 @@ fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X509_chain_up_ref in -lcrypto" >&5 +$as_echo_n "checking for X509_chain_up_ref in -lcrypto... " >&6; } +if ${ac_cv_lib_crypto_X509_chain_up_ref+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcrypto $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char X509_chain_up_ref (); +int +main () +{ +return X509_chain_up_ref (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_crypto_X509_chain_up_ref=yes +else + ac_cv_lib_crypto_X509_chain_up_ref=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_X509_chain_up_ref" >&5 +$as_echo "$ac_cv_lib_crypto_X509_chain_up_ref" >&6; } +if test "x$ac_cv_lib_crypto_X509_chain_up_ref" = xyes; then : + $as_echo "#define HAVE_LIBCRYPTO_X509_CHAIN_UP_REF 1" >>confdefs.h + +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X509_CRL_up_ref in -lcrypto" >&5 $as_echo_n "checking for X509_CRL_up_ref in -lcrypto... " >&6; } if ${ac_cv_lib_crypto_X509_CRL_up_ref+:} false; then : @@ -24847,6 +24932,47 @@ fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL_get0_param in -lcrypto" >&5 +$as_echo_n "checking for SSL_get0_param in -lcrypto... " >&6; } +if ${ac_cv_lib_crypto_SSL_get0_param+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcrypto $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char SSL_get0_param (); +int +main () +{ +return SSL_get0_param (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_crypto_SSL_get0_param=yes +else + ac_cv_lib_crypto_SSL_get0_param=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_SSL_get0_param" >&5 +$as_echo "$ac_cv_lib_crypto_SSL_get0_param" >&6; } +if test "x$ac_cv_lib_crypto_SSL_get0_param" = xyes; then : + $as_echo "#define HAVE_SSL_GET0_PARAM 1" >>confdefs.h + +fi + # rollback state, key is check_openssl_libcrypto_api CFLAGS="${check_openssl_libcrypto_api_CFLAGS}" @@ -37760,6 +37886,17 @@ # Default OFF. This is a debug feature. Only check and enable if forced ON. if test "x$enable_cpu_profiling" = "xyes"; then + for ac_func in clock_gettime_nsec_np +do : + ac_fn_cxx_check_func "$LINENO" "clock_gettime_nsec_np" "ac_cv_func_clock_gettime_nsec_np" +if test "x$ac_cv_func_clock_gettime_nsec_np" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_CLOCK_GETTIME_NSEC_NP 1 +_ACEOF + +fi +done + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for operational CPU clock access" >&5 $as_echo_n "checking for operational CPU clock access... " >&6; } @@ -37769,6 +37906,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include #if defined(__GNUC__) && ( defined(__i386) || defined(__i386__) ) // okay #elif defined(__GNUC__) && ( defined(__x86_64) || defined(__x86_64__) ) @@ -37777,6 +37915,8 @@ // okay #elif defined(_M_IX86) && defined(_MSC_VER) /* x86 platform on Microsoft C Compiler ONLY */ // okay +#elif defined(HAVE_CLOCK_GETTIME_NSEC_NP) && defined(CLOCK_MONOTONIC_RAW) +// okay #else #error This CPU is unsupported. No profiling available here. #endif @@ -44207,7 +44347,7 @@ rm -f core -ac_config_files="$ac_config_files Makefile compat/Makefile contrib/Makefile doc/Makefile doc/manuals/Makefile doc/release-notes/Makefile errors/Makefile icons/Makefile lib/Makefile lib/libTrie/Makefile lib/libTrie/test/Makefile lib/ntlmauth/Makefile lib/profiler/Makefile lib/rfcnb/Makefile lib/smblib/Makefile lib/snmplib/Makefile scripts/Makefile src/Makefile src/acl/Makefile src/acl/external/Makefile src/acl/external/AD_group/Makefile src/acl/external/delayer/Makefile src/acl/external/eDirectory_userip/Makefile src/acl/external/file_userip/Makefile src/acl/external/kerberos_ldap_group/Makefile src/acl/external/kerberos_sid_group/Makefile src/acl/external/LDAP_group/Makefile src/acl/external/LM_group/Makefile src/acl/external/session/Makefile src/acl/external/SQL_session/Makefile src/acl/external/unix_group/Makefile src/acl/external/wbinfo_group/Makefile src/acl/external/time_quota/Makefile src/adaptation/Makefile src/adaptation/icap/Makefile src/adaptation/ecap/Makefile src/anyp/Makefile src/auth/Makefile src/auth/basic/Makefile src/auth/basic/DB/Makefile src/auth/basic/fake/Makefile src/auth/basic/getpwnam/Makefile src/auth/basic/LDAP/Makefile src/auth/basic/NCSA/Makefile src/auth/basic/NIS/Makefile src/auth/basic/PAM/Makefile src/auth/basic/POP3/Makefile src/auth/basic/RADIUS/Makefile src/auth/basic/SASL/Makefile src/auth/basic/SMB/Makefile src/auth/basic/SMB_LM/Makefile src/auth/basic/SSPI/Makefile src/auth/digest/Makefile src/auth/digest/eDirectory/Makefile src/auth/digest/file/Makefile src/auth/digest/LDAP/Makefile src/auth/negotiate/Makefile src/auth/negotiate/kerberos/Makefile src/auth/negotiate/SSPI/Makefile src/auth/negotiate/wrapper/Makefile src/auth/ntlm/Makefile src/auth/ntlm/fake/Makefile src/auth/ntlm/SMB_LM/Makefile src/auth/ntlm/SSPI/Makefile src/base/Makefile src/clients/Makefile src/comm/Makefile src/dns/Makefile src/DiskIO/Makefile src/DiskIO/AIO/Makefile src/DiskIO/Blocking/Makefile src/DiskIO/DiskDaemon/Makefile src/DiskIO/DiskThreads/Makefile src/DiskIO/IpcIo/Makefile src/DiskIO/Mmapped/Makefile src/esi/Makefile src/eui/Makefile src/format/Makefile src/fs/Makefile src/ftp/Makefile src/helper/Makefile src/http/Makefile src/http/one/Makefile src/http/url_rewriters/Makefile src/http/url_rewriters/fake/Makefile src/http/url_rewriters/LFS/Makefile src/icmp/Makefile src/ident/Makefile src/ip/Makefile src/ipc/Makefile src/log/Makefile src/log/DB/Makefile src/log/file/Makefile src/mem/Makefile src/mgr/Makefile src/parser/Makefile src/proxyp/Makefile src/repl/Makefile src/sbuf/Makefile src/security/Makefile src/security/cert_generators/Makefile src/security/cert_generators/file/Makefile src/security/cert_validators/Makefile src/security/cert_validators/fake/Makefile src/servers/Makefile src/snmp/Makefile src/ssl/Makefile src/store/Makefile src/store/id_rewriters/Makefile src/store/id_rewriters/file/Makefile test-suite/Makefile tools/Makefile tools/apparmor/Makefile tools/helper-mux/Makefile tools/purge/Makefile tools/squidclient/Makefile tools/systemd/Makefile tools/sysvinit/Makefile" +ac_config_files="$ac_config_files Makefile compat/Makefile contrib/Makefile doc/Makefile doc/manuals/Makefile doc/release-notes/Makefile errors/Makefile icons/Makefile lib/Makefile lib/libTrie/Makefile lib/libTrie/test/Makefile lib/ntlmauth/Makefile lib/profiler/Makefile lib/rfcnb/Makefile lib/smblib/Makefile lib/snmplib/Makefile scripts/Makefile src/Makefile src/acl/Makefile src/acl/external/Makefile src/acl/external/AD_group/Makefile src/acl/external/delayer/Makefile src/acl/external/eDirectory_userip/Makefile src/acl/external/file_userip/Makefile src/acl/external/kerberos_ldap_group/Makefile src/acl/external/kerberos_sid_group/Makefile src/acl/external/LDAP_group/Makefile src/acl/external/LM_group/Makefile src/acl/external/session/Makefile src/acl/external/SQL_session/Makefile src/acl/external/unix_group/Makefile src/acl/external/wbinfo_group/Makefile src/acl/external/time_quota/Makefile src/adaptation/Makefile src/adaptation/icap/Makefile src/adaptation/ecap/Makefile src/anyp/Makefile src/auth/Makefile src/auth/basic/Makefile src/auth/basic/DB/Makefile src/auth/basic/fake/Makefile src/auth/basic/getpwnam/Makefile src/auth/basic/LDAP/Makefile src/auth/basic/NCSA/Makefile src/auth/basic/NIS/Makefile src/auth/basic/PAM/Makefile src/auth/basic/POP3/Makefile src/auth/basic/RADIUS/Makefile src/auth/basic/SASL/Makefile src/auth/basic/SMB/Makefile src/auth/basic/SMB_LM/Makefile src/auth/basic/SSPI/Makefile src/auth/digest/Makefile src/auth/digest/eDirectory/Makefile src/auth/digest/file/Makefile src/auth/digest/LDAP/Makefile src/auth/negotiate/Makefile src/auth/negotiate/kerberos/Makefile src/auth/negotiate/SSPI/Makefile src/auth/negotiate/wrapper/Makefile src/auth/ntlm/Makefile src/auth/ntlm/fake/Makefile src/auth/ntlm/SMB_LM/Makefile src/auth/ntlm/SSPI/Makefile src/base/Makefile src/clients/Makefile src/comm/Makefile src/dns/Makefile src/DiskIO/Makefile src/DiskIO/AIO/Makefile src/DiskIO/Blocking/Makefile src/DiskIO/DiskDaemon/Makefile src/DiskIO/DiskThreads/Makefile src/DiskIO/IpcIo/Makefile src/DiskIO/Mmapped/Makefile src/error/Makefile src/esi/Makefile src/eui/Makefile src/format/Makefile src/fs/Makefile src/ftp/Makefile src/helper/Makefile src/http/Makefile src/http/one/Makefile src/http/url_rewriters/Makefile src/http/url_rewriters/fake/Makefile src/http/url_rewriters/LFS/Makefile src/icmp/Makefile src/ident/Makefile src/ip/Makefile src/ipc/Makefile src/log/Makefile src/log/DB/Makefile src/log/file/Makefile src/mem/Makefile src/mgr/Makefile src/parser/Makefile src/proxyp/Makefile src/repl/Makefile src/sbuf/Makefile src/security/Makefile src/security/cert_generators/Makefile src/security/cert_generators/file/Makefile src/security/cert_validators/Makefile src/security/cert_validators/fake/Makefile src/servers/Makefile src/snmp/Makefile src/ssl/Makefile src/store/Makefile src/store/id_rewriters/Makefile src/store/id_rewriters/file/Makefile test-suite/Makefile tools/Makefile tools/apparmor/Makefile tools/helper-mux/Makefile tools/purge/Makefile tools/squidclient/Makefile tools/systemd/Makefile tools/sysvinit/Makefile" # must configure libltdl subdir unconditionally for "make distcheck" to work @@ -44953,7 +45093,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Squid Web Proxy $as_me 5.0.5, which was +This file was extended by Squid Web Proxy $as_me 5.0.6, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -45019,7 +45159,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -Squid Web Proxy config.status 5.0.5 +Squid Web Proxy config.status 5.0.6 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -45607,6 +45747,7 @@ "src/DiskIO/DiskThreads/Makefile") CONFIG_FILES="$CONFIG_FILES src/DiskIO/DiskThreads/Makefile" ;; "src/DiskIO/IpcIo/Makefile") CONFIG_FILES="$CONFIG_FILES src/DiskIO/IpcIo/Makefile" ;; "src/DiskIO/Mmapped/Makefile") CONFIG_FILES="$CONFIG_FILES src/DiskIO/Mmapped/Makefile" ;; + "src/error/Makefile") CONFIG_FILES="$CONFIG_FILES src/error/Makefile" ;; "src/esi/Makefile") CONFIG_FILES="$CONFIG_FILES src/esi/Makefile" ;; "src/eui/Makefile") CONFIG_FILES="$CONFIG_FILES src/eui/Makefile" ;; "src/format/Makefile") CONFIG_FILES="$CONFIG_FILES src/format/Makefile" ;; diff -u -r -N squid-5.0.5/configure.ac squid-5.0.6/configure.ac --- squid-5.0.5/configure.ac 2021-02-08 13:40:49.000000000 +1300 +++ squid-5.0.6/configure.ac 2021-05-10 22:57:57.000000000 +1200 @@ -5,7 +5,7 @@ ## Please see the COPYING and CONTRIBUTORS files for details. ## -AC_INIT([Squid Web Proxy],[5.0.5],[http://bugs.squid-cache.org/],[squid]) +AC_INIT([Squid Web Proxy],[5.0.6],[http://bugs.squid-cache.org/],[squid]) AC_PREREQ(2.61) AC_CONFIG_HEADERS([include/autoconf.h]) AC_CONFIG_AUX_DIR(cfgaux) @@ -2779,6 +2779,7 @@ ]) # Default OFF. This is a debug feature. Only check and enable if forced ON. if test "x$enable_cpu_profiling" = "xyes"; then + AC_CHECK_FUNCS(clock_gettime_nsec_np) SQUID_CHECK_FUNCTIONAL_CPU_PROFILER if test "x$squid_cv_cpu_profiler_works" = "xno"; then AC_MSG_ERROR([CPU profiling will not be functional in this build.]) @@ -3900,6 +3901,7 @@ src/DiskIO/DiskThreads/Makefile src/DiskIO/IpcIo/Makefile src/DiskIO/Mmapped/Makefile + src/error/Makefile src/esi/Makefile src/eui/Makefile src/format/Makefile diff -u -r -N squid-5.0.5/CONTRIBUTORS squid-5.0.6/CONTRIBUTORS --- squid-5.0.5/CONTRIBUTORS 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/CONTRIBUTORS 2021-05-10 21:02:34.000000000 +1200 @@ -105,6 +105,7 @@ Dan Searle Dan Searle Dave Dykstra + David Carlier David Hill David Isaacs David J N Begley @@ -250,6 +251,7 @@ Jorge Ivan Burgos Aguilar Jose Luis Godoy Jose-Marcio Martins da Cruz + Joshua Rogers Joshua Root Joshua Root JPP diff -u -r -N squid-5.0.5/doc/debug-sections.txt squid-5.0.6/doc/debug-sections.txt --- squid-5.0.5/doc/debug-sections.txt 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/doc/debug-sections.txt 2021-05-10 21:02:34.000000000 +1200 @@ -18,6 +18,7 @@ section 03 Configuration File Parsing section 03 Configuration Settings section 04 Error Generation +section 04 Error Management section 05 Comm section 05 Disk I/O pipe manager section 05 Listener Socket Handler @@ -139,6 +140,7 @@ section 82 External ACL section 83 SSL accelerator support section 83 SSL-Bump Server/Peer negotiation +section 83 TLS I/O section 83 TLS Server/Peer negotiation section 83 TLS session management section 84 Helper process maintenance diff -u -r -N squid-5.0.5/doc/release-notes/release-5.html squid-5.0.6/doc/release-notes/release-5.html --- squid-5.0.5/doc/release-notes/release-5.html 2021-02-08 13:46:34.000000000 +1300 +++ squid-5.0.6/doc/release-notes/release-5.html 2021-05-10 23:02:18.000000000 +1200 @@ -3,10 +3,10 @@ - Squid 5.0.5 release notes + Squid 5.0.6 release notes -

Squid 5.0.5 release notes

+

Squid 5.0.6 release notes

Squid Developers


@@ -61,7 +61,7 @@

1. Notice

-

The Squid Team are pleased to announce the release of Squid-5.0.5 for testing.

+

The Squid Team are pleased to announce the release of Squid-5.0.6 for testing.

This new release is available for download from http://www.squid-cache.org/Versions/v5/ or the mirrors.

@@ -341,8 +341,12 @@ protocol version 2 TLV values.

New master_xaction code to display Squids internal transaction ID.

-

New CF value for %Ss code to indicate the response +

New CF value for Ss code to indicate the response was handled by Collapsed Forwarding.

+

New TLS/1.3 value for ssl::>negotiated_version +code to indicate the request was received from client using TLS/1.3.

+

New TLS/1.3 value for ssl::<negotiated_version +code to indicate the response was received from server using TLS/1.3.

Codes rm, <rm and >rm display "-" instead of the made-up method NONE.

diff -u -r -N squid-5.0.5/errors/af/error-details.txt squid-5.0.6/errors/af/error-details.txt --- squid-5.0.5/errors/af/error-details.txt 2021-02-08 13:41:31.000000000 +1300 +++ squid-5.0.6/errors/af/error-details.txt 2021-05-10 22:58:39.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/ar/error-details.txt squid-5.0.6/errors/ar/error-details.txt --- squid-5.0.5/errors/ar/error-details.txt 2021-02-08 13:41:36.000000000 +1300 +++ squid-5.0.6/errors/ar/error-details.txt 2021-05-10 22:58:44.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/az/error-details.txt squid-5.0.6/errors/az/error-details.txt --- squid-5.0.5/errors/az/error-details.txt 2021-02-08 13:41:41.000000000 +1300 +++ squid-5.0.6/errors/az/error-details.txt 2021-05-10 22:58:49.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/bg/error-details.txt squid-5.0.6/errors/bg/error-details.txt --- squid-5.0.5/errors/bg/error-details.txt 2021-02-08 13:41:46.000000000 +1300 +++ squid-5.0.6/errors/bg/error-details.txt 2021-05-10 22:58:54.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/ca/error-details.txt squid-5.0.6/errors/ca/error-details.txt --- squid-5.0.5/errors/ca/error-details.txt 2021-02-08 13:41:51.000000000 +1300 +++ squid-5.0.6/errors/ca/error-details.txt 2021-05-10 22:58:58.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/cs/error-details.txt squid-5.0.6/errors/cs/error-details.txt --- squid-5.0.5/errors/cs/error-details.txt 2021-02-08 13:41:56.000000000 +1300 +++ squid-5.0.6/errors/cs/error-details.txt 2021-05-10 22:59:03.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/da/error-details.txt squid-5.0.6/errors/da/error-details.txt --- squid-5.0.5/errors/da/error-details.txt 2021-02-08 13:42:01.000000000 +1300 +++ squid-5.0.6/errors/da/error-details.txt 2021-05-10 22:59:08.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/de/error-details.txt squid-5.0.6/errors/de/error-details.txt --- squid-5.0.5/errors/de/error-details.txt 2021-02-08 13:42:06.000000000 +1300 +++ squid-5.0.6/errors/de/error-details.txt 2021-05-10 22:59:13.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/el/error-details.txt squid-5.0.6/errors/el/error-details.txt --- squid-5.0.5/errors/el/error-details.txt 2021-02-08 13:42:12.000000000 +1300 +++ squid-5.0.6/errors/el/error-details.txt 2021-05-10 22:59:18.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/en/error-details.txt squid-5.0.6/errors/en/error-details.txt --- squid-5.0.5/errors/en/error-details.txt 2021-02-08 13:42:19.000000000 +1300 +++ squid-5.0.6/errors/en/error-details.txt 2021-05-10 22:59:23.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/es/error-details.txt squid-5.0.6/errors/es/error-details.txt --- squid-5.0.5/errors/es/error-details.txt 2021-02-08 13:42:34.000000000 +1300 +++ squid-5.0.6/errors/es/error-details.txt 2021-05-10 22:59:32.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/es-mx/error-details.txt squid-5.0.6/errors/es-mx/error-details.txt --- squid-5.0.5/errors/es-mx/error-details.txt 2021-02-08 13:42:27.000000000 +1300 +++ squid-5.0.6/errors/es-mx/error-details.txt 2021-05-10 22:59:28.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/et/error-details.txt squid-5.0.6/errors/et/error-details.txt --- squid-5.0.5/errors/et/error-details.txt 2021-02-08 13:42:41.000000000 +1300 +++ squid-5.0.6/errors/et/error-details.txt 2021-05-10 22:59:37.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/fa/error-details.txt squid-5.0.6/errors/fa/error-details.txt --- squid-5.0.5/errors/fa/error-details.txt 2021-02-08 13:42:48.000000000 +1300 +++ squid-5.0.6/errors/fa/error-details.txt 2021-05-10 22:59:42.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/fi/error-details.txt squid-5.0.6/errors/fi/error-details.txt --- squid-5.0.5/errors/fi/error-details.txt 2021-02-08 13:42:55.000000000 +1300 +++ squid-5.0.6/errors/fi/error-details.txt 2021-05-10 22:59:47.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/fr/error-details.txt squid-5.0.6/errors/fr/error-details.txt --- squid-5.0.5/errors/fr/error-details.txt 2021-02-08 13:43:02.000000000 +1300 +++ squid-5.0.6/errors/fr/error-details.txt 2021-05-10 22:59:52.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/he/error-details.txt squid-5.0.6/errors/he/error-details.txt --- squid-5.0.5/errors/he/error-details.txt 2021-02-08 13:43:09.000000000 +1300 +++ squid-5.0.6/errors/he/error-details.txt 2021-05-10 22:59:57.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/hu/error-details.txt squid-5.0.6/errors/hu/error-details.txt --- squid-5.0.5/errors/hu/error-details.txt 2021-02-08 13:43:16.000000000 +1300 +++ squid-5.0.6/errors/hu/error-details.txt 2021-05-10 23:00:01.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/hy/error-details.txt squid-5.0.6/errors/hy/error-details.txt --- squid-5.0.5/errors/hy/error-details.txt 2021-02-08 13:43:23.000000000 +1300 +++ squid-5.0.6/errors/hy/error-details.txt 2021-05-10 23:00:06.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/id/error-details.txt squid-5.0.6/errors/id/error-details.txt --- squid-5.0.5/errors/id/error-details.txt 2021-02-08 13:43:30.000000000 +1300 +++ squid-5.0.6/errors/id/error-details.txt 2021-05-10 23:00:11.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/it/error-details.txt squid-5.0.6/errors/it/error-details.txt --- squid-5.0.5/errors/it/error-details.txt 2021-02-08 13:43:37.000000000 +1300 +++ squid-5.0.6/errors/it/error-details.txt 2021-05-10 23:00:16.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/ja/error-details.txt squid-5.0.6/errors/ja/error-details.txt --- squid-5.0.5/errors/ja/error-details.txt 2021-02-08 13:43:44.000000000 +1300 +++ squid-5.0.6/errors/ja/error-details.txt 2021-05-10 23:00:21.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/ka/error-details.txt squid-5.0.6/errors/ka/error-details.txt --- squid-5.0.5/errors/ka/error-details.txt 2021-02-08 13:43:51.000000000 +1300 +++ squid-5.0.6/errors/ka/error-details.txt 2021-05-10 23:00:26.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/ko/error-details.txt squid-5.0.6/errors/ko/error-details.txt --- squid-5.0.5/errors/ko/error-details.txt 2021-02-08 13:43:58.000000000 +1300 +++ squid-5.0.6/errors/ko/error-details.txt 2021-05-10 23:00:31.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/lt/error-details.txt squid-5.0.6/errors/lt/error-details.txt --- squid-5.0.5/errors/lt/error-details.txt 2021-02-08 13:44:05.000000000 +1300 +++ squid-5.0.6/errors/lt/error-details.txt 2021-05-10 23:00:35.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/lv/error-details.txt squid-5.0.6/errors/lv/error-details.txt --- squid-5.0.5/errors/lv/error-details.txt 2021-02-08 13:44:12.000000000 +1300 +++ squid-5.0.6/errors/lv/error-details.txt 2021-05-10 23:00:40.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/ms/error-details.txt squid-5.0.6/errors/ms/error-details.txt --- squid-5.0.5/errors/ms/error-details.txt 2021-02-08 13:44:19.000000000 +1300 +++ squid-5.0.6/errors/ms/error-details.txt 2021-05-10 23:00:45.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/nl/error-details.txt squid-5.0.6/errors/nl/error-details.txt --- squid-5.0.5/errors/nl/error-details.txt 2021-02-08 13:44:26.000000000 +1300 +++ squid-5.0.6/errors/nl/error-details.txt 2021-05-10 23:00:50.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/oc/error-details.txt squid-5.0.6/errors/oc/error-details.txt --- squid-5.0.5/errors/oc/error-details.txt 2021-02-08 13:44:33.000000000 +1300 +++ squid-5.0.6/errors/oc/error-details.txt 2021-05-10 23:00:55.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/pl/error-details.txt squid-5.0.6/errors/pl/error-details.txt --- squid-5.0.5/errors/pl/error-details.txt 2021-02-08 13:44:40.000000000 +1300 +++ squid-5.0.6/errors/pl/error-details.txt 2021-05-10 23:01:00.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/pt/error-details.txt squid-5.0.6/errors/pt/error-details.txt --- squid-5.0.5/errors/pt/error-details.txt 2021-02-08 13:44:54.000000000 +1300 +++ squid-5.0.6/errors/pt/error-details.txt 2021-05-10 23:01:09.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/pt-br/error-details.txt squid-5.0.6/errors/pt-br/error-details.txt --- squid-5.0.5/errors/pt-br/error-details.txt 2021-02-08 13:44:47.000000000 +1300 +++ squid-5.0.6/errors/pt-br/error-details.txt 2021-05-10 23:01:04.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/ro/error-details.txt squid-5.0.6/errors/ro/error-details.txt --- squid-5.0.5/errors/ro/error-details.txt 2021-02-08 13:45:01.000000000 +1300 +++ squid-5.0.6/errors/ro/error-details.txt 2021-05-10 23:01:14.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/ru/error-details.txt squid-5.0.6/errors/ru/error-details.txt --- squid-5.0.5/errors/ru/error-details.txt 2021-02-08 13:45:08.000000000 +1300 +++ squid-5.0.6/errors/ru/error-details.txt 2021-05-10 23:01:19.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/sk/error-details.txt squid-5.0.6/errors/sk/error-details.txt --- squid-5.0.5/errors/sk/error-details.txt 2021-02-08 13:45:15.000000000 +1300 +++ squid-5.0.6/errors/sk/error-details.txt 2021-05-10 23:01:24.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/sl/error-details.txt squid-5.0.6/errors/sl/error-details.txt --- squid-5.0.5/errors/sl/error-details.txt 2021-02-08 13:45:22.000000000 +1300 +++ squid-5.0.6/errors/sl/error-details.txt 2021-05-10 23:01:29.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/sr-cyrl/error-details.txt squid-5.0.6/errors/sr-cyrl/error-details.txt --- squid-5.0.5/errors/sr-cyrl/error-details.txt 2021-02-08 13:45:29.000000000 +1300 +++ squid-5.0.6/errors/sr-cyrl/error-details.txt 2021-05-10 23:01:34.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/sr-latn/error-details.txt squid-5.0.6/errors/sr-latn/error-details.txt --- squid-5.0.5/errors/sr-latn/error-details.txt 2021-02-08 13:45:36.000000000 +1300 +++ squid-5.0.6/errors/sr-latn/error-details.txt 2021-05-10 23:01:38.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/sv/error-details.txt squid-5.0.6/errors/sv/error-details.txt --- squid-5.0.5/errors/sv/error-details.txt 2021-02-08 13:45:44.000000000 +1300 +++ squid-5.0.6/errors/sv/error-details.txt 2021-05-10 23:01:43.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/templates/error-details.txt squid-5.0.6/errors/templates/error-details.txt --- squid-5.0.5/errors/templates/error-details.txt 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/errors/templates/error-details.txt 2021-05-10 21:02:34.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/th/error-details.txt squid-5.0.6/errors/th/error-details.txt --- squid-5.0.5/errors/th/error-details.txt 2021-02-08 13:45:51.000000000 +1300 +++ squid-5.0.6/errors/th/error-details.txt 2021-05-10 23:01:48.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/tr/error-details.txt squid-5.0.6/errors/tr/error-details.txt --- squid-5.0.5/errors/tr/error-details.txt 2021-02-08 13:45:58.000000000 +1300 +++ squid-5.0.6/errors/tr/error-details.txt 2021-05-10 23:01:53.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/TRANSLATORS squid-5.0.6/errors/TRANSLATORS --- squid-5.0.5/errors/TRANSLATORS 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/errors/TRANSLATORS 2021-05-10 21:02:34.000000000 +1200 @@ -110,7 +110,7 @@ Russian Andrew L. Davydov Serbian Zoran Verovski Serbian Dragutin Cirkovic -Simplify Chinese Wang DaQing +Simplified Chinese Wang DaQing Slovak Peter Hanecak Spanish Javier Puche Spanish Roberto Lumbreras diff -u -r -N squid-5.0.5/errors/uk/error-details.txt squid-5.0.6/errors/uk/error-details.txt --- squid-5.0.5/errors/uk/error-details.txt 2021-02-08 13:46:05.000000000 +1300 +++ squid-5.0.6/errors/uk/error-details.txt 2021-05-10 23:01:58.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/uz/error-details.txt squid-5.0.6/errors/uz/error-details.txt --- squid-5.0.5/errors/uz/error-details.txt 2021-02-08 13:46:12.000000000 +1300 +++ squid-5.0.6/errors/uz/error-details.txt 2021-05-10 23:02:03.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/vi/error-details.txt squid-5.0.6/errors/vi/error-details.txt --- squid-5.0.5/errors/vi/error-details.txt 2021-02-08 13:46:19.000000000 +1300 +++ squid-5.0.6/errors/vi/error-details.txt 2021-05-10 23:02:08.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/zh-hans/error-details.txt squid-5.0.6/errors/zh-hans/error-details.txt --- squid-5.0.5/errors/zh-hans/error-details.txt 2021-02-08 13:46:26.000000000 +1300 +++ squid-5.0.6/errors/zh-hans/error-details.txt 2021-05-10 23:02:12.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/errors/zh-hant/error-details.txt squid-5.0.6/errors/zh-hant/error-details.txt --- squid-5.0.5/errors/zh-hant/error-details.txt 2021-02-08 13:46:33.000000000 +1300 +++ squid-5.0.6/errors/zh-hant/error-details.txt 2021-05-10 23:02:17.000000000 +1200 @@ -2,9 +2,13 @@ detail: "%ssl_error_descr: %ssl_subject" descr: "Cert validation infinite loop detected" -name: SQUID_ERR_SSL_HANDSHAKE +name: SQUID_TLS_ERR_ACCEPT detail: "%ssl_error_descr: %ssl_lib_error" -descr: "Handshake with SSL server failed" +descr: "Failed to accept a secure connection" + +name: SQUID_TLS_ERR_CONNECT +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Failed to establish a secure connection" name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" diff -u -r -N squid-5.0.5/include/autoconf.h.in squid-5.0.6/include/autoconf.h.in --- squid-5.0.5/include/autoconf.h.in 2021-02-08 13:40:43.000000000 +1300 +++ squid-5.0.6/include/autoconf.h.in 2021-05-10 22:57:50.000000000 +1200 @@ -118,6 +118,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_BYTESWAP_H +/* Define to 1 if you have the `clock_gettime_nsec_np' function. */ +#undef HAVE_CLOCK_GETTIME_NSEC_NP + /* Define to 1 if you have the `closedir' function. */ #undef HAVE_CLOSEDIR @@ -519,6 +522,9 @@ /* "Define to 1 if the OPENSSL_LH_strhash() OpenSSL API function exists" */ #undef HAVE_LIBCRYPTO_OPENSSL_LH_STRHASH +/* "Define to 1 if the X509_chain_up_ref() OpenSSL API function exists" */ +#undef HAVE_LIBCRYPTO_X509_CHAIN_UP_REF + /* "Define to 1 if the X509_CRL_up_ref() OpenSSL API function exists" */ #undef HAVE_LIBCRYPTO_X509_CRL_UP_REF @@ -981,6 +987,9 @@ /* SSL_CTX_get0_certificate is available */ #undef HAVE_SSL_CTX_GET0_CERTIFICATE +/* "Define to 1 of the SSL_get0_param() OpenSSL API function exists" */ +#undef HAVE_SSL_GET0_PARAM + /* Define if sockaddr_storage has field ss_len */ #undef HAVE_SS_LEN_IN_SS @@ -1250,6 +1259,10 @@ /* Define to 1 if you have the header file. */ #undef HAVE_WS2TCPIP_H +/* "Define to 1 if the X509_VERIFY_PARAM_set_auth_level() OpenSSL API function + exists" */ +#undef HAVE_X509_VERIFY_PARAM_SET_AUTH_LEVEL + /* Define to 1 if you have the `__htole16' function. */ #undef HAVE___HTOLE16 diff -u -r -N squid-5.0.5/include/version.h squid-5.0.6/include/version.h --- squid-5.0.5/include/version.h 2021-02-08 13:40:49.000000000 +1300 +++ squid-5.0.6/include/version.h 2021-05-10 22:57:57.000000000 +1200 @@ -7,7 +7,7 @@ */ #ifndef SQUID_RELEASE_TIME -#define SQUID_RELEASE_TIME 1612744840 +#define SQUID_RELEASE_TIME 1620644267 #endif /* diff -u -r -N squid-5.0.5/lib/libTrie/Makefile.am squid-5.0.6/lib/libTrie/Makefile.am --- squid-5.0.5/lib/libTrie/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/lib/libTrie/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -15,8 +15,9 @@ noinst_HEADERS = Trie.h TrieNode.h TrieCharTransform.h -libTrie_a_SOURCES = Trie.cc \ +libTrie_a_SOURCES = \ + Trie.cc \ Trie.h \ + TrieCharTransform.h \ TrieNode.cc \ - TrieNode.h \ - TrieCharTransform.h + TrieNode.h diff -u -r -N squid-5.0.5/lib/libTrie/Makefile.in squid-5.0.6/lib/libTrie/Makefile.in --- squid-5.0.5/lib/libTrie/Makefile.in 2021-02-08 13:40:44.000000000 +1300 +++ squid-5.0.6/lib/libTrie/Makefile.in 2021-05-10 22:57:52.000000000 +1200 @@ -779,11 +779,12 @@ SUBDIRS = . test noinst_LIBRARIES = libTrie.a noinst_HEADERS = Trie.h TrieNode.h TrieCharTransform.h -libTrie_a_SOURCES = Trie.cc \ +libTrie_a_SOURCES = \ + Trie.cc \ Trie.h \ + TrieCharTransform.h \ TrieNode.cc \ - TrieNode.h \ - TrieCharTransform.h + TrieNode.h all: all-recursive diff -u -r -N squid-5.0.5/lib/Makefile.am squid-5.0.6/lib/Makefile.am --- squid-5.0.5/lib/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/lib/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -66,13 +66,13 @@ hash.cc libmiscutil_la_SOURCES = \ + $(SNPRINTFSOURCE) \ + Splay.cc \ getfullhostname.c \ heap.c \ iso3307.c \ radix.c \ rfc1123.c \ - $(SNPRINTFSOURCE) \ - Splay.cc \ stub_memaccount.c \ util.c \ xusleep.c @@ -81,9 +81,9 @@ check_PROGRAMS += tests/testRFC1738 -tests_testRFC1738_SOURCES= \ - tests/testRFC1738.h \ - tests/testRFC1738.cc +tests_testRFC1738_SOURCES = \ + tests/testRFC1738.cc \ + tests/testRFC1738.h tests_testRFC1738_LDADD= \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/lib/Makefile.in squid-5.0.6/lib/Makefile.in --- squid-5.0.5/lib/Makefile.in 2021-02-08 13:40:44.000000000 +1300 +++ squid-5.0.6/lib/Makefile.in 2021-05-10 22:57:52.000000000 +1200 @@ -189,8 +189,8 @@ rfc1738.lo rfc2617.lo libmiscencoding_la_OBJECTS = $(am_libmiscencoding_la_OBJECTS) libmiscutil_la_LIBADD = -am_libmiscutil_la_OBJECTS = getfullhostname.lo heap.lo iso3307.lo \ - radix.lo rfc1123.lo Splay.lo stub_memaccount.lo util.lo \ +am_libmiscutil_la_OBJECTS = Splay.lo getfullhostname.lo heap.lo \ + iso3307.lo radix.lo rfc1123.lo stub_memaccount.lo util.lo \ xusleep.lo libmiscutil_la_OBJECTS = $(am_libmiscutil_la_OBJECTS) libsspwin32_la_LIBADD = @@ -850,20 +850,20 @@ hash.cc libmiscutil_la_SOURCES = \ + $(SNPRINTFSOURCE) \ + Splay.cc \ getfullhostname.c \ heap.c \ iso3307.c \ radix.c \ rfc1123.c \ - $(SNPRINTFSOURCE) \ - Splay.cc \ stub_memaccount.c \ util.c \ xusleep.c tests_testRFC1738_SOURCES = \ - tests/testRFC1738.h \ - tests/testRFC1738.cc + tests/testRFC1738.cc \ + tests/testRFC1738.h tests_testRFC1738_LDADD = \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/lib/profiler/get_tick.h squid-5.0.6/lib/profiler/get_tick.h --- squid-5.0.5/lib/profiler/get_tick.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/lib/profiler/get_tick.h 2021-05-10 21:02:34.000000000 +1200 @@ -10,6 +10,7 @@ #define _PROFILER_GET_TICK_H_ #if USE_XPROF_STATS +#include /* * Ensure that any changes here are synchronised with SQUID_CHECK_FUNCTIONAL_CPU_PROFILER @@ -67,6 +68,14 @@ return regs; } +#elif defined(HAVE_CLOCK_GETTIME_NSEC_NP) && defined(CLOCK_MONOTONIC_RAW) + +static inline hrtime_t +get_tick() +{ + return clock_gettime_nsec_np(CLOCK_MONOTONIC_RAW); +} + #else /* This CPU is unsupported. Short-circuit, no profiling here */ // #error for configure tests to prevent library construction diff -u -r -N squid-5.0.5/lib/rfcnb/Makefile.am squid-5.0.6/lib/rfcnb/Makefile.am --- squid-5.0.5/lib/rfcnb/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/lib/rfcnb/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -13,14 +13,13 @@ librfcnb_la_SOURCES = \ byteorder.h \ - rfcnb.h \ rfcnb-common.h \ rfcnb-error.h \ - rfcnb-priv.h \ - rfcnb-util.h \ - rfcnb-io.h \ rfcnb-io.c \ + rfcnb-io.h \ + rfcnb-priv.h \ rfcnb-util.c \ rfcnb-util.h \ + rfcnb.h \ session.c \ std-includes.h diff -u -r -N squid-5.0.5/lib/rfcnb/Makefile.in squid-5.0.6/lib/rfcnb/Makefile.in --- squid-5.0.5/lib/rfcnb/Makefile.in 2021-02-08 13:40:45.000000000 +1300 +++ squid-5.0.6/lib/rfcnb/Makefile.in 2021-05-10 22:57:52.000000000 +1200 @@ -709,15 +709,14 @@ noinst_LTLIBRARIES = librfcnb.la librfcnb_la_SOURCES = \ byteorder.h \ - rfcnb.h \ rfcnb-common.h \ rfcnb-error.h \ - rfcnb-priv.h \ - rfcnb-util.h \ - rfcnb-io.h \ rfcnb-io.c \ + rfcnb-io.h \ + rfcnb-priv.h \ rfcnb-util.c \ rfcnb-util.h \ + rfcnb.h \ session.c \ std-includes.h diff -u -r -N squid-5.0.5/lib/smblib/Makefile.am squid-5.0.6/lib/smblib/Makefile.am --- squid-5.0.5/lib/smblib/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/lib/smblib/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -14,13 +14,13 @@ libsmblib_la_SOURCES = \ md4.c \ md4.h \ - smblib.c \ - smblib.h \ + smbdes.c \ + smbdes.h \ + smbencrypt.c \ + smbencrypt.h \ smblib-common.h \ smblib-priv.h \ smblib-util.c \ - smbencrypt.c \ - smbencrypt.h \ - smbdes.c \ - smbdes.h \ + smblib.c \ + smblib.h \ std-defines.h diff -u -r -N squid-5.0.5/lib/smblib/Makefile.in squid-5.0.6/lib/smblib/Makefile.in --- squid-5.0.5/lib/smblib/Makefile.in 2021-02-08 13:40:45.000000000 +1300 +++ squid-5.0.6/lib/smblib/Makefile.in 2021-05-10 22:57:52.000000000 +1200 @@ -165,8 +165,8 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libsmblib_la_LIBADD = -am_libsmblib_la_OBJECTS = md4.lo smblib.lo smblib-util.lo \ - smbencrypt.lo smbdes.lo +am_libsmblib_la_OBJECTS = md4.lo smbdes.lo smbencrypt.lo \ + smblib-util.lo smblib.lo libsmblib_la_OBJECTS = $(am_libsmblib_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -712,15 +712,15 @@ libsmblib_la_SOURCES = \ md4.c \ md4.h \ - smblib.c \ - smblib.h \ + smbdes.c \ + smbdes.h \ + smbencrypt.c \ + smbencrypt.h \ smblib-common.h \ smblib-priv.h \ smblib-util.c \ - smbencrypt.c \ - smbencrypt.h \ - smbdes.c \ - smbdes.h \ + smblib.c \ + smblib.h \ std-defines.h all: all-am diff -u -r -N squid-5.0.5/lib/snmplib/Makefile.am squid-5.0.6/lib/snmplib/Makefile.am --- squid-5.0.5/lib/snmplib/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/lib/snmplib/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -17,11 +17,18 @@ -I$(top_srcdir)/include noinst_LTLIBRARIES = libsnmplib.la -libsnmplib_la_SOURCES = asn1.c parse.c snmp_vars.c \ - coexistance.c snmp_api.c snmp_error.c \ - mib.c snmp_api_error.c \ +libsnmplib_la_SOURCES = \ + asn1.c \ + coexistance.c \ + mib.c \ + parse.c \ + snmp_api.c \ + snmp_api_error.c \ + snmp_error.c \ snmp_msg.c \ - snmp_pdu.c snmplib_debug.c + snmp_pdu.c \ + snmp_vars.c \ + snmplib_debug.c VERSION = 3.4 DEFS = -DSQUID_SNMP=1 diff -u -r -N squid-5.0.5/lib/snmplib/Makefile.in squid-5.0.6/lib/snmplib/Makefile.in --- squid-5.0.5/lib/snmplib/Makefile.in 2021-02-08 13:40:45.000000000 +1300 +++ squid-5.0.6/lib/snmplib/Makefile.in 2021-05-10 22:57:52.000000000 +1200 @@ -162,9 +162,9 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libsnmplib_la_LIBADD = -am_libsnmplib_la_OBJECTS = asn1.lo parse.lo snmp_vars.lo \ - coexistance.lo snmp_api.lo snmp_error.lo mib.lo \ - snmp_api_error.lo snmp_msg.lo snmp_pdu.lo snmplib_debug.lo +am_libsnmplib_la_OBJECTS = asn1.lo coexistance.lo mib.lo parse.lo \ + snmp_api.lo snmp_api_error.lo snmp_error.lo snmp_msg.lo \ + snmp_pdu.lo snmp_vars.lo snmplib_debug.lo libsnmplib_la_OBJECTS = $(am_libsnmplib_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -479,11 +479,18 @@ -I$(top_srcdir)/include noinst_LTLIBRARIES = libsnmplib.la -libsnmplib_la_SOURCES = asn1.c parse.c snmp_vars.c \ - coexistance.c snmp_api.c snmp_error.c \ - mib.c snmp_api_error.c \ +libsnmplib_la_SOURCES = \ + asn1.c \ + coexistance.c \ + mib.c \ + parse.c \ + snmp_api.c \ + snmp_api_error.c \ + snmp_error.c \ snmp_msg.c \ - snmp_pdu.c snmplib_debug.c + snmp_pdu.c \ + snmp_vars.c \ + snmplib_debug.c all: all-am diff -u -r -N squid-5.0.5/RELEASENOTES.html squid-5.0.6/RELEASENOTES.html --- squid-5.0.5/RELEASENOTES.html 2021-02-08 13:46:34.000000000 +1300 +++ squid-5.0.6/RELEASENOTES.html 2021-05-10 23:02:18.000000000 +1200 @@ -3,10 +3,10 @@ - Squid 5.0.5 release notes + Squid 5.0.6 release notes -

Squid 5.0.5 release notes

+

Squid 5.0.6 release notes

Squid Developers


@@ -61,7 +61,7 @@

1. Notice

-

The Squid Team are pleased to announce the release of Squid-5.0.5 for testing.

+

The Squid Team are pleased to announce the release of Squid-5.0.6 for testing.

This new release is available for download from http://www.squid-cache.org/Versions/v5/ or the mirrors.

@@ -341,8 +341,12 @@ protocol version 2 TLV values.

New master_xaction code to display Squids internal transaction ID.

-

New CF value for %Ss code to indicate the response +

New CF value for Ss code to indicate the response was handled by Collapsed Forwarding.

+

New TLS/1.3 value for ssl::>negotiated_version +code to indicate the request was received from client using TLS/1.3.

+

New TLS/1.3 value for ssl::<negotiated_version +code to indicate the response was received from server using TLS/1.3.

Codes rm, <rm and >rm display "-" instead of the made-up method NONE.

diff -u -r -N squid-5.0.5/scripts/calc-must-ids.pl squid-5.0.6/scripts/calc-must-ids.pl --- squid-5.0.5/scripts/calc-must-ids.pl 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/scripts/calc-must-ids.pl 2021-05-10 21:02:34.000000000 +1200 @@ -66,7 +66,7 @@ $line =~ s@/[*].*?[*]/@@; # strip simple single-line /* comments */ my($id); - if ($line =~ /\bMust2?\s*\(/ || # Must(...) and Must2(...) + if ($line =~ /\bMust\s*\(/ || # Must(...) $line =~ /\bTexcHere\s*\(/ || # TexcHere(...) $line =~ /\bHere\s*\(\s*\)/) { # Here() $line =~ s/^\s*//; diff -u -r -N squid-5.0.5/scripts/calc-must-ids.sh squid-5.0.6/scripts/calc-must-ids.sh --- squid-5.0.5/scripts/calc-must-ids.sh 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/scripts/calc-must-ids.sh 2021-05-10 21:02:34.000000000 +1200 @@ -23,7 +23,7 @@ xargs `dirname $0`/calc-must-ids.pl else find . -name "*.cc" -o -name "*.h" -o -name "*.cci" | \ - xargs `dirname $0`/calc-must-ids.pl | grep ": $1 " + xargs `dirname $0`/calc-must-ids.pl | grep -Ei ": (0x)?$1 " fi diff -u -r -N squid-5.0.5/SPONSORS squid-5.0.6/SPONSORS --- squid-5.0.5/SPONSORS 2021-02-08 13:40:49.000000000 +1300 +++ squid-5.0.6/SPONSORS 2021-05-10 22:57:57.000000000 +1200 @@ -8,7 +8,7 @@ developers and users. -DigialOcean - https://www.digitalocean.com/ +DigitalOcean - https://www.digitalocean.com/ DigitalOcean has donated droplets from their cloud infrastructure to host most of Squid Project's continuous integration farm. diff -u -r -N squid-5.0.5/src/AccessLogEntry.cc squid-5.0.6/src/AccessLogEntry.cc --- squid-5.0.5/src/AccessLogEntry.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/AccessLogEntry.cc 2021-05-10 21:02:34.000000000 +1200 @@ -175,6 +175,27 @@ return nullptr; } +const Error * +AccessLogEntry::error() const +{ + // the order ensures that the first-imported error is returned + if (error_) // updateError() was called before importing the request + return &error_; + if (request && request->error) // request was imported before updateError() + return &request->error; + return nullptr; // we imported no errors and no requests +} + +void +AccessLogEntry::updateError(const Error &err) +{ + // the order ensures that error() returns the first-imported error + if (request) + request->error.update(err); + else + error_.update(err); +} + void AccessLogEntry::packReplyHeaders(MemBuf &mb) const { diff -u -r -N squid-5.0.5/src/AccessLogEntry.h squid-5.0.6/src/AccessLogEntry.h --- squid-5.0.5/src/AccessLogEntry.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/AccessLogEntry.h 2021-05-10 21:02:34.000000000 +1200 @@ -12,6 +12,7 @@ #include "anyp/PortCfg.h" #include "base/CodeContext.h" #include "comm/Connection.h" +#include "error/Error.h" #include "HierarchyLogEntry.h" #include "http/ProtocolVersion.h" #include "http/RequestMethod.h" @@ -255,7 +256,17 @@ virginUrlForMissingRequest_ = vu; } + /// \returns stored transaction error information (or nil) + const Error *error() const; + + /// sets (or updates the already stored) transaction error as needed + void updateError(const Error &); + private: + /// transaction problem + /// if set, overrides (and should eventually replace) request->error + Error error_; + /// Client URI (or equivalent) for effectiveVirginUrl() when HttpRequest is /// missing. This member is ignored unless the request member is nil. SBuf virginUrlForMissingRequest_; diff -u -r -N squid-5.0.5/src/acl/AclDenyInfoList.h squid-5.0.6/src/acl/AclDenyInfoList.h --- squid-5.0.5/src/acl/AclDenyInfoList.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/AclDenyInfoList.h 2021-05-10 21:02:34.000000000 +1200 @@ -10,7 +10,7 @@ #define SQUID_ACLDENYINFOLIST_H_ #include "acl/forward.h" -#include "err_type.h" +#include "error/forward.h" #include "errorpage.h" #include "mem/forward.h" #include "sbuf/forward.h" diff -u -r -N squid-5.0.5/src/acl/Asn.cc squid-5.0.6/src/acl/Asn.cc --- squid-5.0.5/src/acl/Asn.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/Asn.cc 2021-05-10 21:02:34.000000000 +1200 @@ -595,7 +595,7 @@ const ipcache_addrs *ia = ipcache_gethostbyname(checklist->request->url.host(), IP_LOOKUP_IF_MISS); if (ia) { - for (const auto ip: ia->goodAndBad()) { + for (const auto &ip: ia->goodAndBad()) { if (data->match(ip)) return 1; } diff -u -r -N squid-5.0.5/src/acl/DestinationIp.cc squid-5.0.6/src/acl/DestinationIp.cc --- squid-5.0.5/src/acl/DestinationIp.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/DestinationIp.cc 2021-05-10 21:02:34.000000000 +1200 @@ -67,7 +67,7 @@ if (ia) { /* Entry in cache found */ - for (const auto ip: ia->goodAndBad()) { + for (const auto &ip: ia->goodAndBad()) { if (ACLIP::match(ip)) return 1; } diff -u -r -N squid-5.0.5/src/acl/external/delayer/ext_delayer_acl.8 squid-5.0.6/src/acl/external/delayer/ext_delayer_acl.8 --- squid-5.0.5/src/acl/external/delayer/ext_delayer_acl.8 2021-02-08 13:46:37.000000000 +1300 +++ squid-5.0.6/src/acl/external/delayer/ext_delayer_acl.8 2021-05-10 23:02:22.000000000 +1200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "EXT_DELAYER_ACL 8" -.TH EXT_DELAYER_ACL 8 "2021-02-08" "perl v5.32.0" "User Contributed Perl Documentation" +.TH EXT_DELAYER_ACL 8 "2021-05-10" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -u -r -N squid-5.0.5/src/acl/external/file_userip/Makefile.am squid-5.0.6/src/acl/external/file_userip/Makefile.am --- squid-5.0.5/src/acl/external/file_userip/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/external/file_userip/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -10,7 +10,7 @@ libexec_PROGRAMS = ext_file_userip_acl man_MANS = ext_file_userip_acl.8 -ext_file_userip_acl_SOURCES= \ +ext_file_userip_acl_SOURCES = \ ext_file_userip_acl.cc ext_file_userip_acl_LDADD= \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/src/acl/external/kerberos_ldap_group/Makefile.am squid-5.0.6/src/acl/external/kerberos_ldap_group/Makefile.am --- squid-5.0.5/src/acl/external/kerberos_ldap_group/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/external/kerberos_ldap_group/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -23,14 +23,14 @@ kerberos_ldap_group.cc \ support.h \ support_group.cc \ - support_netbios.cc \ - support_member.cc \ support_krb5.cc \ support_ldap.cc \ - support_sasl.cc \ - support_resolv.cc \ + support_log.cc \ support_lserver.cc \ - support_log.cc + support_member.cc \ + support_netbios.cc \ + support_resolv.cc \ + support_sasl.cc ext_kerberos_ldap_group_acl_LDFLAGS = ext_kerberos_ldap_group_acl_LDADD = \ diff -u -r -N squid-5.0.5/src/acl/external/kerberos_ldap_group/Makefile.in squid-5.0.6/src/acl/external/kerberos_ldap_group/Makefile.in --- squid-5.0.5/src/acl/external/kerberos_ldap_group/Makefile.in 2021-02-08 13:40:45.000000000 +1300 +++ squid-5.0.6/src/acl/external/kerberos_ldap_group/Makefile.in 2021-05-10 22:57:53.000000000 +1200 @@ -169,10 +169,10 @@ PROGRAMS = $(libexec_PROGRAMS) am_ext_kerberos_ldap_group_acl_OBJECTS = \ kerberos_ldap_group.$(OBJEXT) support_group.$(OBJEXT) \ - support_netbios.$(OBJEXT) support_member.$(OBJEXT) \ support_krb5.$(OBJEXT) support_ldap.$(OBJEXT) \ - support_sasl.$(OBJEXT) support_resolv.$(OBJEXT) \ - support_lserver.$(OBJEXT) support_log.$(OBJEXT) + support_log.$(OBJEXT) support_lserver.$(OBJEXT) \ + support_member.$(OBJEXT) support_netbios.$(OBJEXT) \ + support_resolv.$(OBJEXT) support_sasl.$(OBJEXT) ext_kerberos_ldap_group_acl_OBJECTS = \ $(am_ext_kerberos_ldap_group_acl_OBJECTS) @ENABLE_XPROF_STATS_TRUE@am__DEPENDENCIES_1 = $(top_builddir)/lib/profiler/libprofiler.la @@ -762,14 +762,14 @@ kerberos_ldap_group.cc \ support.h \ support_group.cc \ - support_netbios.cc \ - support_member.cc \ support_krb5.cc \ support_ldap.cc \ - support_sasl.cc \ - support_resolv.cc \ + support_log.cc \ support_lserver.cc \ - support_log.cc + support_member.cc \ + support_netbios.cc \ + support_resolv.cc \ + support_sasl.cc ext_kerberos_ldap_group_acl_LDFLAGS = ext_kerberos_ldap_group_acl_LDADD = \ diff -u -r -N squid-5.0.5/src/acl/external/kerberos_sid_group/ext_kerberos_sid_group_acl.8 squid-5.0.6/src/acl/external/kerberos_sid_group/ext_kerberos_sid_group_acl.8 --- squid-5.0.5/src/acl/external/kerberos_sid_group/ext_kerberos_sid_group_acl.8 2021-02-08 13:46:37.000000000 +1300 +++ squid-5.0.6/src/acl/external/kerberos_sid_group/ext_kerberos_sid_group_acl.8 2021-05-10 23:02:22.000000000 +1200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "EXT_KERBEROS_SID_GROUP_ACL 8" -.TH EXT_KERBEROS_SID_GROUP_ACL 8 "2021-02-08" "perl v5.32.0" "User Contributed Perl Documentation" +.TH EXT_KERBEROS_SID_GROUP_ACL 8 "2021-05-10" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -u -r -N squid-5.0.5/src/acl/external/LDAP_group/Makefile.am squid-5.0.6/src/acl/external/LDAP_group/Makefile.am --- squid-5.0.5/src/acl/external/LDAP_group/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/external/LDAP_group/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -10,7 +10,7 @@ libexec_PROGRAMS= ext_ldap_group_acl man_MANS= ext_ldap_group_acl.8 -ext_ldap_group_acl_SOURCES= \ +ext_ldap_group_acl_SOURCES = \ ext_ldap_group_acl.cc ext_ldap_group_acl_LDADD= \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/src/acl/external/LM_group/Makefile.am squid-5.0.6/src/acl/external/LM_group/Makefile.am --- squid-5.0.5/src/acl/external/LM_group/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/external/LM_group/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -10,7 +10,7 @@ libexec_PROGRAMS= ext_lm_group_acl man_MANS= ext_lm_group_acl.8 -ext_lm_group_acl_SOURCES= ext_lm_group_acl.cc +ext_lm_group_acl_SOURCES = ext_lm_group_acl.cc ext_lm_group_acl_LDADD= \ $(top_builddir)/lib/libmiscencoding.la \ $(COMPAT_LIB) \ diff -u -r -N squid-5.0.5/src/acl/external/session/Makefile.am squid-5.0.6/src/acl/external/session/Makefile.am --- squid-5.0.5/src/acl/external/session/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/external/session/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -10,7 +10,7 @@ libexec_PROGRAMS= ext_session_acl man_MANS= ext_session_acl.8 -ext_session_acl_SOURCES= \ +ext_session_acl_SOURCES = \ ext_session_acl.cc ext_session_acl_LDADD = \ $(COMPAT_LIB) \ diff -u -r -N squid-5.0.5/src/acl/external/SQL_session/ext_sql_session_acl.8 squid-5.0.6/src/acl/external/SQL_session/ext_sql_session_acl.8 --- squid-5.0.5/src/acl/external/SQL_session/ext_sql_session_acl.8 2021-02-08 13:46:37.000000000 +1300 +++ squid-5.0.6/src/acl/external/SQL_session/ext_sql_session_acl.8 2021-05-10 23:02:22.000000000 +1200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "EXT_SQL_SESSION_ACL 8" -.TH EXT_SQL_SESSION_ACL 8 "2021-02-08" "perl v5.32.0" "User Contributed Perl Documentation" +.TH EXT_SQL_SESSION_ACL 8 "2021-05-10" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -u -r -N squid-5.0.5/src/acl/external/time_quota/Makefile.am squid-5.0.6/src/acl/external/time_quota/Makefile.am --- squid-5.0.5/src/acl/external/time_quota/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/external/time_quota/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -12,7 +12,7 @@ DEFS += -DDEFAULT_QUOTA_DB=\"$(localstatedir)/ext_time_quota.db\" -ext_time_quota_acl_SOURCES= \ +ext_time_quota_acl_SOURCES = \ ext_time_quota_acl.cc ext_time_quota_acl_LDADD = \ $(COMPAT_LIB) \ diff -u -r -N squid-5.0.5/src/acl/external/unix_group/Makefile.am squid-5.0.6/src/acl/external/unix_group/Makefile.am --- squid-5.0.5/src/acl/external/unix_group/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/external/unix_group/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,7 +11,7 @@ man_MANS = ext_unix_group_acl.8 EXTRA_DIST = ext_unix_group_acl.8 required.m4 -ext_unix_group_acl_SOURCES= \ +ext_unix_group_acl_SOURCES = \ check_group.cc ext_unix_group_acl_LDADD= \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/src/acl/external/wbinfo_group/ext_wbinfo_group_acl.8 squid-5.0.6/src/acl/external/wbinfo_group/ext_wbinfo_group_acl.8 --- squid-5.0.5/src/acl/external/wbinfo_group/ext_wbinfo_group_acl.8 2021-02-08 13:46:37.000000000 +1300 +++ squid-5.0.6/src/acl/external/wbinfo_group/ext_wbinfo_group_acl.8 2021-05-10 23:02:22.000000000 +1200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "EXT_WBINFO_GROUP_ACL 8" -.TH EXT_WBINFO_GROUP_ACL 8 "2021-02-08" "perl v5.32.0" "User Contributed Perl Documentation" +.TH EXT_WBINFO_GROUP_ACL 8 "2021-05-10" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -u -r -N squid-5.0.5/src/acl/FilledChecklist.h squid-5.0.6/src/acl/FilledChecklist.h --- squid-5.0.5/src/acl/FilledChecklist.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/FilledChecklist.h 2021-05-10 21:02:34.000000000 +1200 @@ -13,7 +13,7 @@ #include "acl/Checklist.h" #include "acl/forward.h" #include "base/CbcPointer.h" -#include "err_type.h" +#include "error/forward.h" #include "ip/Address.h" #if USE_AUTH #include "auth/UserRequest.h" diff -u -r -N squid-5.0.5/src/acl/Gadgets.h squid-5.0.6/src/acl/Gadgets.h --- squid-5.0.5/src/acl/Gadgets.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/Gadgets.h 2021-05-10 21:02:34.000000000 +1200 @@ -10,7 +10,7 @@ #define SQUID_ACL_GADGETS_H #include "acl/forward.h" -#include "err_type.h" +#include "error/forward.h" #include diff -u -r -N squid-5.0.5/src/acl/Makefile.am squid-5.0.6/src/acl/Makefile.am --- squid-5.0.5/src/acl/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -20,39 +20,32 @@ BoolOps.h \ Checklist.cc \ Checklist.h \ - forward.h \ InnerNode.cc \ InnerNode.h \ - Options.h \ Options.cc \ + Options.h \ Tree.cc \ - Tree.h + Tree.h \ + forward.h ## Data-dependent Squid/transaction state used by specific ACLs. ## Does not refer to specific ACLs to avoid circular dependencies. libstate_la_SOURCES = \ + Address.cc \ + Address.h \ CharacterSetOption.h \ Data.h \ - Strategy.h \ - Strategised.cc \ - Strategised.h \ FilledChecklist.cc \ FilledChecklist.h \ - Address.h \ - Address.cc + Strategised.cc \ + Strategised.h \ + Strategy.h ## data-specific ACLs libacls_la_SOURCES = \ - IntRange.cc \ - IntRange.h \ - RegexData.cc \ - RegexData.h \ - StringData.cc \ - StringData.h \ - Time.cc \ - Time.h \ - TimeData.cc \ - TimeData.h \ + AclDenyInfoList.h \ + AclSizeLimit.cc \ + AclSizeLimit.h \ AllOf.cc \ AllOf.h \ AnnotateClient.cc \ @@ -69,10 +62,10 @@ AtStep.h \ AtStepData.cc \ AtStepData.h \ - ConnectionsEncrypted.cc \ - ConnectionsEncrypted.h \ ConnMark.cc \ ConnMark.h \ + ConnectionsEncrypted.cc \ + ConnectionsEncrypted.h \ DestinationAsn.h \ DestinationDomain.cc \ DestinationDomain.h \ @@ -82,14 +75,16 @@ DomainData.h \ ExtUser.cc \ ExtUser.h \ + Gadgets.cc \ + Gadgets.h \ HasComponent.cc \ HasComponent.h \ HasComponentData.cc \ HasComponentData.h \ - HierCodeData.cc \ - HierCodeData.h \ HierCode.cc \ HierCode.h \ + HierCodeData.cc \ + HierCodeData.h \ HttpHeaderData.cc \ HttpHeaderData.h \ HttpRepHeader.cc \ @@ -98,6 +93,8 @@ HttpReqHeader.h \ HttpStatus.cc \ HttpStatus.h \ + IntRange.cc \ + IntRange.h \ Ip.cc \ Ip.h \ LocalIp.cc \ @@ -107,23 +104,25 @@ MaxConnection.cc \ MaxConnection.h \ Method.cc \ + Method.h \ MethodData.cc \ MethodData.h \ - Method.h \ MyPortName.cc \ MyPortName.h \ - Note.h \ Note.cc \ - NoteData.h \ + Note.h \ NoteData.cc \ + NoteData.h \ PeerName.cc \ PeerName.h \ Protocol.cc \ + Protocol.h \ ProtocolData.cc \ ProtocolData.h \ - Protocol.h \ Random.cc \ Random.h \ + RegexData.cc \ + RegexData.h \ ReplyHeaderStrategy.h \ ReplyMimeType.h \ RequestHeaderStrategy.h \ @@ -133,12 +132,18 @@ SourceDomain.h \ SourceIp.cc \ SourceIp.h \ - SquidError.h \ SquidError.cc \ + SquidError.h \ SquidErrorData.cc \ SquidErrorData.h \ + StringData.cc \ + StringData.h \ Tag.cc \ Tag.h \ + Time.cc \ + Time.h \ + TimeData.cc \ + TimeData.h \ TransactionInitiator.cc \ TransactionInitiator.h \ Url.cc \ @@ -150,12 +155,7 @@ UrlPort.cc \ UrlPort.h \ UserData.cc \ - UserData.h \ - AclDenyInfoList.h \ - Gadgets.cc \ - Gadgets.h \ - AclSizeLimit.cc \ - AclSizeLimit.h + UserData.h ## Add conditional sources ## TODO: move these to their respective dirs when those dirs are created diff -u -r -N squid-5.0.5/src/acl/Makefile.in squid-5.0.6/src/acl/Makefile.in --- squid-5.0.5/src/acl/Makefile.in 2021-02-08 13:40:45.000000000 +1300 +++ squid-5.0.6/src/acl/Makefile.in 2021-05-10 22:57:53.000000000 +1200 @@ -167,39 +167,40 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libacls_la_LIBADD = -am__libacls_la_SOURCES_DIST = IntRange.cc IntRange.h RegexData.cc \ - RegexData.h StringData.cc StringData.h Time.cc Time.h \ - TimeData.cc TimeData.h AllOf.cc AllOf.h AnnotateClient.cc \ +am__libacls_la_SOURCES_DIST = AclDenyInfoList.h AclSizeLimit.cc \ + AclSizeLimit.h AllOf.cc AllOf.h AnnotateClient.cc \ AnnotateClient.h AnnotateTransaction.cc AnnotateTransaction.h \ AnnotationData.cc AnnotationData.h AnyOf.cc AnyOf.h Asn.cc \ Asn.h AtStep.cc AtStep.h AtStepData.cc AtStepData.h \ - ConnectionsEncrypted.cc ConnectionsEncrypted.h ConnMark.cc \ - ConnMark.h DestinationAsn.h DestinationDomain.cc \ + ConnMark.cc ConnMark.h ConnectionsEncrypted.cc \ + ConnectionsEncrypted.h DestinationAsn.h DestinationDomain.cc \ DestinationDomain.h DestinationIp.cc DestinationIp.h \ - DomainData.cc DomainData.h ExtUser.cc ExtUser.h \ - HasComponent.cc HasComponent.h HasComponentData.cc \ - HasComponentData.h HierCodeData.cc HierCodeData.h HierCode.cc \ - HierCode.h HttpHeaderData.cc HttpHeaderData.h HttpRepHeader.cc \ - HttpRepHeader.h HttpReqHeader.cc HttpReqHeader.h HttpStatus.cc \ - HttpStatus.h Ip.cc Ip.h LocalIp.cc LocalIp.h LocalPort.cc \ + DomainData.cc DomainData.h ExtUser.cc ExtUser.h Gadgets.cc \ + Gadgets.h HasComponent.cc HasComponent.h HasComponentData.cc \ + HasComponentData.h HierCode.cc HierCode.h HierCodeData.cc \ + HierCodeData.h HttpHeaderData.cc HttpHeaderData.h \ + HttpRepHeader.cc HttpRepHeader.h HttpReqHeader.cc \ + HttpReqHeader.h HttpStatus.cc HttpStatus.h IntRange.cc \ + IntRange.h Ip.cc Ip.h LocalIp.cc LocalIp.h LocalPort.cc \ LocalPort.h MaxConnection.cc MaxConnection.h Method.cc \ - MethodData.cc MethodData.h Method.h MyPortName.cc MyPortName.h \ - Note.h Note.cc NoteData.h NoteData.cc PeerName.cc PeerName.h \ - Protocol.cc ProtocolData.cc ProtocolData.h Protocol.h \ - Random.cc Random.h ReplyHeaderStrategy.h ReplyMimeType.h \ - RequestHeaderStrategy.h RequestMimeType.h SourceAsn.h \ - SourceDomain.cc SourceDomain.h SourceIp.cc SourceIp.h \ - SquidError.h SquidError.cc SquidErrorData.cc SquidErrorData.h \ - Tag.cc Tag.h TransactionInitiator.cc TransactionInitiator.h \ - Url.cc Url.h UrlLogin.cc UrlLogin.h UrlPath.cc UrlPath.h \ - UrlPort.cc UrlPort.h UserData.cc UserData.h AclDenyInfoList.h \ - Gadgets.cc Gadgets.h AclSizeLimit.cc AclSizeLimit.h \ - CertificateData.cc CertificateData.h Certificate.cc \ - Certificate.h ServerCertificate.cc ServerCertificate.h \ - ServerName.cc ServerName.h SslError.cc SslError.h \ - SslErrorData.cc SslErrorData.h AdaptationService.h \ - AdaptationService.cc AdaptationServiceData.h \ - AdaptationServiceData.cc Arp.cc Arp.h Eui64.cc Eui64.h + Method.h MethodData.cc MethodData.h MyPortName.cc MyPortName.h \ + Note.cc Note.h NoteData.cc NoteData.h PeerName.cc PeerName.h \ + Protocol.cc Protocol.h ProtocolData.cc ProtocolData.h \ + Random.cc Random.h RegexData.cc RegexData.h \ + ReplyHeaderStrategy.h ReplyMimeType.h RequestHeaderStrategy.h \ + RequestMimeType.h SourceAsn.h SourceDomain.cc SourceDomain.h \ + SourceIp.cc SourceIp.h SquidError.cc SquidError.h \ + SquidErrorData.cc SquidErrorData.h StringData.cc StringData.h \ + Tag.cc Tag.h Time.cc Time.h TimeData.cc TimeData.h \ + TransactionInitiator.cc TransactionInitiator.h Url.cc Url.h \ + UrlLogin.cc UrlLogin.h UrlPath.cc UrlPath.h UrlPort.cc \ + UrlPort.h UserData.cc UserData.h CertificateData.cc \ + CertificateData.h Certificate.cc Certificate.h \ + ServerCertificate.cc ServerCertificate.h ServerName.cc \ + ServerName.h SslError.cc SslError.h SslErrorData.cc \ + SslErrorData.h AdaptationService.h AdaptationService.cc \ + AdaptationServiceData.h AdaptationServiceData.cc Arp.cc Arp.h \ + Eui64.cc Eui64.h am__objects_1 = CertificateData.lo Certificate.lo ServerCertificate.lo \ ServerName.lo SslError.lo SslErrorData.lo @ENABLE_SSL_TRUE@am__objects_2 = $(am__objects_1) @@ -207,20 +208,20 @@ @ENABLE_ADAPTATION_TRUE@am__objects_4 = $(am__objects_3) am__objects_5 = Arp.lo Eui64.lo @ENABLE_EUI_TRUE@am__objects_6 = $(am__objects_5) -am_libacls_la_OBJECTS = IntRange.lo RegexData.lo StringData.lo Time.lo \ - TimeData.lo AllOf.lo AnnotateClient.lo AnnotateTransaction.lo \ - AnnotationData.lo AnyOf.lo Asn.lo AtStep.lo AtStepData.lo \ - ConnectionsEncrypted.lo ConnMark.lo DestinationDomain.lo \ - DestinationIp.lo DomainData.lo ExtUser.lo HasComponent.lo \ - HasComponentData.lo HierCodeData.lo HierCode.lo \ - HttpHeaderData.lo HttpRepHeader.lo HttpReqHeader.lo \ - HttpStatus.lo Ip.lo LocalIp.lo LocalPort.lo MaxConnection.lo \ - Method.lo MethodData.lo MyPortName.lo Note.lo NoteData.lo \ - PeerName.lo Protocol.lo ProtocolData.lo Random.lo \ - SourceDomain.lo SourceIp.lo SquidError.lo SquidErrorData.lo \ - Tag.lo TransactionInitiator.lo Url.lo UrlLogin.lo UrlPath.lo \ - UrlPort.lo UserData.lo Gadgets.lo AclSizeLimit.lo \ - $(am__objects_2) $(am__objects_4) $(am__objects_6) +am_libacls_la_OBJECTS = AclSizeLimit.lo AllOf.lo AnnotateClient.lo \ + AnnotateTransaction.lo AnnotationData.lo AnyOf.lo Asn.lo \ + AtStep.lo AtStepData.lo ConnMark.lo ConnectionsEncrypted.lo \ + DestinationDomain.lo DestinationIp.lo DomainData.lo ExtUser.lo \ + Gadgets.lo HasComponent.lo HasComponentData.lo HierCode.lo \ + HierCodeData.lo HttpHeaderData.lo HttpRepHeader.lo \ + HttpReqHeader.lo HttpStatus.lo IntRange.lo Ip.lo LocalIp.lo \ + LocalPort.lo MaxConnection.lo Method.lo MethodData.lo \ + MyPortName.lo Note.lo NoteData.lo PeerName.lo Protocol.lo \ + ProtocolData.lo Random.lo RegexData.lo SourceDomain.lo \ + SourceIp.lo SquidError.lo SquidErrorData.lo StringData.lo \ + Tag.lo Time.lo TimeData.lo TransactionInitiator.lo Url.lo \ + UrlLogin.lo UrlPath.lo UrlPort.lo UserData.lo $(am__objects_2) \ + $(am__objects_4) $(am__objects_6) libacls_la_OBJECTS = $(am_libacls_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -231,7 +232,7 @@ Options.lo Tree.lo libapi_la_OBJECTS = $(am_libapi_la_OBJECTS) libstate_la_LIBADD = -am_libstate_la_OBJECTS = Strategised.lo FilledChecklist.lo Address.lo +am_libstate_la_OBJECTS = Address.lo FilledChecklist.lo Strategised.lo libstate_la_OBJECTS = $(am_libstate_la_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) @@ -879,52 +880,53 @@ BoolOps.h \ Checklist.cc \ Checklist.h \ - forward.h \ InnerNode.cc \ InnerNode.h \ - Options.h \ Options.cc \ + Options.h \ Tree.cc \ - Tree.h + Tree.h \ + forward.h libstate_la_SOURCES = \ + Address.cc \ + Address.h \ CharacterSetOption.h \ Data.h \ - Strategy.h \ - Strategised.cc \ - Strategised.h \ FilledChecklist.cc \ FilledChecklist.h \ - Address.h \ - Address.cc + Strategised.cc \ + Strategised.h \ + Strategy.h -libacls_la_SOURCES = IntRange.cc IntRange.h RegexData.cc RegexData.h \ - StringData.cc StringData.h Time.cc Time.h TimeData.cc \ - TimeData.h AllOf.cc AllOf.h AnnotateClient.cc AnnotateClient.h \ +libacls_la_SOURCES = AclDenyInfoList.h AclSizeLimit.cc AclSizeLimit.h \ + AllOf.cc AllOf.h AnnotateClient.cc AnnotateClient.h \ AnnotateTransaction.cc AnnotateTransaction.h AnnotationData.cc \ AnnotationData.h AnyOf.cc AnyOf.h Asn.cc Asn.h AtStep.cc \ - AtStep.h AtStepData.cc AtStepData.h ConnectionsEncrypted.cc \ - ConnectionsEncrypted.h ConnMark.cc ConnMark.h DestinationAsn.h \ - DestinationDomain.cc DestinationDomain.h DestinationIp.cc \ - DestinationIp.h DomainData.cc DomainData.h ExtUser.cc \ - ExtUser.h HasComponent.cc HasComponent.h HasComponentData.cc \ - HasComponentData.h HierCodeData.cc HierCodeData.h HierCode.cc \ - HierCode.h HttpHeaderData.cc HttpHeaderData.h HttpRepHeader.cc \ + AtStep.h AtStepData.cc AtStepData.h ConnMark.cc ConnMark.h \ + ConnectionsEncrypted.cc ConnectionsEncrypted.h \ + DestinationAsn.h DestinationDomain.cc DestinationDomain.h \ + DestinationIp.cc DestinationIp.h DomainData.cc DomainData.h \ + ExtUser.cc ExtUser.h Gadgets.cc Gadgets.h HasComponent.cc \ + HasComponent.h HasComponentData.cc HasComponentData.h \ + HierCode.cc HierCode.h HierCodeData.cc HierCodeData.h \ + HttpHeaderData.cc HttpHeaderData.h HttpRepHeader.cc \ HttpRepHeader.h HttpReqHeader.cc HttpReqHeader.h HttpStatus.cc \ - HttpStatus.h Ip.cc Ip.h LocalIp.cc LocalIp.h LocalPort.cc \ - LocalPort.h MaxConnection.cc MaxConnection.h Method.cc \ - MethodData.cc MethodData.h Method.h MyPortName.cc MyPortName.h \ - Note.h Note.cc NoteData.h NoteData.cc PeerName.cc PeerName.h \ - Protocol.cc ProtocolData.cc ProtocolData.h Protocol.h \ - Random.cc Random.h ReplyHeaderStrategy.h ReplyMimeType.h \ + HttpStatus.h IntRange.cc IntRange.h Ip.cc Ip.h LocalIp.cc \ + LocalIp.h LocalPort.cc LocalPort.h MaxConnection.cc \ + MaxConnection.h Method.cc Method.h MethodData.cc MethodData.h \ + MyPortName.cc MyPortName.h Note.cc Note.h NoteData.cc \ + NoteData.h PeerName.cc PeerName.h Protocol.cc Protocol.h \ + ProtocolData.cc ProtocolData.h Random.cc Random.h RegexData.cc \ + RegexData.h ReplyHeaderStrategy.h ReplyMimeType.h \ RequestHeaderStrategy.h RequestMimeType.h SourceAsn.h \ SourceDomain.cc SourceDomain.h SourceIp.cc SourceIp.h \ - SquidError.h SquidError.cc SquidErrorData.cc SquidErrorData.h \ - Tag.cc Tag.h TransactionInitiator.cc TransactionInitiator.h \ - Url.cc Url.h UrlLogin.cc UrlLogin.h UrlPath.cc UrlPath.h \ - UrlPort.cc UrlPort.h UserData.cc UserData.h AclDenyInfoList.h \ - Gadgets.cc Gadgets.h AclSizeLimit.cc AclSizeLimit.h \ - $(am__append_2) $(am__append_3) $(am__append_4) + SquidError.cc SquidError.h SquidErrorData.cc SquidErrorData.h \ + StringData.cc StringData.h Tag.cc Tag.h Time.cc Time.h \ + TimeData.cc TimeData.h TransactionInitiator.cc \ + TransactionInitiator.h Url.cc Url.h UrlLogin.cc UrlLogin.h \ + UrlPath.cc UrlPath.h UrlPort.cc UrlPort.h UserData.cc \ + UserData.h $(am__append_2) $(am__append_3) $(am__append_4) EXTRA_libacls_la_SOURCES = $(SSL_ACLS) $(ADAPT_ACLS) $(ARP_ACLS) SSL_ACLS = \ CertificateData.cc \ diff -u -r -N squid-5.0.5/src/acl/SquidError.cc squid-5.0.6/src/acl/SquidError.cc --- squid-5.0.5/src/acl/SquidError.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/SquidError.cc 2021-05-10 21:02:34.000000000 +1200 @@ -17,7 +17,7 @@ if (checklist->requestErrorType != ERR_MAX) return data->match(checklist->requestErrorType); else if (checklist->request) - return data->match(checklist->request->errType); + return data->match(checklist->request->error.category); return 0; } diff -u -r -N squid-5.0.5/src/acl/SquidErrorData.cc squid-5.0.6/src/acl/SquidErrorData.cc --- squid-5.0.5/src/acl/SquidErrorData.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/SquidErrorData.cc 2021-05-10 21:02:34.000000000 +1200 @@ -12,7 +12,7 @@ #include "cache_cf.h" #include "ConfigParser.h" #include "Debug.h" -#include "err_type.h" +#include "error/Error.h" #include "fatal.h" #include "wordlist.h" diff -u -r -N squid-5.0.5/src/acl/SquidErrorData.h squid-5.0.6/src/acl/SquidErrorData.h --- squid-5.0.5/src/acl/SquidErrorData.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/SquidErrorData.h 2021-05-10 21:02:34.000000000 +1200 @@ -11,7 +11,7 @@ #include "acl/Data.h" #include "base/CbDataList.h" -#include "err_type.h" +#include "error/forward.h" /// \ingroup ACLAPI class ACLSquidErrorData : public ACLData diff -u -r -N squid-5.0.5/src/acl/SquidError.h squid-5.0.6/src/acl/SquidError.h --- squid-5.0.5/src/acl/SquidError.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/acl/SquidError.h 2021-05-10 21:02:34.000000000 +1200 @@ -10,7 +10,7 @@ #define SQUID_ACLSQUIDERROR_H #include "acl/Strategy.h" -#include "err_type.h" +#include "error/forward.h" class ACLSquidErrorStrategy : public ACLStrategy { diff -u -r -N squid-5.0.5/src/adaptation/ecap/Makefile.am squid-5.0.6/src/adaptation/ecap/Makefile.am --- squid-5.0.5/src/adaptation/ecap/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/adaptation/ecap/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,18 +11,17 @@ noinst_LTLIBRARIES = libecapsquid.la libecapsquid_la_SOURCES = \ - Config.h \ Config.cc \ - Host.h \ + Config.h \ Host.cc \ - MessageRep.h \ + Host.h \ MessageRep.cc \ - ServiceRep.h \ + MessageRep.h \ + Registry.h \ ServiceRep.cc \ - XactionRep.h \ + ServiceRep.h \ XactionRep.cc \ - \ - Registry.h + XactionRep.h # add libecap using its pkg-config-produced configuration variables libecapsquid_la_CXXFLAGS = $(EXT_LIBECAP_CFLAGS) diff -u -r -N squid-5.0.5/src/adaptation/ecap/Makefile.in squid-5.0.6/src/adaptation/ecap/Makefile.in --- squid-5.0.5/src/adaptation/ecap/Makefile.in 2021-02-08 13:40:46.000000000 +1300 +++ squid-5.0.6/src/adaptation/ecap/Makefile.in 2021-05-10 22:57:53.000000000 +1200 @@ -739,18 +739,17 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libecapsquid.la libecapsquid_la_SOURCES = \ - Config.h \ Config.cc \ - Host.h \ + Config.h \ Host.cc \ - MessageRep.h \ + Host.h \ MessageRep.cc \ - ServiceRep.h \ + MessageRep.h \ + Registry.h \ ServiceRep.cc \ - XactionRep.h \ + ServiceRep.h \ XactionRep.cc \ - \ - Registry.h + XactionRep.h # add libecap using its pkg-config-produced configuration variables diff -u -r -N squid-5.0.5/src/adaptation/icap/Makefile.am squid-5.0.6/src/adaptation/icap/Makefile.am --- squid-5.0.5/src/adaptation/icap/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/adaptation/icap/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -13,24 +13,24 @@ libicap_la_SOURCES = \ Client.cc \ Client.h \ - InOut.h \ Config.cc \ Config.h \ Elements.cc \ Elements.h \ - Options.cc \ - Options.h \ - ServiceRep.cc \ - ServiceRep.h \ + History.cc \ + History.h \ + InOut.h \ Launcher.cc \ Launcher.h \ + ModXact.cc \ + ModXact.h \ OptXact.cc \ OptXact.h \ + Options.cc \ + Options.h \ + ServiceRep.cc \ + ServiceRep.h \ Xaction.cc \ Xaction.h \ - ModXact.cc \ - ModXact.h \ icap_log.cc \ - icap_log.h \ - History.cc \ - History.h + icap_log.h diff -u -r -N squid-5.0.5/src/adaptation/icap/Makefile.in squid-5.0.6/src/adaptation/icap/Makefile.in --- squid-5.0.5/src/adaptation/icap/Makefile.in 2021-02-08 13:40:46.000000000 +1300 +++ squid-5.0.6/src/adaptation/icap/Makefile.in 2021-05-10 22:57:53.000000000 +1200 @@ -164,9 +164,9 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libicap_la_LIBADD = -am_libicap_la_OBJECTS = Client.lo Config.lo Elements.lo Options.lo \ - ServiceRep.lo Launcher.lo OptXact.lo Xaction.lo ModXact.lo \ - icap_log.lo History.lo +am_libicap_la_OBJECTS = Client.lo Config.lo Elements.lo History.lo \ + Launcher.lo ModXact.lo OptXact.lo Options.lo ServiceRep.lo \ + Xaction.lo icap_log.lo libicap_la_OBJECTS = $(am_libicap_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -737,27 +737,27 @@ libicap_la_SOURCES = \ Client.cc \ Client.h \ - InOut.h \ Config.cc \ Config.h \ Elements.cc \ Elements.h \ - Options.cc \ - Options.h \ - ServiceRep.cc \ - ServiceRep.h \ + History.cc \ + History.h \ + InOut.h \ Launcher.cc \ Launcher.h \ + ModXact.cc \ + ModXact.h \ OptXact.cc \ OptXact.h \ + Options.cc \ + Options.h \ + ServiceRep.cc \ + ServiceRep.h \ Xaction.cc \ Xaction.h \ - ModXact.cc \ - ModXact.h \ icap_log.cc \ - icap_log.h \ - History.cc \ - History.h + icap_log.h all: all-am diff -u -r -N squid-5.0.5/src/adaptation/icap/ModXact.cc squid-5.0.6/src/adaptation/icap/ModXact.cc --- squid-5.0.5/src/adaptation/icap/ModXact.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/adaptation/icap/ModXact.cc 2021-05-10 21:02:34.000000000 +1200 @@ -24,7 +24,8 @@ #include "base64.h" #include "comm.h" #include "comm/Connection.h" -#include "err_detail_type.h" +#include "error/Detail.h" +#include "error/ExceptionErrorDetail.h" #include "http/ContentLengthInterpreter.h" #include "HttpHeaderTools.h" #include "HttpReply.h" @@ -670,9 +671,9 @@ if (!canStartBypass || isRetriable) { if (!isRetriable) { if (const TextException *te = dynamic_cast(&e)) - detailError(ERR_DETAIL_EXCEPTION_START + te->id()); + detailError(new ExceptionErrorDetail(te->id())); else - detailError(ERR_DETAIL_EXCEPTION_OTHER); + detailError(new ExceptionErrorDetail(Here().id())); } Adaptation::Icap::Xaction::callException(e); return; @@ -683,10 +684,10 @@ e.what() << ' ' << status()); bypassFailure(); } catch (const TextException &bypassTe) { - detailError(ERR_DETAIL_EXCEPTION_START + bypassTe.id()); + detailError(new ExceptionErrorDetail(bypassTe.id())); Adaptation::Icap::Xaction::callException(bypassTe); } catch (const std::exception &bypassE) { - detailError(ERR_DETAIL_EXCEPTION_OTHER); + detailError(new ExceptionErrorDetail(Here().id())); Adaptation::Icap::Xaction::callException(bypassE); } } @@ -1281,7 +1282,8 @@ // adapted body consumer aborted void Adaptation::Icap::ModXact::noteBodyConsumerAborted(BodyPipe::Pointer) { - detailError(ERR_DETAIL_ICAP_XACT_BODY_CONSUMER_ABORT); + static const auto d = MakeNamedErrorDetail("ICAP_XACT_BODY_CONSUMER_ABORT"); + detailError(d); mustStop("adapted body consumer aborted"); } @@ -1299,8 +1301,10 @@ stopWriting(false); stopSending(false); - if (theInitiator.set()) // we have not sent the answer to the initiator - detailError(ERR_DETAIL_ICAP_XACT_OTHER); + if (theInitiator.set()) { // we have not sent the answer to the initiator + static const auto d = MakeNamedErrorDetail("ICAP_XACT_OTHER"); + detailError(d); + } // update adaptation history if start was called and we reserved a slot Adaptation::History::Pointer ah = virginRequest().adaptLogHistory(); @@ -1989,7 +1993,7 @@ return true; } -void Adaptation::Icap::ModXact::detailError(int errDetail) +void Adaptation::Icap::ModXact::detailError(const ErrorDetail::Pointer &errDetail) { HttpRequest *request = dynamic_cast(adapted.header); // if no adapted request, update virgin (and inherit its properties later) diff -u -r -N squid-5.0.5/src/adaptation/icap/ModXact.h squid-5.0.6/src/adaptation/icap/ModXact.h --- squid-5.0.5/src/adaptation/icap/ModXact.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/adaptation/icap/ModXact.h 2021-05-10 21:02:34.000000000 +1200 @@ -174,7 +174,7 @@ virtual void callException(const std::exception &e); /// record error detail in the virgin request if possible - virtual void detailError(int errDetail); + virtual void detailError(const ErrorDetail::Pointer &errDetail); // Icap::Xaction API virtual void clearError(); /// The master transaction log entry diff -u -r -N squid-5.0.5/src/adaptation/icap/Xaction.cc squid-5.0.6/src/adaptation/icap/Xaction.cc --- squid-5.0.5/src/adaptation/icap/Xaction.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/adaptation/icap/Xaction.cc 2021-05-10 21:02:34.000000000 +1200 @@ -20,7 +20,7 @@ #include "comm/Read.h" #include "comm/Write.h" #include "CommCalls.h" -#include "err_detail_type.h" +#include "error/Detail.h" #include "fde.h" #include "FwdState.h" #include "globals.h" @@ -324,7 +324,8 @@ debugs(93, 2, HERE << typeName << " failed to connect to " << service().cfg().uri); service().noteConnectionFailed("failure"); - detailError(ERR_DETAIL_ICAP_XACT_START); + static const auto d = MakeNamedErrorDetail("ICAP_XACT_START"); + detailError(d); throw TexcHere("cannot connect to the ICAP service"); } @@ -394,7 +395,8 @@ void Adaptation::Icap::Xaction::handleCommClosed() { - detailError(ERR_DETAIL_ICAP_XACT_CLOSE); + static const auto d = MakeNamedErrorDetail("ICAP_XACT_CLOSE"); + detailError(d); mustStop("ICAP service connection externally closed"); } @@ -575,7 +577,8 @@ if (theInitiator.set()) { debugs(93,4, HERE << "Initiator gone before ICAP transaction ended"); clearInitiator(); - detailError(ERR_DETAIL_ICAP_INIT_GONE); + static const auto d = MakeNamedErrorDetail("ICAP_INIT_GONE"); + detailError(d); setOutcome(xoGone); mustStop("initiator aborted"); } @@ -754,7 +757,8 @@ debugs(93, 2, typeName << " TLS negotiation to " << service().cfg().uri << " failed"); service().noteConnectionFailed("failure"); - detailError(ERR_DETAIL_ICAP_XACT_SSL_START); + static const auto d = MakeNamedErrorDetail("ICAP_XACT_SSL_START"); + detailError(d); throw TexcHere("cannot connect to the TLS ICAP service"); } diff -u -r -N squid-5.0.5/src/adaptation/icap/Xaction.h squid-5.0.6/src/adaptation/icap/Xaction.h --- squid-5.0.5/src/adaptation/icap/Xaction.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/adaptation/icap/Xaction.h 2021-05-10 21:02:34.000000000 +1200 @@ -13,6 +13,7 @@ #include "adaptation/icap/ServiceRep.h" #include "adaptation/Initiate.h" #include "comm/ConnOpener.h" +#include "error/forward.h" #include "HttpReply.h" #include "ipcache.h" #include "sbuf/SBuf.h" @@ -73,7 +74,7 @@ void handleSecuredPeer(Security::EncryptorAnswer &answer); /// record error detail if possible - virtual void detailError(int) {} + virtual void detailError(const ErrorDetailPointer &) {} void openConnection(); void closeConnection(); diff -u -r -N squid-5.0.5/src/adaptation/Makefile.am squid-5.0.6/src/adaptation/Makefile.am --- squid-5.0.5/src/adaptation/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/adaptation/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -26,7 +26,8 @@ DynamicGroupCfg.h \ Elements.cc \ Elements.h \ - forward.h \ + History.cc \ + History.h \ Initiate.cc \ Initiate.h \ Initiator.cc \ @@ -39,12 +40,11 @@ Service.h \ ServiceConfig.cc \ ServiceConfig.h \ - ServiceGroups.cc \ - ServiceGroups.h \ ServiceFilter.cc \ ServiceFilter.h \ - History.cc \ - History.h + ServiceGroups.cc \ + ServiceGroups.h \ + forward.h libadaptation_la_LIBADD = diff -u -r -N squid-5.0.5/src/adaptation/Makefile.in squid-5.0.6/src/adaptation/Makefile.in --- squid-5.0.5/src/adaptation/Makefile.in 2021-02-08 13:40:46.000000000 +1300 +++ squid-5.0.6/src/adaptation/Makefile.in 2021-05-10 22:57:53.000000000 +1200 @@ -169,9 +169,9 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) libadaptation_la_DEPENDENCIES = $(am__append_3) $(am__append_5) am_libadaptation_la_OBJECTS = AccessCheck.lo AccessRule.lo Answer.lo \ - Config.lo DynamicGroupCfg.lo Elements.lo Initiate.lo \ - Initiator.lo Iterator.lo Message.lo Service.lo \ - ServiceConfig.lo ServiceGroups.lo ServiceFilter.lo History.lo + Config.lo DynamicGroupCfg.lo Elements.lo History.lo \ + Initiate.lo Initiator.lo Iterator.lo Message.lo Service.lo \ + ServiceConfig.lo ServiceFilter.lo ServiceGroups.lo libadaptation_la_OBJECTS = $(am_libadaptation_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -796,7 +796,8 @@ DynamicGroupCfg.h \ Elements.cc \ Elements.h \ - forward.h \ + History.cc \ + History.h \ Initiate.cc \ Initiate.h \ Initiator.cc \ @@ -809,12 +810,11 @@ Service.h \ ServiceConfig.cc \ ServiceConfig.h \ - ServiceGroups.cc \ - ServiceGroups.h \ ServiceFilter.cc \ ServiceFilter.h \ - History.cc \ - History.h + ServiceGroups.cc \ + ServiceGroups.h \ + forward.h libadaptation_la_LIBADD = $(am__append_3) $(am__append_5) all: all-recursive diff -u -r -N squid-5.0.5/src/anyp/Makefile.am squid-5.0.6/src/anyp/Makefile.am --- squid-5.0.5/src/anyp/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/anyp/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,7 +11,6 @@ noinst_LTLIBRARIES = libanyp.la libanyp_la_SOURCES = \ - forward.h \ PortCfg.cc \ PortCfg.h \ ProtocolType.cc \ @@ -21,7 +20,8 @@ Uri.cc \ Uri.h \ UriScheme.cc \ - UriScheme.h + UriScheme.h \ + forward.h ProtocolType.cc: ProtocolType.h $(top_srcdir)/src/mk-string-arrays.awk ($(AWK) -f $(top_srcdir)/src/mk-string-arrays.awk <$(srcdir)/ProtocolType.h | sed -e 's%PROTO_%%' >$@) || ($(RM) -f $@ && exit 1) diff -u -r -N squid-5.0.5/src/anyp/Makefile.in squid-5.0.6/src/anyp/Makefile.in --- squid-5.0.5/src/anyp/Makefile.in 2021-02-08 13:40:46.000000000 +1300 +++ squid-5.0.6/src/anyp/Makefile.in 2021-05-10 22:57:53.000000000 +1200 @@ -730,7 +730,6 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libanyp.la libanyp_la_SOURCES = \ - forward.h \ PortCfg.cc \ PortCfg.h \ ProtocolType.cc \ @@ -740,7 +739,8 @@ Uri.cc \ Uri.h \ UriScheme.cc \ - UriScheme.h + UriScheme.h \ + forward.h all: all-am diff -u -r -N squid-5.0.5/src/auth/basic/DB/basic_db_auth.8 squid-5.0.6/src/auth/basic/DB/basic_db_auth.8 --- squid-5.0.5/src/auth/basic/DB/basic_db_auth.8 2021-02-08 13:46:38.000000000 +1300 +++ squid-5.0.6/src/auth/basic/DB/basic_db_auth.8 2021-05-10 23:02:23.000000000 +1200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "BASIC_DB_AUTH 8" -.TH BASIC_DB_AUTH 8 "2021-02-08" "perl v5.32.0" "User Contributed Perl Documentation" +.TH BASIC_DB_AUTH 8 "2021-05-10" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -u -r -N squid-5.0.5/src/auth/basic/LDAP/Makefile.am squid-5.0.6/src/auth/basic/LDAP/Makefile.am --- squid-5.0.5/src/auth/basic/LDAP/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/basic/LDAP/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -10,7 +10,7 @@ libexec_PROGRAMS = basic_ldap_auth man_MANS = basic_ldap_auth.8 EXTRA_DIST = basic_ldap_auth.8 required.m4 -basic_ldap_auth_SOURCES = basic_ldap_auth.cc +basic_ldap_auth_SOURCES = basic_ldap_auth.cc basic_ldap_auth_LDADD = \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/src/auth/basic/NCSA/Makefile.am squid-5.0.6/src/auth/basic/NCSA/Makefile.am --- squid-5.0.5/src/auth/basic/NCSA/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/basic/NCSA/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,7 +11,7 @@ man_MANS = basic_ncsa_auth.8 EXTRA_DIST = basic_ncsa_auth.8 required.m4 -basic_ncsa_auth_SOURCES= \ +basic_ncsa_auth_SOURCES = \ basic_ncsa_auth.cc \ crypt_md5.cc \ crypt_md5.h diff -u -r -N squid-5.0.5/src/auth/basic/NIS/Makefile.am squid-5.0.6/src/auth/basic/NIS/Makefile.am --- squid-5.0.5/src/auth/basic/NIS/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/basic/NIS/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -9,10 +9,10 @@ libexec_PROGRAMS = basic_nis_auth -basic_nis_auth_SOURCES= \ +basic_nis_auth_SOURCES = \ basic_nis_auth.cc \ - nis_support.h \ - nis_support.cc + nis_support.cc \ + nis_support.h basic_nis_auth_LDADD= \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/src/auth/basic/NIS/Makefile.in squid-5.0.6/src/auth/basic/NIS/Makefile.in --- squid-5.0.5/src/auth/basic/NIS/Makefile.in 2021-02-08 13:40:46.000000000 +1300 +++ squid-5.0.6/src/auth/basic/NIS/Makefile.in 2021-05-10 22:57:54.000000000 +1200 @@ -735,8 +735,8 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) basic_nis_auth_SOURCES = \ basic_nis_auth.cc \ - nis_support.h \ - nis_support.cc + nis_support.cc \ + nis_support.h basic_nis_auth_LDADD = \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/src/auth/basic/PAM/Makefile.am squid-5.0.6/src/auth/basic/PAM/Makefile.am --- squid-5.0.5/src/auth/basic/PAM/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/basic/PAM/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,7 +11,7 @@ EXTRA_DIST = basic_pam_auth.8 required.m4 libexec_PROGRAMS = basic_pam_auth -basic_pam_auth_SOURCES = basic_pam_auth.cc +basic_pam_auth_SOURCES = basic_pam_auth.cc basic_pam_auth_LDADD = \ $(top_builddir)/lib/libmiscencoding.la \ $(COMPAT_LIB) \ diff -u -r -N squid-5.0.5/src/auth/basic/POP3/basic_pop3_auth.8 squid-5.0.6/src/auth/basic/POP3/basic_pop3_auth.8 --- squid-5.0.5/src/auth/basic/POP3/basic_pop3_auth.8 2021-02-08 13:46:39.000000000 +1300 +++ squid-5.0.6/src/auth/basic/POP3/basic_pop3_auth.8 2021-05-10 23:02:23.000000000 +1200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "BASIC_POP3_AUTH 8" -.TH BASIC_POP3_AUTH 8 "2021-02-08" "perl v5.32.0" "User Contributed Perl Documentation" +.TH BASIC_POP3_AUTH 8 "2021-05-10" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -u -r -N squid-5.0.5/src/auth/basic/RADIUS/Makefile.am squid-5.0.6/src/auth/basic/RADIUS/Makefile.am --- squid-5.0.5/src/auth/basic/RADIUS/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/basic/RADIUS/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,11 +11,11 @@ man_MANS = basic_radius_auth.8 EXTRA_DIST = basic_radius_auth.8 required.m4 -basic_radius_auth_SOURCES= \ +basic_radius_auth_SOURCES = \ basic_radius_auth.cc \ - radius.h \ radius-util.cc \ - radius-util.h + radius-util.h \ + radius.h basic_radius_auth_LDADD= \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/src/auth/basic/RADIUS/Makefile.in squid-5.0.6/src/auth/basic/RADIUS/Makefile.in --- squid-5.0.5/src/auth/basic/RADIUS/Makefile.in 2021-02-08 13:40:46.000000000 +1300 +++ squid-5.0.6/src/auth/basic/RADIUS/Makefile.in 2021-05-10 22:57:54.000000000 +1200 @@ -742,9 +742,9 @@ EXTRA_DIST = basic_radius_auth.8 required.m4 basic_radius_auth_SOURCES = \ basic_radius_auth.cc \ - radius.h \ radius-util.cc \ - radius-util.h + radius-util.h \ + radius.h basic_radius_auth_LDADD = \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/src/auth/basic/SASL/Makefile.am squid-5.0.6/src/auth/basic/SASL/Makefile.am --- squid-5.0.5/src/auth/basic/SASL/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/basic/SASL/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -10,7 +10,7 @@ man_MANS= basic_sasl_auth.8 libexec_PROGRAMS= basic_sasl_auth -basic_sasl_auth_SOURCES= \ +basic_sasl_auth_SOURCES = \ basic_sasl_auth.cc basic_sasl_auth_LDADD= \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/src/auth/basic/SMB/Makefile.am squid-5.0.6/src/auth/basic/SMB/Makefile.am --- squid-5.0.5/src/auth/basic/SMB/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/basic/SMB/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -12,7 +12,7 @@ libexec_PROGRAMS = basic_smb_auth endif -basic_smb_auth_SOURCES= basic_smb_auth.cc +basic_smb_auth_SOURCES = basic_smb_auth.cc basic_smb_auth_CXXFLAGS = -DHELPERSCRIPT=\"$(libexecdir)/basic_smb_auth.sh\" basic_smb_auth_LDADD = \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/src/auth/basic/SMB_LM/Makefile.am squid-5.0.6/src/auth/basic/SMB_LM/Makefile.am --- squid-5.0.5/src/auth/basic/SMB_LM/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/basic/SMB_LM/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -9,7 +9,7 @@ libexec_PROGRAMS= basic_smb_lm_auth -basic_smb_lm_auth_SOURCES= \ +basic_smb_lm_auth_SOURCES = \ msntauth.cc \ msntauth.h \ valid.cc \ diff -u -r -N squid-5.0.5/src/auth/basic/SSPI/Makefile.am squid-5.0.6/src/auth/basic/SSPI/Makefile.am --- squid-5.0.5/src/auth/basic/SSPI/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/basic/SSPI/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -13,7 +13,8 @@ basic_sspi_auth_SOURCES = \ basic_sspi_auth.cc \ - valid.cc valid.h + valid.cc \ + valid.h basic_sspi_auth_CXXFLAGS = -Wl,--enable-auto-import basic_sspi_auth_LDADD = \ $(top_builddir)/lib/libsspwin32.la \ diff -u -r -N squid-5.0.5/src/auth/basic/SSPI/Makefile.in squid-5.0.6/src/auth/basic/SSPI/Makefile.in --- squid-5.0.5/src/auth/basic/SSPI/Makefile.in 2021-02-08 13:40:46.000000000 +1300 +++ squid-5.0.6/src/auth/basic/SSPI/Makefile.in 2021-05-10 22:57:54.000000000 +1200 @@ -744,7 +744,8 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) basic_sspi_auth_SOURCES = \ basic_sspi_auth.cc \ - valid.cc valid.h + valid.cc \ + valid.h basic_sspi_auth_CXXFLAGS = -Wl,--enable-auto-import basic_sspi_auth_LDADD = \ diff -u -r -N squid-5.0.5/src/auth/digest/eDirectory/Makefile.am squid-5.0.6/src/auth/digest/eDirectory/Makefile.am --- squid-5.0.5/src/auth/digest/eDirectory/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/digest/eDirectory/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -9,13 +9,13 @@ libexec_PROGRAMS= digest_edirectory_auth -digest_edirectory_auth_SOURCES= \ - digest_pw_auth.cc \ +digest_edirectory_auth_SOURCES = \ digest_common.h \ - ldap_backend.cc \ - ldap_backend.h \ + digest_pw_auth.cc \ edir_ldapext.cc \ - edir_ldapext.h + edir_ldapext.h \ + ldap_backend.cc \ + ldap_backend.h digest_edirectory_auth_LDADD = \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/src/auth/digest/eDirectory/Makefile.in squid-5.0.6/src/auth/digest/eDirectory/Makefile.in --- squid-5.0.5/src/auth/digest/eDirectory/Makefile.in 2021-02-08 13:40:46.000000000 +1300 +++ squid-5.0.6/src/auth/digest/eDirectory/Makefile.in 2021-05-10 22:57:54.000000000 +1200 @@ -167,7 +167,7 @@ am__installdirs = "$(DESTDIR)$(libexecdir)" PROGRAMS = $(libexec_PROGRAMS) am_digest_edirectory_auth_OBJECTS = digest_pw_auth.$(OBJEXT) \ - ldap_backend.$(OBJEXT) edir_ldapext.$(OBJEXT) + edir_ldapext.$(OBJEXT) ldap_backend.$(OBJEXT) digest_edirectory_auth_OBJECTS = $(am_digest_edirectory_auth_OBJECTS) @ENABLE_XPROF_STATS_TRUE@am__DEPENDENCIES_1 = $(top_builddir)/lib/profiler/libprofiler.la am__DEPENDENCIES_2 = $(top_builddir)/compat/libcompatsquid.la \ @@ -736,12 +736,12 @@ COMPAT_LIB = $(top_builddir)/compat/libcompatsquid.la $(LIBPROFILER) subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) digest_edirectory_auth_SOURCES = \ - digest_pw_auth.cc \ digest_common.h \ - ldap_backend.cc \ - ldap_backend.h \ + digest_pw_auth.cc \ edir_ldapext.cc \ - edir_ldapext.h + edir_ldapext.h \ + ldap_backend.cc \ + ldap_backend.h digest_edirectory_auth_LDADD = \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/src/auth/digest/file/Makefile.am squid-5.0.6/src/auth/digest/file/Makefile.am --- squid-5.0.5/src/auth/digest/file/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/digest/file/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -10,7 +10,7 @@ man_MANS= digest_file_auth.8 libexec_PROGRAMS= digest_file_auth -digest_file_auth_SOURCES= \ +digest_file_auth_SOURCES = \ digest_common.h \ digest_file_auth.cc \ text_backend.cc \ diff -u -r -N squid-5.0.5/src/auth/digest/LDAP/Makefile.am squid-5.0.6/src/auth/digest/LDAP/Makefile.am --- squid-5.0.5/src/auth/digest/LDAP/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/digest/LDAP/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -9,7 +9,7 @@ libexec_PROGRAMS= digest_ldap_auth -digest_ldap_auth_SOURCES= \ +digest_ldap_auth_SOURCES = \ digest_common.h \ digest_pw_auth.cc \ ldap_backend.cc \ diff -u -r -N squid-5.0.5/src/auth/digest/Makefile.am squid-5.0.6/src/auth/digest/Makefile.am --- squid-5.0.5/src/auth/digest/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/digest/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -14,7 +14,7 @@ noinst_LTLIBRARIES= libdigest.la -libdigest_la_SOURCES= \ +libdigest_la_SOURCES = \ Config.cc \ Config.h \ Scheme.cc \ diff -u -r -N squid-5.0.5/src/auth/Makefile.am squid-5.0.6/src/auth/Makefile.am --- squid-5.0.5/src/auth/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -17,15 +17,12 @@ ## authentication framework; this library is always built libauth_la_SOURCES = \ - Type.h \ - Type.cc \ Config.cc \ Config.h \ - CredentialsCache.h \ - CredentialsCache.cc \ CredentialState.cc \ CredentialState.h \ - forward.h \ + CredentialsCache.cc \ + CredentialsCache.h \ Gadgets.cc \ Gadgets.h \ QueueNode.h \ @@ -33,16 +30,19 @@ Scheme.h \ SchemeConfig.cc \ SchemeConfig.h \ - SchemesConfig.h \ SchemesConfig.cc \ - State.h \ + SchemesConfig.h \ State.cc \ - toUtf.h \ - toUtf.cc \ - User.h \ + State.h \ + Type.cc \ + Type.h \ User.cc \ + User.h \ + UserRequest.cc \ UserRequest.h \ - UserRequest.cc + forward.h \ + toUtf.cc \ + toUtf.h libauth_la_LIBADD = $(AUTH_LIBS_TO_BUILD) libauth_la_DEPENDENCIES = $(AUTH_LIBS_TO_BUILD) @@ -51,7 +51,6 @@ libacls_la_SOURCES = \ Acl.cc \ Acl.h \ - \ AclMaxUserIp.cc \ AclMaxUserIp.h \ AclProxyAuth.cc \ diff -u -r -N squid-5.0.5/src/auth/Makefile.in squid-5.0.6/src/auth/Makefile.in --- squid-5.0.5/src/auth/Makefile.in 2021-02-08 13:40:46.000000000 +1300 +++ squid-5.0.6/src/auth/Makefile.in 2021-05-10 22:57:53.000000000 +1200 @@ -171,9 +171,10 @@ am__v_lt_0 = --silent am__v_lt_1 = am__DEPENDENCIES_1 = -am_libauth_la_OBJECTS = Type.lo Config.lo CredentialsCache.lo \ - CredentialState.lo Gadgets.lo Scheme.lo SchemeConfig.lo \ - SchemesConfig.lo State.lo toUtf.lo User.lo UserRequest.lo +am_libauth_la_OBJECTS = Config.lo CredentialState.lo \ + CredentialsCache.lo Gadgets.lo Scheme.lo SchemeConfig.lo \ + SchemesConfig.lo State.lo Type.lo User.lo UserRequest.lo \ + toUtf.lo libauth_la_OBJECTS = $(am_libauth_la_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) @@ -782,15 +783,12 @@ DIST_SUBDIRS = basic digest negotiate ntlm noinst_LTLIBRARIES = libauth.la libacls.la libauth_la_SOURCES = \ - Type.h \ - Type.cc \ Config.cc \ Config.h \ - CredentialsCache.h \ - CredentialsCache.cc \ CredentialState.cc \ CredentialState.h \ - forward.h \ + CredentialsCache.cc \ + CredentialsCache.h \ Gadgets.cc \ Gadgets.h \ QueueNode.h \ @@ -798,23 +796,25 @@ Scheme.h \ SchemeConfig.cc \ SchemeConfig.h \ - SchemesConfig.h \ SchemesConfig.cc \ - State.h \ + SchemesConfig.h \ State.cc \ - toUtf.h \ - toUtf.cc \ - User.h \ + State.h \ + Type.cc \ + Type.h \ User.cc \ + User.h \ + UserRequest.cc \ UserRequest.h \ - UserRequest.cc + forward.h \ + toUtf.cc \ + toUtf.h libauth_la_LIBADD = $(AUTH_LIBS_TO_BUILD) libauth_la_DEPENDENCIES = $(AUTH_LIBS_TO_BUILD) libacls_la_SOURCES = \ Acl.cc \ Acl.h \ - \ AclMaxUserIp.cc \ AclMaxUserIp.h \ AclProxyAuth.cc \ diff -u -r -N squid-5.0.5/src/auth/negotiate/kerberos/Makefile.am squid-5.0.6/src/auth/negotiate/kerberos/Makefile.am --- squid-5.0.5/src/auth/negotiate/kerberos/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/negotiate/kerberos/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -18,10 +18,10 @@ AM_CPPFLAGS += -I$(srcdir) -negotiate_kerberos_auth_SOURCES= \ +negotiate_kerberos_auth_SOURCES = \ + negotiate_kerberos.h \ negotiate_kerberos_auth.cc \ - negotiate_kerberos_pac.cc \ - negotiate_kerberos.h + negotiate_kerberos_pac.cc negotiate_kerberos_auth_LDFLAGS= negotiate_kerberos_auth_LDADD= \ $(top_builddir)/lib/libmiscencoding.la \ @@ -30,7 +30,7 @@ $(KRB5LIBS) \ $(XTRA_LIBS) -negotiate_kerberos_auth_test_SOURCES= \ +negotiate_kerberos_auth_test_SOURCES = \ negotiate_kerberos_auth_test.cc negotiate_kerberos_auth_test_LDFLAGS= negotiate_kerberos_auth_test_LDADD= \ diff -u -r -N squid-5.0.5/src/auth/negotiate/kerberos/Makefile.in squid-5.0.6/src/auth/negotiate/kerberos/Makefile.in --- squid-5.0.5/src/auth/negotiate/kerberos/Makefile.in 2021-02-08 13:40:46.000000000 +1300 +++ squid-5.0.6/src/auth/negotiate/kerberos/Makefile.in 2021-05-10 22:57:54.000000000 +1200 @@ -766,9 +766,9 @@ negotiate_kerberos_auth.8 negotiate_kerberos_auth_SOURCES = \ + negotiate_kerberos.h \ negotiate_kerberos_auth.cc \ - negotiate_kerberos_pac.cc \ - negotiate_kerberos.h + negotiate_kerberos_pac.cc negotiate_kerberos_auth_LDFLAGS = negotiate_kerberos_auth_LDADD = \ diff -u -r -N squid-5.0.5/src/auth/negotiate/Makefile.am squid-5.0.6/src/auth/negotiate/Makefile.am --- squid-5.0.5/src/auth/negotiate/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/negotiate/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -15,10 +15,10 @@ noinst_LTLIBRARIES = libnegotiate.la libnegotiate_la_SOURCES = \ - Scheme.cc \ - Scheme.h \ Config.cc \ Config.h \ + Scheme.cc \ + Scheme.h \ User.cc \ User.h \ UserRequest.cc \ diff -u -r -N squid-5.0.5/src/auth/negotiate/Makefile.in squid-5.0.6/src/auth/negotiate/Makefile.in --- squid-5.0.5/src/auth/negotiate/Makefile.in 2021-02-08 13:40:46.000000000 +1300 +++ squid-5.0.6/src/auth/negotiate/Makefile.in 2021-05-10 22:57:54.000000000 +1200 @@ -164,7 +164,7 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libnegotiate_la_LIBADD = -am_libnegotiate_la_OBJECTS = Scheme.lo Config.lo User.lo \ +am_libnegotiate_la_OBJECTS = Config.lo Scheme.lo User.lo \ UserRequest.lo libnegotiate_la_OBJECTS = $(am_libnegotiate_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) @@ -773,10 +773,10 @@ EXTRA_DIST = helpers.m4 noinst_LTLIBRARIES = libnegotiate.la libnegotiate_la_SOURCES = \ - Scheme.cc \ - Scheme.h \ Config.cc \ Config.h \ + Scheme.cc \ + Scheme.h \ User.cc \ User.h \ UserRequest.cc \ diff -u -r -N squid-5.0.5/src/auth/negotiate/wrapper/Makefile.am squid-5.0.6/src/auth/negotiate/wrapper/Makefile.am --- squid-5.0.5/src/auth/negotiate/wrapper/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/negotiate/wrapper/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,7 +11,7 @@ libexec_PROGRAMS= negotiate_wrapper_auth -negotiate_wrapper_auth_SOURCES= \ +negotiate_wrapper_auth_SOURCES = \ negotiate_wrapper.cc negotiate_wrapper_auth_LDADD= \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/src/auth/ntlm/fake/Makefile.am squid-5.0.6/src/auth/ntlm/fake/Makefile.am --- squid-5.0.5/src/auth/ntlm/fake/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/ntlm/fake/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -9,7 +9,7 @@ libexec_PROGRAMS= ntlm_fake_auth -ntlm_fake_auth_SOURCES= ntlm_fake_auth.cc +ntlm_fake_auth_SOURCES = ntlm_fake_auth.cc ntlm_fake_auth_LDADD= \ $(top_builddir)/lib/ntlmauth/libntlmauth.la \ $(top_builddir)/lib/libmiscencoding.la \ diff -u -r -N squid-5.0.5/src/auth/ntlm/SSPI/Makefile.am squid-5.0.6/src/auth/ntlm/SSPI/Makefile.am --- squid-5.0.5/src/auth/ntlm/SSPI/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/auth/ntlm/SSPI/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -10,7 +10,7 @@ man_MANS= ntlm_sspi_auth.8 libexec_PROGRAMS= ntlm_sspi_auth -ntlm_sspi_auth_SOURCES= ntlm_sspi_auth.cc +ntlm_sspi_auth_SOURCES = ntlm_sspi_auth.cc ntlm_sspi_auth_LDADD= \ $(top_builddir)/lib/ntlmauth/libntlmauth.la \ $(top_builddir)/lib/libsspwin32.la \ diff -u -r -N squid-5.0.5/src/base/Makefile.am squid-5.0.6/src/base/Makefile.am --- squid-5.0.5/src/base/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/base/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -20,8 +20,8 @@ AsyncJob.h \ AsyncJobCalls.h \ ByteCounter.h \ - CbcPointer.h \ CbDataList.h \ + CbcPointer.h \ CharacterSet.cc \ CharacterSet.h \ CodeContext.cc \ @@ -29,7 +29,6 @@ EnumIterator.h \ File.cc \ File.h \ - forward.h \ HardFun.h \ Here.cc \ Here.h \ @@ -49,4 +48,6 @@ Subscription.h \ TextException.cc \ TextException.h \ - YesNoNone.h + TypeTraits.h \ + YesNoNone.h \ + forward.h diff -u -r -N squid-5.0.5/src/base/Makefile.in squid-5.0.6/src/base/Makefile.in --- squid-5.0.5/src/base/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/base/Makefile.in 2021-05-10 22:57:54.000000000 +1200 @@ -744,8 +744,8 @@ AsyncJob.h \ AsyncJobCalls.h \ ByteCounter.h \ - CbcPointer.h \ CbDataList.h \ + CbcPointer.h \ CharacterSet.cc \ CharacterSet.h \ CodeContext.cc \ @@ -753,7 +753,6 @@ EnumIterator.h \ File.cc \ File.h \ - forward.h \ HardFun.h \ Here.cc \ Here.h \ @@ -773,7 +772,9 @@ Subscription.h \ TextException.cc \ TextException.h \ - YesNoNone.h + TypeTraits.h \ + YesNoNone.h \ + forward.h all: all-am diff -u -r -N squid-5.0.5/src/base/TextException.cc squid-5.0.6/src/base/TextException.cc --- squid-5.0.5/src/base/TextException.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/base/TextException.cc 2021-05-10 21:02:34.000000000 +1200 @@ -59,12 +59,22 @@ } std::ostream & +operator <<(std::ostream &os, const TextException &ex) +{ + ex.print(os); + return os; +} + +std::ostream & CurrentException(std::ostream &os) { if (std::current_exception()) { try { throw; // re-throw to recognize the exception type } + catch (const TextException &ex) { + os << ex; // optimization: this is a lot cheaper than what() below + } catch (const std::exception &ex) { os << ex.what(); } diff -u -r -N squid-5.0.5/src/base/TextException.h squid-5.0.6/src/base/TextException.h --- squid-5.0.5/src/base/TextException.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/base/TextException.h 2021-05-10 21:02:34.000000000 +1200 @@ -51,22 +51,26 @@ /// prints active (i.e., thrown but not yet handled) exception std::ostream &CurrentException(std::ostream &); +/// efficiently prints TextException +std::ostream &operator <<(std::ostream &, const TextException &); + /// legacy convenience macro; it is not difficult to type Here() now #define TexcHere(msg) TextException((msg), Here()) /// Like assert() but throws an exception instead of aborting the process -/// and allows the caller to specify a custom exception message. -#define Must2(condition, message) \ +/// and allows the caller to customize the exception message and location. +/// \param description string literal describing the condition; what MUST happen +#define Must3(condition, description, location) \ do { \ if (!(condition)) { \ - const TextException Must_ex_((message), Here()); \ + const TextException Must_ex_(("check failed: " description), (location)); \ debugs(0, 3, Must_ex_.what()); \ throw Must_ex_; \ } \ } while (/*CONSTCOND*/ false) /// Like assert() but throws an exception instead of aborting the process. -#define Must(condition) Must2((condition), "check failed: " #condition) +#define Must(condition) Must3((condition), #condition, Here()) /// Reports and swallows all exceptions to prevent compiler warnings and runtime /// errors related to throwing class destructors. Should be used for most dtors. diff -u -r -N squid-5.0.5/src/base/TypeTraits.h squid-5.0.6/src/base/TypeTraits.h --- squid-5.0.5/src/base/TypeTraits.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/base/TypeTraits.h 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,41 @@ +/* + * Copyright (C) 1996-2020 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +#ifndef SQUID_SRC_BASE_TYPETRAITS_H +#define SQUID_SRC_BASE_TYPETRAITS_H + +namespace TypeTraits_ { // a hack to prevent "unintended ADL" + +// TODO: Extract reusable paradigms into other mixins (e.g., NonCopyable). +/// convenience base for any class with pure virtual method(s) +class Interface +{ +public: + // ensures proper destruction via pointers to base interface classes + virtual ~Interface() = default; + + // prohibits copy/move assignment to prevent accidental object slicing + Interface &operator=(const Interface &) = delete; + Interface &operator=(Interface &&) = delete; + +protected: // prevents accidental creation of Interface instances + + // allows default-construction in kids + constexpr Interface() = default; + + // allows copy/move construction for kids convenience + Interface(const Interface &) = default; + Interface(Interface &&) = default; +}; + +} // namespace TypeTraits_ + +using Interface = TypeTraits_::Interface; + +#endif /* SQUID_SRC_BASE_TYPETRAITS_H */ + diff -u -r -N squid-5.0.5/src/cache_manager.cc squid-5.0.6/src/cache_manager.cc --- squid-5.0.5/src/cache_manager.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/cache_manager.cc 2021-05-10 21:02:34.000000000 +1200 @@ -15,6 +15,7 @@ #include "comm/Connection.h" #include "Debug.h" #include "errorpage.h" +#include "error/ExceptionErrorDetail.h" #include "fde.h" #include "HttpReply.h" #include "HttpRequest.h" @@ -27,7 +28,9 @@ #include "mgr/Forwarder.h" #include "mgr/FunAction.h" #include "mgr/QueryParams.h" +#include "parser/Tokenizer.h" #include "protos.h" +#include "sbuf/Stream.h" #include "sbuf/StringConvert.h" #include "SquidConfig.h" #include "SquidTime.h" @@ -148,82 +151,87 @@ return cmd->profile->creator->create(cmd); } +static const CharacterSet & +MgrFieldChars(const AnyP::ProtocolType &protocol) +{ + // Deprecated cache_object:// scheme used '@' to delimit passwords + if (protocol == AnyP::PROTO_CACHE_OBJECT) { + static const CharacterSet fieldChars = CharacterSet("cache-object-field", "@?#").complement(); + return fieldChars; + } + + static const CharacterSet actionChars = CharacterSet("mgr-field", "?#").complement(); + return actionChars; +} + /** - \ingroup CacheManagerInternal * define whether the URL is a cache-manager URL and parse the action * requested by the user. Checks via CacheManager::ActionProtection() that the * item is accessible by the user. - \retval CacheManager::cachemgrStateData state object for the following handling - \retval NULL if the action can't be found or can't be accessed by the user + * + * Syntax: + * + * scheme "://" authority [ '/squid-internal-mgr' ] path-absolute [ '@' unreserved ] '?' query-string + * + * see RFC 3986 for definitions of scheme, authority, path-absolute, query-string + * + * \returns Mgr::Command object with action to perform and parameters it might use */ Mgr::Command::Pointer -CacheManager::ParseUrl(const char *url) +CacheManager::ParseUrl(const AnyP::Uri &uri) { - int t; - LOCAL_ARRAY(char, host, MAX_URL); - LOCAL_ARRAY(char, request, MAX_URL); - LOCAL_ARRAY(char, password, MAX_URL); - LOCAL_ARRAY(char, params, MAX_URL); - host[0] = 0; - request[0] = 0; - password[0] = 0; - params[0] = 0; - int pos = -1; - int len = strlen(url); - Must(len > 0); - t = sscanf(url, "cache_object://%[^/]/%[^@?]%n@%[^?]?%s", host, request, &pos, password, params); - if (t < 3) { - t = sscanf(url, "cache_object://%[^/]/%[^?]%n?%s", host, request, &pos, params); - } - if (t < 1) { - t = sscanf(url, "http://%[^/]/squid-internal-mgr/%[^?]%n?%s", host, request, &pos, params); - } - if (t < 1) { - t = sscanf(url, "https://%[^/]/squid-internal-mgr/%[^?]%n?%s", host, request, &pos, params); - } - if (t < 2) { - if (strncmp("cache_object://",url,15)==0) - xstrncpy(request, "menu", MAX_URL); - else - xstrncpy(request, "index", MAX_URL); - } + Parser::Tokenizer tok(uri.path()); -#if _SQUID_OS2_ - if (t == 2 && request[0] == '\0') { - /* - * emx's sscanf insists of returning 2 because it sets request - * to null - */ - if (strncmp("cache_object://",url,15)==0) - xstrncpy(request, "menu", MAX_URL); - else - xstrncpy(request, "index", MAX_URL); - } -#endif + static const SBuf internalMagicPrefix("/squid-internal-mgr/"); + if (!tok.skip(internalMagicPrefix) && !tok.skip('/')) + throw TextException("invalid URL path", Here()); - debugs(16, 3, HERE << "MGR request: t=" << t << ", host='" << host << "', request='" << request << "', pos=" << pos << - ", password='" << password << "', params='" << params << "'"); + Mgr::Command::Pointer cmd = new Mgr::Command(); + cmd->params.httpUri = SBufToString(uri.absolute()); - Mgr::ActionProfile::Pointer profile = findAction(request); - if (!profile) { - debugs(16, DBG_IMPORTANT, "CacheManager::ParseUrl: action '" << request << "' not found"); - return NULL; + const auto &fieldChars = MgrFieldChars(uri.getScheme()); + + SBuf action; + if (!tok.prefix(action, fieldChars)) { + if (uri.getScheme() == AnyP::PROTO_CACHE_OBJECT) { + static const SBuf menuReport("menu"); + action = menuReport; + } else { + static const SBuf indexReport("index"); + action = indexReport; + } } + cmd->params.actionName = SBufToString(action); + + const auto profile = findAction(action.c_str()); + if (!profile) + throw TextException(ToSBuf("action '", action, "' not found"), Here()); const char *prot = ActionProtection(profile); - if (!strcmp(prot, "disabled") || !strcmp(prot, "hidden")) { - debugs(16, DBG_IMPORTANT, "CacheManager::ParseUrl: action '" << request << "' is " << prot); - return NULL; + if (!strcmp(prot, "disabled") || !strcmp(prot, "hidden")) + throw TextException(ToSBuf("action '", action, "' is ", prot), Here()); + cmd->profile = profile; + + SBuf passwd; + if (uri.getScheme() == AnyP::PROTO_CACHE_OBJECT && tok.skip('@')) { + (void)tok.prefix(passwd, fieldChars); + cmd->params.password = SBufToString(passwd); } - Mgr::Command::Pointer cmd = new Mgr::Command; - if (!Mgr::QueryParams::Parse(params, cmd->params.queryParams)) - return NULL; - cmd->profile = profile; - cmd->params.httpUri = url; - cmd->params.userName = String(); - cmd->params.password = password; - cmd->params.actionName = request; + // TODO: fix when AnyP::Uri::parse() separates path?query#fragment + SBuf params; + if (tok.skip('?')) { + params = tok.remaining(); + Mgr::QueryParams::Parse(tok, cmd->params.queryParams); + } + + if (!tok.skip('#') && !tok.atEnd()) + throw TextException("invalid characters in URL", Here()); + // else ignore #fragment (if any) + + debugs(16, 3, "MGR request: host=" << uri.host() << ", action=" << action << + ", password=" << passwd << ", params=" << params); + return cmd; } @@ -306,12 +314,17 @@ void CacheManager::start(const Comm::ConnectionPointer &client, HttpRequest *request, StoreEntry *entry, const AccessLogEntry::Pointer &ale) { - debugs(16, 3, "CacheManager::Start: '" << entry->url() << "'" ); + debugs(16, 3, "request-url= '" << request->url << "', entry-url='" << entry->url() << "'"); + + Mgr::Command::Pointer cmd; + try { + cmd = ParseUrl(request->url); - Mgr::Command::Pointer cmd = ParseUrl(entry->url()); - if (!cmd) { + } catch (...) { + debugs(16, 2, "request URL error: " << CurrentException); const auto err = new ErrorState(ERR_INVALID_URL, Http::scNotFound, request, ale); err->url = xstrdup(entry->url()); + err->detailError(new ExceptionErrorDetail(Here().id())); errorAppendEntry(entry, err); entry->expires = squid_curtime; return; @@ -474,4 +487,3 @@ } return instance; } - diff -u -r -N squid-5.0.5/src/CacheManager.h squid-5.0.6/src/CacheManager.h --- squid-5.0.5/src/CacheManager.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/CacheManager.h 2021-05-10 21:02:34.000000000 +1200 @@ -9,6 +9,7 @@ #ifndef SQUID_CACHEMANAGER_H #define SQUID_CACHEMANAGER_H +#include "anyp/forward.h" #include "comm/forward.h" #include "log/forward.h" #include "mgr/Action.h" @@ -51,7 +52,7 @@ protected: CacheManager() {} ///< use Instance() instead - Mgr::CommandPointer ParseUrl(const char *url); + Mgr::CommandPointer ParseUrl(const AnyP::Uri &); void ParseHeaders(const HttpRequest * request, Mgr::ActionParams ¶ms); int CheckPassword(const Mgr::Command &cmd); char *PasswdGet(Mgr::ActionPasswordList *, const char *); diff -u -r -N squid-5.0.5/src/cbdata.cc squid-5.0.6/src/cbdata.cc --- squid-5.0.5/src/cbdata.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/cbdata.cc 2021-05-10 21:02:34.000000000 +1200 @@ -16,6 +16,7 @@ #include "Store.h" #include +#include #if USE_CBDATA_DEBUG #include @@ -46,8 +47,6 @@ #endif -#define OFFSET_OF(TYPE, MEMBER) ((size_t) &(((TYPE) *)0)->(MEMBER)) - /** * Manage a set of registered callback data pointers. * One of the easiest ways to make Squid coredump is to issue a @@ -91,6 +90,15 @@ {} ~cbdata(); + static cbdata *FromUserData(const void *p) { +#if WITH_VALGRIND + return cbdata_htable.at(p); +#else + const auto t = static_cast(p) - offsetof(cbdata, data); + return reinterpret_cast(const_cast(t)); +#endif + } + int valid; int32_t locks; cbdata_type type; @@ -116,25 +124,14 @@ #if !WITH_VALGRIND size_t dataSize() const { return sizeof(data);} - static long MakeOffset(); - static const long Offset; #endif /* MUST be the last per-instance member */ void *data; }; -const long cbdata::Cookie((long)0xDEADBEEF); -#if !WITH_VALGRIND -const long cbdata::Offset(MakeOffset()); +static_assert(std::is_standard_layout::value, "the behavior of offsetof(cbdata) is defined"); -long -cbdata::MakeOffset() -{ - cbdata *zero = (cbdata *)0L; - void **dataOffset = &zero->data; - return (long)dataOffset; -} -#endif +const long cbdata::Cookie((long)0xDEADBEEF); static OBJH cbdataDump; #if USE_CBDATA_DEBUG @@ -186,8 +183,7 @@ snprintf(label, strlen(name) + 20, "cbdata %s (%d)", name, (int) type); #if !WITH_VALGRIND - assert((size_t)cbdata::Offset == (sizeof(cbdata) - ((cbdata *)NULL)->dataSize())); - size += cbdata::Offset; + size += offsetof(cbdata, data); #endif cbdata_index[type].pool = memPoolCreate(label, size); @@ -297,12 +293,7 @@ void * cbdataInternalFree(void *p, const char *file, int line) { - cbdata *c; -#if WITH_VALGRIND - c = cbdata_htable.at(p); -#else - c = (cbdata *) (((char *) p) - cbdata::Offset); -#endif + auto *c = cbdata::FromUserData(p); #if USE_CBDATA_DEBUG debugs(45, 3, p << " " << file << ":" << line); #else @@ -333,16 +324,10 @@ cbdataInternalLock(const void *p) #endif { - cbdata *c; - if (p == NULL) return; -#if WITH_VALGRIND - c = cbdata_htable.at(p); -#else - c = (cbdata *) (((char *) p) - cbdata::Offset); -#endif + auto *c = cbdata::FromUserData(p); #if USE_CBDATA_DEBUG debugs(45, 3, p << "=" << (c ? c->locks + 1 : -1) << " " << file << ":" << line); @@ -365,16 +350,10 @@ cbdataInternalUnlock(const void *p) #endif { - cbdata *c; - if (p == NULL) return; -#if WITH_VALGRIND - c = cbdata_htable.at(p); -#else - c = (cbdata *) (((char *) p) - cbdata::Offset); -#endif + auto *c = cbdata::FromUserData(p); #if USE_CBDATA_DEBUG debugs(45, 3, p << "=" << (c ? c->locks - 1 : -1) << " " << file << ":" << line); @@ -411,18 +390,12 @@ int cbdataReferenceValid(const void *p) { - cbdata *c; - if (p == NULL) return 1; /* A NULL pointer cannot become invalid */ debugs(45, 9, p); -#if WITH_VALGRIND - c = cbdata_htable.at(p); -#else - c = (cbdata *) (((char *) p) - cbdata::Offset); -#endif + const auto c = cbdata::FromUserData(p); c->check(__LINE__); @@ -502,7 +475,7 @@ #if WITH_VALGRIND int obj_size = pool->objectSize(); #else - int obj_size = pool->objectSize() - cbdata::Offset; + int obj_size = pool->objectSize() - offsetof(cbdata, data); #endif storeAppendPrintf(sentry, "%s\t%d\t%ld\t%ld\n", pool->objectType() + 7, obj_size, (long int)pool->getMeter().inuse.currentLevel(), (long int)obj_size * pool->getMeter().inuse.currentLevel()); } diff -u -r -N squid-5.0.5/src/cf.data.pre squid-5.0.6/src/cf.data.pre --- squid-5.0.5/src/cf.data.pre 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/cf.data.pre 2021-05-10 21:02:34.000000000 +1200 @@ -84,7 +84,7 @@ files using the syntax: parameters("/path/filename") For example: - acl whitelist dstdomain parameters("/etc/squid/whitelist.txt") + acl allowlist dstdomain parameters("/etc/squid/allowlist.txt") Conditional configuration @@ -2455,7 +2455,7 @@ require-proxy-header Require PROXY protocol version 1 or 2 connections. - The proxy_protocol_access is required to whitelist + The proxy_protocol_access is required to permit downstream proxies which can be trusted. worker-queues diff -u -r -N squid-5.0.5/src/clients/Client.cc squid-5.0.6/src/clients/Client.cc --- squid-5.0.5/src/clients/Client.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/clients/Client.cc 2021-05-10 21:02:34.000000000 +1200 @@ -14,7 +14,7 @@ #include "comm/Connection.h" #include "comm/forward.h" #include "comm/Write.h" -#include "err_detail_type.h" +#include "error/Detail.h" #include "errorpage.h" #include "fd.h" #include "HttpHdrContRange.h" @@ -520,8 +520,11 @@ maybePurgeOthers(); // adaptation may overwrite old offset computed using the virgin response - const bool partial = theFinalReply->contentRange(); - currentOffset = partial ? theFinalReply->contentRange()->spec.offset : 0; + currentOffset = 0; + if (const auto cr = theFinalReply->contentRange()) { + if (cr->spec.offset != HttpHdrRangeSpec::UnknownPosition) + currentOffset = cr->spec.offset; + } } /// whether to prevent caching of an otherwise cachable response @@ -869,15 +872,18 @@ if (entry->isEmpty()) { debugs(11,8, "adaptation failure with an empty entry: " << *entry); const auto err = new ErrorState(ERR_ICAP_FAILURE, Http::scInternalServerError, request.getRaw(), fwd->al); - err->detailError(ERR_DETAIL_ICAP_RESPMOD_EARLY); + static const auto d = MakeNamedErrorDetail("ICAP_RESPMOD_EARLY"); + err->detailError(d); fwd->fail(err); fwd->dontRetry(true); abortAll("adaptation failure with an empty entry"); return true; // handled } - if (request) // update logged info directly - request->detailError(ERR_ICAP_FAILURE, ERR_DETAIL_ICAP_RESPMOD_LATE); + if (request) { // update logged info directly + static const auto d = MakeNamedErrorDetail("ICAP_RESPMOD_LATE"); + request->detailError(ERR_ICAP_FAILURE, d); + } return false; // the caller must handle } @@ -892,8 +898,10 @@ return; if (!entry->isEmpty()) { // too late to block (should not really happen) - if (request) - request->detailError(ERR_ICAP_FAILURE, ERR_DETAIL_RESPMOD_BLOCK_LATE); + if (request) { + static const auto d = MakeNamedErrorDetail("RESPMOD_BLOCK_LATE"); + request->detailError(ERR_ICAP_FAILURE, d); + } abortAll("late adaptation block"); return; } @@ -906,7 +914,8 @@ page_id = ERR_ACCESS_DENIED; const auto err = new ErrorState(page_id, Http::scForbidden, request.getRaw(), fwd->al); - err->detailError(ERR_DETAIL_RESPMOD_BLOCK_EARLY); + static const auto d = MakeNamedErrorDetail("RESPMOD_BLOCK_EARLY"); + err->detailError(d); fwd->fail(err); fwd->dontRetry(true); diff -u -r -N squid-5.0.5/src/clients/FtpClient.cc squid-5.0.6/src/clients/FtpClient.cc --- squid-5.0.5/src/clients/FtpClient.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/clients/FtpClient.cc 2021-05-10 21:02:34.000000000 +1200 @@ -16,11 +16,14 @@ #include "comm/Read.h" #include "comm/TcpAcceptor.h" #include "comm/Write.h" +#include "error/SysErrorDetail.h" #include "errorpage.h" #include "fd.h" #include "ftp/Parsing.h" #include "http/Stream.h" #include "ip/tools.h" +#include "sbuf/SBuf.h" +#include "sbuf/Stream.h" #include "SquidConfig.h" #include "SquidString.h" #include "StatCounters.h" @@ -64,6 +67,20 @@ return ret; } +/* Ftp::ErrorDetail */ + +SBuf +Ftp::ErrorDetail::brief() const +{ + return ToSBuf("FTP_REPLY_CODE=", completionCode); +} + +SBuf +Ftp::ErrorDetail::verbose(const HttpRequest::Pointer &) const +{ + return ToSBuf("FTP reply with completion code ", completionCode); +} + /* Ftp::Channel */ /// configures the channel with a descriptor and registers a close handler @@ -285,7 +302,7 @@ ftperr->ftp.reply = xstrdup(reply); if (!err) { - fwd->request->detailError(error, xerrno); + fwd->request->detailError(error, SysErrorDetail::NewIfAny(xerrno)); fwd->fail(ftperr); closeServer(); // we failed, so no serverComplete() } diff -u -r -N squid-5.0.5/src/clients/FtpClient.h squid-5.0.6/src/clients/FtpClient.h --- squid-5.0.5/src/clients/FtpClient.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/clients/FtpClient.h 2021-05-10 21:02:34.000000000 +1200 @@ -12,6 +12,7 @@ #define SQUID_FTP_CLIENT_H #include "clients/Client.h" +#include "error/Detail.h" class String; namespace Ftp @@ -19,6 +20,24 @@ extern const char *const crlf; +/// Holds FTP server reply error code +/// Squid needs to interpret internally FTP reply codes and respond with +/// custom error (eg in the case of Ftp::Gateway), however still we need +/// to log the exact FTP server error reply code as the reason of error. +class ErrorDetail: public ::ErrorDetail { + MEMPROXY_CLASS(Ftp::ErrorDetail); + +public: + explicit ErrorDetail(const int code): completionCode(code) {} + + /* ErrorDetail API */ + virtual SBuf brief() const override; + virtual SBuf verbose(const HttpRequestPointer &) const override; + +private: + int completionCode; ///< FTP reply completion code +}; + /// Common code for FTP server control and data channels. /// Does not own the channel descriptor, which is managed by Ftp::Client. class Channel diff -u -r -N squid-5.0.5/src/clients/FtpGateway.cc squid-5.0.6/src/clients/FtpGateway.cc --- squid-5.0.5/src/clients/FtpGateway.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/clients/FtpGateway.cc 2021-05-10 21:02:34.000000000 +1200 @@ -2433,8 +2433,8 @@ Http::StatusCode sc = ftpState->failedHttpStatus(error_code); const auto ftperr = new ErrorState(error_code, sc, ftpState->fwd->request, ftpState->fwd->al); - ftpState->failed(error_code, code, ftperr); - ftperr->detailError(code); + ftpState->failed(error_code, 0, ftperr); + ftperr->detailError(new Ftp::ErrorDetail(code)); HttpReply *newrep = ftperr->BuildHttpReply(); delete ftperr; @@ -2514,8 +2514,7 @@ else err.ftp.reply = xstrdup(""); - // TODO: interpret as FTP-specific error code - err.detailError(code); + err.detailError(new Ftp::ErrorDetail(code)); ftpState->entry->replaceHttpReply(err.BuildHttpReply()); diff -u -r -N squid-5.0.5/src/clients/FtpRelay.cc squid-5.0.6/src/clients/FtpRelay.cc --- squid-5.0.5/src/clients/FtpRelay.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/clients/FtpRelay.cc 2021-05-10 21:02:34.000000000 +1200 @@ -14,6 +14,7 @@ #include "client_side.h" #include "clients/forward.h" #include "clients/FtpClient.h" +#include "error/SysErrorDetail.h" #include "ftp/Elements.h" #include "ftp/Parsing.h" #include "http/Stream.h" @@ -298,7 +299,7 @@ const Http::StatusCode httpStatus = failedHttpStatus(error); HttpReply *const reply = createHttpReply(httpStatus); entry->replaceHttpReply(reply); - fwd->request->detailError(error, xerrno); + fwd->request->detailError(error, SysErrorDetail::NewIfAny(xerrno)); } void diff -u -r -N squid-5.0.5/src/client_side.cc squid-5.0.6/src/client_side.cc --- squid-5.0.5/src/client_side.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/client_side.cc 2021-05-10 21:02:34.000000000 +1200 @@ -76,6 +76,7 @@ #include "comm/TcpAcceptor.h" #include "comm/Write.h" #include "CommCalls.h" +#include "error/ExceptionErrorDetail.h" #include "errorpage.h" #include "fd.h" #include "fde.h" @@ -105,6 +106,8 @@ #include "profiler/Profiler.h" #include "proxyp/Header.h" #include "proxyp/Parser.h" +#include "sbuf/Stream.h" +#include "security/Io.h" #include "security/NegotiationHistory.h" #include "servers/forward.h" #include "SquidConfig.h" @@ -175,7 +178,6 @@ static void clientListenerConnectionOpened(AnyP::PortCfgPointer &s, const Ipc::FdNoteId portTypeNote, const Subscription::Pointer &sub); static IOACB httpAccept; -static CTCB clientLifetimeTimeout; #if USE_IDENT static IDCB clientIdentDone; #endif @@ -315,7 +317,7 @@ { clientUpdateStatCounters(logType); - if (request->errType != ERR_NONE) + if (request->error) ++ statCounter.client_http.errors; clientUpdateStatHistCounters(logType, @@ -372,8 +374,7 @@ // TODO: avoid losses by keeping these stats in a shared history object? if (aLogEntry->request) { aLogEntry->request->dnsWait = request->dnsWait; - aLogEntry->request->errType = request->errType; - aLogEntry->request->errDetail = request->errDetail; + aLogEntry->request->error = request->error; } } @@ -586,21 +587,38 @@ } #endif +void +ConnStateData::resetReadTimeout(const time_t timeout) +{ + typedef CommCbMemFunT TimeoutDialer; + AsyncCall::Pointer callback = JobCallback(33, 5, TimeoutDialer, this, ConnStateData::requestTimeout); + commSetConnTimeout(clientConnection, timeout, callback); +} + +void +ConnStateData::extendLifetime() +{ + typedef CommCbMemFunT TimeoutDialer; + AsyncCall::Pointer callback = JobCallback(5, 4, TimeoutDialer, this, ConnStateData::lifetimeTimeout); + commSetConnTimeout(clientConnection, Config.Timeout.lifetime, callback); +} + // cleans up before destructor is called void ConnStateData::swanSong() { debugs(33, 2, HERE << clientConnection); - checkLogging(); flags.readMore = false; clientdbEstablished(clientConnection->remote, -1); /* decrement */ - pipeline.terminateAll(0); + + terminateAll(ERR_NONE, LogTagsErrors()); + checkLogging(); // XXX: Closing pinned conn is too harsh: The Client may want to continue! unpinConnection(true); - Server::swanSong(); // closes the client connection + Server::swanSong(); #if USE_AUTH // NP: do this bit after closing the connections to avoid side effects from unwanted TCP RST @@ -610,6 +628,31 @@ flags.swanSang = true; } +void +ConnStateData::callException(const std::exception &ex) +{ + Server::callException(ex); // logs ex and stops the job + + ErrorDetail::Pointer errorDetail; + if (const auto tex = dynamic_cast(&ex)) + errorDetail = new ExceptionErrorDetail(tex->id()); + else + errorDetail = new ExceptionErrorDetail(Here().id()); + updateError(ERR_GATEWAY_FAILURE, errorDetail); +} + +void +ConnStateData::updateError(const Error &error) +{ + if (const auto context = pipeline.front()) { + const auto http = context->http; + assert(http); + http->updateError(error); + } else { + bareError.update(error); + } +} + bool ConnStateData::isOpen() const { @@ -735,8 +778,8 @@ * warning: assumes that HTTP headers for individual ranges at the * time of the actuall assembly will be exactly the same as * the headers when clientMRangeCLen() is called */ -int -ClientHttpRequest::mRangeCLen() +int64_t +ClientHttpRequest::mRangeCLen() const { int64_t clen = 0; MemBuf mb; @@ -864,10 +907,7 @@ /** * Set the timeout BEFORE calling readSomeData(). */ - typedef CommCbMemFunT TimeoutDialer; - AsyncCall::Pointer timeoutCall = JobCallback(33, 5, - TimeoutDialer, this, ConnStateData::requestTimeout); - commSetConnTimeout(clientConnection, clientConnection->timeLeft(idleTimeout()), timeoutCall); + resetReadTimeout(clientConnection->timeLeft(idleTimeout())); readSomeData(); /** Please don't do anything with the FD past here! */ @@ -1413,21 +1453,22 @@ } bool -ConnStateData::connFinishedWithConn(int size) +ConnStateData::shouldCloseOnEof() const { - if (size == 0) { - if (pipeline.empty() && inBuf.isEmpty()) { - /* no current or pending requests */ - debugs(33, 4, HERE << clientConnection << " closed"); - return true; - } else if (!Config.onoff.half_closed_clients) { - /* admin doesn't want to support half-closed client sockets */ - debugs(33, 3, HERE << clientConnection << " aborted (half_closed_clients disabled)"); - pipeline.terminateAll(0); - return true; - } + if (pipeline.empty() && inBuf.isEmpty()) { + debugs(33, 4, "yes, without active requests and unparsed input"); + return true; + } + + if (!Config.onoff.half_closed_clients) { + debugs(33, 3, "yes, without half_closed_clients"); + return true; } + // Squid currently tries to parse (possibly again) a partially received + // request after an EOF with half_closed_clients. To give that last parse in + // afterClientRead() a chance, we ignore partially parsed requests here. + debugs(33, 3, "no, honoring half_closed_clients"); return false; } @@ -1487,7 +1528,7 @@ repContext->setReplyToStoreEntry(sslServerBump->entry, "delayed SslBump error"); // Get error details from the fake certificate-peeking request. - http->request->detailError(sslServerBump->request->errType, sslServerBump->request->errDetail); + http->request->error.update(sslServerBump->request->error); context->pullData(); return true; } @@ -1524,10 +1565,10 @@ // Create an error object and fill it const auto err = new ErrorState(ERR_SECURE_CONNECT_FAIL, Http::scServiceUnavailable, request, http->al); err->src_addr = clientConnection->remote; - Ssl::ErrorDetail *errDetail = new Ssl::ErrorDetail( + const Security::ErrorDetail::Pointer errDetail = new Security::ErrorDetail( SQUID_X509_V_ERR_DOMAIN_MISMATCH, - srvCert.get(), nullptr); - err->detail = errDetail; + srvCert, nullptr); + updateError(ERR_SECURE_CONNECT_FAIL, errDetail); repContext->setReplyToError(request->method, err); assert(context->http->out.offset == 0); context->pullData(); @@ -1755,6 +1796,20 @@ clientProcessRequestFinished(conn, request); } +void +ConnStateData::add(const Http::StreamPointer &context) +{ + debugs(33, 3, context << " to " << pipeline.count() << '/' << pipeline.nrequests); + if (bareError) { + debugs(33, 5, "assigning " << bareError); + assert(context); + assert(context->http); + context->http->updateError(bareError); + bareError.clear(); + } + pipeline.add(context); +} + int ConnStateData::pipelinePrefetchMax() const { @@ -1873,11 +1928,7 @@ return; receivedFirstByte_ = true; - // Set timeout to Config.Timeout.request - typedef CommCbMemFunT TimeoutDialer; - AsyncCall::Pointer timeoutCall = JobCallback(33, 5, - TimeoutDialer, this, ConnStateData::requestTimeout); - commSetConnTimeout(clientConnection, Config.Timeout.request, timeoutCall); + resetReadTimeout(Config.Timeout.request); } /** @@ -1924,11 +1975,7 @@ if (Http::StreamPointer context = parseOneRequest()) { debugs(33, 5, clientConnection << ": done parsing a request"); - - AsyncCall::Pointer timeoutCall = commCbCall(5, 4, "clientLifetimeTimeout", - CommTimeoutCbPtrFun(clientLifetimeTimeout, context->http)); - commSetConnTimeout(clientConnection, Config.Timeout.lifetime, timeoutCall); - + extendLifetime(); context->registerWithConn(); #if USE_OPENSSL @@ -1973,14 +2020,9 @@ if (!clientParseRequests()) { if (!isOpen()) return; - /* - * If the client here is half closed and we failed - * to parse a request, close the connection. - * The above check with connFinishedWithConn() only - * succeeds _if_ the buffer is empty which it won't - * be if we have an incomplete request. - * XXX: This duplicates ConnStateData::kick - */ + // We may get here if the client half-closed after sending a partial + // request. See doClientRead() and shouldCloseOnEof(). + // XXX: This partially duplicates ConnStateData::kick(). if (pipeline.empty() && commIsHalfClosed(clientConnection->fd)) { debugs(33, 5, clientConnection << ": half-closed connection, no completed request parsed, connection closing."); clientConnection->close(); @@ -2148,6 +2190,7 @@ return; const err_type error = receivedFirstByte_ ? ERR_REQUEST_PARSE_TIMEOUT : ERR_REQUEST_START_TIMEOUT; + updateError(error); if (tunnelOnError(HttpRequestMethod(), error)) return; @@ -2163,16 +2206,15 @@ io.conn->close(); } -static void -clientLifetimeTimeout(const CommTimeoutCbParams &io) +void +ConnStateData::lifetimeTimeout(const CommTimeoutCbParams &io) { - ClientHttpRequest *http = static_cast(io.data); - debugs(33, DBG_IMPORTANT, "WARNING: Closing client connection due to lifetime timeout"); - debugs(33, DBG_IMPORTANT, "\t" << http->uri); - if (const auto conn = http->getConn()) - conn->pipeline.terminateAll(ETIMEDOUT); - if (Comm::IsConnOpen(io.conn)) - io.conn->close(); + debugs(33, DBG_IMPORTANT, "WARNING: Closing client connection due to lifetime timeout" << + Debug::Extra << "connection: " << io.conn); + + LogTagsErrors lte; + lte.timedout = true; + terminateAll(ERR_LIFETIME_EXP, lte); } ConnStateData::ConnStateData(const MasterXaction::Pointer &xact) : @@ -2339,93 +2381,32 @@ return false; } -/** - * - * \retval 1 on success - * \retval 0 when needs more data - * \retval -1 on error - */ -static int -tlsAttemptHandshake(ConnStateData *conn, PF *callback) -{ - // TODO: maybe throw instead of returning -1 - // see https://github.com/squid-cache/squid/pull/81#discussion_r153053278 - int fd = conn->clientConnection->fd; - auto session = fd_table[fd].ssl.get(); - - errno = 0; - -#if USE_OPENSSL - const auto ret = SSL_accept(session); - if (ret > 0) - return 1; - - const int xerrno = errno; - const auto ssl_error = SSL_get_error(session, ret); - - switch (ssl_error) { - - case SSL_ERROR_WANT_READ: - Comm::SetSelect(fd, COMM_SELECT_READ, callback, (callback ? conn : nullptr), 0); - return 0; - - case SSL_ERROR_WANT_WRITE: - Comm::SetSelect(fd, COMM_SELECT_WRITE, callback, (callback ? conn : nullptr), 0); - return 0; - - case SSL_ERROR_SYSCALL: - if (ret == 0) { - debugs(83, 2, "Error negotiating SSL connection on FD " << fd << ": Aborted by client: " << ssl_error); - } else { - debugs(83, (xerrno == ECONNRESET) ? 1 : 2, "Error negotiating SSL connection on FD " << fd << ": " << - (xerrno == 0 ? Security::ErrorString(ssl_error) : xstrerr(xerrno))); - } - break; - - case SSL_ERROR_ZERO_RETURN: - debugs(83, DBG_IMPORTANT, "Error negotiating SSL connection on FD " << fd << ": Closed by client"); - break; - - default: - debugs(83, DBG_IMPORTANT, "Error negotiating SSL connection on FD " << - fd << ": " << Security::ErrorString(ssl_error) << - " (" << ssl_error << "/" << ret << ")"); - } - -#elif USE_GNUTLS - - const auto x = gnutls_handshake(session); - if (x == GNUTLS_E_SUCCESS) - return 1; - - if (gnutls_error_is_fatal(x)) { - debugs(83, 2, "Error negotiating TLS on " << conn->clientConnection << ": Aborted by client: " << Security::ErrorString(x)); - - } else if (x == GNUTLS_E_INTERRUPTED || x == GNUTLS_E_AGAIN) { - const auto ioAction = (gnutls_record_get_direction(session)==0 ? COMM_SELECT_READ : COMM_SELECT_WRITE); - Comm::SetSelect(fd, ioAction, callback, (callback ? conn : nullptr), 0); - return 0; - } - -#else - // Performing TLS handshake should never be reachable without a TLS/SSL library. - (void)session; // avoid compiler and static analysis complaints - fatal("FATAL: HTTPS not supported by this Squid."); -#endif - - return -1; -} - /** negotiate an SSL connection */ static void clientNegotiateSSL(int fd, void *data) { ConnStateData *conn = (ConnStateData *)data; - const int ret = tlsAttemptHandshake(conn, clientNegotiateSSL); - if (ret <= 0) { - if (ret < 0) // An error - conn->clientConnection->close(); + const auto handshakeResult = Security::Accept(*conn->clientConnection); + switch (handshakeResult.category) { + case Security::IoResult::ioSuccess: + break; + + case Security::IoResult::ioWantRead: + Comm::SetSelect(conn->clientConnection->fd, COMM_SELECT_READ, clientNegotiateSSL, conn, 0); + return; + + case Security::IoResult::ioWantWrite: + Comm::SetSelect(conn->clientConnection->fd, COMM_SELECT_WRITE, clientNegotiateSSL, conn, 0); + return; + + case Security::IoResult::ioError: + debugs(83, (handshakeResult.important ? DBG_IMPORTANT : 2), "ERROR: " << handshakeResult.errorDescription << + " while accepting a TLS connection on " << conn->clientConnection << ": " << handshakeResult.errorDetail); + // TODO: No ConnStateData::tunnelOnError() on this forward-proxy code + // path because we cannot know the intended connection target? + conn->updateError(ERR_SECURE_ACCEPT_FAIL, handshakeResult.errorDetail); + conn->clientConnection->close(); return; } @@ -2501,6 +2482,15 @@ debugs(83, 2, "Client certificate requesting not yet implemented."); #endif + // If we are called, then bumped CONNECT has succeeded. Finalize it. + if (auto xact = conn->pipeline.front()) { + if (xact->http && xact->http->request && xact->http->request->method == Http::METHOD_CONNECT) + xact->finished(); + // cannot proceed with encryption if requests wait for plain responses + Must(conn->pipeline.empty()); + } + /* careful: finished() above frees request, host, etc. */ + conn->readSomeData(); } @@ -2517,10 +2507,7 @@ if (!ctx || !httpsCreate(connState, ctx)) return; - typedef CommCbMemFunT TimeoutDialer; - AsyncCall::Pointer timeoutCall = JobCallback(33, 5, TimeoutDialer, - connState, ConnStateData::requestTimeout); - commSetConnTimeout(details, Config.Timeout.request, timeoutCall); + connState->resetReadTimeout(Config.Timeout.request); Comm::SetSelect(details->fd, COMM_SELECT_READ, clientNegotiateSSL, connState, 0); } @@ -2622,6 +2609,7 @@ acl_checklist->al->cache.port = port; acl_checklist->al->cache.caddr = log_addr; acl_checklist->al->proxyProtocolHeader = proxyProtocolHeader_; + acl_checklist->al->updateError(bareError); HTTPMSGUNLOCK(acl_checklist->al->request); acl_checklist->al->request = request; HTTPMSGLOCK(acl_checklist->al->request); @@ -2798,15 +2786,6 @@ void ConnStateData::getSslContextStart() { - // If we are called, then CONNECT has succeeded. Finalize it. - if (auto xact = pipeline.front()) { - if (xact->http && xact->http->request && xact->http->request->method == Http::METHOD_CONNECT) - xact->finished(); - // cannot proceed with encryption if requests wait for plain responses - Must(pipeline.empty()); - } - /* careful: finished() above frees request, host, etc. */ - if (port->secure.generateHostCertificates) { Ssl::CertificateProperties certProperties; buildSslCertGenerationParams(certProperties); @@ -2889,10 +2868,7 @@ // bumped intercepted conns should already have Config.Timeout.request set // but forwarded connections may only have Config.Timeout.lifetime. [Re]set // to make sure the connection does not get stuck on non-SSL clients. - typedef CommCbMemFunT TimeoutDialer; - AsyncCall::Pointer timeoutCall = JobCallback(33, 5, TimeoutDialer, - this, ConnStateData::requestTimeout); - commSetConnTimeout(clientConnection, Config.Timeout.request, timeoutCall); + resetReadTimeout(Config.Timeout.request); switchedToHttps_ = true; @@ -2941,10 +2917,7 @@ // commSetConnTimeout() was called for this request before we switched. // Fix timeout to request_start_timeout - typedef CommCbMemFunT TimeoutDialer; - AsyncCall::Pointer timeoutCall = JobCallback(33, 5, - TimeoutDialer, this, ConnStateData::requestTimeout); - commSetConnTimeout(clientConnection, Config.Timeout.request_start_timeout, timeoutCall); + resetReadTimeout(Config.Timeout.request_start_timeout); // Also reset receivedFirstByte_ flag to allow this timeout work in the case we have // a bumbed "connect" request on non transparent port. receivedFirstByte_ = false; @@ -2969,7 +2942,9 @@ receivedFirstByte(); fd_note(clientConnection->fd, "Parsing TLS handshake"); - bool unsupportedProtocol = false; + // stops being nil if we fail to parse the handshake + ErrorDetail::Pointer parseErrorDetails; + try { if (!tlsParser.parseHello(inBuf)) { // need more data to finish parsing @@ -2977,9 +2952,14 @@ return; } } - catch (const std::exception &ex) { - debugs(83, 2, "error on FD " << clientConnection->fd << ": " << ex.what()); - unsupportedProtocol = true; + catch (const TextException &ex) { + debugs(83, 2, "exception: " << ex); + parseErrorDetails = new ExceptionErrorDetail(ex.id()); + } + catch (...) { + debugs(83, 2, "exception: " << CurrentException); + static const auto d = MakeNamedErrorDetail("TLS_ACCEPT_PARSE"); + parseErrorDetails = d; } parsingTlsHandshake = false; @@ -3000,13 +2980,12 @@ // We should disable read/write handlers Comm::ResetSelect(clientConnection->fd); - if (unsupportedProtocol) { + if (parseErrorDetails) { Http::StreamPointer context = pipeline.front(); Must(context && context->http); HttpRequest::Pointer request = context->http->request; debugs(83, 5, "Got something other than TLS Client Hello. Cannot SslBump."); - sslBumpMode = Ssl::bumpSplice; - context->http->al->ssl.bumpMode = Ssl::bumpSplice; + updateError(ERR_PROTOCOL_UNKNOWN, parseErrorDetails); if (!clientTunnelOnError(this, context, request, HttpRequestMethod(), ERR_PROTOCOL_UNKNOWN)) clientConnection->close(); return; @@ -3130,17 +3109,15 @@ bio->setReadBufData(inBuf); bio->hold(true); - // Here squid should have all of the client hello message so the - // tlsAttemptHandshake() should return 0. - // This block exist only to force openSSL parse client hello and detect - // ERR_SECURE_ACCEPT_FAIL error, which should be checked and splice if required. - if (tlsAttemptHandshake(this, nullptr) < 0) { - debugs(83, 2, "TLS handshake failed."); - HttpRequest::Pointer request(http ? http->request : nullptr); - if (!clientTunnelOnError(this, context, request, HttpRequestMethod(), ERR_SECURE_ACCEPT_FAIL)) - clientConnection->close(); - return; - } + // We have successfully parsed client Hello, but our TLS handshake parser is + // forgiving. Now we use a TLS library to parse the same bytes, so that we + // can honor on_unsupported_protocol if needed. If there are no errors, we + // expect Security::Accept() to ask us to write (our) TLS server Hello. We + // also allow an ioWantRead result in case some fancy TLS extension that + // Squid does not yet understand requires reading post-Hello client bytes. + const auto handshakeResult = Security::Accept(*clientConnection); + if (!handshakeResult.wantsIo()) + return handleSslBumpHandshakeError(handshakeResult); // We need to reset inBuf here, to be used by incoming requests in the case // of SSL bump @@ -3150,6 +3127,43 @@ FwdState::Start(clientConnection, sslServerBump->entry, sslServerBump->request.getRaw(), http ? http->al : NULL); } +/// process a problematic Security::Accept() result on the SslBump code path +void +ConnStateData::handleSslBumpHandshakeError(const Security::IoResult &handshakeResult) +{ + auto errCategory = ERR_NONE; + + switch (handshakeResult.category) { + case Security::IoResult::ioSuccess: { + static const auto d = MakeNamedErrorDetail("TLS_ACCEPT_UNEXPECTED_SUCCESS"); + updateError(errCategory = ERR_GATEWAY_FAILURE, d); + break; + } + + case Security::IoResult::ioWantRead: { + static const auto d = MakeNamedErrorDetail("TLS_ACCEPT_UNEXPECTED_READ"); + updateError(errCategory = ERR_GATEWAY_FAILURE, d); + break; + } + + case Security::IoResult::ioWantWrite: { + static const auto d = MakeNamedErrorDetail("TLS_ACCEPT_UNEXPECTED_WRITE"); + updateError(errCategory = ERR_GATEWAY_FAILURE, d); + break; + } + + case Security::IoResult::ioError: + debugs(83, (handshakeResult.important ? DBG_IMPORTANT : 2), "ERROR: " << handshakeResult.errorDescription << + " while SslBump-accepting a TLS connection on " << clientConnection << ": " << handshakeResult.errorDetail); + updateError(errCategory = ERR_SECURE_ACCEPT_FAIL, handshakeResult.errorDetail); + break; + + } + + if (!tunnelOnError(HttpRequestMethod(), errCategory)) + clientConnection->close(); +} + void ConnStateData::doPeekAndSpliceStep() { @@ -3207,7 +3221,13 @@ connectHost = clientConnection->local.toStr(ip, sizeof(ip)); connectPort = clientConnection->local.port(); } else { + // Typical cases are malformed HTTP requests on http_port and malformed + // TLS handshakes on non-bumping https_port. TODO: Discover these + // problems earlier so that they can be classified/detailed better. debugs(33, 2, "Not able to compute URL, abort request tunneling for " << reason); + // TODO: throw when nonBlockingCheck() callbacks gain job protections + static const auto d = MakeNamedErrorDetail("TUNNEL_TARGET"); + updateError(ERR_INVALID_REQ, d); return false; } @@ -3268,11 +3288,7 @@ stream->flags.parsed_ok = 1; // Do we need it? stream->mayUseConnection(true); - - AsyncCall::Pointer timeoutCall = commCbCall(5, 4, "clientLifetimeTimeout", - CommTimeoutCbPtrFun(clientLifetimeTimeout, stream->http)); - commSetConnTimeout(clientConnection, Config.Timeout.lifetime, timeoutCall); - + extendLifetime(); stream->registerWithConn(); MasterXaction::Pointer mx = new MasterXaction(XactionInitiator::initClient); @@ -3985,21 +4001,45 @@ } void -ConnStateData::checkLogging() +ConnStateData::terminateAll(const Error &error, const LogTagsErrors <e) { - // if we are parsing request body, its request is responsible for logging - if (bodyPipe) - return; + debugs(33, 3, pipeline.count() << '/' << pipeline.nrequests << " after " << error); - // a request currently using this connection is responsible for logging - if (!pipeline.empty() && pipeline.back()->mayUseConnection()) - return; + if (pipeline.empty()) { + bareError.update(error); // XXX: bareLogTagsErrors + } else { + // We terminate the current CONNECT/PUT/etc. context below, logging any + // error details, but that context may leave unparsed bytes behind. + // Consume them to stop checkLogging() from logging them again later. + const auto intputToConsume = +#if USE_OPENSSL + parsingTlsHandshake ? "TLS handshake" : // more specific than CONNECT +#endif + bodyPipe ? "HTTP request body" : + pipeline.back()->mayUseConnection() ? "HTTP CONNECT" : + nullptr; - /* Either we are waiting for the very first transaction, or - * we are done with the Nth transaction and are waiting for N+1st. - * XXX: We assume that if anything was added to inBuf, then it could - * only be consumed by actions already covered by the above checks. - */ + while (const auto context = pipeline.front()) { + context->noteIoError(error, lte); + context->finished(); // cleanup and self-deregister + assert(context != pipeline.front()); + } + + if (intputToConsume && !inBuf.isEmpty()) { + debugs(83, 5, "forgetting client " << intputToConsume << " bytes: " << inBuf.length()); + inBuf.clear(); + } + } + + clientConnection->close(); +} + +/// log the last (attempt at) transaction if nobody else did +void +ConnStateData::checkLogging() +{ + // to simplify our logic, we assume that terminateAll() has been called + assert(pipeline.empty()); // do not log connections that closed after a transaction (it is normal) // TODO: access_log needs ACLs to match received-no-bytes connections @@ -4011,6 +4051,7 @@ http.req_sz = inBuf.length(); // XXX: Or we died while waiting for the pinned connection to become idle. http.setErrorUri("error:transaction-end-before-headers"); + http.updateError(bareError); } bool diff -u -r -N squid-5.0.5/src/client_side.h squid-5.0.6/src/client_side.h --- squid-5.0.5/src/client_side.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/client_side.h 2021-05-10 21:02:34.000000000 +1200 @@ -11,9 +11,11 @@ #ifndef SQUID_CLIENTSIDE_H #define SQUID_CLIENTSIDE_H +#include "acl/forward.h" #include "base/RunnersRegistry.h" #include "clientStreamForward.h" #include "comm.h" +#include "error/Error.h" #include "helper/forward.h" #include "http/forward.h" #include "HttpControlMsg.h" @@ -26,6 +28,7 @@ #include "auth/UserRequest.h" #endif #if USE_OPENSSL +#include "security/forward.h" #include "security/Handshake.h" #include "ssl/support.h" #endif @@ -157,6 +160,11 @@ /// note response sending error and close as soon as we read the request void stopSending(const char *error); + /// (re)sets timeout for receiving more bytes from the client + void resetReadTimeout(time_t timeout); + /// (re)sets client_lifetime timeout + void extendLifetime(); + void expectNoForwarding(); ///< cleans up virgin request [body] forwarding state /* BodyPipe API */ @@ -220,11 +228,13 @@ void clientReadFtpData(const CommIoCbParams &io); void connStateClosed(const CommCloseCbParams &io); void requestTimeout(const CommTimeoutCbParams ¶ms); + void lifetimeTimeout(const CommTimeoutCbParams ¶ms); // AsyncJob API virtual void start(); virtual bool doneAll() const { return BodyProducer::doneAll() && false;} virtual void swanSong(); + virtual void callException(const std::exception &); /// Changes state so that we close the connection and quit after serving /// the client-side-detected error response instead of getting stuck. @@ -293,6 +303,9 @@ #endif char *prepareTlsSwitchingURL(const Http1::RequestParserPointer &hp); + /// registers a newly created stream + void add(const Http::StreamPointer &context); + /// handle a control message received by context from a peer and call back virtual bool writeControlMsgAndCall(HttpReply *rep, AsyncCall::Pointer &call) = 0; @@ -341,6 +354,17 @@ const ProxyProtocol::HeaderPointer &proxyProtocolHeader() const { return proxyProtocolHeader_; } + /// if necessary, stores new error information (if any) + void updateError(const Error &); + + /// emplacement/convenience wrapper for updateError(const Error &) + void updateError(const err_type c, const ErrorDetailPointer &d) { updateError(Error(c, d)); } + + // Exposed to be accessible inside the ClientHttpRequest constructor. + // TODO: Remove. Make sure there is always a suitable ALE instead. + /// a problem that occurred without a request (e.g., while parsing headers) + Error bareError; + protected: void startDechunkingRequest(); void finishDechunkingRequest(bool withSuccess); @@ -393,8 +417,10 @@ private: /* ::Server API */ - virtual bool connFinishedWithConn(int size); - virtual void checkLogging(); + virtual void terminateAll(const Error &, const LogTagsErrors &); + virtual bool shouldCloseOnEof() const; + + void checkLogging(); void clientAfterReadingRequests(); bool concurrentRequestQueueFilled() const; @@ -413,6 +439,7 @@ /// Attempts to add a given TLS context to the cache, replacing the old /// same-key context, if any void storeTlsContextToCache(const SBuf &cacheKey, Security::ContextPointer &ctx); + void handleSslBumpHandshakeError(const Security::IoResult &); #endif /// whether PROXY protocol header is still expected diff -u -r -N squid-5.0.5/src/client_side_reply.cc squid-5.0.6/src/client_side_reply.cc --- squid-5.0.5/src/client_side_reply.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/client_side_reply.cc 2021-05-10 21:02:34.000000000 +1200 @@ -1574,7 +1574,7 @@ #endif const bool maySendChunkedReply = !request->multipartRangeRequest() && - reply->sline.protocol == AnyP::PROTO_HTTP && // response is HTTP + reply->sline.version.protocol == AnyP::PROTO_HTTP && // response is HTTP (request->http_ver >= Http::ProtocolVersion(1,1)); /* Check whether we should send keep-alive */ @@ -1658,7 +1658,7 @@ http->al->reply = reply; - if (reply->sline.protocol == AnyP::PROTO_HTTP) { + if (reply->sline.version.protocol == AnyP::PROTO_HTTP) { /* RFC 2616 requires us to advertise our version (but only on real HTTP traffic) */ reply->sline.version = Http::ProtocolVersion(); } diff -u -r -N squid-5.0.5/src/client_side_request.cc squid-5.0.6/src/client_side_request.cc --- squid-5.0.5/src/client_side_request.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/client_side_request.cc 2021-05-10 21:02:34.000000000 +1200 @@ -28,7 +28,7 @@ #include "clientStream.h" #include "comm/Connection.h" #include "comm/Write.h" -#include "err_detail_type.h" +#include "error/Detail.h" #include "errorpage.h" #include "fd.h" #include "fde.h" @@ -157,7 +157,7 @@ maxReplyBodySize_(0), entry_(NULL), loggingEntry_(NULL), - conn_(NULL) + conn_(cbdataReference(aConn)) #if USE_OPENSSL , sslBumpNeed_(Ssl::bumpEnd) #endif @@ -166,7 +166,6 @@ , request_satisfaction_offset(0) #endif { - setConn(aConn); al = new AccessLogEntry; CodeContext::Reset(al); al->cache.start_time = current_time; @@ -175,6 +174,7 @@ al->cache.port = aConn->port; al->cache.caddr = aConn->log_addr; al->proxyProtocolHeader = aConn->proxyProtocolHeader(); + al->updateError(aConn->bareError); #if USE_OPENSSL if (aConn->clientConnection != NULL && aConn->clientConnection->isOpen()) { @@ -285,7 +285,7 @@ loggingEntry(NULL); if (request) - checkFailureRatio(request->errType, al->hier.code); + checkFailureRatio(request->error.category, al->hier.code); freeResources(); @@ -1088,9 +1088,6 @@ * iter up at this point. */ node->readBuffer.offset = request->range->lowestOffset(0); - http->range_iter.pos = request->range->begin(); - http->range_iter.end = request->range->end(); - http->range_iter.valid = true; } } @@ -1208,7 +1205,8 @@ switch (reply.result) { case Helper::TimedOut: if (Config.onUrlRewriteTimeout.action != toutActBypass) { - http->calloutsError(ERR_GATEWAY_FAILURE, ERR_DETAIL_REDIRECTOR_TIMEDOUT); + static const auto d = MakeNamedErrorDetail("REDIRECTOR_TIMEDOUT"); + http->calloutsError(ERR_GATEWAY_FAILURE, d); debugs(85, DBG_IMPORTANT, "ERROR: URL rewrite helper: Timedout"); } break; @@ -1622,6 +1620,15 @@ #endif +void +ClientHttpRequest::updateError(const Error &error) +{ + if (request) + request->error.update(error); + else + al->updateError(error); +} + bool ClientHttpRequest::gotEnough() const { @@ -1947,6 +1954,30 @@ al->setVirginUrlForMissingRequest(errorUri); } +// XXX: This should not be a _request_ method. Move range_iter elsewhere. +int64_t +ClientHttpRequest::prepPartialResponseGeneration() +{ + assert(request); + assert(request->range); + + range_iter.pos = request->range->begin(); + range_iter.end = request->range->end(); + range_iter.debt_size = 0; + const auto multipart = request->range->specs.size() > 1; + if (multipart) + range_iter.boundary = rangeBoundaryStr(); + range_iter.valid = true; // TODO: Remove. + range_iter.updateSpec(); // TODO: Refactor to initialize rather than update. + + assert(range_iter.pos != range_iter.end); + const auto &firstRange = *range_iter.pos; + assert(firstRange); + out.offset = firstRange->offset; + + return multipart ? mRangeCLen() : firstRange->length; +} + #if USE_ADAPTATION /// Initiate an asynchronous adaptation transaction which will call us back. void @@ -1979,10 +2010,12 @@ handleAdaptationBlock(answer); break; - case Adaptation::Answer::akError: - handleAdaptationFailure(ERR_DETAIL_CLT_REQMOD_ABORT, !answer.final); + case Adaptation::Answer::akError: { + static const auto d = MakeNamedErrorDetail("CLT_REQMOD_ABORT"); + handleAdaptationFailure(d, !answer.final); break; } + } } void @@ -2033,7 +2066,8 @@ void ClientHttpRequest::handleAdaptationBlock(const Adaptation::Answer &answer) { - request->detailError(ERR_ACCESS_DENIED, ERR_DETAIL_REQMOD_BLOCK); + static const auto d = MakeNamedErrorDetail("REQMOD_BLOCK"); + request->detailError(ERR_ACCESS_DENIED, d); AclMatchedName = answer.ruleId.termedBuf(); assert(calloutContext); calloutContext->clientAccessCheckDone(ACCESS_DENIED); @@ -2114,17 +2148,19 @@ debugs(85,3, HERE << "REQMOD body production failed"); if (request_satisfaction_mode) { // too late to recover or serve an error - request->detailError(ERR_ICAP_FAILURE, ERR_DETAIL_CLT_REQMOD_RESP_BODY); + static const auto d = MakeNamedErrorDetail("CLT_REQMOD_RESP_BODY"); + request->detailError(ERR_ICAP_FAILURE, d); const Comm::ConnectionPointer c = getConn()->clientConnection; Must(Comm::IsConnOpen(c)); c->close(); // drastic, but we may be writing a response already } else { - handleAdaptationFailure(ERR_DETAIL_CLT_REQMOD_REQ_BODY); + static const auto d = MakeNamedErrorDetail("CLT_REQMOD_REQ_BODY"); + handleAdaptationFailure(d); } } void -ClientHttpRequest::handleAdaptationFailure(int errDetail, bool bypassable) +ClientHttpRequest::handleAdaptationFailure(const ErrorDetail::Pointer &errDetail, bool bypassable) { debugs(85,3, HERE << "handleAdaptationFailure(" << bypassable << ")"); @@ -2170,7 +2206,7 @@ // XXX: modify and use with ClientRequestContext::clientAccessCheckDone too. void -ClientHttpRequest::calloutsError(const err_type error, const int errDetail) +ClientHttpRequest::calloutsError(const err_type error, const ErrorDetail::Pointer &errDetail) { // The original author of the code also wanted to pass an errno to // setReplyToError, but it seems unlikely that the errno reflects the diff -u -r -N squid-5.0.5/src/client_side_request.h squid-5.0.6/src/client_side_request.h --- squid-5.0.5/src/client_side_request.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/client_side_request.h 2021-05-10 21:02:34.000000000 +1200 @@ -65,12 +65,6 @@ ConnStateData * getConn() const { return (cbdataReferenceValid(conn_) ? conn_ : nullptr); } - void setConn(ConnStateData *aConn) { - if (conn_ != aConn) { - cbdataReferenceDone(conn_); - conn_ = cbdataReference(aConn); - } - } /// Initializes the current request with the virgin request. /// Call this method when the virgin request becomes known. @@ -149,7 +143,7 @@ dlink_node active; dlink_list client_stream; - int mRangeCLen(); + int64_t mRangeCLen() const; ClientRequestContext *calloutContext; void doCallouts(); @@ -166,8 +160,16 @@ /// neither the current request nor the parsed request URI are known void setErrorUri(const char *errorUri); + /// Prepares to satisfy a Range request with a generated HTTP 206 response. + /// Initializes range_iter state to allow raw range_iter access. + /// \returns Content-Length value for the future response; never negative + int64_t prepPartialResponseGeneration(); + /// Build an error reply. For use with the callouts. - void calloutsError(const err_type error, const int errDetail); + void calloutsError(const err_type error, const ErrorDetail::Pointer &errDetail); + + /// if necessary, stores new error information (if any) + void updateError(const Error &error); #if USE_ADAPTATION // AsyncJob virtual methods @@ -216,7 +218,7 @@ private: /// Handles an adaptation client request failure. /// Bypasses the error if possible, or build an error reply. - void handleAdaptationFailure(int errDetail, bool bypassable = false); + void handleAdaptationFailure(const ErrorDetail::Pointer &errDetail, bool bypassable = false); // Adaptation::Initiator API virtual void noteAdaptationAnswer(const Adaptation::Answer &answer); diff -u -r -N squid-5.0.5/src/comm/Makefile.am squid-5.0.6/src/comm/Makefile.am --- squid-5.0.5/src/comm/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/comm/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,7 +11,7 @@ noinst_LTLIBRARIES = libcomm.la ## Library holding comm socket handlers -libcomm_la_SOURCES= \ +libcomm_la_SOURCES = \ AcceptLimiter.cc \ AcceptLimiter.h \ ConnOpener.cc \ @@ -19,7 +19,6 @@ Connection.cc \ Connection.h \ Flag.h \ - forward.h \ IoCallback.cc \ IoCallback.h \ Loops.h \ @@ -36,5 +35,5 @@ UdpOpenDialer.h \ Write.cc \ Write.h \ - \ - comm_internal.h + comm_internal.h \ + forward.h diff -u -r -N squid-5.0.5/src/comm/Makefile.in squid-5.0.6/src/comm/Makefile.in --- squid-5.0.5/src/comm/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/comm/Makefile.in 2021-05-10 22:57:54.000000000 +1200 @@ -744,7 +744,6 @@ Connection.cc \ Connection.h \ Flag.h \ - forward.h \ IoCallback.cc \ IoCallback.h \ Loops.h \ @@ -761,8 +760,8 @@ UdpOpenDialer.h \ Write.cc \ Write.h \ - \ - comm_internal.h + comm_internal.h \ + forward.h all: all-am diff -u -r -N squid-5.0.5/src/comm/Read.cc squid-5.0.6/src/comm/Read.cc --- squid-5.0.5/src/comm/Read.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/comm/Read.cc 2021-05-10 21:02:34.000000000 +1200 @@ -101,6 +101,7 @@ } else if (retval == 0) { // remote closure (somewhat less) common // Note - read 0 == socket EOF, which is a valid read. params.flag = Comm::ENDFILE; + params.size = 0; } else if (retval < 0) { // connection errors are worst-case debugs(5, 3, params.conn << " Comm::COMM_ERROR: " << xstrerr(params.xerrno)); @@ -108,6 +109,7 @@ params.flag = Comm::INPROGRESS; else params.flag = Comm::COMM_ERROR; + params.size = 0; } return params.flag; diff -u -r -N squid-5.0.5/src/comm/TcpAcceptor.cc squid-5.0.6/src/comm/TcpAcceptor.cc --- squid-5.0.5/src/comm/TcpAcceptor.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/comm/TcpAcceptor.cc 2021-05-10 21:02:34.000000000 +1200 @@ -382,7 +382,13 @@ } Must(sock >= 0); + + // Sync with Comm ASAP so that abandoned details can properly close(). + // XXX : these are not all HTTP requests. use a note about type and ip:port details-> + // so we end up with a uniform "(HTTP|FTP-data|HTTPS|...) remote-ip:remote-port" + fd_open(sock, FD_SOCKET, "HTTP Request"); details->fd = sock; + details->remote = *gai; // lookup the local-end details of this new connection @@ -426,11 +432,6 @@ } } - /* fdstat update */ - // XXX : these are not all HTTP requests. use a note about type and ip:port details-> - // so we end up with a uniform "(HTTP|FTP-data|HTTPS|...) remote-ip:remote-port" - fd_open(sock, FD_SOCKET, "HTTP Request"); - fde *F = &fd_table[sock]; details->remote.toStr(F->ipaddr,MAX_IPSTRLEN); F->remote_port = details->remote.port(); diff -u -r -N squid-5.0.5/src/DiskIO/AIO/Makefile.am squid-5.0.6/src/DiskIO/AIO/Makefile.am --- squid-5.0.5/src/DiskIO/AIO/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/DiskIO/AIO/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,13 +11,13 @@ noinst_LTLIBRARIES = libAIO.la libAIO_la_SOURCES = \ - async_io.h \ AIODiskFile.cc \ AIODiskFile.h \ AIODiskIOModule.cc \ AIODiskIOModule.h \ AIODiskIOStrategy.cc \ - AIODiskIOStrategy.h + AIODiskIOStrategy.h \ + async_io.h if ENABLE_WIN32_AIO libAIO_la_SOURCES += \ diff -u -r -N squid-5.0.5/src/DiskIO/AIO/Makefile.in squid-5.0.6/src/DiskIO/AIO/Makefile.in --- squid-5.0.5/src/DiskIO/AIO/Makefile.in 2021-02-08 13:40:45.000000000 +1300 +++ squid-5.0.6/src/DiskIO/AIO/Makefile.in 2021-05-10 22:57:52.000000000 +1200 @@ -168,9 +168,9 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libAIO_la_LIBADD = -am__libAIO_la_SOURCES_DIST = async_io.h AIODiskFile.cc AIODiskFile.h \ +am__libAIO_la_SOURCES_DIST = AIODiskFile.cc AIODiskFile.h \ AIODiskIOModule.cc AIODiskIOModule.h AIODiskIOStrategy.cc \ - AIODiskIOStrategy.h aio_win32.cc aio_win32.h + AIODiskIOStrategy.h async_io.h aio_win32.cc aio_win32.h @ENABLE_WIN32_AIO_TRUE@am__objects_1 = aio_win32.lo am_libAIO_la_OBJECTS = AIODiskFile.lo AIODiskIOModule.lo \ AIODiskIOStrategy.lo $(am__objects_1) @@ -738,9 +738,9 @@ COMPAT_LIB = $(top_builddir)/compat/libcompatsquid.la $(LIBPROFILER) subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libAIO.la -libAIO_la_SOURCES = async_io.h AIODiskFile.cc AIODiskFile.h \ - AIODiskIOModule.cc AIODiskIOModule.h AIODiskIOStrategy.cc \ - AIODiskIOStrategy.h $(am__append_2) +libAIO_la_SOURCES = AIODiskFile.cc AIODiskFile.h AIODiskIOModule.cc \ + AIODiskIOModule.h AIODiskIOStrategy.cc AIODiskIOStrategy.h \ + async_io.h $(am__append_2) @ENABLE_WIN32_AIO_FALSE@EXTRA_DIST = \ @ENABLE_WIN32_AIO_FALSE@ aio_win32.cc \ @ENABLE_WIN32_AIO_FALSE@ aio_win32.h diff -u -r -N squid-5.0.5/src/DiskIO/DiskDaemon/Makefile.am squid-5.0.6/src/DiskIO/DiskDaemon/Makefile.am --- squid-5.0.5/src/DiskIO/DiskDaemon/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/DiskIO/DiskDaemon/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -12,15 +12,15 @@ libexec_PROGRAMS = diskd libDiskDaemon_la_SOURCES = \ - diomsg.h \ + DiskDaemonDiskIOModule.cc \ + DiskDaemonDiskIOModule.h \ DiskdAction.cc \ DiskdAction.h \ DiskdFile.cc \ DiskdFile.h \ DiskdIOStrategy.cc \ DiskdIOStrategy.h \ - DiskDaemonDiskIOModule.cc \ - DiskDaemonDiskIOModule.h + diomsg.h diskd_SOURCES = diskd.cc nodist_diskd_SOURCES = time.cc diff -u -r -N squid-5.0.5/src/DiskIO/DiskDaemon/Makefile.in squid-5.0.6/src/DiskIO/DiskDaemon/Makefile.in --- squid-5.0.5/src/DiskIO/DiskDaemon/Makefile.in 2021-02-08 13:40:45.000000000 +1300 +++ squid-5.0.6/src/DiskIO/DiskDaemon/Makefile.in 2021-05-10 22:57:53.000000000 +1200 @@ -168,8 +168,8 @@ PROGRAMS = $(libexec_PROGRAMS) LTLIBRARIES = $(noinst_LTLIBRARIES) libDiskDaemon_la_LIBADD = -am_libDiskDaemon_la_OBJECTS = DiskdAction.lo DiskdFile.lo \ - DiskdIOStrategy.lo DiskDaemonDiskIOModule.lo +am_libDiskDaemon_la_OBJECTS = DiskDaemonDiskIOModule.lo DiskdAction.lo \ + DiskdFile.lo DiskdIOStrategy.lo libDiskDaemon_la_OBJECTS = $(am_libDiskDaemon_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -748,15 +748,15 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libDiskDaemon.la libDiskDaemon_la_SOURCES = \ - diomsg.h \ + DiskDaemonDiskIOModule.cc \ + DiskDaemonDiskIOModule.h \ DiskdAction.cc \ DiskdAction.h \ DiskdFile.cc \ DiskdFile.h \ DiskdIOStrategy.cc \ DiskdIOStrategy.h \ - DiskDaemonDiskIOModule.cc \ - DiskDaemonDiskIOModule.h + diomsg.h diskd_SOURCES = diskd.cc nodist_diskd_SOURCES = time.cc diff -u -r -N squid-5.0.5/src/DiskIO/DiskThreads/Makefile.am squid-5.0.6/src/DiskIO/DiskThreads/Makefile.am --- squid-5.0.5/src/DiskIO/DiskThreads/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/DiskIO/DiskThreads/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,7 +11,6 @@ noinst_LTLIBRARIES = libDiskThreads.la libDiskThreads_la_SOURCES = \ - async_io.cc \ CommIO.cc \ CommIO.h \ DiskThreads.h \ @@ -20,7 +19,8 @@ DiskThreadsDiskIOModule.cc \ DiskThreadsDiskIOModule.h \ DiskThreadsIOStrategy.cc \ - DiskThreadsIOStrategy.h + DiskThreadsIOStrategy.h \ + async_io.cc if ENABLE_WIN32_AIOPS libDiskThreads_la_SOURCES += aiops_win32.cc diff -u -r -N squid-5.0.5/src/DiskIO/DiskThreads/Makefile.in squid-5.0.6/src/DiskIO/DiskThreads/Makefile.in --- squid-5.0.5/src/DiskIO/DiskThreads/Makefile.in 2021-02-08 13:40:45.000000000 +1300 +++ squid-5.0.6/src/DiskIO/DiskThreads/Makefile.in 2021-05-10 22:57:53.000000000 +1200 @@ -166,16 +166,16 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libDiskThreads_la_LIBADD = -am__libDiskThreads_la_SOURCES_DIST = async_io.cc CommIO.cc CommIO.h \ - DiskThreads.h DiskThreadsDiskFile.cc DiskThreadsDiskFile.h \ +am__libDiskThreads_la_SOURCES_DIST = CommIO.cc CommIO.h DiskThreads.h \ + DiskThreadsDiskFile.cc DiskThreadsDiskFile.h \ DiskThreadsDiskIOModule.cc DiskThreadsDiskIOModule.h \ - DiskThreadsIOStrategy.cc DiskThreadsIOStrategy.h \ + DiskThreadsIOStrategy.cc DiskThreadsIOStrategy.h async_io.cc \ aiops_win32.cc aiops.cc @ENABLE_WIN32_AIOPS_TRUE@am__objects_1 = aiops_win32.lo @ENABLE_WIN32_AIOPS_FALSE@am__objects_2 = aiops.lo -am_libDiskThreads_la_OBJECTS = async_io.lo CommIO.lo \ - DiskThreadsDiskFile.lo DiskThreadsDiskIOModule.lo \ - DiskThreadsIOStrategy.lo $(am__objects_1) $(am__objects_2) +am_libDiskThreads_la_OBJECTS = CommIO.lo DiskThreadsDiskFile.lo \ + DiskThreadsDiskIOModule.lo DiskThreadsIOStrategy.lo \ + async_io.lo $(am__objects_1) $(am__objects_2) libDiskThreads_la_OBJECTS = $(am_libDiskThreads_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -742,10 +742,10 @@ COMPAT_LIB = $(top_builddir)/compat/libcompatsquid.la $(LIBPROFILER) subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libDiskThreads.la -libDiskThreads_la_SOURCES = async_io.cc CommIO.cc CommIO.h \ - DiskThreads.h DiskThreadsDiskFile.cc DiskThreadsDiskFile.h \ +libDiskThreads_la_SOURCES = CommIO.cc CommIO.h DiskThreads.h \ + DiskThreadsDiskFile.cc DiskThreadsDiskFile.h \ DiskThreadsDiskIOModule.cc DiskThreadsDiskIOModule.h \ - DiskThreadsIOStrategy.cc DiskThreadsIOStrategy.h \ + DiskThreadsIOStrategy.cc DiskThreadsIOStrategy.h async_io.cc \ $(am__append_2) $(am__append_3) @ENABLE_WIN32_AIOPS_FALSE@EXTRA_DIST = aiops_win32.cc @ENABLE_WIN32_AIOPS_TRUE@EXTRA_DIST = aiops.cc diff -u -r -N squid-5.0.5/src/DiskIO/IpcIo/IpcIoFile.cc squid-5.0.6/src/DiskIO/IpcIo/IpcIoFile.cc --- squid-5.0.5/src/DiskIO/IpcIo/IpcIoFile.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/DiskIO/IpcIo/IpcIoFile.cc 2021-05-10 21:02:34.000000000 +1200 @@ -23,6 +23,7 @@ #include "ipc/Messages.h" #include "ipc/Port.h" #include "ipc/Queue.h" +#include "ipc/StrandCoord.h" #include "ipc/StrandSearch.h" #include "ipc/UdsOp.h" #include "sbuf/SBuf.h" @@ -122,20 +123,13 @@ queue->localRateLimit().store(config.ioRate); - Ipc::HereIamMessage ann(Ipc::StrandCoord(KidIdentifier, myPid)); - ann.strand.tag = dbName; - Ipc::TypedMsgHdr message; - ann.pack(message); - SendMessage(Ipc::Port::CoordinatorAddr(), message); + Ipc::StrandMessage::NotifyCoordinator(Ipc::mtRegisterStrand, dbName.termedBuf()); ioRequestor->ioCompletedNotification(); return; } - Ipc::StrandSearchRequest request; - request.requestorId = KidIdentifier; - request.tag = dbName; - + const Ipc::StrandSearchRequest request(dbName); Ipc::TypedMsgHdr msg; request.pack(msg); Ipc::SendMessage(Ipc::Port::CoordinatorAddr(), msg); @@ -147,7 +141,7 @@ } void -IpcIoFile::openCompleted(const Ipc::StrandSearchResponse *const response) +IpcIoFile::openCompleted(const Ipc::StrandMessage *const response) { Must(diskId < 0); // we do not know our disker yet @@ -434,7 +428,7 @@ /// called when coordinator responds to worker open request void -IpcIoFile::HandleOpenResponse(const Ipc::StrandSearchResponse &response) +IpcIoFile::HandleOpenResponse(const Ipc::StrandMessage &response) { debugs(47, 7, HERE << "coordinator response to open request"); for (IpcIoFileList::iterator i = WaitingForOpen.begin(); diff -u -r -N squid-5.0.5/src/DiskIO/IpcIo/IpcIoFile.h squid-5.0.6/src/DiskIO/IpcIo/IpcIoFile.h --- squid-5.0.5/src/DiskIO/IpcIo/IpcIoFile.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/DiskIO/IpcIo/IpcIoFile.h 2021-05-10 21:02:34.000000000 +1200 @@ -82,7 +82,7 @@ virtual bool ioInProgress() const; /// handle open response from coordinator - static void HandleOpenResponse(const Ipc::StrandSearchResponse &response); + static void HandleOpenResponse(const Ipc::StrandMessage &); /// handle queue push notifications from worker or disker static void HandleNotification(const Ipc::TypedMsgHdr &msg); @@ -91,7 +91,7 @@ protected: friend class IpcIoPendingRequest; - void openCompleted(const Ipc::StrandSearchResponse *const response); + void openCompleted(const Ipc::StrandMessage *); void readCompleted(ReadRequest *readRequest, IpcIoMsg *const response); void writeCompleted(WriteRequest *writeRequest, const IpcIoMsg *const response); bool canWait() const; diff -u -r -N squid-5.0.5/src/dns/Makefile.am squid-5.0.6/src/dns/Makefile.am --- squid-5.0.5/src/dns/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/dns/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,9 +11,9 @@ noinst_LTLIBRARIES = libdns.la libdns_la_SOURCES = \ - forward.h \ LookupDetails.cc \ LookupDetails.h \ + forward.h \ rfc1035.cc \ rfc1035.h \ rfc2671.cc \ diff -u -r -N squid-5.0.5/src/dns/Makefile.in squid-5.0.6/src/dns/Makefile.in --- squid-5.0.5/src/dns/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/dns/Makefile.in 2021-05-10 22:57:54.000000000 +1200 @@ -731,9 +731,9 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libdns.la libdns_la_SOURCES = \ - forward.h \ LookupDetails.cc \ LookupDetails.h \ + forward.h \ rfc1035.cc \ rfc1035.h \ rfc2671.cc \ diff -u -r -N squid-5.0.5/src/err_detail_type.h squid-5.0.6/src/err_detail_type.h --- squid-5.0.5/src/err_detail_type.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/err_detail_type.h 1970-01-01 12:00:00.000000000 +1200 @@ -1,54 +0,0 @@ -/* - * Copyright (C) 1996-2021 The Squid Software Foundation and contributors - * - * Squid software is distributed under GPLv2+ license and includes - * contributions from numerous individuals and organizations. - * Please see the COPYING and CONTRIBUTORS files for details. - */ - -#ifndef _SQUID_ERR_DETAIL_H -#define _SQUID_ERR_DETAIL_H - -typedef enum { - ERR_DETAIL_NONE, - ERR_DETAIL_START = 100000, // to avoid clashes with most OS error numbers - ERR_DETAIL_REDIRECTOR_TIMEDOUT = ERR_DETAIL_START, // External redirector request timed-out - ERR_DETAIL_CLT_REQMOD_ABORT, // client-facing code detected transaction abort - ERR_DETAIL_CLT_REQMOD_REQ_BODY, // client-facing code detected REQMOD request body adaptation failure - ERR_DETAIL_CLT_REQMOD_RESP_BODY, // client-facing code detected REQMOD satisfaction reply body failure - ERR_DETAIL_SRV_REQMOD_REQ_BODY, // server-facing code detected REQMOD request body abort - ERR_DETAIL_ICAP_RESPMOD_EARLY, // RESPMOD failed w/o store entry - ERR_DETAIL_ICAP_RESPMOD_LATE, // RESPMOD failed with a store entry - ERR_DETAIL_REQMOD_BLOCK, // REQMOD denied client access - ERR_DETAIL_RESPMOD_BLOCK_EARLY, // RESPMOD denied client access to HTTP response, before any part of the response was sent - ERR_DETAIL_RESPMOD_BLOCK_LATE, // RESPMOD denied client access to HTTP response, after [a part of] the response was sent - ERR_DETAIL_ICAP_XACT_START, // transaction start failure - ERR_DETAIL_ICAP_XACT_SSL_START, // transaction start failure - ERR_DETAIL_ICAP_XACT_BODY_CONSUMER_ABORT, // transaction body consumer gone - ERR_DETAIL_ICAP_INIT_GONE, // initiator gone - ERR_DETAIL_ICAP_XACT_CLOSE, // ICAP connection closed unexpectedly - ERR_DETAIL_ICAP_XACT_OTHER, // other ICAP transaction errors - ERR_DETAIL_EXCEPTION_OTHER, //other errors ( eg std C++ lib errors) - ERR_DETAIL_MAX, - ERR_DETAIL_EXCEPTION_START = 110000 // offset for exception ID details -} err_detail_type; - -extern const char *err_detail_type_str[]; - -inline -const char *errorDetailName(int errDetailId) -{ - if (errDetailId < ERR_DETAIL_START) - return "SYSERR"; - - if (errDetailId < ERR_DETAIL_MAX) - return err_detail_type_str[errDetailId-ERR_DETAIL_START+2]; - - if (errDetailId >=ERR_DETAIL_EXCEPTION_START) - return "EXCEPTION"; - - return "UNKNOWN"; -} - -#endif - diff -u -r -N squid-5.0.5/src/error/Detail.cc squid-5.0.6/src/error/Detail.cc --- squid-5.0.5/src/error/Detail.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/error/Detail.cc 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,58 @@ +/* + * Copyright (C) 1996-2021 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +#include "squid.h" +#include "error/Detail.h" +#include "HttpRequest.h" +#include "sbuf/SBuf.h" +#include "sbuf/Stream.h" + +/// details an error by tying it to a uniquely named circumstance +class NamedErrorDetail: public ErrorDetail +{ +public: + // convert from c-string to SBuf to simplify creation and optimize usage + /// \param aName must not contain characters that require quoting in access logs or HTML + explicit NamedErrorDetail(const char *aName): name(aName) {} + + /* ErrorDetail API */ + virtual SBuf brief() const override { return name; } + virtual SBuf verbose(const HttpRequestPointer &) const override { return name; } + +private: + /// distinguishes us from all other NamedErrorDetail objects + SBuf name; +}; + +/* ErrorDetail */ + +std::ostream & +operator <<(std::ostream &os, const ErrorDetail &detail) +{ + os << detail.brief(); + return os; +} + +std::ostream & +operator <<(std::ostream &os, const ErrorDetail::Pointer &detail) +{ + if (detail) + os << *detail; + else + os << "[no details]"; + return os; +} + +/* NamedErrorDetail */ + +ErrorDetail::Pointer +MakeNamedErrorDetail(const char *name) +{ + return new NamedErrorDetail(name); +} + diff -u -r -N squid-5.0.5/src/error/Detail.h squid-5.0.6/src/error/Detail.h --- squid-5.0.5/src/error/Detail.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/error/Detail.h 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,47 @@ +/* + * Copyright (C) 1996-2021 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +#ifndef _SQUID_SRC_ERROR_DETAIL_H +#define _SQUID_SRC_ERROR_DETAIL_H + +#include "base/Here.h" +#include "base/RefCount.h" +#include "error/forward.h" +#include "http/forward.h" +#include "mem/forward.h" +#include "sbuf/forward.h" + +/// interface for supplying additional information about a transaction failure +class ErrorDetail: public RefCountable +{ +public: + using Pointer = ErrorDetailPointer; + + virtual ~ErrorDetail() {} + + /// \returns a single "token" summarizing available details + /// suitable as an access.log field and similar output processed by programs + virtual SBuf brief() const = 0; + + /// \returns all available details; may be customized for the given request + /// suitable for error pages and other output meant for human consumption + virtual SBuf verbose(const HttpRequestPointer &) const = 0; +}; + +/// creates a new NamedErrorDetail object with a unique name +/// \see NamedErrorDetail::Name for naming restrictions +ErrorDetail::Pointer MakeNamedErrorDetail(const char *name); + +/// dump the given ErrorDetail (for debugging) +std::ostream &operator <<(std::ostream &os, const ErrorDetail &); + +/// dump the given ErrorDetail pointer which may be nil (for debugging) +std::ostream &operator <<(std::ostream &os, const ErrorDetail::Pointer &); + +#endif /* _SQUID_SRC_ERROR_DETAIL_H */ + diff -u -r -N squid-5.0.5/src/error/Error.cc squid-5.0.6/src/error/Error.cc --- squid-5.0.5/src/error/Error.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/error/Error.cc 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,39 @@ +/* + * Copyright (C) 1996-2021 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +/* DEBUG: section 04 Error Management */ + +#include "squid.h" +#include "Debug.h" +#include "error/Error.h" + +void +Error::update(const Error &recent) +{ + if (*this) + debugs(4, 5, "old: " << *this); + if (!recent) + return; // no changes + debugs(4, 3, "recent: " << recent); + // checking category and detail separately may cause inconsistency, but + // may result in more details available if they only become available later + if (category == ERR_NONE) + category = recent.category; // may still be ERR_NONE + if (!detail) + detail = recent.detail; // may still be nil +} + +std::ostream & +operator <<(std::ostream &os, const Error &error) +{ + os << errorTypeName(error.category); + if (error.detail) + os << '/' << *error.detail; + return os; +} + diff -u -r -N squid-5.0.5/src/error/Error.h squid-5.0.6/src/error/Error.h --- squid-5.0.5/src/error/Error.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/error/Error.h 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,63 @@ +/* + * Copyright (C) 1996-2021 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +#ifndef _SQUID_SRC_ERROR_ERROR_H +#define _SQUID_SRC_ERROR_ERROR_H + +#include "error/Detail.h" +#include "error/forward.h" + +#include + +/// a transaction problem +class Error { +public: + Error() = default; + Error(const err_type c): category(c) {} ///< support implicit conversions + Error(const err_type c, const ErrorDetailPointer &d): category(c), detail(d) {} + + explicit operator bool() const { return category != ERR_NONE; } + + /// if necessary, stores the given error information (if any) + void update(const Error &); + + /// convenience wrapper for update(Error) + void update(const err_type c, const ErrorDetailPointer &d) { update(Error(c, d)); } + + /// switch to the default "no error information" state + void clear() { *this = Error(); } + + err_type category = ERR_NONE; ///< primary error classification (or ERR_NONE) + ErrorDetailPointer detail; ///< additional details about the error +}; + +extern const char *err_type_str[]; + +inline +err_type +errorTypeByName(const char *name) +{ + for (int i = 0; i < ERR_MAX; ++i) + if (strcmp(name, err_type_str[i]) == 0) + return (err_type)i; + return ERR_MAX; +} + +inline +const char * +errorTypeName(err_type err) +{ + if (err < ERR_NONE || err >= ERR_MAX) + return "UNKNOWN"; + return err_type_str[err]; +} + +std::ostream &operator <<(std::ostream &os, const Error &error); + +#endif /* _SQUID_SRC_ERROR_ERROR_H */ + diff -u -r -N squid-5.0.5/src/error/ExceptionErrorDetail.h squid-5.0.6/src/error/ExceptionErrorDetail.h --- squid-5.0.5/src/error/ExceptionErrorDetail.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/error/ExceptionErrorDetail.h 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,42 @@ +/* + * Copyright (C) 1996-2021 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +#ifndef _SQUID_SRC_ERROR_EXCEPTIONERRORDETAIL_H +#define _SQUID_SRC_ERROR_EXCEPTIONERRORDETAIL_H + +#include "error/Detail.h" +#include "sbuf/SBuf.h" +#include "sbuf/Stream.h" + +/// offset for exception ID details, for backward compatibility +#define SQUID_EXCEPTION_START_BASE 110000 + +/// Details a failure reported via a C++ exception. Stores exception ID which +/// scripts/calc-must-ids.sh can map to a relevant source code location. +class ExceptionErrorDetail: public ErrorDetail +{ + MEMPROXY_CLASS(ExceptionErrorDetail); + +public: + explicit ExceptionErrorDetail(const SourceLocationId id): exceptionId(SQUID_EXCEPTION_START_BASE + id) {} + + /* ErrorDetail API */ + virtual SBuf brief() const override { + return ToSBuf("exception=", std::hex, exceptionId); + } + + virtual SBuf verbose(const HttpRequestPointer &) const override { + return ToSBuf("Exception (ID=", std::hex, exceptionId, ')'); + } + +private: + SourceLocationId exceptionId; ///< identifies the thrower or catcher +}; + +#endif /* _SQUID_SRC_ERROR_EXCEPTIONERRORDETAIL_H */ + diff -u -r -N squid-5.0.5/src/error/forward.h squid-5.0.6/src/error/forward.h --- squid-5.0.5/src/error/forward.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/error/forward.h 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,97 @@ +/* + * Copyright (C) 1996-2021 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +#ifndef _SQUID_SRC_ERROR_FORWARD_H +#define _SQUID_SRC_ERROR_FORWARD_H + +#include "base/forward.h" + +typedef enum { + ERR_NONE, + + /* Access Permission Errors. Prefix new with ERR_ACCESS_ */ + ERR_ACCESS_DENIED, + ERR_CACHE_ACCESS_DENIED, + ERR_CACHE_MGR_ACCESS_DENIED, + ERR_FORWARDING_DENIED, + ERR_NO_RELAY, + ERR_CANNOT_FORWARD, + + /* TCP Errors. */ + ERR_READ_TIMEOUT, + ERR_LIFETIME_EXP, + ERR_READ_ERROR, + ERR_WRITE_ERROR, + ERR_CONNECT_FAIL, + ERR_SECURE_CONNECT_FAIL, + ERR_SOCKET_FAILURE, + + /* DNS Errors */ + ERR_DNS_FAIL, + ERR_URN_RESOLVE, + + /* HTTP Errors */ + ERR_ONLY_IF_CACHED_MISS, /* failure to satisfy only-if-cached request */ + ERR_TOO_BIG, + ERR_INVALID_RESP, + ERR_UNSUP_HTTPVERSION, /* HTTP version is not supported */ + ERR_INVALID_REQ, + ERR_UNSUP_REQ, + ERR_INVALID_URL, + ERR_ZERO_SIZE_OBJECT, + ERR_PRECONDITION_FAILED, + ERR_CONFLICT_HOST, + + /* FTP Errors */ + ERR_FTP_DISABLED, + ERR_FTP_UNAVAILABLE, + ERR_FTP_FAILURE, + ERR_FTP_PUT_ERROR, + ERR_FTP_NOT_FOUND, + ERR_FTP_FORBIDDEN, + ERR_FTP_PUT_CREATED, /* !error,a note that the file was created */ + ERR_FTP_PUT_MODIFIED, /* modified, !created */ + + /* ESI Errors */ + ERR_ESI, /* Failure to perform ESI processing */ + + /* ICAP Errors */ + ERR_ICAP_FAILURE, + + /* Squid problem */ + ERR_GATEWAY_FAILURE, + + /* Special Cases */ + ERR_DIR_LISTING, /* Display of remote directory (FTP, Gopher) */ + ERR_SQUID_SIGNATURE, /* not really an error */ + ERR_SHUTTING_DOWN, + ERR_PROTOCOL_UNKNOWN, + + // NOTE: error types defined below TCP_RESET are optional and do not generate + // a log warning if the files are missing + TCP_RESET, // Send TCP RST packet instead of error page + + ERR_CLIENT_GONE, // No client to send the error page to + ERR_SECURE_ACCEPT_FAIL, // Rejects the SSL connection intead of error page + ERR_REQUEST_START_TIMEOUT, // Aborts the connection instead of error page + ERR_REQUEST_PARSE_TIMEOUT, // Aborts the connection instead of error page + ERR_RELAY_REMOTE, // Sends server reply instead of error page + + /* Cache Manager GUI can install a manager index/home page */ + MGR_INDEX, + + ERR_MAX +} err_type; + +class Error; +class ErrorDetail; + +typedef RefCount ErrorDetailPointer; + +#endif /* _SQUID_SRC_ERROR_FORWARD_H */ + diff -u -r -N squid-5.0.5/src/error/Makefile.am squid-5.0.6/src/error/Makefile.am --- squid-5.0.5/src/error/Makefile.am 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/error/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,33 @@ +## Copyright (C) 1996-2021 The Squid Software Foundation and contributors +## +## Squid software is distributed under GPLv2+ license and includes +## contributions from numerous individuals and organizations. +## Please see the COPYING and CONTRIBUTORS files for details. +## + +include $(top_srcdir)/src/Common.am +include $(top_srcdir)/src/TestHeaders.am + +categories.cc: forward.h $(top_srcdir)/src/mk-string-arrays.awk + $(AWK) -f $(top_srcdir)/src/mk-string-arrays.awk ifile=error/forward.h < $(srcdir)/forward.h > $@ || ($(RM) -f $@ && exit 1) + +BUILT_SOURCES = \ + categories.cc + +noinst_LTLIBRARIES = liberror.la + +liberror_la_SOURCES = \ + Detail.cc \ + Detail.h \ + Error.cc \ + Error.h \ + ExceptionErrorDetail.h \ + SysErrorDetail.h \ + forward.h + +nodist_liberror_la_SOURCES = \ + $(BUILT_SOURCES) + +CLEANFILES += \ + $(BUILT_SOURCES) + diff -u -r -N squid-5.0.5/src/error/Makefile.in squid-5.0.6/src/error/Makefile.in --- squid-5.0.5/src/error/Makefile.in 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/error/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -0,0 +1,1254 @@ +# Makefile.in generated by automake 1.16.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2020 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +check_PROGRAMS = +@ENABLE_LOADABLE_MODULES_TRUE@am__append_1 = $(INCLTDL) +subdir = src/error +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude/ax_with_prog.m4 \ + $(top_srcdir)/acinclude/init.m4 \ + $(top_srcdir)/acinclude/squid-util.m4 \ + $(top_srcdir)/acinclude/compiler-flags.m4 \ + $(top_srcdir)/acinclude/os-deps.m4 \ + $(top_srcdir)/acinclude/krb5.m4 $(top_srcdir)/acinclude/pam.m4 \ + $(top_srcdir)/acinclude/pkg.m4 $(top_srcdir)/acinclude/tdb.m4 \ + $(top_srcdir)/acinclude/lib-checks.m4 \ + $(top_srcdir)/acinclude/ax_cxx_compile_stdcxx_11.m4 \ + $(top_srcdir)/acinclude/ax_cxx_0x_types.m4 \ + $(top_srcdir)/src/auth/basic/helpers.m4 \ + $(top_srcdir)/src/auth/basic/DB/required.m4 \ + $(top_srcdir)/src/auth/basic/LDAP/required.m4 \ + $(top_srcdir)/src/auth/basic/NCSA/required.m4 \ + $(top_srcdir)/src/auth/basic/NIS/required.m4 \ + $(top_srcdir)/src/auth/basic/PAM/required.m4 \ + $(top_srcdir)/src/auth/basic/POP3/required.m4 \ + $(top_srcdir)/src/auth/basic/RADIUS/required.m4 \ + $(top_srcdir)/src/auth/basic/SASL/required.m4 \ + $(top_srcdir)/src/auth/basic/SMB/required.m4 \ + $(top_srcdir)/src/auth/basic/SMB_LM/required.m4 \ + $(top_srcdir)/src/auth/basic/SSPI/required.m4 \ + $(top_srcdir)/src/auth/basic/fake/required.m4 \ + $(top_srcdir)/src/auth/basic/getpwnam/required.m4 \ + $(top_srcdir)/src/auth/digest/helpers.m4 \ + $(top_srcdir)/src/auth/digest/eDirectory/required.m4 \ + $(top_srcdir)/src/auth/digest/file/required.m4 \ + $(top_srcdir)/src/auth/digest/LDAP/required.m4 \ + $(top_srcdir)/src/auth/negotiate/helpers.m4 \ + $(top_srcdir)/src/auth/negotiate/SSPI/required.m4 \ + $(top_srcdir)/src/auth/negotiate/kerberos/required.m4 \ + $(top_srcdir)/src/auth/negotiate/wrapper/required.m4 \ + $(top_srcdir)/src/auth/ntlm/helpers.m4 \ + $(top_srcdir)/src/auth/ntlm/fake/required.m4 \ + $(top_srcdir)/src/auth/ntlm/SMB_LM/required.m4 \ + $(top_srcdir)/src/auth/ntlm/SSPI/required.m4 \ + $(top_srcdir)/src/log/helpers.m4 \ + $(top_srcdir)/src/log/DB/required.m4 \ + $(top_srcdir)/src/log/file/required.m4 \ + $(top_srcdir)/src/acl/external/helpers.m4 \ + $(top_srcdir)/src/acl/external/AD_group/required.m4 \ + $(top_srcdir)/src/acl/external/LDAP_group/required.m4 \ + $(top_srcdir)/src/acl/external/LM_group/required.m4 \ + $(top_srcdir)/src/acl/external/delayer/required.m4 \ + $(top_srcdir)/src/acl/external/SQL_session/required.m4 \ + $(top_srcdir)/src/acl/external/eDirectory_userip/required.m4 \ + $(top_srcdir)/src/acl/external/file_userip/required.m4 \ + $(top_srcdir)/src/acl/external/kerberos_ldap_group/required.m4 \ + $(top_srcdir)/src/acl/external/kerberos_sid_group/required.m4 \ + $(top_srcdir)/src/acl/external/session/required.m4 \ + $(top_srcdir)/src/acl/external/time_quota/required.m4 \ + $(top_srcdir)/src/acl/external/unix_group/required.m4 \ + $(top_srcdir)/src/acl/external/wbinfo_group/required.m4 \ + $(top_srcdir)/src/http/url_rewriters/helpers.m4 \ + $(top_srcdir)/src/http/url_rewriters/fake/required.m4 \ + $(top_srcdir)/src/http/url_rewriters/LFS/required.m4 \ + $(top_srcdir)/src/security/cert_validators/helpers.m4 \ + $(top_srcdir)/src/security/cert_validators/fake/required.m4 \ + $(top_srcdir)/src/security/cert_generators/helpers.m4 \ + $(top_srcdir)/src/security/cert_generators/file/required.m4 \ + $(top_srcdir)/src/store/id_rewriters/helpers.m4 \ + $(top_srcdir)/src/store/id_rewriters/file/required.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/include/autoconf.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +liberror_la_LIBADD = +am_liberror_la_OBJECTS = Detail.lo Error.lo +am__objects_1 = categories.lo +nodist_liberror_la_OBJECTS = $(am__objects_1) +liberror_la_OBJECTS = $(am_liberror_la_OBJECTS) \ + $(nodist_liberror_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = +depcomp = $(SHELL) $(top_srcdir)/cfgaux/depcomp +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/Detail.Plo ./$(DEPDIR)/Error.Plo \ + ./$(DEPDIR)/categories.Plo +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(liberror_la_SOURCES) $(nodist_liberror_la_SOURCES) +DIST_SOURCES = $(liberror_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/cfgaux/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/cfgaux/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/cfgaux/depcomp \ + $(top_srcdir)/cfgaux/test-driver $(top_srcdir)/src/Common.am \ + $(top_srcdir)/src/TestHeaders.am +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADAPTATION_LIBS = @ADAPTATION_LIBS@ +AIOLIB = @AIOLIB@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AR_R = @AR_R@ +ATOMICLIB = @ATOMICLIB@ +AUTH_LIBS_TO_BUILD = @AUTH_LIBS_TO_BUILD@ +AUTH_MODULES = @AUTH_MODULES@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASIC_AUTH_HELPERS = @BASIC_AUTH_HELPERS@ +BUILDCXX = @BUILDCXX@ +BUILDCXXFLAGS = @BUILDCXXFLAGS@ +BZR = @BZR@ +CACHE_EFFECTIVE_USER = @CACHE_EFFECTIVE_USER@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CGIEXT = @CGIEXT@ +CHMOD = @CHMOD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CRYPTLIB = @CRYPTLIB@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFAULT_HOSTS = @DEFAULT_HOSTS@ +DEFAULT_LOG_DIR = @DEFAULT_LOG_DIR@ +DEFAULT_PID_FILE = @DEFAULT_PID_FILE@ +DEFAULT_SWAP_DIR = @DEFAULT_SWAP_DIR@ + +# Make ./configure location settings above available to the code +DEFS = @DEFS@ -DDEFAULT_CONFIG_FILE=\"$(DEFAULT_CONFIG_FILE)\" \ + -DDEFAULT_SQUID_DATA_DIR=\"$(datadir)\" \ + -DDEFAULT_SQUID_CONFIG_DIR=\"$(sysconfdir)\" +DEPDIR = @DEPDIR@ +DIGEST_AUTH_HELPERS = @DIGEST_AUTH_HELPERS@ +DISK_LIBS = @DISK_LIBS@ +DISK_MODULES = @DISK_MODULES@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ +EXEEXT = @EXEEXT@ +EXPATLIB = @EXPATLIB@ +EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ +EXT_LIBECAP_CFLAGS = @EXT_LIBECAP_CFLAGS@ +EXT_LIBECAP_LIBS = @EXT_LIBECAP_LIBS@ +FALSE = @FALSE@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_CXX11 = @HAVE_CXX11@ +INCLTDL = @INCLTDL@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KRB5INCS = @KRB5INCS@ +KRB5LIBS = @KRB5LIBS@ +LBERLIB = @LBERLIB@ +LD = @LD@ +LDAPLIB = @LDAPLIB@ +LDAPSEARCH = @LDAPSEARCH@ +LDFLAGS = @LDFLAGS@ +LIBADD_DL = @LIBADD_DL@ +LIBADD_DLD_LINK = @LIBADD_DLD_LINK@ +LIBADD_DLOPEN = @LIBADD_DLOPEN@ +LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@ +LIBBDB_LIBS = @LIBBDB_LIBS@ +LIBCPPUNIT_CFLAGS = @LIBCPPUNIT_CFLAGS@ +LIBCPPUNIT_LIBS = @LIBCPPUNIT_LIBS@ +LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ +LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ +LIBLTDL = @LIBLTDL@ +LIBOBJS = @LIBOBJS@ +LIBOPENSSL_CFLAGS = @LIBOPENSSL_CFLAGS@ +LIBOPENSSL_LIBS = @LIBOPENSSL_LIBS@ +LIBPTHREADS = @LIBPTHREADS@ +LIBS = @LIBS@ +LIBSASL = @LIBSASL@ +LIBTDB_CFLAGS = @LIBTDB_CFLAGS@ +LIBTDB_LIBS = @LIBTDB_LIBS@ +LIBTOOL = @LIBTOOL@ +LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ +LIBXML2_LIBS = @LIBXML2_LIBS@ +LIB_KRB5_CFLAGS = @LIB_KRB5_CFLAGS@ +LIB_KRB5_LIBS = @LIB_KRB5_LIBS@ +LINUXDOC = @LINUXDOC@ +LIPO = @LIPO@ +LN = @LN@ +LN_S = @LN_S@ +LOG_DAEMON_HELPERS = @LOG_DAEMON_HELPERS@ +LTDLDEPS = @LTDLDEPS@ +LTDLINCL = @LTDLINCL@ +LTDLOPEN = @LTDLOPEN@ +LTLIBOBJS = @LTLIBOBJS@ +LT_ARGZ_H = @LT_ARGZ_H@ +LT_CONFIG_H = @LT_CONFIG_H@ +LT_DLLOADERS = @LT_DLLOADERS@ +LT_DLPREOPEN = @LT_DLPREOPEN@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MINGW_LIBS = @MINGW_LIBS@ +MKDIR = @MKDIR@ +MKDIR_P = @MKDIR_P@ +MV = @MV@ +NEGOTIATE_AUTH_HELPERS = @NEGOTIATE_AUTH_HELPERS@ +NETTLELIB = @NETTLELIB@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NTLM_AUTH_HELPERS = @NTLM_AUTH_HELPERS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PO2HTML = @PO2HTML@ +PO2TEXT = @PO2TEXT@ +POD2MAN = @POD2MAN@ +RANLIB = @RANLIB@ +REGEXLIB = @REGEXLIB@ +REPL_LIBS = @REPL_LIBS@ +REPL_OBJS = @REPL_OBJS@ +REPL_POLICIES = @REPL_POLICIES@ +RM = @RM@ +SECURITY_CERTGEN_HELPERS = @SECURITY_CERTGEN_HELPERS@ +SECURITY_CERTV_HELPERS = @SECURITY_CERTV_HELPERS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SH = @SH@ +SHELL = @SHELL@ +SMBCLIENT = @SMBCLIENT@ +SNMPLIB = @SNMPLIB@ +SQUID_CFLAGS = @SQUID_CFLAGS@ +SQUID_CXXFLAGS = @SQUID_CXXFLAGS@ +SSLLIB = @SSLLIB@ +STOREID_REWRITE_HELPERS = @STOREID_REWRITE_HELPERS@ +STORE_LIBS_TO_ADD = @STORE_LIBS_TO_ADD@ +STORE_LIBS_TO_BUILD = @STORE_LIBS_TO_BUILD@ +STORE_TESTS = @STORE_TESTS@ +STRIP = @STRIP@ +SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@ +SYSTEMD_LIBS = @SYSTEMD_LIBS@ +TR = @TR@ +TRUE = @TRUE@ +URL_REWRITE_HELPERS = @URL_REWRITE_HELPERS@ +VERSION = @VERSION@ +WBINFO = @WBINFO@ +WIN32_PSAPI = @WIN32_PSAPI@ +XMLLIB = @XMLLIB@ +XTRA_LIBS = @XTRA_LIBS@ +XTRA_OBJS = @XTRA_OBJS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +krb5_config = @krb5_config@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +ltdl_LIBOBJS = @ltdl_LIBOBJS@ +ltdl_LTLIBOBJS = @ltdl_LTLIBOBJS@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sys_symbol_underscore = @sys_symbol_underscore@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +DEFAULT_HTTP_PORT = 3128 +DEFAULT_ICP_PORT = 3130 +DEFAULT_PREFIX = $(prefix) +DEFAULT_CONFIG_DIR = $(sysconfdir) +DEFAULT_CONFIG_FILE = $(DEFAULT_CONFIG_DIR)/squid.conf +DEFAULT_MIME_TABLE = $(DEFAULT_CONFIG_DIR)/mime.conf +DEFAULT_SSL_CRTD = $(libexecdir)/`echo security_file_certgen | sed '$(transform);s/$$/$(EXEEXT)/'` +DEFAULT_LOG_PREFIX = $(DEFAULT_LOG_DIR) +DEFAULT_CACHE_LOG = $(DEFAULT_LOG_PREFIX)/cache.log +DEFAULT_ACCESS_LOG = $(DEFAULT_LOG_PREFIX)/access.log +DEFAULT_STORE_LOG = $(DEFAULT_LOG_PREFIX)/store.log +DEFAULT_NETDB_FILE = $(DEFAULT_SWAP_DIR)/netdb.state +DEFAULT_SSL_DB_DIR = $(DEFAULT_SWAP_DIR)/ssl_db +DEFAULT_PINGER = $(libexecdir)/`echo pinger | sed '$(transform);s/$$/$(EXEEXT)/'` +DEFAULT_UNLINKD = $(libexecdir)/`echo unlinkd | sed '$(transform);s/$$/$(EXEEXT)/'` +DEFAULT_LOGFILED = $(libexecdir)/`echo log_file_daemon | sed '$(transform);s/$$/$(EXEEXT)/'` +DEFAULT_DISKD = $(libexecdir)/`echo diskd | sed '$(transform);s/$$/$(EXEEXT)/'` +DEFAULT_ICON_DIR = $(datadir)/icons +DEFAULT_ERROR_DIR = $(datadir)/errors +AM_CFLAGS = $(SQUID_CFLAGS) +AM_CXXFLAGS = $(SQUID_CXXFLAGS) +CLEANFILES = testHeaders $(BUILT_SOURCES) +TESTS = testHeaders +AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/include \ + -I$(top_srcdir)/lib -I$(top_srcdir)/src \ + -I$(top_builddir)/include $(LIBCPPUNIT_CFLAGS) $(KRB5INCS) \ + $(am__append_1) +@ENABLE_XPROF_STATS_FALSE@LIBPROFILER = +@ENABLE_XPROF_STATS_TRUE@LIBPROFILER = $(top_builddir)/lib/profiler/libprofiler.la +COMPAT_LIB = $(top_builddir)/compat/libcompatsquid.la $(LIBPROFILER) +subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) +BUILT_SOURCES = \ + categories.cc + +noinst_LTLIBRARIES = liberror.la +liberror_la_SOURCES = \ + Detail.cc \ + Detail.h \ + Error.cc \ + Error.h \ + ExceptionErrorDetail.h \ + SysErrorDetail.h \ + forward.h + +nodist_liberror_la_SOURCES = \ + $(BUILT_SOURCES) + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .log .o .obj .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/src/Common.am $(top_srcdir)/src/TestHeaders.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/error/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/error/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ + esac; +$(top_srcdir)/src/Common.am $(top_srcdir)/src/TestHeaders.am $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +liberror.la: $(liberror_la_OBJECTS) $(liberror_la_DEPENDENCIES) $(EXTRA_liberror_la_DEPENDENCIES) + $(AM_V_CXXLD)$(CXXLINK) $(liberror_la_OBJECTS) $(liberror_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Detail.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Error.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/categories.Plo@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) + +.cc.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + elif test -n "$$redo_logs"; then \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: $(check_PROGRAMS) + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all $(check_PROGRAMS) + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +testHeaders.log: testHeaders + @p='testHeaders'; \ + b='testHeaders'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -f ./$(DEPDIR)/Detail.Plo + -rm -f ./$(DEPDIR)/Error.Plo + -rm -f ./$(DEPDIR)/categories.Plo + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f ./$(DEPDIR)/Detail.Plo + -rm -f ./$(DEPDIR)/Error.Plo + -rm -f ./$(DEPDIR)/categories.Plo + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check check-am install install-am install-exec \ + install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ + check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am recheck tags tags-am uninstall \ + uninstall-am + +.PRECIOUS: Makefile + + +$(OBJS): $(top_srcdir)/include/version.h $(top_builddir)/include/autoconf.h + +testHeaders: $(srcdir)/*.h + $(SHELL) $(top_srcdir)/test-suite/testheaders.sh "$(CXXCOMPILE)" $^ || exit 1 + +.PHONY: testHeaders + +categories.cc: forward.h $(top_srcdir)/src/mk-string-arrays.awk + $(AWK) -f $(top_srcdir)/src/mk-string-arrays.awk ifile=error/forward.h < $(srcdir)/forward.h > $@ || ($(RM) -f $@ && exit 1) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -u -r -N squid-5.0.5/src/error/SysErrorDetail.h squid-5.0.6/src/error/SysErrorDetail.h --- squid-5.0.5/src/error/SysErrorDetail.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/error/SysErrorDetail.h 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,50 @@ +/* + * Copyright (C) 1996-2021 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +#ifndef _SQUID_SRC_ERROR_SYSERRORDETAIL_H +#define _SQUID_SRC_ERROR_SYSERRORDETAIL_H + +#include "error/Detail.h" +#include "sbuf/SBuf.h" +#include "sbuf/Stream.h" + +/// system call failure detail based on standard errno(3)/strerror(3) APIs +class SysErrorDetail: public ErrorDetail +{ + MEMPROXY_CLASS(SysErrorDetail); + +public: + /// \returns a pointer to a SysErrorDetail instance (or nil for lost errnos) + static ErrorDetail::Pointer NewIfAny(const int errorNo) + { + // we could optimize by caching results for (frequently used?) errnos + return errorNo ? new SysErrorDetail(errorNo) : nullptr; + } + + static SBuf Brief(int errorNo) { + return SysErrorDetail(errorNo).brief(); + } + + /* ErrorDetail API */ + virtual SBuf brief() const override { + return ToSBuf("errno=", errorNo); + } + + virtual SBuf verbose(const HttpRequestPointer &) const override { + return SBuf(strerror(errorNo)); + } + +private: + // hidden by NewIfAny() to avoid creating SysErrorDetail from zero errno + explicit SysErrorDetail(const int anErrorNo): errorNo(anErrorNo) {} + + int errorNo; ///< errno(3) set by the last failed system call or equivalent +}; + +#endif /* _SQUID_SRC_ERROR_SYSERRORDETAIL_H */ + diff -u -r -N squid-5.0.5/src/errorpage.cc squid-5.0.6/src/errorpage.cc --- squid-5.0.5/src/errorpage.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/errorpage.cc 2021-05-10 21:02:34.000000000 +1200 @@ -14,7 +14,8 @@ #include "clients/forward.h" #include "comm/Connection.h" #include "comm/Write.h" -#include "err_detail_type.h" +#include "error/Detail.h" +#include "error/SysErrorDetail.h" #include "errorpage.h" #include "fde.h" #include "format/Format.h" @@ -169,6 +170,10 @@ "reset" }, { + ERR_CLIENT_GONE, + "unexpected client disconnect" + }, + { ERR_SECURE_ACCEPT_FAIL, "secure accept fail" }, @@ -712,9 +717,7 @@ { assert(entry->mem_obj != NULL); assert (entry->isEmpty()); - debugs(4, 4, "Creating an error page for entry " << entry << - " with errorstate " << err << - " page id " << err->page_id); + debugs(4, 4, "storing " << err << " in " << *entry); if (entry->store_status != STORE_PENDING) { debugs(4, 2, "Skipping error page due to store_status: " << entry->store_status); @@ -796,9 +799,6 @@ if (err_language != Config.errorDefaultLanguage) #endif safe_free(err_language); -#if USE_OPENSSL - delete detail; -#endif } int @@ -962,18 +962,13 @@ case 'D': if (!build.allowRecursion) p = "%D"; // if recursion is not allowed, do not convert -#if USE_OPENSSL - // currently only SSL error details implemented else if (detail) { - detail->useRequest(request.getRaw()); - const String &errDetail = detail->toString(); - if (errDetail.size() > 0) { - const auto compiledDetail = compileBody(errDetail.termedBuf(), false); - mb.append(compiledDetail.rawContent(), compiledDetail.length()); - do_quote = 0; - } + auto rawDetail = detail->verbose(request); + // XXX: Performance regression. c_str() reallocates + const auto compiledDetail = compileBody(rawDetail.c_str(), false); + mb.append(compiledDetail.rawContent(), compiledDetail.length()); + do_quote = 0; } -#endif if (!mb.contentSize()) mb.append("[No Error Detail]", 17); break; @@ -1204,13 +1199,12 @@ break; case 'x': -#if USE_OPENSSL - if (detail) - mb.appendf("%s", detail->errorName()); - else -#endif - if (!building_deny_info_url) - p = "[Unknown Error Code]"; + if (detail) { + const auto brief = detail->brief(); + mb.append(brief.rawContent(), brief.length()); + } else if (!building_deny_info_url) { + p = "[Unknown Error Code]"; + } break; case 'z': @@ -1351,17 +1345,10 @@ // Make sure error codes get back to the client side for logging and // error tracking. if (request) { - int edc = ERR_DETAIL_NONE; // error detail code -#if USE_OPENSSL if (detail) - edc = detail->errorNo(); + request->detailError(type, detail); else -#endif - if (detailCode) - edc = detailCode; - else - edc = xerrno; - request->detailError(type, edc); + request->detailError(type, SysErrorDetail::NewIfAny(xerrno)); } return rep; @@ -1399,7 +1386,7 @@ if (!Config.errorDirectory) err_language = Config.errorDefaultLanguage; #endif - debugs(4, 2, "No existing error page language negotiated for " << errorPageName(page_id) << ". Using default error file."); + debugs(4, 2, "No existing error page language negotiated for " << this << ". Using default error file."); return compileBody(error_text[page_id], true); } @@ -1534,3 +1521,13 @@ anErr.validate(); } +std::ostream & +operator <<(std::ostream &os, const ErrorState *err) +{ + if (err) + os << errorPageName(err->page_id); + else + os << "[none]"; + return os; +} + diff -u -r -N squid-5.0.5/src/errorpage.h squid-5.0.6/src/errorpage.h --- squid-5.0.5/src/errorpage.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/errorpage.h 2021-05-10 21:02:34.000000000 +1200 @@ -13,8 +13,8 @@ #include "cbdata.h" #include "comm/forward.h" -#include "err_detail_type.h" -#include "err_type.h" +#include "error/Detail.h" +#include "error/forward.h" #include "http/forward.h" #include "http/StatusCode.h" #include "ip/Address.h" @@ -23,9 +23,6 @@ #include "SquidString.h" /* auth/UserRequest.h is empty unless USE_AUTH is defined */ #include "auth/UserRequest.h" -#if USE_OPENSSL -#include "ssl/ErrorDetail.h" -#endif /// error page callback typedef void ERCB(int fd, void *, size_t); @@ -109,7 +106,7 @@ HttpReply *BuildHttpReply(void); /// set error type-specific detail code - void detailError(int dCode) {detailCode = dCode;} + void detailError(const ErrorDetail::Pointer &dCode) { detail = dCode; } /// ensures that a future BuildHttpReply() is likely to succeed void validate(); @@ -200,12 +197,11 @@ AccessLogEntryPointer ale; ///< transaction details (or nil) -#if USE_OPENSSL - Ssl::ErrorDetail *detail = nullptr; -#endif + // TODO: Replace type, xerrno and detail with Error while adding a virtual + // Error::Detail::sysError() method to extract errno in detailError(). /// type-specific detail about the transaction error; - /// overwrites xerrno; overwritten by detail, if any. - int detailCode = ERR_DETAIL_NONE; + /// overwrites xerrno; + ErrorDetail::Pointer detail; HttpReplyPointer response_; @@ -355,5 +351,7 @@ */ bool strHdrAcptLangGetItem(const String &hdr, char *lang, int langLen, size_t &pos); +std::ostream &operator <<(std::ostream &, const ErrorState *); + #endif /* SQUID_ERRORPAGE_H */ diff -u -r -N squid-5.0.5/src/err_type.h squid-5.0.6/src/err_type.h --- squid-5.0.5/src/err_type.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/err_type.h 1970-01-01 12:00:00.000000000 +1200 @@ -1,110 +0,0 @@ -/* - * Copyright (C) 1996-2021 The Squid Software Foundation and contributors - * - * Squid software is distributed under GPLv2+ license and includes - * contributions from numerous individuals and organizations. - * Please see the COPYING and CONTRIBUTORS files for details. - */ - -#ifndef _SQUID_ERR_TYPE_H -#define _SQUID_ERR_TYPE_H - -typedef enum { - ERR_NONE, - - /* Access Permission Errors. Prefix new with ERR_ACCESS_ */ - ERR_ACCESS_DENIED, - ERR_CACHE_ACCESS_DENIED, - ERR_CACHE_MGR_ACCESS_DENIED, - ERR_FORWARDING_DENIED, - ERR_NO_RELAY, - ERR_CANNOT_FORWARD, - - /* TCP Errors. */ - ERR_READ_TIMEOUT, - ERR_LIFETIME_EXP, - ERR_READ_ERROR, - ERR_WRITE_ERROR, - ERR_CONNECT_FAIL, - ERR_SECURE_CONNECT_FAIL, - ERR_SOCKET_FAILURE, - - /* DNS Errors */ - ERR_DNS_FAIL, - ERR_URN_RESOLVE, - - /* HTTP Errors */ - ERR_ONLY_IF_CACHED_MISS, /* failure to satisfy only-if-cached request */ - ERR_TOO_BIG, - ERR_INVALID_RESP, - ERR_UNSUP_HTTPVERSION, /* HTTP version is not supported */ - ERR_INVALID_REQ, - ERR_UNSUP_REQ, - ERR_INVALID_URL, - ERR_ZERO_SIZE_OBJECT, - ERR_PRECONDITION_FAILED, - ERR_CONFLICT_HOST, - - /* FTP Errors */ - ERR_FTP_DISABLED, - ERR_FTP_UNAVAILABLE, - ERR_FTP_FAILURE, - ERR_FTP_PUT_ERROR, - ERR_FTP_NOT_FOUND, - ERR_FTP_FORBIDDEN, - ERR_FTP_PUT_CREATED, /* !error,a note that the file was created */ - ERR_FTP_PUT_MODIFIED, /* modified, !created */ - - /* ESI Errors */ - ERR_ESI, /* Failure to perform ESI processing */ - - /* ICAP Errors */ - ERR_ICAP_FAILURE, - - /* Squid problem */ - ERR_GATEWAY_FAILURE, - - /* Special Cases */ - ERR_DIR_LISTING, /* Display of remote directory (FTP, Gopher) */ - ERR_SQUID_SIGNATURE, /* not really an error */ - ERR_SHUTTING_DOWN, - ERR_PROTOCOL_UNKNOWN, - - // NOTE: error types defined below TCP_RESET are optional and do not generate - // a log warning if the files are missing - TCP_RESET, // Send TCP RST packet instead of error page - - ERR_SECURE_ACCEPT_FAIL, // Rejects the SSL connection intead of error page - ERR_REQUEST_START_TIMEOUT, // Aborts the connection instead of error page - ERR_REQUEST_PARSE_TIMEOUT, // Aborts the connection instead of error page - ERR_RELAY_REMOTE, // Sends server reply instead of error page - - /* Cache Manager GUI can install a manager index/home page */ - MGR_INDEX, - - ERR_MAX -} err_type; - -extern const char *err_type_str[]; - -inline -err_type -errorTypeByName(const char *name) -{ - for (int i = 0; i < ERR_MAX; ++i) - if (strcmp(name, err_type_str[i]) == 0) - return (err_type)i; - return ERR_MAX; -} - -inline -const char * -errorTypeName(err_type err) -{ - if (err < ERR_NONE || err >= ERR_MAX) - return "UNKNOWN"; - return err_type_str[err]; -} - -#endif /* _SQUID_ERR_TYPE_H */ - diff -u -r -N squid-5.0.5/src/esi/Context.h squid-5.0.6/src/esi/Context.h --- squid-5.0.5/src/esi/Context.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/esi/Context.h 2021-05-10 21:02:34.000000000 +1200 @@ -10,7 +10,7 @@ #define SQUID_ESICONTEXT_H #include "clientStream.h" -#include "err_type.h" +#include "error/forward.h" #include "esi/Element.h" #include "esi/Esi.h" #include "esi/Parser.h" diff -u -r -N squid-5.0.5/src/esi/Makefile.am squid-5.0.6/src/esi/Makefile.am --- squid-5.0.5/src/esi/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/esi/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -25,12 +25,12 @@ endif libesi_la_SOURCES = \ + $(ESI_PARSER_SOURCES) \ Assign.cc \ Assign.h \ Attempt.h \ Context.cc \ Context.h \ - $(ESI_PARSER_SOURCES) \ Element.h \ Esi.cc \ Esi.h \ diff -u -r -N squid-5.0.5/src/esi/Makefile.in squid-5.0.6/src/esi/Makefile.in --- squid-5.0.5/src/esi/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/esi/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -172,16 +172,16 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libesi_la_LIBADD = -am__libesi_la_SOURCES_DIST = Assign.cc Assign.h Attempt.h Context.cc \ - Context.h ExpatParser.cc ExpatParser.h Libxml2Parser.cc \ - Libxml2Parser.h Element.h Esi.cc Esi.h Except.h Expression.cc \ - Expression.h Include.cc Include.h Literal.h Module.cc Module.h \ - Parser.cc Parser.h Segment.cc Segment.h Sequence.cc Sequence.h \ - Var.h VarState.cc VarState.h +am__libesi_la_SOURCES_DIST = ExpatParser.cc ExpatParser.h \ + Libxml2Parser.cc Libxml2Parser.h Assign.cc Assign.h Attempt.h \ + Context.cc Context.h Element.h Esi.cc Esi.h Except.h \ + Expression.cc Expression.h Include.cc Include.h Literal.h \ + Module.cc Module.h Parser.cc Parser.h Segment.cc Segment.h \ + Sequence.cc Sequence.h Var.h VarState.cc VarState.h @ENABLE_LIBEXPAT_TRUE@am__objects_1 = ExpatParser.lo @ENABLE_LIBXML2_TRUE@am__objects_2 = Libxml2Parser.lo am__objects_3 = $(am__objects_1) $(am__objects_2) -am_libesi_la_OBJECTS = Assign.lo Context.lo $(am__objects_3) Esi.lo \ +am_libesi_la_OBJECTS = $(am__objects_3) Assign.lo Context.lo Esi.lo \ Expression.lo Include.lo Module.lo Parser.lo Segment.lo \ Sequence.lo VarState.lo libesi_la_OBJECTS = $(am_libesi_la_OBJECTS) @@ -753,12 +753,12 @@ noinst_LTLIBRARIES = libesi.la ESI_PARSER_SOURCES = $(am__append_2) $(am__append_3) libesi_la_SOURCES = \ + $(ESI_PARSER_SOURCES) \ Assign.cc \ Assign.h \ Attempt.h \ Context.cc \ Context.h \ - $(ESI_PARSER_SOURCES) \ Element.h \ Esi.cc \ Esi.h \ diff -u -r -N squid-5.0.5/src/eui/Makefile.am squid-5.0.6/src/eui/Makefile.am --- squid-5.0.5/src/eui/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/eui/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,11 +11,11 @@ noinst_LTLIBRARIES = libeui.la libeui_la_SOURCES = \ - Config.h \ Config.cc \ - Eui48.h \ + Config.h \ Eui48.cc \ - Eui64.h \ - Eui64.cc + Eui48.h \ + Eui64.cc \ + Eui64.h libeui_la_LIBADD = $(EUILIB) diff -u -r -N squid-5.0.5/src/eui/Makefile.in squid-5.0.6/src/eui/Makefile.in --- squid-5.0.5/src/eui/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/eui/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -730,12 +730,12 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libeui.la libeui_la_SOURCES = \ - Config.h \ Config.cc \ - Eui48.h \ + Config.h \ Eui48.cc \ - Eui64.h \ - Eui64.cc + Eui48.h \ + Eui64.cc \ + Eui64.h libeui_la_LIBADD = $(EUILIB) all: all-am diff -u -r -N squid-5.0.5/src/format/Format.cc squid-5.0.6/src/format/Format.cc --- squid-5.0.5/src/format/Format.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/format/Format.cc 2021-05-10 21:02:34.000000000 +1200 @@ -11,7 +11,7 @@ #include "base64.h" #include "client_side.h" #include "comm/Connection.h" -#include "err_detail_type.h" +#include "error/Detail.h" #include "errorpage.h" #include "fde.h" #include "format/Format.h" @@ -986,29 +986,17 @@ break; case LFT_SQUID_ERROR: - if (al->request && al->request->errType != ERR_NONE) - out = errorPageName(al->request->errType); + if (const auto error = al->error()) + out = errorPageName(error->category); break; case LFT_SQUID_ERROR_DETAIL: -#if USE_OPENSSL - if (al->request && al->request->errType == ERR_SECURE_CONNECT_FAIL) { - out = Ssl::GetErrorName(al->request->errDetail, true); - } else -#endif - if (al->request && al->request->errDetail != ERR_DETAIL_NONE) { - if (al->request->errDetail > ERR_DETAIL_START && al->request->errDetail < ERR_DETAIL_MAX) - out = errorDetailName(al->request->errDetail); - else { - if (al->request->errDetail >= ERR_DETAIL_EXCEPTION_START) - sb.appendf("%s=0x%X", - errorDetailName(al->request->errDetail), (uint32_t) al->request->errDetail); - else - sb.appendf("%s=%d", - errorDetailName(al->request->errDetail), al->request->errDetail); - out = sb.c_str(); - } + if (const auto error = al->error()) { + if (const auto detail = error->detail) { + sb = detail->brief(); + out = sb.c_str(); } + } break; case LFT_SQUID_HIERARCHY: diff -u -r -N squid-5.0.5/src/fs/Makefile.am squid-5.0.6/src/fs/Makefile.am --- squid-5.0.5/src/fs/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/fs/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -19,39 +19,41 @@ diskd/StoreFSdiskd.cc libufs_la_SOURCES = \ - ufs/StoreFSufs.h \ + ufs/RebuildState.cc \ + ufs/RebuildState.h \ ufs/StoreFSufs.cc \ + ufs/StoreFSufs.h \ + ufs/StoreSearchUFS.cc \ + ufs/StoreSearchUFS.h \ ufs/UFSStoreState.cc \ - ufs/UFSSwapDir.cc \ - ufs/UFSSwapDir.h \ + ufs/UFSStoreState.h \ ufs/UFSStrategy.cc \ ufs/UFSStrategy.h \ - ufs/UFSStoreState.h \ - ufs/StoreSearchUFS.h \ - ufs/StoreSearchUFS.cc \ - ufs/UFSSwapLogParser.h \ + ufs/UFSSwapDir.cc \ + ufs/UFSSwapDir.h \ ufs/UFSSwapLogParser.cc \ - ufs/RebuildState.h \ - ufs/RebuildState.cc + ufs/UFSSwapLogParser.h librock_la_SOURCES = \ - rock/forward.h \ rock/RockDbCell.cc \ rock/RockDbCell.h \ rock/RockHeaderUpdater.cc \ rock/RockHeaderUpdater.h \ - rock/RockIoState.cc \ - rock/RockIoState.h \ rock/RockIoRequests.cc \ rock/RockIoRequests.h \ + rock/RockIoState.cc \ + rock/RockIoState.h \ rock/RockRebuild.cc \ rock/RockRebuild.h \ rock/RockStoreFileSystem.cc \ rock/RockStoreFileSystem.h \ rock/RockSwapDir.cc \ - rock/RockSwapDir.h + rock/RockSwapDir.h \ + rock/forward.h -libfs_la_SOURCES = Module.cc Module.h +libfs_la_SOURCES = \ + Module.cc \ + Module.h libfs_la_LIBADD = $(STORE_LIBS_TO_BUILD) libfs_la_DEPENDENCIES = $(STORE_LIBS_TO_BUILD) diff -u -r -N squid-5.0.5/src/fs/Makefile.in squid-5.0.6/src/fs/Makefile.in --- squid-5.0.5/src/fs/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/fs/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -179,13 +179,13 @@ libfs_la_OBJECTS = $(am_libfs_la_OBJECTS) librock_la_LIBADD = am_librock_la_OBJECTS = rock/RockDbCell.lo rock/RockHeaderUpdater.lo \ - rock/RockIoState.lo rock/RockIoRequests.lo rock/RockRebuild.lo \ + rock/RockIoRequests.lo rock/RockIoState.lo rock/RockRebuild.lo \ rock/RockStoreFileSystem.lo rock/RockSwapDir.lo librock_la_OBJECTS = $(am_librock_la_OBJECTS) libufs_la_LIBADD = -am_libufs_la_OBJECTS = ufs/StoreFSufs.lo ufs/UFSStoreState.lo \ - ufs/UFSSwapDir.lo ufs/UFSStrategy.lo ufs/StoreSearchUFS.lo \ - ufs/UFSSwapLogParser.lo ufs/RebuildState.lo +am_libufs_la_OBJECTS = ufs/RebuildState.lo ufs/StoreFSufs.lo \ + ufs/StoreSearchUFS.lo ufs/UFSStoreState.lo ufs/UFSStrategy.lo \ + ufs/UFSSwapDir.lo ufs/UFSSwapLogParser.lo libufs_la_OBJECTS = $(am_libufs_la_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) @@ -768,39 +768,42 @@ diskd/StoreFSdiskd.cc libufs_la_SOURCES = \ - ufs/StoreFSufs.h \ + ufs/RebuildState.cc \ + ufs/RebuildState.h \ ufs/StoreFSufs.cc \ + ufs/StoreFSufs.h \ + ufs/StoreSearchUFS.cc \ + ufs/StoreSearchUFS.h \ ufs/UFSStoreState.cc \ - ufs/UFSSwapDir.cc \ - ufs/UFSSwapDir.h \ + ufs/UFSStoreState.h \ ufs/UFSStrategy.cc \ ufs/UFSStrategy.h \ - ufs/UFSStoreState.h \ - ufs/StoreSearchUFS.h \ - ufs/StoreSearchUFS.cc \ - ufs/UFSSwapLogParser.h \ + ufs/UFSSwapDir.cc \ + ufs/UFSSwapDir.h \ ufs/UFSSwapLogParser.cc \ - ufs/RebuildState.h \ - ufs/RebuildState.cc + ufs/UFSSwapLogParser.h librock_la_SOURCES = \ - rock/forward.h \ rock/RockDbCell.cc \ rock/RockDbCell.h \ rock/RockHeaderUpdater.cc \ rock/RockHeaderUpdater.h \ - rock/RockIoState.cc \ - rock/RockIoState.h \ rock/RockIoRequests.cc \ rock/RockIoRequests.h \ + rock/RockIoState.cc \ + rock/RockIoState.h \ rock/RockRebuild.cc \ rock/RockRebuild.h \ rock/RockStoreFileSystem.cc \ rock/RockStoreFileSystem.h \ rock/RockSwapDir.cc \ - rock/RockSwapDir.h + rock/RockSwapDir.h \ + rock/forward.h + +libfs_la_SOURCES = \ + Module.cc \ + Module.h -libfs_la_SOURCES = Module.cc Module.h libfs_la_LIBADD = $(STORE_LIBS_TO_BUILD) libfs_la_DEPENDENCIES = $(STORE_LIBS_TO_BUILD) all: all-am @@ -892,10 +895,10 @@ rock/$(DEPDIR)/$(am__dirstamp) rock/RockHeaderUpdater.lo: rock/$(am__dirstamp) \ rock/$(DEPDIR)/$(am__dirstamp) -rock/RockIoState.lo: rock/$(am__dirstamp) \ - rock/$(DEPDIR)/$(am__dirstamp) rock/RockIoRequests.lo: rock/$(am__dirstamp) \ rock/$(DEPDIR)/$(am__dirstamp) +rock/RockIoState.lo: rock/$(am__dirstamp) \ + rock/$(DEPDIR)/$(am__dirstamp) rock/RockRebuild.lo: rock/$(am__dirstamp) \ rock/$(DEPDIR)/$(am__dirstamp) rock/RockStoreFileSystem.lo: rock/$(am__dirstamp) \ @@ -911,16 +914,16 @@ ufs/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) ufs/$(DEPDIR) @: > ufs/$(DEPDIR)/$(am__dirstamp) +ufs/RebuildState.lo: ufs/$(am__dirstamp) ufs/$(DEPDIR)/$(am__dirstamp) ufs/StoreFSufs.lo: ufs/$(am__dirstamp) ufs/$(DEPDIR)/$(am__dirstamp) +ufs/StoreSearchUFS.lo: ufs/$(am__dirstamp) \ + ufs/$(DEPDIR)/$(am__dirstamp) ufs/UFSStoreState.lo: ufs/$(am__dirstamp) \ ufs/$(DEPDIR)/$(am__dirstamp) -ufs/UFSSwapDir.lo: ufs/$(am__dirstamp) ufs/$(DEPDIR)/$(am__dirstamp) ufs/UFSStrategy.lo: ufs/$(am__dirstamp) ufs/$(DEPDIR)/$(am__dirstamp) -ufs/StoreSearchUFS.lo: ufs/$(am__dirstamp) \ - ufs/$(DEPDIR)/$(am__dirstamp) +ufs/UFSSwapDir.lo: ufs/$(am__dirstamp) ufs/$(DEPDIR)/$(am__dirstamp) ufs/UFSSwapLogParser.lo: ufs/$(am__dirstamp) \ ufs/$(DEPDIR)/$(am__dirstamp) -ufs/RebuildState.lo: ufs/$(am__dirstamp) ufs/$(DEPDIR)/$(am__dirstamp) libufs.la: $(libufs_la_OBJECTS) $(libufs_la_DEPENDENCIES) $(EXTRA_libufs_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libufs_la_OBJECTS) $(libufs_la_LIBADD) $(LIBS) diff -u -r -N squid-5.0.5/src/FwdState.cc squid-5.0.6/src/FwdState.cc --- squid-5.0.5/src/FwdState.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/FwdState.cc 2021-05-10 21:02:34.000000000 +1200 @@ -59,7 +59,6 @@ #if USE_OPENSSL #include "ssl/cert_validate_message.h" #include "ssl/Config.h" -#include "ssl/ErrorDetail.h" #include "ssl/helper.h" #include "ssl/ServerBump.h" #include "ssl/support.h" diff -u -r -N squid-5.0.5/src/FwdState.h squid-5.0.6/src/FwdState.h --- squid-5.0.5/src/FwdState.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/FwdState.h 2021-05-10 21:02:34.000000000 +1200 @@ -16,7 +16,7 @@ #include "comm.h" #include "comm/Connection.h" #include "comm/ConnOpener.h" -#include "err_type.h" +#include "error/forward.h" #include "fde.h" #include "http/StatusCode.h" #include "ip/Address.h" @@ -41,14 +41,6 @@ typedef CbcPointer HappyConnOpenerPointer; class HappyConnOpenerAnswer; -#if USE_OPENSSL -namespace Ssl -{ -class ErrorDetail; -class CertValidationResponse; -}; -#endif - /// Sets initial TOS value and Netfilter for the future outgoing connection. /// Updates the given Connection object, not the future transport connection. void GetMarkingsToServer(HttpRequest * request, Comm::Connection &conn); diff -u -r -N squid-5.0.5/src/gopher.cc squid-5.0.6/src/gopher.cc --- squid-5.0.5/src/gopher.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/gopher.cc 2021-05-10 21:02:34.000000000 +1200 @@ -740,7 +740,10 @@ assert(buf == gopherState->replybuf); - if (EBIT_TEST(entry->flags, ENTRY_ABORTED)) { + // XXX: Should update delayId, statCounter, etc. before bailing + if (!entry->isAccepting()) { + debugs(10, 3, "terminating due to bad " << *entry); + // TODO: Do not abuse connection for triggering cleanup. gopherState->serverConn->close(); return; } @@ -837,6 +840,13 @@ statCounter.server.other.kbytes_out += size; } + if (!entry->isAccepting()) { + debugs(10, 3, "terminating due to bad " << *entry); + // TODO: Do not abuse connection for triggering cleanup. + gopherState->serverConn->close(); + return; + } + if (errflag) { const auto err = new ErrorState(ERR_WRITE_ERROR, Http::scServiceUnavailable, gopherState->fwd->request, gopherState->fwd->al); err->xerrno = xerrno; diff -u -r -N squid-5.0.5/src/helper/Makefile.am squid-5.0.6/src/helper/Makefile.am --- squid-5.0.5/src/helper/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/helper/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -13,12 +13,12 @@ libhelper_la_SOURCES = \ ChildConfig.cc \ ChildConfig.h \ - forward.h \ Reply.cc \ Reply.h \ Request.h \ - ResultCode.h \ + ReservationId.cc \ ReservationId.h \ - ReservationId.cc + ResultCode.h \ + forward.h EXTRA_DIST= protocol_defines.h diff -u -r -N squid-5.0.5/src/helper/Makefile.in squid-5.0.6/src/helper/Makefile.in --- squid-5.0.5/src/helper/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/helper/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -731,13 +731,13 @@ libhelper_la_SOURCES = \ ChildConfig.cc \ ChildConfig.h \ - forward.h \ Reply.cc \ Reply.h \ Request.h \ - ResultCode.h \ + ReservationId.cc \ ReservationId.h \ - ReservationId.cc + ResultCode.h \ + forward.h EXTRA_DIST = protocol_defines.h all: all-am diff -u -r -N squid-5.0.5/src/http/Makefile.am squid-5.0.6/src/http/Makefile.am --- squid-5.0.5/src/http/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/http/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -16,14 +16,13 @@ libhttp_la_SOURCES = \ ContentLengthInterpreter.cc \ ContentLengthInterpreter.h \ - forward.h \ Message.cc \ Message.h \ MethodType.cc \ MethodType.h \ ProtocolVersion.h \ - RegisteredHeaders.h \ RegisteredHeaders.cc \ + RegisteredHeaders.h \ RegisteredHeadersHash.cci \ RequestMethod.cc \ RequestMethod.h \ @@ -33,7 +32,8 @@ StatusLine.cc \ StatusLine.h \ Stream.cc \ - Stream.h + Stream.h \ + forward.h libhttp_la_LIBADD= one/libhttp1.la diff -u -r -N squid-5.0.5/src/http/Makefile.in squid-5.0.6/src/http/Makefile.in --- squid-5.0.5/src/http/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/http/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -778,14 +778,13 @@ libhttp_la_SOURCES = \ ContentLengthInterpreter.cc \ ContentLengthInterpreter.h \ - forward.h \ Message.cc \ Message.h \ MethodType.cc \ MethodType.h \ ProtocolVersion.h \ - RegisteredHeaders.h \ RegisteredHeaders.cc \ + RegisteredHeaders.h \ RegisteredHeadersHash.cci \ RequestMethod.cc \ RequestMethod.h \ @@ -795,7 +794,8 @@ StatusLine.cc \ StatusLine.h \ Stream.cc \ - Stream.h + Stream.h \ + forward.h libhttp_la_LIBADD = one/libhttp1.la EXTRA_DIST = RegisteredHeadersHash.gperf diff -u -r -N squid-5.0.5/src/http/one/Makefile.am squid-5.0.6/src/http/one/Makefile.am --- squid-5.0.5/src/http/one/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/http/one/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,7 +11,6 @@ noinst_LTLIBRARIES = libhttp1.la libhttp1_la_SOURCES = \ - forward.h \ Parser.cc \ Parser.h \ RequestParser.cc \ @@ -21,4 +20,5 @@ TeChunkedParser.cc \ TeChunkedParser.h \ Tokenizer.cc \ - Tokenizer.h + Tokenizer.h \ + forward.h diff -u -r -N squid-5.0.5/src/http/one/Makefile.in squid-5.0.6/src/http/one/Makefile.in --- squid-5.0.5/src/http/one/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/http/one/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -731,7 +731,6 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libhttp1.la libhttp1_la_SOURCES = \ - forward.h \ Parser.cc \ Parser.h \ RequestParser.cc \ @@ -741,7 +740,8 @@ TeChunkedParser.cc \ TeChunkedParser.h \ Tokenizer.cc \ - Tokenizer.h + Tokenizer.h \ + forward.h all: all-am diff -u -r -N squid-5.0.5/src/http/one/ResponseParser.cc squid-5.0.6/src/http/one/ResponseParser.cc --- squid-5.0.5/src/http/one/ResponseParser.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/http/one/ResponseParser.cc 2021-05-10 21:02:34.000000000 +1200 @@ -12,6 +12,7 @@ #include "http/ProtocolVersion.h" #include "parser/Tokenizer.h" #include "profiler/Profiler.h" +#include "sbuf/Stream.h" #include "SquidConfig.h" const SBuf Http::One::ResponseParser::IcyMagic("ICY "); @@ -47,46 +48,27 @@ // NP: we found the protocol version and consumed it already. // just need the status code and reason phrase int -Http::One::ResponseParser::parseResponseStatusAndReason(Tokenizer &tok, const CharacterSet &WspDelim) +Http::One::ResponseParser::parseResponseStatusAndReason(Tokenizer &tok) { - if (!completedStatus_) { - debugs(74, 9, "seek status-code in: " << tok.remaining().substr(0,10) << "..."); - /* RFC 7230 section 3.1.2 - status code is 3 DIGIT octets. - * There is no limit on what those octets may be. - * 000 through 999 are all valid. - */ - int64_t statusValue; - if (tok.int64(statusValue, 10, false, 3) && tok.skipOne(WspDelim)) { - - debugs(74, 6, "found int64 status-code=" << statusValue); - statusCode_ = static_cast(statusValue); - + try { + if (!completedStatus_) { + debugs(74, 9, "seek status-code in: " << tok.remaining().substr(0,10) << "..."); + ParseResponseStatus(tok, statusCode_); buf_ = tok.remaining(); // resume checkpoint completedStatus_ = true; - - } else if (tok.atEnd()) { - debugs(74, 6, "Parser needs more data"); - return 0; // need more to be sure we have it all - - } else { - debugs(74, 6, "invalid status-line. invalid code."); - return -1; // invalid status, a single SP terminator required } // NOTE: any whitespace after the single SP is part of the reason phrase. - } - /* RFC 7230 says we SHOULD ignore the reason phrase content - * but it has a definite valid vs invalid character set. - * We interpret the SHOULD as ignoring absence and syntax, but - * producing an error if it contains an invalid octet. - */ - - debugs(74, 9, "seek reason-phrase in: " << tok.remaining().substr(0,50) << "..."); - - // if we got here we are still looking for reason-phrase bytes - static const CharacterSet phraseChars = CharacterSet::WSP + CharacterSet::VCHAR + CharacterSet::OBSTEXT; - (void)tok.prefix(reasonPhrase_, phraseChars); // optional, no error if missing - try { + /* RFC 7230 says we SHOULD ignore the reason phrase content + * but it has a definite valid vs invalid character set. + * We interpret the SHOULD as ignoring absence and syntax, but + * producing an error if it contains an invalid octet. + */ + + debugs(74, 9, "seek reason-phrase in: " << tok.remaining().substr(0,50) << "..."); + // if we got here we are still looking for reason-phrase bytes + static const CharacterSet phraseChars = CharacterSet::WSP + CharacterSet::VCHAR + CharacterSet::OBSTEXT; + (void)tok.prefix(reasonPhrase_, phraseChars); // optional, no error if missing skipLineTerminator(tok); buf_ = tok.remaining(); // resume checkpoint debugs(74, DBG_DATA, Raw("leftovers", buf_.rawContent(), buf_.length())); @@ -100,6 +82,30 @@ return -1; } +void +Http::One::ResponseParser::ParseResponseStatus(Tokenizer &tok, StatusCode &code) +{ + int64_t statusValue; + if (tok.int64(statusValue, 10, false, 3) && tok.skipOne(Parser::DelimiterCharacters())) { + debugs(74, 6, "raw status-code=" << statusValue); + code = static_cast(statusValue); // may be invalid + + // RFC 7230 Section 3.1.2 says status-code is exactly three DIGITs + if (code <= 99) + throw TextException(ToSBuf("status-code too short: ", code), Here()); + + // Codes with a non-standard first digit (a.k.a. response class) are + // considered semantically invalid per the following HTTP WG discussion: + // https://lists.w3.org/Archives/Public/ietf-http-wg/2010AprJun/0354.html + if (code >= 600) + throw TextException(ToSBuf("status-code from an invalid response class: ", code), Here()); + } else if (tok.atEnd()) { + throw InsufficientInput(); + } else { + throw TextException("syntactically invalid status-code area", Here()); + } +} + /** * Attempt to parse the method field out of an HTTP message status-line. * @@ -120,13 +126,11 @@ { Tokenizer tok(buf_); - const CharacterSet &WspDelim = DelimiterCharacters(); - if (msgProtocol_.protocol != AnyP::PROTO_NONE) { debugs(74, 6, "continue incremental parse for " << msgProtocol_); debugs(74, DBG_DATA, "parse remaining buf={length=" << tok.remaining().length() << ", data='" << tok.remaining() << "'}"); // we already found the magic, but not the full line. keep going. - return parseResponseStatusAndReason(tok, WspDelim); + return parseResponseStatusAndReason(tok); } else if (tok.skip(Http1magic)) { debugs(74, 6, "found prefix magic " << Http1magic); @@ -134,6 +138,7 @@ // magic contains major version, still need to find minor DIGIT int64_t verMinor; + const auto &WspDelim = DelimiterCharacters(); if (tok.int64(verMinor, 10, false, 1) && tok.skipOne(WspDelim)) { msgProtocol_.protocol = AnyP::PROTO_HTTP; msgProtocol_.major = 1; @@ -143,7 +148,7 @@ debugs(74, DBG_DATA, "parse remaining buf={length=" << tok.remaining().length() << ", data='" << tok.remaining() << "'}"); buf_ = tok.remaining(); // resume checkpoint - return parseResponseStatusAndReason(tok, WspDelim); + return parseResponseStatusAndReason(tok); } else if (tok.atEnd()) return 0; // need more to be sure we have it all @@ -157,7 +162,7 @@ // NP: ICY has no /major.minor details debugs(74, DBG_DATA, "parse remaining buf={length=" << tok.remaining().length() << ", data='" << tok.remaining() << "'}"); buf_ = tok.remaining(); // resume checkpoint - return parseResponseStatusAndReason(tok, WspDelim); + return parseResponseStatusAndReason(tok); } else if (buf_.length() < Http1magic.length() && Http1magic.startsWith(buf_)) { debugs(74, 7, Raw("valid HTTP/1 prefix", buf_.rawContent(), buf_.length())); return 0; diff -u -r -N squid-5.0.5/src/http/one/ResponseParser.h squid-5.0.6/src/http/one/ResponseParser.h --- squid-5.0.5/src/http/one/ResponseParser.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/http/one/ResponseParser.h 2021-05-10 21:02:34.000000000 +1200 @@ -45,9 +45,14 @@ Http::StatusCode messageStatus() const { return statusCode_;} SBuf reasonPhrase() const { return reasonPhrase_;} + /// extracts response status-code and the following delimiter; validates status-code + /// \param[out] code syntactically valid status-code (unchanged on syntax errors) + /// \throws InsuffientInput and other exceptions on syntax and validation errors + static void ParseResponseStatus(Tokenizer &, StatusCode &code); + private: int parseResponseFirstLine(); - int parseResponseStatusAndReason(Tokenizer&, const CharacterSet &); + int parseResponseStatusAndReason(Tokenizer &); /// magic prefix for identifying ICY response messages static const SBuf IcyMagic; diff -u -r -N squid-5.0.5/src/http/RegisteredHeaders.cc squid-5.0.6/src/http/RegisteredHeaders.cc --- squid-5.0.5/src/http/RegisteredHeaders.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/http/RegisteredHeaders.cc 2021-05-10 21:02:34.000000000 +1200 @@ -37,7 +37,7 @@ const HeaderTableRecord& HeaderLookupTable_t::lookup (const char *buf, const std::size_t len) const { const HeaderTableRecord *r = HttpHeaderHashTable::lookup(buf, len); - if (!r) + if (!r || r->id == Http::HdrType::OTHER) return BadHdr; return *r; } diff -u -r -N squid-5.0.5/src/http/RegisteredHeadersHash.cci squid-5.0.6/src/http/RegisteredHeadersHash.cci --- squid-5.0.5/src/http/RegisteredHeadersHash.cci 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/http/RegisteredHeadersHash.cci 2021-05-10 21:02:34.000000000 +1200 @@ -41,8 +41,8 @@ * Please see the COPYING and CONTRIBUTORS files for details. */ #line 24 "RegisteredHeadersHash.gperf" -struct HeaderTableRecord; - enum +class HeaderTableRecord; + enum { TOTAL_KEYWORDS = 89, MIN_WORD_LENGTH = 2, @@ -103,7 +103,7 @@ private: static inline unsigned int HttpHeaderHash (const char *str, size_t len); public: - static const struct HeaderTableRecord *lookup (const char *str, size_t len); + static const class HeaderTableRecord *lookup (const char *str, size_t len); }; inline unsigned int @@ -172,7 +172,7 @@ 0, 10, 15 }; -static const struct HeaderTableRecord HttpHeaderDefinitionsTable[] = +static const class HeaderTableRecord HttpHeaderDefinitionsTable[] = { {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -365,7 +365,7 @@ {"Accept-Encoding", Http::HdrType::ACCEPT_ENCODING, Http::HdrFieldType::ftStr, HdrKind::ListHeader|HdrKind::RequestHeader|HdrKind::ReplyHeader} }; -const struct HeaderTableRecord * +const class HeaderTableRecord * HttpHeaderHashTable::lookup (const char *str, size_t len) { if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) diff -u -r -N squid-5.0.5/src/http/RegisteredHeadersHash.gperf squid-5.0.6/src/http/RegisteredHeadersHash.gperf --- squid-5.0.5/src/http/RegisteredHeadersHash.gperf 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/http/RegisteredHeadersHash.gperf 2021-05-10 21:02:34.000000000 +1200 @@ -21,7 +21,7 @@ %global-table %ignore-case %struct-type -struct HeaderTableRecord; +class HeaderTableRecord; %% Accept, Http::HdrType::ACCEPT, Http::HdrFieldType::ftStr, HdrKind::ListHeader|HdrKind::RequestHeader Accept-Charset, Http::HdrType::ACCEPT_CHARSET, Http::HdrFieldType::ftStr, HdrKind::ListHeader|HdrKind::RequestHeader diff -u -r -N squid-5.0.5/src/http/StatusLine.cc squid-5.0.6/src/http/StatusLine.cc --- squid-5.0.5/src/http/StatusLine.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/http/StatusLine.cc 2021-05-10 21:02:34.000000000 +1200 @@ -11,7 +11,12 @@ #include "squid.h" #include "base/Packable.h" #include "Debug.h" +#include "http/one/ResponseParser.h" #include "http/StatusLine.h" +#include "parser/forward.h" +#include "parser/Tokenizer.h" + +#include void Http::StatusLine::init() @@ -29,7 +34,6 @@ void Http::StatusLine::set(const AnyP::ProtocolVersion &newVersion, const Http::StatusCode newStatus, const char *newReason) { - protocol = AnyP::PROTO_HTTP; version = newVersion; status_ = newStatus; /* Note: no xstrdup for 'reason', assumes constant 'reasons' */ @@ -53,7 +57,7 @@ if (packedStatus == Http::scNone) { static unsigned int reports = 0; if (++reports <= 100) - debugs(57, DBG_IMPORTANT, "BUG: Generated response lacks status code"); + debugs(57, DBG_IMPORTANT, "BUG: the internalized response lacks status-code"); packedStatus = Http::scInternalServerError; packedReason = Http::StatusCodeString(packedStatus); // ignore custom reason_ (if any) } @@ -64,7 +68,7 @@ static const char *IcyStatusLineFormat = "ICY %3d %s\r\n"; /* handle ICY protocol status line specially. Pass on the bad format. */ - if (protocol == AnyP::PROTO_ICY) { + if (version.protocol == AnyP::PROTO_ICY) { debugs(57, 9, "packing sline " << this << " using " << p << ":"); debugs(57, 9, "FORMAT=" << IcyStatusLineFormat ); debugs(57, 9, "ICY " << packedStatus << " " << packedReason); @@ -78,12 +82,8 @@ p->appendf(Http1StatusLineFormat, version.major, version.minor, packedStatus, packedReason); } -/* - * Parse character string. - * XXX: Note 'end' currently unused, so NULL-termination assumed. - */ bool -Http::StatusLine::parse(const String &protoPrefix, const char *start, const char * /*end*/) +Http::StatusLine::parse(const String &protoPrefix, const char *start, const char *end) { status_ = Http::scInvalidHeader; /* Squid header parsing error */ @@ -92,7 +92,7 @@ if (protoPrefix.cmp("ICY", 3) == 0) { debugs(57, 3, "Invalid HTTP identifier. Detected ICY protocol instead."); - protocol = AnyP::PROTO_ICY; + version = AnyP::ProtocolVersion(AnyP::PROTO_ICY, 1, 0); start += protoPrefix.size(); } else if (protoPrefix.caseCmp(start, protoPrefix.size()) == 0) { @@ -114,8 +114,25 @@ if (!(start = strchr(start, ' '))) return false; - // XXX: should we be using xstrtoui() or xatoui() ? - status_ = static_cast(atoi(++start)); + ++start; // skip SP between HTTP-version and status-code + + assert(start <= end); + const auto stdStatusAreaLength = 4; // status-code length plus SP + const auto unparsedLength = end - start; + const auto statusAreaLength = std::min(stdStatusAreaLength, unparsedLength); + + static SBuf statusBuf; + statusBuf.assign(start, statusAreaLength); + Parser::Tokenizer tok(statusBuf); + try { + One::ResponseParser::ParseResponseStatus(tok, status_); + } catch (const Parser::InsufficientInput &) { + debugs(57, 7, "need more; have " << unparsedLength); + return false; + } catch (...) { + debugs(57, 3, "cannot parse status-code area: " << CurrentException); + return false; + } // XXX check if the given 'reason' is the default status string, if not save to reason_ diff -u -r -N squid-5.0.5/src/http/StatusLine.h squid-5.0.6/src/http/StatusLine.h --- squid-5.0.5/src/http/StatusLine.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/http/StatusLine.h 2021-05-10 21:02:34.000000000 +1200 @@ -20,7 +20,7 @@ { /** - * Holds the values parsed from an HTTP reply status line. + * Holds the values parsed from an HTTP-like reply status line. * * For example: HTTP/1.1 200 OK */ @@ -59,22 +59,14 @@ public: /* public, read only */ - /** - * By rights protocol name should be a constant "HTTP", with no need for this field to exist. - * However there are protocols which violate HTTP by sending their own custom formats - * back with other protocol names (ICY streaming format being the current major problem). - */ - // XXX: protocol is part of AnyP::ProtocolVersion. We should be able to use version.protocol instead now. - AnyP::ProtocolType protocol; - AnyP::ProtocolVersion version; ///< breakdown of protocol version label: (HTTP/ICY) and (0.9/1.0/1.1) private: /// status code. ie 100 ... 200 ... 404 ... 599 - Http::StatusCode status_; + Http::StatusCode status_ = scNone; /// points to a _constant_ string (default or supplied), never free()d - const char *reason_; + const char *reason_ = nullptr; }; } // namespace Http diff -u -r -N squid-5.0.5/src/http/Stream.cc squid-5.0.6/src/http/Stream.cc --- squid-5.0.5/src/http/Stream.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/http/Stream.cc 2021-05-10 21:02:34.000000000 +1200 @@ -54,7 +54,7 @@ assert(!connRegistered_); assert(getConn()); connRegistered_ = true; - getConn()->pipeline.add(Http::StreamPointer(this)); + getConn()->add(this); } bool @@ -171,12 +171,13 @@ return start; } - } else if (reply && reply->contentRange()) { + } else if (const auto cr = reply ? reply->contentRange() : nullptr) { /* request does not have ranges, but reply does */ /* TODO: should use range_iter_pos on reply, as soon as reply->content_range * becomes HttpHdrRange rather than HttpHdrRangeSpec. */ - return http->out.offset + reply->contentRange()->spec.offset; + if (cr->spec.offset != HttpHdrRangeSpec::UnknownPosition) + return http->out.offset + cr->spec.offset; } return http->out.offset; @@ -240,6 +241,10 @@ // did we get at least what we expected, based on range specs? + // this Content-Range does not tell us how many bytes to expect + if (bytesExpected == HttpHdrRangeSpec::UnknownPosition) + return STREAM_NONE; + if (bytesSent == bytesExpected) // got everything return STREAM_COMPLETE; @@ -470,59 +475,27 @@ } else { /* XXX: TODO: Review, this unconditional set may be wrong. */ rep->sline.set(rep->sline.version, Http::scPartialContent); - // web server responded with a valid, but unexpected range. - // will (try-to) forward as-is. - //TODO: we should cope with multirange request/responses - // TODO: review, since rep->content_range is always nil here. - bool replyMatchRequest = contentRange != nullptr ? - request->range->contains(contentRange->spec) : - true; + + // before range_iter accesses + const auto actual_clen = http->prepPartialResponseGeneration(); + const int spec_count = http->request->range->specs.size(); - int64_t actual_clen = -1; debugs(33, 3, "range spec count: " << spec_count << " virgin clen: " << rep->content_length); assert(spec_count > 0); /* append appropriate header(s) */ if (spec_count == 1) { - if (!replyMatchRequest) { - hdr->putContRange(contentRange); - actual_clen = rep->content_length; - //http->range_iter.pos = rep->content_range->spec.begin(); - (*http->range_iter.pos)->offset = contentRange->spec.offset; - (*http->range_iter.pos)->length = contentRange->spec.length; - - } else { - HttpHdrRange::iterator pos = http->request->range->begin(); - assert(*pos); - /* append Content-Range */ - - if (!contentRange) { - /* No content range, so this was a full object we are - * sending parts of. - */ - httpHeaderAddContRange(hdr, **pos, rep->content_length); - } - - /* set new Content-Length to the actual number of bytes - * transmitted in the message-body */ - actual_clen = (*pos)->length; - } + const auto singleSpec = *http->request->range->begin(); + assert(singleSpec); + httpHeaderAddContRange(hdr, *singleSpec, rep->content_length); } else { /* multipart! */ - /* generate boundary string */ - http->range_iter.boundary = http->rangeBoundaryStr(); /* delete old Content-Type, add ours */ hdr->delById(Http::HdrType::CONTENT_TYPE); httpHeaderPutStrf(hdr, Http::HdrType::CONTENT_TYPE, "multipart/byteranges; boundary=\"" SQUIDSTRINGPH "\"", SQUIDSTRINGPRINT(http->range_iter.boundary)); - /* Content-Length is not required in multipart responses - * but it is always nice to have one */ - actual_clen = http->mRangeCLen(); - - /* http->out needs to start where we want data at */ - http->out.offset = http->range_iter.currentSpec()->offset; } /* replace Content-Length header */ @@ -530,9 +503,6 @@ hdr->delById(Http::HdrType::CONTENT_LENGTH); hdr->putInt64(Http::HdrType::CONTENT_LENGTH, actual_clen); debugs(33, 3, "actual content length: " << actual_clen); - - /* And start the range iter off */ - http->range_iter.updateSpec(); } } @@ -560,12 +530,11 @@ /// remembers the abnormal connection termination for logging purposes void -Http::Stream::noteIoError(const int xerrno) +Http::Stream::noteIoError(const Error &error, const LogTagsErrors <e) { if (http) { - http->logType.err.timedout = (xerrno == ETIMEDOUT); - // aborted even if xerrno is zero (which means read abort/eof) - http->logType.err.aborted = (xerrno != ETIMEDOUT); + http->updateError(error); + http->logType.err.update(lte); } } diff -u -r -N squid-5.0.5/src/http/Stream.h squid-5.0.6/src/http/Stream.h --- squid-5.0.5/src/http/Stream.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/http/Stream.h 2021-05-10 21:02:34.000000000 +1200 @@ -116,7 +116,7 @@ ConnStateData *getConn() const; /// update state to reflect I/O error - void noteIoError(const int xerrno); + void noteIoError(const Error &, const LogTagsErrors &); /// cleanup when the transaction has finished. may destroy 'this' void finished(); diff -u -r -N squid-5.0.5/src/http/url_rewriters/LFS/url_lfs_rewrite.8 squid-5.0.6/src/http/url_rewriters/LFS/url_lfs_rewrite.8 --- squid-5.0.5/src/http/url_rewriters/LFS/url_lfs_rewrite.8 2021-02-08 13:46:40.000000000 +1300 +++ squid-5.0.6/src/http/url_rewriters/LFS/url_lfs_rewrite.8 2021-05-10 23:02:24.000000000 +1200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "URL_LFS_REWRITE 8" -.TH URL_LFS_REWRITE 8 "2021-02-08" "perl v5.32.0" "User Contributed Perl Documentation" +.TH URL_LFS_REWRITE 8 "2021-05-10" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -u -r -N squid-5.0.5/src/http.cc squid-5.0.6/src/http.cc --- squid-5.0.5/src/http.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/http.cc 2021-05-10 21:02:34.000000000 +1200 @@ -24,7 +24,7 @@ #include "comm/Read.h" #include "comm/Write.h" #include "CommRead.h" -#include "err_detail_type.h" +#include "error/Detail.h" #include "errorpage.h" #include "fd.h" #include "fde.h" @@ -67,15 +67,6 @@ #include "DelayPools.h" #endif -#define SQUID_ENTER_THROWING_CODE() try { -#define SQUID_EXIT_THROWING_CODE(status) \ - status = true; \ - } \ - catch (const std::exception &e) { \ - debugs (11, 1, "Exception error:" << e.what()); \ - status = false; \ - } - CBDATA_CLASS_INIT(HttpStateData); static const char *const crlf = "\r\n"; @@ -687,6 +678,9 @@ hp = new Http1::ResponseParser; bool parsedOk = hp->parse(inBuf); + // remember the actual received status-code before returning on errors, + // overwriting any previously stored value from earlier forwarding attempts + request->hier.peer_reply_status = hp->messageStatus(); // may still be scNone // sync the buffers after parsing. inBuf = hp->remaining(); @@ -736,18 +730,11 @@ // XXX: RFC 7230 indicates we MAY ignore the reason phrase, // and use an empty string on unknown status. // We do that now to avoid performance regression from using SBuf::c_str() - newrep->sline.set(Http::ProtocolVersion(1,1), hp->messageStatus() /* , hp->reasonPhrase() */); - newrep->sline.protocol = newrep->sline.version.protocol = hp->messageProtocol().protocol; - newrep->sline.version.major = hp->messageProtocol().major; - newrep->sline.version.minor = hp->messageProtocol().minor; + newrep->sline.set(hp->messageProtocol(), hp->messageStatus() /* , hp->reasonPhrase() */); // parse headers if (!newrep->parseHeader(*hp)) { - // XXX: when Http::ProtocolVersion is a function, remove this hack. just set with messageProtocol() - newrep->sline.set(Http::ProtocolVersion(), Http::scInvalidHeader); - newrep->sline.version.protocol = hp->messageProtocol().protocol; - newrep->sline.version.major = hp->messageProtocol().major; - newrep->sline.version.minor = hp->messageProtocol().minor; + newrep->sline.set(hp->messageProtocol(), Http::scInvalidHeader); debugs(11, 2, "error parsing response headers mime block"); } @@ -758,14 +745,14 @@ newrep->removeStaleWarnings(); - if (newrep->sline.protocol == AnyP::PROTO_HTTP && Http::Is1xx(newrep->sline.status())) { + if (newrep->sline.version.protocol == AnyP::PROTO_HTTP && Http::Is1xx(newrep->sline.status())) { handle1xx(newrep); ctx_exit(ctx); return; } flags.chunked = false; - if (newrep->sline.protocol == AnyP::PROTO_HTTP && newrep->header.chunked()) { + if (newrep->sline.version.protocol == AnyP::PROTO_HTTP && newrep->header.chunked()) { flags.chunked = true; httpChunkDecoder = new Http1::TeChunkedParser; } @@ -782,8 +769,6 @@ processSurrogateControl (vrep); - request->hier.peer_reply_status = newrep->sline.status(); - ctx_exit(ctx); } @@ -1329,6 +1314,11 @@ Must(!flags.headers_parsed); } + if (EBIT_TEST(entry->flags, ENTRY_ABORTED)) { + abortTransaction("store entry aborted while we were waiting for processReply()"); + return; + } + if (!flags.headers_parsed) { // have not parsed headers yet? PROF_start(HttpStateData_processReplyHeader); processReplyHeader(); @@ -1460,26 +1450,25 @@ bool HttpStateData::decodeAndWriteReplyBody() { - const char *data = NULL; - int len; - bool wasThereAnException = false; assert(flags.chunked); assert(httpChunkDecoder); - SQUID_ENTER_THROWING_CODE(); - MemBuf decodedData; - decodedData.init(); - httpChunkDecoder->setPayloadBuffer(&decodedData); - const bool doneParsing = httpChunkDecoder->parse(inBuf); - inBuf = httpChunkDecoder->remaining(); // sync buffers after parse - len = decodedData.contentSize(); - data=decodedData.content(); - addVirginReplyBody(data, len); - if (doneParsing) { - lastChunk = 1; - flags.do_next_read = false; + try { + MemBuf decodedData; + decodedData.init(); + httpChunkDecoder->setPayloadBuffer(&decodedData); + const bool doneParsing = httpChunkDecoder->parse(inBuf); + inBuf = httpChunkDecoder->remaining(); // sync buffers after parse + addVirginReplyBody(decodedData.content(), decodedData.contentSize()); + if (doneParsing) { + lastChunk = 1; + flags.do_next_read = false; + } + return true; + } + catch (...) { + debugs (11, 2, "de-chunking failure: " << CurrentException); } - SQUID_EXIT_THROWING_CODE(wasThereAnException); - return wasThereAnException; + return false; } /** @@ -2629,7 +2618,8 @@ // should not matter because either client-side will provide its own or // there will be no response at all (e.g., if the the client has left). const auto err = new ErrorState(ERR_ICAP_FAILURE, Http::scInternalServerError, fwd->request, fwd->al); - err->detailError(ERR_DETAIL_SRV_REQMOD_REQ_BODY); + static const auto d = MakeNamedErrorDetail("SRV_REQMOD_REQ_BODY"); + err->detailError(d); fwd->fail(err); } diff -u -r -N squid-5.0.5/src/HttpHdrContRange.cc squid-5.0.6/src/HttpHdrContRange.cc --- squid-5.0.5/src/HttpHdrContRange.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/HttpHdrContRange.cc 2021-05-10 21:02:34.000000000 +1200 @@ -161,9 +161,13 @@ ++p; - if (*p == '*') + if (*p == '*') { + if (!known_spec(range->spec.offset)) { + debugs(68, 2, "invalid (*/*) content-range-spec near: '" << str << "'"); + return 0; + } range->elength = range_spec_unknown; - else if (!httpHeaderParseOffset(p, &range->elength)) + } else if (!httpHeaderParseOffset(p, &range->elength)) return 0; else if (range->elength <= 0) { /* Additional paranoidal check for BUG2155 - entity-length MUST be > 0 */ @@ -174,6 +178,12 @@ return 0; } + // reject unsatisfied-range and such; we only use well-defined ranges today + if (!known_spec(range->spec.offset) || !known_spec(range->spec.length)) { + debugs(68, 2, "unwanted content-range-spec near: '" << str << "'"); + return 0; + } + debugs(68, 8, "parsed content-range field: " << (long int) range->spec.offset << "-" << (long int) range->spec.offset + range->spec.length - 1 << " / " << diff -u -r -N squid-5.0.5/src/HttpHdrRange.cc squid-5.0.6/src/HttpHdrRange.cc --- squid-5.0.5/src/HttpHdrRange.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/HttpHdrRange.cc 2021-05-10 21:02:34.000000000 +1200 @@ -226,7 +226,7 @@ int ilen; assert(range_spec); ++ParsedCount; - debugs(64, 8, "parsing range field: '" << range_spec << "'"); + debugs(64, 8, "parsing range field: '" << *range_spec << "'"); /* check range type */ if (range_spec->caseCmp("bytes=", 6)) @@ -247,7 +247,7 @@ delete specs.back(); specs.pop_back(); } - debugs(64, 2, "ignoring invalid range field: '" << range_spec << "'"); + debugs(64, 2, "ignoring invalid range field: '" << *range_spec << "'"); break; } @@ -526,23 +526,6 @@ return true; } -bool -HttpHdrRange::contains(const HttpHdrRangeSpec& r) const -{ - assert(r.length >= 0); - HttpHdrRangeSpec::HttpRange rrange(r.offset, r.offset + r.length); - - for (const_iterator i = begin(); i != end(); ++i) { - HttpHdrRangeSpec::HttpRange irange((*i)->offset, (*i)->offset + (*i)->length); - HttpHdrRangeSpec::HttpRange intersection = rrange.intersection(irange); - - if (intersection.start == irange.start && intersection.size() == irange.size()) - return true; - } - - return false; -} - const HttpHdrRangeSpec * HttpHdrRangeIter::currentSpec() const { diff -u -r -N squid-5.0.5/src/HttpHdrSc.cc squid-5.0.6/src/HttpHdrSc.cc --- squid-5.0.5/src/HttpHdrSc.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/HttpHdrSc.cc 2021-05-10 21:02:34.000000000 +1200 @@ -108,7 +108,7 @@ type = scLookupTable.lookup(SBuf(item,ilen)); if (type == SC_ENUM_END) { - debugs(90, 2, "hdr sc: unknown control-directive: near '" << item << "' in '" << str << "'"); + debugs(90, 2, "unknown control-directive near '" << item << "' in '" << *str << "'"); type = SC_OTHER; } @@ -132,7 +132,7 @@ if (sct->isSet(type)) { if (type != SC_OTHER) - debugs(90, 2, "hdr sc: ignoring duplicate control-directive: near '" << item << "' in '" << str << "'"); + debugs(90, 2, "ignoring duplicate control-directive near '" << item << "' in '" << *str << "'"); ++ scHeaderStats[type].repCount; @@ -336,6 +336,16 @@ HttpHdrScTarget *sctus = findTarget(ourtarget); HttpHdrScTarget *sctgeneric = findTarget(NULL); + /* W3C Edge Architecture Specification 1.0 section 3 + * + * "If more than one is targeted at a surrogate, the most specific applies. + * For example, + * Surrogate-Control: max-age=60, no-store;abc + * The surrogate that identified itself as 'abc' would apply no-store; + * others would apply max-age=60. + * + * XXX: the if statements below will *merge* the no-store and max-age settings. + */ if (sctgeneric || sctus) { HttpHdrScTarget *sctusable = new HttpHdrScTarget(NULL); diff -u -r -N squid-5.0.5/src/HttpHeader.cc squid-5.0.6/src/HttpHeader.cc --- squid-5.0.5/src/HttpHeader.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/HttpHeader.cc 2021-05-10 21:02:34.000000000 +1200 @@ -35,6 +35,7 @@ #include "util.h" #include +#include /* XXX: the whole set of API managing the entries vector should be rethought * after the parse4r-ng effort is complete. @@ -74,7 +75,7 @@ /* header accounting */ // NP: keep in sync with enum http_hdr_owner_type -static HttpHeaderStat HttpHeaderStats[] = { +static std::array HttpHeaderStats = { HttpHeaderStat(/*hoNone*/ "all", NULL), #if USE_HTCP HttpHeaderStat(/*hoHtcpReply*/ "HTCP reply", &ReplyHeadersMask), @@ -82,11 +83,10 @@ HttpHeaderStat(/*hoRequest*/ "request", &RequestHeadersMask), HttpHeaderStat(/*hoReply*/ "reply", &ReplyHeadersMask) #if USE_OPENSSL - /* hoErrorDetail */ + , HttpHeaderStat(/*hoErrorDetail*/ "error detail templates", nullptr) #endif /* hoEnd */ }; -static int HttpHeaderStatCount = countof(HttpHeaderStats); static int HeaderEntryParsedCount = 0; @@ -129,8 +129,8 @@ CBIT_SET(ReplyHeadersMask,h); } - /* header stats initialized by class constructor */ - assert(HttpHeaderStatCount == hoReply + 1); + assert(HttpHeaderStats[0].label && "httpHeaderInitModule() called via main()"); + assert(HttpHeaderStats[hoEnd-1].label && "HttpHeaderStats created with all elements"); /* init dependent modules */ httpHdrCcInitModule(); @@ -539,11 +539,10 @@ if (delById(Http::HdrType::CONTENT_LENGTH)) debugs(55, 3, "Content-Length is " << clen.prohibitedAndIgnored()); - // RFC 7230 section 3.3.1 has the same criteria forbid Transfer-Encoding - if (delById(Http::HdrType::TRANSFER_ENCODING)) { + // The same RFC 7230 3.3.3#1-based logic applies to Transfer-Encoding + // banned by RFC 7230 section 3.3.1. + if (delById(Http::HdrType::TRANSFER_ENCODING)) debugs(55, 3, "Transfer-Encoding is " << clen.prohibitedAndIgnored()); - teUnsupported_ = true; - } } else if (getByIdIfPresent(Http::HdrType::TRANSFER_ENCODING, &rawTe)) { // RFC 2616 section 4.4: ignore Content-Length with Transfer-Encoding @@ -1640,6 +1639,9 @@ assert(hs); assert(e); + if (!hs->owner_mask) + return; // these HttpHeaderStat objects were not meant to be dumped here + dump_stat = hs; storeAppendPrintf(e, "\nHeader Stats: %s\n", hs->label); storeAppendPrintf(e, "\nField type distribution\n"); @@ -1665,7 +1667,6 @@ void httpHeaderStoreReport(StoreEntry * e) { - int i; assert(e); HttpHeaderStats[0].parsedCount = @@ -1677,9 +1678,8 @@ HttpHeaderStats[0].busyDestroyedCount = HttpHeaderStats[hoRequest].busyDestroyedCount + HttpHeaderStats[hoReply].busyDestroyedCount; - for (i = 1; i < HttpHeaderStatCount; ++i) { - httpHeaderStatDump(HttpHeaderStats + i, e); - } + for (const auto &stats: HttpHeaderStats) + httpHeaderStatDump(&stats, e); /* field stats for all messages */ storeAppendPrintf(e, "\nHttp Fields Stats (replies and requests)\n"); diff -u -r -N squid-5.0.5/src/HttpHeaderRange.h squid-5.0.6/src/HttpHeaderRange.h --- squid-5.0.5/src/HttpHeaderRange.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/HttpHeaderRange.h 2021-05-10 21:02:34.000000000 +1200 @@ -18,8 +18,11 @@ class HttpReply; class Packable; -/* http byte-range-spec */ - +// TODO: Refactor to disambiguate and provide message-specific APIs. +/// either byte-range-spec (in a request Range header) +/// or suffix-byte-range-spec (in a request Range header) +/// or byte-range part of byte-range-resp (in a response Content-Range header) +/// or "*" part of unsatisfied-range (in a response Content-Range header) class HttpHdrRangeSpec { MEMPROXY_CLASS(HttpHdrRangeSpec); @@ -78,7 +81,6 @@ int64_t firstOffset() const; int64_t lowestOffset(int64_t) const; bool offsetLimitExceeded(const int64_t limit) const; - bool contains(const HttpHdrRangeSpec& r) const; std::vector specs; private: @@ -100,9 +102,9 @@ void updateSpec(); int64_t debt() const; void debt(int64_t); - int64_t debt_size; /* bytes left to send from the current spec */ + int64_t debt_size = 0; /* bytes left to send from the current spec */ String boundary; /* boundary for multipart responses */ - bool valid; + bool valid = false; }; #endif /* SQUID_HTTPHEADERRANGE_H */ diff -u -r -N squid-5.0.5/src/HttpRequest.cc squid-5.0.6/src/HttpRequest.cc --- squid-5.0.5/src/HttpRequest.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/HttpRequest.cc 2021-05-10 21:02:34.000000000 +1200 @@ -17,7 +17,7 @@ #include "client_side_request.h" #include "dns/LookupDetails.h" #include "Downloader.h" -#include "err_detail_type.h" +#include "error/Detail.h" #include "globals.h" #include "gopher.h" #include "http.h" @@ -91,8 +91,7 @@ body_pipe = NULL; // hier dnsWait = -1; - errType = ERR_NONE; - errDetail = ERR_DETAIL_NONE; + error.clear(); peer_login = NULL; // not allocated/deallocated by this class peer_domain = NULL; // not allocated/deallocated by this class peer_host = NULL; @@ -193,7 +192,7 @@ copy->imslen = imslen; copy->hier = hier; // Is it safe to copy? Should we? - copy->errType = errType; + copy->error = error; // XXX: what to do with copy->peer_login? @@ -238,8 +237,7 @@ // may eventually need cloneNullAdaptationImmune() for that. flags = aReq->flags.cloneAdaptationImmune(); - errType = aReq->errType; - errDetail = aReq->errDetail; + error = aReq->error; #if USE_AUTH auth_user_request = aReq->auth_user_request; extacl_user = aReq->extacl_user; @@ -268,7 +266,7 @@ * NP: Other errors are left for detection later in the parse. */ bool -HttpRequest::sanityCheckStartLine(const char *buf, const size_t hdr_len, Http::StatusCode *error) +HttpRequest::sanityCheckStartLine(const char *buf, const size_t hdr_len, Http::StatusCode *scode) { // content is long enough to possibly hold a reply // 2 being magic size of a 1-byte request method plus space delimiter @@ -276,7 +274,7 @@ // this is ony a real error if the headers apparently complete. if (hdr_len > 0) { debugs(58, 3, HERE << "Too large request header (" << hdr_len << " bytes)"); - *error = Http::scInvalidHeader; + *scode = Http::scInvalidHeader; } return false; } @@ -286,7 +284,7 @@ m.HttpRequestMethodXXX(buf); if (m == Http::METHOD_NONE) { debugs(73, 3, "HttpRequest::sanityCheckStartLine: did not find HTTP request method"); - *error = Http::scInvalidHeader; + *scode = Http::scInvalidHeader; return false; } @@ -465,25 +463,10 @@ } void -HttpRequest::detailError(err_type aType, int aDetail) -{ - if (errType || errDetail) - debugs(11, 5, HERE << "old error details: " << errType << '/' << errDetail); - debugs(11, 5, HERE << "current error details: " << aType << '/' << aDetail); - // checking type and detail separately may cause inconsistency, but - // may result in more details available if they only become available later - if (!errType) - errType = aType; - if (!errDetail) - errDetail = aDetail; -} - -void HttpRequest::clearError() { - debugs(11, 7, HERE << "old error details: " << errType << '/' << errDetail); - errType = ERR_NONE; - errDetail = ERR_DETAIL_NONE; + debugs(11, 7, "old: " << error); + error.clear(); } void diff -u -r -N squid-5.0.5/src/HttpRequest.h squid-5.0.6/src/HttpRequest.h --- squid-5.0.5/src/HttpRequest.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/HttpRequest.h 2021-05-10 21:02:34.000000000 +1200 @@ -12,7 +12,7 @@ #include "anyp/Uri.h" #include "base/CbcPointer.h" #include "dns/forward.h" -#include "err_type.h" +#include "error/Error.h" #include "HierarchyLogEntry.h" #include "http/Message.h" #include "http/RequestMethod.h" @@ -98,7 +98,7 @@ void recordLookup(const Dns::LookupDetails &detail); /// sets error detail if no earlier detail was available - void detailError(err_type aType, int aDetail); + void detailError(const err_type c, const ErrorDetail::Pointer &d) { error.update(c, d); } /// clear error details, useful for retries/repeats void clearError(); @@ -158,8 +158,7 @@ int dnsWait; ///< sum of DNS lookup delays in milliseconds, for %dt - err_type errType; - int errDetail; ///< errType-specific detail about the transaction error + Error error; ///< the first transaction problem encountered (or falsy) char *peer_login; /* Configured peer login:password */ diff -u -r -N squid-5.0.5/src/icmp/Makefile.am squid-5.0.6/src/icmp/Makefile.am --- squid-5.0.5/src/icmp/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/icmp/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -20,17 +20,17 @@ # ICMP API definition ... libicmpcore_la_SOURCES = \ - Icmp.h \ - Icmp.cc + Icmp.cc \ + Icmp.h # Squid Internal ICMP helper interface libicmp_la_SOURCES = \ IcmpConfig.cc \ IcmpConfig.h \ - IcmpSquid.h \ IcmpSquid.cc \ - net_db.h \ - net_db.cc + IcmpSquid.h \ + net_db.cc \ + net_db.h libicmp_la_LIBADD= libicmpcore.la @@ -50,12 +50,12 @@ # ICMP lookup helper pinger_SOURCES = \ Icmp.h \ - IcmpPinger.h \ - IcmpPinger.cc \ - Icmp4.h \ Icmp4.cc \ - Icmp6.h \ + Icmp4.h \ Icmp6.cc \ + Icmp6.h \ + IcmpPinger.cc \ + IcmpPinger.h \ pinger.cc nodist_pinger_SOURCES = $(COPIED_SOURCE) pinger_LDFLAGS = $(LIBADD_DL) diff -u -r -N squid-5.0.5/src/icmp/Makefile.in squid-5.0.6/src/icmp/Makefile.in --- squid-5.0.5/src/icmp/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/icmp/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -178,8 +178,8 @@ libicmpcore_la_LIBADD = am_libicmpcore_la_OBJECTS = Icmp.lo libicmpcore_la_OBJECTS = $(am_libicmpcore_la_OBJECTS) -am_pinger_OBJECTS = IcmpPinger.$(OBJEXT) Icmp4.$(OBJEXT) \ - Icmp6.$(OBJEXT) pinger.$(OBJEXT) +am_pinger_OBJECTS = Icmp4.$(OBJEXT) Icmp6.$(OBJEXT) \ + IcmpPinger.$(OBJEXT) pinger.$(OBJEXT) am__dirstamp = $(am__leading_dot)dirstamp am__objects_1 = debug.$(OBJEXT) globals.$(OBJEXT) \ SquidConfig.$(OBJEXT) SquidNew.$(OBJEXT) \ @@ -768,18 +768,18 @@ # ICMP API definition ... libicmpcore_la_SOURCES = \ - Icmp.h \ - Icmp.cc + Icmp.cc \ + Icmp.h # Squid Internal ICMP helper interface libicmp_la_SOURCES = \ IcmpConfig.cc \ IcmpConfig.h \ - IcmpSquid.h \ IcmpSquid.cc \ - net_db.h \ - net_db.cc + IcmpSquid.h \ + net_db.cc \ + net_db.h libicmp_la_LIBADD = libicmpcore.la @@ -800,12 +800,12 @@ # ICMP lookup helper pinger_SOURCES = \ Icmp.h \ - IcmpPinger.h \ - IcmpPinger.cc \ - Icmp4.h \ Icmp4.cc \ - Icmp6.h \ + Icmp4.h \ Icmp6.cc \ + Icmp6.h \ + IcmpPinger.cc \ + IcmpPinger.h \ pinger.cc nodist_pinger_SOURCES = $(COPIED_SOURCE) diff -u -r -N squid-5.0.5/src/ident/Makefile.am squid-5.0.6/src/ident/Makefile.am --- squid-5.0.5/src/ident/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ident/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,8 +11,8 @@ noinst_LTLIBRARIES = libident.la libident_la_SOURCES = \ - AclIdent.h \ AclIdent.cc \ + AclIdent.h \ Config.h \ Ident.cc \ Ident.h diff -u -r -N squid-5.0.5/src/ident/Makefile.in squid-5.0.6/src/ident/Makefile.in --- squid-5.0.5/src/ident/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/ident/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -728,8 +728,8 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libident.la libident_la_SOURCES = \ - AclIdent.h \ AclIdent.cc \ + AclIdent.h \ Config.h \ Ident.cc \ Ident.h diff -u -r -N squid-5.0.5/src/ip/Address.h squid-5.0.6/src/ip/Address.h --- squid-5.0.5/src/ip/Address.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ip/Address.h 2021-05-10 21:02:34.000000000 +1200 @@ -41,7 +41,7 @@ { public: - /** @name Constructors and Destructor */ + /** @name Constructors */ /*@{*/ Address() { setEmpty(); } Address(const struct in_addr &); @@ -51,7 +51,6 @@ Address(const struct hostent &); Address(const struct addrinfo &); Address(const char*); - ~Address() {} /*@}*/ /** @name Assignment Operators */ diff -u -r -N squid-5.0.5/src/ip/Makefile.am squid-5.0.6/src/ip/Makefile.am --- squid-5.0.5/src/ip/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ip/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,14 +11,14 @@ noinst_LTLIBRARIES = libip.la libip_la_SOURCES = \ - forward.h \ - Address.h \ Address.cc \ - Intercept.h \ + Address.h \ Intercept.cc \ - NfMarkConfig.h \ + Intercept.h \ NfMarkConfig.cc \ - QosConfig.h \ + NfMarkConfig.h \ QosConfig.cc \ + QosConfig.h \ + forward.h \ tools.cc \ tools.h diff -u -r -N squid-5.0.5/src/ip/Makefile.in squid-5.0.6/src/ip/Makefile.in --- squid-5.0.5/src/ip/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/ip/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -731,15 +731,15 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libip.la libip_la_SOURCES = \ - forward.h \ - Address.h \ Address.cc \ - Intercept.h \ + Address.h \ Intercept.cc \ - NfMarkConfig.h \ + Intercept.h \ NfMarkConfig.cc \ - QosConfig.h \ + NfMarkConfig.h \ QosConfig.cc \ + QosConfig.h \ + forward.h \ tools.cc \ tools.h diff -u -r -N squid-5.0.5/src/ip/QosConfig.cc squid-5.0.6/src/ip/QosConfig.cc --- squid-5.0.5/src/ip/QosConfig.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ip/QosConfig.cc 2021-05-10 21:02:34.000000000 +1200 @@ -20,6 +20,7 @@ #include "Parsing.h" #include +#include CBDATA_CLASS_INIT(acl_tos); diff -u -r -N squid-5.0.5/src/ipc/Coordinator.cc squid-5.0.6/src/ipc/Coordinator.cc --- squid-5.0.5/src/ipc/Coordinator.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/Coordinator.cc 2021-05-10 21:02:34.000000000 +1200 @@ -78,13 +78,13 @@ void Ipc::Coordinator::receive(const TypedMsgHdr& message) { - switch (message.type()) { - case mtRegistration: + switch (message.rawType()) { + case mtRegisterStrand: debugs(54, 6, HERE << "Registration request"); - handleRegistrationRequest(HereIamMessage(message)); + handleRegistrationRequest(StrandMessage(message)); break; - case mtStrandSearchRequest: { + case mtFindStrand: { const StrandSearchRequest sr(message); debugs(54, 6, HERE << "Strand search request: " << sr.requestorId << " tag: " << sr.tag); @@ -107,7 +107,7 @@ case mtCacheMgrResponse: { debugs(54, 6, HERE << "Cache manager response"); const Mgr::Response resp(message); - handleCacheMgrResponse(resp); + handleCacheMgrResponse(Mine(resp)); } break; @@ -122,24 +122,24 @@ case mtSnmpResponse: { debugs(54, 6, HERE << "SNMP response"); const Snmp::Response resp(message); - handleSnmpResponse(resp); + handleSnmpResponse(Mine(resp)); } break; #endif default: - debugs(54, DBG_IMPORTANT, HERE << "Unhandled message type: " << message.type()); + Port::receive(message); break; } } -void Ipc::Coordinator::handleRegistrationRequest(const HereIamMessage& msg) +void Ipc::Coordinator::handleRegistrationRequest(const StrandMessage& msg) { registerStrand(msg.strand); // send back an acknowledgement; TODO: remove as not needed? TypedMsgHdr message; - msg.pack(message); + msg.pack(mtStrandRegistered, message); SendMessage(MakeAddr(strandAddrLabel, msg.strand.kidId), message); } @@ -222,9 +222,9 @@ { debugs(54, 3, HERE << "tell kid" << request.requestorId << " that " << request.tag << " is kid" << strand.kidId); - const StrandSearchResponse response(strand); + const StrandMessage response(strand, request.qid); TypedMsgHdr message; - response.pack(message); + response.pack(mtStrandReady, message); SendMessage(MakeAddr(strandAddrLabel, request.requestorId), message); } diff -u -r -N squid-5.0.5/src/ipc/Coordinator.h squid-5.0.6/src/ipc/Coordinator.h --- squid-5.0.5/src/ipc/Coordinator.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/Coordinator.h 2021-05-10 21:02:34.000000000 +1200 @@ -47,7 +47,7 @@ StrandCoord* findStrand(int kidId); ///< registered strand or NULL void registerStrand(const StrandCoord &); ///< adds or updates existing - void handleRegistrationRequest(const HereIamMessage &); ///< register,ACK + void handleRegistrationRequest(const StrandMessage &); ///< register,ACK /// answer the waiting search request void notifySearcher(const StrandSearchRequest &request, const StrandCoord&); diff -u -r -N squid-5.0.5/src/ipc/Forwarder.cc squid-5.0.6/src/ipc/Forwarder.cc --- squid-5.0.5/src/ipc/Forwarder.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/Forwarder.cc 2021-05-10 21:02:34.000000000 +1200 @@ -16,12 +16,13 @@ #include "HttpRequest.h" #include "ipc/Forwarder.h" #include "ipc/Port.h" +#include "ipc/RequestId.h" #include "ipc/TypedMsgHdr.h" CBDATA_NAMESPACED_CLASS_INIT(Ipc, Forwarder); Ipc::Forwarder::RequestsMap Ipc::Forwarder::TheRequestsMap; -unsigned int Ipc::Forwarder::LastRequestId = 0; +Ipc::RequestId::Index Ipc::Forwarder::LastRequestId = 0; Ipc::Forwarder::Forwarder(Request::Pointer aRequest, double aTimeout): AsyncJob("Ipc::Forwarder"), @@ -149,7 +150,7 @@ /// returns and forgets the right Forwarder callback for the request AsyncCall::Pointer -Ipc::Forwarder::DequeueRequest(unsigned int requestId) +Ipc::Forwarder::DequeueRequest(const RequestId::Index requestId) { debugs(54, 3, HERE); Must(requestId != 0); @@ -172,7 +173,7 @@ } void -Ipc::Forwarder::HandleRemoteAck(unsigned int requestId) +Ipc::Forwarder::HandleRemoteAck(const RequestId requestId) { debugs(54, 3, HERE); Must(requestId != 0); diff -u -r -N squid-5.0.5/src/ipc/Forwarder.h squid-5.0.6/src/ipc/Forwarder.h --- squid-5.0.5/src/ipc/Forwarder.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/Forwarder.h 2021-05-10 21:02:34.000000000 +1200 @@ -35,7 +35,7 @@ virtual ~Forwarder(); /// finds and calls the right Forwarder upon Coordinator's response - static void HandleRemoteAck(unsigned int requestId); + static void HandleRemoteAck(RequestId); /* has-to-be-public AsyncJob API */ virtual void callException(const std::exception& e); @@ -59,17 +59,17 @@ void handleRemoteAck(); - static AsyncCall::Pointer DequeueRequest(unsigned int requestId); + static AsyncCall::Pointer DequeueRequest(RequestId::Index); protected: Request::Pointer request; const double timeout; ///< response wait timeout in seconds /// maps request->id to Forwarder::handleRemoteAck callback - typedef std::map RequestsMap; + typedef std::map RequestsMap; static RequestsMap TheRequestsMap; ///< pending Coordinator requests - static unsigned int LastRequestId; ///< last requestId used + static RequestId::Index LastRequestId; ///< last requestId used }; } // namespace Ipc diff -u -r -N squid-5.0.5/src/ipc/forward.h squid-5.0.6/src/ipc/forward.h --- squid-5.0.5/src/ipc/forward.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/forward.h 2021-05-10 21:02:34.000000000 +1200 @@ -14,14 +14,15 @@ namespace Ipc { -class TypedMsgHdr; -class StrandCoord; -class HereIamMessage; -class StrandSearchResponse; class Forwarder; class Inquirer; +class QuestionerId; class Request; +class RequestId; class Response; +class StrandCoord; +class StrandMessage; +class TypedMsgHdr; } // namespace Ipc diff -u -r -N squid-5.0.5/src/ipc/Inquirer.cc squid-5.0.6/src/ipc/Inquirer.cc --- squid-5.0.5/src/ipc/Inquirer.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/Inquirer.cc 2021-05-10 21:02:34.000000000 +1200 @@ -21,7 +21,7 @@ CBDATA_NAMESPACED_CLASS_INIT(Ipc, Inquirer); Ipc::Inquirer::RequestsMap Ipc::Inquirer::TheRequestsMap; -unsigned int Ipc::Inquirer::LastRequestId = 0; +Ipc::RequestId::Index Ipc::Inquirer::LastRequestId = 0; /// compare Ipc::StrandCoord using kidId, for std::sort() below static bool @@ -139,7 +139,7 @@ /// returns and forgets the right Inquirer callback for strand request AsyncCall::Pointer -Ipc::Inquirer::DequeueRequest(unsigned int requestId) +Ipc::Inquirer::DequeueRequest(const RequestId::Index requestId) { debugs(54, 3, HERE << " requestId " << requestId); Must(requestId != 0); @@ -206,7 +206,7 @@ { static MemBuf buf; buf.reset(); - buf.appendf(" [request->requestId %u]", request->requestId); + buf.appendf(" [requestId %u]", request->requestId.index()); buf.terminate(); return buf.content(); } diff -u -r -N squid-5.0.5/src/ipc/Inquirer.h squid-5.0.6/src/ipc/Inquirer.h --- squid-5.0.5/src/ipc/Inquirer.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/Inquirer.h 2021-05-10 21:02:34.000000000 +1200 @@ -64,7 +64,7 @@ void handleRemoteAck(Response::Pointer response); - static AsyncCall::Pointer DequeueRequest(unsigned int requestId); + static AsyncCall::Pointer DequeueRequest(RequestId::Index); static void RequestTimedOut(void* param); void requestTimedOut(); @@ -79,10 +79,10 @@ const double timeout; ///< number of seconds to wait for strand response /// maps request->id to Inquirer::handleRemoteAck callback - typedef std::map RequestsMap; + typedef std::map RequestsMap; static RequestsMap TheRequestsMap; ///< pending strand requests - static unsigned int LastRequestId; ///< last requestId used + static RequestId::Index LastRequestId; ///< last requestId used }; } // namespace Ipc diff -u -r -N squid-5.0.5/src/ipc/Makefile.am squid-5.0.6/src/ipc/Makefile.am --- squid-5.0.5/src/ipc/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,57 +11,60 @@ noinst_LTLIBRARIES = libipc.la libipc_la_SOURCES = \ + Coordinator.cc \ + Coordinator.h \ FdNotes.cc \ FdNotes.h \ + Forwarder.cc \ + Forwarder.h \ + Inquirer.cc \ + Inquirer.h \ Kid.cc \ Kid.h \ Kids.cc \ Kids.h \ - Messages.h \ MemMap.cc \ MemMap.h \ + Messages.h \ + Port.cc \ + Port.h \ + QuestionerId.cc \ + QuestionerId.h \ Queue.cc \ Queue.h \ ReadWriteLock.cc \ ReadWriteLock.h \ + Request.h \ + RequestId.cc \ + RequestId.h \ + Response.h \ + SharedListen.cc \ + SharedListen.h \ StartListening.cc \ StartListening.h \ StoreMap.cc \ StoreMap.h \ + Strand.cc \ + Strand.h \ StrandCoord.cc \ StrandCoord.h \ StrandCoords.h \ StrandSearch.cc \ StrandSearch.h \ - SharedListen.cc \ - SharedListen.h \ TypedMsgHdr.cc \ TypedMsgHdr.h \ - Coordinator.cc \ - Coordinator.h \ UdsOp.cc \ UdsOp.h \ - Port.cc \ - Port.h \ - Strand.cc \ - Strand.h \ forward.h \ - Forwarder.cc \ - Forwarder.h \ - Inquirer.cc \ - Inquirer.h \ - Request.h \ - Response.h \ - \ mem/FlexibleArray.h \ mem/Page.cc \ mem/Page.h \ mem/PagePool.cc \ mem/PagePool.h \ - mem/Pages.cc \ - mem/Pages.h \ mem/PageStack.cc \ mem/PageStack.h \ + mem/Pages.cc \ + mem/Pages.h \ mem/Pointer.h \ mem/Segment.cc \ mem/Segment.h \ diff -u -r -N squid-5.0.5/src/ipc/Makefile.in squid-5.0.6/src/ipc/Makefile.in --- squid-5.0.5/src/ipc/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/ipc/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -166,12 +166,12 @@ am__DEPENDENCIES_1 = libipc_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am__dirstamp = $(am__leading_dot)dirstamp -am_libipc_la_OBJECTS = FdNotes.lo Kid.lo Kids.lo MemMap.lo Queue.lo \ - ReadWriteLock.lo StartListening.lo StoreMap.lo StrandCoord.lo \ - StrandSearch.lo SharedListen.lo TypedMsgHdr.lo Coordinator.lo \ - UdsOp.lo Port.lo Strand.lo Forwarder.lo Inquirer.lo \ - mem/Page.lo mem/PagePool.lo mem/Pages.lo mem/PageStack.lo \ - mem/Segment.lo +am_libipc_la_OBJECTS = Coordinator.lo FdNotes.lo Forwarder.lo \ + Inquirer.lo Kid.lo Kids.lo MemMap.lo Port.lo QuestionerId.lo \ + Queue.lo ReadWriteLock.lo RequestId.lo SharedListen.lo \ + StartListening.lo StoreMap.lo Strand.lo StrandCoord.lo \ + StrandSearch.lo TypedMsgHdr.lo UdsOp.lo mem/Page.lo \ + mem/PagePool.lo mem/PageStack.lo mem/Pages.lo mem/Segment.lo libipc_la_OBJECTS = $(am_libipc_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -196,8 +196,9 @@ ./$(DEPDIR)/FdNotes.Plo ./$(DEPDIR)/Forwarder.Plo \ ./$(DEPDIR)/Inquirer.Plo ./$(DEPDIR)/Kid.Plo \ ./$(DEPDIR)/Kids.Plo ./$(DEPDIR)/MemMap.Plo \ - ./$(DEPDIR)/Port.Plo ./$(DEPDIR)/Queue.Plo \ - ./$(DEPDIR)/ReadWriteLock.Plo ./$(DEPDIR)/SharedListen.Plo \ + ./$(DEPDIR)/Port.Plo ./$(DEPDIR)/QuestionerId.Plo \ + ./$(DEPDIR)/Queue.Plo ./$(DEPDIR)/ReadWriteLock.Plo \ + ./$(DEPDIR)/RequestId.Plo ./$(DEPDIR)/SharedListen.Plo \ ./$(DEPDIR)/StartListening.Plo ./$(DEPDIR)/StoreMap.Plo \ ./$(DEPDIR)/Strand.Plo ./$(DEPDIR)/StrandCoord.Plo \ ./$(DEPDIR)/StrandSearch.Plo ./$(DEPDIR)/TypedMsgHdr.Plo \ @@ -747,57 +748,60 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libipc.la libipc_la_SOURCES = \ + Coordinator.cc \ + Coordinator.h \ FdNotes.cc \ FdNotes.h \ + Forwarder.cc \ + Forwarder.h \ + Inquirer.cc \ + Inquirer.h \ Kid.cc \ Kid.h \ Kids.cc \ Kids.h \ - Messages.h \ MemMap.cc \ MemMap.h \ + Messages.h \ + Port.cc \ + Port.h \ + QuestionerId.cc \ + QuestionerId.h \ Queue.cc \ Queue.h \ ReadWriteLock.cc \ ReadWriteLock.h \ + Request.h \ + RequestId.cc \ + RequestId.h \ + Response.h \ + SharedListen.cc \ + SharedListen.h \ StartListening.cc \ StartListening.h \ StoreMap.cc \ StoreMap.h \ + Strand.cc \ + Strand.h \ StrandCoord.cc \ StrandCoord.h \ StrandCoords.h \ StrandSearch.cc \ StrandSearch.h \ - SharedListen.cc \ - SharedListen.h \ TypedMsgHdr.cc \ TypedMsgHdr.h \ - Coordinator.cc \ - Coordinator.h \ UdsOp.cc \ UdsOp.h \ - Port.cc \ - Port.h \ - Strand.cc \ - Strand.h \ forward.h \ - Forwarder.cc \ - Forwarder.h \ - Inquirer.cc \ - Inquirer.h \ - Request.h \ - Response.h \ - \ mem/FlexibleArray.h \ mem/Page.cc \ mem/Page.h \ mem/PagePool.cc \ mem/PagePool.h \ - mem/Pages.cc \ - mem/Pages.h \ mem/PageStack.cc \ mem/PageStack.h \ + mem/Pages.cc \ + mem/Pages.h \ mem/Pointer.h \ mem/Segment.cc \ mem/Segment.h \ @@ -866,8 +870,8 @@ @: > mem/$(DEPDIR)/$(am__dirstamp) mem/Page.lo: mem/$(am__dirstamp) mem/$(DEPDIR)/$(am__dirstamp) mem/PagePool.lo: mem/$(am__dirstamp) mem/$(DEPDIR)/$(am__dirstamp) -mem/Pages.lo: mem/$(am__dirstamp) mem/$(DEPDIR)/$(am__dirstamp) mem/PageStack.lo: mem/$(am__dirstamp) mem/$(DEPDIR)/$(am__dirstamp) +mem/Pages.lo: mem/$(am__dirstamp) mem/$(DEPDIR)/$(am__dirstamp) mem/Segment.lo: mem/$(am__dirstamp) mem/$(DEPDIR)/$(am__dirstamp) libipc.la: $(libipc_la_OBJECTS) $(libipc_la_DEPENDENCIES) $(EXTRA_libipc_la_DEPENDENCIES) @@ -889,8 +893,10 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Kids.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MemMap.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Port.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuestionerId.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Queue.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ReadWriteLock.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RequestId.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SharedListen.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StartListening.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StoreMap.Plo@am__quote@ # am--include-marker @@ -1246,8 +1252,10 @@ -rm -f ./$(DEPDIR)/Kids.Plo -rm -f ./$(DEPDIR)/MemMap.Plo -rm -f ./$(DEPDIR)/Port.Plo + -rm -f ./$(DEPDIR)/QuestionerId.Plo -rm -f ./$(DEPDIR)/Queue.Plo -rm -f ./$(DEPDIR)/ReadWriteLock.Plo + -rm -f ./$(DEPDIR)/RequestId.Plo -rm -f ./$(DEPDIR)/SharedListen.Plo -rm -f ./$(DEPDIR)/StartListening.Plo -rm -f ./$(DEPDIR)/StoreMap.Plo @@ -1314,8 +1322,10 @@ -rm -f ./$(DEPDIR)/Kids.Plo -rm -f ./$(DEPDIR)/MemMap.Plo -rm -f ./$(DEPDIR)/Port.Plo + -rm -f ./$(DEPDIR)/QuestionerId.Plo -rm -f ./$(DEPDIR)/Queue.Plo -rm -f ./$(DEPDIR)/ReadWriteLock.Plo + -rm -f ./$(DEPDIR)/RequestId.Plo -rm -f ./$(DEPDIR)/SharedListen.Plo -rm -f ./$(DEPDIR)/StartListening.Plo -rm -f ./$(DEPDIR)/StoreMap.Plo diff -u -r -N squid-5.0.5/src/ipc/mem/PageStack.cc squid-5.0.6/src/ipc/mem/PageStack.cc --- squid-5.0.5/src/ipc/mem/PageStack.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/mem/PageStack.cc 2021-05-10 21:02:34.000000000 +1200 @@ -16,6 +16,7 @@ #include #include +#include /* diff -u -r -N squid-5.0.5/src/ipc/Messages.h squid-5.0.6/src/ipc/Messages.h --- squid-5.0.5/src/ipc/Messages.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/Messages.h 2021-05-10 21:02:34.000000000 +1200 @@ -17,16 +17,30 @@ { /// message class identifier -typedef enum { mtNone = 0, mtRegistration, - mtStrandSearchRequest, mtStrandSearchResponse, - mtSharedListenRequest, mtSharedListenResponse, +typedef enum { mtNone = 0, ///< unspecified or unknown message kind; unused on the wire + + mtRegisterStrand, ///< notifies about our strand existence + mtStrandRegistered, ///< acknowledges mtRegisterStrand acceptance + + mtFindStrand, ///< a worker requests a strand from Coordinator + mtStrandReady, ///< an mtFindStrand answer: the strand exists and should be usable + + mtSharedListenRequest, + mtSharedListenResponse, + mtIpcIoNotification, + mtCollapsedForwardingNotification, - mtCacheMgrRequest, mtCacheMgrResponse + + mtCacheMgrRequest, + mtCacheMgrResponse, + #if SQUID_SNMP - , - mtSnmpRequest, mtSnmpResponse + mtSnmpRequest, + mtSnmpResponse, #endif + + mtEnd ///< for message kind range checks; unused on the wire } MessageType; } // namespace Ipc; diff -u -r -N squid-5.0.5/src/ipc/Port.cc squid-5.0.6/src/ipc/Port.cc --- squid-5.0.5/src/ipc/Port.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/Port.cc 2021-05-10 21:02:34.000000000 +1200 @@ -14,6 +14,7 @@ #include "comm/Read.h" #include "CommCalls.h" #include "ipc/Port.h" +#include "sbuf/Stream.h" #include "tools.h" #include "util.h" @@ -73,13 +74,33 @@ return coordinatorAddr; } +void +Ipc::Port::receive(const TypedMsgHdr &message) +{ + throw TextException(ToSBuf("bad IPC message type: ", message.rawType()), Here()); +} + +/// receive() but ignore any errors +void +Ipc::Port::receiveOrIgnore(const TypedMsgHdr &message) +{ + try { + receive(message); + } catch (...) { + debugs(54, DBG_IMPORTANT, "WARNING: Ignoring IPC message" << + Debug::Extra << "message type: " << message.rawType() << + Debug::Extra << "problem: " << CurrentException); + } +} + void Ipc::Port::noteRead(const CommIoCbParams& params) { debugs(54, 6, HERE << params.conn << " flag " << params.flag << " [" << this << ']'); if (params.flag == Comm::OK) { assert(params.buf == buf.raw()); - receive(buf); + debugs(54, 6, "message type: " << buf.rawType()); + receiveOrIgnore(buf); } // TODO: if there was a fatal error on our socket, close the socket before // trying to listen again and print a level-1 error message. diff -u -r -N squid-5.0.5/src/ipc/Port.h squid-5.0.6/src/ipc/Port.h --- squid-5.0.5/src/ipc/Port.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/Port.h 2021-05-10 21:02:34.000000000 +1200 @@ -36,10 +36,12 @@ void doListen(); /// handle IPC message just read - virtual void receive(const TypedMsgHdr& message) = 0; + /// kids must call parent method when they do not recognize the message type + virtual void receive(const TypedMsgHdr &) = 0; private: void noteRead(const CommIoCbParams ¶ms); // Comm callback API + void receiveOrIgnore(const TypedMsgHdr& ); private: TypedMsgHdr buf; ///< msghdr struct filled by Comm diff -u -r -N squid-5.0.5/src/ipc/QuestionerId.cc squid-5.0.6/src/ipc/QuestionerId.cc --- squid-5.0.5/src/ipc/QuestionerId.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/ipc/QuestionerId.cc 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,51 @@ +/* + * Copyright (C) 1996-2020 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +#include "squid.h" +#include "base/TextException.h" +#include "ipc/QuestionerId.h" +#include "ipc/TypedMsgHdr.h" +#include "sbuf/Stream.h" + +#include + +Ipc::QuestionerId +Ipc::MyQuestionerId() +{ + static const QuestionerId qid(getpid()); + return qid; +} + +void +Ipc::QuestionerId::pack(TypedMsgHdr &hdrMsg) const +{ + hdrMsg.putPod(pid); +} + +void +Ipc::QuestionerId::unpack(const TypedMsgHdr &hdrMsg) +{ + hdrMsg.getPod(pid); +} + +void +Ipc::QuestionerId::rejectAnswerIfStale() const +{ + const auto myPid = MyQuestionerId().pid; + if (myPid != pid) { + throw TextException(ToSBuf("received answer to an IPC question asked by process ", pid, + Debug::Extra, "my process PID: ", myPid), Here()); + } +} + +void +Ipc::QuestionerId::print(std::ostream &os) const +{ + os << pid; +} + diff -u -r -N squid-5.0.5/src/ipc/QuestionerId.h squid-5.0.6/src/ipc/QuestionerId.h --- squid-5.0.5/src/ipc/QuestionerId.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/ipc/QuestionerId.h 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,72 @@ +/* + * Copyright (C) 1996-2020 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +#ifndef SQUID_SRC_IPC_QUESTIONERID_H +#define SQUID_SRC_IPC_QUESTIONERID_H + +#include "ipc/forward.h" + +#include + +namespace Ipc +{ + +/// Identifies a kid process sending IPC messages that require an answer. +/// Must be unique across all kids with pending questions. +class QuestionerId +{ +public: + /// to-be-determined ID + QuestionerId() = default; + + /// for sending the ID of the asking process + void pack(TypedMsgHdr &) const; + + /// for receiving the ID of the asking process + void unpack(const TypedMsgHdr &); + + /// does nothing but throws if the questioner was not the current process + void rejectAnswerIfStale() const; + + /// reports the stored opaque ID value (for debugging) + void print(std::ostream &) const; + +private: + /// for MyQuestionerId() convenience + explicit QuestionerId(const pid_t aPid): pid(aPid) {} + friend QuestionerId MyQuestionerId(); + + /// OS process ID of the asking kid. If the kid restarts, it is assumed + /// not to wrap back to the old value until the answer is received. + pid_t pid = -1; +}; + +/// the questioner ID of the current/calling process +QuestionerId MyQuestionerId(); + +/// Convenience wrapper for rejecting (freshly parsed) stale answers. +/// All answers are assumed to have a "QuestionerId intendedRecepient()" member. +template +const Answer & +Mine(const Answer &answer) +{ + answer.intendedRecepient().rejectAnswerIfStale(); + return answer; +} + +inline std::ostream & +operator <<(std::ostream &os, const QuestionerId &qid) +{ + qid.print(os); + return os; +} + +} // namespace Ipc; + +#endif /* SQUID_SRC_IPC_QUESTIONERID_H */ + diff -u -r -N squid-5.0.5/src/ipc/Request.h squid-5.0.6/src/ipc/Request.h --- squid-5.0.5/src/ipc/Request.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/Request.h 2021-05-10 21:02:34.000000000 +1200 @@ -12,31 +12,41 @@ #define SQUID_IPC_REQUEST_H #include "base/RefCount.h" -#include "ipc/forward.h" +#include "base/TypeTraits.h" +#include "ipc/RequestId.h" namespace Ipc { +// TODO: Request and Response ought to have their own un/pack() methods instead +// of duplicating their functionality in derived classes. To avoid dependency +// loops between libipc and libmgr/libsnmp, fixing that requires extracting +// src/ipc/Coordinator and its friends into a new src/coordinator/ library. + /// IPC request -class Request: public RefCountable +class Request: public RefCountable, public Interface { public: typedef RefCount Pointer; public: - Request(int aRequestorId, unsigned int aRequestId): - requestorId(aRequestorId), requestId(aRequestId) {} - virtual void pack(TypedMsgHdr& msg) const = 0; ///< prepare for sendmsg() virtual Pointer clone() const = 0; ///< returns a copy of this -private: - Request(const Request&); // not implemented - Request& operator= (const Request&); // not implemented - public: - int requestorId; ///< kidId of the requestor; used for response destination - unsigned int requestId; ///< unique for sender; matches request w/ response + int requestorId = 0; ///< kidId of the requestor; used for response destination + RequestId requestId; ///< matches the request[or] with the response + +protected: + /// sender's constructor + Request(const int aRequestorId, const RequestId aRequestId): + requestorId(aRequestorId), + requestId(aRequestId) + { + } + + /// recipient's constructor + Request() = default; }; } // namespace Ipc diff -u -r -N squid-5.0.5/src/ipc/RequestId.cc squid-5.0.6/src/ipc/RequestId.cc --- squid-5.0.5/src/ipc/RequestId.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/ipc/RequestId.cc 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,28 @@ +/* + * Copyright (C) 1996-2020 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +#include "squid.h" +#include "base/TextException.h" +#include "Debug.h" +#include "ipc/RequestId.h" + +#include + +Ipc::RequestId::RequestId(const Index anIndex): + qid_(anIndex ? MyQuestionerId() : QuestionerId()), + index_(anIndex) +{ +} + +std::ostream & +Ipc::operator <<(std::ostream &os, const RequestId &requestId) +{ + os << requestId.index() << '@' << requestId.questioner(); + return os; +} + diff -u -r -N squid-5.0.5/src/ipc/RequestId.h squid-5.0.6/src/ipc/RequestId.h --- squid-5.0.5/src/ipc/RequestId.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/ipc/RequestId.h 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,64 @@ +/* + * Copyright (C) 1996-2020 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +#ifndef SQUID_IPC_REQUESTID_H +#define SQUID_IPC_REQUESTID_H + +#include "ipc/forward.h" +#include "ipc/QuestionerId.h" + +#include + +namespace Ipc +{ + +/// uniquely identifies an IPC request among same-type concurrent IPC requests +/// submitted by a single Squid instance +class RequestId +{ +public: + /// A simple ID for correlating IPC responses with pending requests. + /// Value 0 has a special meaning of "unset/unknown", but otherwise opaque. + typedef unsigned int Index; + + /// Request sender's constructor. + /// For performance and clarity sake, default constructor is preferred to 0 index. + explicit RequestId(Index); + + /// request recipient's constructor + RequestId() = default; + + /// Make the ID unset/unknown. + /// Optimization: leaves the questioner field alone. + void reset() { index_ = 0; } + + /// Make the ID set/known with the given (by the questioner) index. + /// For performance and clarity sake, reset(void) is preferred to reset(0). + void reset(const Index anIndex) { *this = RequestId(anIndex); } + + QuestionerId questioner() const { return qid_; } + Index index() const { return index_; } + + // these conversion operators allow our users to treat us as an Index + operator Index() const { return index_; } + RequestId &operator =(const Index anIndex) { anIndex ? reset(anIndex) : reset(); return *this; } + +private: + /// the sender of the request + QuestionerId qid_; + + /// request ID; unique within pending same-qid_ questions of the same kind + Index index_ = 0; +}; + +std::ostream &operator <<(std::ostream &, const RequestId &); + +} // namespace Ipc; + +#endif /* SQUID_IPC_REQUESTID_H */ + diff -u -r -N squid-5.0.5/src/ipc/Response.h squid-5.0.6/src/ipc/Response.h --- squid-5.0.5/src/ipc/Response.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/Response.h 2021-05-10 21:02:34.000000000 +1200 @@ -12,38 +12,36 @@ #define SQUID_IPC_RESPONSE_H #include "base/RefCount.h" +#include "base/TypeTraits.h" #include "ipc/forward.h" +#include "ipc/QuestionerId.h" namespace Ipc { /// A response to Ipc::Request. -class Response: public RefCountable +class Response: public RefCountable, public Interface { public: typedef RefCount Pointer; public: - explicit Response(unsigned int aRequestId): - requestId(aRequestId) {} - virtual void pack(TypedMsgHdr& msg) const = 0; ///< prepare for sendmsg() virtual Pointer clone() const = 0; ///< returns a copy of this -private: - Response(const Response&); // not implemented - Response& operator= (const Response&); // not implemented + /// for Mine() tests + QuestionerId intendedRecepient() const { return requestId.questioner(); } public: - unsigned int requestId; ///< ID of request we are responding to -}; + RequestId requestId; ///< the ID of the request we are responding to -inline -std::ostream& operator << (std::ostream &os, const Response& response) -{ - os << "[response.requestId %u]" << response.requestId << '}'; - return os; -} +protected: + /// sender's constructor + explicit Response(const RequestId aRequestId): requestId(aRequestId) {} + + /// recipient's constructor + Response() = default; +}; } // namespace Ipc diff -u -r -N squid-5.0.5/src/ipc/SharedListen.cc squid-5.0.6/src/ipc/SharedListen.cc --- squid-5.0.5/src/ipc/SharedListen.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/SharedListen.cc 2021-05-10 21:02:34.000000000 +1200 @@ -33,25 +33,26 @@ }; /// maps ID assigned at request time to the response callback -typedef std::map SharedListenRequestMap; +typedef std::map SharedListenRequestMap; static SharedListenRequestMap TheSharedListenRequestMap; /// accumulates delayed requests until they are ready to be sent, in FIFO order typedef std::list DelayedSharedListenRequests; static DelayedSharedListenRequests TheDelayedRequests; -static int +// TODO: Encapsulate "Pending Request Map" logic shared by all RequestId users. +/// registers the given request in the collection of pending requests +/// \returns the registration key +static Ipc::RequestId::Index AddToMap(const PendingOpenRequest &por) { - // find unused ID using linear seach; there should not be many entries - for (int id = 0; true; ++id) { - if (TheSharedListenRequestMap.find(id) == TheSharedListenRequestMap.end()) { - TheSharedListenRequestMap[id] = por; - return id; - } - } - assert(false); // not reached - return -1; + static Ipc::RequestId::Index LastIndex = 0; + // TODO: Switch Ipc::RequestId::Index to uint64_t and drop these 0 checks. + if (++LastIndex == 0) // don't use zero value as an ID + ++LastIndex; + assert(TheSharedListenRequestMap.find(LastIndex) == TheSharedListenRequestMap.end()); + TheSharedListenRequestMap[LastIndex] = por; + return LastIndex; } bool @@ -68,7 +69,10 @@ return addr.compareWhole(p.addr) < 0; } -Ipc::SharedListenRequest::SharedListenRequest(): requestorId(-1), mapId(-1) +Ipc::SharedListenRequest::SharedListenRequest(const OpenListenerParams &aParams, const RequestId aMapId): + requestorId(KidIdentifier), + params(aParams), + mapId(aMapId) { // caller will then set public data members } @@ -76,22 +80,25 @@ Ipc::SharedListenRequest::SharedListenRequest(const TypedMsgHdr &hdrMsg) { hdrMsg.checkType(mtSharedListenRequest); + // XXX: our handlerSubscription is not a POD! hdrMsg.getPod(*this); } void Ipc::SharedListenRequest::pack(TypedMsgHdr &hdrMsg) const { hdrMsg.setType(mtSharedListenRequest); + // XXX: our handlerSubscription is not a POD! hdrMsg.putPod(*this); } -Ipc::SharedListenResponse::SharedListenResponse(int aFd, int anErrNo, int aMapId): +Ipc::SharedListenResponse::SharedListenResponse(const int aFd, const int anErrNo, const RequestId aMapId): fd(aFd), errNo(anErrNo), mapId(aMapId) { } Ipc::SharedListenResponse::SharedListenResponse(const TypedMsgHdr &hdrMsg): - fd(-1), errNo(0), mapId(-1) + fd(-1), + errNo(0) { hdrMsg.checkType(mtSharedListenResponse); hdrMsg.getPod(*this); @@ -103,16 +110,14 @@ { hdrMsg.setType(mtSharedListenResponse); hdrMsg.putPod(*this); + // XXX: When we respond with an error, putFd() throws due to the negative fd hdrMsg.putFd(fd); } static void SendSharedListenRequest(const PendingOpenRequest &por) { - Ipc::SharedListenRequest request; - request.requestorId = KidIdentifier; - request.params = por.params; - request.mapId = AddToMap(por); + const Ipc::SharedListenRequest request(por.params, Ipc::RequestId(AddToMap(por))); debugs(54, 3, "getting listening FD for " << request.params.addr << " mapId=" << request.mapId); @@ -160,10 +165,12 @@ TheSharedListenRequestMap.size() << " active + " << TheDelayedRequests.size() << " delayed requests"); - Must(TheSharedListenRequestMap.find(response.mapId) != TheSharedListenRequestMap.end()); - PendingOpenRequest por = TheSharedListenRequestMap[response.mapId]; - Must(por.callback != NULL); - TheSharedListenRequestMap.erase(response.mapId); + Must(response.mapId); + const auto pori = TheSharedListenRequestMap.find(response.mapId.index()); + Must(pori != TheSharedListenRequestMap.end()); + auto por = pori->second; + Must(por.callback); + TheSharedListenRequestMap.erase(pori); StartListeningCb *cbd = dynamic_cast(por.callback->getDialer()); assert(cbd && cbd->conn != NULL); diff -u -r -N squid-5.0.5/src/ipc/SharedListen.h squid-5.0.6/src/ipc/SharedListen.h --- squid-5.0.5/src/ipc/SharedListen.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/SharedListen.h 2021-05-10 21:02:34.000000000 +1200 @@ -13,6 +13,8 @@ #include "base/AsyncCall.h" #include "base/Subscription.h" +#include "ipc/QuestionerId.h" +#include "ipc/RequestId.h" namespace Ipc { @@ -45,7 +47,7 @@ class SharedListenRequest { public: - SharedListenRequest(); ///< from OpenSharedListen() which then sets public data + SharedListenRequest(const OpenListenerParams &, RequestId aMapId); ///< sender's constructor explicit SharedListenRequest(const TypedMsgHdr &hdrMsg); ///< from recvmsg() void pack(TypedMsgHdr &hdrMsg) const; ///< prepare for sendmsg() @@ -54,21 +56,24 @@ OpenListenerParams params; ///< actual comm_open_sharedListen() parameters - int mapId; ///< to map future response to the requestor's callback + RequestId mapId; ///< to map future response to the requestor's callback }; /// a response to SharedListenRequest class SharedListenResponse { public: - SharedListenResponse(int fd, int errNo, int mapId); + SharedListenResponse(int fd, int errNo, RequestId aMapId); ///< sender's constructor explicit SharedListenResponse(const TypedMsgHdr &hdrMsg); ///< from recvmsg() void pack(TypedMsgHdr &hdrMsg) const; ///< prepare for sendmsg() + /// for Mine() tests + QuestionerId intendedRecepient() const { return mapId.questioner(); } + public: int fd; ///< opened listening socket or -1 int errNo; ///< errno value from comm_open_sharedListen() call - int mapId; ///< to map future response to the requestor's callback + RequestId mapId; ///< to map future response to the requestor's callback }; /// prepare and send SharedListenRequest to Coordinator diff -u -r -N squid-5.0.5/src/ipc/Strand.cc squid-5.0.6/src/ipc/Strand.cc --- squid-5.0.5/src/ipc/Strand.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/Strand.cc 2021-05-10 21:02:34.000000000 +1200 @@ -18,6 +18,7 @@ #include "globals.h" #include "ipc/Kids.h" #include "ipc/Messages.h" +#include "ipc/QuestionerId.h" #include "ipc/SharedListen.h" #include "ipc/Strand.h" #include "ipc/StrandCoord.h" @@ -53,29 +54,25 @@ debugs(54, 6, HERE); Must(!isRegistered); - HereIamMessage ann(StrandCoord(KidIdentifier, getpid())); - TypedMsgHdr message; - ann.pack(message); - SendMessage(Port::CoordinatorAddr(), message); + StrandMessage::NotifyCoordinator(mtRegisterStrand, nullptr); setTimeout(6, "Ipc::Strand::timeoutHandler"); // TODO: make 6 configurable? } void Ipc::Strand::receive(const TypedMsgHdr &message) { - debugs(54, 6, HERE << message.type()); - switch (message.type()) { + switch (message.rawType()) { - case mtRegistration: - handleRegistrationResponse(HereIamMessage(message)); + case mtStrandRegistered: + handleRegistrationResponse(Mine(StrandMessage(message))); break; case mtSharedListenResponse: - SharedListenJoined(SharedListenResponse(message)); + SharedListenJoined(Mine(SharedListenResponse(message))); break; #if HAVE_DISKIO_MODULE_IPCIO - case mtStrandSearchResponse: - IpcIoFile::HandleOpenResponse(StrandSearchResponse(message)); + case mtStrandReady: + IpcIoFile::HandleOpenResponse(Mine(StrandMessage(message))); break; case mtIpcIoNotification: @@ -91,7 +88,7 @@ case mtCacheMgrResponse: { const Mgr::Response resp(message); - handleCacheMgrResponse(resp); + handleCacheMgrResponse(Mine(resp)); } break; @@ -108,18 +105,19 @@ case mtSnmpResponse: { const Snmp::Response resp(message); - handleSnmpResponse(resp); + handleSnmpResponse(Mine(resp)); } break; #endif default: - debugs(54, DBG_IMPORTANT, HERE << "Unhandled message type: " << message.type()); + Port::receive(message); break; } } -void Ipc::Strand::handleRegistrationResponse(const HereIamMessage &msg) +void +Ipc::Strand::handleRegistrationResponse(const StrandMessage &msg) { // handle registration response from the coordinator; it could be stale if (msg.strand.kidId == KidIdentifier && msg.strand.pid == getpid()) { diff -u -r -N squid-5.0.5/src/ipc/StrandCoord.cc squid-5.0.6/src/ipc/StrandCoord.cc --- squid-5.0.5/src/ipc/StrandCoord.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/StrandCoord.cc 2021-05-10 21:02:34.000000000 +1200 @@ -10,7 +10,8 @@ #include "squid.h" #include "Debug.h" -#include "ipc/Messages.h" +#include "globals.h" +#include "ipc/Port.h" #include "ipc/StrandCoord.h" #include "ipc/TypedMsgHdr.h" @@ -37,20 +38,35 @@ hdrMsg.putString(tag); } -Ipc::HereIamMessage::HereIamMessage(const StrandCoord &aStrand): - strand(aStrand) +Ipc::StrandMessage::StrandMessage(const StrandCoord &aStrand, const QuestionerId aQid): + strand(aStrand), + qid(aQid) { } -Ipc::HereIamMessage::HereIamMessage(const TypedMsgHdr &hdrMsg) +Ipc::StrandMessage::StrandMessage(const TypedMsgHdr &hdrMsg) { - hdrMsg.checkType(mtRegistration); strand.unpack(hdrMsg); + qid.unpack(hdrMsg); } -void Ipc::HereIamMessage::pack(TypedMsgHdr &hdrMsg) const +void +Ipc::StrandMessage::pack(const MessageType messageType, TypedMsgHdr &hdrMsg) const { - hdrMsg.setType(mtRegistration); + hdrMsg.setType(messageType); strand.pack(hdrMsg); + qid.pack(hdrMsg); +} + +void +Ipc::StrandMessage::NotifyCoordinator(const MessageType msgType, const char *tag) +{ + static const auto pid = getpid(); + StrandMessage message(StrandCoord(KidIdentifier, pid), MyQuestionerId()); + if (tag) + message.strand.tag = tag; + TypedMsgHdr hdr; + message.pack(msgType, hdr); + SendMessage(Port::CoordinatorAddr(), hdr); } diff -u -r -N squid-5.0.5/src/ipc/StrandCoord.h squid-5.0.6/src/ipc/StrandCoord.h --- squid-5.0.5/src/ipc/StrandCoord.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/StrandCoord.h 2021-05-10 21:02:34.000000000 +1200 @@ -10,6 +10,8 @@ #define SQUID_IPC_STRAND_COORD_H #include "ipc/forward.h" +#include "ipc/Messages.h" +#include "ipc/QuestionerId.h" #include "SquidString.h" namespace Ipc @@ -32,16 +34,26 @@ String tag; ///< optional unique well-known key (e.g., cache_dir path) }; -/// strand registration with Coordinator (also used as an ACK) -class HereIamMessage +/// an IPC message carrying StrandCoord +class StrandMessage { public: - explicit HereIamMessage(const StrandCoord &strand); ///< from registrant - explicit HereIamMessage(const TypedMsgHdr &hdrMsg); ///< from recvmsg() - void pack(TypedMsgHdr &hdrMsg) const; ///< prepare for sendmsg() + explicit StrandMessage(const StrandCoord &, QuestionerId); + explicit StrandMessage(const TypedMsgHdr &); + void pack(MessageType, TypedMsgHdr &) const; + + /// creates and sends StrandMessage to Coordinator + static void NotifyCoordinator(MessageType, const char *tag); + + /// for Mine() tests + QuestionerId intendedRecepient() const { return qid; } public: - StrandCoord strand; ///< registrant coordinates and related details + StrandCoord strand; ///< messageType-specific coordinates (e.g., sender) + + /// For IPC requests/questions: The sender of this request. + /// For IPC responses/answers: The sender of the corresponding request. + QuestionerId qid; }; } // namespace Ipc; diff -u -r -N squid-5.0.5/src/ipc/Strand.h squid-5.0.6/src/ipc/Strand.h --- squid-5.0.5/src/ipc/Strand.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/Strand.h 2021-05-10 21:02:34.000000000 +1200 @@ -39,7 +39,7 @@ private: void registerSelf(); /// let Coordinator know this strand exists - void handleRegistrationResponse(const HereIamMessage &msg); + void handleRegistrationResponse(const StrandMessage &); void handleCacheMgrRequest(const Mgr::Request& request); void handleCacheMgrResponse(const Mgr::Response& response); #if SQUID_SNMP diff -u -r -N squid-5.0.5/src/ipc/StrandSearch.cc squid-5.0.6/src/ipc/StrandSearch.cc --- squid-5.0.5/src/ipc/StrandSearch.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/StrandSearch.cc 2021-05-10 21:02:34.000000000 +1200 @@ -9,45 +9,32 @@ /* DEBUG: section 54 Interprocess Communication */ #include "squid.h" +#include "globals.h" #include "ipc/Messages.h" #include "ipc/StrandSearch.h" #include "ipc/TypedMsgHdr.h" -Ipc::StrandSearchRequest::StrandSearchRequest(): requestorId(-1) +Ipc::StrandSearchRequest::StrandSearchRequest(const String &aTag): + requestorId(KidIdentifier), + tag(aTag), + qid(MyQuestionerId()) { } Ipc::StrandSearchRequest::StrandSearchRequest(const TypedMsgHdr &hdrMsg): requestorId(-1) { - hdrMsg.checkType(mtStrandSearchRequest); + hdrMsg.checkType(mtFindStrand); hdrMsg.getPod(requestorId); hdrMsg.getString(tag); + qid.unpack(hdrMsg); } void Ipc::StrandSearchRequest::pack(TypedMsgHdr &hdrMsg) const { - hdrMsg.setType(mtStrandSearchRequest); + hdrMsg.setType(mtFindStrand); hdrMsg.putPod(requestorId); hdrMsg.putString(tag); -} - -/* StrandSearchResponse */ - -Ipc::StrandSearchResponse::StrandSearchResponse(const Ipc::StrandCoord &aStrand): - strand(aStrand) -{ -} - -Ipc::StrandSearchResponse::StrandSearchResponse(const TypedMsgHdr &hdrMsg) -{ - hdrMsg.checkType(mtStrandSearchResponse); - strand.unpack(hdrMsg); -} - -void Ipc::StrandSearchResponse::pack(TypedMsgHdr &hdrMsg) const -{ - hdrMsg.setType(mtStrandSearchResponse); - strand.pack(hdrMsg); + qid.pack(hdrMsg); } diff -u -r -N squid-5.0.5/src/ipc/StrandSearch.h squid-5.0.6/src/ipc/StrandSearch.h --- squid-5.0.5/src/ipc/StrandSearch.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/StrandSearch.h 2021-05-10 21:02:34.000000000 +1200 @@ -10,6 +10,7 @@ #define SQUID_IPC_STRAND_SEARCH_H #include "ipc/forward.h" +#include "ipc/QuestionerId.h" #include "ipc/StrandCoord.h" #include "SquidString.h" @@ -20,25 +21,14 @@ class StrandSearchRequest { public: - StrandSearchRequest(); + explicit StrandSearchRequest(const String &aTag); ///< sender's constructor explicit StrandSearchRequest(const TypedMsgHdr &hdrMsg); ///< from recvmsg() void pack(TypedMsgHdr &hdrMsg) const; ///< prepare for sendmsg() public: int requestorId; ///< sender-provided return address String tag; ///< set when looking for a matching StrandCoord::tag -}; - -/// asynchronous strand search response -class StrandSearchResponse -{ -public: - StrandSearchResponse(const StrandCoord &strand); - explicit StrandSearchResponse(const TypedMsgHdr &hdrMsg); ///< from recvmsg() - void pack(TypedMsgHdr &hdrMsg) const; ///< prepare for sendmsg() - -public: - StrandCoord strand; ///< answer matching StrandSearchRequest criteria + QuestionerId qid; ///< the sender of the request }; } // namespace Ipc; diff -u -r -N squid-5.0.5/src/ipc/TypedMsgHdr.cc squid-5.0.6/src/ipc/TypedMsgHdr.cc --- squid-5.0.5/src/ipc/TypedMsgHdr.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/TypedMsgHdr.cc 2021-05-10 21:02:34.000000000 +1200 @@ -81,13 +81,6 @@ offset = 0; } -int -Ipc::TypedMsgHdr::type() const -{ - Must(msg_iovlen == 1); - return data.type_; -} - void Ipc::TypedMsgHdr::address(const struct sockaddr_un& addr) { @@ -100,7 +93,7 @@ void Ipc::TypedMsgHdr::checkType(int destType) const { - Must(type() == destType); + Must(rawType() == destType); } void diff -u -r -N squid-5.0.5/src/ipc/TypedMsgHdr.h squid-5.0.6/src/ipc/TypedMsgHdr.h --- squid-5.0.5/src/ipc/TypedMsgHdr.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ipc/TypedMsgHdr.h 2021-05-10 21:02:34.000000000 +1200 @@ -12,6 +12,7 @@ #define SQUID_IPC_TYPED_MSG_HDR_H #include "compat/cmsg.h" +#include "ipc/Messages.h" #if HAVE_SYS_SOCKET_H #include #endif @@ -43,13 +44,13 @@ /* message type manipulation; these must be called before put/get*() */ void setType(int aType); ///< sets message type; use MessageType enum void checkType(int aType) const; ///< throws if stored type is not aType - int type() const; ///< returns stored type or zero if none - - /* access for Plain Old Data (POD)-based message parts */ - template - void getPod(Pod &pod) const { getFixed(&pod, sizeof(pod)); } ///< load POD - template - void putPod(const Pod &pod) { putFixed(&pod, sizeof(pod)); } ///< store POD + /// received or set message kind; may not be a MessageType value + /// \returns 0 if no message kind has been received or set + int rawType() const { return msg_iov ? data.type_ : 0; } + + /* access for TriviallyCopyable (a.k.a. Plain Old Data or POD) message parts */ + template void getPod(Pod &pod) const; ///< load POD + template void putPod(const Pod &pod); ///< store POD /* access to message parts for selected commonly-used part types */ void getString(String &s) const; ///< load variable-length string @@ -110,5 +111,23 @@ } // namespace Ipc +template +void +Ipc::TypedMsgHdr::getPod(Pod &pod) const +{ + // TODO: Enable after fixing Ipc::SharedListenRequest::SharedListenRequest() + //static_assert(std::is_trivially_copyable::value, "getPod() used for a POD"); + getFixed(&pod, sizeof(pod)); +} + +template +void +Ipc::TypedMsgHdr::putPod(const Pod &pod) +{ + // TODO: Enable after fixing Ipc::SharedListenRequest::pack() + //static_assert(std::is_trivially_copyable::value, "putPod() used for a POD"); + putFixed(&pod, sizeof(pod)); +} + #endif /* SQUID_IPC_TYPED_MSG_HDR_H */ diff -u -r -N squid-5.0.5/src/log/access_log.cc squid-5.0.6/src/log/access_log.cc --- squid-5.0.5/src/log/access_log.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/log/access_log.cc 2021-05-10 21:02:34.000000000 +1200 @@ -15,7 +15,7 @@ #include "adaptation/Config.h" #endif #include "CachePeer.h" -#include "err_detail_type.h" +#include "error/Detail.h" #include "errorpage.h" #include "format/Token.h" #include "globals.h" diff -u -r -N squid-5.0.5/src/log/DB/log_db_daemon.8 squid-5.0.6/src/log/DB/log_db_daemon.8 --- squid-5.0.5/src/log/DB/log_db_daemon.8 2021-02-08 13:46:40.000000000 +1300 +++ squid-5.0.6/src/log/DB/log_db_daemon.8 2021-05-10 23:02:24.000000000 +1200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "LOG_DB_DAEMON 8" -.TH LOG_DB_DAEMON 8 "2021-02-08" "perl v5.32.0" "User Contributed Perl Documentation" +.TH LOG_DB_DAEMON 8 "2021-05-10" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -u -r -N squid-5.0.5/src/log/forward.h squid-5.0.6/src/log/forward.h --- squid-5.0.5/src/log/forward.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/log/forward.h 2021-05-10 21:02:34.000000000 +1200 @@ -14,5 +14,8 @@ class AccessLogEntry; typedef RefCount AccessLogEntryPointer; +class LogTags; +class LogTagsErrors; + #endif /* SQUID_FORMAT_FORWARD_H */ diff -u -r -N squid-5.0.5/src/log/Makefile.am squid-5.0.6/src/log/Makefile.am --- squid-5.0.5/src/log/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/log/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -15,21 +15,20 @@ noinst_LTLIBRARIES = liblog.la liblog_la_SOURCES = \ - access_log.h \ - access_log.cc \ Config.cc \ Config.h \ + CustomLog.cc \ + CustomLog.h \ File.cc \ File.h \ FormatHttpdCombined.cc \ FormatHttpdCommon.cc \ - Formats.h \ FormatSquidCustom.cc \ FormatSquidIcap.cc \ FormatSquidNative.cc \ FormatSquidReferer.cc \ FormatSquidUseragent.cc \ - forward.h \ + Formats.h \ ModDaemon.cc \ ModDaemon.h \ ModStdio.cc \ @@ -38,8 +37,9 @@ ModSyslog.h \ ModUdp.cc \ ModUdp.h \ - CustomLog.h \ - CustomLog.cc \ TcpLogger.cc \ - TcpLogger.h + TcpLogger.h \ + access_log.cc \ + access_log.h \ + forward.h diff -u -r -N squid-5.0.5/src/log/Makefile.in squid-5.0.6/src/log/Makefile.in --- squid-5.0.5/src/log/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/log/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -164,11 +164,11 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liblog_la_LIBADD = -am_liblog_la_OBJECTS = access_log.lo Config.lo File.lo \ +am_liblog_la_OBJECTS = Config.lo CustomLog.lo File.lo \ FormatHttpdCombined.lo FormatHttpdCommon.lo \ FormatSquidCustom.lo FormatSquidIcap.lo FormatSquidNative.lo \ FormatSquidReferer.lo FormatSquidUseragent.lo ModDaemon.lo \ - ModStdio.lo ModSyslog.lo ModUdp.lo CustomLog.lo TcpLogger.lo + ModStdio.lo ModSyslog.lo ModUdp.lo TcpLogger.lo access_log.lo liblog_la_OBJECTS = $(am_liblog_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -785,21 +785,20 @@ EXTRA_DIST = helpers.m4 noinst_LTLIBRARIES = liblog.la liblog_la_SOURCES = \ - access_log.h \ - access_log.cc \ Config.cc \ Config.h \ + CustomLog.cc \ + CustomLog.h \ File.cc \ File.h \ FormatHttpdCombined.cc \ FormatHttpdCommon.cc \ - Formats.h \ FormatSquidCustom.cc \ FormatSquidIcap.cc \ FormatSquidNative.cc \ FormatSquidReferer.cc \ FormatSquidUseragent.cc \ - forward.h \ + Formats.h \ ModDaemon.cc \ ModDaemon.h \ ModStdio.cc \ @@ -808,10 +807,11 @@ ModSyslog.h \ ModUdp.cc \ ModUdp.h \ - CustomLog.h \ - CustomLog.cc \ TcpLogger.cc \ - TcpLogger.h + TcpLogger.h \ + access_log.cc \ + access_log.h \ + forward.h all: all-recursive diff -u -r -N squid-5.0.5/src/LogTags.cc squid-5.0.6/src/LogTags.cc --- squid-5.0.5/src/LogTags.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/LogTags.cc 2021-05-10 21:02:34.000000000 +1200 @@ -10,6 +10,16 @@ #include "Debug.h" #include "LogTags.h" +void +LogTagsErrors::update(const LogTagsErrors &other) +{ + ignored = ignored || other.ignored; + timedout = timedout || other.timedout; + aborted = aborted || other.aborted; +} + +/* LogTags */ + // old deprecated tag strings const char * LogTags::Str_[] = { "TAG_NONE", diff -u -r -N squid-5.0.5/src/LogTags.h squid-5.0.6/src/LogTags.h --- squid-5.0.5/src/LogTags.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/LogTags.h 2021-05-10 21:02:34.000000000 +1200 @@ -11,6 +11,21 @@ #include "CollapsingHistory.h" +/// Things that may happen to a transaction while it is being +/// processed according to its LOG_* category. Logged as _SUFFIX(es). +/// Unlike LOG_* categories, these flags may not be mutually exclusive. +class LogTagsErrors +{ +public: + /// Update each of this object flags to "set" if the corresponding + /// flag of the given object is set + void update(const LogTagsErrors &other); + + bool ignored = false; ///< _IGNORED: the response was not used for anything + bool timedout = false; ///< _TIMEDOUT: terminated due to a lifetime or I/O timeout + bool aborted = false; ///< _ABORTED: other abnormal termination (e.g., I/O error) +}; + /** Squid transaction result code/tag set. * * These codes indicate how the request was received @@ -62,17 +77,8 @@ /// determine if the log tag code indicates a cache HIT bool isTcpHit() const; - /// Things that may happen to a transaction while it is being - /// processed according to its LOG_* category. Logged as _SUFFIX(es). - /// Unlike LOG_* categories, these flags may not be mutually exclusive. - class Errors { - public: - Errors() : ignored(false), timedout(false), aborted(false) {} - - bool ignored; ///< _IGNORED: the response was not used for anything - bool timedout; ///< _TIMEDOUT: terminated due to a lifetime or I/O timeout - bool aborted; ///< _ABORTED: other abnormal termination (e.g., I/O error) - } err; + /// various problems augmenting the primary log tag + LogTagsErrors err; private: /// list of string representations for LogTags_ot diff -u -r -N squid-5.0.5/src/Makefile.am squid-5.0.6/src/Makefile.am --- squid-5.0.5/src/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -26,13 +26,13 @@ StoreMetaVary.h LOADABLE_MODULES_SOURCES = \ - LoadableModule.h \ LoadableModule.cc \ - LoadableModules.h \ - LoadableModules.cc + LoadableModule.h \ + LoadableModules.cc \ + LoadableModules.h -SUBDIRS = mem base anyp helper dns ftp parser comm eui acl format clients sbuf servers fs repl store DiskIO proxyp -DIST_SUBDIRS = mem base anyp helper dns ftp parser comm eui acl format clients sbuf servers fs repl store DiskIO proxyp +SUBDIRS = mem base anyp helper dns ftp parser comm error eui acl format clients sbuf servers fs repl store DiskIO proxyp +DIST_SUBDIRS = mem base anyp helper dns ftp parser comm error eui acl format clients sbuf servers fs repl store DiskIO proxyp if ENABLE_AUTH SUBDIRS += auth @@ -198,67 +198,58 @@ AM_CPPFLAGS += -I$(top_builddir)/src -ACL_REGISTRATION_SOURCES = AclRegs.cc AuthReg.cc +ACL_REGISTRATION_SOURCES = \ + AclRegs.cc \ + AuthReg.cc # common library for all the binaries and tests. This is kindof a catch all # and smaller libraries split from this are encouraged. Using lt convenience # libraries, dependencies should not be a problem either. libsquid_la_SOURCES = \ - comm.cc \ - comm.h \ CommCalls.cc \ CommCalls.h \ DescriptorSet.cc \ DescriptorSet.h \ + SquidConfig.cc \ SquidConfig.h \ - SquidConfig.cc + comm.cc \ + comm.h squid_SOURCES = \ $(ACL_REGISTRATION_SOURCES) \ + $(DELAY_POOL_SOURCE) \ + $(DNSSOURCE) \ + $(HTCPSOURCE) \ + $(IPC_SOURCE) \ + $(LEAKFINDERSOURCE) \ + $(SNMP_SOURCE) \ + $(STOREMETA_SOURCE) \ + $(UNLINKDSOURCE) \ + $(WIN32_SOURCE) \ + $(WINSVC_SOURCE) \ + $(XPROF_STATS_SOURCE) \ AccessLogEntry.cc \ AccessLogEntry.h \ AsyncEngine.cc \ AsyncEngine.h \ - cache_cf.h \ AuthReg.h \ - RefreshPattern.h \ - cache_cf.cc \ - CacheDigest.h \ + BodyPipe.cc \ + BodyPipe.h \ CacheDigest.cc \ - cache_manager.cc \ - NeighborTypeDomainList.h \ + CacheDigest.h \ + CacheManager.h \ CachePeer.cc \ CachePeer.h \ - CacheManager.h \ - carp.h \ - carp.cc \ - cbdata.cc \ - cbdata.h \ - client_db.h \ - client_db.cc \ - client_side.h \ - client_side.cc \ - client_side.h \ - client_side_reply.cc \ - client_side_reply.h \ - client_side_request.cc \ - client_side_request.h \ - ClientInfo.h \ - BodyPipe.cc \ - BodyPipe.h \ ClientInfo.h \ ClientRequestContext.h \ - clientStream.cc \ - clientStream.h \ - clientStreamForward.h \ CollapsedForwarding.cc \ CollapsedForwarding.h \ CollapsingHistory.h \ + CommRead.h \ CommandLine.cc \ CommandLine.h \ CompletionDispatcher.cc \ CompletionDispatcher.h \ - CommRead.h \ ConfigOption.cc \ ConfigParser.cc \ ConfigParser.h \ @@ -268,249 +259,256 @@ CpuAffinityMap.h \ CpuAffinitySet.cc \ CpuAffinitySet.h \ - debug.cc \ Debug.h \ - defines.h \ - $(DELAY_POOL_SOURCE) \ - fs_io.h \ - fs_io.cc \ - dlink.h \ - dlink.cc \ - $(DNSSOURCE) \ Downloader.cc \ Downloader.h \ - enums.h \ - err_type.h \ - err_detail_type.h \ - errorpage.cc \ - errorpage.h \ ETag.cc \ ETag.h \ - event.cc \ - event.h \ - EventLoop.h \ EventLoop.cc \ - external_acl.cc \ + EventLoop.h \ ExternalACL.h \ ExternalACLEntry.cc \ ExternalACLEntry.h \ - FadingCounter.h \ FadingCounter.cc \ - fatal.h \ - fatal.cc \ - fd.h \ - fd.cc \ - fde.cc \ - fde.h \ + FadingCounter.h \ FileMap.h \ - filemap.cc \ - fqdncache.h \ - fqdncache.cc \ FwdState.cc \ FwdState.h \ Generic.h \ - globals.h \ - gopher.h \ - gopher.cc \ HappyConnOpener.cc \ HappyConnOpener.h \ - helper.cc \ - helper.h \ - hier_code.h \ HierarchyLogEntry.h \ - $(HTCPSOURCE) \ - HttpUpgradeProtocolAccess.cc \ - HttpUpgradeProtocolAccess.h \ - http.cc \ - http.h \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ + HttpBody.cc \ + HttpBody.h \ + HttpControlMsg.cc \ + HttpControlMsg.h \ HttpHdrCc.cc \ + HttpHdrCc.h \ + HttpHdrContRange.cc \ + HttpHdrContRange.h \ HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrSc.h \ HttpHdrScTarget.cc \ HttpHdrScTarget.h \ - HttpHdrContRange.cc \ - HttpHdrContRange.h \ - HttpHeaderStat.h \ - HttpHeader.h \ HttpHeader.cc \ + HttpHeader.h \ + HttpHeaderFieldInfo.h \ + HttpHeaderFieldStat.h \ HttpHeaderMask.h \ HttpHeaderRange.h \ - HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ + HttpHeaderStat.h \ HttpHeaderTools.cc \ - HttpBody.h \ - HttpBody.cc \ - HttpControlMsg.cc \ - HttpControlMsg.h \ + HttpHeaderTools.h \ HttpReply.cc \ HttpReply.h \ - RequestFlags.h \ - RequestFlags.cc \ HttpRequest.cc \ HttpRequest.h \ + HttpUpgradeProtocolAccess.cc \ + HttpUpgradeProtocolAccess.h \ ICP.h \ - icp_opcode.h \ - icp_v2.cc \ - icp_v3.cc \ - Instance.h \ Instance.cc \ - int.h \ - int.cc \ - internal.h \ - internal.cc \ - $(IPC_SOURCE) \ - ipcache.cc \ - ipcache.h \ - $(LEAKFINDERSOURCE) \ + Instance.h \ + IoStats.h \ LogTags.cc \ LogTags.h \ - lookup_t.h \ - main.cc \ MasterXaction.cc \ MasterXaction.h \ - mem_node.cc \ - mem_node.h \ MemBuf.cc \ MemObject.cc \ MemObject.h \ + MemStore.cc \ + MemStore.h \ MessageSizes.h \ - mime.h \ - mime.cc \ - mime_header.h \ - mime_header.cc \ - multicast.h \ - multicast.cc \ - neighbors.h \ - neighbors.cc \ - Notes.h \ + NeighborTypeDomainList.h \ Notes.cc \ + Notes.h \ Parsing.cc \ Parsing.h \ - $(XPROF_STATS_SOURCE) \ - pconn.cc \ - pconn.h \ PeerDigest.h \ - peer_digest.cc \ - peer_proxy_negotiate_auth.h \ - peer_proxy_negotiate_auth.cc \ - peer_select.cc \ - peer_sourcehash.h \ - peer_sourcehash.cc \ - peer_userhash.h \ - peer_userhash.cc \ - PeerPoolMgr.h \ PeerPoolMgr.cc \ + PeerPoolMgr.h \ PeerSelectState.h \ PingData.h \ Pipeline.cc \ Pipeline.h \ - protos.h \ - redirect.h \ - redirect.cc \ - refresh.h \ - refresh.cc \ + RefreshPattern.h \ RemovalPolicy.cc \ RemovalPolicy.h \ + RequestFlags.cc \ + RequestFlags.h \ ResolvedPeers.cc \ ResolvedPeers.h \ - send-announce.h \ - send-announce.cc \ - SBufStatsAction.h \ SBufStatsAction.cc \ - sbuf/StringConvert.h \ - $(SNMP_SOURCE) \ - SquidMath.h \ + SBufStatsAction.h \ SquidMath.cc \ + SquidMath.h \ SquidNew.cc \ - IoStats.h \ - stat.h \ - stat.cc \ - StatCounters.h \ StatCounters.cc \ - StatHist.h \ + StatCounters.h \ StatHist.cc \ - String.cc \ - StrList.h \ - StrList.cc \ - stmem.cc \ - stmem.h \ - repl_modules.h \ - store.cc \ + StatHist.h \ Store.h \ + StoreClient.h \ StoreFileSystem.cc \ StoreFileSystem.h \ - store_io.cc \ StoreIOBuffer.h \ StoreIOState.cc \ StoreIOState.h \ - store_client.cc \ - StoreClient.h \ - store_digest.h \ - store_digest.cc \ - store_key_md5.h \ - store_key_md5.cc \ - store_log.h \ - store_log.cc \ - store_rebuild.h \ - store_rebuild.cc \ - store_swapin.h \ - store_swapin.cc \ - store_swapmeta.cc \ - store_swapout.cc \ StoreMetaUnpacker.cc \ StoreMetaUnpacker.h \ - $(STOREMETA_SOURCE) \ StoreSearch.h \ StoreStats.cc \ StoreStats.h \ StoreSwapLogData.cc \ StoreSwapLogData.h \ - swap_log_op.h \ + StrList.cc \ + StrList.h \ + String.cc \ + TimeOrTag.h \ Transients.cc \ Transients.h \ - MemStore.cc \ - MemStore.h \ + XactionInitiator.cc \ + XactionInitiator.h \ + XactionStep.h \ + cache_cf.cc \ + cache_cf.h \ + cache_manager.cc \ + carp.cc \ + carp.h \ + cbdata.cc \ + cbdata.h \ + clientStream.cc \ + clientStream.h \ + clientStreamForward.h \ + client_db.cc \ + client_db.h \ + client_side.cc \ + client_side.h \ + client_side_reply.cc \ + client_side_reply.h \ + client_side_request.cc \ + client_side_request.h \ + debug.cc \ + defines.h \ + dlink.cc \ + dlink.h \ + enums.h \ + errorpage.cc \ + errorpage.h \ + event.cc \ + event.h \ + external_acl.cc \ + fatal.cc \ + fatal.h \ + fd.cc \ + fd.h \ + fde.cc \ + fde.h \ + filemap.cc \ + fqdncache.cc \ + fqdncache.h \ + fs_io.cc \ + fs_io.h \ + globals.h \ + gopher.cc \ + gopher.h \ + helper.cc \ + helper.h \ + hier_code.h \ + http.cc \ + http.h \ + icp_opcode.h \ + icp_v2.cc \ + icp_v3.cc \ + int.cc \ + int.h \ + internal.cc \ + internal.h \ + ipcache.cc \ + ipcache.h \ + lookup_t.h \ + main.cc \ + mem_node.cc \ + mem_node.h \ + mime.cc \ + mime.h \ + mime_header.cc \ + mime_header.h \ + multicast.cc \ + multicast.h \ + neighbors.cc \ + neighbors.h \ + pconn.cc \ + pconn.h \ + peer_digest.cc \ + peer_proxy_negotiate_auth.cc \ + peer_proxy_negotiate_auth.h \ + peer_select.cc \ + peer_sourcehash.cc \ + peer_sourcehash.h \ + peer_userhash.cc \ + peer_userhash.h \ + protos.h \ + redirect.cc \ + redirect.h \ + refresh.cc \ + refresh.h \ + repl_modules.h \ + sbuf/StringConvert.h \ + send-announce.cc \ + send-announce.h \ + stat.cc \ + stat.h \ + stmem.cc \ + stmem.h \ + store.cc \ + store_client.cc \ + store_digest.cc \ + store_digest.h \ + store_io.cc \ + store_key_md5.cc \ + store_key_md5.h \ + store_log.cc \ + store_log.h \ + store_rebuild.cc \ + store_rebuild.h \ + store_swapin.cc \ + store_swapin.h \ + store_swapmeta.cc \ + store_swapout.cc \ + swap_log_op.h \ time.cc \ - TimeOrTag.h \ - tools.h \ tools.cc \ + tools.h \ tunnel.cc \ typedefs.h \ - $(UNLINKDSOURCE) \ - urn.h \ urn.cc \ - wccp.h \ + urn.h \ wccp.cc \ - wccp2.h \ + wccp.h \ wccp2.cc \ - whois.h \ + wccp2.h \ whois.cc \ - wordlist.h \ + whois.h \ wordlist.cc \ - XactionInitiator.h \ - XactionInitiator.cc \ - XactionStep.h \ - $(WIN32_SOURCE) \ - $(WINSVC_SOURCE) + wordlist.h EXTRA_squid_SOURCES = \ + $(DELAY_POOL_ALL_SOURCE) \ + $(LOADABLE_MODULES_SOURCES) \ + $(SNMP_ALL_SOURCE) \ + $(UNLINKDSOURCE) \ + $(WIN32_ALL_SOURCE) \ $(all_AUTHMODULES) \ ConfigOption.h \ - $(DELAY_POOL_ALL_SOURCE) \ + LeakFinder.cc \ + LeakFinder.h \ + ProfStats.cc \ htcp.cc \ htcp.h \ ipc.cc \ - ipc_win32.cc \ - ProfStats.cc \ - LeakFinder.cc \ - LeakFinder.h \ - $(SNMP_ALL_SOURCE) \ - $(UNLINKDSOURCE) \ - $(WIN32_ALL_SOURCE) \ - $(LOADABLE_MODULES_SOURCES) + ipc_win32.cc noinst_HEADERS = \ MemBuf.h \ @@ -520,8 +518,6 @@ BUILT_SOURCES = \ cf_gen_defines.cci \ cf_parser.cci \ - err_type.cc \ - err_detail_type.cc \ globals.cc \ hier_code.cc \ icp_opcode.cc \ @@ -556,6 +552,7 @@ anyp/libanyp.la \ security/libsecurity.la \ $(SSL_LIBS) \ + error/liberror.la \ ipc/libipc.la \ mgr/libmgr.la \ proxyp/libproxyp.la \ @@ -626,32 +623,32 @@ ## libbase.la wants cbdata.* ## libbase.la wants MemBuf.* ufsdump_SOURCES = \ + $(WIN32_SOURCE) \ ClientInfo.h \ - cbdata.h \ - cbdata.cc \ - debug.cc \ - int.h \ - int.cc \ - mem/forward.h \ + tests/stub_HelperChildConfig.cc \ MemBuf.cc \ MemBuf.h \ Parsing.h \ - store_key_md5.h \ - store_key_md5.cc \ + RemovalPolicy.cc \ + SquidNew.cc \ tests/stub_StoreMeta.cc \ StoreMetaUnpacker.cc \ String.cc \ - SquidNew.cc \ - tests/stub_time.cc \ - ufsdump.cc \ - dlink.h \ + cbdata.cc \ + cbdata.h \ + debug.cc \ dlink.cc \ - helper/ChildConfig.h \ - tests/stub_HelperChildConfig.cc \ - RemovalPolicy.cc \ - $(WIN32_SOURCE) \ + dlink.h \ + tests/stub_fd.cc \ fd.h \ - tests/stub_fd.cc + helper/ChildConfig.h \ + int.cc \ + int.h \ + mem/forward.h \ + store_key_md5.cc \ + store_key_md5.h \ + tests/stub_time.cc \ + ufsdump.cc ufsdump_LDADD = \ ident/libident.la \ acl/libacls.la \ @@ -743,12 +740,6 @@ hier_code.cc: hier_code.h mk-string-arrays.awk $(AWK) -f $(srcdir)/mk-string-arrays.awk < $(srcdir)/hier_code.h > $@ || ($(RM) -f $@ && exit 1) -err_type.cc: err_type.h mk-string-arrays.awk - $(AWK) -f $(srcdir)/mk-string-arrays.awk < $(srcdir)/err_type.h > $@ || ($(RM) -f $@ && exit 1) - -err_detail_type.cc: err_detail_type.h mk-string-arrays.awk - $(AWK) -f $(srcdir)/mk-string-arrays.awk < $(srcdir)/err_detail_type.h | sed 's/ERR_DETAIL_//' > $@ || ($(RM) -f $@ && exit 1) - lookup_t.cc: lookup_t.h mk-string-arrays.awk $(AWK) -f $(srcdir)/mk-string-arrays.awk < $(srcdir)/lookup_t.h > $@ || ($(RM) -f $@ && exit 1) @@ -953,10 +944,10 @@ tests/testLookupTable.cc \ tests/testLookupTable.h nodist_tests_testLookupTable_SOURCES = \ + tests/stub_SBufDetailedStats.cc \ base/LookupTable.h \ tests/stub_debug.cc \ - tests/stub_libmem.cc \ - tests/stub_SBufDetailedStats.cc + tests/stub_libmem.cc tests_testLookupTable_LDADD = \ sbuf/libsbuf.la \ base/libbase.la \ @@ -982,9 +973,9 @@ tests/testYesNoNone.cc \ tests/testYesNoNone.h nodist_tests_testYesNoNone_SOURCES = \ + tests/stub_SBuf.cc \ base/YesNoNone.h \ - tests/stub_debug.cc \ - tests/stub_SBuf.cc + tests/stub_debug.cc tests_testYesNoNone_LDADD = \ base/libbase.la \ $(LIBCPPUNIT_LIBS) \ @@ -1001,18 +992,18 @@ tests/testUriScheme.cc \ tests/testUriScheme.h nodist_tests_testURL_SOURCES = \ - anyp/Uri.h \ - anyp/UriScheme.h \ + tests/stub_HelperChildConfig.cc \ + tests/stub_HttpHeader.cc \ + tests/stub_HttpRequest.cc \ + tests/stub_StatHist.cc \ String.cc \ tests/stub_access_log.cc \ + anyp/Uri.h \ + anyp/UriScheme.h \ tests/stub_cbdata.cc \ tests/stub_debug.cc \ - tests/stub_HelperChildConfig.cc \ - tests/stub_HttpHeader.cc \ - tests/stub_HttpRequest.cc \ tests/stub_libhttp.cc \ - tests/stub_libmem.cc \ - tests/stub_StatHist.cc + tests/stub_libmem.cc tests_testURL_LDADD = \ libsquid.la \ proxyp/libproxyp.la \ @@ -1048,10 +1039,10 @@ tests/testTokenizer.cc \ tests/testTokenizer.h nodist_tests_testTokenizer_SOURCES = \ - parser/Tokenizer.h \ + tests/stub_StatHist.cc \ tests/stub_debug.cc \ tests/stub_libmem.cc \ - tests/stub_StatHist.cc + parser/Tokenizer.h tests_testTokenizer_LDADD = \ parser/libparser.la \ sbuf/libsbuf.la \ @@ -1065,14 +1056,14 @@ check_PROGRAMS += tests/testSBuf tests_testSBuf_SOURCES = \ - tests/SBufFindTest.cc \ - tests/SBufFindTest.h \ tests/testSBuf.cc \ - tests/testSBuf.h + tests/testSBuf.h \ + tests/SBufFindTest.cc \ + tests/SBufFindTest.h nodist_tests_testSBuf_SOURCES = \ + tests/stub_StatHist.cc \ tests/stub_debug.cc \ - tests/stub_libmem.cc \ - tests/stub_StatHist.cc + tests/stub_libmem.cc tests_testSBuf_LDADD = \ sbuf/libsbuf.la \ base/libbase.la \ @@ -1086,9 +1077,9 @@ tests/testSBufList.cc \ tests/testSBufList.h nodist_tests_testSBufList_SOURCES = \ + tests/stub_StatHist.cc \ tests/stub_debug.cc \ - tests/stub_libmem.cc \ - tests/stub_StatHist.cc + tests/stub_libmem.cc tests_testSBufList_LDADD = \ sbuf/libsbuf.la \ base/libbase.la \ @@ -1102,8 +1093,8 @@ tests/testString.cc \ tests/testString.h nodist_tests_testString_SOURCES = \ - String.cc \ tests/stub_SBuf.cc \ + String.cc \ tests/stub_debug.cc \ tests/stub_libmem.cc tests_testString_LDADD = \ @@ -1118,132 +1109,133 @@ if ENABLE_FS_ROCK check_PROGRAMS += tests/testRock tests_testRock_SOURCES = \ + $(DELAY_POOL_SOURCE) \ + $(STOREMETA_SOURCE) \ + $(UNLINKDSOURCE) \ AccessLogEntry.cc \ AccessLogEntry.h \ - cbdata.cc \ + tests/stub_CacheDigest.cc \ CacheDigest.h \ - CollapsedForwarding.h \ CollapsedForwarding.cc \ - tests/stub_CacheDigest.cc \ + CollapsedForwarding.h \ ConfigOption.cc \ ConfigParser.cc \ - fs_io.h \ - fs_io.cc \ ETag.cc \ EventLoop.cc \ - event.cc \ FadingCounter.cc \ - fatal.h \ - fatal.cc \ - fd.h \ - fd.cc \ - fde.h \ - fde.cc \ FileMap.h \ - filemap.cc \ - HttpHeaderFieldStat.h \ - HttpBody.h \ + tests/stub_HelperChildConfig.cc \ HttpBody.cc \ + HttpBody.h \ HttpHdrCc.cc \ HttpHdrContRange.cc \ HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrScTarget.cc \ - HttpHeader.h \ HttpHeader.cc \ + HttpHeader.h \ HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ + HttpHeaderFieldStat.h \ HttpHeaderTools.cc \ + HttpHeaderTools.h \ HttpReply.cc \ - int.h \ - int.cc \ + tests/stub_HttpRequest.cc \ LogTags.cc \ MasterXaction.cc \ MasterXaction.h \ MemBuf.cc \ MemObject.cc \ MemStore.cc \ - mem_node.cc \ - Notes.h \ Notes.cc \ + Notes.h \ Parsing.cc \ + tests/stub_Port.cc \ RemovalPolicy.cc \ RequestFlags.cc \ RequestFlags.h \ ResolvedPeers.cc \ ResolvedPeers.h \ - StatCounters.h \ + tests/testRock.cc \ + tests/testRock.h \ + tests/stub_SBufDetailedStats.cc \ StatCounters.cc \ - StatHist.h \ + StatCounters.h \ tests/stub_StatHist.cc \ - stmem.cc \ - repl_modules.h \ - tests/stub_stat.cc \ - store.cc \ + StatHist.h \ StoreFileSystem.cc \ StoreIOState.cc \ StoreMetaUnpacker.cc \ - $(STOREMETA_SOURCE) \ + tests/testStoreSupport.cc \ + tests/testStoreSupport.h \ StoreSwapLogData.cc \ - store_io.cc \ - store_key_md5.h \ - store_key_md5.cc \ - store_swapmeta.cc \ - store_swapout.cc \ - tests/stub_SBufDetailedStats.cc \ - String.cc \ - StrList.h \ StrList.cc \ - Transients.h \ + StrList.h \ + String.cc \ Transients.cc \ - tests/testRock.cc \ - tests/testRock.h \ - tests/testStoreSupport.cc \ - tests/testStoreSupport.h \ - log/access_log.h \ + Transients.h \ tests/stub_access_log.cc \ - cache_cf.h \ tests/stub_cache_cf.cc \ + cache_cf.h \ tests/stub_cache_manager.cc \ + cbdata.cc \ tests/stub_client_db.cc \ tests/stub_client_side_request.cc \ tests/stub_debug.cc \ tests/stub_errorpage.cc \ - tests/stub_HelperChildConfig.cc \ + event.cc \ + fatal.cc \ + fatal.h \ + fd.cc \ + fd.h \ + fde.cc \ + fde.h \ + filemap.cc \ + fs_io.cc \ + fs_io.h \ tests/stub_http.cc \ - tests/stub_HttpRequest.cc \ - tests/stub_libauth.cc \ tests/stub_icp.cc \ + int.cc \ + int.h \ tests/stub_ipc.cc \ tests/stub_ipcache.cc \ + tests/stub_libanyp.cc \ + tests/stub_libauth.cc \ + tests/stub_liberror.cc \ tests/stub_libeui.cc \ tests/stub_libformat.cc \ tests/stub_libicmp.cc \ tests/stub_liblog.cc \ tests/stub_libmgr.cc \ tests/stub_libsecurity.cc \ - mime.h \ + log/access_log.h \ + mem_node.cc \ tests/stub_mime.cc \ + mime.h \ tests/stub_neighbors.cc \ - tests/stub_Port.cc \ tests/stub_pconn.cc \ + repl_modules.h \ + tests/stub_stat.cc \ + stmem.cc \ + store.cc \ tests/stub_store_client.cc \ - store_rebuild.h \ + store_io.cc \ + store_key_md5.cc \ + store_key_md5.h \ tests/stub_store_rebuild.cc \ + store_rebuild.h \ tests/stub_store_stats.cc \ - tools.h \ - tests/stub_tools.cc \ + store_swapmeta.cc \ + store_swapout.cc \ time.cc \ - tests/stub_libanyp.cc \ - wordlist.h \ + tests/stub_tools.cc \ + tools.h \ wordlist.cc \ - $(DELAY_POOL_SOURCE) \ - $(UNLINKDSOURCE) + wordlist.h nodist_tests_testRock_SOURCES = \ $(TESTSOURCES) \ - hier_code.cc \ SquidMath.cc \ SquidMath.h \ + hier_code.cc \ swap_log_op.cc tests_testRock_LDADD = \ http/libhttp.la \ @@ -1288,138 +1280,139 @@ if ENABLE_FS_UFS check_PROGRAMS += tests/testUfs tests_testUfs_SOURCES = \ + $(DELAY_POOL_SOURCE) \ + $(STOREMETA_SOURCE) \ + $(UNLINKDSOURCE) \ + $(WIN32_SOURCE) \ AccessLogEntry.cc \ AccessLogEntry.h \ - tests/testUfs.cc \ - tests/testUfs.h \ - tests/stub_cache_manager.cc \ - tests/stub_client_db.cc \ + tests/stub_CacheDigest.cc \ + CacheDigest.h \ + ClientInfo.h \ tests/stub_CollapsedForwarding.cc \ - tests/stub_HelperChildConfig.cc \ - tests/stub_icp.cc \ - tests/stub_ipc.cc \ - tests/stub_ipcache.cc \ - tests/stub_libeui.cc \ - tests/stub_libicmp.cc \ - tests/stub_liblog.cc \ - tests/stub_neighbors.cc \ - tests/stub_pconn.cc \ - tests/stub_Port.cc \ - tests/stub_UdsOp.cc \ - internal.h \ - tests/stub_internal.cc \ - tests/stub_libformat.cc \ - tests/stub_libsecurity.cc \ - tests/stub_stat.cc \ - store_rebuild.h \ - tests/stub_store_rebuild.cc \ - tests/stub_store_stats.cc \ - fatal.h \ - tests/stub_fatal.cc \ - fd.h \ - fd.cc \ - fde.h \ - fde.cc \ - client_db.h \ + ConfigOption.cc \ + ConfigParser.cc \ + ETag.cc \ + EventLoop.cc \ FadingCounter.cc \ - fs_io.h \ - fs_io.cc \ FileMap.h \ - filemap.cc \ - HttpBody.h \ + tests/stub_HelperChildConfig.cc \ HttpBody.cc \ + HttpBody.h \ + HttpHdrCc.cc \ + HttpHdrCc.h \ + HttpHdrContRange.cc \ + HttpHdrRange.cc \ + HttpHdrSc.cc \ + HttpHdrScTarget.cc \ + HttpHeader.cc \ + HttpHeader.h \ + HttpHeaderFieldInfo.h \ + HttpHeaderFieldStat.h \ + HttpHeaderTools.cc \ + HttpHeaderTools.h \ HttpReply.cc \ - int.h \ - int.cc \ + tests/stub_HttpRequest.cc \ LogTags.cc \ - RequestFlags.h \ - RequestFlags.cc \ - Transients.cc \ MasterXaction.cc \ MasterXaction.h \ + MemBuf.cc \ MemObject.cc \ MemStore.cc \ - Notes.h \ Notes.cc \ - StoreSwapLogData.cc \ + Notes.h \ + Parsing.cc \ + tests/stub_Port.cc \ + RemovalPolicy.cc \ + RequestFlags.cc \ + RequestFlags.h \ + tests/stub_SBufDetailedStats.cc \ + StatCounters.cc \ + StatCounters.h \ + StatHist.cc \ + StatHist.h \ + StoreFileSystem.cc \ StoreIOState.cc \ StoreMetaUnpacker.cc \ - $(STOREMETA_SOURCE) \ - StoreFileSystem.cc \ - store_io.cc \ - store_swapout.cc \ - store_swapmeta.cc \ - $(UNLINKDSOURCE) \ - $(WIN32_SOURCE) \ - event.cc \ - $(DELAY_POOL_SOURCE) \ - CacheDigest.h \ - tests/stub_CacheDigest.cc \ - ConfigParser.cc \ - EventLoop.cc \ - RemovalPolicy.cc \ - repl_modules.h \ - store.cc \ - store_key_md5.h \ - store_key_md5.cc \ - Parsing.cc \ - ConfigOption.cc \ + tests/testStoreSupport.cc \ + tests/testStoreSupport.h \ + StoreSwapLogData.cc \ + StrList.cc \ + StrList.h \ + String.cc \ + Transients.cc \ + tests/stub_UdsOp.cc \ + tests/testUfs.cc \ + tests/testUfs.h \ + tests/stub_access_log.cc \ tests/stub_acl.cc \ - cache_cf.h \ tests/stub_cache_cf.cc \ - tests/stub_helper.cc \ + cache_cf.h \ + tests/stub_cache_manager.cc \ cbdata.cc \ - tests/stub_SBufDetailedStats.cc \ - String.cc \ - tests/stub_debug.cc \ + tests/stub_client_db.cc \ + client_db.h \ tests/stub_client_side_request.cc \ + tests/stub_debug.cc \ + tests/stub_errorpage.cc \ + event.cc \ + tests/stub_fatal.cc \ + fatal.h \ + fd.cc \ + fd.h \ + fde.cc \ + fde.h \ + filemap.cc \ + fs_io.cc \ + fs_io.h \ + tests/stub_helper.cc \ tests/stub_http.cc \ + tests/stub_icp.cc \ + int.cc \ + int.h \ + tests/stub_internal.cc \ + internal.h \ + tests/stub_ipc.cc \ + tests/stub_ipcache.cc \ + tests/stub_libanyp.cc \ tests/stub_libauth.cc \ + tests/stub_liberror.cc \ + tests/stub_libeui.cc \ + tests/stub_libformat.cc \ + tests/stub_libicmp.cc \ + tests/stub_liblog.cc \ + tests/stub_libsecurity.cc \ + log/access_log.h \ mem_node.cc \ - stmem.cc \ - mime.h \ tests/stub_mime.cc \ - HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ - HttpHeaderTools.cc \ - HttpHeader.h \ - HttpHeader.cc \ - ClientInfo.h \ - MemBuf.cc \ - HttpHdrContRange.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ - HttpHdrCc.cc \ - HttpHdrSc.cc \ - HttpHdrScTarget.cc \ - tests/stub_libanyp.cc \ - StatCounters.h \ - StatCounters.cc \ - StatHist.h \ - StatHist.cc \ - StrList.h \ - StrList.cc \ - HttpHdrRange.cc \ - ETag.cc \ - tests/stub_errorpage.cc \ - tests/stub_HttpRequest.cc \ - log/access_log.h \ - tests/stub_access_log.cc \ - refresh.h \ + mime.h \ + tests/stub_neighbors.cc \ + tests/stub_pconn.cc \ refresh.cc \ + refresh.h \ + repl_modules.h \ + tests/stub_stat.cc \ + stmem.cc \ + store.cc \ tests/stub_store_client.cc \ - tools.h \ - tests/stub_tools.cc \ - tests/testStoreSupport.cc \ - tests/testStoreSupport.h \ + store_io.cc \ + store_key_md5.cc \ + store_key_md5.h \ + tests/stub_store_rebuild.cc \ + store_rebuild.h \ + tests/stub_store_stats.cc \ + store_swapmeta.cc \ + store_swapout.cc \ time.cc \ - wordlist.h \ - wordlist.cc + tests/stub_tools.cc \ + tools.h \ + wordlist.cc \ + wordlist.h nodist_tests_testUfs_SOURCES = \ $(TESTSOURCES) \ - hier_code.cc \ SquidMath.cc \ SquidMath.h \ + hier_code.cc \ swap_log_op.cc tests_testUfs_LDADD = \ http/libhttp.la \ @@ -1469,133 +1462,134 @@ check_PROGRAMS += tests/testStore ## why so many sources? well httpHeaderTools requites ACLChecklist & friends. ## first line - what we are testing. -tests_testStore_SOURCES= \ - CacheDigest.h \ +tests_testStore_SOURCES = \ + $(DELAY_POOL_SOURCE) \ tests/stub_CacheDigest.cc \ - cbdata.cc \ + CacheDigest.h \ ClientInfo.h \ tests/stub_CollapsedForwarding.cc \ ConfigOption.cc \ ConfigParser.cc \ - $(DELAY_POOL_SOURCE) \ - fs_io.h \ - fs_io.cc \ ETag.cc \ - event.cc \ EventLoop.cc \ - fatal.h \ - tests/stub_fatal.cc \ FileMap.h \ - filemap.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ + tests/stub_HelperChildConfig.cc \ + HttpBody.cc \ + HttpBody.h \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrScTarget.cc \ + HttpHeader.cc \ + HttpHeader.h \ HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ + HttpHeaderFieldStat.h \ HttpHeaderTools.cc \ - HttpHeader.h \ - HttpHeader.cc \ - RequestFlags.cc \ - RequestFlags.h \ - int.h \ - int.cc \ + HttpHeaderTools.h \ + tests/stub_HttpReply.cc \ + tests/stub_HttpRequest.cc \ MasterXaction.cc \ MasterXaction.h \ - mem_node.cc \ MemBuf.cc \ MemObject.cc \ MemStore.cc \ - Notes.h \ Notes.cc \ + Notes.h \ + tests/testPackableStream.cc \ + tests/testPackableStream.h \ Parsing.cc \ + tests/stub_Port.cc \ RemovalPolicy.cc \ - refresh.h \ - refresh.cc \ - StatCounters.h \ + RequestFlags.cc \ + RequestFlags.h \ + tests/stub_SBufDetailedStats.cc \ StatCounters.cc \ - StatHist.h \ + StatCounters.h \ StatHist.cc \ - stmem.cc \ - repl_modules.h \ - store.cc \ - store_io.cc \ - store_swapout.cc \ + StatHist.h \ + tests/testStore.cc \ + tests/testStore.h \ + tests/testStoreController.cc \ + tests/testStoreController.h \ + tests/testStoreHashIndex.cc \ + tests/testStoreHashIndex.h \ StoreIOState.cc \ tests/stub_StoreMeta.cc \ StoreMetaUnpacker.cc \ + tests/testStoreSupport.cc \ + tests/testStoreSupport.h \ StoreSwapLogData.cc \ - store_key_md5.h \ - store_key_md5.cc \ - tests/stub_SBufDetailedStats.cc \ - String.cc \ - StrList.h \ StrList.cc \ - tests/CapturingStoreEntry.h \ - log/access_log.h \ + StrList.h \ + String.cc \ + Transients.cc \ + tests/stub_UdsOp.cc \ tests/stub_access_log.cc \ tests/stub_acl.cc \ - cache_cf.h \ tests/stub_cache_cf.cc \ + cache_cf.h \ tests/stub_cache_manager.cc \ + cbdata.cc \ tests/stub_client_side_request.cc \ tests/stub_comm.cc \ tests/stub_debug.cc \ tests/stub_errorpage.cc \ + event.cc \ + tests/stub_fatal.cc \ + fatal.h \ + tests/stub_fd.cc \ fd.h \ fde.h \ - tests/stub_fd.cc \ + filemap.cc \ + fs_io.cc \ + fs_io.h \ tests/stub_helper.cc \ - tests/stub_HelperChildConfig.cc \ tests/stub_http.cc \ + int.cc \ + int.h \ + tests/stub_libanyp.cc \ tests/stub_libauth.cc \ - tests/stub_libeui.cc \ + tests/stub_libcomm.cc \ tests/stub_libdiskio.cc \ + tests/stub_liberror.cc \ + tests/stub_libeui.cc \ tests/stub_libformat.cc \ tests/stub_libsecurity.cc \ tests/stub_libsslsquid.cc \ - HttpBody.h \ - HttpBody.cc \ - tests/stub_HttpReply.cc \ - tests/stub_HttpRequest.cc \ - tests/stub_libcomm.cc \ - mime.h \ + log/access_log.h \ + mem_node.cc \ tests/stub_mime.cc \ - tests/stub_Port.cc \ + mime.h \ + refresh.cc \ + refresh.h \ + repl_modules.h \ tests/stub_stat.cc \ + stmem.cc \ + store.cc \ tests/stub_store_client.cc \ - tests/stub_store_stats.cc \ - store_rebuild.h \ + store_io.cc \ + store_key_md5.cc \ + store_key_md5.h \ tests/stub_store_rebuild.cc \ + store_rebuild.h \ + tests/stub_store_stats.cc \ + store_swapout.cc \ tests/stub_store_swapout.cc \ - tools.h \ - Transients.cc \ - tests/stub_tools.cc \ - tests/stub_UdsOp.cc \ - tests/testPackableStream.cc \ - tests/testPackableStream.h \ - tests/testStore.cc \ - tests/testStore.h \ - tests/testStoreController.cc \ - tests/testStoreController.h \ - tests/testStoreHashIndex.cc \ - tests/testStoreHashIndex.h \ - tests/testStoreSupport.cc \ - tests/testStoreSupport.h \ + tests/CapturingStoreEntry.h \ tests/TestSwapDir.cc \ tests/TestSwapDir.h \ tests/stub_time.cc \ - tests/stub_libanyp.cc \ - wordlist.h \ - wordlist.cc -nodist_tests_testStore_SOURCES= \ + tests/stub_tools.cc \ + tools.h \ + wordlist.cc \ + wordlist.h +nodist_tests_testStore_SOURCES = \ + $(TESTSOURCES) \ SquidMath.cc \ SquidMath.h \ - swap_log_op.cc \ - $(TESTSOURCES) + swap_log_op.cc tests_testStore_LDADD= \ libsquid.la \ http/libhttp.la \ @@ -1631,143 +1625,144 @@ check_PROGRAMS += tests/testDiskIO tests_testDiskIO_SOURCES = \ + $(DELAY_POOL_SOURCE) \ + $(UNLINKDSOURCE) \ + $(WIN32_SOURCE) \ AccessLogEntry.cc \ AccessLogEntry.h \ - CacheDigest.h \ tests/stub_CacheDigest.cc \ - cbdata.cc \ - client_db.h \ + CacheDigest.h \ ClientInfo.h \ tests/stub_CollapsedForwarding.cc \ ConfigOption.cc \ ConfigParser.cc \ - $(DELAY_POOL_SOURCE) \ - FadingCounter.cc \ - fs_io.h \ - fs_io.cc \ + tests/testDiskIO.cc \ + tests/testDiskIO.h \ tests/stub_ETag.cc \ EventLoop.cc \ - event.cc \ - fatal.h \ - tests/stub_fatal.cc \ - fd.h \ - fd.cc \ - fde.h \ - fde.cc \ + FadingCounter.cc \ FileMap.h \ - filemap.cc \ - HttpBody.h \ + tests/stub_HelperChildConfig.cc \ HttpBody.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ + HttpBody.h \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ + HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrScTarget.cc \ - HttpHdrRange.cc \ + HttpHeader.cc \ + HttpHeader.h \ HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ + HttpHeaderFieldStat.h \ HttpHeaderTools.cc \ - HttpHeader.h \ - HttpHeader.cc \ + HttpHeaderTools.h \ HttpReply.cc \ - int.h \ - int.cc \ + tests/stub_HttpRequest.cc \ LogTags.cc \ MasterXaction.cc \ MasterXaction.h \ MemBuf.cc \ MemObject.cc \ - mem_node.cc \ - Notes.h \ + tests/stub_MemStore.cc \ Notes.cc \ + Notes.h \ Parsing.cc \ - refresh.h \ - refresh.cc \ + tests/stub_Port.cc \ RemovalPolicy.cc \ - RequestFlags.h \ RequestFlags.cc \ + RequestFlags.h \ ResolvedPeers.cc \ ResolvedPeers.h \ - tests/stub_libsecurity.cc \ - StatCounters.h \ + tests/stub_SBufDetailedStats.cc \ StatCounters.cc \ - StatHist.h \ + StatCounters.h \ tests/stub_StatHist.cc \ - stmem.cc \ - tests/stub_SBufDetailedStats.cc \ + StatHist.h \ StoreFileSystem.cc \ StoreIOState.cc \ tests/stub_StoreMeta.cc \ StoreMetaUnpacker.cc \ + tests/testStoreSupport.cc \ + tests/testStoreSupport.h \ StoreSwapLogData.cc \ - store_io.cc \ - store_key_md5.h \ - store_key_md5.cc \ - store_swapout.cc \ - store_swapmeta.cc \ - repl_modules.h \ - store.cc \ - String.cc \ - StrList.h \ StrList.cc \ - tests/stub_libstore.cc \ + StrList.h \ + String.cc \ Transients.cc \ - log/access_log.h \ + tests/stub_UdsOp.cc \ tests/stub_access_log.cc \ tests/stub_acl.cc \ - cache_cf.h \ tests/stub_cache_cf.cc \ + cache_cf.h \ tests/stub_cache_manager.cc \ + cbdata.cc \ tests/stub_client_db.cc \ - client_side_request.h \ + client_db.h \ tests/stub_client_side_request.cc \ + client_side_request.h \ tests/stub_debug.cc \ tests/stub_errorpage.cc \ + event.cc \ + tests/stub_fatal.cc \ + fatal.h \ + fd.cc \ + fd.h \ + fde.cc \ + fde.h \ + filemap.cc \ + fs_io.cc \ + fs_io.h \ tests/stub_helper.cc \ - tests/stub_HelperChildConfig.cc \ - tests/stub_HttpRequest.cc \ tests/stub_http.cc \ tests/stub_icp.cc \ - internal.h \ + int.cc \ + int.h \ tests/stub_internal.cc \ + internal.h \ tests/stub_ipc.cc \ tests/stub_ipcache.cc \ - tests/stub_libauth_acls.cc \ + tests/stub_libanyp.cc \ tests/stub_libauth.cc \ + tests/stub_libauth_acls.cc \ + tests/stub_liberror.cc \ tests/stub_libeui.cc \ tests/stub_libformat.cc \ tests/stub_libicmp.cc \ tests/stub_liblog.cc \ - tests/stub_MemStore.cc \ - mime.h \ + tests/stub_libsecurity.cc \ + tests/stub_libstore.cc \ + log/access_log.h \ + mem_node.cc \ tests/stub_mime.cc \ + mime.h \ tests/stub_neighbors.cc \ tests/stub_pconn.cc \ - tests/stub_Port.cc \ + refresh.cc \ + refresh.h \ + repl_modules.h \ tests/stub_stat.cc \ + stmem.cc \ + store.cc \ tests/stub_store_client.cc \ - tests/stub_store_stats.cc \ - store_rebuild.h \ + store_io.cc \ + store_key_md5.cc \ + store_key_md5.h \ tests/stub_store_rebuild.cc \ - tests/stub_UdsOp.cc \ - tests/testDiskIO.cc \ - tests/testDiskIO.h \ - tests/testStoreSupport.cc \ - tests/testStoreSupport.h \ + store_rebuild.h \ + tests/stub_store_stats.cc \ + store_swapmeta.cc \ + store_swapout.cc \ tests/stub_time.cc \ - $(UNLINKDSOURCE) \ - tests/stub_libanyp.cc \ - $(WIN32_SOURCE) \ - wordlist.h \ - wordlist.cc \ + tests/stub_tools.cc \ tools.h \ - tests/stub_tools.cc -nodist_tests_testDiskIO_SOURCES= \ + wordlist.cc \ + wordlist.h +nodist_tests_testDiskIO_SOURCES = \ $(TESTSOURCES) \ - hier_code.cc \ SquidMath.cc \ SquidMath.h \ + hier_code.cc \ swap_log_op.cc tests_testDiskIO_LDADD = \ libsquid.la \ @@ -1815,26 +1810,26 @@ tests/testACLMaxUserIP.h nodist_tests_testACLMaxUserIP_SOURCES = \ ConfigParser.cc \ - dlink.cc \ - globals.cc \ + tests/stub_HelperChildConfig.cc \ + tests/stub_HttpHeader.cc \ + tests/stub_HttpRequest.cc \ + tests/stub_MemBuf.cc \ Parsing.cc \ + tests/stub_StatHist.cc \ String.cc \ tests/stub_access_log.cc \ tests/stub_cache_cf.cc \ tests/stub_cbdata.cc \ tests/stub_client_side.cc \ tests/stub_debug.cc \ + dlink.cc \ tests/stub_errorpage.cc \ tests/stub_fatal.cc \ - tests/stub_HelperChildConfig.cc \ - tests/stub_HttpHeader.cc \ - tests/stub_HttpRequest.cc \ + globals.cc \ tests/stub_libauth.cc \ tests/stub_libhttp.cc \ tests/stub_libmem.cc \ - tests/stub_libsecurity.cc \ - tests/stub_MemBuf.cc \ - tests/stub_StatHist.cc + tests/stub_libsecurity.cc tests_testACLMaxUserIP_LDADD = \ $(AUTH_ACL_LIBS) \ acl/libapi.la \ @@ -1860,26 +1855,21 @@ check_PROGRAMS += tests/test_http_range tests_test_http_range_SOURCES = \ + $(DELAY_POOL_SOURCE) \ + $(DNSSOURCE) \ + $(HTCPSOURCE) \ + $(IPC_SOURCE) \ + $(SNMP_SOURCE) \ + $(UNLINKDSOURCE) \ + $(WIN32_SOURCE) \ AccessLogEntry.cc \ - BodyPipe.cc \ - cache_cf.h \ AuthReg.h \ - RefreshPattern.h \ + BodyPipe.cc \ + tests/stub_CacheDigest.cc \ + CacheDigest.h \ CachePeer.cc \ CachePeer.h \ - cache_manager.cc \ - CacheDigest.h \ - tests/stub_CacheDigest.cc \ - carp.h \ - tests/stub_carp.cc \ - cbdata.cc \ - tests/stub_client_db.cc \ - client_side.h \ - client_side.cc \ - client_side_reply.cc \ - client_side_request.cc \ ClientInfo.h \ - clientStream.cc \ tests/stub_CollapsedForwarding.cc \ ConfigOption.cc \ ConfigParser.cc \ @@ -1887,166 +1877,172 @@ CpuAffinityMap.h \ CpuAffinitySet.cc \ CpuAffinitySet.h \ - debug.cc \ - $(DELAY_POOL_SOURCE) \ - fs_io.h \ - fs_io.cc \ - dlink.h \ - dlink.cc \ - $(DNSSOURCE) \ - errorpage.cc \ tests/stub_ETag.cc \ - event.cc \ + tests/stub_EventLoop.cc \ FadingCounter.cc \ - fatal.h \ - tests/stub_libauth.cc \ - tests/stub_fatal.cc \ - fd.h \ - fd.cc \ - fde.cc \ FileMap.h \ - filemap.cc \ - fqdncache.h \ - fqdncache.cc \ FwdState.cc \ FwdState.h \ - gopher.h \ - tests/stub_gopher.cc \ HappyConnOpener.cc \ HappyConnOpener.h \ - helper.cc \ - hier_code.h \ - $(HTCPSOURCE) \ - http.cc \ - HttpBody.h \ HttpBody.cc \ + HttpBody.h \ tests/stub_HttpControlMsg.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrScTarget.cc \ - HttpHeader.h \ HttpHeader.cc \ + HttpHeader.h \ HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ + HttpHeaderFieldStat.h \ HttpHeaderTools.cc \ + HttpHeaderTools.h \ HttpReply.cc \ - PeerPoolMgr.h \ - PeerPoolMgr.cc \ - RequestFlags.h \ - RequestFlags.cc \ HttpRequest.cc \ - icp_v2.cc \ - icp_v3.cc \ - int.h \ - int.cc \ - internal.h \ - internal.cc \ - $(IPC_SOURCE) \ - ipcache.cc \ + tests/stub_HttpUpgradeProtocolAccess.cc \ + IoStats.h \ LogTags.cc \ MasterXaction.cc \ MasterXaction.h \ MemBuf.cc \ MemObject.cc \ - tests/stub_libmem.cc \ - mem_node.cc \ - mime.h \ - mime.cc \ - mime_header.h \ - mime_header.cc \ - multicast.h \ - multicast.cc \ - neighbors.h \ - neighbors.cc \ + tests/stub_MemStore.cc \ Notes.cc \ Notes.h \ Parsing.cc \ - peer_digest.cc \ - peer_proxy_negotiate_auth.h \ - peer_proxy_negotiate_auth.cc \ - peer_select.cc \ - peer_sourcehash.h \ - peer_sourcehash.cc \ - peer_userhash.h \ - peer_userhash.cc \ + PeerPoolMgr.cc \ + PeerPoolMgr.h \ Pipeline.cc \ Pipeline.h \ - pconn.cc \ - redirect.h \ - tests/stub_redirect.cc \ - refresh.h \ - refresh.cc \ + RefreshPattern.h \ RemovalPolicy.cc \ + RequestFlags.cc \ + RequestFlags.h \ ResolvedPeers.cc \ ResolvedPeers.h \ tests/stub_SBufDetailedStats.cc \ - $(SNMP_SOURCE) \ - SquidMath.h \ SquidMath.cc \ - IoStats.h \ - stat.h \ - stat.cc \ - StatCounters.h \ + SquidMath.h \ StatCounters.cc \ - StatHist.h \ + StatCounters.h \ StatHist.cc \ - stmem.cc \ - repl_modules.h \ - store.cc \ - store_client.cc \ - store_digest.h \ - tests/stub_store_digest.cc \ - store_key_md5.h \ - store_key_md5.cc \ - store_io.cc \ - store_log.h \ - store_log.cc \ - store_rebuild.h \ - store_rebuild.cc \ - store_swapin.h \ - store_swapin.cc \ - store_swapmeta.cc \ - store_swapout.cc \ + StatHist.h \ StoreFileSystem.cc \ StoreIOState.cc \ tests/stub_StoreMeta.cc \ StoreMetaUnpacker.cc \ StoreSwapLogData.cc \ - String.cc \ - StrList.h \ StrList.cc \ - tests/stub_libstore.cc \ + StrList.h \ + String.cc \ Transients.cc \ tests/test_http_range.cc \ tests/stub_cache_cf.cc \ + cache_cf.h \ + cache_manager.cc \ + tests/stub_carp.cc \ + carp.h \ + cbdata.cc \ + clientStream.cc \ + tests/stub_client_db.cc \ + client_side.cc \ + client_side.h \ + client_side_reply.cc \ + client_side_request.cc \ + debug.cc \ + dlink.cc \ + dlink.h \ + errorpage.cc \ + event.cc \ tests/stub_external_acl.cc \ - tests/stub_HttpUpgradeProtocolAccess.cc \ + tests/stub_fatal.cc \ + fatal.h \ + fd.cc \ + fd.h \ + fde.cc \ + filemap.cc \ + fqdncache.cc \ + fqdncache.h \ + fs_io.cc \ + fs_io.h \ + tests/stub_gopher.cc \ + gopher.h \ + helper.cc \ + hier_code.h \ + http.cc \ + icp_v2.cc \ + icp_v3.cc \ + int.cc \ + int.h \ + internal.cc \ + internal.h \ tests/stub_ipc_Forwarder.cc \ + ipcache.cc \ + tests/stub_libauth.cc \ tests/stub_libdiskio.cc \ + tests/stub_liberror.cc \ tests/stub_libeui.cc \ + tests/stub_libmem.cc \ tests/stub_libsecurity.cc \ + tests/stub_libstore.cc \ tests/stub_main_cc.cc \ - tests/stub_MemStore.cc \ + mem_node.cc \ + mime.cc \ + mime.h \ + mime_header.cc \ + mime_header.h \ + multicast.cc \ + multicast.h \ + neighbors.cc \ + neighbors.h \ + pconn.cc \ + peer_digest.cc \ + peer_proxy_negotiate_auth.cc \ + peer_proxy_negotiate_auth.h \ + peer_select.cc \ + peer_sourcehash.cc \ + peer_sourcehash.h \ + peer_userhash.cc \ + peer_userhash.h \ + tests/stub_redirect.cc \ + redirect.h \ + refresh.cc \ + refresh.h \ + repl_modules.h \ + stat.cc \ + stat.h \ + stmem.cc \ + store.cc \ + store_client.cc \ + tests/stub_store_digest.cc \ + store_digest.h \ + store_io.cc \ + store_key_md5.cc \ + store_key_md5.h \ + store_log.cc \ + store_log.h \ + store_rebuild.cc \ + store_rebuild.h \ tests/stub_store_stats.cc \ - tests/stub_EventLoop.cc \ + store_swapin.cc \ + store_swapin.h \ + store_swapmeta.cc \ + store_swapout.cc \ time.cc \ - tools.h \ tools.cc \ + tools.h \ tests/stub_tunnel.cc \ - $(UNLINKDSOURCE) \ - urn.h \ urn.cc \ - wccp2.h \ + urn.h \ tests/stub_wccp2.cc \ - whois.h \ + wccp2.h \ tests/stub_whois.cc \ - $(WIN32_SOURCE) \ - wordlist.h \ - wordlist.cc + whois.h \ + wordlist.cc \ + wordlist.h nodist_tests_test_http_range_SOURCES = \ $(BUILT_SOURCES) tests_test_http_range_LDADD = \ @@ -2089,6 +2085,7 @@ $(SSLLIB) \ $(KRB5LIBS) \ $(LIBCPPUNIT_LIBS) \ + $(SYSTEMD_LIBS) \ $(COMPAT_LIB) \ $(XTRA_LIBS) tests_test_http_range_LDFLAGS = $(LIBADD_DL) @@ -2096,34 +2093,34 @@ check_PROGRAMS += tests/testHttp1Parser tests_testHttp1Parser_SOURCES = \ Debug.h \ + tests/stub_HelperChildConfig.cc \ + tests/testHttp1Parser.cc \ + tests/testHttp1Parser.h \ MemBuf.cc \ MemBuf.h \ tests/stub_MemObject.cc \ - mime_header.cc \ - mime_header.h \ - String.cc \ - cache_cf.h \ tests/stub_SBufDetailedStats.cc \ + String.cc \ tests/stub_cache_cf.cc \ + cache_cf.h \ tests/stub_cache_manager.cc \ - tests/stub_comm.cc \ tests/stub_cbdata.cc \ + tests/stub_comm.cc \ tests/stub_debug.cc \ tests/stub_event.cc \ - tests/stub_HelperChildConfig.cc \ + tests/stub_libanyp.cc \ tests/stub_libmem.cc \ tests/stub_libsecurity.cc \ + mime_header.cc \ + mime_header.h \ tests/stub_stmem.cc \ tests/stub_store.cc \ tests/stub_store_stats.cc \ - tools.h \ - tests/stub_tools.cc \ - tests/testHttp1Parser.cc \ - tests/testHttp1Parser.h \ tests/stub_time.cc \ - tests/stub_libanyp.cc \ - wordlist.h \ - wordlist.cc + tests/stub_tools.cc \ + tools.h \ + wordlist.cc \ + wordlist.h nodist_tests_testHttp1Parser_SOURCES = \ $(TESTSOURCES) tests_testHttp1Parser_LDADD= \ @@ -2142,18 +2139,16 @@ tests_testHttp1Parser_LDFLAGS = $(LIBADD_DL) check_PROGRAMS += tests/testHttpReply -tests_testHttpReply_SOURCES=\ - cbdata.cc \ - cbdata.h \ +tests_testHttpReply_SOURCES = \ ConfigParser.cc \ tests/stub_ETag.cc \ - fatal.h \ - tests/stub_fatal.cc \ - HttpBody.h \ + tests/stub_HelperChildConfig.cc \ HttpBody.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ + HttpBody.h \ + HttpControlMsg.cc \ + HttpControlMsg.h \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ HttpHdrContRange.h \ HttpHdrRange.cc \ @@ -2161,64 +2156,67 @@ HttpHdrSc.h \ HttpHdrScTarget.cc \ HttpHdrScTarget.h \ - HttpHeader.h \ HttpHeader.cc \ - HttpHeaderMask.h \ + HttpHeader.h \ HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ + HttpHeaderFieldStat.h \ + HttpHeaderMask.h \ HttpHeaderTools.cc \ - HttpControlMsg.cc \ - HttpControlMsg.h \ + HttpHeaderTools.h \ HttpReply.cc \ + tests/testHttpReply.cc \ HttpReply.h \ + tests/testHttpReply.h \ + tests/stub_HttpRequest.cc \ MasterXaction.cc \ MasterXaction.h \ MemBuf.cc \ MemBuf.h \ - mime_header.h \ - mime_header.cc \ - Notes.h \ Notes.cc \ + Notes.h \ + tests/stub_SBufDetailedStats.cc \ SquidString.h \ SquidTime.h \ - tests/stub_SBufDetailedStats.cc \ - String.cc \ - StrList.h \ + StatCounters.cc \ + StatCounters.h \ + tests/stub_StatHist.cc \ + StatHist.h \ StrList.cc \ - log/access_log.h \ + StrList.h \ + String.cc \ tests/stub_access_log.cc \ - cache_cf.h \ tests/stub_cache_cf.cc \ + cache_cf.h \ tests/stub_cache_manager.cc \ + cbdata.cc \ + cbdata.h \ tests/stub_comm.cc \ tests/stub_debug.cc \ tests/stub_errorpage.cc \ tests/stub_event.cc \ + tests/stub_fatal.cc \ + fatal.h \ tests/stub_fd.cc \ - tests/stub_HelperChildConfig.cc \ - tests/stub_libformat.cc \ + tests/stub_libanyp.cc \ tests/stub_libauth.cc \ tests/stub_libcomm.cc \ + tests/stub_liberror.cc \ + tests/stub_libformat.cc \ tests/stub_libmgr.cc \ tests/stub_libsecurity.cc \ tests/stub_libsslsquid.cc \ - StatCounters.h \ - StatCounters.cc \ - StatHist.h \ - tests/stub_StatHist.cc \ + log/access_log.h \ + mime_header.cc \ + mime_header.h \ repl_modules.h \ tests/stub_store.cc \ tests/stub_store_stats.cc \ - tools.h \ - tests/stub_tools.cc \ - tests/stub_HttpRequest.cc \ - tests/testHttpReply.cc \ - tests/testHttpReply.h \ tests/stub_time.cc \ - tests/stub_libanyp.cc \ - wordlist.h \ - wordlist.cc -nodist_tests_testHttpReply_SOURCES=\ + tests/stub_tools.cc \ + tools.h \ + wordlist.cc \ + wordlist.h +nodist_tests_testHttpReply_SOURCES = \ $(TESTSOURCES) \ hier_code.cc tests_testHttpReply_LDADD=\ @@ -2246,44 +2244,20 @@ check_PROGRAMS += tests/testHttpRequest tests_testHttpRequest_SOURCES = \ + $(DELAY_POOL_SOURCE) \ + $(DNSSOURCE) \ + $(HTCPSOURCE) \ + $(IPC_SOURCE) \ + $(SNMP_SOURCE) \ + $(WIN32_SOURCE) \ AccessLogEntry.cc \ - RequestFlags.h \ - RequestFlags.cc \ - HttpRequest.cc \ - tests/stub_libmem.cc \ - String.cc \ - tests/testHttpRequest.h \ - tests/testHttpRequest.cc \ - tests/testHttpRequestMethod.h \ - tests/testHttpRequestMethod.cc \ - tests/stub_libauth.cc \ - tests/stub_main_cc.cc \ - tests/stub_ipc_Forwarder.cc \ - tests/stub_libdiskio.cc \ - tests/stub_libeui.cc \ - tests/stub_store_stats.cc \ - tests/stub_EventLoop.cc \ - time.cc \ - BodyPipe.cc \ - cache_manager.cc \ - cache_cf.h \ AuthReg.h \ - RefreshPattern.h \ - debug.cc \ - CacheDigest.h \ + BodyPipe.cc \ tests/stub_CacheDigest.cc \ + CacheDigest.h \ CachePeer.cc \ CachePeer.h \ - carp.h \ - tests/stub_carp.cc \ - cbdata.cc \ - tests/stub_client_db.cc \ - client_side.h \ - client_side.cc \ - client_side_reply.cc \ - client_side_request.cc \ ClientInfo.h \ - clientStream.cc \ tests/stub_CollapsedForwarding.cc \ ConfigOption.cc \ ConfigParser.cc \ @@ -2291,150 +2265,175 @@ CpuAffinityMap.h \ CpuAffinitySet.cc \ CpuAffinitySet.h \ - $(DELAY_POOL_SOURCE) \ - fs_io.h \ - fs_io.cc \ - dlink.h \ - dlink.cc \ - $(DNSSOURCE) \ - errorpage.cc \ tests/stub_ETag.cc \ - external_acl.cc \ + tests/stub_EventLoop.cc \ ExternalACLEntry.cc \ - fatal.h \ - tests/stub_fatal.cc \ - fd.h \ - fd.cc \ - fde.cc \ - fqdncache.h \ - fqdncache.cc \ + FadingCounter.cc \ FwdState.cc \ FwdState.h \ - gopher.h \ - tests/stub_gopher.cc \ HappyConnOpener.cc \ HappyConnOpener.h \ - helper.cc \ - hier_code.h \ - $(HTCPSOURCE) \ - http.cc \ - HttpBody.h \ HttpBody.cc \ + HttpBody.h \ tests/stub_HttpControlMsg.cc \ - HttpHeader.h \ - HttpHeader.cc \ - HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ - HttpHeaderTools.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrScTarget.cc \ + HttpHeader.cc \ + HttpHeader.h \ + HttpHeaderFieldInfo.h \ + HttpHeaderFieldStat.h \ + HttpHeaderTools.cc \ + HttpHeaderTools.h \ HttpReply.cc \ - icp_v2.cc \ - icp_v3.cc \ - $(IPC_SOURCE) \ - ipcache.cc \ - int.h \ - int.cc \ - internal.h \ - internal.cc \ + HttpRequest.cc \ + tests/testHttpRequest.cc \ + tests/testHttpRequest.h \ + tests/testHttpRequestMethod.cc \ + tests/testHttpRequestMethod.h \ + tests/stub_HttpUpgradeProtocolAccess.cc \ + IoStats.h \ LogTags.cc \ - tests/stub_libsecurity.cc \ MasterXaction.cc \ MasterXaction.h \ - multicast.h \ - multicast.cc \ - mem_node.cc \ MemBuf.cc \ MemObject.cc \ - mime.h \ - mime.cc \ - mime_header.h \ - mime_header.cc \ - neighbors.h \ - neighbors.cc \ + MemStore.cc \ Notes.cc \ Notes.h \ Parsing.cc \ - pconn.cc \ - peer_digest.cc \ - peer_proxy_negotiate_auth.h \ - peer_proxy_negotiate_auth.cc \ - peer_select.cc \ - peer_sourcehash.h \ - peer_sourcehash.cc \ - peer_userhash.h \ - peer_userhash.cc \ - PeerPoolMgr.h \ PeerPoolMgr.cc \ + PeerPoolMgr.h \ Pipeline.cc \ Pipeline.h \ - redirect.h \ - tests/stub_libauth_acls.cc \ - tests/stub_redirect.cc \ - refresh.h \ - refresh.cc \ + RefreshPattern.h \ RemovalPolicy.cc \ + RequestFlags.cc \ + RequestFlags.h \ ResolvedPeers.cc \ ResolvedPeers.h \ tests/stub_SBufDetailedStats.cc \ - $(SNMP_SOURCE) \ - SquidMath.h \ SquidMath.cc \ - IoStats.h \ - stat.h \ - stat.cc \ - StatCounters.h \ + SquidMath.h \ StatCounters.cc \ - StatHist.h \ + StatCounters.h \ StatHist.cc \ - stmem.cc \ + StatHist.h \ + StoreFileSystem.cc \ + StoreIOState.cc \ + tests/stub_StoreMeta.cc \ + StoreMetaUnpacker.cc \ + StoreSwapLogData.cc \ + StrList.cc \ + StrList.h \ + String.cc \ + Transients.cc \ + tests/stub_cache_cf.cc \ + cache_cf.h \ + cache_manager.cc \ + tests/stub_carp.cc \ + carp.h \ + cbdata.cc \ + clientStream.cc \ + tests/stub_client_db.cc \ + client_side.cc \ + client_side.h \ + client_side_reply.cc \ + client_side_request.cc \ + debug.cc \ + dlink.cc \ + dlink.h \ + errorpage.cc \ + event.cc \ + external_acl.cc \ + tests/stub_fatal.cc \ + fatal.h \ + fd.cc \ + fd.h \ + fde.cc \ + fqdncache.cc \ + fqdncache.h \ + fs_io.cc \ + fs_io.h \ + tests/stub_gopher.cc \ + gopher.h \ + helper.cc \ + hier_code.h \ + http.cc \ + icp_v2.cc \ + icp_v3.cc \ + int.cc \ + int.h \ + internal.cc \ + internal.h \ + tests/stub_ipc_Forwarder.cc \ + ipcache.cc \ + tests/stub_libauth.cc \ + tests/stub_libauth_acls.cc \ + tests/stub_libdiskio.cc \ + tests/stub_liberror.cc \ + tests/stub_libeui.cc \ + tests/stub_libmem.cc \ + tests/stub_libsecurity.cc \ + tests/stub_libstore.cc \ + tests/stub_main_cc.cc \ + mem_node.cc \ + mime.cc \ + mime.h \ + mime_header.cc \ + mime_header.h \ + multicast.cc \ + multicast.h \ + neighbors.cc \ + neighbors.h \ + pconn.cc \ + peer_digest.cc \ + peer_proxy_negotiate_auth.cc \ + peer_proxy_negotiate_auth.h \ + peer_select.cc \ + peer_sourcehash.cc \ + peer_sourcehash.h \ + peer_userhash.cc \ + peer_userhash.h \ + tests/stub_redirect.cc \ + redirect.h \ + refresh.cc \ + refresh.h \ repl_modules.h \ + stat.cc \ + stat.h \ + stmem.cc \ store.cc \ store_client.cc \ - store_digest.h \ tests/stub_store_digest.cc \ + store_digest.h \ store_io.cc \ - store_key_md5.h \ store_key_md5.cc \ - store_log.h \ + store_key_md5.h \ store_log.cc \ - store_rebuild.h \ + store_log.h \ store_rebuild.cc \ - store_swapin.h \ + store_rebuild.h \ + tests/stub_store_stats.cc \ store_swapin.cc \ + store_swapin.h \ store_swapmeta.cc \ store_swapout.cc \ - StoreFileSystem.cc \ - StoreIOState.cc \ - tests/stub_StoreMeta.cc \ - StoreMetaUnpacker.cc \ - StoreSwapLogData.cc \ - StrList.h \ - StrList.cc \ - event.cc \ - tools.h \ + time.cc \ tools.cc \ - Transients.cc \ - tests/stub_cache_cf.cc \ - tests/stub_HttpUpgradeProtocolAccess.cc \ + tools.h \ tests/stub_tunnel.cc \ - tests/stub_libstore.cc \ - MemStore.cc \ - urn.h \ urn.cc \ - wccp2.h \ + urn.h \ tests/stub_wccp2.cc \ - whois.h \ + wccp2.h \ tests/stub_whois.cc \ - FadingCounter.cc \ - $(WIN32_SOURCE) \ - wordlist.h \ - wordlist.cc + whois.h \ + wordlist.cc \ + wordlist.h nodist_tests_testHttpRequest_SOURCES = \ $(BUILT_SOURCES) tests_testHttpRequest_LDADD = \ @@ -2477,6 +2476,7 @@ $(SSLLIB) \ $(KRB5LIBS) \ $(LIBCPPUNIT_LIBS) \ + $(SYSTEMD_LIBS) \ $(COMPAT_LIB) \ $(XTRA_LIBS) tests_testHttpRequest_LDFLAGS = $(LIBADD_DL) @@ -2488,9 +2488,9 @@ tests/testIpAddress.cc \ tests/testIpAddress.h nodist_tests_testIpAddress_SOURCES = \ + tests/stub_SBuf.cc \ tests/stub_debug.cc \ tests/stub_libmem.cc \ - tests/stub_SBuf.cc \ tests/stub_tools.cc tests_testIpAddress_LDADD = \ ip/libip.la \ @@ -2505,16 +2505,16 @@ check_PROGRAMS += tests/testIcmp # icmp/libicmpcore.la is used by pinger so SHOULD NOT require more dependancies! :-( tests_testIcmp_SOURCES = \ - tests/testIcmp.h \ - tests/testIcmp.cc + tests/testIcmp.cc \ + tests/testIcmp.h nodist_tests_testIcmp_SOURCES = \ - icmp/Icmp.h \ + tests/stub_SBuf.cc \ SquidTime.h \ tests/stub_debug.cc \ + globals.cc \ + icmp/Icmp.h \ tests/stub_libmem.cc \ - tests/stub_SBuf.cc \ - time.cc \ - globals.cc + time.cc tests_testIcmp_LDADD=\ icmp/libicmpcore.la \ ip/libip.la \ @@ -2529,12 +2529,12 @@ tests/testNetDb.cc \ tests/testNetDb.h nodist_tests_testNetDb_SOURCES = \ + tests/stub_SBuf.cc \ SquidTime.h \ tests/stub_debug.cc \ + globals.cc \ tests/stub_libmem.cc \ - tests/stub_SBuf.cc \ - time.cc \ - globals.cc + time.cc tests_testNetDb_LDADD = \ icmp/libicmp.la \ ip/libip.la \ @@ -2549,39 +2549,23 @@ check_PROGRAMS += tests/testCacheManager tests_testCacheManager_SOURCES = \ + $(DELAY_POOL_SOURCE) \ + $(DNSSOURCE) \ + $(HTCPSOURCE) \ + $(IPC_SOURCE) \ + $(SNMP_SOURCE) \ + $(UNLINKDSOURCE) \ + $(WIN32_SOURCE) \ AccessLogEntry.cc \ - debug.cc \ - RequestFlags.h \ - RequestFlags.cc \ - HttpRequest.cc \ - String.cc \ + AuthReg.h \ + BodyPipe.cc \ + tests/stub_CacheDigest.cc \ + CacheDigest.h \ tests/testCacheManager.cc \ tests/testCacheManager.h \ - tests/stub_main_cc.cc \ - tests/stub_HttpControlMsg.cc \ - tests/stub_ipc_Forwarder.cc \ - tests/stub_store_stats.cc \ - tests/stub_EventLoop.cc \ - time.cc \ - BodyPipe.cc \ - cache_manager.cc \ - cache_cf.h \ - AuthReg.h \ - RefreshPattern.h \ CachePeer.cc \ CachePeer.h \ - CacheDigest.h \ - tests/stub_CacheDigest.cc \ - carp.h \ - tests/stub_carp.cc \ - cbdata.cc \ - tests/stub_client_db.cc \ - client_side.h \ - client_side.cc \ - client_side_reply.cc \ - client_side_request.cc \ ClientInfo.h \ - clientStream.cc \ tests/stub_CollapsedForwarding.cc \ ConfigOption.cc \ ConfigParser.cc \ @@ -2589,154 +2573,171 @@ CpuAffinityMap.h \ CpuAffinitySet.cc \ CpuAffinitySet.h \ - $(DELAY_POOL_SOURCE) \ - fs_io.h \ - fs_io.cc \ - dlink.h \ - dlink.cc \ - $(DNSSOURCE) \ - errorpage.cc \ tests/stub_ETag.cc \ - event.cc \ - external_acl.cc \ + tests/stub_EventLoop.cc \ ExternalACLEntry.cc \ - fatal.h \ - tests/stub_fatal.cc \ - fd.h \ - fd.cc \ - fde.cc \ + FadingCounter.cc \ FileMap.h \ - filemap.cc \ - fqdncache.h \ - fqdncache.cc \ FwdState.cc \ FwdState.h \ - gopher.h \ - tests/stub_gopher.cc \ HappyConnOpener.cc \ HappyConnOpener.h \ - hier_code.h \ - helper.cc \ - $(HTCPSOURCE) \ - http.cc \ - HttpBody.h \ HttpBody.cc \ - HttpHeader.h \ - HttpHeader.cc \ - HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ - HttpHeaderTools.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ + HttpBody.h \ + tests/stub_HttpControlMsg.cc \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrScTarget.cc \ + HttpHeader.cc \ + HttpHeader.h \ + HttpHeaderFieldInfo.h \ + HttpHeaderFieldStat.h \ + HttpHeaderTools.cc \ + HttpHeaderTools.h \ HttpReply.cc \ - icp_v2.cc \ - icp_v3.cc \ - $(IPC_SOURCE) \ - ipcache.cc \ - int.h \ - int.cc \ - internal.h \ - internal.cc \ + HttpRequest.cc \ + tests/stub_HttpUpgradeProtocolAccess.cc \ + IoStats.h \ LogTags.cc \ - tests/stub_libsecurity.cc \ MasterXaction.cc \ MasterXaction.h \ - multicast.h \ - multicast.cc \ - mem_node.cc \ MemBuf.cc \ MemObject.cc \ - mime.h \ - mime.cc \ - mime_header.h \ - mime_header.cc \ - neighbors.h \ - neighbors.cc \ + MemStore.cc \ Notes.cc \ Notes.h \ Parsing.cc \ - pconn.cc \ - peer_digest.cc \ - peer_proxy_negotiate_auth.h \ - peer_proxy_negotiate_auth.cc \ - peer_select.cc \ - peer_sourcehash.h \ - peer_sourcehash.cc \ - peer_userhash.h \ - peer_userhash.cc \ - PeerPoolMgr.h \ PeerPoolMgr.cc \ + PeerPoolMgr.h \ Pipeline.cc \ Pipeline.h \ - redirect.h \ - tests/stub_redirect.cc \ - refresh.h \ - refresh.cc \ + RefreshPattern.h \ RemovalPolicy.cc \ - ResolvedPeers.h \ + RequestFlags.cc \ + RequestFlags.h \ ResolvedPeers.cc \ + ResolvedPeers.h \ tests/stub_SBufDetailedStats.cc \ - $(SNMP_SOURCE) \ - SquidMath.h \ SquidMath.cc \ - IoStats.h \ - stat.h \ - stat.cc \ - StatCounters.h \ + SquidMath.h \ StatCounters.cc \ + StatCounters.h \ + tests/stub_StatHist.cc \ StatHist.h \ - StrList.h \ + StoreFileSystem.cc \ + StoreIOState.cc \ + tests/stub_StoreMeta.cc \ + StoreMetaUnpacker.cc \ + StoreSwapLogData.cc \ StrList.cc \ - tests/stub_libauth_acls.cc \ + StrList.h \ + String.cc \ + Transients.cc \ + tests/stub_cache_cf.cc \ + cache_cf.h \ + cache_manager.cc \ + tests/stub_carp.cc \ + carp.h \ + cbdata.cc \ + clientStream.cc \ + tests/stub_client_db.cc \ + client_side.cc \ + client_side.h \ + client_side_reply.cc \ + client_side_request.cc \ + debug.cc \ + dlink.cc \ + dlink.h \ + errorpage.cc \ + event.cc \ + external_acl.cc \ + tests/stub_fatal.cc \ + fatal.h \ + fd.cc \ + fd.h \ + fde.cc \ + filemap.cc \ + fqdncache.cc \ + fqdncache.h \ + fs_io.cc \ + fs_io.h \ + tests/stub_gopher.cc \ + gopher.h \ + helper.cc \ + hier_code.h \ + http.cc \ + icp_v2.cc \ + icp_v3.cc \ + int.cc \ + int.h \ + internal.cc \ + internal.h \ + tests/stub_ipc_Forwarder.cc \ + ipcache.cc \ tests/stub_libauth.cc \ + tests/stub_libauth_acls.cc \ tests/stub_libdiskio.cc \ - tests/stub_StatHist.cc \ - stmem.cc \ + tests/stub_liberror.cc \ + tests/stub_libsecurity.cc \ + tests/stub_libstore.cc \ + tests/stub_main_cc.cc \ + mem_node.cc \ + mime.cc \ + mime.h \ + mime_header.cc \ + mime_header.h \ + multicast.cc \ + multicast.h \ + neighbors.cc \ + neighbors.h \ + pconn.cc \ + peer_digest.cc \ + peer_proxy_negotiate_auth.cc \ + peer_proxy_negotiate_auth.h \ + peer_select.cc \ + peer_sourcehash.cc \ + peer_sourcehash.h \ + peer_userhash.cc \ + peer_userhash.h \ + tests/stub_redirect.cc \ + redirect.h \ + refresh.cc \ + refresh.h \ repl_modules.h \ + stat.cc \ + stat.h \ + stmem.cc \ store.cc \ store_client.cc \ - store_digest.h \ tests/stub_store_digest.cc \ + store_digest.h \ store_io.cc \ - store_key_md5.h \ store_key_md5.cc \ - store_log.h \ + store_key_md5.h \ store_log.cc \ - store_rebuild.h \ + store_log.h \ store_rebuild.cc \ - store_swapin.h \ + store_rebuild.h \ + tests/stub_store_stats.cc \ store_swapin.cc \ + store_swapin.h \ store_swapmeta.cc \ store_swapout.cc \ - StoreFileSystem.cc \ - StoreIOState.cc \ - tests/stub_StoreMeta.cc \ - StoreMetaUnpacker.cc \ - StoreSwapLogData.cc \ - tools.h \ + time.cc \ tools.cc \ - Transients.cc \ - tests/stub_cache_cf.cc \ - tests/stub_HttpUpgradeProtocolAccess.cc \ + tools.h \ tests/stub_tunnel.cc \ - tests/stub_libstore.cc \ - MemStore.cc \ - $(UNLINKDSOURCE) \ - urn.h \ urn.cc \ - wccp2.h \ + urn.h \ tests/stub_wccp2.cc \ - whois.h \ + wccp2.h \ tests/stub_whois.cc \ - FadingCounter.cc \ - $(WIN32_SOURCE) \ - wordlist.h \ - wordlist.cc + whois.h \ + wordlist.cc \ + wordlist.h nodist_tests_testCacheManager_SOURCES = \ $(BUILT_SOURCES) # comm.cc only requires comm/libcomm.la until fdc_table is dead. @@ -2781,39 +2782,40 @@ $(SSLLIB) \ $(KRB5LIBS) \ $(LIBCPPUNIT_LIBS) \ + $(SYSTEMD_LIBS) \ $(COMPAT_LIB) \ $(XTRA_LIBS) tests_testCacheManager_LDFLAGS = $(LIBADD_DL) check_PROGRAMS += tests/testStatHist tests_testStatHist_SOURCES = \ - tests/stub_cbdata.cc \ - fatal.h \ - tests/stub_fatal.cc \ + tests/stub_DelayId.cc \ + tests/stub_HelperChildConfig.cc \ tests/stub_MemBuf.cc \ + tests/stub_MemObject.cc \ tests/stub_SBufDetailedStats.cc \ StatHist.cc \ + tests/testStatHist.cc \ StatHist.h \ + tests/testStatHist.h \ String.cc \ tests/stub_cache_manager.cc \ + tests/stub_cbdata.cc \ tests/stub_comm.cc \ tests/stub_debug.cc \ - tests/stub_DelayId.cc \ - tests/stub_HelperChildConfig.cc \ + tests/stub_fatal.cc \ + fatal.h \ tests/stub_libmem.cc \ - tests/stub_MemObject.cc \ - mime.h \ tests/stub_mime.cc \ + mime.h \ tests/stub_pconn.cc \ - tests/stub_stmem.cc \ repl_modules.h \ + tests/stub_stmem.cc \ tests/stub_store.cc \ tests/stub_store_stats.cc \ time.cc \ - tools.h \ tests/stub_tools.cc \ - tests/testStatHist.cc \ - tests/testStatHist.h + tools.h nodist_tests_testStatHist_SOURCES = \ $(TESTSOURCES) tests_testStatHist_LDADD = \ @@ -2830,25 +2832,25 @@ check_PROGRAMS += tests/testConfigParser tests_testConfigParser_SOURCES = \ ClientInfo.h \ - tests/stub_MemBuf.cc \ - tests/stub_time.cc \ - tests/stub_SBufDetailedStats.cc \ - String.cc \ ConfigParser.cc \ - fatal.h \ - tests/stub_fatal.cc \ tests/testConfigParser.cc \ tests/testConfigParser.h \ - cache_cf.h \ + tests/stub_HelperChildConfig.cc \ + tests/stub_MemBuf.cc \ + tests/stub_SBufDetailedStats.cc \ + String.cc \ tests/stub_cache_cf.cc \ + cache_cf.h \ tests/stub_cbdata.cc \ tests/stub_debug.cc \ + tests/stub_fatal.cc \ + fatal.h \ tests/stub_libmem.cc \ - tests/stub_HelperChildConfig.cc \ - tools.h \ + tests/stub_time.cc \ tests/stub_tools.cc \ - wordlist.h \ - wordlist.cc + tools.h \ + wordlist.cc \ + wordlist.h nodist_tests_testConfigParser_SOURCES = \ $(TESTSOURCES) tests_testConfigParser_LDADD = \ @@ -2868,26 +2870,21 @@ check_PROGRAMS += tests/testEvent tests_testEvent_SOURCES = \ + $(DELAY_POOL_SOURCE) \ + $(DNSSOURCE) \ + $(HTCPSOURCE) \ + $(IPC_SOURCE) \ + $(SNMP_SOURCE) \ + $(UNLINKDSOURCE) \ + $(WIN32_SOURCE) \ AccessLogEntry.cc \ + AuthReg.h \ BodyPipe.cc \ - CacheDigest.h \ tests/stub_CacheDigest.cc \ - cache_cf.h \ - AuthReg.h \ - RefreshPattern.h \ + CacheDigest.h \ CachePeer.cc \ CachePeer.h \ - cache_manager.cc \ - carp.h \ - tests/stub_carp.cc \ - cbdata.cc \ - tests/stub_client_db.cc \ - client_side.h \ - client_side.cc \ - client_side_reply.cc \ - client_side_request.cc \ ClientInfo.h \ - clientStream.cc \ tests/stub_CollapsedForwarding.cc \ ConfigOption.cc \ ConfigParser.cc \ @@ -2895,171 +2892,177 @@ CpuAffinityMap.h \ CpuAffinitySet.cc \ CpuAffinitySet.h \ - debug.cc \ - $(DELAY_POOL_SOURCE) \ - fs_io.h \ - fs_io.cc \ - dlink.h \ - dlink.cc \ - $(DNSSOURCE) \ - errorpage.cc \ tests/stub_ETag.cc \ - event.cc \ - EventLoop.h \ + tests/testEvent.cc \ + tests/testEvent.h \ EventLoop.cc \ - external_acl.cc \ + EventLoop.h \ ExternalACLEntry.cc \ FadingCounter.cc \ - fatal.h \ - tests/stub_fatal.cc \ - fd.h \ - fd.cc \ - fde.cc \ FileMap.h \ - filemap.cc \ - fqdncache.h \ - fqdncache.cc \ FwdState.cc \ FwdState.h \ - gopher.h \ - tests/stub_gopher.cc \ HappyConnOpener.cc \ HappyConnOpener.h \ - helper.cc \ - hier_code.h \ - $(HTCPSOURCE) \ - http.cc \ - HttpBody.h \ HttpBody.cc \ + HttpBody.h \ tests/stub_HttpControlMsg.cc \ - HttpHeader.h \ - HttpHeader.cc \ - HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ - HttpHeaderTools.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrScTarget.cc \ + HttpHeader.cc \ + HttpHeader.h \ + HttpHeaderFieldInfo.h \ + HttpHeaderFieldStat.h \ + HttpHeaderTools.cc \ + HttpHeaderTools.h \ HttpReply.cc \ - PeerPoolMgr.h \ + HttpRequest.cc \ + tests/stub_HttpUpgradeProtocolAccess.cc \ + IoStats.h \ + LogTags.cc \ + MasterXaction.cc \ + MasterXaction.h \ + MemBuf.cc \ + MemObject.cc \ + MemStore.cc \ + Notes.cc \ + Notes.h \ + Parsing.cc \ PeerPoolMgr.cc \ - RequestFlags.h \ + PeerPoolMgr.h \ + Pipeline.cc \ + Pipeline.h \ + RefreshPattern.h \ + RemovalPolicy.cc \ RequestFlags.cc \ - HttpRequest.cc \ + RequestFlags.h \ + ResolvedPeers.cc \ + ResolvedPeers.h \ + tests/stub_SBufDetailedStats.cc \ + SquidMath.cc \ + SquidMath.h \ + StatCounters.cc \ + StatCounters.h \ + StatHist.cc \ + StatHist.h \ + StoreFileSystem.cc \ + StoreIOState.cc \ + tests/stub_StoreMeta.cc \ + StoreMetaUnpacker.cc \ + StoreSwapLogData.cc \ + StrList.cc \ + StrList.h \ + String.cc \ + Transients.cc \ + tests/stub_cache_cf.cc \ + cache_cf.h \ + cache_manager.cc \ + tests/stub_carp.cc \ + carp.h \ + cbdata.cc \ + clientStream.cc \ + tests/stub_client_db.cc \ + client_side.cc \ + client_side.h \ + client_side_reply.cc \ + client_side_request.cc \ + debug.cc \ + dlink.cc \ + dlink.h \ + errorpage.cc \ + event.cc \ + external_acl.cc \ + tests/stub_fatal.cc \ + fatal.h \ + fd.cc \ + fd.h \ + fde.cc \ + filemap.cc \ + fqdncache.cc \ + fqdncache.h \ + fs_io.cc \ + fs_io.h \ + tests/stub_gopher.cc \ + gopher.h \ + helper.cc \ + hier_code.h \ + http.cc \ icp_v2.cc \ icp_v3.cc \ - $(IPC_SOURCE) \ - ipcache.cc \ - int.h \ int.cc \ - internal.h \ + int.h \ internal.cc \ - LogTags.cc \ - tests/stub_libsecurity.cc \ - MasterXaction.cc \ - MasterXaction.h \ + internal.h \ + tests/stub_ipc_Forwarder.cc \ + ipcache.cc \ + tests/stub_libauth.cc \ + tests/stub_libauth_acls.cc \ + tests/stub_libdiskio.cc \ + tests/stub_liberror.cc \ + tests/stub_libeui.cc \ tests/stub_libmem.cc \ + tests/stub_libsecurity.cc \ + tests/stub_libstore.cc \ + tests/stub_main_cc.cc \ mem_node.cc \ - MemBuf.cc \ - MemObject.cc \ - mime.h \ mime.cc \ - mime_header.h \ + mime.h \ mime_header.cc \ - multicast.h \ + mime_header.h \ multicast.cc \ - neighbors.h \ + multicast.h \ neighbors.cc \ - Notes.cc \ - Notes.h \ - Parsing.cc \ + neighbors.h \ pconn.cc \ peer_digest.cc \ - peer_proxy_negotiate_auth.h \ peer_proxy_negotiate_auth.cc \ + peer_proxy_negotiate_auth.h \ peer_select.cc \ - peer_sourcehash.h \ peer_sourcehash.cc \ - peer_userhash.h \ + peer_sourcehash.h \ peer_userhash.cc \ - Pipeline.cc \ - Pipeline.h \ - redirect.h \ + peer_userhash.h \ tests/stub_redirect.cc \ - refresh.h \ + redirect.h \ refresh.cc \ - RemovalPolicy.cc \ - ResolvedPeers.h \ - ResolvedPeers.cc \ - StrList.h \ - StrList.cc \ - tests/stub_SBufDetailedStats.cc \ - $(SNMP_SOURCE) \ - SquidMath.cc \ - SquidMath.h \ - IoStats.h \ - stat.h \ + refresh.h \ + repl_modules.h \ stat.cc \ - StatCounters.h \ - StatCounters.cc \ - StatHist.h \ - StatHist.cc \ + stat.h \ stmem.cc \ - repl_modules.h \ store.cc \ store_client.cc \ - store_digest.h \ tests/stub_store_digest.cc \ + store_digest.h \ store_io.cc \ - store_key_md5.h \ store_key_md5.cc \ - store_log.h \ + store_key_md5.h \ store_log.cc \ - store_rebuild.h \ + store_log.h \ store_rebuild.cc \ - store_swapin.h \ + store_rebuild.h \ + tests/stub_store_stats.cc \ store_swapin.cc \ + store_swapin.h \ store_swapmeta.cc \ store_swapout.cc \ - StoreFileSystem.cc \ - StoreIOState.cc \ - tests/stub_StoreMeta.cc \ - StoreMetaUnpacker.cc \ - StoreSwapLogData.cc \ - String.cc \ - tests/stub_cache_cf.cc \ - tests/stub_HttpUpgradeProtocolAccess.cc \ - tests/stub_libstore.cc \ tests/CapturingStoreEntry.h \ - tests/testEvent.cc \ - tests/testEvent.h \ - tests/stub_main_cc.cc \ - tests/stub_ipc_Forwarder.cc \ - tests/stub_libauth_acls.cc \ - tests/stub_libauth.cc \ - tests/stub_libdiskio.cc \ - tests/stub_libeui.cc \ - tests/stub_store_stats.cc \ time.cc \ - tools.h \ tools.cc \ - Transients.cc \ + tools.h \ tests/stub_tunnel.cc \ - MemStore.cc \ - $(UNLINKDSOURCE) \ - urn.h \ urn.cc \ - wccp2.h \ + urn.h \ tests/stub_wccp2.cc \ - whois.h \ + wccp2.h \ tests/stub_whois.cc \ - $(WIN32_SOURCE) \ - wordlist.h \ - wordlist.cc + whois.h \ + wordlist.cc \ + wordlist.h nodist_tests_testEvent_SOURCES = \ $(BUILT_SOURCES) tests_testEvent_LDADD = \ @@ -3101,32 +3104,28 @@ $(SSLLIB) \ $(KRB5LIBS) \ $(LIBCPPUNIT_LIBS) \ + $(SYSTEMD_LIBS) \ $(COMPAT_LIB) \ $(XTRA_LIBS) tests_testEvent_LDFLAGS = $(LIBADD_DL) check_PROGRAMS += tests/testEventLoop tests_testEventLoop_SOURCES = \ + $(DELAY_POOL_SOURCE) \ + $(DNSSOURCE) \ + $(HTCPSOURCE) \ + $(IPC_SOURCE) \ + $(SNMP_SOURCE) \ + $(UNLINKDSOURCE) \ + $(WIN32_SOURCE) \ AccessLogEntry.cc \ + AuthReg.h \ BodyPipe.cc \ - CacheDigest.h \ tests/stub_CacheDigest.cc \ - cache_manager.cc \ - cache_cf.h \ - AuthReg.h \ - RefreshPattern.h \ + CacheDigest.h \ CachePeer.cc \ CachePeer.h \ - carp.h \ - tests/stub_carp.cc \ - cbdata.cc \ - tests/stub_client_db.cc \ - client_side.h \ - client_side.cc \ - client_side_reply.cc \ - client_side_request.cc \ ClientInfo.h \ - clientStream.cc \ tests/stub_CollapsedForwarding.cc \ ConfigOption.cc \ ConfigParser.cc \ @@ -3134,170 +3133,176 @@ CpuAffinityMap.h \ CpuAffinitySet.cc \ CpuAffinitySet.h \ - debug.cc \ - $(DELAY_POOL_SOURCE) \ - fs_io.h \ - fs_io.cc \ - dlink.h \ - dlink.cc \ - $(DNSSOURCE) \ - errorpage.cc \ tests/stub_ETag.cc \ - EventLoop.h \ EventLoop.cc \ - event.cc \ - external_acl.cc \ + tests/testEventLoop.cc \ + EventLoop.h \ + tests/testEventLoop.h \ ExternalACLEntry.cc \ FadingCounter.cc \ - fatal.h \ - tests/stub_fatal.cc \ - fd.h \ - fd.cc \ - fde.cc \ FileMap.h \ - filemap.cc \ - fqdncache.h \ - fqdncache.cc \ FwdState.cc \ FwdState.h \ - gopher.h \ - tests/stub_gopher.cc \ HappyConnOpener.cc \ HappyConnOpener.h \ - helper.cc \ - hier_code.h \ - $(HTCPSOURCE) \ - http.cc \ - HttpBody.h \ HttpBody.cc \ + HttpBody.h \ tests/stub_HttpControlMsg.cc \ - HttpHeader.h \ - HttpHeader.cc \ - HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ - HttpHeaderTools.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrScTarget.cc \ + HttpHeader.cc \ + HttpHeader.h \ + HttpHeaderFieldInfo.h \ + HttpHeaderFieldStat.h \ + HttpHeaderTools.cc \ + HttpHeaderTools.h \ HttpReply.cc \ - PeerPoolMgr.h \ - PeerPoolMgr.cc \ - RequestFlags.h \ - RequestFlags.cc \ HttpRequest.cc \ - icp_v2.cc \ - icp_v3.cc \ - $(IPC_SOURCE) \ - ipcache.cc \ - int.h \ - int.cc \ - internal.h \ - internal.cc \ + tests/stub_HttpUpgradeProtocolAccess.cc \ + IoStats.h \ LogTags.cc \ MasterXaction.cc \ MasterXaction.h \ MemBuf.cc \ MemObject.cc \ + MemStore.cc \ + Notes.cc \ + Notes.h \ + Parsing.cc \ + PeerPoolMgr.cc \ + PeerPoolMgr.h \ + Pipeline.cc \ + Pipeline.h \ + RefreshPattern.h \ + RemovalPolicy.cc \ + RequestFlags.cc \ + RequestFlags.h \ + ResolvedPeers.cc \ + ResolvedPeers.h \ + tests/stub_SBufDetailedStats.cc \ + SquidMath.cc \ + SquidMath.h \ + StatCounters.cc \ + StatCounters.h \ + StatHist.cc \ + StatHist.h \ + StoreFileSystem.cc \ + StoreIOState.cc \ + tests/stub_StoreMeta.cc \ + StoreMetaUnpacker.cc \ + StoreSwapLogData.cc \ + StrList.cc \ + StrList.h \ + String.cc \ + Transients.cc \ + tests/stub_cache_cf.cc \ + cache_cf.h \ + cache_manager.cc \ + tests/stub_carp.cc \ + carp.h \ + cbdata.cc \ + clientStream.cc \ + tests/stub_client_db.cc \ + client_side.cc \ + client_side.h \ + client_side_reply.cc \ + client_side_request.cc \ + debug.cc \ + dlink.cc \ + dlink.h \ + errorpage.cc \ + event.cc \ + external_acl.cc \ + tests/stub_fatal.cc \ + fatal.h \ + fd.cc \ + fd.h \ + fde.cc \ + filemap.cc \ + fqdncache.cc \ + fqdncache.h \ + fs_io.cc \ + fs_io.h \ + tests/stub_gopher.cc \ + gopher.h \ + helper.cc \ + hier_code.h \ + http.cc \ + icp_v2.cc \ + icp_v3.cc \ + int.cc \ + int.h \ + internal.cc \ + internal.h \ + tests/stub_ipc_Forwarder.cc \ + ipcache.cc \ + tests/stub_libauth.cc \ + tests/stub_libauth_acls.cc \ + tests/stub_libdiskio.cc \ + tests/stub_liberror.cc \ + tests/stub_libeui.cc \ tests/stub_libmem.cc \ + tests/stub_libsecurity.cc \ + tests/stub_libstore.cc \ + tests/stub_main_cc.cc \ mem_node.cc \ - mime.h \ mime.cc \ - mime_header.h \ + mime.h \ mime_header.cc \ - multicast.h \ + mime_header.h \ multicast.cc \ - neighbors.h \ + multicast.h \ neighbors.cc \ - Notes.cc \ - Notes.h \ - Parsing.cc \ + neighbors.h \ pconn.cc \ peer_digest.cc \ - peer_proxy_negotiate_auth.h \ peer_proxy_negotiate_auth.cc \ + peer_proxy_negotiate_auth.h \ peer_select.cc \ - peer_sourcehash.h \ peer_sourcehash.cc \ - peer_userhash.h \ + peer_sourcehash.h \ peer_userhash.cc \ - Pipeline.cc \ - Pipeline.h \ - RemovalPolicy.cc \ - ResolvedPeers.cc \ - ResolvedPeers.h \ - redirect.h \ + peer_userhash.h \ tests/stub_redirect.cc \ - refresh.h \ + redirect.h \ refresh.cc \ - tests/stub_SBufDetailedStats.cc \ - $(SNMP_SOURCE) \ - SquidMath.h \ - SquidMath.cc \ - IoStats.h \ - stat.h \ + refresh.h \ + repl_modules.h \ stat.cc \ - StatCounters.h \ - StatCounters.cc \ - StatHist.h \ - StatHist.cc \ + stat.h \ stmem.cc \ - repl_modules.h \ store.cc \ store_client.cc \ - store_digest.h \ tests/stub_store_digest.cc \ + store_digest.h \ store_io.cc \ - store_key_md5.h \ store_key_md5.cc \ - store_log.h \ + store_key_md5.h \ store_log.cc \ - store_rebuild.h \ + store_log.h \ store_rebuild.cc \ - store_swapin.h \ + store_rebuild.h \ + tests/stub_store_stats.cc \ store_swapin.cc \ + store_swapin.h \ store_swapmeta.cc \ store_swapout.cc \ - StoreFileSystem.cc \ - StoreIOState.cc \ - tests/stub_StoreMeta.cc \ - StoreMetaUnpacker.cc \ - StoreSwapLogData.cc \ - String.cc \ - StrList.h \ - StrList.cc \ - tests/stub_cache_cf.cc \ - tests/stub_HttpUpgradeProtocolAccess.cc \ - tests/stub_libstore.cc \ - tests/testEventLoop.cc \ - tests/testEventLoop.h \ - tests/stub_main_cc.cc \ - tests/stub_ipc_Forwarder.cc \ - tests/stub_libauth_acls.cc \ - tests/stub_libauth.cc \ - tests/stub_libdiskio.cc \ - tests/stub_libeui.cc \ - tests/stub_libsecurity.cc \ - tests/stub_store_stats.cc \ time.cc \ - tools.h \ tools.cc \ - Transients.cc \ + tools.h \ tests/stub_tunnel.cc \ - MemStore.cc \ - $(UNLINKDSOURCE) \ - urn.h \ urn.cc \ - wccp2.h \ + urn.h \ tests/stub_wccp2.cc \ - whois.h \ + wccp2.h \ tests/stub_whois.cc \ - $(WIN32_SOURCE) \ - wordlist.h \ - wordlist.cc + whois.h \ + wordlist.cc \ + wordlist.h nodist_tests_testEventLoop_SOURCES = \ $(BUILT_SOURCES) tests_testEventLoop_LDADD = \ @@ -3339,6 +3344,7 @@ $(SSLLIB) \ $(KRB5LIBS) \ $(LIBCPPUNIT_LIBS) \ + $(SYSTEMD_LIBS) \ $(COMPAT_LIB) \ $(XTRA_LIBS) tests_testEventLoop_LDFLAGS = $(LIBADD_DL) diff -u -r -N squid-5.0.5/src/Makefile.in squid-5.0.6/src/Makefile.in --- squid-5.0.5/src/Makefile.in 2021-02-08 13:40:45.000000000 +1300 +++ squid-5.0.6/src/Makefile.in 2021-05-10 22:57:53.000000000 +1200 @@ -226,8 +226,8 @@ $(sbin_PROGRAMS) LTLIBRARIES = $(noinst_LTLIBRARIES) libsquid_la_LIBADD = -am_libsquid_la_OBJECTS = comm.lo CommCalls.lo DescriptorSet.lo \ - SquidConfig.lo +am_libsquid_la_OBJECTS = CommCalls.lo DescriptorSet.lo SquidConfig.lo \ + comm.lo libsquid_la_OBJECTS = $(am_libsquid_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -249,89 +249,89 @@ fs/libfs.la ipc/libipc.la mgr/libmgr.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_1) -am__squid_SOURCES_DIST = AclRegs.cc AuthReg.cc AccessLogEntry.cc \ - AccessLogEntry.h AsyncEngine.cc AsyncEngine.h cache_cf.h \ - AuthReg.h RefreshPattern.h cache_cf.cc CacheDigest.h \ - CacheDigest.cc cache_manager.cc NeighborTypeDomainList.h \ - CachePeer.cc CachePeer.h CacheManager.h carp.h carp.cc \ - cbdata.cc cbdata.h client_db.h client_db.cc client_side.h \ - client_side.cc client_side_reply.cc client_side_reply.h \ - client_side_request.cc client_side_request.h ClientInfo.h \ - BodyPipe.cc BodyPipe.h ClientRequestContext.h clientStream.cc \ - clientStream.h clientStreamForward.h CollapsedForwarding.cc \ - CollapsedForwarding.h CollapsingHistory.h CommandLine.cc \ - CommandLine.h CompletionDispatcher.cc CompletionDispatcher.h \ - CommRead.h ConfigOption.cc ConfigParser.cc ConfigParser.h \ - CpuAffinity.cc CpuAffinity.h CpuAffinityMap.cc \ - CpuAffinityMap.h CpuAffinitySet.cc CpuAffinitySet.h debug.cc \ - Debug.h defines.h BandwidthBucket.cc BandwidthBucket.h \ - CommonPool.h CompositePoolNode.h delay_pools.cc DelayId.cc \ - DelayId.h DelayIdComposite.h DelayBucket.cc DelayBucket.h \ - DelayConfig.cc DelayConfig.h DelayPool.cc DelayPool.h \ - DelayPools.h DelaySpec.cc DelaySpec.h DelayTagged.cc \ - DelayTagged.h DelayUser.cc DelayUser.h DelayVector.cc \ - DelayVector.h MessageBucket.cc MessageBucket.h \ +am__squid_SOURCES_DIST = AclRegs.cc AuthReg.cc BandwidthBucket.cc \ + BandwidthBucket.h CommonPool.h CompositePoolNode.h \ + delay_pools.cc DelayId.cc DelayId.h DelayIdComposite.h \ + DelayBucket.cc DelayBucket.h DelayConfig.cc DelayConfig.h \ + DelayPool.cc DelayPool.h DelayPools.h DelaySpec.cc DelaySpec.h \ + DelayTagged.cc DelayTagged.h DelayUser.cc DelayUser.h \ + DelayVector.cc DelayVector.h MessageBucket.cc MessageBucket.h \ MessageDelayPools.h MessageDelayPools.cc NullDelayId.h \ - ClientDelayConfig.cc ClientDelayConfig.h fs_io.h fs_io.cc \ - dlink.h dlink.cc dns_internal.cc Downloader.cc Downloader.h \ - enums.h err_type.h err_detail_type.h errorpage.cc errorpage.h \ - ETag.cc ETag.h event.cc event.h EventLoop.h EventLoop.cc \ - external_acl.cc ExternalACL.h ExternalACLEntry.cc \ - ExternalACLEntry.h FadingCounter.h FadingCounter.cc fatal.h \ - fatal.cc fd.h fd.cc fde.cc fde.h FileMap.h filemap.cc \ - fqdncache.h fqdncache.cc FwdState.cc FwdState.h Generic.h \ - globals.h gopher.h gopher.cc HappyConnOpener.cc \ - HappyConnOpener.h helper.cc helper.h hier_code.h \ - HierarchyLogEntry.h htcp.cc htcp.h \ - HttpUpgradeProtocolAccess.cc HttpUpgradeProtocolAccess.h \ - http.cc http.h HttpHeaderFieldStat.h HttpHdrCc.h HttpHdrCc.cc \ - HttpHdrRange.cc HttpHdrSc.cc HttpHdrSc.h HttpHdrScTarget.cc \ - HttpHdrScTarget.h HttpHdrContRange.cc HttpHdrContRange.h \ - HttpHeaderStat.h HttpHeader.h HttpHeader.cc HttpHeaderMask.h \ - HttpHeaderRange.h HttpHeaderFieldInfo.h HttpHeaderTools.h \ - HttpHeaderTools.cc HttpBody.h HttpBody.cc HttpControlMsg.cc \ - HttpControlMsg.h HttpReply.cc HttpReply.h RequestFlags.h \ - RequestFlags.cc HttpRequest.cc HttpRequest.h ICP.h \ - icp_opcode.h icp_v2.cc icp_v3.cc Instance.h Instance.cc int.h \ - int.cc internal.h internal.cc SquidIpc.h ipc.cc ipc_win32.cc \ - ipcache.cc ipcache.h LeakFinder.cc LogTags.cc LogTags.h \ - lookup_t.h main.cc MasterXaction.cc MasterXaction.h \ - mem_node.cc mem_node.h MemBuf.cc MemObject.cc MemObject.h \ - MessageSizes.h mime.h mime.cc mime_header.h mime_header.cc \ - multicast.h multicast.cc neighbors.h neighbors.cc Notes.h \ - Notes.cc Parsing.cc Parsing.h ProfStats.cc pconn.cc pconn.h \ - PeerDigest.h peer_digest.cc peer_proxy_negotiate_auth.h \ - peer_proxy_negotiate_auth.cc peer_select.cc peer_sourcehash.h \ - peer_sourcehash.cc peer_userhash.h peer_userhash.cc \ - PeerPoolMgr.h PeerPoolMgr.cc PeerSelectState.h PingData.h \ - Pipeline.cc Pipeline.h protos.h redirect.h redirect.cc \ - refresh.h refresh.cc RemovalPolicy.cc RemovalPolicy.h \ - ResolvedPeers.cc ResolvedPeers.h send-announce.h \ - send-announce.cc SBufStatsAction.h SBufStatsAction.cc \ - sbuf/StringConvert.h SnmpRequest.h snmp_core.h snmp_core.cc \ - snmp_agent.h snmp_agent.cc SquidMath.h SquidMath.cc \ - SquidNew.cc IoStats.h stat.h stat.cc StatCounters.h \ - StatCounters.cc StatHist.h StatHist.cc String.cc StrList.h \ - StrList.cc stmem.cc stmem.h repl_modules.h store.cc Store.h \ - StoreFileSystem.cc StoreFileSystem.h store_io.cc \ - StoreIOBuffer.h StoreIOState.cc StoreIOState.h store_client.cc \ - StoreClient.h store_digest.h store_digest.cc store_key_md5.h \ - store_key_md5.cc store_log.h store_log.cc store_rebuild.h \ - store_rebuild.cc store_swapin.h store_swapin.cc \ - store_swapmeta.cc store_swapout.cc StoreMetaUnpacker.cc \ - StoreMetaUnpacker.h StoreMeta.cc StoreMeta.h StoreMetaMD5.cc \ + ClientDelayConfig.cc ClientDelayConfig.h dns_internal.cc \ + htcp.cc htcp.h SquidIpc.h ipc.cc ipc_win32.cc LeakFinder.cc \ + SnmpRequest.h snmp_core.h snmp_core.cc snmp_agent.h \ + snmp_agent.cc StoreMeta.cc StoreMeta.h StoreMetaMD5.cc \ StoreMetaMD5.h StoreMetaSTD.cc StoreMetaSTD.h \ StoreMetaSTDLFS.cc StoreMetaSTDLFS.h StoreMetaObjSize.h \ StoreMetaURL.cc StoreMetaURL.h StoreMetaVary.cc \ - StoreMetaVary.h StoreSearch.h StoreStats.cc StoreStats.h \ - StoreSwapLogData.cc StoreSwapLogData.h swap_log_op.h \ - Transients.cc Transients.h MemStore.cc MemStore.h time.cc \ - TimeOrTag.h tools.h tools.cc tunnel.cc typedefs.h unlinkd.h \ - unlinkd.cc urn.h urn.cc wccp.h wccp.cc wccp2.h wccp2.cc \ - whois.h whois.cc wordlist.h wordlist.cc XactionInitiator.h \ - XactionInitiator.cc XactionStep.h win32.cc WinSvc.cc \ - LoadableModule.h LoadableModule.cc LoadableModules.h \ - LoadableModules.cc + StoreMetaVary.h unlinkd.h unlinkd.cc win32.cc WinSvc.cc \ + ProfStats.cc AccessLogEntry.cc AccessLogEntry.h AsyncEngine.cc \ + AsyncEngine.h AuthReg.h BodyPipe.cc BodyPipe.h CacheDigest.cc \ + CacheDigest.h CacheManager.h CachePeer.cc CachePeer.h \ + ClientInfo.h ClientRequestContext.h CollapsedForwarding.cc \ + CollapsedForwarding.h CollapsingHistory.h CommRead.h \ + CommandLine.cc CommandLine.h CompletionDispatcher.cc \ + CompletionDispatcher.h ConfigOption.cc ConfigParser.cc \ + ConfigParser.h CpuAffinity.cc CpuAffinity.h CpuAffinityMap.cc \ + CpuAffinityMap.h CpuAffinitySet.cc CpuAffinitySet.h Debug.h \ + Downloader.cc Downloader.h ETag.cc ETag.h EventLoop.cc \ + EventLoop.h ExternalACL.h ExternalACLEntry.cc \ + ExternalACLEntry.h FadingCounter.cc FadingCounter.h FileMap.h \ + FwdState.cc FwdState.h Generic.h HappyConnOpener.cc \ + HappyConnOpener.h HierarchyLogEntry.h HttpBody.cc HttpBody.h \ + HttpControlMsg.cc HttpControlMsg.h HttpHdrCc.cc HttpHdrCc.h \ + HttpHdrContRange.cc HttpHdrContRange.h HttpHdrRange.cc \ + HttpHdrSc.cc HttpHdrSc.h HttpHdrScTarget.cc HttpHdrScTarget.h \ + HttpHeader.cc HttpHeader.h HttpHeaderFieldInfo.h \ + HttpHeaderFieldStat.h HttpHeaderMask.h HttpHeaderRange.h \ + HttpHeaderStat.h HttpHeaderTools.cc HttpHeaderTools.h \ + HttpReply.cc HttpReply.h HttpRequest.cc HttpRequest.h \ + HttpUpgradeProtocolAccess.cc HttpUpgradeProtocolAccess.h ICP.h \ + Instance.cc Instance.h IoStats.h LogTags.cc LogTags.h \ + MasterXaction.cc MasterXaction.h MemBuf.cc MemObject.cc \ + MemObject.h MemStore.cc MemStore.h MessageSizes.h \ + NeighborTypeDomainList.h Notes.cc Notes.h Parsing.cc Parsing.h \ + PeerDigest.h PeerPoolMgr.cc PeerPoolMgr.h PeerSelectState.h \ + PingData.h Pipeline.cc Pipeline.h RefreshPattern.h \ + RemovalPolicy.cc RemovalPolicy.h RequestFlags.cc \ + RequestFlags.h ResolvedPeers.cc ResolvedPeers.h \ + SBufStatsAction.cc SBufStatsAction.h SquidMath.cc SquidMath.h \ + SquidNew.cc StatCounters.cc StatCounters.h StatHist.cc \ + StatHist.h Store.h StoreClient.h StoreFileSystem.cc \ + StoreFileSystem.h StoreIOBuffer.h StoreIOState.cc \ + StoreIOState.h StoreMetaUnpacker.cc StoreMetaUnpacker.h \ + StoreSearch.h StoreStats.cc StoreStats.h StoreSwapLogData.cc \ + StoreSwapLogData.h StrList.cc StrList.h String.cc TimeOrTag.h \ + Transients.cc Transients.h XactionInitiator.cc \ + XactionInitiator.h XactionStep.h cache_cf.cc cache_cf.h \ + cache_manager.cc carp.cc carp.h cbdata.cc cbdata.h \ + clientStream.cc clientStream.h clientStreamForward.h \ + client_db.cc client_db.h client_side.cc client_side.h \ + client_side_reply.cc client_side_reply.h \ + client_side_request.cc client_side_request.h debug.cc \ + defines.h dlink.cc dlink.h enums.h errorpage.cc errorpage.h \ + event.cc event.h external_acl.cc fatal.cc fatal.h fd.cc fd.h \ + fde.cc fde.h filemap.cc fqdncache.cc fqdncache.h fs_io.cc \ + fs_io.h globals.h gopher.cc gopher.h helper.cc helper.h \ + hier_code.h http.cc http.h icp_opcode.h icp_v2.cc icp_v3.cc \ + int.cc int.h internal.cc internal.h ipcache.cc ipcache.h \ + lookup_t.h main.cc mem_node.cc mem_node.h mime.cc mime.h \ + mime_header.cc mime_header.h multicast.cc multicast.h \ + neighbors.cc neighbors.h pconn.cc pconn.h peer_digest.cc \ + peer_proxy_negotiate_auth.cc peer_proxy_negotiate_auth.h \ + peer_select.cc peer_sourcehash.cc peer_sourcehash.h \ + peer_userhash.cc peer_userhash.h protos.h redirect.cc \ + redirect.h refresh.cc refresh.h repl_modules.h \ + sbuf/StringConvert.h send-announce.cc send-announce.h stat.cc \ + stat.h stmem.cc stmem.h store.cc store_client.cc \ + store_digest.cc store_digest.h store_io.cc store_key_md5.cc \ + store_key_md5.h store_log.cc store_log.h store_rebuild.cc \ + store_rebuild.h store_swapin.cc store_swapin.h \ + store_swapmeta.cc store_swapout.cc swap_log_op.h time.cc \ + tools.cc tools.h tunnel.cc typedefs.h urn.cc urn.h wccp.cc \ + wccp.h wccp2.cc wccp2.h whois.cc whois.h wordlist.cc \ + wordlist.h LoadableModule.cc LoadableModule.h \ + LoadableModules.cc LoadableModules.h am__objects_1 = AclRegs.$(OBJEXT) AuthReg.$(OBJEXT) am__objects_2 = BandwidthBucket.$(OBJEXT) delay_pools.$(OBJEXT) \ DelayId.$(OBJEXT) DelayBucket.$(OBJEXT) DelayConfig.$(OBJEXT) \ @@ -345,88 +345,86 @@ @ENABLE_WIN32_IPC_FALSE@am__objects_6 = ipc.$(OBJEXT) @ENABLE_WIN32_IPC_TRUE@am__objects_6 = ipc_win32.$(OBJEXT) @ENABLE_LEAKFINDER_TRUE@am__objects_7 = LeakFinder.$(OBJEXT) -@ENABLE_XPROF_STATS_TRUE@am__objects_8 = ProfStats.$(OBJEXT) -am__objects_9 = snmp_core.$(OBJEXT) snmp_agent.$(OBJEXT) -@ENABLE_SNMP_TRUE@am__objects_10 = $(am__objects_9) -am__objects_11 = StoreMeta.$(OBJEXT) StoreMetaMD5.$(OBJEXT) \ +am__objects_8 = snmp_core.$(OBJEXT) snmp_agent.$(OBJEXT) +@ENABLE_SNMP_TRUE@am__objects_9 = $(am__objects_8) +am__objects_10 = StoreMeta.$(OBJEXT) StoreMetaMD5.$(OBJEXT) \ StoreMetaSTD.$(OBJEXT) StoreMetaSTDLFS.$(OBJEXT) \ StoreMetaURL.$(OBJEXT) StoreMetaVary.$(OBJEXT) -@ENABLE_UNLINKD_TRUE@am__objects_12 = unlinkd.$(OBJEXT) -@ENABLE_WIN32SPECIFIC_TRUE@am__objects_13 = win32.$(OBJEXT) -@ENABLE_WIN32SPECIFIC_TRUE@am__objects_14 = WinSvc.$(OBJEXT) +@ENABLE_UNLINKD_TRUE@am__objects_11 = unlinkd.$(OBJEXT) +@ENABLE_WIN32SPECIFIC_TRUE@am__objects_12 = win32.$(OBJEXT) +@ENABLE_WIN32SPECIFIC_TRUE@am__objects_13 = WinSvc.$(OBJEXT) +@ENABLE_XPROF_STATS_TRUE@am__objects_14 = ProfStats.$(OBJEXT) am__objects_15 = LoadableModule.$(OBJEXT) LoadableModules.$(OBJEXT) @ENABLE_LOADABLE_MODULES_TRUE@am__objects_16 = $(am__objects_15) -am_squid_OBJECTS = $(am__objects_1) AccessLogEntry.$(OBJEXT) \ - AsyncEngine.$(OBJEXT) cache_cf.$(OBJEXT) CacheDigest.$(OBJEXT) \ - cache_manager.$(OBJEXT) CachePeer.$(OBJEXT) carp.$(OBJEXT) \ - cbdata.$(OBJEXT) client_db.$(OBJEXT) client_side.$(OBJEXT) \ - client_side_reply.$(OBJEXT) client_side_request.$(OBJEXT) \ - BodyPipe.$(OBJEXT) clientStream.$(OBJEXT) \ +am_squid_OBJECTS = $(am__objects_1) $(am__objects_3) $(am__objects_4) \ + $(am__objects_5) $(am__objects_6) $(am__objects_7) \ + $(am__objects_9) $(am__objects_10) $(am__objects_11) \ + $(am__objects_12) $(am__objects_13) $(am__objects_14) \ + AccessLogEntry.$(OBJEXT) AsyncEngine.$(OBJEXT) \ + BodyPipe.$(OBJEXT) CacheDigest.$(OBJEXT) CachePeer.$(OBJEXT) \ CollapsedForwarding.$(OBJEXT) CommandLine.$(OBJEXT) \ CompletionDispatcher.$(OBJEXT) ConfigOption.$(OBJEXT) \ ConfigParser.$(OBJEXT) CpuAffinity.$(OBJEXT) \ CpuAffinityMap.$(OBJEXT) CpuAffinitySet.$(OBJEXT) \ - debug.$(OBJEXT) $(am__objects_3) fs_io.$(OBJEXT) \ - dlink.$(OBJEXT) $(am__objects_4) Downloader.$(OBJEXT) \ - errorpage.$(OBJEXT) ETag.$(OBJEXT) event.$(OBJEXT) \ - EventLoop.$(OBJEXT) external_acl.$(OBJEXT) \ + Downloader.$(OBJEXT) ETag.$(OBJEXT) EventLoop.$(OBJEXT) \ ExternalACLEntry.$(OBJEXT) FadingCounter.$(OBJEXT) \ - fatal.$(OBJEXT) fd.$(OBJEXT) fde.$(OBJEXT) filemap.$(OBJEXT) \ - fqdncache.$(OBJEXT) FwdState.$(OBJEXT) gopher.$(OBJEXT) \ - HappyConnOpener.$(OBJEXT) helper.$(OBJEXT) $(am__objects_5) \ - HttpUpgradeProtocolAccess.$(OBJEXT) http.$(OBJEXT) \ - HttpHdrCc.$(OBJEXT) HttpHdrRange.$(OBJEXT) HttpHdrSc.$(OBJEXT) \ - HttpHdrScTarget.$(OBJEXT) HttpHdrContRange.$(OBJEXT) \ - HttpHeader.$(OBJEXT) HttpHeaderTools.$(OBJEXT) \ + FwdState.$(OBJEXT) HappyConnOpener.$(OBJEXT) \ HttpBody.$(OBJEXT) HttpControlMsg.$(OBJEXT) \ - HttpReply.$(OBJEXT) RequestFlags.$(OBJEXT) \ - HttpRequest.$(OBJEXT) icp_v2.$(OBJEXT) icp_v3.$(OBJEXT) \ - Instance.$(OBJEXT) int.$(OBJEXT) internal.$(OBJEXT) \ - $(am__objects_6) ipcache.$(OBJEXT) $(am__objects_7) \ - LogTags.$(OBJEXT) main.$(OBJEXT) MasterXaction.$(OBJEXT) \ - mem_node.$(OBJEXT) MemBuf.$(OBJEXT) MemObject.$(OBJEXT) \ + HttpHdrCc.$(OBJEXT) HttpHdrContRange.$(OBJEXT) \ + HttpHdrRange.$(OBJEXT) HttpHdrSc.$(OBJEXT) \ + HttpHdrScTarget.$(OBJEXT) HttpHeader.$(OBJEXT) \ + HttpHeaderTools.$(OBJEXT) HttpReply.$(OBJEXT) \ + HttpRequest.$(OBJEXT) HttpUpgradeProtocolAccess.$(OBJEXT) \ + Instance.$(OBJEXT) LogTags.$(OBJEXT) MasterXaction.$(OBJEXT) \ + MemBuf.$(OBJEXT) MemObject.$(OBJEXT) MemStore.$(OBJEXT) \ + Notes.$(OBJEXT) Parsing.$(OBJEXT) PeerPoolMgr.$(OBJEXT) \ + Pipeline.$(OBJEXT) RemovalPolicy.$(OBJEXT) \ + RequestFlags.$(OBJEXT) ResolvedPeers.$(OBJEXT) \ + SBufStatsAction.$(OBJEXT) SquidMath.$(OBJEXT) \ + SquidNew.$(OBJEXT) StatCounters.$(OBJEXT) StatHist.$(OBJEXT) \ + StoreFileSystem.$(OBJEXT) StoreIOState.$(OBJEXT) \ + StoreMetaUnpacker.$(OBJEXT) StoreStats.$(OBJEXT) \ + StoreSwapLogData.$(OBJEXT) StrList.$(OBJEXT) String.$(OBJEXT) \ + Transients.$(OBJEXT) XactionInitiator.$(OBJEXT) \ + cache_cf.$(OBJEXT) cache_manager.$(OBJEXT) carp.$(OBJEXT) \ + cbdata.$(OBJEXT) clientStream.$(OBJEXT) client_db.$(OBJEXT) \ + client_side.$(OBJEXT) client_side_reply.$(OBJEXT) \ + client_side_request.$(OBJEXT) debug.$(OBJEXT) dlink.$(OBJEXT) \ + errorpage.$(OBJEXT) event.$(OBJEXT) external_acl.$(OBJEXT) \ + fatal.$(OBJEXT) fd.$(OBJEXT) fde.$(OBJEXT) filemap.$(OBJEXT) \ + fqdncache.$(OBJEXT) fs_io.$(OBJEXT) gopher.$(OBJEXT) \ + helper.$(OBJEXT) http.$(OBJEXT) icp_v2.$(OBJEXT) \ + icp_v3.$(OBJEXT) int.$(OBJEXT) internal.$(OBJEXT) \ + ipcache.$(OBJEXT) main.$(OBJEXT) mem_node.$(OBJEXT) \ mime.$(OBJEXT) mime_header.$(OBJEXT) multicast.$(OBJEXT) \ - neighbors.$(OBJEXT) Notes.$(OBJEXT) Parsing.$(OBJEXT) \ - $(am__objects_8) pconn.$(OBJEXT) peer_digest.$(OBJEXT) \ + neighbors.$(OBJEXT) pconn.$(OBJEXT) peer_digest.$(OBJEXT) \ peer_proxy_negotiate_auth.$(OBJEXT) peer_select.$(OBJEXT) \ peer_sourcehash.$(OBJEXT) peer_userhash.$(OBJEXT) \ - PeerPoolMgr.$(OBJEXT) Pipeline.$(OBJEXT) redirect.$(OBJEXT) \ - refresh.$(OBJEXT) RemovalPolicy.$(OBJEXT) \ - ResolvedPeers.$(OBJEXT) send-announce.$(OBJEXT) \ - SBufStatsAction.$(OBJEXT) $(am__objects_10) \ - SquidMath.$(OBJEXT) SquidNew.$(OBJEXT) stat.$(OBJEXT) \ - StatCounters.$(OBJEXT) StatHist.$(OBJEXT) String.$(OBJEXT) \ - StrList.$(OBJEXT) stmem.$(OBJEXT) store.$(OBJEXT) \ - StoreFileSystem.$(OBJEXT) store_io.$(OBJEXT) \ - StoreIOState.$(OBJEXT) store_client.$(OBJEXT) \ - store_digest.$(OBJEXT) store_key_md5.$(OBJEXT) \ - store_log.$(OBJEXT) store_rebuild.$(OBJEXT) \ - store_swapin.$(OBJEXT) store_swapmeta.$(OBJEXT) \ - store_swapout.$(OBJEXT) StoreMetaUnpacker.$(OBJEXT) \ - $(am__objects_11) StoreStats.$(OBJEXT) \ - StoreSwapLogData.$(OBJEXT) Transients.$(OBJEXT) \ - MemStore.$(OBJEXT) time.$(OBJEXT) tools.$(OBJEXT) \ - tunnel.$(OBJEXT) $(am__objects_12) urn.$(OBJEXT) \ + redirect.$(OBJEXT) refresh.$(OBJEXT) send-announce.$(OBJEXT) \ + stat.$(OBJEXT) stmem.$(OBJEXT) store.$(OBJEXT) \ + store_client.$(OBJEXT) store_digest.$(OBJEXT) \ + store_io.$(OBJEXT) store_key_md5.$(OBJEXT) store_log.$(OBJEXT) \ + store_rebuild.$(OBJEXT) store_swapin.$(OBJEXT) \ + store_swapmeta.$(OBJEXT) store_swapout.$(OBJEXT) \ + time.$(OBJEXT) tools.$(OBJEXT) tunnel.$(OBJEXT) urn.$(OBJEXT) \ wccp.$(OBJEXT) wccp2.$(OBJEXT) whois.$(OBJEXT) \ - wordlist.$(OBJEXT) XactionInitiator.$(OBJEXT) \ - $(am__objects_13) $(am__objects_14) $(am__objects_16) -am__EXTRA_squid_SOURCES_DIST = ConfigOption.h BandwidthBucket.cc \ - BandwidthBucket.h CommonPool.h CompositePoolNode.h \ - delay_pools.cc DelayId.cc DelayId.h DelayIdComposite.h \ - DelayBucket.cc DelayBucket.h DelayConfig.cc DelayConfig.h \ - DelayPool.cc DelayPool.h DelayPools.h DelaySpec.cc DelaySpec.h \ - DelayTagged.cc DelayTagged.h DelayUser.cc DelayUser.h \ - DelayVector.cc DelayVector.h MessageBucket.cc MessageBucket.h \ + wordlist.$(OBJEXT) $(am__objects_16) +am__EXTRA_squid_SOURCES_DIST = BandwidthBucket.cc BandwidthBucket.h \ + CommonPool.h CompositePoolNode.h delay_pools.cc DelayId.cc \ + DelayId.h DelayIdComposite.h DelayBucket.cc DelayBucket.h \ + DelayConfig.cc DelayConfig.h DelayPool.cc DelayPool.h \ + DelayPools.h DelaySpec.cc DelaySpec.h DelayTagged.cc \ + DelayTagged.h DelayUser.cc DelayUser.h DelayVector.cc \ + DelayVector.h MessageBucket.cc MessageBucket.h \ MessageDelayPools.h MessageDelayPools.cc NullDelayId.h \ - ClientDelayConfig.cc ClientDelayConfig.h htcp.cc htcp.h ipc.cc \ - ipc_win32.cc ProfStats.cc LeakFinder.cc LeakFinder.h \ + ClientDelayConfig.cc ClientDelayConfig.h LoadableModule.cc \ + LoadableModule.h LoadableModules.cc LoadableModules.h \ SnmpRequest.h snmp_core.h snmp_core.cc snmp_agent.h \ snmp_agent.cc unlinkd.h unlinkd.cc win32.h win32.cc WinSvc.h \ - WinSvc.cc LoadableModule.h LoadableModule.cc LoadableModules.h \ - LoadableModules.cc -am__objects_17 = err_type.$(OBJEXT) err_detail_type.$(OBJEXT) \ - globals.$(OBJEXT) hier_code.$(OBJEXT) icp_opcode.$(OBJEXT) \ - lookup_t.$(OBJEXT) repl_modules.$(OBJEXT) \ + WinSvc.cc ConfigOption.h LeakFinder.cc LeakFinder.h \ + ProfStats.cc htcp.cc htcp.h ipc.cc ipc_win32.cc +am__objects_17 = globals.$(OBJEXT) hier_code.$(OBJEXT) \ + icp_opcode.$(OBJEXT) lookup_t.$(OBJEXT) repl_modules.$(OBJEXT) \ swap_log_op.$(OBJEXT) nodist_squid_OBJECTS = $(am__objects_17) squid_OBJECTS = $(am_squid_OBJECTS) $(nodist_squid_OBJECTS) @@ -443,15 +441,15 @@ helper/libhelper.la http/libhttp.la dns/libdns.la \ base/libbase.la libsquid.la ip/libip.la fs/libfs.la \ DiskIO/libdiskio.la comm/libcomm.la anyp/libanyp.la \ - security/libsecurity.la $(SSL_LIBS) ipc/libipc.la \ - mgr/libmgr.la proxyp/libproxyp.la parser/libparser.la \ - eui/libeui.la icmp/libicmp.la log/liblog.la \ - format/libformat.la sbuf/libsbuf.la $(am__DEPENDENCIES_1) \ + security/libsecurity.la $(SSL_LIBS) error/liberror.la \ + ipc/libipc.la mgr/libmgr.la proxyp/libproxyp.la \ + parser/libparser.la eui/libeui.la icmp/libicmp.la \ + log/liblog.la format/libformat.la sbuf/libsbuf.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4) \ - $(am__DEPENDENCIES_5) mem/libmem.la store/libstore.la \ - $(top_builddir)/lib/libmisccontainers.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5) mem/libmem.la \ + store/libstore.la $(top_builddir)/lib/libmisccontainers.la \ $(top_builddir)/lib/libmiscencoding.la \ $(top_builddir)/lib/libmiscutil.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ @@ -467,25 +465,25 @@ @ENABLE_AUTH_TRUE@am_tests_testACLMaxUserIP_OBJECTS = \ @ENABLE_AUTH_TRUE@ tests/testACLMaxUserIP.$(OBJEXT) @ENABLE_AUTH_TRUE@nodist_tests_testACLMaxUserIP_OBJECTS = \ -@ENABLE_AUTH_TRUE@ ConfigParser.$(OBJEXT) dlink.$(OBJEXT) \ -@ENABLE_AUTH_TRUE@ globals.$(OBJEXT) Parsing.$(OBJEXT) \ +@ENABLE_AUTH_TRUE@ ConfigParser.$(OBJEXT) \ +@ENABLE_AUTH_TRUE@ tests/stub_HelperChildConfig.$(OBJEXT) \ +@ENABLE_AUTH_TRUE@ tests/stub_HttpHeader.$(OBJEXT) \ +@ENABLE_AUTH_TRUE@ tests/stub_HttpRequest.$(OBJEXT) \ +@ENABLE_AUTH_TRUE@ tests/stub_MemBuf.$(OBJEXT) \ +@ENABLE_AUTH_TRUE@ Parsing.$(OBJEXT) \ +@ENABLE_AUTH_TRUE@ tests/stub_StatHist.$(OBJEXT) \ @ENABLE_AUTH_TRUE@ String.$(OBJEXT) \ @ENABLE_AUTH_TRUE@ tests/stub_access_log.$(OBJEXT) \ @ENABLE_AUTH_TRUE@ tests/stub_cache_cf.$(OBJEXT) \ @ENABLE_AUTH_TRUE@ tests/stub_cbdata.$(OBJEXT) \ @ENABLE_AUTH_TRUE@ tests/stub_client_side.$(OBJEXT) \ -@ENABLE_AUTH_TRUE@ tests/stub_debug.$(OBJEXT) \ +@ENABLE_AUTH_TRUE@ tests/stub_debug.$(OBJEXT) dlink.$(OBJEXT) \ @ENABLE_AUTH_TRUE@ tests/stub_errorpage.$(OBJEXT) \ -@ENABLE_AUTH_TRUE@ tests/stub_fatal.$(OBJEXT) \ -@ENABLE_AUTH_TRUE@ tests/stub_HelperChildConfig.$(OBJEXT) \ -@ENABLE_AUTH_TRUE@ tests/stub_HttpHeader.$(OBJEXT) \ -@ENABLE_AUTH_TRUE@ tests/stub_HttpRequest.$(OBJEXT) \ +@ENABLE_AUTH_TRUE@ tests/stub_fatal.$(OBJEXT) globals.$(OBJEXT) \ @ENABLE_AUTH_TRUE@ tests/stub_libauth.$(OBJEXT) \ @ENABLE_AUTH_TRUE@ tests/stub_libhttp.$(OBJEXT) \ @ENABLE_AUTH_TRUE@ tests/stub_libmem.$(OBJEXT) \ -@ENABLE_AUTH_TRUE@ tests/stub_libsecurity.$(OBJEXT) \ -@ENABLE_AUTH_TRUE@ tests/stub_MemBuf.$(OBJEXT) \ -@ENABLE_AUTH_TRUE@ tests/stub_StatHist.$(OBJEXT) +@ENABLE_AUTH_TRUE@ tests/stub_libsecurity.$(OBJEXT) tests_testACLMaxUserIP_OBJECTS = $(am_tests_testACLMaxUserIP_OBJECTS) \ $(nodist_tests_testACLMaxUserIP_OBJECTS) @ENABLE_AUTH_TRUE@tests_testACLMaxUserIP_DEPENDENCIES = \ @@ -510,20 +508,7 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testBoilerplate_LDFLAGS) \ $(LDFLAGS) -o $@ -am__tests_testCacheManager_SOURCES_DIST = AccessLogEntry.cc debug.cc \ - RequestFlags.h RequestFlags.cc HttpRequest.cc String.cc \ - tests/testCacheManager.cc tests/testCacheManager.h \ - tests/stub_main_cc.cc tests/stub_HttpControlMsg.cc \ - tests/stub_ipc_Forwarder.cc tests/stub_store_stats.cc \ - tests/stub_EventLoop.cc time.cc BodyPipe.cc cache_manager.cc \ - cache_cf.h AuthReg.h RefreshPattern.h CachePeer.cc CachePeer.h \ - CacheDigest.h tests/stub_CacheDigest.cc carp.h \ - tests/stub_carp.cc cbdata.cc tests/stub_client_db.cc \ - client_side.h client_side.cc client_side_reply.cc \ - client_side_request.cc ClientInfo.h clientStream.cc \ - tests/stub_CollapsedForwarding.cc ConfigOption.cc \ - ConfigParser.cc CpuAffinityMap.cc CpuAffinityMap.h \ - CpuAffinitySet.cc CpuAffinitySet.h BandwidthBucket.cc \ +am__tests_testCacheManager_SOURCES_DIST = BandwidthBucket.cc \ BandwidthBucket.h CommonPool.h CompositePoolNode.h \ delay_pools.cc DelayId.cc DelayId.h DelayIdComposite.h \ DelayBucket.cc DelayBucket.h DelayConfig.cc DelayConfig.h \ @@ -531,106 +516,119 @@ DelayTagged.cc DelayTagged.h DelayUser.cc DelayUser.h \ DelayVector.cc DelayVector.h MessageBucket.cc MessageBucket.h \ MessageDelayPools.h MessageDelayPools.cc NullDelayId.h \ - ClientDelayConfig.cc ClientDelayConfig.h fs_io.h fs_io.cc \ - dlink.h dlink.cc dns_internal.cc errorpage.cc \ - tests/stub_ETag.cc event.cc external_acl.cc \ - ExternalACLEntry.cc fatal.h tests/stub_fatal.cc fd.h fd.cc \ - fde.cc FileMap.h filemap.cc fqdncache.h fqdncache.cc \ - FwdState.cc FwdState.h gopher.h tests/stub_gopher.cc \ - HappyConnOpener.cc HappyConnOpener.h hier_code.h helper.cc \ - htcp.cc htcp.h http.cc HttpBody.h HttpBody.cc HttpHeader.h \ - HttpHeader.cc HttpHeaderFieldInfo.h HttpHeaderTools.h \ - HttpHeaderTools.cc HttpHeaderFieldStat.h HttpHdrCc.h \ - HttpHdrCc.cc HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ - HttpHdrScTarget.cc HttpReply.cc icp_v2.cc icp_v3.cc SquidIpc.h \ - ipc.cc ipc_win32.cc ipcache.cc int.h int.cc internal.h \ - internal.cc LogTags.cc tests/stub_libsecurity.cc \ - MasterXaction.cc MasterXaction.h multicast.h multicast.cc \ - mem_node.cc MemBuf.cc MemObject.cc mime.h mime.cc \ - mime_header.h mime_header.cc neighbors.h neighbors.cc Notes.cc \ - Notes.h Parsing.cc pconn.cc peer_digest.cc \ - peer_proxy_negotiate_auth.h peer_proxy_negotiate_auth.cc \ - peer_select.cc peer_sourcehash.h peer_sourcehash.cc \ - peer_userhash.h peer_userhash.cc PeerPoolMgr.h PeerPoolMgr.cc \ - Pipeline.cc Pipeline.h redirect.h tests/stub_redirect.cc \ - refresh.h refresh.cc RemovalPolicy.cc ResolvedPeers.h \ - ResolvedPeers.cc tests/stub_SBufDetailedStats.cc SnmpRequest.h \ - snmp_core.h snmp_core.cc snmp_agent.h snmp_agent.cc \ - SquidMath.h SquidMath.cc IoStats.h stat.h stat.cc \ - StatCounters.h StatCounters.cc StatHist.h StrList.h StrList.cc \ - tests/stub_libauth_acls.cc tests/stub_libauth.cc \ - tests/stub_libdiskio.cc tests/stub_StatHist.cc stmem.cc \ - repl_modules.h store.cc store_client.cc store_digest.h \ - tests/stub_store_digest.cc store_io.cc store_key_md5.h \ - store_key_md5.cc store_log.h store_log.cc store_rebuild.h \ - store_rebuild.cc store_swapin.h store_swapin.cc \ - store_swapmeta.cc store_swapout.cc StoreFileSystem.cc \ - StoreIOState.cc tests/stub_StoreMeta.cc StoreMetaUnpacker.cc \ - StoreSwapLogData.cc tools.h tools.cc Transients.cc \ - tests/stub_cache_cf.cc tests/stub_HttpUpgradeProtocolAccess.cc \ - tests/stub_tunnel.cc tests/stub_libstore.cc MemStore.cc \ - unlinkd.h unlinkd.cc urn.h urn.cc wccp2.h tests/stub_wccp2.cc \ - whois.h tests/stub_whois.cc FadingCounter.cc win32.cc \ - wordlist.h wordlist.cc -am_tests_testCacheManager_OBJECTS = AccessLogEntry.$(OBJEXT) \ - debug.$(OBJEXT) RequestFlags.$(OBJEXT) HttpRequest.$(OBJEXT) \ - String.$(OBJEXT) tests/testCacheManager.$(OBJEXT) \ - tests/stub_main_cc.$(OBJEXT) \ - tests/stub_HttpControlMsg.$(OBJEXT) \ - tests/stub_ipc_Forwarder.$(OBJEXT) \ - tests/stub_store_stats.$(OBJEXT) \ - tests/stub_EventLoop.$(OBJEXT) time.$(OBJEXT) \ - BodyPipe.$(OBJEXT) cache_manager.$(OBJEXT) CachePeer.$(OBJEXT) \ - tests/stub_CacheDigest.$(OBJEXT) tests/stub_carp.$(OBJEXT) \ - cbdata.$(OBJEXT) tests/stub_client_db.$(OBJEXT) \ - client_side.$(OBJEXT) client_side_reply.$(OBJEXT) \ - client_side_request.$(OBJEXT) clientStream.$(OBJEXT) \ + ClientDelayConfig.cc ClientDelayConfig.h dns_internal.cc \ + htcp.cc htcp.h SquidIpc.h ipc.cc ipc_win32.cc SnmpRequest.h \ + snmp_core.h snmp_core.cc snmp_agent.h snmp_agent.cc unlinkd.h \ + unlinkd.cc win32.cc AccessLogEntry.cc AuthReg.h BodyPipe.cc \ + tests/stub_CacheDigest.cc CacheDigest.h \ + tests/testCacheManager.cc tests/testCacheManager.h \ + CachePeer.cc CachePeer.h ClientInfo.h \ + tests/stub_CollapsedForwarding.cc ConfigOption.cc \ + ConfigParser.cc CpuAffinityMap.cc CpuAffinityMap.h \ + CpuAffinitySet.cc CpuAffinitySet.h tests/stub_ETag.cc \ + tests/stub_EventLoop.cc ExternalACLEntry.cc FadingCounter.cc \ + FileMap.h FwdState.cc FwdState.h HappyConnOpener.cc \ + HappyConnOpener.h HttpBody.cc HttpBody.h \ + tests/stub_HttpControlMsg.cc HttpHdrCc.cc HttpHdrCc.h \ + HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ + HttpHdrScTarget.cc HttpHeader.cc HttpHeader.h \ + HttpHeaderFieldInfo.h HttpHeaderFieldStat.h HttpHeaderTools.cc \ + HttpHeaderTools.h HttpReply.cc HttpRequest.cc \ + tests/stub_HttpUpgradeProtocolAccess.cc IoStats.h LogTags.cc \ + MasterXaction.cc MasterXaction.h MemBuf.cc MemObject.cc \ + MemStore.cc Notes.cc Notes.h Parsing.cc PeerPoolMgr.cc \ + PeerPoolMgr.h Pipeline.cc Pipeline.h RefreshPattern.h \ + RemovalPolicy.cc RequestFlags.cc RequestFlags.h \ + ResolvedPeers.cc ResolvedPeers.h \ + tests/stub_SBufDetailedStats.cc SquidMath.cc SquidMath.h \ + StatCounters.cc StatCounters.h tests/stub_StatHist.cc \ + StatHist.h StoreFileSystem.cc StoreIOState.cc \ + tests/stub_StoreMeta.cc StoreMetaUnpacker.cc \ + StoreSwapLogData.cc StrList.cc StrList.h String.cc \ + Transients.cc tests/stub_cache_cf.cc cache_cf.h \ + cache_manager.cc tests/stub_carp.cc carp.h cbdata.cc \ + clientStream.cc tests/stub_client_db.cc client_side.cc \ + client_side.h client_side_reply.cc client_side_request.cc \ + debug.cc dlink.cc dlink.h errorpage.cc event.cc \ + external_acl.cc tests/stub_fatal.cc fatal.h fd.cc fd.h fde.cc \ + filemap.cc fqdncache.cc fqdncache.h fs_io.cc fs_io.h \ + tests/stub_gopher.cc gopher.h helper.cc hier_code.h http.cc \ + icp_v2.cc icp_v3.cc int.cc int.h internal.cc internal.h \ + tests/stub_ipc_Forwarder.cc ipcache.cc tests/stub_libauth.cc \ + tests/stub_libauth_acls.cc tests/stub_libdiskio.cc \ + tests/stub_liberror.cc tests/stub_libsecurity.cc \ + tests/stub_libstore.cc tests/stub_main_cc.cc mem_node.cc \ + mime.cc mime.h mime_header.cc mime_header.h multicast.cc \ + multicast.h neighbors.cc neighbors.h pconn.cc peer_digest.cc \ + peer_proxy_negotiate_auth.cc peer_proxy_negotiate_auth.h \ + peer_select.cc peer_sourcehash.cc peer_sourcehash.h \ + peer_userhash.cc peer_userhash.h tests/stub_redirect.cc \ + redirect.h refresh.cc refresh.h repl_modules.h stat.cc stat.h \ + stmem.cc store.cc store_client.cc tests/stub_store_digest.cc \ + store_digest.h store_io.cc store_key_md5.cc store_key_md5.h \ + store_log.cc store_log.h store_rebuild.cc store_rebuild.h \ + tests/stub_store_stats.cc store_swapin.cc store_swapin.h \ + store_swapmeta.cc store_swapout.cc time.cc tools.cc tools.h \ + tests/stub_tunnel.cc urn.cc urn.h tests/stub_wccp2.cc wccp2.h \ + tests/stub_whois.cc whois.h wordlist.cc wordlist.h +am_tests_testCacheManager_OBJECTS = $(am__objects_3) $(am__objects_4) \ + $(am__objects_5) $(am__objects_6) $(am__objects_9) \ + $(am__objects_11) $(am__objects_12) AccessLogEntry.$(OBJEXT) \ + BodyPipe.$(OBJEXT) tests/stub_CacheDigest.$(OBJEXT) \ + tests/testCacheManager.$(OBJEXT) CachePeer.$(OBJEXT) \ tests/stub_CollapsedForwarding.$(OBJEXT) \ ConfigOption.$(OBJEXT) ConfigParser.$(OBJEXT) \ CpuAffinityMap.$(OBJEXT) CpuAffinitySet.$(OBJEXT) \ - $(am__objects_3) fs_io.$(OBJEXT) dlink.$(OBJEXT) \ - $(am__objects_4) errorpage.$(OBJEXT) tests/stub_ETag.$(OBJEXT) \ - event.$(OBJEXT) external_acl.$(OBJEXT) \ - ExternalACLEntry.$(OBJEXT) tests/stub_fatal.$(OBJEXT) \ - fd.$(OBJEXT) fde.$(OBJEXT) filemap.$(OBJEXT) \ - fqdncache.$(OBJEXT) FwdState.$(OBJEXT) \ - tests/stub_gopher.$(OBJEXT) HappyConnOpener.$(OBJEXT) \ - helper.$(OBJEXT) $(am__objects_5) http.$(OBJEXT) \ - HttpBody.$(OBJEXT) HttpHeader.$(OBJEXT) \ - HttpHeaderTools.$(OBJEXT) HttpHdrCc.$(OBJEXT) \ - HttpHdrContRange.$(OBJEXT) HttpHdrRange.$(OBJEXT) \ - HttpHdrSc.$(OBJEXT) HttpHdrScTarget.$(OBJEXT) \ - HttpReply.$(OBJEXT) icp_v2.$(OBJEXT) icp_v3.$(OBJEXT) \ - $(am__objects_6) ipcache.$(OBJEXT) int.$(OBJEXT) \ - internal.$(OBJEXT) LogTags.$(OBJEXT) \ - tests/stub_libsecurity.$(OBJEXT) MasterXaction.$(OBJEXT) \ - multicast.$(OBJEXT) mem_node.$(OBJEXT) MemBuf.$(OBJEXT) \ - MemObject.$(OBJEXT) mime.$(OBJEXT) mime_header.$(OBJEXT) \ - neighbors.$(OBJEXT) Notes.$(OBJEXT) Parsing.$(OBJEXT) \ + tests/stub_ETag.$(OBJEXT) tests/stub_EventLoop.$(OBJEXT) \ + ExternalACLEntry.$(OBJEXT) FadingCounter.$(OBJEXT) \ + FwdState.$(OBJEXT) HappyConnOpener.$(OBJEXT) \ + HttpBody.$(OBJEXT) tests/stub_HttpControlMsg.$(OBJEXT) \ + HttpHdrCc.$(OBJEXT) HttpHdrContRange.$(OBJEXT) \ + HttpHdrRange.$(OBJEXT) HttpHdrSc.$(OBJEXT) \ + HttpHdrScTarget.$(OBJEXT) HttpHeader.$(OBJEXT) \ + HttpHeaderTools.$(OBJEXT) HttpReply.$(OBJEXT) \ + HttpRequest.$(OBJEXT) \ + tests/stub_HttpUpgradeProtocolAccess.$(OBJEXT) \ + LogTags.$(OBJEXT) MasterXaction.$(OBJEXT) MemBuf.$(OBJEXT) \ + MemObject.$(OBJEXT) MemStore.$(OBJEXT) Notes.$(OBJEXT) \ + Parsing.$(OBJEXT) PeerPoolMgr.$(OBJEXT) Pipeline.$(OBJEXT) \ + RemovalPolicy.$(OBJEXT) RequestFlags.$(OBJEXT) \ + ResolvedPeers.$(OBJEXT) tests/stub_SBufDetailedStats.$(OBJEXT) \ + SquidMath.$(OBJEXT) StatCounters.$(OBJEXT) \ + tests/stub_StatHist.$(OBJEXT) StoreFileSystem.$(OBJEXT) \ + StoreIOState.$(OBJEXT) tests/stub_StoreMeta.$(OBJEXT) \ + StoreMetaUnpacker.$(OBJEXT) StoreSwapLogData.$(OBJEXT) \ + StrList.$(OBJEXT) String.$(OBJEXT) Transients.$(OBJEXT) \ + tests/stub_cache_cf.$(OBJEXT) cache_manager.$(OBJEXT) \ + tests/stub_carp.$(OBJEXT) cbdata.$(OBJEXT) \ + clientStream.$(OBJEXT) tests/stub_client_db.$(OBJEXT) \ + client_side.$(OBJEXT) client_side_reply.$(OBJEXT) \ + client_side_request.$(OBJEXT) debug.$(OBJEXT) dlink.$(OBJEXT) \ + errorpage.$(OBJEXT) event.$(OBJEXT) external_acl.$(OBJEXT) \ + tests/stub_fatal.$(OBJEXT) fd.$(OBJEXT) fde.$(OBJEXT) \ + filemap.$(OBJEXT) fqdncache.$(OBJEXT) fs_io.$(OBJEXT) \ + tests/stub_gopher.$(OBJEXT) helper.$(OBJEXT) http.$(OBJEXT) \ + icp_v2.$(OBJEXT) icp_v3.$(OBJEXT) int.$(OBJEXT) \ + internal.$(OBJEXT) tests/stub_ipc_Forwarder.$(OBJEXT) \ + ipcache.$(OBJEXT) tests/stub_libauth.$(OBJEXT) \ + tests/stub_libauth_acls.$(OBJEXT) \ + tests/stub_libdiskio.$(OBJEXT) tests/stub_liberror.$(OBJEXT) \ + tests/stub_libsecurity.$(OBJEXT) tests/stub_libstore.$(OBJEXT) \ + tests/stub_main_cc.$(OBJEXT) mem_node.$(OBJEXT) mime.$(OBJEXT) \ + mime_header.$(OBJEXT) multicast.$(OBJEXT) neighbors.$(OBJEXT) \ pconn.$(OBJEXT) peer_digest.$(OBJEXT) \ peer_proxy_negotiate_auth.$(OBJEXT) peer_select.$(OBJEXT) \ peer_sourcehash.$(OBJEXT) peer_userhash.$(OBJEXT) \ - PeerPoolMgr.$(OBJEXT) Pipeline.$(OBJEXT) \ - tests/stub_redirect.$(OBJEXT) refresh.$(OBJEXT) \ - RemovalPolicy.$(OBJEXT) ResolvedPeers.$(OBJEXT) \ - tests/stub_SBufDetailedStats.$(OBJEXT) $(am__objects_10) \ - SquidMath.$(OBJEXT) stat.$(OBJEXT) StatCounters.$(OBJEXT) \ - StrList.$(OBJEXT) tests/stub_libauth_acls.$(OBJEXT) \ - tests/stub_libauth.$(OBJEXT) tests/stub_libdiskio.$(OBJEXT) \ - tests/stub_StatHist.$(OBJEXT) stmem.$(OBJEXT) store.$(OBJEXT) \ - store_client.$(OBJEXT) tests/stub_store_digest.$(OBJEXT) \ - store_io.$(OBJEXT) store_key_md5.$(OBJEXT) store_log.$(OBJEXT) \ - store_rebuild.$(OBJEXT) store_swapin.$(OBJEXT) \ - store_swapmeta.$(OBJEXT) store_swapout.$(OBJEXT) \ - StoreFileSystem.$(OBJEXT) StoreIOState.$(OBJEXT) \ - tests/stub_StoreMeta.$(OBJEXT) StoreMetaUnpacker.$(OBJEXT) \ - StoreSwapLogData.$(OBJEXT) tools.$(OBJEXT) \ - Transients.$(OBJEXT) tests/stub_cache_cf.$(OBJEXT) \ - tests/stub_HttpUpgradeProtocolAccess.$(OBJEXT) \ - tests/stub_tunnel.$(OBJEXT) tests/stub_libstore.$(OBJEXT) \ - MemStore.$(OBJEXT) $(am__objects_12) urn.$(OBJEXT) \ + tests/stub_redirect.$(OBJEXT) refresh.$(OBJEXT) stat.$(OBJEXT) \ + stmem.$(OBJEXT) store.$(OBJEXT) store_client.$(OBJEXT) \ + tests/stub_store_digest.$(OBJEXT) store_io.$(OBJEXT) \ + store_key_md5.$(OBJEXT) store_log.$(OBJEXT) \ + store_rebuild.$(OBJEXT) tests/stub_store_stats.$(OBJEXT) \ + store_swapin.$(OBJEXT) store_swapmeta.$(OBJEXT) \ + store_swapout.$(OBJEXT) time.$(OBJEXT) tools.$(OBJEXT) \ + tests/stub_tunnel.$(OBJEXT) urn.$(OBJEXT) \ tests/stub_wccp2.$(OBJEXT) tests/stub_whois.$(OBJEXT) \ - FadingCounter.$(OBJEXT) $(am__objects_13) wordlist.$(OBJEXT) + wordlist.$(OBJEXT) nodist_tests_testCacheManager_OBJECTS = $(am__objects_17) tests_testCacheManager_OBJECTS = $(am_tests_testCacheManager_OBJECTS) \ $(nodist_tests_testCacheManager_OBJECTS) @@ -650,7 +648,8 @@ $(top_builddir)/lib/libmiscutil.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) tests_testCacheManager_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testCacheManager_LDFLAGS) \ @@ -666,14 +665,14 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testCharacterSet_LDFLAGS) \ $(LDFLAGS) -o $@ -am_tests_testConfigParser_OBJECTS = tests/stub_MemBuf.$(OBJEXT) \ - tests/stub_time.$(OBJEXT) \ - tests/stub_SBufDetailedStats.$(OBJEXT) String.$(OBJEXT) \ - ConfigParser.$(OBJEXT) tests/stub_fatal.$(OBJEXT) \ - tests/testConfigParser.$(OBJEXT) tests/stub_cache_cf.$(OBJEXT) \ - tests/stub_cbdata.$(OBJEXT) tests/stub_debug.$(OBJEXT) \ - tests/stub_libmem.$(OBJEXT) \ +am_tests_testConfigParser_OBJECTS = ConfigParser.$(OBJEXT) \ + tests/testConfigParser.$(OBJEXT) \ tests/stub_HelperChildConfig.$(OBJEXT) \ + tests/stub_MemBuf.$(OBJEXT) \ + tests/stub_SBufDetailedStats.$(OBJEXT) String.$(OBJEXT) \ + tests/stub_cache_cf.$(OBJEXT) tests/stub_cbdata.$(OBJEXT) \ + tests/stub_debug.$(OBJEXT) tests/stub_fatal.$(OBJEXT) \ + tests/stub_libmem.$(OBJEXT) tests/stub_time.$(OBJEXT) \ tests/stub_tools.$(OBJEXT) wordlist.$(OBJEXT) nodist_tests_testConfigParser_OBJECTS = $(am__objects_18) tests_testConfigParser_OBJECTS = $(am_tests_testConfigParser_OBJECTS) \ @@ -687,108 +686,107 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testConfigParser_LDFLAGS) \ $(LDFLAGS) -o $@ -am__tests_testDiskIO_SOURCES_DIST = AccessLogEntry.cc AccessLogEntry.h \ - CacheDigest.h tests/stub_CacheDigest.cc cbdata.cc client_db.h \ - ClientInfo.h tests/stub_CollapsedForwarding.cc ConfigOption.cc \ - ConfigParser.cc BandwidthBucket.cc BandwidthBucket.h \ - CommonPool.h CompositePoolNode.h delay_pools.cc DelayId.cc \ - DelayId.h DelayIdComposite.h DelayBucket.cc DelayBucket.h \ - DelayConfig.cc DelayConfig.h DelayPool.cc DelayPool.h \ - DelayPools.h DelaySpec.cc DelaySpec.h DelayTagged.cc \ - DelayTagged.h DelayUser.cc DelayUser.h DelayVector.cc \ - DelayVector.h MessageBucket.cc MessageBucket.h \ +am__tests_testDiskIO_SOURCES_DIST = BandwidthBucket.cc \ + BandwidthBucket.h CommonPool.h CompositePoolNode.h \ + delay_pools.cc DelayId.cc DelayId.h DelayIdComposite.h \ + DelayBucket.cc DelayBucket.h DelayConfig.cc DelayConfig.h \ + DelayPool.cc DelayPool.h DelayPools.h DelaySpec.cc DelaySpec.h \ + DelayTagged.cc DelayTagged.h DelayUser.cc DelayUser.h \ + DelayVector.cc DelayVector.h MessageBucket.cc MessageBucket.h \ MessageDelayPools.h MessageDelayPools.cc NullDelayId.h \ - ClientDelayConfig.cc ClientDelayConfig.h FadingCounter.cc \ - fs_io.h fs_io.cc tests/stub_ETag.cc EventLoop.cc event.cc \ - fatal.h tests/stub_fatal.cc fd.h fd.cc fde.h fde.cc FileMap.h \ - filemap.cc HttpBody.h HttpBody.cc HttpHeaderFieldStat.h \ - HttpHdrCc.h HttpHdrCc.cc HttpHdrContRange.cc HttpHdrSc.cc \ - HttpHdrScTarget.cc HttpHdrRange.cc HttpHeaderFieldInfo.h \ - HttpHeaderTools.h HttpHeaderTools.cc HttpHeader.h \ - HttpHeader.cc HttpReply.cc int.h int.cc LogTags.cc \ - MasterXaction.cc MasterXaction.h MemBuf.cc MemObject.cc \ - mem_node.cc Notes.h Notes.cc Parsing.cc refresh.h refresh.cc \ - RemovalPolicy.cc RequestFlags.h RequestFlags.cc \ - ResolvedPeers.cc ResolvedPeers.h tests/stub_libsecurity.cc \ - StatCounters.h StatCounters.cc StatHist.h \ - tests/stub_StatHist.cc stmem.cc \ - tests/stub_SBufDetailedStats.cc StoreFileSystem.cc \ + ClientDelayConfig.cc ClientDelayConfig.h unlinkd.h unlinkd.cc \ + win32.cc AccessLogEntry.cc AccessLogEntry.h \ + tests/stub_CacheDigest.cc CacheDigest.h ClientInfo.h \ + tests/stub_CollapsedForwarding.cc ConfigOption.cc \ + ConfigParser.cc tests/testDiskIO.cc tests/testDiskIO.h \ + tests/stub_ETag.cc EventLoop.cc FadingCounter.cc FileMap.h \ + tests/stub_HelperChildConfig.cc HttpBody.cc HttpBody.h \ + HttpHdrCc.cc HttpHdrCc.h HttpHdrContRange.cc HttpHdrRange.cc \ + HttpHdrSc.cc HttpHdrScTarget.cc HttpHeader.cc HttpHeader.h \ + HttpHeaderFieldInfo.h HttpHeaderFieldStat.h HttpHeaderTools.cc \ + HttpHeaderTools.h HttpReply.cc tests/stub_HttpRequest.cc \ + LogTags.cc MasterXaction.cc MasterXaction.h MemBuf.cc \ + MemObject.cc tests/stub_MemStore.cc Notes.cc Notes.h \ + Parsing.cc tests/stub_Port.cc RemovalPolicy.cc RequestFlags.cc \ + RequestFlags.h ResolvedPeers.cc ResolvedPeers.h \ + tests/stub_SBufDetailedStats.cc StatCounters.cc StatCounters.h \ + tests/stub_StatHist.cc StatHist.h StoreFileSystem.cc \ StoreIOState.cc tests/stub_StoreMeta.cc StoreMetaUnpacker.cc \ - StoreSwapLogData.cc store_io.cc store_key_md5.h \ - store_key_md5.cc store_swapout.cc store_swapmeta.cc \ - repl_modules.h store.cc String.cc StrList.h StrList.cc \ - tests/stub_libstore.cc Transients.cc log/access_log.h \ - tests/stub_access_log.cc tests/stub_acl.cc cache_cf.h \ - tests/stub_cache_cf.cc tests/stub_cache_manager.cc \ - tests/stub_client_db.cc client_side_request.h \ - tests/stub_client_side_request.cc tests/stub_debug.cc \ - tests/stub_errorpage.cc tests/stub_helper.cc \ - tests/stub_HelperChildConfig.cc tests/stub_HttpRequest.cc \ - tests/stub_http.cc tests/stub_icp.cc internal.h \ - tests/stub_internal.cc tests/stub_ipc.cc tests/stub_ipcache.cc \ - tests/stub_libauth_acls.cc tests/stub_libauth.cc \ - tests/stub_libeui.cc tests/stub_libformat.cc \ - tests/stub_libicmp.cc tests/stub_liblog.cc \ - tests/stub_MemStore.cc mime.h tests/stub_mime.cc \ - tests/stub_neighbors.cc tests/stub_pconn.cc tests/stub_Port.cc \ - tests/stub_stat.cc tests/stub_store_client.cc \ - tests/stub_store_stats.cc store_rebuild.h \ - tests/stub_store_rebuild.cc tests/stub_UdsOp.cc \ - tests/testDiskIO.cc tests/testDiskIO.h \ tests/testStoreSupport.cc tests/testStoreSupport.h \ - tests/stub_time.cc unlinkd.h unlinkd.cc tests/stub_libanyp.cc \ - win32.cc wordlist.h wordlist.cc tools.h tests/stub_tools.cc -am_tests_testDiskIO_OBJECTS = AccessLogEntry.$(OBJEXT) \ - tests/stub_CacheDigest.$(OBJEXT) cbdata.$(OBJEXT) \ + StoreSwapLogData.cc StrList.cc StrList.h String.cc \ + Transients.cc tests/stub_UdsOp.cc tests/stub_access_log.cc \ + tests/stub_acl.cc tests/stub_cache_cf.cc cache_cf.h \ + tests/stub_cache_manager.cc cbdata.cc tests/stub_client_db.cc \ + client_db.h tests/stub_client_side_request.cc \ + client_side_request.h tests/stub_debug.cc \ + tests/stub_errorpage.cc event.cc tests/stub_fatal.cc fatal.h \ + fd.cc fd.h fde.cc fde.h filemap.cc fs_io.cc fs_io.h \ + tests/stub_helper.cc tests/stub_http.cc tests/stub_icp.cc \ + int.cc int.h tests/stub_internal.cc internal.h \ + tests/stub_ipc.cc tests/stub_ipcache.cc tests/stub_libanyp.cc \ + tests/stub_libauth.cc tests/stub_libauth_acls.cc \ + tests/stub_liberror.cc tests/stub_libeui.cc \ + tests/stub_libformat.cc tests/stub_libicmp.cc \ + tests/stub_liblog.cc tests/stub_libsecurity.cc \ + tests/stub_libstore.cc log/access_log.h mem_node.cc \ + tests/stub_mime.cc mime.h tests/stub_neighbors.cc \ + tests/stub_pconn.cc refresh.cc refresh.h repl_modules.h \ + tests/stub_stat.cc stmem.cc store.cc \ + tests/stub_store_client.cc store_io.cc store_key_md5.cc \ + store_key_md5.h tests/stub_store_rebuild.cc store_rebuild.h \ + tests/stub_store_stats.cc store_swapmeta.cc store_swapout.cc \ + tests/stub_time.cc tests/stub_tools.cc tools.h wordlist.cc \ + wordlist.h +am_tests_testDiskIO_OBJECTS = $(am__objects_3) $(am__objects_11) \ + $(am__objects_12) AccessLogEntry.$(OBJEXT) \ + tests/stub_CacheDigest.$(OBJEXT) \ tests/stub_CollapsedForwarding.$(OBJEXT) \ - ConfigOption.$(OBJEXT) ConfigParser.$(OBJEXT) $(am__objects_3) \ - FadingCounter.$(OBJEXT) fs_io.$(OBJEXT) \ - tests/stub_ETag.$(OBJEXT) EventLoop.$(OBJEXT) event.$(OBJEXT) \ - tests/stub_fatal.$(OBJEXT) fd.$(OBJEXT) fde.$(OBJEXT) \ - filemap.$(OBJEXT) HttpBody.$(OBJEXT) HttpHdrCc.$(OBJEXT) \ - HttpHdrContRange.$(OBJEXT) HttpHdrSc.$(OBJEXT) \ - HttpHdrScTarget.$(OBJEXT) HttpHdrRange.$(OBJEXT) \ - HttpHeaderTools.$(OBJEXT) HttpHeader.$(OBJEXT) \ - HttpReply.$(OBJEXT) int.$(OBJEXT) LogTags.$(OBJEXT) \ + ConfigOption.$(OBJEXT) ConfigParser.$(OBJEXT) \ + tests/testDiskIO.$(OBJEXT) tests/stub_ETag.$(OBJEXT) \ + EventLoop.$(OBJEXT) FadingCounter.$(OBJEXT) \ + tests/stub_HelperChildConfig.$(OBJEXT) HttpBody.$(OBJEXT) \ + HttpHdrCc.$(OBJEXT) HttpHdrContRange.$(OBJEXT) \ + HttpHdrRange.$(OBJEXT) HttpHdrSc.$(OBJEXT) \ + HttpHdrScTarget.$(OBJEXT) HttpHeader.$(OBJEXT) \ + HttpHeaderTools.$(OBJEXT) HttpReply.$(OBJEXT) \ + tests/stub_HttpRequest.$(OBJEXT) LogTags.$(OBJEXT) \ MasterXaction.$(OBJEXT) MemBuf.$(OBJEXT) MemObject.$(OBJEXT) \ - mem_node.$(OBJEXT) Notes.$(OBJEXT) Parsing.$(OBJEXT) \ - refresh.$(OBJEXT) RemovalPolicy.$(OBJEXT) \ - RequestFlags.$(OBJEXT) ResolvedPeers.$(OBJEXT) \ - tests/stub_libsecurity.$(OBJEXT) StatCounters.$(OBJEXT) \ - tests/stub_StatHist.$(OBJEXT) stmem.$(OBJEXT) \ - tests/stub_SBufDetailedStats.$(OBJEXT) \ + tests/stub_MemStore.$(OBJEXT) Notes.$(OBJEXT) \ + Parsing.$(OBJEXT) tests/stub_Port.$(OBJEXT) \ + RemovalPolicy.$(OBJEXT) RequestFlags.$(OBJEXT) \ + ResolvedPeers.$(OBJEXT) tests/stub_SBufDetailedStats.$(OBJEXT) \ + StatCounters.$(OBJEXT) tests/stub_StatHist.$(OBJEXT) \ StoreFileSystem.$(OBJEXT) StoreIOState.$(OBJEXT) \ tests/stub_StoreMeta.$(OBJEXT) StoreMetaUnpacker.$(OBJEXT) \ - StoreSwapLogData.$(OBJEXT) store_io.$(OBJEXT) \ - store_key_md5.$(OBJEXT) store_swapout.$(OBJEXT) \ - store_swapmeta.$(OBJEXT) store.$(OBJEXT) String.$(OBJEXT) \ - StrList.$(OBJEXT) tests/stub_libstore.$(OBJEXT) \ - Transients.$(OBJEXT) tests/stub_access_log.$(OBJEXT) \ + tests/testStoreSupport.$(OBJEXT) StoreSwapLogData.$(OBJEXT) \ + StrList.$(OBJEXT) String.$(OBJEXT) Transients.$(OBJEXT) \ + tests/stub_UdsOp.$(OBJEXT) tests/stub_access_log.$(OBJEXT) \ tests/stub_acl.$(OBJEXT) tests/stub_cache_cf.$(OBJEXT) \ - tests/stub_cache_manager.$(OBJEXT) \ + tests/stub_cache_manager.$(OBJEXT) cbdata.$(OBJEXT) \ tests/stub_client_db.$(OBJEXT) \ tests/stub_client_side_request.$(OBJEXT) \ tests/stub_debug.$(OBJEXT) tests/stub_errorpage.$(OBJEXT) \ - tests/stub_helper.$(OBJEXT) \ - tests/stub_HelperChildConfig.$(OBJEXT) \ - tests/stub_HttpRequest.$(OBJEXT) tests/stub_http.$(OBJEXT) \ - tests/stub_icp.$(OBJEXT) tests/stub_internal.$(OBJEXT) \ - tests/stub_ipc.$(OBJEXT) tests/stub_ipcache.$(OBJEXT) \ - tests/stub_libauth_acls.$(OBJEXT) tests/stub_libauth.$(OBJEXT) \ - tests/stub_libeui.$(OBJEXT) tests/stub_libformat.$(OBJEXT) \ - tests/stub_libicmp.$(OBJEXT) tests/stub_liblog.$(OBJEXT) \ - tests/stub_MemStore.$(OBJEXT) tests/stub_mime.$(OBJEXT) \ - tests/stub_neighbors.$(OBJEXT) tests/stub_pconn.$(OBJEXT) \ - tests/stub_Port.$(OBJEXT) tests/stub_stat.$(OBJEXT) \ - tests/stub_store_client.$(OBJEXT) \ - tests/stub_store_stats.$(OBJEXT) \ - tests/stub_store_rebuild.$(OBJEXT) tests/stub_UdsOp.$(OBJEXT) \ - tests/testDiskIO.$(OBJEXT) tests/testStoreSupport.$(OBJEXT) \ - tests/stub_time.$(OBJEXT) $(am__objects_12) \ - tests/stub_libanyp.$(OBJEXT) $(am__objects_13) \ - wordlist.$(OBJEXT) tests/stub_tools.$(OBJEXT) + event.$(OBJEXT) tests/stub_fatal.$(OBJEXT) fd.$(OBJEXT) \ + fde.$(OBJEXT) filemap.$(OBJEXT) fs_io.$(OBJEXT) \ + tests/stub_helper.$(OBJEXT) tests/stub_http.$(OBJEXT) \ + tests/stub_icp.$(OBJEXT) int.$(OBJEXT) \ + tests/stub_internal.$(OBJEXT) tests/stub_ipc.$(OBJEXT) \ + tests/stub_ipcache.$(OBJEXT) tests/stub_libanyp.$(OBJEXT) \ + tests/stub_libauth.$(OBJEXT) tests/stub_libauth_acls.$(OBJEXT) \ + tests/stub_liberror.$(OBJEXT) tests/stub_libeui.$(OBJEXT) \ + tests/stub_libformat.$(OBJEXT) tests/stub_libicmp.$(OBJEXT) \ + tests/stub_liblog.$(OBJEXT) tests/stub_libsecurity.$(OBJEXT) \ + tests/stub_libstore.$(OBJEXT) mem_node.$(OBJEXT) \ + tests/stub_mime.$(OBJEXT) tests/stub_neighbors.$(OBJEXT) \ + tests/stub_pconn.$(OBJEXT) refresh.$(OBJEXT) \ + tests/stub_stat.$(OBJEXT) stmem.$(OBJEXT) store.$(OBJEXT) \ + tests/stub_store_client.$(OBJEXT) store_io.$(OBJEXT) \ + store_key_md5.$(OBJEXT) tests/stub_store_rebuild.$(OBJEXT) \ + tests/stub_store_stats.$(OBJEXT) store_swapmeta.$(OBJEXT) \ + store_swapout.$(OBJEXT) tests/stub_time.$(OBJEXT) \ + tests/stub_tools.$(OBJEXT) wordlist.$(OBJEXT) nodist_tests_testDiskIO_OBJECTS = $(am__objects_18) \ - hier_code.$(OBJEXT) SquidMath.$(OBJEXT) swap_log_op.$(OBJEXT) + SquidMath.$(OBJEXT) hier_code.$(OBJEXT) swap_log_op.$(OBJEXT) tests_testDiskIO_OBJECTS = $(am_tests_testDiskIO_OBJECTS) \ $(nodist_tests_testDiskIO_OBJECTS) tests_testDiskIO_DEPENDENCIES = libsquid.la http/libhttp.la \ @@ -829,15 +827,7 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testEnumIterator_LDFLAGS) \ $(LDFLAGS) -o $@ -am__tests_testEvent_SOURCES_DIST = AccessLogEntry.cc BodyPipe.cc \ - CacheDigest.h tests/stub_CacheDigest.cc cache_cf.h AuthReg.h \ - RefreshPattern.h CachePeer.cc CachePeer.h cache_manager.cc \ - carp.h tests/stub_carp.cc cbdata.cc tests/stub_client_db.cc \ - client_side.h client_side.cc client_side_reply.cc \ - client_side_request.cc ClientInfo.h clientStream.cc \ - tests/stub_CollapsedForwarding.cc ConfigOption.cc \ - ConfigParser.cc CpuAffinityMap.cc CpuAffinityMap.h \ - CpuAffinitySet.cc CpuAffinitySet.h debug.cc BandwidthBucket.cc \ +am__tests_testEvent_SOURCES_DIST = BandwidthBucket.cc \ BandwidthBucket.h CommonPool.h CompositePoolNode.h \ delay_pools.cc DelayId.cc DelayId.h DelayIdComposite.h \ DelayBucket.cc DelayBucket.h DelayConfig.cc DelayConfig.h \ @@ -845,113 +835,118 @@ DelayTagged.cc DelayTagged.h DelayUser.cc DelayUser.h \ DelayVector.cc DelayVector.h MessageBucket.cc MessageBucket.h \ MessageDelayPools.h MessageDelayPools.cc NullDelayId.h \ - ClientDelayConfig.cc ClientDelayConfig.h fs_io.h fs_io.cc \ - dlink.h dlink.cc dns_internal.cc errorpage.cc \ - tests/stub_ETag.cc event.cc EventLoop.h EventLoop.cc \ - external_acl.cc ExternalACLEntry.cc FadingCounter.cc fatal.h \ - tests/stub_fatal.cc fd.h fd.cc fde.cc FileMap.h filemap.cc \ - fqdncache.h fqdncache.cc FwdState.cc FwdState.h gopher.h \ - tests/stub_gopher.cc HappyConnOpener.cc HappyConnOpener.h \ - helper.cc hier_code.h htcp.cc htcp.h http.cc HttpBody.h \ - HttpBody.cc tests/stub_HttpControlMsg.cc HttpHeader.h \ - HttpHeader.cc HttpHeaderFieldInfo.h HttpHeaderTools.h \ - HttpHeaderTools.cc HttpHeaderFieldStat.h HttpHdrCc.h \ - HttpHdrCc.cc HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ - HttpHdrScTarget.cc HttpReply.cc PeerPoolMgr.h PeerPoolMgr.cc \ - RequestFlags.h RequestFlags.cc HttpRequest.cc icp_v2.cc \ - icp_v3.cc SquidIpc.h ipc.cc ipc_win32.cc ipcache.cc int.h \ - int.cc internal.h internal.cc LogTags.cc \ - tests/stub_libsecurity.cc MasterXaction.cc MasterXaction.h \ - tests/stub_libmem.cc mem_node.cc MemBuf.cc MemObject.cc mime.h \ - mime.cc mime_header.h mime_header.cc multicast.h multicast.cc \ - neighbors.h neighbors.cc Notes.cc Notes.h Parsing.cc pconn.cc \ - peer_digest.cc peer_proxy_negotiate_auth.h \ - peer_proxy_negotiate_auth.cc peer_select.cc peer_sourcehash.h \ - peer_sourcehash.cc peer_userhash.h peer_userhash.cc \ - Pipeline.cc Pipeline.h redirect.h tests/stub_redirect.cc \ - refresh.h refresh.cc RemovalPolicy.cc ResolvedPeers.h \ - ResolvedPeers.cc StrList.h StrList.cc \ - tests/stub_SBufDetailedStats.cc SnmpRequest.h snmp_core.h \ - snmp_core.cc snmp_agent.h snmp_agent.cc SquidMath.cc \ - SquidMath.h IoStats.h stat.h stat.cc StatCounters.h \ - StatCounters.cc StatHist.h StatHist.cc stmem.cc repl_modules.h \ - store.cc store_client.cc store_digest.h \ - tests/stub_store_digest.cc store_io.cc store_key_md5.h \ - store_key_md5.cc store_log.h store_log.cc store_rebuild.h \ - store_rebuild.cc store_swapin.h store_swapin.cc \ - store_swapmeta.cc store_swapout.cc StoreFileSystem.cc \ - StoreIOState.cc tests/stub_StoreMeta.cc StoreMetaUnpacker.cc \ - StoreSwapLogData.cc String.cc tests/stub_cache_cf.cc \ - tests/stub_HttpUpgradeProtocolAccess.cc tests/stub_libstore.cc \ - tests/CapturingStoreEntry.h tests/testEvent.cc \ - tests/testEvent.h tests/stub_main_cc.cc \ - tests/stub_ipc_Forwarder.cc tests/stub_libauth_acls.cc \ - tests/stub_libauth.cc tests/stub_libdiskio.cc \ - tests/stub_libeui.cc tests/stub_store_stats.cc time.cc tools.h \ - tools.cc Transients.cc tests/stub_tunnel.cc MemStore.cc \ - unlinkd.h unlinkd.cc urn.h urn.cc wccp2.h tests/stub_wccp2.cc \ - whois.h tests/stub_whois.cc win32.cc wordlist.h wordlist.cc -am_tests_testEvent_OBJECTS = AccessLogEntry.$(OBJEXT) \ + ClientDelayConfig.cc ClientDelayConfig.h dns_internal.cc \ + htcp.cc htcp.h SquidIpc.h ipc.cc ipc_win32.cc SnmpRequest.h \ + snmp_core.h snmp_core.cc snmp_agent.h snmp_agent.cc unlinkd.h \ + unlinkd.cc win32.cc AccessLogEntry.cc AuthReg.h BodyPipe.cc \ + tests/stub_CacheDigest.cc CacheDigest.h CachePeer.cc \ + CachePeer.h ClientInfo.h tests/stub_CollapsedForwarding.cc \ + ConfigOption.cc ConfigParser.cc CpuAffinityMap.cc \ + CpuAffinityMap.h CpuAffinitySet.cc CpuAffinitySet.h \ + tests/stub_ETag.cc tests/testEvent.cc tests/testEvent.h \ + EventLoop.cc EventLoop.h ExternalACLEntry.cc FadingCounter.cc \ + FileMap.h FwdState.cc FwdState.h HappyConnOpener.cc \ + HappyConnOpener.h HttpBody.cc HttpBody.h \ + tests/stub_HttpControlMsg.cc HttpHdrCc.cc HttpHdrCc.h \ + HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ + HttpHdrScTarget.cc HttpHeader.cc HttpHeader.h \ + HttpHeaderFieldInfo.h HttpHeaderFieldStat.h HttpHeaderTools.cc \ + HttpHeaderTools.h HttpReply.cc HttpRequest.cc \ + tests/stub_HttpUpgradeProtocolAccess.cc IoStats.h LogTags.cc \ + MasterXaction.cc MasterXaction.h MemBuf.cc MemObject.cc \ + MemStore.cc Notes.cc Notes.h Parsing.cc PeerPoolMgr.cc \ + PeerPoolMgr.h Pipeline.cc Pipeline.h RefreshPattern.h \ + RemovalPolicy.cc RequestFlags.cc RequestFlags.h \ + ResolvedPeers.cc ResolvedPeers.h \ + tests/stub_SBufDetailedStats.cc SquidMath.cc SquidMath.h \ + StatCounters.cc StatCounters.h StatHist.cc StatHist.h \ + StoreFileSystem.cc StoreIOState.cc tests/stub_StoreMeta.cc \ + StoreMetaUnpacker.cc StoreSwapLogData.cc StrList.cc StrList.h \ + String.cc Transients.cc tests/stub_cache_cf.cc cache_cf.h \ + cache_manager.cc tests/stub_carp.cc carp.h cbdata.cc \ + clientStream.cc tests/stub_client_db.cc client_side.cc \ + client_side.h client_side_reply.cc client_side_request.cc \ + debug.cc dlink.cc dlink.h errorpage.cc event.cc \ + external_acl.cc tests/stub_fatal.cc fatal.h fd.cc fd.h fde.cc \ + filemap.cc fqdncache.cc fqdncache.h fs_io.cc fs_io.h \ + tests/stub_gopher.cc gopher.h helper.cc hier_code.h http.cc \ + icp_v2.cc icp_v3.cc int.cc int.h internal.cc internal.h \ + tests/stub_ipc_Forwarder.cc ipcache.cc tests/stub_libauth.cc \ + tests/stub_libauth_acls.cc tests/stub_libdiskio.cc \ + tests/stub_liberror.cc tests/stub_libeui.cc \ + tests/stub_libmem.cc tests/stub_libsecurity.cc \ + tests/stub_libstore.cc tests/stub_main_cc.cc mem_node.cc \ + mime.cc mime.h mime_header.cc mime_header.h multicast.cc \ + multicast.h neighbors.cc neighbors.h pconn.cc peer_digest.cc \ + peer_proxy_negotiate_auth.cc peer_proxy_negotiate_auth.h \ + peer_select.cc peer_sourcehash.cc peer_sourcehash.h \ + peer_userhash.cc peer_userhash.h tests/stub_redirect.cc \ + redirect.h refresh.cc refresh.h repl_modules.h stat.cc stat.h \ + stmem.cc store.cc store_client.cc tests/stub_store_digest.cc \ + store_digest.h store_io.cc store_key_md5.cc store_key_md5.h \ + store_log.cc store_log.h store_rebuild.cc store_rebuild.h \ + tests/stub_store_stats.cc store_swapin.cc store_swapin.h \ + store_swapmeta.cc store_swapout.cc tests/CapturingStoreEntry.h \ + time.cc tools.cc tools.h tests/stub_tunnel.cc urn.cc urn.h \ + tests/stub_wccp2.cc wccp2.h tests/stub_whois.cc whois.h \ + wordlist.cc wordlist.h +am_tests_testEvent_OBJECTS = $(am__objects_3) $(am__objects_4) \ + $(am__objects_5) $(am__objects_6) $(am__objects_9) \ + $(am__objects_11) $(am__objects_12) AccessLogEntry.$(OBJEXT) \ BodyPipe.$(OBJEXT) tests/stub_CacheDigest.$(OBJEXT) \ - CachePeer.$(OBJEXT) cache_manager.$(OBJEXT) \ - tests/stub_carp.$(OBJEXT) cbdata.$(OBJEXT) \ - tests/stub_client_db.$(OBJEXT) client_side.$(OBJEXT) \ - client_side_reply.$(OBJEXT) client_side_request.$(OBJEXT) \ - clientStream.$(OBJEXT) \ - tests/stub_CollapsedForwarding.$(OBJEXT) \ + CachePeer.$(OBJEXT) tests/stub_CollapsedForwarding.$(OBJEXT) \ ConfigOption.$(OBJEXT) ConfigParser.$(OBJEXT) \ CpuAffinityMap.$(OBJEXT) CpuAffinitySet.$(OBJEXT) \ - debug.$(OBJEXT) $(am__objects_3) fs_io.$(OBJEXT) \ - dlink.$(OBJEXT) $(am__objects_4) errorpage.$(OBJEXT) \ - tests/stub_ETag.$(OBJEXT) event.$(OBJEXT) EventLoop.$(OBJEXT) \ - external_acl.$(OBJEXT) ExternalACLEntry.$(OBJEXT) \ - FadingCounter.$(OBJEXT) tests/stub_fatal.$(OBJEXT) \ - fd.$(OBJEXT) fde.$(OBJEXT) filemap.$(OBJEXT) \ - fqdncache.$(OBJEXT) FwdState.$(OBJEXT) \ - tests/stub_gopher.$(OBJEXT) HappyConnOpener.$(OBJEXT) \ - helper.$(OBJEXT) $(am__objects_5) http.$(OBJEXT) \ - HttpBody.$(OBJEXT) tests/stub_HttpControlMsg.$(OBJEXT) \ + tests/stub_ETag.$(OBJEXT) tests/testEvent.$(OBJEXT) \ + EventLoop.$(OBJEXT) ExternalACLEntry.$(OBJEXT) \ + FadingCounter.$(OBJEXT) FwdState.$(OBJEXT) \ + HappyConnOpener.$(OBJEXT) HttpBody.$(OBJEXT) \ + tests/stub_HttpControlMsg.$(OBJEXT) HttpHdrCc.$(OBJEXT) \ + HttpHdrContRange.$(OBJEXT) HttpHdrRange.$(OBJEXT) \ + HttpHdrSc.$(OBJEXT) HttpHdrScTarget.$(OBJEXT) \ HttpHeader.$(OBJEXT) HttpHeaderTools.$(OBJEXT) \ - HttpHdrCc.$(OBJEXT) HttpHdrContRange.$(OBJEXT) \ - HttpHdrRange.$(OBJEXT) HttpHdrSc.$(OBJEXT) \ - HttpHdrScTarget.$(OBJEXT) HttpReply.$(OBJEXT) \ - PeerPoolMgr.$(OBJEXT) RequestFlags.$(OBJEXT) \ - HttpRequest.$(OBJEXT) icp_v2.$(OBJEXT) icp_v3.$(OBJEXT) \ - $(am__objects_6) ipcache.$(OBJEXT) int.$(OBJEXT) \ - internal.$(OBJEXT) LogTags.$(OBJEXT) \ - tests/stub_libsecurity.$(OBJEXT) MasterXaction.$(OBJEXT) \ - tests/stub_libmem.$(OBJEXT) mem_node.$(OBJEXT) \ - MemBuf.$(OBJEXT) MemObject.$(OBJEXT) mime.$(OBJEXT) \ + HttpReply.$(OBJEXT) HttpRequest.$(OBJEXT) \ + tests/stub_HttpUpgradeProtocolAccess.$(OBJEXT) \ + LogTags.$(OBJEXT) MasterXaction.$(OBJEXT) MemBuf.$(OBJEXT) \ + MemObject.$(OBJEXT) MemStore.$(OBJEXT) Notes.$(OBJEXT) \ + Parsing.$(OBJEXT) PeerPoolMgr.$(OBJEXT) Pipeline.$(OBJEXT) \ + RemovalPolicy.$(OBJEXT) RequestFlags.$(OBJEXT) \ + ResolvedPeers.$(OBJEXT) tests/stub_SBufDetailedStats.$(OBJEXT) \ + SquidMath.$(OBJEXT) StatCounters.$(OBJEXT) StatHist.$(OBJEXT) \ + StoreFileSystem.$(OBJEXT) StoreIOState.$(OBJEXT) \ + tests/stub_StoreMeta.$(OBJEXT) StoreMetaUnpacker.$(OBJEXT) \ + StoreSwapLogData.$(OBJEXT) StrList.$(OBJEXT) String.$(OBJEXT) \ + Transients.$(OBJEXT) tests/stub_cache_cf.$(OBJEXT) \ + cache_manager.$(OBJEXT) tests/stub_carp.$(OBJEXT) \ + cbdata.$(OBJEXT) clientStream.$(OBJEXT) \ + tests/stub_client_db.$(OBJEXT) client_side.$(OBJEXT) \ + client_side_reply.$(OBJEXT) client_side_request.$(OBJEXT) \ + debug.$(OBJEXT) dlink.$(OBJEXT) errorpage.$(OBJEXT) \ + event.$(OBJEXT) external_acl.$(OBJEXT) \ + tests/stub_fatal.$(OBJEXT) fd.$(OBJEXT) fde.$(OBJEXT) \ + filemap.$(OBJEXT) fqdncache.$(OBJEXT) fs_io.$(OBJEXT) \ + tests/stub_gopher.$(OBJEXT) helper.$(OBJEXT) http.$(OBJEXT) \ + icp_v2.$(OBJEXT) icp_v3.$(OBJEXT) int.$(OBJEXT) \ + internal.$(OBJEXT) tests/stub_ipc_Forwarder.$(OBJEXT) \ + ipcache.$(OBJEXT) tests/stub_libauth.$(OBJEXT) \ + tests/stub_libauth_acls.$(OBJEXT) \ + tests/stub_libdiskio.$(OBJEXT) tests/stub_liberror.$(OBJEXT) \ + tests/stub_libeui.$(OBJEXT) tests/stub_libmem.$(OBJEXT) \ + tests/stub_libsecurity.$(OBJEXT) tests/stub_libstore.$(OBJEXT) \ + tests/stub_main_cc.$(OBJEXT) mem_node.$(OBJEXT) mime.$(OBJEXT) \ mime_header.$(OBJEXT) multicast.$(OBJEXT) neighbors.$(OBJEXT) \ - Notes.$(OBJEXT) Parsing.$(OBJEXT) pconn.$(OBJEXT) \ - peer_digest.$(OBJEXT) peer_proxy_negotiate_auth.$(OBJEXT) \ - peer_select.$(OBJEXT) peer_sourcehash.$(OBJEXT) \ - peer_userhash.$(OBJEXT) Pipeline.$(OBJEXT) \ - tests/stub_redirect.$(OBJEXT) refresh.$(OBJEXT) \ - RemovalPolicy.$(OBJEXT) ResolvedPeers.$(OBJEXT) \ - StrList.$(OBJEXT) tests/stub_SBufDetailedStats.$(OBJEXT) \ - $(am__objects_10) SquidMath.$(OBJEXT) stat.$(OBJEXT) \ - StatCounters.$(OBJEXT) StatHist.$(OBJEXT) stmem.$(OBJEXT) \ - store.$(OBJEXT) store_client.$(OBJEXT) \ + pconn.$(OBJEXT) peer_digest.$(OBJEXT) \ + peer_proxy_negotiate_auth.$(OBJEXT) peer_select.$(OBJEXT) \ + peer_sourcehash.$(OBJEXT) peer_userhash.$(OBJEXT) \ + tests/stub_redirect.$(OBJEXT) refresh.$(OBJEXT) stat.$(OBJEXT) \ + stmem.$(OBJEXT) store.$(OBJEXT) store_client.$(OBJEXT) \ tests/stub_store_digest.$(OBJEXT) store_io.$(OBJEXT) \ store_key_md5.$(OBJEXT) store_log.$(OBJEXT) \ - store_rebuild.$(OBJEXT) store_swapin.$(OBJEXT) \ - store_swapmeta.$(OBJEXT) store_swapout.$(OBJEXT) \ - StoreFileSystem.$(OBJEXT) StoreIOState.$(OBJEXT) \ - tests/stub_StoreMeta.$(OBJEXT) StoreMetaUnpacker.$(OBJEXT) \ - StoreSwapLogData.$(OBJEXT) String.$(OBJEXT) \ - tests/stub_cache_cf.$(OBJEXT) \ - tests/stub_HttpUpgradeProtocolAccess.$(OBJEXT) \ - tests/stub_libstore.$(OBJEXT) tests/testEvent.$(OBJEXT) \ - tests/stub_main_cc.$(OBJEXT) \ - tests/stub_ipc_Forwarder.$(OBJEXT) \ - tests/stub_libauth_acls.$(OBJEXT) tests/stub_libauth.$(OBJEXT) \ - tests/stub_libdiskio.$(OBJEXT) tests/stub_libeui.$(OBJEXT) \ - tests/stub_store_stats.$(OBJEXT) time.$(OBJEXT) \ - tools.$(OBJEXT) Transients.$(OBJEXT) \ - tests/stub_tunnel.$(OBJEXT) MemStore.$(OBJEXT) \ - $(am__objects_12) urn.$(OBJEXT) tests/stub_wccp2.$(OBJEXT) \ - tests/stub_whois.$(OBJEXT) $(am__objects_13) \ + store_rebuild.$(OBJEXT) tests/stub_store_stats.$(OBJEXT) \ + store_swapin.$(OBJEXT) store_swapmeta.$(OBJEXT) \ + store_swapout.$(OBJEXT) time.$(OBJEXT) tools.$(OBJEXT) \ + tests/stub_tunnel.$(OBJEXT) urn.$(OBJEXT) \ + tests/stub_wccp2.$(OBJEXT) tests/stub_whois.$(OBJEXT) \ wordlist.$(OBJEXT) nodist_tests_testEvent_OBJECTS = $(am__objects_17) tests_testEvent_OBJECTS = $(am_tests_testEvent_OBJECTS) \ @@ -970,21 +965,13 @@ store/libstore.la sbuf/libsbuf.la $(am__DEPENDENCIES_5) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_3) \ - $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) tests_testEvent_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testEvent_LDFLAGS) \ $(LDFLAGS) -o $@ -am__tests_testEventLoop_SOURCES_DIST = AccessLogEntry.cc BodyPipe.cc \ - CacheDigest.h tests/stub_CacheDigest.cc cache_manager.cc \ - cache_cf.h AuthReg.h RefreshPattern.h CachePeer.cc CachePeer.h \ - carp.h tests/stub_carp.cc cbdata.cc tests/stub_client_db.cc \ - client_side.h client_side.cc client_side_reply.cc \ - client_side_request.cc ClientInfo.h clientStream.cc \ - tests/stub_CollapsedForwarding.cc ConfigOption.cc \ - ConfigParser.cc CpuAffinityMap.cc CpuAffinityMap.h \ - CpuAffinitySet.cc CpuAffinitySet.h debug.cc BandwidthBucket.cc \ +am__tests_testEventLoop_SOURCES_DIST = BandwidthBucket.cc \ BandwidthBucket.h CommonPool.h CompositePoolNode.h \ delay_pools.cc DelayId.cc DelayId.h DelayIdComposite.h \ DelayBucket.cc DelayBucket.h DelayConfig.cc DelayConfig.h \ @@ -992,112 +979,117 @@ DelayTagged.cc DelayTagged.h DelayUser.cc DelayUser.h \ DelayVector.cc DelayVector.h MessageBucket.cc MessageBucket.h \ MessageDelayPools.h MessageDelayPools.cc NullDelayId.h \ - ClientDelayConfig.cc ClientDelayConfig.h fs_io.h fs_io.cc \ - dlink.h dlink.cc dns_internal.cc errorpage.cc \ - tests/stub_ETag.cc EventLoop.h EventLoop.cc event.cc \ - external_acl.cc ExternalACLEntry.cc FadingCounter.cc fatal.h \ - tests/stub_fatal.cc fd.h fd.cc fde.cc FileMap.h filemap.cc \ - fqdncache.h fqdncache.cc FwdState.cc FwdState.h gopher.h \ - tests/stub_gopher.cc HappyConnOpener.cc HappyConnOpener.h \ - helper.cc hier_code.h htcp.cc htcp.h http.cc HttpBody.h \ - HttpBody.cc tests/stub_HttpControlMsg.cc HttpHeader.h \ - HttpHeader.cc HttpHeaderFieldInfo.h HttpHeaderTools.h \ - HttpHeaderTools.cc HttpHeaderFieldStat.h HttpHdrCc.h \ - HttpHdrCc.cc HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ - HttpHdrScTarget.cc HttpReply.cc PeerPoolMgr.h PeerPoolMgr.cc \ - RequestFlags.h RequestFlags.cc HttpRequest.cc icp_v2.cc \ - icp_v3.cc SquidIpc.h ipc.cc ipc_win32.cc ipcache.cc int.h \ - int.cc internal.h internal.cc LogTags.cc MasterXaction.cc \ - MasterXaction.h MemBuf.cc MemObject.cc tests/stub_libmem.cc \ - mem_node.cc mime.h mime.cc mime_header.h mime_header.cc \ - multicast.h multicast.cc neighbors.h neighbors.cc Notes.cc \ - Notes.h Parsing.cc pconn.cc peer_digest.cc \ - peer_proxy_negotiate_auth.h peer_proxy_negotiate_auth.cc \ - peer_select.cc peer_sourcehash.h peer_sourcehash.cc \ - peer_userhash.h peer_userhash.cc Pipeline.cc Pipeline.h \ - RemovalPolicy.cc ResolvedPeers.cc ResolvedPeers.h redirect.h \ - tests/stub_redirect.cc refresh.h refresh.cc \ - tests/stub_SBufDetailedStats.cc SnmpRequest.h snmp_core.h \ - snmp_core.cc snmp_agent.h snmp_agent.cc SquidMath.h \ - SquidMath.cc IoStats.h stat.h stat.cc StatCounters.h \ - StatCounters.cc StatHist.h StatHist.cc stmem.cc repl_modules.h \ - store.cc store_client.cc store_digest.h \ - tests/stub_store_digest.cc store_io.cc store_key_md5.h \ - store_key_md5.cc store_log.h store_log.cc store_rebuild.h \ - store_rebuild.cc store_swapin.h store_swapin.cc \ - store_swapmeta.cc store_swapout.cc StoreFileSystem.cc \ - StoreIOState.cc tests/stub_StoreMeta.cc StoreMetaUnpacker.cc \ - StoreSwapLogData.cc String.cc StrList.h StrList.cc \ - tests/stub_cache_cf.cc tests/stub_HttpUpgradeProtocolAccess.cc \ - tests/stub_libstore.cc tests/testEventLoop.cc \ - tests/testEventLoop.h tests/stub_main_cc.cc \ - tests/stub_ipc_Forwarder.cc tests/stub_libauth_acls.cc \ - tests/stub_libauth.cc tests/stub_libdiskio.cc \ - tests/stub_libeui.cc tests/stub_libsecurity.cc \ - tests/stub_store_stats.cc time.cc tools.h tools.cc \ - Transients.cc tests/stub_tunnel.cc MemStore.cc unlinkd.h \ - unlinkd.cc urn.h urn.cc wccp2.h tests/stub_wccp2.cc whois.h \ - tests/stub_whois.cc win32.cc wordlist.h wordlist.cc -am_tests_testEventLoop_OBJECTS = AccessLogEntry.$(OBJEXT) \ + ClientDelayConfig.cc ClientDelayConfig.h dns_internal.cc \ + htcp.cc htcp.h SquidIpc.h ipc.cc ipc_win32.cc SnmpRequest.h \ + snmp_core.h snmp_core.cc snmp_agent.h snmp_agent.cc unlinkd.h \ + unlinkd.cc win32.cc AccessLogEntry.cc AuthReg.h BodyPipe.cc \ + tests/stub_CacheDigest.cc CacheDigest.h CachePeer.cc \ + CachePeer.h ClientInfo.h tests/stub_CollapsedForwarding.cc \ + ConfigOption.cc ConfigParser.cc CpuAffinityMap.cc \ + CpuAffinityMap.h CpuAffinitySet.cc CpuAffinitySet.h \ + tests/stub_ETag.cc EventLoop.cc tests/testEventLoop.cc \ + EventLoop.h tests/testEventLoop.h ExternalACLEntry.cc \ + FadingCounter.cc FileMap.h FwdState.cc FwdState.h \ + HappyConnOpener.cc HappyConnOpener.h HttpBody.cc HttpBody.h \ + tests/stub_HttpControlMsg.cc HttpHdrCc.cc HttpHdrCc.h \ + HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ + HttpHdrScTarget.cc HttpHeader.cc HttpHeader.h \ + HttpHeaderFieldInfo.h HttpHeaderFieldStat.h HttpHeaderTools.cc \ + HttpHeaderTools.h HttpReply.cc HttpRequest.cc \ + tests/stub_HttpUpgradeProtocolAccess.cc IoStats.h LogTags.cc \ + MasterXaction.cc MasterXaction.h MemBuf.cc MemObject.cc \ + MemStore.cc Notes.cc Notes.h Parsing.cc PeerPoolMgr.cc \ + PeerPoolMgr.h Pipeline.cc Pipeline.h RefreshPattern.h \ + RemovalPolicy.cc RequestFlags.cc RequestFlags.h \ + ResolvedPeers.cc ResolvedPeers.h \ + tests/stub_SBufDetailedStats.cc SquidMath.cc SquidMath.h \ + StatCounters.cc StatCounters.h StatHist.cc StatHist.h \ + StoreFileSystem.cc StoreIOState.cc tests/stub_StoreMeta.cc \ + StoreMetaUnpacker.cc StoreSwapLogData.cc StrList.cc StrList.h \ + String.cc Transients.cc tests/stub_cache_cf.cc cache_cf.h \ + cache_manager.cc tests/stub_carp.cc carp.h cbdata.cc \ + clientStream.cc tests/stub_client_db.cc client_side.cc \ + client_side.h client_side_reply.cc client_side_request.cc \ + debug.cc dlink.cc dlink.h errorpage.cc event.cc \ + external_acl.cc tests/stub_fatal.cc fatal.h fd.cc fd.h fde.cc \ + filemap.cc fqdncache.cc fqdncache.h fs_io.cc fs_io.h \ + tests/stub_gopher.cc gopher.h helper.cc hier_code.h http.cc \ + icp_v2.cc icp_v3.cc int.cc int.h internal.cc internal.h \ + tests/stub_ipc_Forwarder.cc ipcache.cc tests/stub_libauth.cc \ + tests/stub_libauth_acls.cc tests/stub_libdiskio.cc \ + tests/stub_liberror.cc tests/stub_libeui.cc \ + tests/stub_libmem.cc tests/stub_libsecurity.cc \ + tests/stub_libstore.cc tests/stub_main_cc.cc mem_node.cc \ + mime.cc mime.h mime_header.cc mime_header.h multicast.cc \ + multicast.h neighbors.cc neighbors.h pconn.cc peer_digest.cc \ + peer_proxy_negotiate_auth.cc peer_proxy_negotiate_auth.h \ + peer_select.cc peer_sourcehash.cc peer_sourcehash.h \ + peer_userhash.cc peer_userhash.h tests/stub_redirect.cc \ + redirect.h refresh.cc refresh.h repl_modules.h stat.cc stat.h \ + stmem.cc store.cc store_client.cc tests/stub_store_digest.cc \ + store_digest.h store_io.cc store_key_md5.cc store_key_md5.h \ + store_log.cc store_log.h store_rebuild.cc store_rebuild.h \ + tests/stub_store_stats.cc store_swapin.cc store_swapin.h \ + store_swapmeta.cc store_swapout.cc time.cc tools.cc tools.h \ + tests/stub_tunnel.cc urn.cc urn.h tests/stub_wccp2.cc wccp2.h \ + tests/stub_whois.cc whois.h wordlist.cc wordlist.h +am_tests_testEventLoop_OBJECTS = $(am__objects_3) $(am__objects_4) \ + $(am__objects_5) $(am__objects_6) $(am__objects_9) \ + $(am__objects_11) $(am__objects_12) AccessLogEntry.$(OBJEXT) \ BodyPipe.$(OBJEXT) tests/stub_CacheDigest.$(OBJEXT) \ - cache_manager.$(OBJEXT) CachePeer.$(OBJEXT) \ - tests/stub_carp.$(OBJEXT) cbdata.$(OBJEXT) \ - tests/stub_client_db.$(OBJEXT) client_side.$(OBJEXT) \ - client_side_reply.$(OBJEXT) client_side_request.$(OBJEXT) \ - clientStream.$(OBJEXT) \ - tests/stub_CollapsedForwarding.$(OBJEXT) \ + CachePeer.$(OBJEXT) tests/stub_CollapsedForwarding.$(OBJEXT) \ ConfigOption.$(OBJEXT) ConfigParser.$(OBJEXT) \ CpuAffinityMap.$(OBJEXT) CpuAffinitySet.$(OBJEXT) \ - debug.$(OBJEXT) $(am__objects_3) fs_io.$(OBJEXT) \ - dlink.$(OBJEXT) $(am__objects_4) errorpage.$(OBJEXT) \ - tests/stub_ETag.$(OBJEXT) EventLoop.$(OBJEXT) event.$(OBJEXT) \ - external_acl.$(OBJEXT) ExternalACLEntry.$(OBJEXT) \ - FadingCounter.$(OBJEXT) tests/stub_fatal.$(OBJEXT) \ - fd.$(OBJEXT) fde.$(OBJEXT) filemap.$(OBJEXT) \ - fqdncache.$(OBJEXT) FwdState.$(OBJEXT) \ - tests/stub_gopher.$(OBJEXT) HappyConnOpener.$(OBJEXT) \ - helper.$(OBJEXT) $(am__objects_5) http.$(OBJEXT) \ - HttpBody.$(OBJEXT) tests/stub_HttpControlMsg.$(OBJEXT) \ + tests/stub_ETag.$(OBJEXT) EventLoop.$(OBJEXT) \ + tests/testEventLoop.$(OBJEXT) ExternalACLEntry.$(OBJEXT) \ + FadingCounter.$(OBJEXT) FwdState.$(OBJEXT) \ + HappyConnOpener.$(OBJEXT) HttpBody.$(OBJEXT) \ + tests/stub_HttpControlMsg.$(OBJEXT) HttpHdrCc.$(OBJEXT) \ + HttpHdrContRange.$(OBJEXT) HttpHdrRange.$(OBJEXT) \ + HttpHdrSc.$(OBJEXT) HttpHdrScTarget.$(OBJEXT) \ HttpHeader.$(OBJEXT) HttpHeaderTools.$(OBJEXT) \ - HttpHdrCc.$(OBJEXT) HttpHdrContRange.$(OBJEXT) \ - HttpHdrRange.$(OBJEXT) HttpHdrSc.$(OBJEXT) \ - HttpHdrScTarget.$(OBJEXT) HttpReply.$(OBJEXT) \ - PeerPoolMgr.$(OBJEXT) RequestFlags.$(OBJEXT) \ - HttpRequest.$(OBJEXT) icp_v2.$(OBJEXT) icp_v3.$(OBJEXT) \ - $(am__objects_6) ipcache.$(OBJEXT) int.$(OBJEXT) \ - internal.$(OBJEXT) LogTags.$(OBJEXT) MasterXaction.$(OBJEXT) \ - MemBuf.$(OBJEXT) MemObject.$(OBJEXT) \ - tests/stub_libmem.$(OBJEXT) mem_node.$(OBJEXT) mime.$(OBJEXT) \ - mime_header.$(OBJEXT) multicast.$(OBJEXT) neighbors.$(OBJEXT) \ - Notes.$(OBJEXT) Parsing.$(OBJEXT) pconn.$(OBJEXT) \ - peer_digest.$(OBJEXT) peer_proxy_negotiate_auth.$(OBJEXT) \ - peer_select.$(OBJEXT) peer_sourcehash.$(OBJEXT) \ - peer_userhash.$(OBJEXT) Pipeline.$(OBJEXT) \ - RemovalPolicy.$(OBJEXT) ResolvedPeers.$(OBJEXT) \ - tests/stub_redirect.$(OBJEXT) refresh.$(OBJEXT) \ - tests/stub_SBufDetailedStats.$(OBJEXT) $(am__objects_10) \ - SquidMath.$(OBJEXT) stat.$(OBJEXT) StatCounters.$(OBJEXT) \ - StatHist.$(OBJEXT) stmem.$(OBJEXT) store.$(OBJEXT) \ - store_client.$(OBJEXT) tests/stub_store_digest.$(OBJEXT) \ - store_io.$(OBJEXT) store_key_md5.$(OBJEXT) store_log.$(OBJEXT) \ - store_rebuild.$(OBJEXT) store_swapin.$(OBJEXT) \ - store_swapmeta.$(OBJEXT) store_swapout.$(OBJEXT) \ + HttpReply.$(OBJEXT) HttpRequest.$(OBJEXT) \ + tests/stub_HttpUpgradeProtocolAccess.$(OBJEXT) \ + LogTags.$(OBJEXT) MasterXaction.$(OBJEXT) MemBuf.$(OBJEXT) \ + MemObject.$(OBJEXT) MemStore.$(OBJEXT) Notes.$(OBJEXT) \ + Parsing.$(OBJEXT) PeerPoolMgr.$(OBJEXT) Pipeline.$(OBJEXT) \ + RemovalPolicy.$(OBJEXT) RequestFlags.$(OBJEXT) \ + ResolvedPeers.$(OBJEXT) tests/stub_SBufDetailedStats.$(OBJEXT) \ + SquidMath.$(OBJEXT) StatCounters.$(OBJEXT) StatHist.$(OBJEXT) \ StoreFileSystem.$(OBJEXT) StoreIOState.$(OBJEXT) \ tests/stub_StoreMeta.$(OBJEXT) StoreMetaUnpacker.$(OBJEXT) \ - StoreSwapLogData.$(OBJEXT) String.$(OBJEXT) StrList.$(OBJEXT) \ - tests/stub_cache_cf.$(OBJEXT) \ - tests/stub_HttpUpgradeProtocolAccess.$(OBJEXT) \ - tests/stub_libstore.$(OBJEXT) tests/testEventLoop.$(OBJEXT) \ - tests/stub_main_cc.$(OBJEXT) \ - tests/stub_ipc_Forwarder.$(OBJEXT) \ - tests/stub_libauth_acls.$(OBJEXT) tests/stub_libauth.$(OBJEXT) \ - tests/stub_libdiskio.$(OBJEXT) tests/stub_libeui.$(OBJEXT) \ - tests/stub_libsecurity.$(OBJEXT) \ - tests/stub_store_stats.$(OBJEXT) time.$(OBJEXT) \ - tools.$(OBJEXT) Transients.$(OBJEXT) \ - tests/stub_tunnel.$(OBJEXT) MemStore.$(OBJEXT) \ - $(am__objects_12) urn.$(OBJEXT) tests/stub_wccp2.$(OBJEXT) \ - tests/stub_whois.$(OBJEXT) $(am__objects_13) \ + StoreSwapLogData.$(OBJEXT) StrList.$(OBJEXT) String.$(OBJEXT) \ + Transients.$(OBJEXT) tests/stub_cache_cf.$(OBJEXT) \ + cache_manager.$(OBJEXT) tests/stub_carp.$(OBJEXT) \ + cbdata.$(OBJEXT) clientStream.$(OBJEXT) \ + tests/stub_client_db.$(OBJEXT) client_side.$(OBJEXT) \ + client_side_reply.$(OBJEXT) client_side_request.$(OBJEXT) \ + debug.$(OBJEXT) dlink.$(OBJEXT) errorpage.$(OBJEXT) \ + event.$(OBJEXT) external_acl.$(OBJEXT) \ + tests/stub_fatal.$(OBJEXT) fd.$(OBJEXT) fde.$(OBJEXT) \ + filemap.$(OBJEXT) fqdncache.$(OBJEXT) fs_io.$(OBJEXT) \ + tests/stub_gopher.$(OBJEXT) helper.$(OBJEXT) http.$(OBJEXT) \ + icp_v2.$(OBJEXT) icp_v3.$(OBJEXT) int.$(OBJEXT) \ + internal.$(OBJEXT) tests/stub_ipc_Forwarder.$(OBJEXT) \ + ipcache.$(OBJEXT) tests/stub_libauth.$(OBJEXT) \ + tests/stub_libauth_acls.$(OBJEXT) \ + tests/stub_libdiskio.$(OBJEXT) tests/stub_liberror.$(OBJEXT) \ + tests/stub_libeui.$(OBJEXT) tests/stub_libmem.$(OBJEXT) \ + tests/stub_libsecurity.$(OBJEXT) tests/stub_libstore.$(OBJEXT) \ + tests/stub_main_cc.$(OBJEXT) mem_node.$(OBJEXT) mime.$(OBJEXT) \ + mime_header.$(OBJEXT) multicast.$(OBJEXT) neighbors.$(OBJEXT) \ + pconn.$(OBJEXT) peer_digest.$(OBJEXT) \ + peer_proxy_negotiate_auth.$(OBJEXT) peer_select.$(OBJEXT) \ + peer_sourcehash.$(OBJEXT) peer_userhash.$(OBJEXT) \ + tests/stub_redirect.$(OBJEXT) refresh.$(OBJEXT) stat.$(OBJEXT) \ + stmem.$(OBJEXT) store.$(OBJEXT) store_client.$(OBJEXT) \ + tests/stub_store_digest.$(OBJEXT) store_io.$(OBJEXT) \ + store_key_md5.$(OBJEXT) store_log.$(OBJEXT) \ + store_rebuild.$(OBJEXT) tests/stub_store_stats.$(OBJEXT) \ + store_swapin.$(OBJEXT) store_swapmeta.$(OBJEXT) \ + store_swapout.$(OBJEXT) time.$(OBJEXT) tools.$(OBJEXT) \ + tests/stub_tunnel.$(OBJEXT) urn.$(OBJEXT) \ + tests/stub_wccp2.$(OBJEXT) tests/stub_whois.$(OBJEXT) \ wordlist.$(OBJEXT) nodist_tests_testEventLoop_OBJECTS = $(am__objects_17) tests_testEventLoop_OBJECTS = $(am_tests_testEventLoop_OBJECTS) \ @@ -1116,25 +1108,26 @@ sbuf/libsbuf.la store/libstore.la $(am__DEPENDENCIES_5) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_3) \ - $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) tests_testEventLoop_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testEventLoop_LDFLAGS) \ $(LDFLAGS) -o $@ -am_tests_testHttp1Parser_OBJECTS = MemBuf.$(OBJEXT) \ - tests/stub_MemObject.$(OBJEXT) mime_header.$(OBJEXT) \ - String.$(OBJEXT) tests/stub_SBufDetailedStats.$(OBJEXT) \ - tests/stub_cache_cf.$(OBJEXT) \ - tests/stub_cache_manager.$(OBJEXT) tests/stub_comm.$(OBJEXT) \ - tests/stub_cbdata.$(OBJEXT) tests/stub_debug.$(OBJEXT) \ - tests/stub_event.$(OBJEXT) \ +am_tests_testHttp1Parser_OBJECTS = \ tests/stub_HelperChildConfig.$(OBJEXT) \ + tests/testHttp1Parser.$(OBJEXT) MemBuf.$(OBJEXT) \ + tests/stub_MemObject.$(OBJEXT) \ + tests/stub_SBufDetailedStats.$(OBJEXT) String.$(OBJEXT) \ + tests/stub_cache_cf.$(OBJEXT) \ + tests/stub_cache_manager.$(OBJEXT) tests/stub_cbdata.$(OBJEXT) \ + tests/stub_comm.$(OBJEXT) tests/stub_debug.$(OBJEXT) \ + tests/stub_event.$(OBJEXT) tests/stub_libanyp.$(OBJEXT) \ tests/stub_libmem.$(OBJEXT) tests/stub_libsecurity.$(OBJEXT) \ - tests/stub_stmem.$(OBJEXT) tests/stub_store.$(OBJEXT) \ - tests/stub_store_stats.$(OBJEXT) tests/stub_tools.$(OBJEXT) \ - tests/testHttp1Parser.$(OBJEXT) tests/stub_time.$(OBJEXT) \ - tests/stub_libanyp.$(OBJEXT) wordlist.$(OBJEXT) + mime_header.$(OBJEXT) tests/stub_stmem.$(OBJEXT) \ + tests/stub_store.$(OBJEXT) tests/stub_store_stats.$(OBJEXT) \ + tests/stub_time.$(OBJEXT) tests/stub_tools.$(OBJEXT) \ + wordlist.$(OBJEXT) nodist_tests_testHttp1Parser_OBJECTS = $(am__objects_18) tests_testHttp1Parser_OBJECTS = $(am_tests_testHttp1Parser_OBJECTS) \ $(nodist_tests_testHttp1Parser_OBJECTS) @@ -1148,30 +1141,31 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testHttp1Parser_LDFLAGS) \ $(LDFLAGS) -o $@ -am_tests_testHttpReply_OBJECTS = cbdata.$(OBJEXT) \ - ConfigParser.$(OBJEXT) tests/stub_ETag.$(OBJEXT) \ - tests/stub_fatal.$(OBJEXT) HttpBody.$(OBJEXT) \ - HttpHdrCc.$(OBJEXT) HttpHdrContRange.$(OBJEXT) \ - HttpHdrRange.$(OBJEXT) HttpHdrSc.$(OBJEXT) \ - HttpHdrScTarget.$(OBJEXT) HttpHeader.$(OBJEXT) \ - HttpHeaderTools.$(OBJEXT) HttpControlMsg.$(OBJEXT) \ - HttpReply.$(OBJEXT) MasterXaction.$(OBJEXT) MemBuf.$(OBJEXT) \ - mime_header.$(OBJEXT) Notes.$(OBJEXT) \ - tests/stub_SBufDetailedStats.$(OBJEXT) String.$(OBJEXT) \ - StrList.$(OBJEXT) tests/stub_access_log.$(OBJEXT) \ +am_tests_testHttpReply_OBJECTS = ConfigParser.$(OBJEXT) \ + tests/stub_ETag.$(OBJEXT) \ + tests/stub_HelperChildConfig.$(OBJEXT) HttpBody.$(OBJEXT) \ + HttpControlMsg.$(OBJEXT) HttpHdrCc.$(OBJEXT) \ + HttpHdrContRange.$(OBJEXT) HttpHdrRange.$(OBJEXT) \ + HttpHdrSc.$(OBJEXT) HttpHdrScTarget.$(OBJEXT) \ + HttpHeader.$(OBJEXT) HttpHeaderTools.$(OBJEXT) \ + HttpReply.$(OBJEXT) tests/testHttpReply.$(OBJEXT) \ + tests/stub_HttpRequest.$(OBJEXT) MasterXaction.$(OBJEXT) \ + MemBuf.$(OBJEXT) Notes.$(OBJEXT) \ + tests/stub_SBufDetailedStats.$(OBJEXT) StatCounters.$(OBJEXT) \ + tests/stub_StatHist.$(OBJEXT) StrList.$(OBJEXT) \ + String.$(OBJEXT) tests/stub_access_log.$(OBJEXT) \ tests/stub_cache_cf.$(OBJEXT) \ - tests/stub_cache_manager.$(OBJEXT) tests/stub_comm.$(OBJEXT) \ - tests/stub_debug.$(OBJEXT) tests/stub_errorpage.$(OBJEXT) \ - tests/stub_event.$(OBJEXT) tests/stub_fd.$(OBJEXT) \ - tests/stub_HelperChildConfig.$(OBJEXT) \ - tests/stub_libformat.$(OBJEXT) tests/stub_libauth.$(OBJEXT) \ - tests/stub_libcomm.$(OBJEXT) tests/stub_libmgr.$(OBJEXT) \ + tests/stub_cache_manager.$(OBJEXT) cbdata.$(OBJEXT) \ + tests/stub_comm.$(OBJEXT) tests/stub_debug.$(OBJEXT) \ + tests/stub_errorpage.$(OBJEXT) tests/stub_event.$(OBJEXT) \ + tests/stub_fatal.$(OBJEXT) tests/stub_fd.$(OBJEXT) \ + tests/stub_libanyp.$(OBJEXT) tests/stub_libauth.$(OBJEXT) \ + tests/stub_libcomm.$(OBJEXT) tests/stub_liberror.$(OBJEXT) \ + tests/stub_libformat.$(OBJEXT) tests/stub_libmgr.$(OBJEXT) \ tests/stub_libsecurity.$(OBJEXT) \ - tests/stub_libsslsquid.$(OBJEXT) StatCounters.$(OBJEXT) \ - tests/stub_StatHist.$(OBJEXT) tests/stub_store.$(OBJEXT) \ - tests/stub_store_stats.$(OBJEXT) tests/stub_tools.$(OBJEXT) \ - tests/stub_HttpRequest.$(OBJEXT) tests/testHttpReply.$(OBJEXT) \ - tests/stub_time.$(OBJEXT) tests/stub_libanyp.$(OBJEXT) \ + tests/stub_libsslsquid.$(OBJEXT) mime_header.$(OBJEXT) \ + tests/stub_store.$(OBJEXT) tests/stub_store_stats.$(OBJEXT) \ + tests/stub_time.$(OBJEXT) tests/stub_tools.$(OBJEXT) \ wordlist.$(OBJEXT) nodist_tests_testHttpReply_OBJECTS = $(am__objects_18) \ hier_code.$(OBJEXT) @@ -1190,23 +1184,7 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testHttpReply_LDFLAGS) \ $(LDFLAGS) -o $@ -am__tests_testHttpRequest_SOURCES_DIST = AccessLogEntry.cc \ - RequestFlags.h RequestFlags.cc HttpRequest.cc \ - tests/stub_libmem.cc String.cc tests/testHttpRequest.h \ - tests/testHttpRequest.cc tests/testHttpRequestMethod.h \ - tests/testHttpRequestMethod.cc tests/stub_libauth.cc \ - tests/stub_main_cc.cc tests/stub_ipc_Forwarder.cc \ - tests/stub_libdiskio.cc tests/stub_libeui.cc \ - tests/stub_store_stats.cc tests/stub_EventLoop.cc time.cc \ - BodyPipe.cc cache_manager.cc cache_cf.h AuthReg.h \ - RefreshPattern.h debug.cc CacheDigest.h \ - tests/stub_CacheDigest.cc CachePeer.cc CachePeer.h carp.h \ - tests/stub_carp.cc cbdata.cc tests/stub_client_db.cc \ - client_side.h client_side.cc client_side_reply.cc \ - client_side_request.cc ClientInfo.h clientStream.cc \ - tests/stub_CollapsedForwarding.cc ConfigOption.cc \ - ConfigParser.cc CpuAffinityMap.cc CpuAffinityMap.h \ - CpuAffinitySet.cc CpuAffinitySet.h BandwidthBucket.cc \ +am__tests_testHttpRequest_SOURCES_DIST = BandwidthBucket.cc \ BandwidthBucket.h CommonPool.h CompositePoolNode.h \ delay_pools.cc DelayId.cc DelayId.h DelayIdComposite.h \ DelayBucket.cc DelayBucket.h DelayConfig.cc DelayConfig.h \ @@ -1214,107 +1192,120 @@ DelayTagged.cc DelayTagged.h DelayUser.cc DelayUser.h \ DelayVector.cc DelayVector.h MessageBucket.cc MessageBucket.h \ MessageDelayPools.h MessageDelayPools.cc NullDelayId.h \ - ClientDelayConfig.cc ClientDelayConfig.h fs_io.h fs_io.cc \ - dlink.h dlink.cc dns_internal.cc errorpage.cc \ - tests/stub_ETag.cc external_acl.cc ExternalACLEntry.cc fatal.h \ - tests/stub_fatal.cc fd.h fd.cc fde.cc fqdncache.h fqdncache.cc \ - FwdState.cc FwdState.h gopher.h tests/stub_gopher.cc \ - HappyConnOpener.cc HappyConnOpener.h helper.cc hier_code.h \ - htcp.cc htcp.h http.cc HttpBody.h HttpBody.cc \ - tests/stub_HttpControlMsg.cc HttpHeader.h HttpHeader.cc \ - HttpHeaderFieldInfo.h HttpHeaderTools.h HttpHeaderTools.cc \ - HttpHeaderFieldStat.h HttpHdrCc.h HttpHdrCc.cc \ + ClientDelayConfig.cc ClientDelayConfig.h dns_internal.cc \ + htcp.cc htcp.h SquidIpc.h ipc.cc ipc_win32.cc SnmpRequest.h \ + snmp_core.h snmp_core.cc snmp_agent.h snmp_agent.cc win32.cc \ + AccessLogEntry.cc AuthReg.h BodyPipe.cc \ + tests/stub_CacheDigest.cc CacheDigest.h CachePeer.cc \ + CachePeer.h ClientInfo.h tests/stub_CollapsedForwarding.cc \ + ConfigOption.cc ConfigParser.cc CpuAffinityMap.cc \ + CpuAffinityMap.h CpuAffinitySet.cc CpuAffinitySet.h \ + tests/stub_ETag.cc tests/stub_EventLoop.cc ExternalACLEntry.cc \ + FadingCounter.cc FwdState.cc FwdState.h HappyConnOpener.cc \ + HappyConnOpener.h HttpBody.cc HttpBody.h \ + tests/stub_HttpControlMsg.cc HttpHdrCc.cc HttpHdrCc.h \ HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ - HttpHdrScTarget.cc HttpReply.cc icp_v2.cc icp_v3.cc SquidIpc.h \ - ipc.cc ipc_win32.cc ipcache.cc int.h int.cc internal.h \ - internal.cc LogTags.cc tests/stub_libsecurity.cc \ - MasterXaction.cc MasterXaction.h multicast.h multicast.cc \ - mem_node.cc MemBuf.cc MemObject.cc mime.h mime.cc \ - mime_header.h mime_header.cc neighbors.h neighbors.cc Notes.cc \ - Notes.h Parsing.cc pconn.cc peer_digest.cc \ - peer_proxy_negotiate_auth.h peer_proxy_negotiate_auth.cc \ - peer_select.cc peer_sourcehash.h peer_sourcehash.cc \ - peer_userhash.h peer_userhash.cc PeerPoolMgr.h PeerPoolMgr.cc \ - Pipeline.cc Pipeline.h redirect.h tests/stub_libauth_acls.cc \ - tests/stub_redirect.cc refresh.h refresh.cc RemovalPolicy.cc \ + HttpHdrScTarget.cc HttpHeader.cc HttpHeader.h \ + HttpHeaderFieldInfo.h HttpHeaderFieldStat.h HttpHeaderTools.cc \ + HttpHeaderTools.h HttpReply.cc HttpRequest.cc \ + tests/testHttpRequest.cc tests/testHttpRequest.h \ + tests/testHttpRequestMethod.cc tests/testHttpRequestMethod.h \ + tests/stub_HttpUpgradeProtocolAccess.cc IoStats.h LogTags.cc \ + MasterXaction.cc MasterXaction.h MemBuf.cc MemObject.cc \ + MemStore.cc Notes.cc Notes.h Parsing.cc PeerPoolMgr.cc \ + PeerPoolMgr.h Pipeline.cc Pipeline.h RefreshPattern.h \ + RemovalPolicy.cc RequestFlags.cc RequestFlags.h \ ResolvedPeers.cc ResolvedPeers.h \ - tests/stub_SBufDetailedStats.cc SnmpRequest.h snmp_core.h \ - snmp_core.cc snmp_agent.h snmp_agent.cc SquidMath.h \ - SquidMath.cc IoStats.h stat.h stat.cc StatCounters.h \ - StatCounters.cc StatHist.h StatHist.cc stmem.cc repl_modules.h \ - store.cc store_client.cc store_digest.h \ - tests/stub_store_digest.cc store_io.cc store_key_md5.h \ - store_key_md5.cc store_log.h store_log.cc store_rebuild.h \ - store_rebuild.cc store_swapin.h store_swapin.cc \ - store_swapmeta.cc store_swapout.cc StoreFileSystem.cc \ - StoreIOState.cc tests/stub_StoreMeta.cc StoreMetaUnpacker.cc \ - StoreSwapLogData.cc StrList.h StrList.cc event.cc tools.h \ - tools.cc Transients.cc tests/stub_cache_cf.cc \ - tests/stub_HttpUpgradeProtocolAccess.cc tests/stub_tunnel.cc \ - tests/stub_libstore.cc MemStore.cc urn.h urn.cc wccp2.h \ - tests/stub_wccp2.cc whois.h tests/stub_whois.cc \ - FadingCounter.cc win32.cc wordlist.h wordlist.cc -am_tests_testHttpRequest_OBJECTS = AccessLogEntry.$(OBJEXT) \ - RequestFlags.$(OBJEXT) HttpRequest.$(OBJEXT) \ - tests/stub_libmem.$(OBJEXT) String.$(OBJEXT) \ - tests/testHttpRequest.$(OBJEXT) \ - tests/testHttpRequestMethod.$(OBJEXT) \ - tests/stub_libauth.$(OBJEXT) tests/stub_main_cc.$(OBJEXT) \ - tests/stub_ipc_Forwarder.$(OBJEXT) \ - tests/stub_libdiskio.$(OBJEXT) tests/stub_libeui.$(OBJEXT) \ - tests/stub_store_stats.$(OBJEXT) \ - tests/stub_EventLoop.$(OBJEXT) time.$(OBJEXT) \ - BodyPipe.$(OBJEXT) cache_manager.$(OBJEXT) debug.$(OBJEXT) \ + tests/stub_SBufDetailedStats.cc SquidMath.cc SquidMath.h \ + StatCounters.cc StatCounters.h StatHist.cc StatHist.h \ + StoreFileSystem.cc StoreIOState.cc tests/stub_StoreMeta.cc \ + StoreMetaUnpacker.cc StoreSwapLogData.cc StrList.cc StrList.h \ + String.cc Transients.cc tests/stub_cache_cf.cc cache_cf.h \ + cache_manager.cc tests/stub_carp.cc carp.h cbdata.cc \ + clientStream.cc tests/stub_client_db.cc client_side.cc \ + client_side.h client_side_reply.cc client_side_request.cc \ + debug.cc dlink.cc dlink.h errorpage.cc event.cc \ + external_acl.cc tests/stub_fatal.cc fatal.h fd.cc fd.h fde.cc \ + fqdncache.cc fqdncache.h fs_io.cc fs_io.h tests/stub_gopher.cc \ + gopher.h helper.cc hier_code.h http.cc icp_v2.cc icp_v3.cc \ + int.cc int.h internal.cc internal.h \ + tests/stub_ipc_Forwarder.cc ipcache.cc tests/stub_libauth.cc \ + tests/stub_libauth_acls.cc tests/stub_libdiskio.cc \ + tests/stub_liberror.cc tests/stub_libeui.cc \ + tests/stub_libmem.cc tests/stub_libsecurity.cc \ + tests/stub_libstore.cc tests/stub_main_cc.cc mem_node.cc \ + mime.cc mime.h mime_header.cc mime_header.h multicast.cc \ + multicast.h neighbors.cc neighbors.h pconn.cc peer_digest.cc \ + peer_proxy_negotiate_auth.cc peer_proxy_negotiate_auth.h \ + peer_select.cc peer_sourcehash.cc peer_sourcehash.h \ + peer_userhash.cc peer_userhash.h tests/stub_redirect.cc \ + redirect.h refresh.cc refresh.h repl_modules.h stat.cc stat.h \ + stmem.cc store.cc store_client.cc tests/stub_store_digest.cc \ + store_digest.h store_io.cc store_key_md5.cc store_key_md5.h \ + store_log.cc store_log.h store_rebuild.cc store_rebuild.h \ + tests/stub_store_stats.cc store_swapin.cc store_swapin.h \ + store_swapmeta.cc store_swapout.cc time.cc tools.cc tools.h \ + tests/stub_tunnel.cc urn.cc urn.h tests/stub_wccp2.cc wccp2.h \ + tests/stub_whois.cc whois.h wordlist.cc wordlist.h +am_tests_testHttpRequest_OBJECTS = $(am__objects_3) $(am__objects_4) \ + $(am__objects_5) $(am__objects_6) $(am__objects_9) \ + $(am__objects_12) AccessLogEntry.$(OBJEXT) BodyPipe.$(OBJEXT) \ tests/stub_CacheDigest.$(OBJEXT) CachePeer.$(OBJEXT) \ - tests/stub_carp.$(OBJEXT) cbdata.$(OBJEXT) \ - tests/stub_client_db.$(OBJEXT) client_side.$(OBJEXT) \ - client_side_reply.$(OBJEXT) client_side_request.$(OBJEXT) \ - clientStream.$(OBJEXT) \ tests/stub_CollapsedForwarding.$(OBJEXT) \ ConfigOption.$(OBJEXT) ConfigParser.$(OBJEXT) \ CpuAffinityMap.$(OBJEXT) CpuAffinitySet.$(OBJEXT) \ - $(am__objects_3) fs_io.$(OBJEXT) dlink.$(OBJEXT) \ - $(am__objects_4) errorpage.$(OBJEXT) tests/stub_ETag.$(OBJEXT) \ - external_acl.$(OBJEXT) ExternalACLEntry.$(OBJEXT) \ - tests/stub_fatal.$(OBJEXT) fd.$(OBJEXT) fde.$(OBJEXT) \ - fqdncache.$(OBJEXT) FwdState.$(OBJEXT) \ - tests/stub_gopher.$(OBJEXT) HappyConnOpener.$(OBJEXT) \ - helper.$(OBJEXT) $(am__objects_5) http.$(OBJEXT) \ + tests/stub_ETag.$(OBJEXT) tests/stub_EventLoop.$(OBJEXT) \ + ExternalACLEntry.$(OBJEXT) FadingCounter.$(OBJEXT) \ + FwdState.$(OBJEXT) HappyConnOpener.$(OBJEXT) \ HttpBody.$(OBJEXT) tests/stub_HttpControlMsg.$(OBJEXT) \ - HttpHeader.$(OBJEXT) HttpHeaderTools.$(OBJEXT) \ HttpHdrCc.$(OBJEXT) HttpHdrContRange.$(OBJEXT) \ HttpHdrRange.$(OBJEXT) HttpHdrSc.$(OBJEXT) \ - HttpHdrScTarget.$(OBJEXT) HttpReply.$(OBJEXT) icp_v2.$(OBJEXT) \ - icp_v3.$(OBJEXT) $(am__objects_6) ipcache.$(OBJEXT) \ - int.$(OBJEXT) internal.$(OBJEXT) LogTags.$(OBJEXT) \ - tests/stub_libsecurity.$(OBJEXT) MasterXaction.$(OBJEXT) \ - multicast.$(OBJEXT) mem_node.$(OBJEXT) MemBuf.$(OBJEXT) \ - MemObject.$(OBJEXT) mime.$(OBJEXT) mime_header.$(OBJEXT) \ - neighbors.$(OBJEXT) Notes.$(OBJEXT) Parsing.$(OBJEXT) \ + HttpHdrScTarget.$(OBJEXT) HttpHeader.$(OBJEXT) \ + HttpHeaderTools.$(OBJEXT) HttpReply.$(OBJEXT) \ + HttpRequest.$(OBJEXT) tests/testHttpRequest.$(OBJEXT) \ + tests/testHttpRequestMethod.$(OBJEXT) \ + tests/stub_HttpUpgradeProtocolAccess.$(OBJEXT) \ + LogTags.$(OBJEXT) MasterXaction.$(OBJEXT) MemBuf.$(OBJEXT) \ + MemObject.$(OBJEXT) MemStore.$(OBJEXT) Notes.$(OBJEXT) \ + Parsing.$(OBJEXT) PeerPoolMgr.$(OBJEXT) Pipeline.$(OBJEXT) \ + RemovalPolicy.$(OBJEXT) RequestFlags.$(OBJEXT) \ + ResolvedPeers.$(OBJEXT) tests/stub_SBufDetailedStats.$(OBJEXT) \ + SquidMath.$(OBJEXT) StatCounters.$(OBJEXT) StatHist.$(OBJEXT) \ + StoreFileSystem.$(OBJEXT) StoreIOState.$(OBJEXT) \ + tests/stub_StoreMeta.$(OBJEXT) StoreMetaUnpacker.$(OBJEXT) \ + StoreSwapLogData.$(OBJEXT) StrList.$(OBJEXT) String.$(OBJEXT) \ + Transients.$(OBJEXT) tests/stub_cache_cf.$(OBJEXT) \ + cache_manager.$(OBJEXT) tests/stub_carp.$(OBJEXT) \ + cbdata.$(OBJEXT) clientStream.$(OBJEXT) \ + tests/stub_client_db.$(OBJEXT) client_side.$(OBJEXT) \ + client_side_reply.$(OBJEXT) client_side_request.$(OBJEXT) \ + debug.$(OBJEXT) dlink.$(OBJEXT) errorpage.$(OBJEXT) \ + event.$(OBJEXT) external_acl.$(OBJEXT) \ + tests/stub_fatal.$(OBJEXT) fd.$(OBJEXT) fde.$(OBJEXT) \ + fqdncache.$(OBJEXT) fs_io.$(OBJEXT) \ + tests/stub_gopher.$(OBJEXT) helper.$(OBJEXT) http.$(OBJEXT) \ + icp_v2.$(OBJEXT) icp_v3.$(OBJEXT) int.$(OBJEXT) \ + internal.$(OBJEXT) tests/stub_ipc_Forwarder.$(OBJEXT) \ + ipcache.$(OBJEXT) tests/stub_libauth.$(OBJEXT) \ + tests/stub_libauth_acls.$(OBJEXT) \ + tests/stub_libdiskio.$(OBJEXT) tests/stub_liberror.$(OBJEXT) \ + tests/stub_libeui.$(OBJEXT) tests/stub_libmem.$(OBJEXT) \ + tests/stub_libsecurity.$(OBJEXT) tests/stub_libstore.$(OBJEXT) \ + tests/stub_main_cc.$(OBJEXT) mem_node.$(OBJEXT) mime.$(OBJEXT) \ + mime_header.$(OBJEXT) multicast.$(OBJEXT) neighbors.$(OBJEXT) \ pconn.$(OBJEXT) peer_digest.$(OBJEXT) \ peer_proxy_negotiate_auth.$(OBJEXT) peer_select.$(OBJEXT) \ peer_sourcehash.$(OBJEXT) peer_userhash.$(OBJEXT) \ - PeerPoolMgr.$(OBJEXT) Pipeline.$(OBJEXT) \ - tests/stub_libauth_acls.$(OBJEXT) \ - tests/stub_redirect.$(OBJEXT) refresh.$(OBJEXT) \ - RemovalPolicy.$(OBJEXT) ResolvedPeers.$(OBJEXT) \ - tests/stub_SBufDetailedStats.$(OBJEXT) $(am__objects_10) \ - SquidMath.$(OBJEXT) stat.$(OBJEXT) StatCounters.$(OBJEXT) \ - StatHist.$(OBJEXT) stmem.$(OBJEXT) store.$(OBJEXT) \ - store_client.$(OBJEXT) tests/stub_store_digest.$(OBJEXT) \ - store_io.$(OBJEXT) store_key_md5.$(OBJEXT) store_log.$(OBJEXT) \ - store_rebuild.$(OBJEXT) store_swapin.$(OBJEXT) \ - store_swapmeta.$(OBJEXT) store_swapout.$(OBJEXT) \ - StoreFileSystem.$(OBJEXT) StoreIOState.$(OBJEXT) \ - tests/stub_StoreMeta.$(OBJEXT) StoreMetaUnpacker.$(OBJEXT) \ - StoreSwapLogData.$(OBJEXT) StrList.$(OBJEXT) event.$(OBJEXT) \ - tools.$(OBJEXT) Transients.$(OBJEXT) \ - tests/stub_cache_cf.$(OBJEXT) \ - tests/stub_HttpUpgradeProtocolAccess.$(OBJEXT) \ - tests/stub_tunnel.$(OBJEXT) tests/stub_libstore.$(OBJEXT) \ - MemStore.$(OBJEXT) urn.$(OBJEXT) tests/stub_wccp2.$(OBJEXT) \ - tests/stub_whois.$(OBJEXT) FadingCounter.$(OBJEXT) \ - $(am__objects_13) wordlist.$(OBJEXT) + tests/stub_redirect.$(OBJEXT) refresh.$(OBJEXT) stat.$(OBJEXT) \ + stmem.$(OBJEXT) store.$(OBJEXT) store_client.$(OBJEXT) \ + tests/stub_store_digest.$(OBJEXT) store_io.$(OBJEXT) \ + store_key_md5.$(OBJEXT) store_log.$(OBJEXT) \ + store_rebuild.$(OBJEXT) tests/stub_store_stats.$(OBJEXT) \ + store_swapin.$(OBJEXT) store_swapmeta.$(OBJEXT) \ + store_swapout.$(OBJEXT) time.$(OBJEXT) tools.$(OBJEXT) \ + tests/stub_tunnel.$(OBJEXT) urn.$(OBJEXT) \ + tests/stub_wccp2.$(OBJEXT) tests/stub_whois.$(OBJEXT) \ + wordlist.$(OBJEXT) nodist_tests_testHttpRequest_OBJECTS = $(am__objects_17) tests_testHttpRequest_OBJECTS = $(am_tests_testHttpRequest_OBJECTS) \ $(nodist_tests_testHttpRequest_OBJECTS) @@ -1333,15 +1324,16 @@ $(top_builddir)/lib/libmiscutil.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) tests_testHttpRequest_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testHttpRequest_LDFLAGS) \ $(LDFLAGS) -o $@ am_tests_testIcmp_OBJECTS = tests/testIcmp.$(OBJEXT) -nodist_tests_testIcmp_OBJECTS = tests/stub_debug.$(OBJEXT) \ - tests/stub_libmem.$(OBJEXT) tests/stub_SBuf.$(OBJEXT) \ - time.$(OBJEXT) globals.$(OBJEXT) +nodist_tests_testIcmp_OBJECTS = tests/stub_SBuf.$(OBJEXT) \ + tests/stub_debug.$(OBJEXT) globals.$(OBJEXT) \ + tests/stub_libmem.$(OBJEXT) time.$(OBJEXT) tests_testIcmp_OBJECTS = $(am_tests_testIcmp_OBJECTS) \ $(nodist_tests_testIcmp_OBJECTS) tests_testIcmp_DEPENDENCIES = icmp/libicmpcore.la ip/libip.la \ @@ -1352,8 +1344,8 @@ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testIcmp_LDFLAGS) \ $(LDFLAGS) -o $@ am_tests_testIpAddress_OBJECTS = tests/testIpAddress.$(OBJEXT) -nodist_tests_testIpAddress_OBJECTS = tests/stub_debug.$(OBJEXT) \ - tests/stub_libmem.$(OBJEXT) tests/stub_SBuf.$(OBJEXT) \ +nodist_tests_testIpAddress_OBJECTS = tests/stub_SBuf.$(OBJEXT) \ + tests/stub_debug.$(OBJEXT) tests/stub_libmem.$(OBJEXT) \ tests/stub_tools.$(OBJEXT) tests_testIpAddress_OBJECTS = $(am_tests_testIpAddress_OBJECTS) \ $(nodist_tests_testIpAddress_OBJECTS) @@ -1365,9 +1357,9 @@ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testIpAddress_LDFLAGS) \ $(LDFLAGS) -o $@ am_tests_testLookupTable_OBJECTS = tests/testLookupTable.$(OBJEXT) -nodist_tests_testLookupTable_OBJECTS = tests/stub_debug.$(OBJEXT) \ - tests/stub_libmem.$(OBJEXT) \ - tests/stub_SBufDetailedStats.$(OBJEXT) +nodist_tests_testLookupTable_OBJECTS = \ + tests/stub_SBufDetailedStats.$(OBJEXT) \ + tests/stub_debug.$(OBJEXT) tests/stub_libmem.$(OBJEXT) tests_testLookupTable_OBJECTS = $(am_tests_testLookupTable_OBJECTS) \ $(nodist_tests_testLookupTable_OBJECTS) tests_testLookupTable_DEPENDENCIES = sbuf/libsbuf.la base/libbase.la \ @@ -1389,9 +1381,9 @@ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testMem_LDFLAGS) $(LDFLAGS) \ -o $@ am_tests_testNetDb_OBJECTS = tests/testNetDb.$(OBJEXT) -nodist_tests_testNetDb_OBJECTS = tests/stub_debug.$(OBJEXT) \ - tests/stub_libmem.$(OBJEXT) tests/stub_SBuf.$(OBJEXT) \ - time.$(OBJEXT) globals.$(OBJEXT) +nodist_tests_testNetDb_OBJECTS = tests/stub_SBuf.$(OBJEXT) \ + tests/stub_debug.$(OBJEXT) globals.$(OBJEXT) \ + tests/stub_libmem.$(OBJEXT) time.$(OBJEXT) tests_testNetDb_OBJECTS = $(am_tests_testNetDb_OBJECTS) \ $(nodist_tests_testNetDb_OBJECTS) tests_testNetDb_DEPENDENCIES = icmp/libicmp.la ip/libip.la \ @@ -1412,65 +1404,65 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testRefCount_LDFLAGS) \ $(LDFLAGS) -o $@ -am__tests_testRock_SOURCES_DIST = AccessLogEntry.cc AccessLogEntry.h \ - cbdata.cc CacheDigest.h CollapsedForwarding.h \ - CollapsedForwarding.cc tests/stub_CacheDigest.cc \ - ConfigOption.cc ConfigParser.cc fs_io.h fs_io.cc ETag.cc \ - EventLoop.cc event.cc FadingCounter.cc fatal.h fatal.cc fd.h \ - fd.cc fde.h fde.cc FileMap.h filemap.cc HttpHeaderFieldStat.h \ - HttpBody.h HttpBody.cc HttpHdrCc.cc HttpHdrContRange.cc \ - HttpHdrRange.cc HttpHdrSc.cc HttpHdrScTarget.cc HttpHeader.h \ - HttpHeader.cc HttpHeaderFieldInfo.h HttpHeaderTools.h \ - HttpHeaderTools.cc HttpReply.cc int.h int.cc LogTags.cc \ - MasterXaction.cc MasterXaction.h MemBuf.cc MemObject.cc \ - MemStore.cc mem_node.cc Notes.h Notes.cc Parsing.cc \ - RemovalPolicy.cc RequestFlags.cc RequestFlags.h \ - ResolvedPeers.cc ResolvedPeers.h StatCounters.h \ - StatCounters.cc StatHist.h tests/stub_StatHist.cc stmem.cc \ - repl_modules.h tests/stub_stat.cc store.cc StoreFileSystem.cc \ - StoreIOState.cc StoreMetaUnpacker.cc StoreMeta.cc StoreMeta.h \ - StoreMetaMD5.cc StoreMetaMD5.h StoreMetaSTD.cc StoreMetaSTD.h \ - StoreMetaSTDLFS.cc StoreMetaSTDLFS.h StoreMetaObjSize.h \ - StoreMetaURL.cc StoreMetaURL.h StoreMetaVary.cc \ - StoreMetaVary.h StoreSwapLogData.cc store_io.cc \ - store_key_md5.h store_key_md5.cc store_swapmeta.cc \ - store_swapout.cc tests/stub_SBufDetailedStats.cc String.cc \ - StrList.h StrList.cc Transients.h Transients.cc \ - tests/testRock.cc tests/testRock.h tests/testStoreSupport.cc \ - tests/testStoreSupport.h log/access_log.h \ - tests/stub_access_log.cc cache_cf.h tests/stub_cache_cf.cc \ - tests/stub_cache_manager.cc tests/stub_client_db.cc \ +am__tests_testRock_SOURCES_DIST = BandwidthBucket.cc BandwidthBucket.h \ + CommonPool.h CompositePoolNode.h delay_pools.cc DelayId.cc \ + DelayId.h DelayIdComposite.h DelayBucket.cc DelayBucket.h \ + DelayConfig.cc DelayConfig.h DelayPool.cc DelayPool.h \ + DelayPools.h DelaySpec.cc DelaySpec.h DelayTagged.cc \ + DelayTagged.h DelayUser.cc DelayUser.h DelayVector.cc \ + DelayVector.h MessageBucket.cc MessageBucket.h \ + MessageDelayPools.h MessageDelayPools.cc NullDelayId.h \ + ClientDelayConfig.cc ClientDelayConfig.h StoreMeta.cc \ + StoreMeta.h StoreMetaMD5.cc StoreMetaMD5.h StoreMetaSTD.cc \ + StoreMetaSTD.h StoreMetaSTDLFS.cc StoreMetaSTDLFS.h \ + StoreMetaObjSize.h StoreMetaURL.cc StoreMetaURL.h \ + StoreMetaVary.cc StoreMetaVary.h unlinkd.h unlinkd.cc \ + AccessLogEntry.cc AccessLogEntry.h tests/stub_CacheDigest.cc \ + CacheDigest.h CollapsedForwarding.cc CollapsedForwarding.h \ + ConfigOption.cc ConfigParser.cc ETag.cc EventLoop.cc \ + FadingCounter.cc FileMap.h tests/stub_HelperChildConfig.cc \ + HttpBody.cc HttpBody.h HttpHdrCc.cc HttpHdrContRange.cc \ + HttpHdrRange.cc HttpHdrSc.cc HttpHdrScTarget.cc HttpHeader.cc \ + HttpHeader.h HttpHeaderFieldInfo.h HttpHeaderFieldStat.h \ + HttpHeaderTools.cc HttpHeaderTools.h HttpReply.cc \ + tests/stub_HttpRequest.cc LogTags.cc MasterXaction.cc \ + MasterXaction.h MemBuf.cc MemObject.cc MemStore.cc Notes.cc \ + Notes.h Parsing.cc tests/stub_Port.cc RemovalPolicy.cc \ + RequestFlags.cc RequestFlags.h ResolvedPeers.cc \ + ResolvedPeers.h tests/testRock.cc tests/testRock.h \ + tests/stub_SBufDetailedStats.cc StatCounters.cc StatCounters.h \ + tests/stub_StatHist.cc StatHist.h StoreFileSystem.cc \ + StoreIOState.cc StoreMetaUnpacker.cc tests/testStoreSupport.cc \ + tests/testStoreSupport.h StoreSwapLogData.cc StrList.cc \ + StrList.h String.cc Transients.cc Transients.h \ + tests/stub_access_log.cc tests/stub_cache_cf.cc cache_cf.h \ + tests/stub_cache_manager.cc cbdata.cc tests/stub_client_db.cc \ tests/stub_client_side_request.cc tests/stub_debug.cc \ - tests/stub_errorpage.cc tests/stub_HelperChildConfig.cc \ - tests/stub_http.cc tests/stub_HttpRequest.cc \ - tests/stub_libauth.cc tests/stub_icp.cc tests/stub_ipc.cc \ - tests/stub_ipcache.cc tests/stub_libeui.cc \ - tests/stub_libformat.cc tests/stub_libicmp.cc \ - tests/stub_liblog.cc tests/stub_libmgr.cc \ - tests/stub_libsecurity.cc mime.h tests/stub_mime.cc \ - tests/stub_neighbors.cc tests/stub_Port.cc tests/stub_pconn.cc \ - tests/stub_store_client.cc store_rebuild.h \ - tests/stub_store_rebuild.cc tests/stub_store_stats.cc tools.h \ - tests/stub_tools.cc time.cc tests/stub_libanyp.cc wordlist.h \ - wordlist.cc BandwidthBucket.cc BandwidthBucket.h CommonPool.h \ - CompositePoolNode.h delay_pools.cc DelayId.cc DelayId.h \ - DelayIdComposite.h DelayBucket.cc DelayBucket.h DelayConfig.cc \ - DelayConfig.h DelayPool.cc DelayPool.h DelayPools.h \ - DelaySpec.cc DelaySpec.h DelayTagged.cc DelayTagged.h \ - DelayUser.cc DelayUser.h DelayVector.cc DelayVector.h \ - MessageBucket.cc MessageBucket.h MessageDelayPools.h \ - MessageDelayPools.cc NullDelayId.h ClientDelayConfig.cc \ - ClientDelayConfig.h unlinkd.h unlinkd.cc -@ENABLE_FS_ROCK_TRUE@am_tests_testRock_OBJECTS = \ -@ENABLE_FS_ROCK_TRUE@ AccessLogEntry.$(OBJEXT) cbdata.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ CollapsedForwarding.$(OBJEXT) \ + tests/stub_errorpage.cc event.cc fatal.cc fatal.h fd.cc fd.h \ + fde.cc fde.h filemap.cc fs_io.cc fs_io.h tests/stub_http.cc \ + tests/stub_icp.cc int.cc int.h tests/stub_ipc.cc \ + tests/stub_ipcache.cc tests/stub_libanyp.cc \ + tests/stub_libauth.cc tests/stub_liberror.cc \ + tests/stub_libeui.cc tests/stub_libformat.cc \ + tests/stub_libicmp.cc tests/stub_liblog.cc \ + tests/stub_libmgr.cc tests/stub_libsecurity.cc \ + log/access_log.h mem_node.cc tests/stub_mime.cc mime.h \ + tests/stub_neighbors.cc tests/stub_pconn.cc repl_modules.h \ + tests/stub_stat.cc stmem.cc store.cc \ + tests/stub_store_client.cc store_io.cc store_key_md5.cc \ + store_key_md5.h tests/stub_store_rebuild.cc store_rebuild.h \ + tests/stub_store_stats.cc store_swapmeta.cc store_swapout.cc \ + time.cc tests/stub_tools.cc tools.h wordlist.cc wordlist.h +@ENABLE_FS_ROCK_TRUE@am_tests_testRock_OBJECTS = $(am__objects_3) \ +@ENABLE_FS_ROCK_TRUE@ $(am__objects_10) $(am__objects_11) \ +@ENABLE_FS_ROCK_TRUE@ AccessLogEntry.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_CacheDigest.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ CollapsedForwarding.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ ConfigOption.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ ConfigParser.$(OBJEXT) fs_io.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ ETag.$(OBJEXT) EventLoop.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ event.$(OBJEXT) FadingCounter.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ fatal.$(OBJEXT) fd.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ fde.$(OBJEXT) filemap.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ ConfigParser.$(OBJEXT) ETag.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ EventLoop.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ FadingCounter.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_HelperChildConfig.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ HttpBody.$(OBJEXT) HttpHdrCc.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ HttpHdrContRange.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ HttpHdrRange.$(OBJEXT) \ @@ -1478,65 +1470,69 @@ @ENABLE_FS_ROCK_TRUE@ HttpHdrScTarget.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ HttpHeader.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ HttpHeaderTools.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ HttpReply.$(OBJEXT) int.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ HttpReply.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_HttpRequest.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ LogTags.$(OBJEXT) MasterXaction.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ MemBuf.$(OBJEXT) MemObject.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ MemStore.$(OBJEXT) mem_node.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ Notes.$(OBJEXT) Parsing.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ MemStore.$(OBJEXT) Notes.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ Parsing.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_Port.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ RemovalPolicy.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ RequestFlags.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ ResolvedPeers.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ tests/testRock.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_SBufDetailedStats.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ StatCounters.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_StatHist.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ stmem.$(OBJEXT) tests/stub_stat.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ store.$(OBJEXT) StoreFileSystem.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ StoreFileSystem.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ StoreIOState.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ StoreMetaUnpacker.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ $(am__objects_11) \ +@ENABLE_FS_ROCK_TRUE@ tests/testStoreSupport.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ StoreSwapLogData.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ store_io.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ store_key_md5.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ store_swapmeta.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ store_swapout.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_SBufDetailedStats.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ String.$(OBJEXT) StrList.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ StrList.$(OBJEXT) String.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ Transients.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ tests/testRock.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ tests/testStoreSupport.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_access_log.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_cache_cf.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_cache_manager.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ cbdata.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_client_db.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_client_side_request.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_debug.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_errorpage.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_HelperChildConfig.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ event.$(OBJEXT) fatal.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ fd.$(OBJEXT) fde.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ filemap.$(OBJEXT) fs_io.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_http.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_HttpRequest.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_libauth.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_icp.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_icp.$(OBJEXT) int.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_ipc.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_ipcache.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_libanyp.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_libauth.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_liberror.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_libeui.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_libformat.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_libicmp.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_liblog.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_libmgr.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_libsecurity.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ mem_node.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_mime.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_neighbors.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_Port.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_pconn.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_stat.$(OBJEXT) stmem.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ store.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_store_client.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ store_io.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ store_key_md5.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_store_rebuild.$(OBJEXT) \ @ENABLE_FS_ROCK_TRUE@ tests/stub_store_stats.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_tools.$(OBJEXT) time.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_libanyp.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ wordlist.$(OBJEXT) $(am__objects_3) \ -@ENABLE_FS_ROCK_TRUE@ $(am__objects_12) +@ENABLE_FS_ROCK_TRUE@ store_swapmeta.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ store_swapout.$(OBJEXT) time.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_tools.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ wordlist.$(OBJEXT) @ENABLE_FS_ROCK_TRUE@nodist_tests_testRock_OBJECTS = \ -@ENABLE_FS_ROCK_TRUE@ $(am__objects_18) hier_code.$(OBJEXT) \ -@ENABLE_FS_ROCK_TRUE@ SquidMath.$(OBJEXT) swap_log_op.$(OBJEXT) +@ENABLE_FS_ROCK_TRUE@ $(am__objects_18) SquidMath.$(OBJEXT) \ +@ENABLE_FS_ROCK_TRUE@ hier_code.$(OBJEXT) swap_log_op.$(OBJEXT) tests_testRock_OBJECTS = $(am_tests_testRock_OBJECTS) \ $(nodist_tests_testRock_OBJECTS) @ENABLE_FS_ROCK_TRUE@tests_testRock_DEPENDENCIES = http/libhttp.la \ @@ -1562,10 +1558,10 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testRock_LDFLAGS) \ $(LDFLAGS) -o $@ -am_tests_testSBuf_OBJECTS = tests/SBufFindTest.$(OBJEXT) \ - tests/testSBuf.$(OBJEXT) -nodist_tests_testSBuf_OBJECTS = tests/stub_debug.$(OBJEXT) \ - tests/stub_libmem.$(OBJEXT) tests/stub_StatHist.$(OBJEXT) +am_tests_testSBuf_OBJECTS = tests/testSBuf.$(OBJEXT) \ + tests/SBufFindTest.$(OBJEXT) +nodist_tests_testSBuf_OBJECTS = tests/stub_StatHist.$(OBJEXT) \ + tests/stub_debug.$(OBJEXT) tests/stub_libmem.$(OBJEXT) tests_testSBuf_OBJECTS = $(am_tests_testSBuf_OBJECTS) \ $(nodist_tests_testSBuf_OBJECTS) tests_testSBuf_DEPENDENCIES = sbuf/libsbuf.la base/libbase.la \ @@ -1576,8 +1572,8 @@ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testSBuf_LDFLAGS) \ $(LDFLAGS) -o $@ am_tests_testSBufList_OBJECTS = tests/testSBufList.$(OBJEXT) -nodist_tests_testSBufList_OBJECTS = tests/stub_debug.$(OBJEXT) \ - tests/stub_libmem.$(OBJEXT) tests/stub_StatHist.$(OBJEXT) +nodist_tests_testSBufList_OBJECTS = tests/stub_StatHist.$(OBJEXT) \ + tests/stub_debug.$(OBJEXT) tests/stub_libmem.$(OBJEXT) tests_testSBufList_OBJECTS = $(am_tests_testSBufList_OBJECTS) \ $(nodist_tests_testSBufList_OBJECTS) tests_testSBufList_DEPENDENCIES = sbuf/libsbuf.la base/libbase.la \ @@ -1587,18 +1583,18 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testSBufList_LDFLAGS) \ $(LDFLAGS) -o $@ -am_tests_testStatHist_OBJECTS = tests/stub_cbdata.$(OBJEXT) \ - tests/stub_fatal.$(OBJEXT) tests/stub_MemBuf.$(OBJEXT) \ +am_tests_testStatHist_OBJECTS = tests/stub_DelayId.$(OBJEXT) \ + tests/stub_HelperChildConfig.$(OBJEXT) \ + tests/stub_MemBuf.$(OBJEXT) tests/stub_MemObject.$(OBJEXT) \ tests/stub_SBufDetailedStats.$(OBJEXT) StatHist.$(OBJEXT) \ - String.$(OBJEXT) tests/stub_cache_manager.$(OBJEXT) \ + tests/testStatHist.$(OBJEXT) String.$(OBJEXT) \ + tests/stub_cache_manager.$(OBJEXT) tests/stub_cbdata.$(OBJEXT) \ tests/stub_comm.$(OBJEXT) tests/stub_debug.$(OBJEXT) \ - tests/stub_DelayId.$(OBJEXT) \ - tests/stub_HelperChildConfig.$(OBJEXT) \ - tests/stub_libmem.$(OBJEXT) tests/stub_MemObject.$(OBJEXT) \ + tests/stub_fatal.$(OBJEXT) tests/stub_libmem.$(OBJEXT) \ tests/stub_mime.$(OBJEXT) tests/stub_pconn.$(OBJEXT) \ tests/stub_stmem.$(OBJEXT) tests/stub_store.$(OBJEXT) \ tests/stub_store_stats.$(OBJEXT) time.$(OBJEXT) \ - tests/stub_tools.$(OBJEXT) tests/testStatHist.$(OBJEXT) + tests/stub_tools.$(OBJEXT) nodist_tests_testStatHist_OBJECTS = $(am__objects_18) tests_testStatHist_OBJECTS = $(am_tests_testStatHist_OBJECTS) \ $(nodist_tests_testStatHist_OBJECTS) @@ -1610,103 +1606,102 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testStatHist_LDFLAGS) \ $(LDFLAGS) -o $@ -am__tests_testStore_SOURCES_DIST = CacheDigest.h \ - tests/stub_CacheDigest.cc cbdata.cc ClientInfo.h \ - tests/stub_CollapsedForwarding.cc ConfigOption.cc \ - ConfigParser.cc BandwidthBucket.cc BandwidthBucket.h \ - CommonPool.h CompositePoolNode.h delay_pools.cc DelayId.cc \ - DelayId.h DelayIdComposite.h DelayBucket.cc DelayBucket.h \ - DelayConfig.cc DelayConfig.h DelayPool.cc DelayPool.h \ - DelayPools.h DelaySpec.cc DelaySpec.h DelayTagged.cc \ - DelayTagged.h DelayUser.cc DelayUser.h DelayVector.cc \ - DelayVector.h MessageBucket.cc MessageBucket.h \ +am__tests_testStore_SOURCES_DIST = BandwidthBucket.cc \ + BandwidthBucket.h CommonPool.h CompositePoolNode.h \ + delay_pools.cc DelayId.cc DelayId.h DelayIdComposite.h \ + DelayBucket.cc DelayBucket.h DelayConfig.cc DelayConfig.h \ + DelayPool.cc DelayPool.h DelayPools.h DelaySpec.cc DelaySpec.h \ + DelayTagged.cc DelayTagged.h DelayUser.cc DelayUser.h \ + DelayVector.cc DelayVector.h MessageBucket.cc MessageBucket.h \ MessageDelayPools.h MessageDelayPools.cc NullDelayId.h \ - ClientDelayConfig.cc ClientDelayConfig.h fs_io.h fs_io.cc \ - ETag.cc event.cc EventLoop.cc fatal.h tests/stub_fatal.cc \ - FileMap.h filemap.cc HttpHeaderFieldStat.h HttpHdrCc.h \ - HttpHdrCc.cc HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ - HttpHdrScTarget.cc HttpHeaderFieldInfo.h HttpHeaderTools.h \ - HttpHeaderTools.cc HttpHeader.h HttpHeader.cc RequestFlags.cc \ - RequestFlags.h int.h int.cc MasterXaction.cc MasterXaction.h \ - mem_node.cc MemBuf.cc MemObject.cc MemStore.cc Notes.h \ - Notes.cc Parsing.cc RemovalPolicy.cc refresh.h refresh.cc \ - StatCounters.h StatCounters.cc StatHist.h StatHist.cc stmem.cc \ - repl_modules.h store.cc store_io.cc store_swapout.cc \ - StoreIOState.cc tests/stub_StoreMeta.cc StoreMetaUnpacker.cc \ - StoreSwapLogData.cc store_key_md5.h store_key_md5.cc \ - tests/stub_SBufDetailedStats.cc String.cc StrList.h StrList.cc \ - tests/CapturingStoreEntry.h log/access_log.h \ - tests/stub_access_log.cc tests/stub_acl.cc cache_cf.h \ - tests/stub_cache_cf.cc tests/stub_cache_manager.cc \ - tests/stub_client_side_request.cc tests/stub_comm.cc \ - tests/stub_debug.cc tests/stub_errorpage.cc fd.h fde.h \ - tests/stub_fd.cc tests/stub_helper.cc \ - tests/stub_HelperChildConfig.cc tests/stub_http.cc \ - tests/stub_libauth.cc tests/stub_libeui.cc \ - tests/stub_libdiskio.cc tests/stub_libformat.cc \ - tests/stub_libsecurity.cc tests/stub_libsslsquid.cc HttpBody.h \ - HttpBody.cc tests/stub_HttpReply.cc tests/stub_HttpRequest.cc \ - tests/stub_libcomm.cc mime.h tests/stub_mime.cc \ - tests/stub_Port.cc tests/stub_stat.cc \ - tests/stub_store_client.cc tests/stub_store_stats.cc \ - store_rebuild.h tests/stub_store_rebuild.cc \ - tests/stub_store_swapout.cc tools.h Transients.cc \ - tests/stub_tools.cc tests/stub_UdsOp.cc \ + ClientDelayConfig.cc ClientDelayConfig.h \ + tests/stub_CacheDigest.cc CacheDigest.h ClientInfo.h \ + tests/stub_CollapsedForwarding.cc ConfigOption.cc \ + ConfigParser.cc ETag.cc EventLoop.cc FileMap.h \ + tests/stub_HelperChildConfig.cc HttpBody.cc HttpBody.h \ + HttpHdrCc.cc HttpHdrCc.h HttpHdrContRange.cc HttpHdrRange.cc \ + HttpHdrSc.cc HttpHdrScTarget.cc HttpHeader.cc HttpHeader.h \ + HttpHeaderFieldInfo.h HttpHeaderFieldStat.h HttpHeaderTools.cc \ + HttpHeaderTools.h tests/stub_HttpReply.cc \ + tests/stub_HttpRequest.cc MasterXaction.cc MasterXaction.h \ + MemBuf.cc MemObject.cc MemStore.cc Notes.cc Notes.h \ tests/testPackableStream.cc tests/testPackableStream.h \ - tests/testStore.cc tests/testStore.h \ - tests/testStoreController.cc tests/testStoreController.h \ - tests/testStoreHashIndex.cc tests/testStoreHashIndex.h \ + Parsing.cc tests/stub_Port.cc RemovalPolicy.cc RequestFlags.cc \ + RequestFlags.h tests/stub_SBufDetailedStats.cc StatCounters.cc \ + StatCounters.h StatHist.cc StatHist.h tests/testStore.cc \ + tests/testStore.h tests/testStoreController.cc \ + tests/testStoreController.h tests/testStoreHashIndex.cc \ + tests/testStoreHashIndex.h StoreIOState.cc \ + tests/stub_StoreMeta.cc StoreMetaUnpacker.cc \ tests/testStoreSupport.cc tests/testStoreSupport.h \ + StoreSwapLogData.cc StrList.cc StrList.h String.cc \ + Transients.cc tests/stub_UdsOp.cc tests/stub_access_log.cc \ + tests/stub_acl.cc tests/stub_cache_cf.cc cache_cf.h \ + tests/stub_cache_manager.cc cbdata.cc \ + tests/stub_client_side_request.cc tests/stub_comm.cc \ + tests/stub_debug.cc tests/stub_errorpage.cc event.cc \ + tests/stub_fatal.cc fatal.h tests/stub_fd.cc fd.h fde.h \ + filemap.cc fs_io.cc fs_io.h tests/stub_helper.cc \ + tests/stub_http.cc int.cc int.h tests/stub_libanyp.cc \ + tests/stub_libauth.cc tests/stub_libcomm.cc \ + tests/stub_libdiskio.cc tests/stub_liberror.cc \ + tests/stub_libeui.cc tests/stub_libformat.cc \ + tests/stub_libsecurity.cc tests/stub_libsslsquid.cc \ + log/access_log.h mem_node.cc tests/stub_mime.cc mime.h \ + refresh.cc refresh.h repl_modules.h tests/stub_stat.cc \ + stmem.cc store.cc tests/stub_store_client.cc store_io.cc \ + store_key_md5.cc store_key_md5.h tests/stub_store_rebuild.cc \ + store_rebuild.h tests/stub_store_stats.cc store_swapout.cc \ + tests/stub_store_swapout.cc tests/CapturingStoreEntry.h \ tests/TestSwapDir.cc tests/TestSwapDir.h tests/stub_time.cc \ - tests/stub_libanyp.cc wordlist.h wordlist.cc -am_tests_testStore_OBJECTS = tests/stub_CacheDigest.$(OBJEXT) \ - cbdata.$(OBJEXT) tests/stub_CollapsedForwarding.$(OBJEXT) \ - ConfigOption.$(OBJEXT) ConfigParser.$(OBJEXT) $(am__objects_3) \ - fs_io.$(OBJEXT) ETag.$(OBJEXT) event.$(OBJEXT) \ - EventLoop.$(OBJEXT) tests/stub_fatal.$(OBJEXT) \ - filemap.$(OBJEXT) HttpHdrCc.$(OBJEXT) \ + tests/stub_tools.cc tools.h wordlist.cc wordlist.h +am_tests_testStore_OBJECTS = $(am__objects_3) \ + tests/stub_CacheDigest.$(OBJEXT) \ + tests/stub_CollapsedForwarding.$(OBJEXT) \ + ConfigOption.$(OBJEXT) ConfigParser.$(OBJEXT) ETag.$(OBJEXT) \ + EventLoop.$(OBJEXT) tests/stub_HelperChildConfig.$(OBJEXT) \ + HttpBody.$(OBJEXT) HttpHdrCc.$(OBJEXT) \ HttpHdrContRange.$(OBJEXT) HttpHdrRange.$(OBJEXT) \ HttpHdrSc.$(OBJEXT) HttpHdrScTarget.$(OBJEXT) \ - HttpHeaderTools.$(OBJEXT) HttpHeader.$(OBJEXT) \ - RequestFlags.$(OBJEXT) int.$(OBJEXT) MasterXaction.$(OBJEXT) \ - mem_node.$(OBJEXT) MemBuf.$(OBJEXT) MemObject.$(OBJEXT) \ - MemStore.$(OBJEXT) Notes.$(OBJEXT) Parsing.$(OBJEXT) \ - RemovalPolicy.$(OBJEXT) refresh.$(OBJEXT) \ - StatCounters.$(OBJEXT) StatHist.$(OBJEXT) stmem.$(OBJEXT) \ - store.$(OBJEXT) store_io.$(OBJEXT) store_swapout.$(OBJEXT) \ - StoreIOState.$(OBJEXT) tests/stub_StoreMeta.$(OBJEXT) \ - StoreMetaUnpacker.$(OBJEXT) StoreSwapLogData.$(OBJEXT) \ - store_key_md5.$(OBJEXT) tests/stub_SBufDetailedStats.$(OBJEXT) \ - String.$(OBJEXT) StrList.$(OBJEXT) \ - tests/stub_access_log.$(OBJEXT) tests/stub_acl.$(OBJEXT) \ - tests/stub_cache_cf.$(OBJEXT) \ - tests/stub_cache_manager.$(OBJEXT) \ + HttpHeader.$(OBJEXT) HttpHeaderTools.$(OBJEXT) \ + tests/stub_HttpReply.$(OBJEXT) \ + tests/stub_HttpRequest.$(OBJEXT) MasterXaction.$(OBJEXT) \ + MemBuf.$(OBJEXT) MemObject.$(OBJEXT) MemStore.$(OBJEXT) \ + Notes.$(OBJEXT) tests/testPackableStream.$(OBJEXT) \ + Parsing.$(OBJEXT) tests/stub_Port.$(OBJEXT) \ + RemovalPolicy.$(OBJEXT) RequestFlags.$(OBJEXT) \ + tests/stub_SBufDetailedStats.$(OBJEXT) StatCounters.$(OBJEXT) \ + StatHist.$(OBJEXT) tests/testStore.$(OBJEXT) \ + tests/testStoreController.$(OBJEXT) \ + tests/testStoreHashIndex.$(OBJEXT) StoreIOState.$(OBJEXT) \ + tests/stub_StoreMeta.$(OBJEXT) StoreMetaUnpacker.$(OBJEXT) \ + tests/testStoreSupport.$(OBJEXT) StoreSwapLogData.$(OBJEXT) \ + StrList.$(OBJEXT) String.$(OBJEXT) Transients.$(OBJEXT) \ + tests/stub_UdsOp.$(OBJEXT) tests/stub_access_log.$(OBJEXT) \ + tests/stub_acl.$(OBJEXT) tests/stub_cache_cf.$(OBJEXT) \ + tests/stub_cache_manager.$(OBJEXT) cbdata.$(OBJEXT) \ tests/stub_client_side_request.$(OBJEXT) \ tests/stub_comm.$(OBJEXT) tests/stub_debug.$(OBJEXT) \ - tests/stub_errorpage.$(OBJEXT) tests/stub_fd.$(OBJEXT) \ - tests/stub_helper.$(OBJEXT) \ - tests/stub_HelperChildConfig.$(OBJEXT) \ - tests/stub_http.$(OBJEXT) tests/stub_libauth.$(OBJEXT) \ - tests/stub_libeui.$(OBJEXT) tests/stub_libdiskio.$(OBJEXT) \ + tests/stub_errorpage.$(OBJEXT) event.$(OBJEXT) \ + tests/stub_fatal.$(OBJEXT) tests/stub_fd.$(OBJEXT) \ + filemap.$(OBJEXT) fs_io.$(OBJEXT) tests/stub_helper.$(OBJEXT) \ + tests/stub_http.$(OBJEXT) int.$(OBJEXT) \ + tests/stub_libanyp.$(OBJEXT) tests/stub_libauth.$(OBJEXT) \ + tests/stub_libcomm.$(OBJEXT) tests/stub_libdiskio.$(OBJEXT) \ + tests/stub_liberror.$(OBJEXT) tests/stub_libeui.$(OBJEXT) \ tests/stub_libformat.$(OBJEXT) \ tests/stub_libsecurity.$(OBJEXT) \ - tests/stub_libsslsquid.$(OBJEXT) HttpBody.$(OBJEXT) \ - tests/stub_HttpReply.$(OBJEXT) \ - tests/stub_HttpRequest.$(OBJEXT) tests/stub_libcomm.$(OBJEXT) \ - tests/stub_mime.$(OBJEXT) tests/stub_Port.$(OBJEXT) \ - tests/stub_stat.$(OBJEXT) tests/stub_store_client.$(OBJEXT) \ - tests/stub_store_stats.$(OBJEXT) \ - tests/stub_store_rebuild.$(OBJEXT) \ - tests/stub_store_swapout.$(OBJEXT) Transients.$(OBJEXT) \ - tests/stub_tools.$(OBJEXT) tests/stub_UdsOp.$(OBJEXT) \ - tests/testPackableStream.$(OBJEXT) tests/testStore.$(OBJEXT) \ - tests/testStoreController.$(OBJEXT) \ - tests/testStoreHashIndex.$(OBJEXT) \ - tests/testStoreSupport.$(OBJEXT) tests/TestSwapDir.$(OBJEXT) \ - tests/stub_time.$(OBJEXT) tests/stub_libanyp.$(OBJEXT) \ + tests/stub_libsslsquid.$(OBJEXT) mem_node.$(OBJEXT) \ + tests/stub_mime.$(OBJEXT) refresh.$(OBJEXT) \ + tests/stub_stat.$(OBJEXT) stmem.$(OBJEXT) store.$(OBJEXT) \ + tests/stub_store_client.$(OBJEXT) store_io.$(OBJEXT) \ + store_key_md5.$(OBJEXT) tests/stub_store_rebuild.$(OBJEXT) \ + tests/stub_store_stats.$(OBJEXT) store_swapout.$(OBJEXT) \ + tests/stub_store_swapout.$(OBJEXT) tests/TestSwapDir.$(OBJEXT) \ + tests/stub_time.$(OBJEXT) tests/stub_tools.$(OBJEXT) \ wordlist.$(OBJEXT) -nodist_tests_testStore_OBJECTS = SquidMath.$(OBJEXT) \ - swap_log_op.$(OBJEXT) $(am__objects_18) +nodist_tests_testStore_OBJECTS = $(am__objects_18) SquidMath.$(OBJEXT) \ + swap_log_op.$(OBJEXT) tests_testStore_OBJECTS = $(am_tests_testStore_OBJECTS) \ $(nodist_tests_testStore_OBJECTS) tests_testStore_DEPENDENCIES = libsquid.la http/libhttp.la \ @@ -1726,8 +1721,8 @@ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testStore_LDFLAGS) \ $(LDFLAGS) -o $@ am_tests_testString_OBJECTS = tests/testString.$(OBJEXT) -nodist_tests_testString_OBJECTS = String.$(OBJEXT) \ - tests/stub_SBuf.$(OBJEXT) tests/stub_debug.$(OBJEXT) \ +nodist_tests_testString_OBJECTS = tests/stub_SBuf.$(OBJEXT) \ + String.$(OBJEXT) tests/stub_debug.$(OBJEXT) \ tests/stub_libmem.$(OBJEXT) tests_testString_OBJECTS = $(am_tests_testString_OBJECTS) \ $(nodist_tests_testString_OBJECTS) @@ -1738,8 +1733,8 @@ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testString_LDFLAGS) \ $(LDFLAGS) -o $@ am_tests_testTokenizer_OBJECTS = tests/testTokenizer.$(OBJEXT) -nodist_tests_testTokenizer_OBJECTS = tests/stub_debug.$(OBJEXT) \ - tests/stub_libmem.$(OBJEXT) tests/stub_StatHist.$(OBJEXT) +nodist_tests_testTokenizer_OBJECTS = tests/stub_StatHist.$(OBJEXT) \ + tests/stub_debug.$(OBJEXT) tests/stub_libmem.$(OBJEXT) tests_testTokenizer_OBJECTS = $(am_tests_testTokenizer_OBJECTS) \ $(nodist_tests_testTokenizer_OBJECTS) tests_testTokenizer_DEPENDENCIES = parser/libparser.la sbuf/libsbuf.la \ @@ -1751,13 +1746,12 @@ $(LDFLAGS) -o $@ am_tests_testURL_OBJECTS = tests/testURL.$(OBJEXT) \ tests/testUriScheme.$(OBJEXT) -nodist_tests_testURL_OBJECTS = String.$(OBJEXT) \ - tests/stub_access_log.$(OBJEXT) tests/stub_cbdata.$(OBJEXT) \ - tests/stub_debug.$(OBJEXT) \ - tests/stub_HelperChildConfig.$(OBJEXT) \ +nodist_tests_testURL_OBJECTS = tests/stub_HelperChildConfig.$(OBJEXT) \ tests/stub_HttpHeader.$(OBJEXT) \ - tests/stub_HttpRequest.$(OBJEXT) tests/stub_libhttp.$(OBJEXT) \ - tests/stub_libmem.$(OBJEXT) tests/stub_StatHist.$(OBJEXT) + tests/stub_HttpRequest.$(OBJEXT) tests/stub_StatHist.$(OBJEXT) \ + String.$(OBJEXT) tests/stub_access_log.$(OBJEXT) \ + tests/stub_cbdata.$(OBJEXT) tests/stub_debug.$(OBJEXT) \ + tests/stub_libhttp.$(OBJEXT) tests/stub_libmem.$(OBJEXT) tests_testURL_OBJECTS = $(am_tests_testURL_OBJECTS) \ $(nodist_tests_testURL_OBJECTS) tests_testURL_DEPENDENCIES = libsquid.la proxyp/libproxyp.la \ @@ -1769,29 +1763,7 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testURL_LDFLAGS) $(LDFLAGS) \ -o $@ -am__tests_testUfs_SOURCES_DIST = AccessLogEntry.cc AccessLogEntry.h \ - tests/testUfs.cc tests/testUfs.h tests/stub_cache_manager.cc \ - tests/stub_client_db.cc tests/stub_CollapsedForwarding.cc \ - tests/stub_HelperChildConfig.cc tests/stub_icp.cc \ - tests/stub_ipc.cc tests/stub_ipcache.cc tests/stub_libeui.cc \ - tests/stub_libicmp.cc tests/stub_liblog.cc \ - tests/stub_neighbors.cc tests/stub_pconn.cc tests/stub_Port.cc \ - tests/stub_UdsOp.cc internal.h tests/stub_internal.cc \ - tests/stub_libformat.cc tests/stub_libsecurity.cc \ - tests/stub_stat.cc store_rebuild.h tests/stub_store_rebuild.cc \ - tests/stub_store_stats.cc fatal.h tests/stub_fatal.cc fd.h \ - fd.cc fde.h fde.cc client_db.h FadingCounter.cc fs_io.h \ - fs_io.cc FileMap.h filemap.cc HttpBody.h HttpBody.cc \ - HttpReply.cc int.h int.cc LogTags.cc RequestFlags.h \ - RequestFlags.cc Transients.cc MasterXaction.cc MasterXaction.h \ - MemObject.cc MemStore.cc Notes.h Notes.cc StoreSwapLogData.cc \ - StoreIOState.cc StoreMetaUnpacker.cc StoreMeta.cc StoreMeta.h \ - StoreMetaMD5.cc StoreMetaMD5.h StoreMetaSTD.cc StoreMetaSTD.h \ - StoreMetaSTDLFS.cc StoreMetaSTDLFS.h StoreMetaObjSize.h \ - StoreMetaURL.cc StoreMetaURL.h StoreMetaVary.cc \ - StoreMetaVary.h StoreFileSystem.cc store_io.cc \ - store_swapout.cc store_swapmeta.cc unlinkd.h unlinkd.cc \ - win32.cc event.cc BandwidthBucket.cc BandwidthBucket.h \ +am__tests_testUfs_SOURCES_DIST = BandwidthBucket.cc BandwidthBucket.h \ CommonPool.h CompositePoolNode.h delay_pools.cc DelayId.cc \ DelayId.h DelayIdComposite.h DelayBucket.cc DelayBucket.h \ DelayConfig.cc DelayConfig.h DelayPool.cc DelayPool.h \ @@ -1799,103 +1771,127 @@ DelayTagged.h DelayUser.cc DelayUser.h DelayVector.cc \ DelayVector.h MessageBucket.cc MessageBucket.h \ MessageDelayPools.h MessageDelayPools.cc NullDelayId.h \ - ClientDelayConfig.cc ClientDelayConfig.h CacheDigest.h \ - tests/stub_CacheDigest.cc ConfigParser.cc EventLoop.cc \ - RemovalPolicy.cc repl_modules.h store.cc store_key_md5.h \ - store_key_md5.cc Parsing.cc ConfigOption.cc tests/stub_acl.cc \ - cache_cf.h tests/stub_cache_cf.cc tests/stub_helper.cc \ - cbdata.cc tests/stub_SBufDetailedStats.cc String.cc \ - tests/stub_debug.cc tests/stub_client_side_request.cc \ - tests/stub_http.cc tests/stub_libauth.cc mem_node.cc stmem.cc \ - mime.h tests/stub_mime.cc HttpHeaderFieldInfo.h \ - HttpHeaderTools.h HttpHeaderTools.cc HttpHeader.h \ - HttpHeader.cc ClientInfo.h MemBuf.cc HttpHdrContRange.cc \ - HttpHeaderFieldStat.h HttpHdrCc.h HttpHdrCc.cc HttpHdrSc.cc \ - HttpHdrScTarget.cc tests/stub_libanyp.cc StatCounters.h \ - StatCounters.cc StatHist.h StatHist.cc StrList.h StrList.cc \ - HttpHdrRange.cc ETag.cc tests/stub_errorpage.cc \ - tests/stub_HttpRequest.cc log/access_log.h \ - tests/stub_access_log.cc refresh.h refresh.cc \ - tests/stub_store_client.cc tools.h tests/stub_tools.cc \ - tests/testStoreSupport.cc tests/testStoreSupport.h time.cc \ - wordlist.h wordlist.cc -@ENABLE_FS_UFS_TRUE@am_tests_testUfs_OBJECTS = \ -@ENABLE_FS_UFS_TRUE@ AccessLogEntry.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/testUfs.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_cache_manager.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_client_db.$(OBJEXT) \ + ClientDelayConfig.cc ClientDelayConfig.h StoreMeta.cc \ + StoreMeta.h StoreMetaMD5.cc StoreMetaMD5.h StoreMetaSTD.cc \ + StoreMetaSTD.h StoreMetaSTDLFS.cc StoreMetaSTDLFS.h \ + StoreMetaObjSize.h StoreMetaURL.cc StoreMetaURL.h \ + StoreMetaVary.cc StoreMetaVary.h unlinkd.h unlinkd.cc win32.cc \ + AccessLogEntry.cc AccessLogEntry.h tests/stub_CacheDigest.cc \ + CacheDigest.h ClientInfo.h tests/stub_CollapsedForwarding.cc \ + ConfigOption.cc ConfigParser.cc ETag.cc EventLoop.cc \ + FadingCounter.cc FileMap.h tests/stub_HelperChildConfig.cc \ + HttpBody.cc HttpBody.h HttpHdrCc.cc HttpHdrCc.h \ + HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ + HttpHdrScTarget.cc HttpHeader.cc HttpHeader.h \ + HttpHeaderFieldInfo.h HttpHeaderFieldStat.h HttpHeaderTools.cc \ + HttpHeaderTools.h HttpReply.cc tests/stub_HttpRequest.cc \ + LogTags.cc MasterXaction.cc MasterXaction.h MemBuf.cc \ + MemObject.cc MemStore.cc Notes.cc Notes.h Parsing.cc \ + tests/stub_Port.cc RemovalPolicy.cc RequestFlags.cc \ + RequestFlags.h tests/stub_SBufDetailedStats.cc StatCounters.cc \ + StatCounters.h StatHist.cc StatHist.h StoreFileSystem.cc \ + StoreIOState.cc StoreMetaUnpacker.cc tests/testStoreSupport.cc \ + tests/testStoreSupport.h StoreSwapLogData.cc StrList.cc \ + StrList.h String.cc Transients.cc tests/stub_UdsOp.cc \ + tests/testUfs.cc tests/testUfs.h tests/stub_access_log.cc \ + tests/stub_acl.cc tests/stub_cache_cf.cc cache_cf.h \ + tests/stub_cache_manager.cc cbdata.cc tests/stub_client_db.cc \ + client_db.h tests/stub_client_side_request.cc \ + tests/stub_debug.cc tests/stub_errorpage.cc event.cc \ + tests/stub_fatal.cc fatal.h fd.cc fd.h fde.cc fde.h filemap.cc \ + fs_io.cc fs_io.h tests/stub_helper.cc tests/stub_http.cc \ + tests/stub_icp.cc int.cc int.h tests/stub_internal.cc \ + internal.h tests/stub_ipc.cc tests/stub_ipcache.cc \ + tests/stub_libanyp.cc tests/stub_libauth.cc \ + tests/stub_liberror.cc tests/stub_libeui.cc \ + tests/stub_libformat.cc tests/stub_libicmp.cc \ + tests/stub_liblog.cc tests/stub_libsecurity.cc \ + log/access_log.h mem_node.cc tests/stub_mime.cc mime.h \ + tests/stub_neighbors.cc tests/stub_pconn.cc refresh.cc \ + refresh.h repl_modules.h tests/stub_stat.cc stmem.cc store.cc \ + tests/stub_store_client.cc store_io.cc store_key_md5.cc \ + store_key_md5.h tests/stub_store_rebuild.cc store_rebuild.h \ + tests/stub_store_stats.cc store_swapmeta.cc store_swapout.cc \ + time.cc tests/stub_tools.cc tools.h wordlist.cc wordlist.h +@ENABLE_FS_UFS_TRUE@am_tests_testUfs_OBJECTS = $(am__objects_3) \ +@ENABLE_FS_UFS_TRUE@ $(am__objects_10) $(am__objects_11) \ +@ENABLE_FS_UFS_TRUE@ $(am__objects_12) AccessLogEntry.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_CacheDigest.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ tests/stub_CollapsedForwarding.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ ConfigOption.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ ConfigParser.$(OBJEXT) ETag.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ EventLoop.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ FadingCounter.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ tests/stub_HelperChildConfig.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_icp.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_ipc.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_ipcache.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_libeui.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_libicmp.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_liblog.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_neighbors.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_pconn.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ HttpBody.$(OBJEXT) HttpHdrCc.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ HttpHdrContRange.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ HttpHdrRange.$(OBJEXT) HttpHdrSc.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ HttpHdrScTarget.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ HttpHeader.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ HttpHeaderTools.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ HttpReply.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_HttpRequest.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ LogTags.$(OBJEXT) MasterXaction.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ MemBuf.$(OBJEXT) MemObject.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ MemStore.$(OBJEXT) Notes.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ Parsing.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ tests/stub_Port.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_UdsOp.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_internal.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_libformat.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_libsecurity.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_stat.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_store_rebuild.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_store_stats.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_fatal.$(OBJEXT) fd.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ fde.$(OBJEXT) FadingCounter.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ fs_io.$(OBJEXT) filemap.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ HttpBody.$(OBJEXT) HttpReply.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ int.$(OBJEXT) LogTags.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ RemovalPolicy.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ RequestFlags.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ Transients.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ MasterXaction.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ MemObject.$(OBJEXT) MemStore.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ Notes.$(OBJEXT) StoreSwapLogData.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_SBufDetailedStats.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ StatCounters.$(OBJEXT) StatHist.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ StoreFileSystem.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ StoreIOState.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ StoreMetaUnpacker.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ $(am__objects_11) \ -@ENABLE_FS_UFS_TRUE@ StoreFileSystem.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ store_io.$(OBJEXT) store_swapout.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ store_swapmeta.$(OBJEXT) $(am__objects_12) \ -@ENABLE_FS_UFS_TRUE@ $(am__objects_13) event.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ $(am__objects_3) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_CacheDigest.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ ConfigParser.$(OBJEXT) EventLoop.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ RemovalPolicy.$(OBJEXT) store.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ store_key_md5.$(OBJEXT) Parsing.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ ConfigOption.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/testStoreSupport.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ StoreSwapLogData.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ StrList.$(OBJEXT) String.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ Transients.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_UdsOp.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/testUfs.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_access_log.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ tests/stub_acl.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ tests/stub_cache_cf.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_helper.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_cache_manager.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ cbdata.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_SBufDetailedStats.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ String.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_debug.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_client_db.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ tests/stub_client_side_request.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_debug.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_errorpage.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ event.$(OBJEXT) tests/stub_fatal.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ fd.$(OBJEXT) fde.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ filemap.$(OBJEXT) fs_io.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_helper.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ tests/stub_http.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_icp.$(OBJEXT) int.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_internal.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_ipc.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_ipcache.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_libanyp.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ tests/stub_libauth.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ mem_node.$(OBJEXT) stmem.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_liberror.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_libeui.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_libformat.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_libicmp.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_liblog.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_libsecurity.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ mem_node.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ tests/stub_mime.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ HttpHeaderTools.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ HttpHeader.$(OBJEXT) MemBuf.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ HttpHdrContRange.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ HttpHdrCc.$(OBJEXT) HttpHdrSc.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ HttpHdrScTarget.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_libanyp.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ StatCounters.$(OBJEXT) StatHist.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ StrList.$(OBJEXT) HttpHdrRange.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ ETag.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_errorpage.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_HttpRequest.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/stub_access_log.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_neighbors.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_pconn.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ refresh.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_stat.$(OBJEXT) stmem.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ store.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ tests/stub_store_client.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ store_io.$(OBJEXT) store_key_md5.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_store_rebuild.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ tests/stub_store_stats.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ store_swapmeta.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ store_swapout.$(OBJEXT) time.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ tests/stub_tools.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ tests/testStoreSupport.$(OBJEXT) \ -@ENABLE_FS_UFS_TRUE@ time.$(OBJEXT) wordlist.$(OBJEXT) +@ENABLE_FS_UFS_TRUE@ wordlist.$(OBJEXT) @ENABLE_FS_UFS_TRUE@nodist_tests_testUfs_OBJECTS = $(am__objects_18) \ -@ENABLE_FS_UFS_TRUE@ hier_code.$(OBJEXT) SquidMath.$(OBJEXT) \ +@ENABLE_FS_UFS_TRUE@ SquidMath.$(OBJEXT) hier_code.$(OBJEXT) \ @ENABLE_FS_UFS_TRUE@ swap_log_op.$(OBJEXT) tests_testUfs_OBJECTS = $(am_tests_testUfs_OBJECTS) \ $(nodist_tests_testUfs_OBJECTS) @@ -1925,8 +1921,8 @@ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testUfs_LDFLAGS) $(LDFLAGS) \ -o $@ am_tests_testYesNoNone_OBJECTS = tests/testYesNoNone.$(OBJEXT) -nodist_tests_testYesNoNone_OBJECTS = tests/stub_debug.$(OBJEXT) \ - tests/stub_SBuf.$(OBJEXT) +nodist_tests_testYesNoNone_OBJECTS = tests/stub_SBuf.$(OBJEXT) \ + tests/stub_debug.$(OBJEXT) tests_testYesNoNone_OBJECTS = $(am_tests_testYesNoNone_OBJECTS) \ $(nodist_tests_testYesNoNone_OBJECTS) tests_testYesNoNone_DEPENDENCIES = base/libbase.la \ @@ -1936,15 +1932,7 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_testYesNoNone_LDFLAGS) \ $(LDFLAGS) -o $@ -am__tests_test_http_range_SOURCES_DIST = AccessLogEntry.cc BodyPipe.cc \ - cache_cf.h AuthReg.h RefreshPattern.h CachePeer.cc CachePeer.h \ - cache_manager.cc CacheDigest.h tests/stub_CacheDigest.cc \ - carp.h tests/stub_carp.cc cbdata.cc tests/stub_client_db.cc \ - client_side.h client_side.cc client_side_reply.cc \ - client_side_request.cc ClientInfo.h clientStream.cc \ - tests/stub_CollapsedForwarding.cc ConfigOption.cc \ - ConfigParser.cc CpuAffinityMap.cc CpuAffinityMap.h \ - CpuAffinitySet.cc CpuAffinitySet.h debug.cc BandwidthBucket.cc \ +am__tests_test_http_range_SOURCES_DIST = BandwidthBucket.cc \ BandwidthBucket.h CommonPool.h CompositePoolNode.h \ delay_pools.cc DelayId.cc DelayId.h DelayIdComposite.h \ DelayBucket.cc DelayBucket.h DelayConfig.cc DelayConfig.h \ @@ -1952,109 +1940,118 @@ DelayTagged.cc DelayTagged.h DelayUser.cc DelayUser.h \ DelayVector.cc DelayVector.h MessageBucket.cc MessageBucket.h \ MessageDelayPools.h MessageDelayPools.cc NullDelayId.h \ - ClientDelayConfig.cc ClientDelayConfig.h fs_io.h fs_io.cc \ - dlink.h dlink.cc dns_internal.cc errorpage.cc \ - tests/stub_ETag.cc event.cc FadingCounter.cc fatal.h \ - tests/stub_libauth.cc tests/stub_fatal.cc fd.h fd.cc fde.cc \ - FileMap.h filemap.cc fqdncache.h fqdncache.cc FwdState.cc \ - FwdState.h gopher.h tests/stub_gopher.cc HappyConnOpener.cc \ - HappyConnOpener.h helper.cc hier_code.h htcp.cc htcp.h http.cc \ - HttpBody.h HttpBody.cc tests/stub_HttpControlMsg.cc \ - HttpHeaderFieldStat.h HttpHdrCc.h HttpHdrCc.cc \ + ClientDelayConfig.cc ClientDelayConfig.h dns_internal.cc \ + htcp.cc htcp.h SquidIpc.h ipc.cc ipc_win32.cc SnmpRequest.h \ + snmp_core.h snmp_core.cc snmp_agent.h snmp_agent.cc unlinkd.h \ + unlinkd.cc win32.cc AccessLogEntry.cc AuthReg.h BodyPipe.cc \ + tests/stub_CacheDigest.cc CacheDigest.h CachePeer.cc \ + CachePeer.h ClientInfo.h tests/stub_CollapsedForwarding.cc \ + ConfigOption.cc ConfigParser.cc CpuAffinityMap.cc \ + CpuAffinityMap.h CpuAffinitySet.cc CpuAffinitySet.h \ + tests/stub_ETag.cc tests/stub_EventLoop.cc FadingCounter.cc \ + FileMap.h FwdState.cc FwdState.h HappyConnOpener.cc \ + HappyConnOpener.h HttpBody.cc HttpBody.h \ + tests/stub_HttpControlMsg.cc HttpHdrCc.cc HttpHdrCc.h \ HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ - HttpHdrScTarget.cc HttpHeader.h HttpHeader.cc \ - HttpHeaderFieldInfo.h HttpHeaderTools.h HttpHeaderTools.cc \ - HttpReply.cc PeerPoolMgr.h PeerPoolMgr.cc RequestFlags.h \ - RequestFlags.cc HttpRequest.cc icp_v2.cc icp_v3.cc int.h \ - int.cc internal.h internal.cc SquidIpc.h ipc.cc ipc_win32.cc \ - ipcache.cc LogTags.cc MasterXaction.cc MasterXaction.h \ - MemBuf.cc MemObject.cc tests/stub_libmem.cc mem_node.cc mime.h \ - mime.cc mime_header.h mime_header.cc multicast.h multicast.cc \ - neighbors.h neighbors.cc Notes.cc Notes.h Parsing.cc \ - peer_digest.cc peer_proxy_negotiate_auth.h \ - peer_proxy_negotiate_auth.cc peer_select.cc peer_sourcehash.h \ - peer_sourcehash.cc peer_userhash.h peer_userhash.cc \ - Pipeline.cc Pipeline.h pconn.cc redirect.h \ - tests/stub_redirect.cc refresh.h refresh.cc RemovalPolicy.cc \ - ResolvedPeers.cc ResolvedPeers.h \ - tests/stub_SBufDetailedStats.cc SnmpRequest.h snmp_core.h \ - snmp_core.cc snmp_agent.h snmp_agent.cc SquidMath.h \ - SquidMath.cc IoStats.h stat.h stat.cc StatCounters.h \ - StatCounters.cc StatHist.h StatHist.cc stmem.cc repl_modules.h \ - store.cc store_client.cc store_digest.h \ - tests/stub_store_digest.cc store_key_md5.h store_key_md5.cc \ - store_io.cc store_log.h store_log.cc store_rebuild.h \ - store_rebuild.cc store_swapin.h store_swapin.cc \ - store_swapmeta.cc store_swapout.cc StoreFileSystem.cc \ - StoreIOState.cc tests/stub_StoreMeta.cc StoreMetaUnpacker.cc \ - StoreSwapLogData.cc String.cc StrList.h StrList.cc \ - tests/stub_libstore.cc Transients.cc tests/test_http_range.cc \ - tests/stub_cache_cf.cc tests/stub_external_acl.cc \ - tests/stub_HttpUpgradeProtocolAccess.cc \ - tests/stub_ipc_Forwarder.cc tests/stub_libdiskio.cc \ - tests/stub_libeui.cc tests/stub_libsecurity.cc \ - tests/stub_main_cc.cc tests/stub_MemStore.cc \ - tests/stub_store_stats.cc tests/stub_EventLoop.cc time.cc \ - tools.h tools.cc tests/stub_tunnel.cc unlinkd.h unlinkd.cc \ - urn.h urn.cc wccp2.h tests/stub_wccp2.cc whois.h \ - tests/stub_whois.cc win32.cc wordlist.h wordlist.cc -am_tests_test_http_range_OBJECTS = AccessLogEntry.$(OBJEXT) \ - BodyPipe.$(OBJEXT) CachePeer.$(OBJEXT) cache_manager.$(OBJEXT) \ - tests/stub_CacheDigest.$(OBJEXT) tests/stub_carp.$(OBJEXT) \ - cbdata.$(OBJEXT) tests/stub_client_db.$(OBJEXT) \ - client_side.$(OBJEXT) client_side_reply.$(OBJEXT) \ - client_side_request.$(OBJEXT) clientStream.$(OBJEXT) \ - tests/stub_CollapsedForwarding.$(OBJEXT) \ + HttpHdrScTarget.cc HttpHeader.cc HttpHeader.h \ + HttpHeaderFieldInfo.h HttpHeaderFieldStat.h HttpHeaderTools.cc \ + HttpHeaderTools.h HttpReply.cc HttpRequest.cc \ + tests/stub_HttpUpgradeProtocolAccess.cc IoStats.h LogTags.cc \ + MasterXaction.cc MasterXaction.h MemBuf.cc MemObject.cc \ + tests/stub_MemStore.cc Notes.cc Notes.h Parsing.cc \ + PeerPoolMgr.cc PeerPoolMgr.h Pipeline.cc Pipeline.h \ + RefreshPattern.h RemovalPolicy.cc RequestFlags.cc \ + RequestFlags.h ResolvedPeers.cc ResolvedPeers.h \ + tests/stub_SBufDetailedStats.cc SquidMath.cc SquidMath.h \ + StatCounters.cc StatCounters.h StatHist.cc StatHist.h \ + StoreFileSystem.cc StoreIOState.cc tests/stub_StoreMeta.cc \ + StoreMetaUnpacker.cc StoreSwapLogData.cc StrList.cc StrList.h \ + String.cc Transients.cc tests/test_http_range.cc \ + tests/stub_cache_cf.cc cache_cf.h cache_manager.cc \ + tests/stub_carp.cc carp.h cbdata.cc clientStream.cc \ + tests/stub_client_db.cc client_side.cc client_side.h \ + client_side_reply.cc client_side_request.cc debug.cc dlink.cc \ + dlink.h errorpage.cc event.cc tests/stub_external_acl.cc \ + tests/stub_fatal.cc fatal.h fd.cc fd.h fde.cc filemap.cc \ + fqdncache.cc fqdncache.h fs_io.cc fs_io.h tests/stub_gopher.cc \ + gopher.h helper.cc hier_code.h http.cc icp_v2.cc icp_v3.cc \ + int.cc int.h internal.cc internal.h \ + tests/stub_ipc_Forwarder.cc ipcache.cc tests/stub_libauth.cc \ + tests/stub_libdiskio.cc tests/stub_liberror.cc \ + tests/stub_libeui.cc tests/stub_libmem.cc \ + tests/stub_libsecurity.cc tests/stub_libstore.cc \ + tests/stub_main_cc.cc mem_node.cc mime.cc mime.h \ + mime_header.cc mime_header.h multicast.cc multicast.h \ + neighbors.cc neighbors.h pconn.cc peer_digest.cc \ + peer_proxy_negotiate_auth.cc peer_proxy_negotiate_auth.h \ + peer_select.cc peer_sourcehash.cc peer_sourcehash.h \ + peer_userhash.cc peer_userhash.h tests/stub_redirect.cc \ + redirect.h refresh.cc refresh.h repl_modules.h stat.cc stat.h \ + stmem.cc store.cc store_client.cc tests/stub_store_digest.cc \ + store_digest.h store_io.cc store_key_md5.cc store_key_md5.h \ + store_log.cc store_log.h store_rebuild.cc store_rebuild.h \ + tests/stub_store_stats.cc store_swapin.cc store_swapin.h \ + store_swapmeta.cc store_swapout.cc time.cc tools.cc tools.h \ + tests/stub_tunnel.cc urn.cc urn.h tests/stub_wccp2.cc wccp2.h \ + tests/stub_whois.cc whois.h wordlist.cc wordlist.h +am_tests_test_http_range_OBJECTS = $(am__objects_3) $(am__objects_4) \ + $(am__objects_5) $(am__objects_6) $(am__objects_9) \ + $(am__objects_11) $(am__objects_12) AccessLogEntry.$(OBJEXT) \ + BodyPipe.$(OBJEXT) tests/stub_CacheDigest.$(OBJEXT) \ + CachePeer.$(OBJEXT) tests/stub_CollapsedForwarding.$(OBJEXT) \ ConfigOption.$(OBJEXT) ConfigParser.$(OBJEXT) \ CpuAffinityMap.$(OBJEXT) CpuAffinitySet.$(OBJEXT) \ - debug.$(OBJEXT) $(am__objects_3) fs_io.$(OBJEXT) \ - dlink.$(OBJEXT) $(am__objects_4) errorpage.$(OBJEXT) \ - tests/stub_ETag.$(OBJEXT) event.$(OBJEXT) \ - FadingCounter.$(OBJEXT) tests/stub_libauth.$(OBJEXT) \ - tests/stub_fatal.$(OBJEXT) fd.$(OBJEXT) fde.$(OBJEXT) \ - filemap.$(OBJEXT) fqdncache.$(OBJEXT) FwdState.$(OBJEXT) \ - tests/stub_gopher.$(OBJEXT) HappyConnOpener.$(OBJEXT) \ - helper.$(OBJEXT) $(am__objects_5) http.$(OBJEXT) \ - HttpBody.$(OBJEXT) tests/stub_HttpControlMsg.$(OBJEXT) \ - HttpHdrCc.$(OBJEXT) HttpHdrContRange.$(OBJEXT) \ - HttpHdrRange.$(OBJEXT) HttpHdrSc.$(OBJEXT) \ - HttpHdrScTarget.$(OBJEXT) HttpHeader.$(OBJEXT) \ - HttpHeaderTools.$(OBJEXT) HttpReply.$(OBJEXT) \ - PeerPoolMgr.$(OBJEXT) RequestFlags.$(OBJEXT) \ - HttpRequest.$(OBJEXT) icp_v2.$(OBJEXT) icp_v3.$(OBJEXT) \ - int.$(OBJEXT) internal.$(OBJEXT) $(am__objects_6) \ - ipcache.$(OBJEXT) LogTags.$(OBJEXT) MasterXaction.$(OBJEXT) \ - MemBuf.$(OBJEXT) MemObject.$(OBJEXT) \ - tests/stub_libmem.$(OBJEXT) mem_node.$(OBJEXT) mime.$(OBJEXT) \ + tests/stub_ETag.$(OBJEXT) tests/stub_EventLoop.$(OBJEXT) \ + FadingCounter.$(OBJEXT) FwdState.$(OBJEXT) \ + HappyConnOpener.$(OBJEXT) HttpBody.$(OBJEXT) \ + tests/stub_HttpControlMsg.$(OBJEXT) HttpHdrCc.$(OBJEXT) \ + HttpHdrContRange.$(OBJEXT) HttpHdrRange.$(OBJEXT) \ + HttpHdrSc.$(OBJEXT) HttpHdrScTarget.$(OBJEXT) \ + HttpHeader.$(OBJEXT) HttpHeaderTools.$(OBJEXT) \ + HttpReply.$(OBJEXT) HttpRequest.$(OBJEXT) \ + tests/stub_HttpUpgradeProtocolAccess.$(OBJEXT) \ + LogTags.$(OBJEXT) MasterXaction.$(OBJEXT) MemBuf.$(OBJEXT) \ + MemObject.$(OBJEXT) tests/stub_MemStore.$(OBJEXT) \ + Notes.$(OBJEXT) Parsing.$(OBJEXT) PeerPoolMgr.$(OBJEXT) \ + Pipeline.$(OBJEXT) RemovalPolicy.$(OBJEXT) \ + RequestFlags.$(OBJEXT) ResolvedPeers.$(OBJEXT) \ + tests/stub_SBufDetailedStats.$(OBJEXT) SquidMath.$(OBJEXT) \ + StatCounters.$(OBJEXT) StatHist.$(OBJEXT) \ + StoreFileSystem.$(OBJEXT) StoreIOState.$(OBJEXT) \ + tests/stub_StoreMeta.$(OBJEXT) StoreMetaUnpacker.$(OBJEXT) \ + StoreSwapLogData.$(OBJEXT) StrList.$(OBJEXT) String.$(OBJEXT) \ + Transients.$(OBJEXT) tests/test_http_range.$(OBJEXT) \ + tests/stub_cache_cf.$(OBJEXT) cache_manager.$(OBJEXT) \ + tests/stub_carp.$(OBJEXT) cbdata.$(OBJEXT) \ + clientStream.$(OBJEXT) tests/stub_client_db.$(OBJEXT) \ + client_side.$(OBJEXT) client_side_reply.$(OBJEXT) \ + client_side_request.$(OBJEXT) debug.$(OBJEXT) dlink.$(OBJEXT) \ + errorpage.$(OBJEXT) event.$(OBJEXT) \ + tests/stub_external_acl.$(OBJEXT) tests/stub_fatal.$(OBJEXT) \ + fd.$(OBJEXT) fde.$(OBJEXT) filemap.$(OBJEXT) \ + fqdncache.$(OBJEXT) fs_io.$(OBJEXT) \ + tests/stub_gopher.$(OBJEXT) helper.$(OBJEXT) http.$(OBJEXT) \ + icp_v2.$(OBJEXT) icp_v3.$(OBJEXT) int.$(OBJEXT) \ + internal.$(OBJEXT) tests/stub_ipc_Forwarder.$(OBJEXT) \ + ipcache.$(OBJEXT) tests/stub_libauth.$(OBJEXT) \ + tests/stub_libdiskio.$(OBJEXT) tests/stub_liberror.$(OBJEXT) \ + tests/stub_libeui.$(OBJEXT) tests/stub_libmem.$(OBJEXT) \ + tests/stub_libsecurity.$(OBJEXT) tests/stub_libstore.$(OBJEXT) \ + tests/stub_main_cc.$(OBJEXT) mem_node.$(OBJEXT) mime.$(OBJEXT) \ mime_header.$(OBJEXT) multicast.$(OBJEXT) neighbors.$(OBJEXT) \ - Notes.$(OBJEXT) Parsing.$(OBJEXT) peer_digest.$(OBJEXT) \ + pconn.$(OBJEXT) peer_digest.$(OBJEXT) \ peer_proxy_negotiate_auth.$(OBJEXT) peer_select.$(OBJEXT) \ peer_sourcehash.$(OBJEXT) peer_userhash.$(OBJEXT) \ - Pipeline.$(OBJEXT) pconn.$(OBJEXT) \ - tests/stub_redirect.$(OBJEXT) refresh.$(OBJEXT) \ - RemovalPolicy.$(OBJEXT) ResolvedPeers.$(OBJEXT) \ - tests/stub_SBufDetailedStats.$(OBJEXT) $(am__objects_10) \ - SquidMath.$(OBJEXT) stat.$(OBJEXT) StatCounters.$(OBJEXT) \ - StatHist.$(OBJEXT) stmem.$(OBJEXT) store.$(OBJEXT) \ - store_client.$(OBJEXT) tests/stub_store_digest.$(OBJEXT) \ - store_key_md5.$(OBJEXT) store_io.$(OBJEXT) store_log.$(OBJEXT) \ - store_rebuild.$(OBJEXT) store_swapin.$(OBJEXT) \ - store_swapmeta.$(OBJEXT) store_swapout.$(OBJEXT) \ - StoreFileSystem.$(OBJEXT) StoreIOState.$(OBJEXT) \ - tests/stub_StoreMeta.$(OBJEXT) StoreMetaUnpacker.$(OBJEXT) \ - StoreSwapLogData.$(OBJEXT) String.$(OBJEXT) StrList.$(OBJEXT) \ - tests/stub_libstore.$(OBJEXT) Transients.$(OBJEXT) \ - tests/test_http_range.$(OBJEXT) tests/stub_cache_cf.$(OBJEXT) \ - tests/stub_external_acl.$(OBJEXT) \ - tests/stub_HttpUpgradeProtocolAccess.$(OBJEXT) \ - tests/stub_ipc_Forwarder.$(OBJEXT) \ - tests/stub_libdiskio.$(OBJEXT) tests/stub_libeui.$(OBJEXT) \ - tests/stub_libsecurity.$(OBJEXT) tests/stub_main_cc.$(OBJEXT) \ - tests/stub_MemStore.$(OBJEXT) tests/stub_store_stats.$(OBJEXT) \ - tests/stub_EventLoop.$(OBJEXT) time.$(OBJEXT) tools.$(OBJEXT) \ - tests/stub_tunnel.$(OBJEXT) $(am__objects_12) urn.$(OBJEXT) \ + tests/stub_redirect.$(OBJEXT) refresh.$(OBJEXT) stat.$(OBJEXT) \ + stmem.$(OBJEXT) store.$(OBJEXT) store_client.$(OBJEXT) \ + tests/stub_store_digest.$(OBJEXT) store_io.$(OBJEXT) \ + store_key_md5.$(OBJEXT) store_log.$(OBJEXT) \ + store_rebuild.$(OBJEXT) tests/stub_store_stats.$(OBJEXT) \ + store_swapin.$(OBJEXT) store_swapmeta.$(OBJEXT) \ + store_swapout.$(OBJEXT) time.$(OBJEXT) tools.$(OBJEXT) \ + tests/stub_tunnel.$(OBJEXT) urn.$(OBJEXT) \ tests/stub_wccp2.$(OBJEXT) tests/stub_whois.$(OBJEXT) \ - $(am__objects_13) wordlist.$(OBJEXT) + wordlist.$(OBJEXT) nodist_tests_test_http_range_OBJECTS = $(am__objects_17) tests_test_http_range_OBJECTS = $(am_tests_test_http_range_OBJECTS) \ $(nodist_tests_test_http_range_OBJECTS) @@ -2073,25 +2070,27 @@ $(top_builddir)/lib/libmiscutil.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) tests_test_http_range_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(tests_test_http_range_LDFLAGS) \ $(LDFLAGS) -o $@ -am__ufsdump_SOURCES_DIST = ClientInfo.h cbdata.h cbdata.cc debug.cc \ - int.h int.cc mem/forward.h MemBuf.cc MemBuf.h Parsing.h \ - store_key_md5.h store_key_md5.cc tests/stub_StoreMeta.cc \ - StoreMetaUnpacker.cc String.cc SquidNew.cc tests/stub_time.cc \ - ufsdump.cc dlink.h dlink.cc helper/ChildConfig.h \ - tests/stub_HelperChildConfig.cc RemovalPolicy.cc win32.cc fd.h \ - tests/stub_fd.cc -am_ufsdump_OBJECTS = cbdata.$(OBJEXT) debug.$(OBJEXT) int.$(OBJEXT) \ - MemBuf.$(OBJEXT) store_key_md5.$(OBJEXT) \ +am__ufsdump_SOURCES_DIST = win32.cc ClientInfo.h \ + tests/stub_HelperChildConfig.cc MemBuf.cc MemBuf.h Parsing.h \ + RemovalPolicy.cc SquidNew.cc tests/stub_StoreMeta.cc \ + StoreMetaUnpacker.cc String.cc cbdata.cc cbdata.h debug.cc \ + dlink.cc dlink.h tests/stub_fd.cc fd.h helper/ChildConfig.h \ + int.cc int.h mem/forward.h store_key_md5.cc store_key_md5.h \ + tests/stub_time.cc ufsdump.cc +am_ufsdump_OBJECTS = $(am__objects_12) \ + tests/stub_HelperChildConfig.$(OBJEXT) MemBuf.$(OBJEXT) \ + RemovalPolicy.$(OBJEXT) SquidNew.$(OBJEXT) \ tests/stub_StoreMeta.$(OBJEXT) StoreMetaUnpacker.$(OBJEXT) \ - String.$(OBJEXT) SquidNew.$(OBJEXT) tests/stub_time.$(OBJEXT) \ - ufsdump.$(OBJEXT) dlink.$(OBJEXT) \ - tests/stub_HelperChildConfig.$(OBJEXT) RemovalPolicy.$(OBJEXT) \ - $(am__objects_13) tests/stub_fd.$(OBJEXT) + String.$(OBJEXT) cbdata.$(OBJEXT) debug.$(OBJEXT) \ + dlink.$(OBJEXT) tests/stub_fd.$(OBJEXT) int.$(OBJEXT) \ + store_key_md5.$(OBJEXT) tests/stub_time.$(OBJEXT) \ + ufsdump.$(OBJEXT) nodist_ufsdump_OBJECTS = globals.$(OBJEXT) ufsdump_OBJECTS = $(am_ufsdump_OBJECTS) $(nodist_ufsdump_OBJECTS) am_unlinkd_OBJECTS = unlinkd_daemon.$(OBJEXT) @@ -2164,7 +2163,6 @@ ./$(DEPDIR)/client_side_request.Po ./$(DEPDIR)/comm.Plo \ ./$(DEPDIR)/debug.Po ./$(DEPDIR)/delay_pools.Po \ ./$(DEPDIR)/dlink.Po ./$(DEPDIR)/dns_internal.Po \ - ./$(DEPDIR)/err_detail_type.Po ./$(DEPDIR)/err_type.Po \ ./$(DEPDIR)/errorpage.Po ./$(DEPDIR)/event.Po \ ./$(DEPDIR)/external_acl.Po ./$(DEPDIR)/fatal.Po \ ./$(DEPDIR)/fd.Po ./$(DEPDIR)/fde.Po ./$(DEPDIR)/filemap.Po \ @@ -2240,6 +2238,7 @@ tests/$(DEPDIR)/stub_libauth_acls.Po \ tests/$(DEPDIR)/stub_libcomm.Po \ tests/$(DEPDIR)/stub_libdiskio.Po \ + tests/$(DEPDIR)/stub_liberror.Po \ tests/$(DEPDIR)/stub_libeui.Po \ tests/$(DEPDIR)/stub_libformat.Po \ tests/$(DEPDIR)/stub_libhttp.Po \ @@ -2970,18 +2969,19 @@ StoreMetaVary.h LOADABLE_MODULES_SOURCES = \ - LoadableModule.h \ LoadableModule.cc \ - LoadableModules.h \ - LoadableModules.cc + LoadableModule.h \ + LoadableModules.cc \ + LoadableModules.h -SUBDIRS = mem base anyp helper dns ftp parser comm eui acl format \ - clients sbuf servers fs repl store DiskIO proxyp \ +SUBDIRS = mem base anyp helper dns ftp parser comm error eui acl \ + format clients sbuf servers fs repl store DiskIO proxyp \ $(am__append_2) http ip icmp ident log ipc mgr $(am__append_3) \ security $(am__append_5) $(am__append_6) $(am__append_7) -DIST_SUBDIRS = mem base anyp helper dns ftp parser comm eui acl format \ - clients sbuf servers fs repl store DiskIO proxyp auth http ip \ - icmp ident log ipc mgr ssl security snmp adaptation esi +DIST_SUBDIRS = mem base anyp helper dns ftp parser comm error eui acl \ + format clients sbuf servers fs repl store DiskIO proxyp auth \ + http ip icmp ident log ipc mgr ssl security snmp adaptation \ + esi @ENABLE_AUTH_TRUE@AUTH_LIBS = auth/libauth.la @ENABLE_AUTH_TRUE@AUTH_ACL_LIBS = auth/libacls.la SSL_LIBS = $(am__append_4) @@ -3061,106 +3061,109 @@ cf_gen_SOURCES = cf_gen.cc nodist_cf_gen_HEADER = cf_gen_defines.cci cf_gen_LDADD = -ACL_REGISTRATION_SOURCES = AclRegs.cc AuthReg.cc +ACL_REGISTRATION_SOURCES = \ + AclRegs.cc \ + AuthReg.cc + # common library for all the binaries and tests. This is kindof a catch all # and smaller libraries split from this are encouraged. Using lt convenience # libraries, dependencies should not be a problem either. libsquid_la_SOURCES = \ - comm.cc \ - comm.h \ CommCalls.cc \ CommCalls.h \ DescriptorSet.cc \ DescriptorSet.h \ + SquidConfig.cc \ SquidConfig.h \ - SquidConfig.cc + comm.cc \ + comm.h -squid_SOURCES = $(ACL_REGISTRATION_SOURCES) AccessLogEntry.cc \ - AccessLogEntry.h AsyncEngine.cc AsyncEngine.h cache_cf.h \ - AuthReg.h RefreshPattern.h cache_cf.cc CacheDigest.h \ - CacheDigest.cc cache_manager.cc NeighborTypeDomainList.h \ - CachePeer.cc CachePeer.h CacheManager.h carp.h carp.cc \ - cbdata.cc cbdata.h client_db.h client_db.cc client_side.h \ - client_side.cc client_side.h client_side_reply.cc \ - client_side_reply.h client_side_request.cc \ - client_side_request.h ClientInfo.h BodyPipe.cc BodyPipe.h \ - ClientInfo.h ClientRequestContext.h clientStream.cc \ - clientStream.h clientStreamForward.h CollapsedForwarding.cc \ - CollapsedForwarding.h CollapsingHistory.h CommandLine.cc \ - CommandLine.h CompletionDispatcher.cc CompletionDispatcher.h \ - CommRead.h ConfigOption.cc ConfigParser.cc ConfigParser.h \ - CpuAffinity.cc CpuAffinity.h CpuAffinityMap.cc \ - CpuAffinityMap.h CpuAffinitySet.cc CpuAffinitySet.h debug.cc \ - Debug.h defines.h $(DELAY_POOL_SOURCE) fs_io.h fs_io.cc \ - dlink.h dlink.cc $(DNSSOURCE) Downloader.cc Downloader.h \ - enums.h err_type.h err_detail_type.h errorpage.cc errorpage.h \ - ETag.cc ETag.h event.cc event.h EventLoop.h EventLoop.cc \ - external_acl.cc ExternalACL.h ExternalACLEntry.cc \ - ExternalACLEntry.h FadingCounter.h FadingCounter.cc fatal.h \ - fatal.cc fd.h fd.cc fde.cc fde.h FileMap.h filemap.cc \ - fqdncache.h fqdncache.cc FwdState.cc FwdState.h Generic.h \ - globals.h gopher.h gopher.cc HappyConnOpener.cc \ - HappyConnOpener.h helper.cc helper.h hier_code.h \ - HierarchyLogEntry.h $(HTCPSOURCE) HttpUpgradeProtocolAccess.cc \ - HttpUpgradeProtocolAccess.h http.cc http.h \ - HttpHeaderFieldStat.h HttpHdrCc.h HttpHdrCc.cc HttpHdrRange.cc \ +squid_SOURCES = $(ACL_REGISTRATION_SOURCES) $(DELAY_POOL_SOURCE) \ + $(DNSSOURCE) $(HTCPSOURCE) $(IPC_SOURCE) $(LEAKFINDERSOURCE) \ + $(SNMP_SOURCE) $(STOREMETA_SOURCE) $(UNLINKDSOURCE) \ + $(WIN32_SOURCE) $(WINSVC_SOURCE) $(XPROF_STATS_SOURCE) \ + AccessLogEntry.cc AccessLogEntry.h AsyncEngine.cc \ + AsyncEngine.h AuthReg.h BodyPipe.cc BodyPipe.h CacheDigest.cc \ + CacheDigest.h CacheManager.h CachePeer.cc CachePeer.h \ + ClientInfo.h ClientRequestContext.h CollapsedForwarding.cc \ + CollapsedForwarding.h CollapsingHistory.h CommRead.h \ + CommandLine.cc CommandLine.h CompletionDispatcher.cc \ + CompletionDispatcher.h ConfigOption.cc ConfigParser.cc \ + ConfigParser.h CpuAffinity.cc CpuAffinity.h CpuAffinityMap.cc \ + CpuAffinityMap.h CpuAffinitySet.cc CpuAffinitySet.h Debug.h \ + Downloader.cc Downloader.h ETag.cc ETag.h EventLoop.cc \ + EventLoop.h ExternalACL.h ExternalACLEntry.cc \ + ExternalACLEntry.h FadingCounter.cc FadingCounter.h FileMap.h \ + FwdState.cc FwdState.h Generic.h HappyConnOpener.cc \ + HappyConnOpener.h HierarchyLogEntry.h HttpBody.cc HttpBody.h \ + HttpControlMsg.cc HttpControlMsg.h HttpHdrCc.cc HttpHdrCc.h \ + HttpHdrContRange.cc HttpHdrContRange.h HttpHdrRange.cc \ HttpHdrSc.cc HttpHdrSc.h HttpHdrScTarget.cc HttpHdrScTarget.h \ - HttpHdrContRange.cc HttpHdrContRange.h HttpHeaderStat.h \ - HttpHeader.h HttpHeader.cc HttpHeaderMask.h HttpHeaderRange.h \ - HttpHeaderFieldInfo.h HttpHeaderTools.h HttpHeaderTools.cc \ - HttpBody.h HttpBody.cc HttpControlMsg.cc HttpControlMsg.h \ - HttpReply.cc HttpReply.h RequestFlags.h RequestFlags.cc \ - HttpRequest.cc HttpRequest.h ICP.h icp_opcode.h icp_v2.cc \ - icp_v3.cc Instance.h Instance.cc int.h int.cc internal.h \ - internal.cc $(IPC_SOURCE) ipcache.cc ipcache.h \ - $(LEAKFINDERSOURCE) LogTags.cc LogTags.h lookup_t.h main.cc \ - MasterXaction.cc MasterXaction.h mem_node.cc mem_node.h \ - MemBuf.cc MemObject.cc MemObject.h MessageSizes.h mime.h \ - mime.cc mime_header.h mime_header.cc multicast.h multicast.cc \ - neighbors.h neighbors.cc Notes.h Notes.cc Parsing.cc Parsing.h \ - $(XPROF_STATS_SOURCE) pconn.cc pconn.h PeerDigest.h \ - peer_digest.cc peer_proxy_negotiate_auth.h \ - peer_proxy_negotiate_auth.cc peer_select.cc peer_sourcehash.h \ - peer_sourcehash.cc peer_userhash.h peer_userhash.cc \ - PeerPoolMgr.h PeerPoolMgr.cc PeerSelectState.h PingData.h \ - Pipeline.cc Pipeline.h protos.h redirect.h redirect.cc \ - refresh.h refresh.cc RemovalPolicy.cc RemovalPolicy.h \ - ResolvedPeers.cc ResolvedPeers.h send-announce.h \ - send-announce.cc SBufStatsAction.h SBufStatsAction.cc \ - sbuf/StringConvert.h $(SNMP_SOURCE) SquidMath.h SquidMath.cc \ - SquidNew.cc IoStats.h stat.h stat.cc StatCounters.h \ - StatCounters.cc StatHist.h StatHist.cc String.cc StrList.h \ - StrList.cc stmem.cc stmem.h repl_modules.h store.cc Store.h \ - StoreFileSystem.cc StoreFileSystem.h store_io.cc \ - StoreIOBuffer.h StoreIOState.cc StoreIOState.h store_client.cc \ - StoreClient.h store_digest.h store_digest.cc store_key_md5.h \ - store_key_md5.cc store_log.h store_log.cc store_rebuild.h \ - store_rebuild.cc store_swapin.h store_swapin.cc \ - store_swapmeta.cc store_swapout.cc StoreMetaUnpacker.cc \ - StoreMetaUnpacker.h $(STOREMETA_SOURCE) StoreSearch.h \ - StoreStats.cc StoreStats.h StoreSwapLogData.cc \ - StoreSwapLogData.h swap_log_op.h Transients.cc Transients.h \ - MemStore.cc MemStore.h time.cc TimeOrTag.h tools.h tools.cc \ - tunnel.cc typedefs.h $(UNLINKDSOURCE) urn.h urn.cc wccp.h \ - wccp.cc wccp2.h wccp2.cc whois.h whois.cc wordlist.h \ - wordlist.cc XactionInitiator.h XactionInitiator.cc \ - XactionStep.h $(WIN32_SOURCE) $(WINSVC_SOURCE) $(am__append_8) + HttpHeader.cc HttpHeader.h HttpHeaderFieldInfo.h \ + HttpHeaderFieldStat.h HttpHeaderMask.h HttpHeaderRange.h \ + HttpHeaderStat.h HttpHeaderTools.cc HttpHeaderTools.h \ + HttpReply.cc HttpReply.h HttpRequest.cc HttpRequest.h \ + HttpUpgradeProtocolAccess.cc HttpUpgradeProtocolAccess.h ICP.h \ + Instance.cc Instance.h IoStats.h LogTags.cc LogTags.h \ + MasterXaction.cc MasterXaction.h MemBuf.cc MemObject.cc \ + MemObject.h MemStore.cc MemStore.h MessageSizes.h \ + NeighborTypeDomainList.h Notes.cc Notes.h Parsing.cc Parsing.h \ + PeerDigest.h PeerPoolMgr.cc PeerPoolMgr.h PeerSelectState.h \ + PingData.h Pipeline.cc Pipeline.h RefreshPattern.h \ + RemovalPolicy.cc RemovalPolicy.h RequestFlags.cc \ + RequestFlags.h ResolvedPeers.cc ResolvedPeers.h \ + SBufStatsAction.cc SBufStatsAction.h SquidMath.cc SquidMath.h \ + SquidNew.cc StatCounters.cc StatCounters.h StatHist.cc \ + StatHist.h Store.h StoreClient.h StoreFileSystem.cc \ + StoreFileSystem.h StoreIOBuffer.h StoreIOState.cc \ + StoreIOState.h StoreMetaUnpacker.cc StoreMetaUnpacker.h \ + StoreSearch.h StoreStats.cc StoreStats.h StoreSwapLogData.cc \ + StoreSwapLogData.h StrList.cc StrList.h String.cc TimeOrTag.h \ + Transients.cc Transients.h XactionInitiator.cc \ + XactionInitiator.h XactionStep.h cache_cf.cc cache_cf.h \ + cache_manager.cc carp.cc carp.h cbdata.cc cbdata.h \ + clientStream.cc clientStream.h clientStreamForward.h \ + client_db.cc client_db.h client_side.cc client_side.h \ + client_side_reply.cc client_side_reply.h \ + client_side_request.cc client_side_request.h debug.cc \ + defines.h dlink.cc dlink.h enums.h errorpage.cc errorpage.h \ + event.cc event.h external_acl.cc fatal.cc fatal.h fd.cc fd.h \ + fde.cc fde.h filemap.cc fqdncache.cc fqdncache.h fs_io.cc \ + fs_io.h globals.h gopher.cc gopher.h helper.cc helper.h \ + hier_code.h http.cc http.h icp_opcode.h icp_v2.cc icp_v3.cc \ + int.cc int.h internal.cc internal.h ipcache.cc ipcache.h \ + lookup_t.h main.cc mem_node.cc mem_node.h mime.cc mime.h \ + mime_header.cc mime_header.h multicast.cc multicast.h \ + neighbors.cc neighbors.h pconn.cc pconn.h peer_digest.cc \ + peer_proxy_negotiate_auth.cc peer_proxy_negotiate_auth.h \ + peer_select.cc peer_sourcehash.cc peer_sourcehash.h \ + peer_userhash.cc peer_userhash.h protos.h redirect.cc \ + redirect.h refresh.cc refresh.h repl_modules.h \ + sbuf/StringConvert.h send-announce.cc send-announce.h stat.cc \ + stat.h stmem.cc stmem.h store.cc store_client.cc \ + store_digest.cc store_digest.h store_io.cc store_key_md5.cc \ + store_key_md5.h store_log.cc store_log.h store_rebuild.cc \ + store_rebuild.h store_swapin.cc store_swapin.h \ + store_swapmeta.cc store_swapout.cc swap_log_op.h time.cc \ + tools.cc tools.h tunnel.cc typedefs.h urn.cc urn.h wccp.cc \ + wccp.h wccp2.cc wccp2.h whois.cc whois.h wordlist.cc \ + wordlist.h $(am__append_8) EXTRA_squid_SOURCES = \ + $(DELAY_POOL_ALL_SOURCE) \ + $(LOADABLE_MODULES_SOURCES) \ + $(SNMP_ALL_SOURCE) \ + $(UNLINKDSOURCE) \ + $(WIN32_ALL_SOURCE) \ $(all_AUTHMODULES) \ ConfigOption.h \ - $(DELAY_POOL_ALL_SOURCE) \ + LeakFinder.cc \ + LeakFinder.h \ + ProfStats.cc \ htcp.cc \ htcp.h \ ipc.cc \ - ipc_win32.cc \ - ProfStats.cc \ - LeakFinder.cc \ - LeakFinder.h \ - $(SNMP_ALL_SOURCE) \ - $(UNLINKDSOURCE) \ - $(WIN32_ALL_SOURCE) \ - $(LOADABLE_MODULES_SOURCES) + ipc_win32.cc noinst_HEADERS = \ MemBuf.h \ @@ -3170,8 +3173,6 @@ BUILT_SOURCES = \ cf_gen_defines.cci \ cf_parser.cci \ - err_type.cc \ - err_detail_type.cc \ globals.cc \ hier_code.cc \ icp_opcode.cc \ @@ -3188,13 +3189,13 @@ helper/libhelper.la http/libhttp.la dns/libdns.la \ base/libbase.la libsquid.la ip/libip.la fs/libfs.la \ DiskIO/libdiskio.la comm/libcomm.la anyp/libanyp.la \ - security/libsecurity.la $(SSL_LIBS) ipc/libipc.la \ - mgr/libmgr.la proxyp/libproxyp.la parser/libparser.la \ - eui/libeui.la icmp/libicmp.la log/liblog.la \ - format/libformat.la sbuf/libsbuf.la $(XTRA_OBJS) $(REPL_OBJS) \ - $(NETTLELIB) $(CRYPTLIB) $(REGEXLIB) $(ADAPTATION_LIBS) \ - $(ESI_LIBS) $(SNMP_LIBS) mem/libmem.la store/libstore.la \ - $(top_builddir)/lib/libmisccontainers.la \ + security/libsecurity.la $(SSL_LIBS) error/liberror.la \ + ipc/libipc.la mgr/libmgr.la proxyp/libproxyp.la \ + parser/libparser.la eui/libeui.la icmp/libicmp.la \ + log/liblog.la format/libformat.la sbuf/libsbuf.la $(XTRA_OBJS) \ + $(REPL_OBJS) $(NETTLELIB) $(CRYPTLIB) $(REGEXLIB) \ + $(ADAPTATION_LIBS) $(ESI_LIBS) $(SNMP_LIBS) mem/libmem.la \ + store/libstore.la $(top_builddir)/lib/libmisccontainers.la \ $(top_builddir)/lib/libmiscencoding.la \ $(top_builddir)/lib/libmiscutil.la $(SSLLIB) $(EPOLL_LIBS) \ $(MINGW_LIBS) $(KRB5LIBS) $(SYSTEMD_LIBS) $(COMPAT_LIB) \ @@ -3207,32 +3208,32 @@ recv_announce_SOURCES = recv-announce.cc ufsdump_SOURCES = \ + $(WIN32_SOURCE) \ ClientInfo.h \ - cbdata.h \ - cbdata.cc \ - debug.cc \ - int.h \ - int.cc \ - mem/forward.h \ + tests/stub_HelperChildConfig.cc \ MemBuf.cc \ MemBuf.h \ Parsing.h \ - store_key_md5.h \ - store_key_md5.cc \ + RemovalPolicy.cc \ + SquidNew.cc \ tests/stub_StoreMeta.cc \ StoreMetaUnpacker.cc \ String.cc \ - SquidNew.cc \ - tests/stub_time.cc \ - ufsdump.cc \ - dlink.h \ + cbdata.cc \ + cbdata.h \ + debug.cc \ dlink.cc \ - helper/ChildConfig.h \ - tests/stub_HelperChildConfig.cc \ - RemovalPolicy.cc \ - $(WIN32_SOURCE) \ + dlink.h \ + tests/stub_fd.cc \ fd.h \ - tests/stub_fd.cc + helper/ChildConfig.h \ + int.cc \ + int.h \ + mem/forward.h \ + store_key_md5.cc \ + store_key_md5.h \ + tests/stub_time.cc \ + ufsdump.cc ufsdump_LDADD = \ ident/libident.la \ @@ -3345,6 +3346,7 @@ tests/stub_libauth.cc \ tests/stub_libcomm.cc \ tests/stub_libdiskio.cc \ + tests/stub_liberror.cc \ tests/stub_libeui.cc \ tests/stub_libformat.cc \ tests/stub_libhttp.cc \ @@ -3471,10 +3473,10 @@ tests/testLookupTable.h nodist_tests_testLookupTable_SOURCES = \ + tests/stub_SBufDetailedStats.cc \ base/LookupTable.h \ tests/stub_debug.cc \ - tests/stub_libmem.cc \ - tests/stub_SBufDetailedStats.cc + tests/stub_libmem.cc tests_testLookupTable_LDADD = \ sbuf/libsbuf.la \ @@ -3502,9 +3504,9 @@ tests/testYesNoNone.h nodist_tests_testYesNoNone_SOURCES = \ + tests/stub_SBuf.cc \ base/YesNoNone.h \ - tests/stub_debug.cc \ - tests/stub_SBuf.cc + tests/stub_debug.cc tests_testYesNoNone_LDADD = \ base/libbase.la \ @@ -3520,18 +3522,18 @@ tests/testUriScheme.h nodist_tests_testURL_SOURCES = \ - anyp/Uri.h \ - anyp/UriScheme.h \ + tests/stub_HelperChildConfig.cc \ + tests/stub_HttpHeader.cc \ + tests/stub_HttpRequest.cc \ + tests/stub_StatHist.cc \ String.cc \ tests/stub_access_log.cc \ + anyp/Uri.h \ + anyp/UriScheme.h \ tests/stub_cbdata.cc \ tests/stub_debug.cc \ - tests/stub_HelperChildConfig.cc \ - tests/stub_HttpHeader.cc \ - tests/stub_HttpRequest.cc \ tests/stub_libhttp.cc \ - tests/stub_libmem.cc \ - tests/stub_StatHist.cc + tests/stub_libmem.cc tests_testURL_LDADD = \ libsquid.la \ @@ -3564,10 +3566,10 @@ tests/testTokenizer.h nodist_tests_testTokenizer_SOURCES = \ - parser/Tokenizer.h \ + tests/stub_StatHist.cc \ tests/stub_debug.cc \ tests/stub_libmem.cc \ - tests/stub_StatHist.cc + parser/Tokenizer.h tests_testTokenizer_LDADD = \ parser/libparser.la \ @@ -3579,15 +3581,15 @@ tests_testTokenizer_LDFLAGS = $(LIBADD_DL) tests_testSBuf_SOURCES = \ - tests/SBufFindTest.cc \ - tests/SBufFindTest.h \ tests/testSBuf.cc \ - tests/testSBuf.h + tests/testSBuf.h \ + tests/SBufFindTest.cc \ + tests/SBufFindTest.h nodist_tests_testSBuf_SOURCES = \ + tests/stub_StatHist.cc \ tests/stub_debug.cc \ - tests/stub_libmem.cc \ - tests/stub_StatHist.cc + tests/stub_libmem.cc tests_testSBuf_LDADD = \ sbuf/libsbuf.la \ @@ -3602,9 +3604,9 @@ tests/testSBufList.h nodist_tests_testSBufList_SOURCES = \ + tests/stub_StatHist.cc \ tests/stub_debug.cc \ - tests/stub_libmem.cc \ - tests/stub_StatHist.cc + tests/stub_libmem.cc tests_testSBufList_LDADD = \ sbuf/libsbuf.la \ @@ -3619,8 +3621,8 @@ tests/testString.h nodist_tests_testString_SOURCES = \ - String.cc \ tests/stub_SBuf.cc \ + String.cc \ tests/stub_debug.cc \ tests/stub_libmem.cc @@ -3632,133 +3634,134 @@ tests_testString_LDFLAGS = $(LIBADD_DL) @ENABLE_FS_ROCK_TRUE@tests_testRock_SOURCES = \ +@ENABLE_FS_ROCK_TRUE@ $(DELAY_POOL_SOURCE) \ +@ENABLE_FS_ROCK_TRUE@ $(STOREMETA_SOURCE) \ +@ENABLE_FS_ROCK_TRUE@ $(UNLINKDSOURCE) \ @ENABLE_FS_ROCK_TRUE@ AccessLogEntry.cc \ @ENABLE_FS_ROCK_TRUE@ AccessLogEntry.h \ -@ENABLE_FS_ROCK_TRUE@ cbdata.cc \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_CacheDigest.cc \ @ENABLE_FS_ROCK_TRUE@ CacheDigest.h \ -@ENABLE_FS_ROCK_TRUE@ CollapsedForwarding.h \ @ENABLE_FS_ROCK_TRUE@ CollapsedForwarding.cc \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_CacheDigest.cc \ +@ENABLE_FS_ROCK_TRUE@ CollapsedForwarding.h \ @ENABLE_FS_ROCK_TRUE@ ConfigOption.cc \ @ENABLE_FS_ROCK_TRUE@ ConfigParser.cc \ -@ENABLE_FS_ROCK_TRUE@ fs_io.h \ -@ENABLE_FS_ROCK_TRUE@ fs_io.cc \ @ENABLE_FS_ROCK_TRUE@ ETag.cc \ @ENABLE_FS_ROCK_TRUE@ EventLoop.cc \ -@ENABLE_FS_ROCK_TRUE@ event.cc \ @ENABLE_FS_ROCK_TRUE@ FadingCounter.cc \ -@ENABLE_FS_ROCK_TRUE@ fatal.h \ -@ENABLE_FS_ROCK_TRUE@ fatal.cc \ -@ENABLE_FS_ROCK_TRUE@ fd.h \ -@ENABLE_FS_ROCK_TRUE@ fd.cc \ -@ENABLE_FS_ROCK_TRUE@ fde.h \ -@ENABLE_FS_ROCK_TRUE@ fde.cc \ @ENABLE_FS_ROCK_TRUE@ FileMap.h \ -@ENABLE_FS_ROCK_TRUE@ filemap.cc \ -@ENABLE_FS_ROCK_TRUE@ HttpHeaderFieldStat.h \ -@ENABLE_FS_ROCK_TRUE@ HttpBody.h \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_HelperChildConfig.cc \ @ENABLE_FS_ROCK_TRUE@ HttpBody.cc \ +@ENABLE_FS_ROCK_TRUE@ HttpBody.h \ @ENABLE_FS_ROCK_TRUE@ HttpHdrCc.cc \ @ENABLE_FS_ROCK_TRUE@ HttpHdrContRange.cc \ @ENABLE_FS_ROCK_TRUE@ HttpHdrRange.cc \ @ENABLE_FS_ROCK_TRUE@ HttpHdrSc.cc \ @ENABLE_FS_ROCK_TRUE@ HttpHdrScTarget.cc \ -@ENABLE_FS_ROCK_TRUE@ HttpHeader.h \ @ENABLE_FS_ROCK_TRUE@ HttpHeader.cc \ +@ENABLE_FS_ROCK_TRUE@ HttpHeader.h \ @ENABLE_FS_ROCK_TRUE@ HttpHeaderFieldInfo.h \ -@ENABLE_FS_ROCK_TRUE@ HttpHeaderTools.h \ +@ENABLE_FS_ROCK_TRUE@ HttpHeaderFieldStat.h \ @ENABLE_FS_ROCK_TRUE@ HttpHeaderTools.cc \ +@ENABLE_FS_ROCK_TRUE@ HttpHeaderTools.h \ @ENABLE_FS_ROCK_TRUE@ HttpReply.cc \ -@ENABLE_FS_ROCK_TRUE@ int.h \ -@ENABLE_FS_ROCK_TRUE@ int.cc \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_HttpRequest.cc \ @ENABLE_FS_ROCK_TRUE@ LogTags.cc \ @ENABLE_FS_ROCK_TRUE@ MasterXaction.cc \ @ENABLE_FS_ROCK_TRUE@ MasterXaction.h \ @ENABLE_FS_ROCK_TRUE@ MemBuf.cc \ @ENABLE_FS_ROCK_TRUE@ MemObject.cc \ @ENABLE_FS_ROCK_TRUE@ MemStore.cc \ -@ENABLE_FS_ROCK_TRUE@ mem_node.cc \ -@ENABLE_FS_ROCK_TRUE@ Notes.h \ @ENABLE_FS_ROCK_TRUE@ Notes.cc \ +@ENABLE_FS_ROCK_TRUE@ Notes.h \ @ENABLE_FS_ROCK_TRUE@ Parsing.cc \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_Port.cc \ @ENABLE_FS_ROCK_TRUE@ RemovalPolicy.cc \ @ENABLE_FS_ROCK_TRUE@ RequestFlags.cc \ @ENABLE_FS_ROCK_TRUE@ RequestFlags.h \ @ENABLE_FS_ROCK_TRUE@ ResolvedPeers.cc \ @ENABLE_FS_ROCK_TRUE@ ResolvedPeers.h \ -@ENABLE_FS_ROCK_TRUE@ StatCounters.h \ +@ENABLE_FS_ROCK_TRUE@ tests/testRock.cc \ +@ENABLE_FS_ROCK_TRUE@ tests/testRock.h \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_SBufDetailedStats.cc \ @ENABLE_FS_ROCK_TRUE@ StatCounters.cc \ -@ENABLE_FS_ROCK_TRUE@ StatHist.h \ +@ENABLE_FS_ROCK_TRUE@ StatCounters.h \ @ENABLE_FS_ROCK_TRUE@ tests/stub_StatHist.cc \ -@ENABLE_FS_ROCK_TRUE@ stmem.cc \ -@ENABLE_FS_ROCK_TRUE@ repl_modules.h \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_stat.cc \ -@ENABLE_FS_ROCK_TRUE@ store.cc \ +@ENABLE_FS_ROCK_TRUE@ StatHist.h \ @ENABLE_FS_ROCK_TRUE@ StoreFileSystem.cc \ @ENABLE_FS_ROCK_TRUE@ StoreIOState.cc \ @ENABLE_FS_ROCK_TRUE@ StoreMetaUnpacker.cc \ -@ENABLE_FS_ROCK_TRUE@ $(STOREMETA_SOURCE) \ +@ENABLE_FS_ROCK_TRUE@ tests/testStoreSupport.cc \ +@ENABLE_FS_ROCK_TRUE@ tests/testStoreSupport.h \ @ENABLE_FS_ROCK_TRUE@ StoreSwapLogData.cc \ -@ENABLE_FS_ROCK_TRUE@ store_io.cc \ -@ENABLE_FS_ROCK_TRUE@ store_key_md5.h \ -@ENABLE_FS_ROCK_TRUE@ store_key_md5.cc \ -@ENABLE_FS_ROCK_TRUE@ store_swapmeta.cc \ -@ENABLE_FS_ROCK_TRUE@ store_swapout.cc \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_SBufDetailedStats.cc \ -@ENABLE_FS_ROCK_TRUE@ String.cc \ -@ENABLE_FS_ROCK_TRUE@ StrList.h \ @ENABLE_FS_ROCK_TRUE@ StrList.cc \ -@ENABLE_FS_ROCK_TRUE@ Transients.h \ +@ENABLE_FS_ROCK_TRUE@ StrList.h \ +@ENABLE_FS_ROCK_TRUE@ String.cc \ @ENABLE_FS_ROCK_TRUE@ Transients.cc \ -@ENABLE_FS_ROCK_TRUE@ tests/testRock.cc \ -@ENABLE_FS_ROCK_TRUE@ tests/testRock.h \ -@ENABLE_FS_ROCK_TRUE@ tests/testStoreSupport.cc \ -@ENABLE_FS_ROCK_TRUE@ tests/testStoreSupport.h \ -@ENABLE_FS_ROCK_TRUE@ log/access_log.h \ +@ENABLE_FS_ROCK_TRUE@ Transients.h \ @ENABLE_FS_ROCK_TRUE@ tests/stub_access_log.cc \ -@ENABLE_FS_ROCK_TRUE@ cache_cf.h \ @ENABLE_FS_ROCK_TRUE@ tests/stub_cache_cf.cc \ +@ENABLE_FS_ROCK_TRUE@ cache_cf.h \ @ENABLE_FS_ROCK_TRUE@ tests/stub_cache_manager.cc \ +@ENABLE_FS_ROCK_TRUE@ cbdata.cc \ @ENABLE_FS_ROCK_TRUE@ tests/stub_client_db.cc \ @ENABLE_FS_ROCK_TRUE@ tests/stub_client_side_request.cc \ @ENABLE_FS_ROCK_TRUE@ tests/stub_debug.cc \ @ENABLE_FS_ROCK_TRUE@ tests/stub_errorpage.cc \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_HelperChildConfig.cc \ +@ENABLE_FS_ROCK_TRUE@ event.cc \ +@ENABLE_FS_ROCK_TRUE@ fatal.cc \ +@ENABLE_FS_ROCK_TRUE@ fatal.h \ +@ENABLE_FS_ROCK_TRUE@ fd.cc \ +@ENABLE_FS_ROCK_TRUE@ fd.h \ +@ENABLE_FS_ROCK_TRUE@ fde.cc \ +@ENABLE_FS_ROCK_TRUE@ fde.h \ +@ENABLE_FS_ROCK_TRUE@ filemap.cc \ +@ENABLE_FS_ROCK_TRUE@ fs_io.cc \ +@ENABLE_FS_ROCK_TRUE@ fs_io.h \ @ENABLE_FS_ROCK_TRUE@ tests/stub_http.cc \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_HttpRequest.cc \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_libauth.cc \ @ENABLE_FS_ROCK_TRUE@ tests/stub_icp.cc \ +@ENABLE_FS_ROCK_TRUE@ int.cc \ +@ENABLE_FS_ROCK_TRUE@ int.h \ @ENABLE_FS_ROCK_TRUE@ tests/stub_ipc.cc \ @ENABLE_FS_ROCK_TRUE@ tests/stub_ipcache.cc \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_libanyp.cc \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_libauth.cc \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_liberror.cc \ @ENABLE_FS_ROCK_TRUE@ tests/stub_libeui.cc \ @ENABLE_FS_ROCK_TRUE@ tests/stub_libformat.cc \ @ENABLE_FS_ROCK_TRUE@ tests/stub_libicmp.cc \ @ENABLE_FS_ROCK_TRUE@ tests/stub_liblog.cc \ @ENABLE_FS_ROCK_TRUE@ tests/stub_libmgr.cc \ @ENABLE_FS_ROCK_TRUE@ tests/stub_libsecurity.cc \ -@ENABLE_FS_ROCK_TRUE@ mime.h \ +@ENABLE_FS_ROCK_TRUE@ log/access_log.h \ +@ENABLE_FS_ROCK_TRUE@ mem_node.cc \ @ENABLE_FS_ROCK_TRUE@ tests/stub_mime.cc \ +@ENABLE_FS_ROCK_TRUE@ mime.h \ @ENABLE_FS_ROCK_TRUE@ tests/stub_neighbors.cc \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_Port.cc \ @ENABLE_FS_ROCK_TRUE@ tests/stub_pconn.cc \ +@ENABLE_FS_ROCK_TRUE@ repl_modules.h \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_stat.cc \ +@ENABLE_FS_ROCK_TRUE@ stmem.cc \ +@ENABLE_FS_ROCK_TRUE@ store.cc \ @ENABLE_FS_ROCK_TRUE@ tests/stub_store_client.cc \ -@ENABLE_FS_ROCK_TRUE@ store_rebuild.h \ +@ENABLE_FS_ROCK_TRUE@ store_io.cc \ +@ENABLE_FS_ROCK_TRUE@ store_key_md5.cc \ +@ENABLE_FS_ROCK_TRUE@ store_key_md5.h \ @ENABLE_FS_ROCK_TRUE@ tests/stub_store_rebuild.cc \ +@ENABLE_FS_ROCK_TRUE@ store_rebuild.h \ @ENABLE_FS_ROCK_TRUE@ tests/stub_store_stats.cc \ -@ENABLE_FS_ROCK_TRUE@ tools.h \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_tools.cc \ +@ENABLE_FS_ROCK_TRUE@ store_swapmeta.cc \ +@ENABLE_FS_ROCK_TRUE@ store_swapout.cc \ @ENABLE_FS_ROCK_TRUE@ time.cc \ -@ENABLE_FS_ROCK_TRUE@ tests/stub_libanyp.cc \ -@ENABLE_FS_ROCK_TRUE@ wordlist.h \ +@ENABLE_FS_ROCK_TRUE@ tests/stub_tools.cc \ +@ENABLE_FS_ROCK_TRUE@ tools.h \ @ENABLE_FS_ROCK_TRUE@ wordlist.cc \ -@ENABLE_FS_ROCK_TRUE@ $(DELAY_POOL_SOURCE) \ -@ENABLE_FS_ROCK_TRUE@ $(UNLINKDSOURCE) +@ENABLE_FS_ROCK_TRUE@ wordlist.h @ENABLE_FS_ROCK_TRUE@nodist_tests_testRock_SOURCES = \ @ENABLE_FS_ROCK_TRUE@ $(TESTSOURCES) \ -@ENABLE_FS_ROCK_TRUE@ hier_code.cc \ @ENABLE_FS_ROCK_TRUE@ SquidMath.cc \ @ENABLE_FS_ROCK_TRUE@ SquidMath.h \ +@ENABLE_FS_ROCK_TRUE@ hier_code.cc \ @ENABLE_FS_ROCK_TRUE@ swap_log_op.cc @ENABLE_FS_ROCK_TRUE@tests_testRock_LDADD = \ @@ -3795,139 +3798,140 @@ @ENABLE_FS_ROCK_TRUE@tests_testRock_LDFLAGS = $(AM_CPPFLAGS) $(LIBADD_DL) @ENABLE_FS_UFS_TRUE@tests_testUfs_SOURCES = \ +@ENABLE_FS_UFS_TRUE@ $(DELAY_POOL_SOURCE) \ +@ENABLE_FS_UFS_TRUE@ $(STOREMETA_SOURCE) \ +@ENABLE_FS_UFS_TRUE@ $(UNLINKDSOURCE) \ +@ENABLE_FS_UFS_TRUE@ $(WIN32_SOURCE) \ @ENABLE_FS_UFS_TRUE@ AccessLogEntry.cc \ @ENABLE_FS_UFS_TRUE@ AccessLogEntry.h \ -@ENABLE_FS_UFS_TRUE@ tests/testUfs.cc \ -@ENABLE_FS_UFS_TRUE@ tests/testUfs.h \ -@ENABLE_FS_UFS_TRUE@ tests/stub_cache_manager.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_client_db.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_CacheDigest.cc \ +@ENABLE_FS_UFS_TRUE@ CacheDigest.h \ +@ENABLE_FS_UFS_TRUE@ ClientInfo.h \ @ENABLE_FS_UFS_TRUE@ tests/stub_CollapsedForwarding.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_HelperChildConfig.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_icp.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_ipc.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_ipcache.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_libeui.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_libicmp.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_liblog.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_neighbors.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_pconn.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_Port.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_UdsOp.cc \ -@ENABLE_FS_UFS_TRUE@ internal.h \ -@ENABLE_FS_UFS_TRUE@ tests/stub_internal.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_libformat.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_libsecurity.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_stat.cc \ -@ENABLE_FS_UFS_TRUE@ store_rebuild.h \ -@ENABLE_FS_UFS_TRUE@ tests/stub_store_rebuild.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_store_stats.cc \ -@ENABLE_FS_UFS_TRUE@ fatal.h \ -@ENABLE_FS_UFS_TRUE@ tests/stub_fatal.cc \ -@ENABLE_FS_UFS_TRUE@ fd.h \ -@ENABLE_FS_UFS_TRUE@ fd.cc \ -@ENABLE_FS_UFS_TRUE@ fde.h \ -@ENABLE_FS_UFS_TRUE@ fde.cc \ -@ENABLE_FS_UFS_TRUE@ client_db.h \ +@ENABLE_FS_UFS_TRUE@ ConfigOption.cc \ +@ENABLE_FS_UFS_TRUE@ ConfigParser.cc \ +@ENABLE_FS_UFS_TRUE@ ETag.cc \ +@ENABLE_FS_UFS_TRUE@ EventLoop.cc \ @ENABLE_FS_UFS_TRUE@ FadingCounter.cc \ -@ENABLE_FS_UFS_TRUE@ fs_io.h \ -@ENABLE_FS_UFS_TRUE@ fs_io.cc \ @ENABLE_FS_UFS_TRUE@ FileMap.h \ -@ENABLE_FS_UFS_TRUE@ filemap.cc \ -@ENABLE_FS_UFS_TRUE@ HttpBody.h \ +@ENABLE_FS_UFS_TRUE@ tests/stub_HelperChildConfig.cc \ @ENABLE_FS_UFS_TRUE@ HttpBody.cc \ +@ENABLE_FS_UFS_TRUE@ HttpBody.h \ +@ENABLE_FS_UFS_TRUE@ HttpHdrCc.cc \ +@ENABLE_FS_UFS_TRUE@ HttpHdrCc.h \ +@ENABLE_FS_UFS_TRUE@ HttpHdrContRange.cc \ +@ENABLE_FS_UFS_TRUE@ HttpHdrRange.cc \ +@ENABLE_FS_UFS_TRUE@ HttpHdrSc.cc \ +@ENABLE_FS_UFS_TRUE@ HttpHdrScTarget.cc \ +@ENABLE_FS_UFS_TRUE@ HttpHeader.cc \ +@ENABLE_FS_UFS_TRUE@ HttpHeader.h \ +@ENABLE_FS_UFS_TRUE@ HttpHeaderFieldInfo.h \ +@ENABLE_FS_UFS_TRUE@ HttpHeaderFieldStat.h \ +@ENABLE_FS_UFS_TRUE@ HttpHeaderTools.cc \ +@ENABLE_FS_UFS_TRUE@ HttpHeaderTools.h \ @ENABLE_FS_UFS_TRUE@ HttpReply.cc \ -@ENABLE_FS_UFS_TRUE@ int.h \ -@ENABLE_FS_UFS_TRUE@ int.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_HttpRequest.cc \ @ENABLE_FS_UFS_TRUE@ LogTags.cc \ -@ENABLE_FS_UFS_TRUE@ RequestFlags.h \ -@ENABLE_FS_UFS_TRUE@ RequestFlags.cc \ -@ENABLE_FS_UFS_TRUE@ Transients.cc \ @ENABLE_FS_UFS_TRUE@ MasterXaction.cc \ @ENABLE_FS_UFS_TRUE@ MasterXaction.h \ +@ENABLE_FS_UFS_TRUE@ MemBuf.cc \ @ENABLE_FS_UFS_TRUE@ MemObject.cc \ @ENABLE_FS_UFS_TRUE@ MemStore.cc \ -@ENABLE_FS_UFS_TRUE@ Notes.h \ @ENABLE_FS_UFS_TRUE@ Notes.cc \ -@ENABLE_FS_UFS_TRUE@ StoreSwapLogData.cc \ +@ENABLE_FS_UFS_TRUE@ Notes.h \ +@ENABLE_FS_UFS_TRUE@ Parsing.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_Port.cc \ +@ENABLE_FS_UFS_TRUE@ RemovalPolicy.cc \ +@ENABLE_FS_UFS_TRUE@ RequestFlags.cc \ +@ENABLE_FS_UFS_TRUE@ RequestFlags.h \ +@ENABLE_FS_UFS_TRUE@ tests/stub_SBufDetailedStats.cc \ +@ENABLE_FS_UFS_TRUE@ StatCounters.cc \ +@ENABLE_FS_UFS_TRUE@ StatCounters.h \ +@ENABLE_FS_UFS_TRUE@ StatHist.cc \ +@ENABLE_FS_UFS_TRUE@ StatHist.h \ +@ENABLE_FS_UFS_TRUE@ StoreFileSystem.cc \ @ENABLE_FS_UFS_TRUE@ StoreIOState.cc \ @ENABLE_FS_UFS_TRUE@ StoreMetaUnpacker.cc \ -@ENABLE_FS_UFS_TRUE@ $(STOREMETA_SOURCE) \ -@ENABLE_FS_UFS_TRUE@ StoreFileSystem.cc \ -@ENABLE_FS_UFS_TRUE@ store_io.cc \ -@ENABLE_FS_UFS_TRUE@ store_swapout.cc \ -@ENABLE_FS_UFS_TRUE@ store_swapmeta.cc \ -@ENABLE_FS_UFS_TRUE@ $(UNLINKDSOURCE) \ -@ENABLE_FS_UFS_TRUE@ $(WIN32_SOURCE) \ -@ENABLE_FS_UFS_TRUE@ event.cc \ -@ENABLE_FS_UFS_TRUE@ $(DELAY_POOL_SOURCE) \ -@ENABLE_FS_UFS_TRUE@ CacheDigest.h \ -@ENABLE_FS_UFS_TRUE@ tests/stub_CacheDigest.cc \ -@ENABLE_FS_UFS_TRUE@ ConfigParser.cc \ -@ENABLE_FS_UFS_TRUE@ EventLoop.cc \ -@ENABLE_FS_UFS_TRUE@ RemovalPolicy.cc \ -@ENABLE_FS_UFS_TRUE@ repl_modules.h \ -@ENABLE_FS_UFS_TRUE@ store.cc \ -@ENABLE_FS_UFS_TRUE@ store_key_md5.h \ -@ENABLE_FS_UFS_TRUE@ store_key_md5.cc \ -@ENABLE_FS_UFS_TRUE@ Parsing.cc \ -@ENABLE_FS_UFS_TRUE@ ConfigOption.cc \ +@ENABLE_FS_UFS_TRUE@ tests/testStoreSupport.cc \ +@ENABLE_FS_UFS_TRUE@ tests/testStoreSupport.h \ +@ENABLE_FS_UFS_TRUE@ StoreSwapLogData.cc \ +@ENABLE_FS_UFS_TRUE@ StrList.cc \ +@ENABLE_FS_UFS_TRUE@ StrList.h \ +@ENABLE_FS_UFS_TRUE@ String.cc \ +@ENABLE_FS_UFS_TRUE@ Transients.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_UdsOp.cc \ +@ENABLE_FS_UFS_TRUE@ tests/testUfs.cc \ +@ENABLE_FS_UFS_TRUE@ tests/testUfs.h \ +@ENABLE_FS_UFS_TRUE@ tests/stub_access_log.cc \ @ENABLE_FS_UFS_TRUE@ tests/stub_acl.cc \ -@ENABLE_FS_UFS_TRUE@ cache_cf.h \ @ENABLE_FS_UFS_TRUE@ tests/stub_cache_cf.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_helper.cc \ +@ENABLE_FS_UFS_TRUE@ cache_cf.h \ +@ENABLE_FS_UFS_TRUE@ tests/stub_cache_manager.cc \ @ENABLE_FS_UFS_TRUE@ cbdata.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_SBufDetailedStats.cc \ -@ENABLE_FS_UFS_TRUE@ String.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_debug.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_client_db.cc \ +@ENABLE_FS_UFS_TRUE@ client_db.h \ @ENABLE_FS_UFS_TRUE@ tests/stub_client_side_request.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_debug.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_errorpage.cc \ +@ENABLE_FS_UFS_TRUE@ event.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_fatal.cc \ +@ENABLE_FS_UFS_TRUE@ fatal.h \ +@ENABLE_FS_UFS_TRUE@ fd.cc \ +@ENABLE_FS_UFS_TRUE@ fd.h \ +@ENABLE_FS_UFS_TRUE@ fde.cc \ +@ENABLE_FS_UFS_TRUE@ fde.h \ +@ENABLE_FS_UFS_TRUE@ filemap.cc \ +@ENABLE_FS_UFS_TRUE@ fs_io.cc \ +@ENABLE_FS_UFS_TRUE@ fs_io.h \ +@ENABLE_FS_UFS_TRUE@ tests/stub_helper.cc \ @ENABLE_FS_UFS_TRUE@ tests/stub_http.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_icp.cc \ +@ENABLE_FS_UFS_TRUE@ int.cc \ +@ENABLE_FS_UFS_TRUE@ int.h \ +@ENABLE_FS_UFS_TRUE@ tests/stub_internal.cc \ +@ENABLE_FS_UFS_TRUE@ internal.h \ +@ENABLE_FS_UFS_TRUE@ tests/stub_ipc.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_ipcache.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_libanyp.cc \ @ENABLE_FS_UFS_TRUE@ tests/stub_libauth.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_liberror.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_libeui.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_libformat.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_libicmp.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_liblog.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_libsecurity.cc \ +@ENABLE_FS_UFS_TRUE@ log/access_log.h \ @ENABLE_FS_UFS_TRUE@ mem_node.cc \ -@ENABLE_FS_UFS_TRUE@ stmem.cc \ -@ENABLE_FS_UFS_TRUE@ mime.h \ @ENABLE_FS_UFS_TRUE@ tests/stub_mime.cc \ -@ENABLE_FS_UFS_TRUE@ HttpHeaderFieldInfo.h \ -@ENABLE_FS_UFS_TRUE@ HttpHeaderTools.h \ -@ENABLE_FS_UFS_TRUE@ HttpHeaderTools.cc \ -@ENABLE_FS_UFS_TRUE@ HttpHeader.h \ -@ENABLE_FS_UFS_TRUE@ HttpHeader.cc \ -@ENABLE_FS_UFS_TRUE@ ClientInfo.h \ -@ENABLE_FS_UFS_TRUE@ MemBuf.cc \ -@ENABLE_FS_UFS_TRUE@ HttpHdrContRange.cc \ -@ENABLE_FS_UFS_TRUE@ HttpHeaderFieldStat.h \ -@ENABLE_FS_UFS_TRUE@ HttpHdrCc.h \ -@ENABLE_FS_UFS_TRUE@ HttpHdrCc.cc \ -@ENABLE_FS_UFS_TRUE@ HttpHdrSc.cc \ -@ENABLE_FS_UFS_TRUE@ HttpHdrScTarget.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_libanyp.cc \ -@ENABLE_FS_UFS_TRUE@ StatCounters.h \ -@ENABLE_FS_UFS_TRUE@ StatCounters.cc \ -@ENABLE_FS_UFS_TRUE@ StatHist.h \ -@ENABLE_FS_UFS_TRUE@ StatHist.cc \ -@ENABLE_FS_UFS_TRUE@ StrList.h \ -@ENABLE_FS_UFS_TRUE@ StrList.cc \ -@ENABLE_FS_UFS_TRUE@ HttpHdrRange.cc \ -@ENABLE_FS_UFS_TRUE@ ETag.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_errorpage.cc \ -@ENABLE_FS_UFS_TRUE@ tests/stub_HttpRequest.cc \ -@ENABLE_FS_UFS_TRUE@ log/access_log.h \ -@ENABLE_FS_UFS_TRUE@ tests/stub_access_log.cc \ -@ENABLE_FS_UFS_TRUE@ refresh.h \ +@ENABLE_FS_UFS_TRUE@ mime.h \ +@ENABLE_FS_UFS_TRUE@ tests/stub_neighbors.cc \ +@ENABLE_FS_UFS_TRUE@ tests/stub_pconn.cc \ @ENABLE_FS_UFS_TRUE@ refresh.cc \ +@ENABLE_FS_UFS_TRUE@ refresh.h \ +@ENABLE_FS_UFS_TRUE@ repl_modules.h \ +@ENABLE_FS_UFS_TRUE@ tests/stub_stat.cc \ +@ENABLE_FS_UFS_TRUE@ stmem.cc \ +@ENABLE_FS_UFS_TRUE@ store.cc \ @ENABLE_FS_UFS_TRUE@ tests/stub_store_client.cc \ -@ENABLE_FS_UFS_TRUE@ tools.h \ -@ENABLE_FS_UFS_TRUE@ tests/stub_tools.cc \ -@ENABLE_FS_UFS_TRUE@ tests/testStoreSupport.cc \ -@ENABLE_FS_UFS_TRUE@ tests/testStoreSupport.h \ +@ENABLE_FS_UFS_TRUE@ store_io.cc \ +@ENABLE_FS_UFS_TRUE@ store_key_md5.cc \ +@ENABLE_FS_UFS_TRUE@ store_key_md5.h \ +@ENABLE_FS_UFS_TRUE@ tests/stub_store_rebuild.cc \ +@ENABLE_FS_UFS_TRUE@ store_rebuild.h \ +@ENABLE_FS_UFS_TRUE@ tests/stub_store_stats.cc \ +@ENABLE_FS_UFS_TRUE@ store_swapmeta.cc \ +@ENABLE_FS_UFS_TRUE@ store_swapout.cc \ @ENABLE_FS_UFS_TRUE@ time.cc \ -@ENABLE_FS_UFS_TRUE@ wordlist.h \ -@ENABLE_FS_UFS_TRUE@ wordlist.cc +@ENABLE_FS_UFS_TRUE@ tests/stub_tools.cc \ +@ENABLE_FS_UFS_TRUE@ tools.h \ +@ENABLE_FS_UFS_TRUE@ wordlist.cc \ +@ENABLE_FS_UFS_TRUE@ wordlist.h @ENABLE_FS_UFS_TRUE@nodist_tests_testUfs_SOURCES = \ @ENABLE_FS_UFS_TRUE@ $(TESTSOURCES) \ -@ENABLE_FS_UFS_TRUE@ hier_code.cc \ @ENABLE_FS_UFS_TRUE@ SquidMath.cc \ @ENABLE_FS_UFS_TRUE@ SquidMath.h \ +@ENABLE_FS_UFS_TRUE@ hier_code.cc \ @ENABLE_FS_UFS_TRUE@ swap_log_op.cc @ENABLE_FS_UFS_TRUE@tests_testUfs_LDADD = \ @@ -3969,133 +3973,134 @@ @ENABLE_FS_UFS_TRUE@tests_testUfs_LDFLAGS = $(LIBADD_DL) tests_testStore_SOURCES = \ - CacheDigest.h \ + $(DELAY_POOL_SOURCE) \ tests/stub_CacheDigest.cc \ - cbdata.cc \ + CacheDigest.h \ ClientInfo.h \ tests/stub_CollapsedForwarding.cc \ ConfigOption.cc \ ConfigParser.cc \ - $(DELAY_POOL_SOURCE) \ - fs_io.h \ - fs_io.cc \ ETag.cc \ - event.cc \ EventLoop.cc \ - fatal.h \ - tests/stub_fatal.cc \ FileMap.h \ - filemap.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ + tests/stub_HelperChildConfig.cc \ + HttpBody.cc \ + HttpBody.h \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrScTarget.cc \ + HttpHeader.cc \ + HttpHeader.h \ HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ + HttpHeaderFieldStat.h \ HttpHeaderTools.cc \ - HttpHeader.h \ - HttpHeader.cc \ - RequestFlags.cc \ - RequestFlags.h \ - int.h \ - int.cc \ + HttpHeaderTools.h \ + tests/stub_HttpReply.cc \ + tests/stub_HttpRequest.cc \ MasterXaction.cc \ MasterXaction.h \ - mem_node.cc \ MemBuf.cc \ MemObject.cc \ MemStore.cc \ - Notes.h \ Notes.cc \ + Notes.h \ + tests/testPackableStream.cc \ + tests/testPackableStream.h \ Parsing.cc \ + tests/stub_Port.cc \ RemovalPolicy.cc \ - refresh.h \ - refresh.cc \ - StatCounters.h \ + RequestFlags.cc \ + RequestFlags.h \ + tests/stub_SBufDetailedStats.cc \ StatCounters.cc \ - StatHist.h \ + StatCounters.h \ StatHist.cc \ - stmem.cc \ - repl_modules.h \ - store.cc \ - store_io.cc \ - store_swapout.cc \ + StatHist.h \ + tests/testStore.cc \ + tests/testStore.h \ + tests/testStoreController.cc \ + tests/testStoreController.h \ + tests/testStoreHashIndex.cc \ + tests/testStoreHashIndex.h \ StoreIOState.cc \ tests/stub_StoreMeta.cc \ StoreMetaUnpacker.cc \ + tests/testStoreSupport.cc \ + tests/testStoreSupport.h \ StoreSwapLogData.cc \ - store_key_md5.h \ - store_key_md5.cc \ - tests/stub_SBufDetailedStats.cc \ - String.cc \ - StrList.h \ StrList.cc \ - tests/CapturingStoreEntry.h \ - log/access_log.h \ + StrList.h \ + String.cc \ + Transients.cc \ + tests/stub_UdsOp.cc \ tests/stub_access_log.cc \ tests/stub_acl.cc \ - cache_cf.h \ tests/stub_cache_cf.cc \ + cache_cf.h \ tests/stub_cache_manager.cc \ + cbdata.cc \ tests/stub_client_side_request.cc \ tests/stub_comm.cc \ tests/stub_debug.cc \ tests/stub_errorpage.cc \ + event.cc \ + tests/stub_fatal.cc \ + fatal.h \ + tests/stub_fd.cc \ fd.h \ fde.h \ - tests/stub_fd.cc \ + filemap.cc \ + fs_io.cc \ + fs_io.h \ tests/stub_helper.cc \ - tests/stub_HelperChildConfig.cc \ tests/stub_http.cc \ + int.cc \ + int.h \ + tests/stub_libanyp.cc \ tests/stub_libauth.cc \ - tests/stub_libeui.cc \ + tests/stub_libcomm.cc \ tests/stub_libdiskio.cc \ + tests/stub_liberror.cc \ + tests/stub_libeui.cc \ tests/stub_libformat.cc \ tests/stub_libsecurity.cc \ tests/stub_libsslsquid.cc \ - HttpBody.h \ - HttpBody.cc \ - tests/stub_HttpReply.cc \ - tests/stub_HttpRequest.cc \ - tests/stub_libcomm.cc \ - mime.h \ + log/access_log.h \ + mem_node.cc \ tests/stub_mime.cc \ - tests/stub_Port.cc \ + mime.h \ + refresh.cc \ + refresh.h \ + repl_modules.h \ tests/stub_stat.cc \ + stmem.cc \ + store.cc \ tests/stub_store_client.cc \ - tests/stub_store_stats.cc \ - store_rebuild.h \ + store_io.cc \ + store_key_md5.cc \ + store_key_md5.h \ tests/stub_store_rebuild.cc \ + store_rebuild.h \ + tests/stub_store_stats.cc \ + store_swapout.cc \ tests/stub_store_swapout.cc \ - tools.h \ - Transients.cc \ - tests/stub_tools.cc \ - tests/stub_UdsOp.cc \ - tests/testPackableStream.cc \ - tests/testPackableStream.h \ - tests/testStore.cc \ - tests/testStore.h \ - tests/testStoreController.cc \ - tests/testStoreController.h \ - tests/testStoreHashIndex.cc \ - tests/testStoreHashIndex.h \ - tests/testStoreSupport.cc \ - tests/testStoreSupport.h \ + tests/CapturingStoreEntry.h \ tests/TestSwapDir.cc \ tests/TestSwapDir.h \ tests/stub_time.cc \ - tests/stub_libanyp.cc \ - wordlist.h \ - wordlist.cc + tests/stub_tools.cc \ + tools.h \ + wordlist.cc \ + wordlist.h nodist_tests_testStore_SOURCES = \ + $(TESTSOURCES) \ SquidMath.cc \ SquidMath.h \ - swap_log_op.cc \ - $(TESTSOURCES) + swap_log_op.cc tests_testStore_LDADD = \ libsquid.la \ @@ -4129,144 +4134,145 @@ tests_testStore_LDFLAGS = $(LIBADD_DL) tests_testDiskIO_SOURCES = \ + $(DELAY_POOL_SOURCE) \ + $(UNLINKDSOURCE) \ + $(WIN32_SOURCE) \ AccessLogEntry.cc \ AccessLogEntry.h \ - CacheDigest.h \ tests/stub_CacheDigest.cc \ - cbdata.cc \ - client_db.h \ + CacheDigest.h \ ClientInfo.h \ tests/stub_CollapsedForwarding.cc \ ConfigOption.cc \ ConfigParser.cc \ - $(DELAY_POOL_SOURCE) \ - FadingCounter.cc \ - fs_io.h \ - fs_io.cc \ + tests/testDiskIO.cc \ + tests/testDiskIO.h \ tests/stub_ETag.cc \ EventLoop.cc \ - event.cc \ - fatal.h \ - tests/stub_fatal.cc \ - fd.h \ - fd.cc \ - fde.h \ - fde.cc \ + FadingCounter.cc \ FileMap.h \ - filemap.cc \ - HttpBody.h \ + tests/stub_HelperChildConfig.cc \ HttpBody.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ + HttpBody.h \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ + HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrScTarget.cc \ - HttpHdrRange.cc \ + HttpHeader.cc \ + HttpHeader.h \ HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ + HttpHeaderFieldStat.h \ HttpHeaderTools.cc \ - HttpHeader.h \ - HttpHeader.cc \ + HttpHeaderTools.h \ HttpReply.cc \ - int.h \ - int.cc \ + tests/stub_HttpRequest.cc \ LogTags.cc \ MasterXaction.cc \ MasterXaction.h \ MemBuf.cc \ MemObject.cc \ - mem_node.cc \ - Notes.h \ + tests/stub_MemStore.cc \ Notes.cc \ + Notes.h \ Parsing.cc \ - refresh.h \ - refresh.cc \ + tests/stub_Port.cc \ RemovalPolicy.cc \ - RequestFlags.h \ RequestFlags.cc \ + RequestFlags.h \ ResolvedPeers.cc \ ResolvedPeers.h \ - tests/stub_libsecurity.cc \ - StatCounters.h \ + tests/stub_SBufDetailedStats.cc \ StatCounters.cc \ - StatHist.h \ + StatCounters.h \ tests/stub_StatHist.cc \ - stmem.cc \ - tests/stub_SBufDetailedStats.cc \ + StatHist.h \ StoreFileSystem.cc \ StoreIOState.cc \ tests/stub_StoreMeta.cc \ StoreMetaUnpacker.cc \ + tests/testStoreSupport.cc \ + tests/testStoreSupport.h \ StoreSwapLogData.cc \ - store_io.cc \ - store_key_md5.h \ - store_key_md5.cc \ - store_swapout.cc \ - store_swapmeta.cc \ - repl_modules.h \ - store.cc \ - String.cc \ - StrList.h \ StrList.cc \ - tests/stub_libstore.cc \ + StrList.h \ + String.cc \ Transients.cc \ - log/access_log.h \ + tests/stub_UdsOp.cc \ tests/stub_access_log.cc \ tests/stub_acl.cc \ - cache_cf.h \ tests/stub_cache_cf.cc \ + cache_cf.h \ tests/stub_cache_manager.cc \ + cbdata.cc \ tests/stub_client_db.cc \ - client_side_request.h \ + client_db.h \ tests/stub_client_side_request.cc \ + client_side_request.h \ tests/stub_debug.cc \ tests/stub_errorpage.cc \ + event.cc \ + tests/stub_fatal.cc \ + fatal.h \ + fd.cc \ + fd.h \ + fde.cc \ + fde.h \ + filemap.cc \ + fs_io.cc \ + fs_io.h \ tests/stub_helper.cc \ - tests/stub_HelperChildConfig.cc \ - tests/stub_HttpRequest.cc \ tests/stub_http.cc \ tests/stub_icp.cc \ - internal.h \ + int.cc \ + int.h \ tests/stub_internal.cc \ + internal.h \ tests/stub_ipc.cc \ tests/stub_ipcache.cc \ - tests/stub_libauth_acls.cc \ + tests/stub_libanyp.cc \ tests/stub_libauth.cc \ + tests/stub_libauth_acls.cc \ + tests/stub_liberror.cc \ tests/stub_libeui.cc \ tests/stub_libformat.cc \ tests/stub_libicmp.cc \ tests/stub_liblog.cc \ - tests/stub_MemStore.cc \ - mime.h \ + tests/stub_libsecurity.cc \ + tests/stub_libstore.cc \ + log/access_log.h \ + mem_node.cc \ tests/stub_mime.cc \ + mime.h \ tests/stub_neighbors.cc \ tests/stub_pconn.cc \ - tests/stub_Port.cc \ + refresh.cc \ + refresh.h \ + repl_modules.h \ tests/stub_stat.cc \ + stmem.cc \ + store.cc \ tests/stub_store_client.cc \ - tests/stub_store_stats.cc \ - store_rebuild.h \ + store_io.cc \ + store_key_md5.cc \ + store_key_md5.h \ tests/stub_store_rebuild.cc \ - tests/stub_UdsOp.cc \ - tests/testDiskIO.cc \ - tests/testDiskIO.h \ - tests/testStoreSupport.cc \ - tests/testStoreSupport.h \ + store_rebuild.h \ + tests/stub_store_stats.cc \ + store_swapmeta.cc \ + store_swapout.cc \ tests/stub_time.cc \ - $(UNLINKDSOURCE) \ - tests/stub_libanyp.cc \ - $(WIN32_SOURCE) \ - wordlist.h \ - wordlist.cc \ + tests/stub_tools.cc \ tools.h \ - tests/stub_tools.cc + wordlist.cc \ + wordlist.h nodist_tests_testDiskIO_SOURCES = \ $(TESTSOURCES) \ - hier_code.cc \ SquidMath.cc \ SquidMath.h \ + hier_code.cc \ swap_log_op.cc tests_testDiskIO_LDADD = \ @@ -4312,26 +4318,26 @@ @ENABLE_AUTH_TRUE@nodist_tests_testACLMaxUserIP_SOURCES = \ @ENABLE_AUTH_TRUE@ ConfigParser.cc \ -@ENABLE_AUTH_TRUE@ dlink.cc \ -@ENABLE_AUTH_TRUE@ globals.cc \ +@ENABLE_AUTH_TRUE@ tests/stub_HelperChildConfig.cc \ +@ENABLE_AUTH_TRUE@ tests/stub_HttpHeader.cc \ +@ENABLE_AUTH_TRUE@ tests/stub_HttpRequest.cc \ +@ENABLE_AUTH_TRUE@ tests/stub_MemBuf.cc \ @ENABLE_AUTH_TRUE@ Parsing.cc \ +@ENABLE_AUTH_TRUE@ tests/stub_StatHist.cc \ @ENABLE_AUTH_TRUE@ String.cc \ @ENABLE_AUTH_TRUE@ tests/stub_access_log.cc \ @ENABLE_AUTH_TRUE@ tests/stub_cache_cf.cc \ @ENABLE_AUTH_TRUE@ tests/stub_cbdata.cc \ @ENABLE_AUTH_TRUE@ tests/stub_client_side.cc \ @ENABLE_AUTH_TRUE@ tests/stub_debug.cc \ +@ENABLE_AUTH_TRUE@ dlink.cc \ @ENABLE_AUTH_TRUE@ tests/stub_errorpage.cc \ @ENABLE_AUTH_TRUE@ tests/stub_fatal.cc \ -@ENABLE_AUTH_TRUE@ tests/stub_HelperChildConfig.cc \ -@ENABLE_AUTH_TRUE@ tests/stub_HttpHeader.cc \ -@ENABLE_AUTH_TRUE@ tests/stub_HttpRequest.cc \ +@ENABLE_AUTH_TRUE@ globals.cc \ @ENABLE_AUTH_TRUE@ tests/stub_libauth.cc \ @ENABLE_AUTH_TRUE@ tests/stub_libhttp.cc \ @ENABLE_AUTH_TRUE@ tests/stub_libmem.cc \ -@ENABLE_AUTH_TRUE@ tests/stub_libsecurity.cc \ -@ENABLE_AUTH_TRUE@ tests/stub_MemBuf.cc \ -@ENABLE_AUTH_TRUE@ tests/stub_StatHist.cc +@ENABLE_AUTH_TRUE@ tests/stub_libsecurity.cc @ENABLE_AUTH_TRUE@tests_testACLMaxUserIP_LDADD = \ @ENABLE_AUTH_TRUE@ $(AUTH_ACL_LIBS) \ @@ -4350,26 +4356,21 @@ @ENABLE_AUTH_TRUE@tests_testACLMaxUserIP_LDFLAGS = $(LIBADD_DL) tests_test_http_range_SOURCES = \ + $(DELAY_POOL_SOURCE) \ + $(DNSSOURCE) \ + $(HTCPSOURCE) \ + $(IPC_SOURCE) \ + $(SNMP_SOURCE) \ + $(UNLINKDSOURCE) \ + $(WIN32_SOURCE) \ AccessLogEntry.cc \ - BodyPipe.cc \ - cache_cf.h \ AuthReg.h \ - RefreshPattern.h \ + BodyPipe.cc \ + tests/stub_CacheDigest.cc \ + CacheDigest.h \ CachePeer.cc \ CachePeer.h \ - cache_manager.cc \ - CacheDigest.h \ - tests/stub_CacheDigest.cc \ - carp.h \ - tests/stub_carp.cc \ - cbdata.cc \ - tests/stub_client_db.cc \ - client_side.h \ - client_side.cc \ - client_side_reply.cc \ - client_side_request.cc \ ClientInfo.h \ - clientStream.cc \ tests/stub_CollapsedForwarding.cc \ ConfigOption.cc \ ConfigParser.cc \ @@ -4377,166 +4378,172 @@ CpuAffinityMap.h \ CpuAffinitySet.cc \ CpuAffinitySet.h \ - debug.cc \ - $(DELAY_POOL_SOURCE) \ - fs_io.h \ - fs_io.cc \ - dlink.h \ - dlink.cc \ - $(DNSSOURCE) \ - errorpage.cc \ tests/stub_ETag.cc \ - event.cc \ + tests/stub_EventLoop.cc \ FadingCounter.cc \ - fatal.h \ - tests/stub_libauth.cc \ - tests/stub_fatal.cc \ - fd.h \ - fd.cc \ - fde.cc \ FileMap.h \ - filemap.cc \ - fqdncache.h \ - fqdncache.cc \ FwdState.cc \ FwdState.h \ - gopher.h \ - tests/stub_gopher.cc \ HappyConnOpener.cc \ HappyConnOpener.h \ - helper.cc \ - hier_code.h \ - $(HTCPSOURCE) \ - http.cc \ - HttpBody.h \ HttpBody.cc \ + HttpBody.h \ tests/stub_HttpControlMsg.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrScTarget.cc \ - HttpHeader.h \ HttpHeader.cc \ + HttpHeader.h \ HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ + HttpHeaderFieldStat.h \ HttpHeaderTools.cc \ + HttpHeaderTools.h \ HttpReply.cc \ - PeerPoolMgr.h \ - PeerPoolMgr.cc \ - RequestFlags.h \ - RequestFlags.cc \ HttpRequest.cc \ - icp_v2.cc \ - icp_v3.cc \ - int.h \ - int.cc \ - internal.h \ - internal.cc \ - $(IPC_SOURCE) \ - ipcache.cc \ + tests/stub_HttpUpgradeProtocolAccess.cc \ + IoStats.h \ LogTags.cc \ MasterXaction.cc \ MasterXaction.h \ MemBuf.cc \ MemObject.cc \ - tests/stub_libmem.cc \ - mem_node.cc \ - mime.h \ - mime.cc \ - mime_header.h \ - mime_header.cc \ - multicast.h \ - multicast.cc \ - neighbors.h \ - neighbors.cc \ + tests/stub_MemStore.cc \ Notes.cc \ Notes.h \ Parsing.cc \ - peer_digest.cc \ - peer_proxy_negotiate_auth.h \ - peer_proxy_negotiate_auth.cc \ - peer_select.cc \ - peer_sourcehash.h \ - peer_sourcehash.cc \ - peer_userhash.h \ - peer_userhash.cc \ + PeerPoolMgr.cc \ + PeerPoolMgr.h \ Pipeline.cc \ Pipeline.h \ - pconn.cc \ - redirect.h \ - tests/stub_redirect.cc \ - refresh.h \ - refresh.cc \ + RefreshPattern.h \ RemovalPolicy.cc \ + RequestFlags.cc \ + RequestFlags.h \ ResolvedPeers.cc \ ResolvedPeers.h \ tests/stub_SBufDetailedStats.cc \ - $(SNMP_SOURCE) \ - SquidMath.h \ SquidMath.cc \ - IoStats.h \ - stat.h \ - stat.cc \ - StatCounters.h \ + SquidMath.h \ StatCounters.cc \ - StatHist.h \ + StatCounters.h \ StatHist.cc \ - stmem.cc \ - repl_modules.h \ - store.cc \ - store_client.cc \ - store_digest.h \ - tests/stub_store_digest.cc \ - store_key_md5.h \ - store_key_md5.cc \ - store_io.cc \ - store_log.h \ - store_log.cc \ - store_rebuild.h \ - store_rebuild.cc \ - store_swapin.h \ - store_swapin.cc \ - store_swapmeta.cc \ - store_swapout.cc \ + StatHist.h \ StoreFileSystem.cc \ StoreIOState.cc \ tests/stub_StoreMeta.cc \ StoreMetaUnpacker.cc \ StoreSwapLogData.cc \ - String.cc \ - StrList.h \ StrList.cc \ - tests/stub_libstore.cc \ + StrList.h \ + String.cc \ Transients.cc \ tests/test_http_range.cc \ tests/stub_cache_cf.cc \ + cache_cf.h \ + cache_manager.cc \ + tests/stub_carp.cc \ + carp.h \ + cbdata.cc \ + clientStream.cc \ + tests/stub_client_db.cc \ + client_side.cc \ + client_side.h \ + client_side_reply.cc \ + client_side_request.cc \ + debug.cc \ + dlink.cc \ + dlink.h \ + errorpage.cc \ + event.cc \ tests/stub_external_acl.cc \ - tests/stub_HttpUpgradeProtocolAccess.cc \ + tests/stub_fatal.cc \ + fatal.h \ + fd.cc \ + fd.h \ + fde.cc \ + filemap.cc \ + fqdncache.cc \ + fqdncache.h \ + fs_io.cc \ + fs_io.h \ + tests/stub_gopher.cc \ + gopher.h \ + helper.cc \ + hier_code.h \ + http.cc \ + icp_v2.cc \ + icp_v3.cc \ + int.cc \ + int.h \ + internal.cc \ + internal.h \ tests/stub_ipc_Forwarder.cc \ + ipcache.cc \ + tests/stub_libauth.cc \ tests/stub_libdiskio.cc \ + tests/stub_liberror.cc \ tests/stub_libeui.cc \ + tests/stub_libmem.cc \ tests/stub_libsecurity.cc \ + tests/stub_libstore.cc \ tests/stub_main_cc.cc \ - tests/stub_MemStore.cc \ + mem_node.cc \ + mime.cc \ + mime.h \ + mime_header.cc \ + mime_header.h \ + multicast.cc \ + multicast.h \ + neighbors.cc \ + neighbors.h \ + pconn.cc \ + peer_digest.cc \ + peer_proxy_negotiate_auth.cc \ + peer_proxy_negotiate_auth.h \ + peer_select.cc \ + peer_sourcehash.cc \ + peer_sourcehash.h \ + peer_userhash.cc \ + peer_userhash.h \ + tests/stub_redirect.cc \ + redirect.h \ + refresh.cc \ + refresh.h \ + repl_modules.h \ + stat.cc \ + stat.h \ + stmem.cc \ + store.cc \ + store_client.cc \ + tests/stub_store_digest.cc \ + store_digest.h \ + store_io.cc \ + store_key_md5.cc \ + store_key_md5.h \ + store_log.cc \ + store_log.h \ + store_rebuild.cc \ + store_rebuild.h \ tests/stub_store_stats.cc \ - tests/stub_EventLoop.cc \ + store_swapin.cc \ + store_swapin.h \ + store_swapmeta.cc \ + store_swapout.cc \ time.cc \ - tools.h \ tools.cc \ + tools.h \ tests/stub_tunnel.cc \ - $(UNLINKDSOURCE) \ - urn.h \ urn.cc \ - wccp2.h \ + urn.h \ tests/stub_wccp2.cc \ - whois.h \ + wccp2.h \ tests/stub_whois.cc \ - $(WIN32_SOURCE) \ - wordlist.h \ - wordlist.cc + whois.h \ + wordlist.cc \ + wordlist.h nodist_tests_test_http_range_SOURCES = \ $(BUILT_SOURCES) @@ -4581,40 +4588,41 @@ $(SSLLIB) \ $(KRB5LIBS) \ $(LIBCPPUNIT_LIBS) \ + $(SYSTEMD_LIBS) \ $(COMPAT_LIB) \ $(XTRA_LIBS) tests_test_http_range_LDFLAGS = $(LIBADD_DL) tests_testHttp1Parser_SOURCES = \ Debug.h \ + tests/stub_HelperChildConfig.cc \ + tests/testHttp1Parser.cc \ + tests/testHttp1Parser.h \ MemBuf.cc \ MemBuf.h \ tests/stub_MemObject.cc \ - mime_header.cc \ - mime_header.h \ - String.cc \ - cache_cf.h \ tests/stub_SBufDetailedStats.cc \ + String.cc \ tests/stub_cache_cf.cc \ + cache_cf.h \ tests/stub_cache_manager.cc \ - tests/stub_comm.cc \ tests/stub_cbdata.cc \ + tests/stub_comm.cc \ tests/stub_debug.cc \ tests/stub_event.cc \ - tests/stub_HelperChildConfig.cc \ + tests/stub_libanyp.cc \ tests/stub_libmem.cc \ tests/stub_libsecurity.cc \ + mime_header.cc \ + mime_header.h \ tests/stub_stmem.cc \ tests/stub_store.cc \ tests/stub_store_stats.cc \ - tools.h \ - tests/stub_tools.cc \ - tests/testHttp1Parser.cc \ - tests/testHttp1Parser.h \ tests/stub_time.cc \ - tests/stub_libanyp.cc \ - wordlist.h \ - wordlist.cc + tests/stub_tools.cc \ + tools.h \ + wordlist.cc \ + wordlist.h nodist_tests_testHttp1Parser_SOURCES = \ $(TESTSOURCES) @@ -4635,17 +4643,15 @@ tests_testHttp1Parser_LDFLAGS = $(LIBADD_DL) tests_testHttpReply_SOURCES = \ - cbdata.cc \ - cbdata.h \ ConfigParser.cc \ tests/stub_ETag.cc \ - fatal.h \ - tests/stub_fatal.cc \ - HttpBody.h \ + tests/stub_HelperChildConfig.cc \ HttpBody.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ + HttpBody.h \ + HttpControlMsg.cc \ + HttpControlMsg.h \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ HttpHdrContRange.h \ HttpHdrRange.cc \ @@ -4653,63 +4659,66 @@ HttpHdrSc.h \ HttpHdrScTarget.cc \ HttpHdrScTarget.h \ - HttpHeader.h \ HttpHeader.cc \ - HttpHeaderMask.h \ + HttpHeader.h \ HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ + HttpHeaderFieldStat.h \ + HttpHeaderMask.h \ HttpHeaderTools.cc \ - HttpControlMsg.cc \ - HttpControlMsg.h \ + HttpHeaderTools.h \ HttpReply.cc \ + tests/testHttpReply.cc \ HttpReply.h \ + tests/testHttpReply.h \ + tests/stub_HttpRequest.cc \ MasterXaction.cc \ MasterXaction.h \ MemBuf.cc \ MemBuf.h \ - mime_header.h \ - mime_header.cc \ - Notes.h \ Notes.cc \ + Notes.h \ + tests/stub_SBufDetailedStats.cc \ SquidString.h \ SquidTime.h \ - tests/stub_SBufDetailedStats.cc \ - String.cc \ - StrList.h \ + StatCounters.cc \ + StatCounters.h \ + tests/stub_StatHist.cc \ + StatHist.h \ StrList.cc \ - log/access_log.h \ + StrList.h \ + String.cc \ tests/stub_access_log.cc \ - cache_cf.h \ tests/stub_cache_cf.cc \ + cache_cf.h \ tests/stub_cache_manager.cc \ + cbdata.cc \ + cbdata.h \ tests/stub_comm.cc \ tests/stub_debug.cc \ tests/stub_errorpage.cc \ tests/stub_event.cc \ + tests/stub_fatal.cc \ + fatal.h \ tests/stub_fd.cc \ - tests/stub_HelperChildConfig.cc \ - tests/stub_libformat.cc \ + tests/stub_libanyp.cc \ tests/stub_libauth.cc \ tests/stub_libcomm.cc \ + tests/stub_liberror.cc \ + tests/stub_libformat.cc \ tests/stub_libmgr.cc \ tests/stub_libsecurity.cc \ tests/stub_libsslsquid.cc \ - StatCounters.h \ - StatCounters.cc \ - StatHist.h \ - tests/stub_StatHist.cc \ + log/access_log.h \ + mime_header.cc \ + mime_header.h \ repl_modules.h \ tests/stub_store.cc \ tests/stub_store_stats.cc \ - tools.h \ - tests/stub_tools.cc \ - tests/stub_HttpRequest.cc \ - tests/testHttpReply.cc \ - tests/testHttpReply.h \ tests/stub_time.cc \ - tests/stub_libanyp.cc \ - wordlist.h \ - wordlist.cc + tests/stub_tools.cc \ + tools.h \ + wordlist.cc \ + wordlist.h nodist_tests_testHttpReply_SOURCES = \ $(TESTSOURCES) \ @@ -4739,44 +4748,20 @@ tests_testHttpReply_LDFLAGS = $(LIBADD_DL) tests_testHttpRequest_SOURCES = \ + $(DELAY_POOL_SOURCE) \ + $(DNSSOURCE) \ + $(HTCPSOURCE) \ + $(IPC_SOURCE) \ + $(SNMP_SOURCE) \ + $(WIN32_SOURCE) \ AccessLogEntry.cc \ - RequestFlags.h \ - RequestFlags.cc \ - HttpRequest.cc \ - tests/stub_libmem.cc \ - String.cc \ - tests/testHttpRequest.h \ - tests/testHttpRequest.cc \ - tests/testHttpRequestMethod.h \ - tests/testHttpRequestMethod.cc \ - tests/stub_libauth.cc \ - tests/stub_main_cc.cc \ - tests/stub_ipc_Forwarder.cc \ - tests/stub_libdiskio.cc \ - tests/stub_libeui.cc \ - tests/stub_store_stats.cc \ - tests/stub_EventLoop.cc \ - time.cc \ - BodyPipe.cc \ - cache_manager.cc \ - cache_cf.h \ AuthReg.h \ - RefreshPattern.h \ - debug.cc \ - CacheDigest.h \ + BodyPipe.cc \ tests/stub_CacheDigest.cc \ + CacheDigest.h \ CachePeer.cc \ CachePeer.h \ - carp.h \ - tests/stub_carp.cc \ - cbdata.cc \ - tests/stub_client_db.cc \ - client_side.h \ - client_side.cc \ - client_side_reply.cc \ - client_side_request.cc \ ClientInfo.h \ - clientStream.cc \ tests/stub_CollapsedForwarding.cc \ ConfigOption.cc \ ConfigParser.cc \ @@ -4784,150 +4769,175 @@ CpuAffinityMap.h \ CpuAffinitySet.cc \ CpuAffinitySet.h \ - $(DELAY_POOL_SOURCE) \ - fs_io.h \ - fs_io.cc \ - dlink.h \ - dlink.cc \ - $(DNSSOURCE) \ - errorpage.cc \ tests/stub_ETag.cc \ - external_acl.cc \ + tests/stub_EventLoop.cc \ ExternalACLEntry.cc \ - fatal.h \ - tests/stub_fatal.cc \ - fd.h \ - fd.cc \ - fde.cc \ - fqdncache.h \ - fqdncache.cc \ + FadingCounter.cc \ FwdState.cc \ FwdState.h \ - gopher.h \ - tests/stub_gopher.cc \ HappyConnOpener.cc \ HappyConnOpener.h \ - helper.cc \ - hier_code.h \ - $(HTCPSOURCE) \ - http.cc \ - HttpBody.h \ HttpBody.cc \ + HttpBody.h \ tests/stub_HttpControlMsg.cc \ - HttpHeader.h \ - HttpHeader.cc \ - HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ - HttpHeaderTools.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrScTarget.cc \ + HttpHeader.cc \ + HttpHeader.h \ + HttpHeaderFieldInfo.h \ + HttpHeaderFieldStat.h \ + HttpHeaderTools.cc \ + HttpHeaderTools.h \ HttpReply.cc \ - icp_v2.cc \ - icp_v3.cc \ - $(IPC_SOURCE) \ - ipcache.cc \ - int.h \ - int.cc \ - internal.h \ - internal.cc \ + HttpRequest.cc \ + tests/testHttpRequest.cc \ + tests/testHttpRequest.h \ + tests/testHttpRequestMethod.cc \ + tests/testHttpRequestMethod.h \ + tests/stub_HttpUpgradeProtocolAccess.cc \ + IoStats.h \ LogTags.cc \ - tests/stub_libsecurity.cc \ MasterXaction.cc \ MasterXaction.h \ - multicast.h \ - multicast.cc \ - mem_node.cc \ MemBuf.cc \ MemObject.cc \ - mime.h \ - mime.cc \ - mime_header.h \ - mime_header.cc \ - neighbors.h \ - neighbors.cc \ + MemStore.cc \ Notes.cc \ Notes.h \ Parsing.cc \ - pconn.cc \ - peer_digest.cc \ - peer_proxy_negotiate_auth.h \ - peer_proxy_negotiate_auth.cc \ - peer_select.cc \ - peer_sourcehash.h \ - peer_sourcehash.cc \ - peer_userhash.h \ - peer_userhash.cc \ - PeerPoolMgr.h \ PeerPoolMgr.cc \ + PeerPoolMgr.h \ Pipeline.cc \ Pipeline.h \ - redirect.h \ - tests/stub_libauth_acls.cc \ - tests/stub_redirect.cc \ - refresh.h \ - refresh.cc \ + RefreshPattern.h \ RemovalPolicy.cc \ + RequestFlags.cc \ + RequestFlags.h \ ResolvedPeers.cc \ ResolvedPeers.h \ tests/stub_SBufDetailedStats.cc \ - $(SNMP_SOURCE) \ - SquidMath.h \ SquidMath.cc \ - IoStats.h \ - stat.h \ - stat.cc \ - StatCounters.h \ + SquidMath.h \ StatCounters.cc \ - StatHist.h \ + StatCounters.h \ StatHist.cc \ - stmem.cc \ + StatHist.h \ + StoreFileSystem.cc \ + StoreIOState.cc \ + tests/stub_StoreMeta.cc \ + StoreMetaUnpacker.cc \ + StoreSwapLogData.cc \ + StrList.cc \ + StrList.h \ + String.cc \ + Transients.cc \ + tests/stub_cache_cf.cc \ + cache_cf.h \ + cache_manager.cc \ + tests/stub_carp.cc \ + carp.h \ + cbdata.cc \ + clientStream.cc \ + tests/stub_client_db.cc \ + client_side.cc \ + client_side.h \ + client_side_reply.cc \ + client_side_request.cc \ + debug.cc \ + dlink.cc \ + dlink.h \ + errorpage.cc \ + event.cc \ + external_acl.cc \ + tests/stub_fatal.cc \ + fatal.h \ + fd.cc \ + fd.h \ + fde.cc \ + fqdncache.cc \ + fqdncache.h \ + fs_io.cc \ + fs_io.h \ + tests/stub_gopher.cc \ + gopher.h \ + helper.cc \ + hier_code.h \ + http.cc \ + icp_v2.cc \ + icp_v3.cc \ + int.cc \ + int.h \ + internal.cc \ + internal.h \ + tests/stub_ipc_Forwarder.cc \ + ipcache.cc \ + tests/stub_libauth.cc \ + tests/stub_libauth_acls.cc \ + tests/stub_libdiskio.cc \ + tests/stub_liberror.cc \ + tests/stub_libeui.cc \ + tests/stub_libmem.cc \ + tests/stub_libsecurity.cc \ + tests/stub_libstore.cc \ + tests/stub_main_cc.cc \ + mem_node.cc \ + mime.cc \ + mime.h \ + mime_header.cc \ + mime_header.h \ + multicast.cc \ + multicast.h \ + neighbors.cc \ + neighbors.h \ + pconn.cc \ + peer_digest.cc \ + peer_proxy_negotiate_auth.cc \ + peer_proxy_negotiate_auth.h \ + peer_select.cc \ + peer_sourcehash.cc \ + peer_sourcehash.h \ + peer_userhash.cc \ + peer_userhash.h \ + tests/stub_redirect.cc \ + redirect.h \ + refresh.cc \ + refresh.h \ repl_modules.h \ + stat.cc \ + stat.h \ + stmem.cc \ store.cc \ store_client.cc \ - store_digest.h \ tests/stub_store_digest.cc \ + store_digest.h \ store_io.cc \ - store_key_md5.h \ store_key_md5.cc \ - store_log.h \ + store_key_md5.h \ store_log.cc \ - store_rebuild.h \ + store_log.h \ store_rebuild.cc \ - store_swapin.h \ + store_rebuild.h \ + tests/stub_store_stats.cc \ store_swapin.cc \ + store_swapin.h \ store_swapmeta.cc \ store_swapout.cc \ - StoreFileSystem.cc \ - StoreIOState.cc \ - tests/stub_StoreMeta.cc \ - StoreMetaUnpacker.cc \ - StoreSwapLogData.cc \ - StrList.h \ - StrList.cc \ - event.cc \ - tools.h \ + time.cc \ tools.cc \ - Transients.cc \ - tests/stub_cache_cf.cc \ - tests/stub_HttpUpgradeProtocolAccess.cc \ + tools.h \ tests/stub_tunnel.cc \ - tests/stub_libstore.cc \ - MemStore.cc \ - urn.h \ urn.cc \ - wccp2.h \ + urn.h \ tests/stub_wccp2.cc \ - whois.h \ + wccp2.h \ tests/stub_whois.cc \ - FadingCounter.cc \ - $(WIN32_SOURCE) \ - wordlist.h \ - wordlist.cc + whois.h \ + wordlist.cc \ + wordlist.h nodist_tests_testHttpRequest_SOURCES = \ $(BUILT_SOURCES) @@ -4972,6 +4982,7 @@ $(SSLLIB) \ $(KRB5LIBS) \ $(LIBCPPUNIT_LIBS) \ + $(SYSTEMD_LIBS) \ $(COMPAT_LIB) \ $(XTRA_LIBS) @@ -4981,9 +4992,9 @@ tests/testIpAddress.h nodist_tests_testIpAddress_SOURCES = \ + tests/stub_SBuf.cc \ tests/stub_debug.cc \ tests/stub_libmem.cc \ - tests/stub_SBuf.cc \ tests/stub_tools.cc tests_testIpAddress_LDADD = \ @@ -4996,17 +5007,17 @@ tests_testIpAddress_LDFLAGS = $(LIBADD_DL) # icmp/libicmpcore.la is used by pinger so SHOULD NOT require more dependancies! :-( tests_testIcmp_SOURCES = \ - tests/testIcmp.h \ - tests/testIcmp.cc + tests/testIcmp.cc \ + tests/testIcmp.h nodist_tests_testIcmp_SOURCES = \ - icmp/Icmp.h \ + tests/stub_SBuf.cc \ SquidTime.h \ tests/stub_debug.cc \ + globals.cc \ + icmp/Icmp.h \ tests/stub_libmem.cc \ - tests/stub_SBuf.cc \ - time.cc \ - globals.cc + time.cc tests_testIcmp_LDADD = \ icmp/libicmpcore.la \ @@ -5022,12 +5033,12 @@ tests/testNetDb.h nodist_tests_testNetDb_SOURCES = \ + tests/stub_SBuf.cc \ SquidTime.h \ tests/stub_debug.cc \ + globals.cc \ tests/stub_libmem.cc \ - tests/stub_SBuf.cc \ - time.cc \ - globals.cc + time.cc tests_testNetDb_LDADD = \ icmp/libicmp.la \ @@ -5040,39 +5051,23 @@ tests_testNetDb_LDFLAGS = $(LIBADD_DL) tests_testCacheManager_SOURCES = \ + $(DELAY_POOL_SOURCE) \ + $(DNSSOURCE) \ + $(HTCPSOURCE) \ + $(IPC_SOURCE) \ + $(SNMP_SOURCE) \ + $(UNLINKDSOURCE) \ + $(WIN32_SOURCE) \ AccessLogEntry.cc \ - debug.cc \ - RequestFlags.h \ - RequestFlags.cc \ - HttpRequest.cc \ - String.cc \ + AuthReg.h \ + BodyPipe.cc \ + tests/stub_CacheDigest.cc \ + CacheDigest.h \ tests/testCacheManager.cc \ tests/testCacheManager.h \ - tests/stub_main_cc.cc \ - tests/stub_HttpControlMsg.cc \ - tests/stub_ipc_Forwarder.cc \ - tests/stub_store_stats.cc \ - tests/stub_EventLoop.cc \ - time.cc \ - BodyPipe.cc \ - cache_manager.cc \ - cache_cf.h \ - AuthReg.h \ - RefreshPattern.h \ CachePeer.cc \ CachePeer.h \ - CacheDigest.h \ - tests/stub_CacheDigest.cc \ - carp.h \ - tests/stub_carp.cc \ - cbdata.cc \ - tests/stub_client_db.cc \ - client_side.h \ - client_side.cc \ - client_side_reply.cc \ - client_side_request.cc \ ClientInfo.h \ - clientStream.cc \ tests/stub_CollapsedForwarding.cc \ ConfigOption.cc \ ConfigParser.cc \ @@ -5080,154 +5075,171 @@ CpuAffinityMap.h \ CpuAffinitySet.cc \ CpuAffinitySet.h \ - $(DELAY_POOL_SOURCE) \ - fs_io.h \ - fs_io.cc \ - dlink.h \ - dlink.cc \ - $(DNSSOURCE) \ - errorpage.cc \ tests/stub_ETag.cc \ - event.cc \ - external_acl.cc \ + tests/stub_EventLoop.cc \ ExternalACLEntry.cc \ - fatal.h \ - tests/stub_fatal.cc \ - fd.h \ - fd.cc \ - fde.cc \ + FadingCounter.cc \ FileMap.h \ - filemap.cc \ - fqdncache.h \ - fqdncache.cc \ FwdState.cc \ FwdState.h \ - gopher.h \ - tests/stub_gopher.cc \ HappyConnOpener.cc \ HappyConnOpener.h \ - hier_code.h \ - helper.cc \ - $(HTCPSOURCE) \ - http.cc \ - HttpBody.h \ HttpBody.cc \ - HttpHeader.h \ - HttpHeader.cc \ - HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ - HttpHeaderTools.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ + HttpBody.h \ + tests/stub_HttpControlMsg.cc \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrScTarget.cc \ + HttpHeader.cc \ + HttpHeader.h \ + HttpHeaderFieldInfo.h \ + HttpHeaderFieldStat.h \ + HttpHeaderTools.cc \ + HttpHeaderTools.h \ HttpReply.cc \ - icp_v2.cc \ - icp_v3.cc \ - $(IPC_SOURCE) \ - ipcache.cc \ - int.h \ - int.cc \ - internal.h \ - internal.cc \ + HttpRequest.cc \ + tests/stub_HttpUpgradeProtocolAccess.cc \ + IoStats.h \ LogTags.cc \ - tests/stub_libsecurity.cc \ MasterXaction.cc \ MasterXaction.h \ - multicast.h \ - multicast.cc \ - mem_node.cc \ MemBuf.cc \ MemObject.cc \ - mime.h \ - mime.cc \ - mime_header.h \ - mime_header.cc \ - neighbors.h \ - neighbors.cc \ + MemStore.cc \ Notes.cc \ Notes.h \ Parsing.cc \ - pconn.cc \ - peer_digest.cc \ - peer_proxy_negotiate_auth.h \ - peer_proxy_negotiate_auth.cc \ - peer_select.cc \ - peer_sourcehash.h \ - peer_sourcehash.cc \ - peer_userhash.h \ - peer_userhash.cc \ - PeerPoolMgr.h \ PeerPoolMgr.cc \ + PeerPoolMgr.h \ Pipeline.cc \ Pipeline.h \ - redirect.h \ - tests/stub_redirect.cc \ - refresh.h \ - refresh.cc \ + RefreshPattern.h \ RemovalPolicy.cc \ - ResolvedPeers.h \ + RequestFlags.cc \ + RequestFlags.h \ ResolvedPeers.cc \ + ResolvedPeers.h \ tests/stub_SBufDetailedStats.cc \ - $(SNMP_SOURCE) \ - SquidMath.h \ SquidMath.cc \ - IoStats.h \ - stat.h \ - stat.cc \ - StatCounters.h \ + SquidMath.h \ StatCounters.cc \ + StatCounters.h \ + tests/stub_StatHist.cc \ StatHist.h \ - StrList.h \ + StoreFileSystem.cc \ + StoreIOState.cc \ + tests/stub_StoreMeta.cc \ + StoreMetaUnpacker.cc \ + StoreSwapLogData.cc \ StrList.cc \ - tests/stub_libauth_acls.cc \ + StrList.h \ + String.cc \ + Transients.cc \ + tests/stub_cache_cf.cc \ + cache_cf.h \ + cache_manager.cc \ + tests/stub_carp.cc \ + carp.h \ + cbdata.cc \ + clientStream.cc \ + tests/stub_client_db.cc \ + client_side.cc \ + client_side.h \ + client_side_reply.cc \ + client_side_request.cc \ + debug.cc \ + dlink.cc \ + dlink.h \ + errorpage.cc \ + event.cc \ + external_acl.cc \ + tests/stub_fatal.cc \ + fatal.h \ + fd.cc \ + fd.h \ + fde.cc \ + filemap.cc \ + fqdncache.cc \ + fqdncache.h \ + fs_io.cc \ + fs_io.h \ + tests/stub_gopher.cc \ + gopher.h \ + helper.cc \ + hier_code.h \ + http.cc \ + icp_v2.cc \ + icp_v3.cc \ + int.cc \ + int.h \ + internal.cc \ + internal.h \ + tests/stub_ipc_Forwarder.cc \ + ipcache.cc \ tests/stub_libauth.cc \ + tests/stub_libauth_acls.cc \ tests/stub_libdiskio.cc \ - tests/stub_StatHist.cc \ - stmem.cc \ + tests/stub_liberror.cc \ + tests/stub_libsecurity.cc \ + tests/stub_libstore.cc \ + tests/stub_main_cc.cc \ + mem_node.cc \ + mime.cc \ + mime.h \ + mime_header.cc \ + mime_header.h \ + multicast.cc \ + multicast.h \ + neighbors.cc \ + neighbors.h \ + pconn.cc \ + peer_digest.cc \ + peer_proxy_negotiate_auth.cc \ + peer_proxy_negotiate_auth.h \ + peer_select.cc \ + peer_sourcehash.cc \ + peer_sourcehash.h \ + peer_userhash.cc \ + peer_userhash.h \ + tests/stub_redirect.cc \ + redirect.h \ + refresh.cc \ + refresh.h \ repl_modules.h \ + stat.cc \ + stat.h \ + stmem.cc \ store.cc \ store_client.cc \ - store_digest.h \ tests/stub_store_digest.cc \ + store_digest.h \ store_io.cc \ - store_key_md5.h \ store_key_md5.cc \ - store_log.h \ + store_key_md5.h \ store_log.cc \ - store_rebuild.h \ + store_log.h \ store_rebuild.cc \ - store_swapin.h \ + store_rebuild.h \ + tests/stub_store_stats.cc \ store_swapin.cc \ + store_swapin.h \ store_swapmeta.cc \ store_swapout.cc \ - StoreFileSystem.cc \ - StoreIOState.cc \ - tests/stub_StoreMeta.cc \ - StoreMetaUnpacker.cc \ - StoreSwapLogData.cc \ - tools.h \ + time.cc \ tools.cc \ - Transients.cc \ - tests/stub_cache_cf.cc \ - tests/stub_HttpUpgradeProtocolAccess.cc \ + tools.h \ tests/stub_tunnel.cc \ - tests/stub_libstore.cc \ - MemStore.cc \ - $(UNLINKDSOURCE) \ - urn.h \ urn.cc \ - wccp2.h \ + urn.h \ tests/stub_wccp2.cc \ - whois.h \ + wccp2.h \ tests/stub_whois.cc \ - FadingCounter.cc \ - $(WIN32_SOURCE) \ - wordlist.h \ - wordlist.cc + whois.h \ + wordlist.cc \ + wordlist.h nodist_tests_testCacheManager_SOURCES = \ $(BUILT_SOURCES) @@ -5274,38 +5286,39 @@ $(SSLLIB) \ $(KRB5LIBS) \ $(LIBCPPUNIT_LIBS) \ + $(SYSTEMD_LIBS) \ $(COMPAT_LIB) \ $(XTRA_LIBS) tests_testCacheManager_LDFLAGS = $(LIBADD_DL) tests_testStatHist_SOURCES = \ - tests/stub_cbdata.cc \ - fatal.h \ - tests/stub_fatal.cc \ + tests/stub_DelayId.cc \ + tests/stub_HelperChildConfig.cc \ tests/stub_MemBuf.cc \ + tests/stub_MemObject.cc \ tests/stub_SBufDetailedStats.cc \ StatHist.cc \ + tests/testStatHist.cc \ StatHist.h \ + tests/testStatHist.h \ String.cc \ tests/stub_cache_manager.cc \ + tests/stub_cbdata.cc \ tests/stub_comm.cc \ tests/stub_debug.cc \ - tests/stub_DelayId.cc \ - tests/stub_HelperChildConfig.cc \ + tests/stub_fatal.cc \ + fatal.h \ tests/stub_libmem.cc \ - tests/stub_MemObject.cc \ - mime.h \ tests/stub_mime.cc \ + mime.h \ tests/stub_pconn.cc \ - tests/stub_stmem.cc \ repl_modules.h \ + tests/stub_stmem.cc \ tests/stub_store.cc \ tests/stub_store_stats.cc \ time.cc \ - tools.h \ tests/stub_tools.cc \ - tests/testStatHist.cc \ - tests/testStatHist.h + tools.h nodist_tests_testStatHist_SOURCES = \ $(TESTSOURCES) @@ -5321,25 +5334,25 @@ tests_testStatHist_LDFLAGS = $(LIBADD_DL) tests_testConfigParser_SOURCES = \ ClientInfo.h \ - tests/stub_MemBuf.cc \ - tests/stub_time.cc \ - tests/stub_SBufDetailedStats.cc \ - String.cc \ ConfigParser.cc \ - fatal.h \ - tests/stub_fatal.cc \ tests/testConfigParser.cc \ tests/testConfigParser.h \ - cache_cf.h \ + tests/stub_HelperChildConfig.cc \ + tests/stub_MemBuf.cc \ + tests/stub_SBufDetailedStats.cc \ + String.cc \ tests/stub_cache_cf.cc \ + cache_cf.h \ tests/stub_cbdata.cc \ tests/stub_debug.cc \ + tests/stub_fatal.cc \ + fatal.h \ tests/stub_libmem.cc \ - tests/stub_HelperChildConfig.cc \ - tools.h \ + tests/stub_time.cc \ tests/stub_tools.cc \ - wordlist.h \ - wordlist.cc + tools.h \ + wordlist.cc \ + wordlist.h nodist_tests_testConfigParser_SOURCES = \ $(TESTSOURCES) @@ -5358,26 +5371,21 @@ tests_testConfigParser_LDFLAGS = $(LIBADD_DL) tests_testEvent_SOURCES = \ + $(DELAY_POOL_SOURCE) \ + $(DNSSOURCE) \ + $(HTCPSOURCE) \ + $(IPC_SOURCE) \ + $(SNMP_SOURCE) \ + $(UNLINKDSOURCE) \ + $(WIN32_SOURCE) \ AccessLogEntry.cc \ + AuthReg.h \ BodyPipe.cc \ - CacheDigest.h \ tests/stub_CacheDigest.cc \ - cache_cf.h \ - AuthReg.h \ - RefreshPattern.h \ + CacheDigest.h \ CachePeer.cc \ CachePeer.h \ - cache_manager.cc \ - carp.h \ - tests/stub_carp.cc \ - cbdata.cc \ - tests/stub_client_db.cc \ - client_side.h \ - client_side.cc \ - client_side_reply.cc \ - client_side_request.cc \ ClientInfo.h \ - clientStream.cc \ tests/stub_CollapsedForwarding.cc \ ConfigOption.cc \ ConfigParser.cc \ @@ -5385,171 +5393,177 @@ CpuAffinityMap.h \ CpuAffinitySet.cc \ CpuAffinitySet.h \ - debug.cc \ - $(DELAY_POOL_SOURCE) \ - fs_io.h \ - fs_io.cc \ - dlink.h \ - dlink.cc \ - $(DNSSOURCE) \ - errorpage.cc \ tests/stub_ETag.cc \ - event.cc \ - EventLoop.h \ + tests/testEvent.cc \ + tests/testEvent.h \ EventLoop.cc \ - external_acl.cc \ + EventLoop.h \ ExternalACLEntry.cc \ FadingCounter.cc \ - fatal.h \ - tests/stub_fatal.cc \ - fd.h \ - fd.cc \ - fde.cc \ FileMap.h \ - filemap.cc \ - fqdncache.h \ - fqdncache.cc \ FwdState.cc \ FwdState.h \ - gopher.h \ - tests/stub_gopher.cc \ HappyConnOpener.cc \ HappyConnOpener.h \ - helper.cc \ - hier_code.h \ - $(HTCPSOURCE) \ - http.cc \ - HttpBody.h \ HttpBody.cc \ + HttpBody.h \ tests/stub_HttpControlMsg.cc \ - HttpHeader.h \ - HttpHeader.cc \ - HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ - HttpHeaderTools.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrScTarget.cc \ + HttpHeader.cc \ + HttpHeader.h \ + HttpHeaderFieldInfo.h \ + HttpHeaderFieldStat.h \ + HttpHeaderTools.cc \ + HttpHeaderTools.h \ HttpReply.cc \ - PeerPoolMgr.h \ + HttpRequest.cc \ + tests/stub_HttpUpgradeProtocolAccess.cc \ + IoStats.h \ + LogTags.cc \ + MasterXaction.cc \ + MasterXaction.h \ + MemBuf.cc \ + MemObject.cc \ + MemStore.cc \ + Notes.cc \ + Notes.h \ + Parsing.cc \ PeerPoolMgr.cc \ - RequestFlags.h \ + PeerPoolMgr.h \ + Pipeline.cc \ + Pipeline.h \ + RefreshPattern.h \ + RemovalPolicy.cc \ RequestFlags.cc \ - HttpRequest.cc \ + RequestFlags.h \ + ResolvedPeers.cc \ + ResolvedPeers.h \ + tests/stub_SBufDetailedStats.cc \ + SquidMath.cc \ + SquidMath.h \ + StatCounters.cc \ + StatCounters.h \ + StatHist.cc \ + StatHist.h \ + StoreFileSystem.cc \ + StoreIOState.cc \ + tests/stub_StoreMeta.cc \ + StoreMetaUnpacker.cc \ + StoreSwapLogData.cc \ + StrList.cc \ + StrList.h \ + String.cc \ + Transients.cc \ + tests/stub_cache_cf.cc \ + cache_cf.h \ + cache_manager.cc \ + tests/stub_carp.cc \ + carp.h \ + cbdata.cc \ + clientStream.cc \ + tests/stub_client_db.cc \ + client_side.cc \ + client_side.h \ + client_side_reply.cc \ + client_side_request.cc \ + debug.cc \ + dlink.cc \ + dlink.h \ + errorpage.cc \ + event.cc \ + external_acl.cc \ + tests/stub_fatal.cc \ + fatal.h \ + fd.cc \ + fd.h \ + fde.cc \ + filemap.cc \ + fqdncache.cc \ + fqdncache.h \ + fs_io.cc \ + fs_io.h \ + tests/stub_gopher.cc \ + gopher.h \ + helper.cc \ + hier_code.h \ + http.cc \ icp_v2.cc \ icp_v3.cc \ - $(IPC_SOURCE) \ - ipcache.cc \ - int.h \ int.cc \ - internal.h \ + int.h \ internal.cc \ - LogTags.cc \ - tests/stub_libsecurity.cc \ - MasterXaction.cc \ - MasterXaction.h \ + internal.h \ + tests/stub_ipc_Forwarder.cc \ + ipcache.cc \ + tests/stub_libauth.cc \ + tests/stub_libauth_acls.cc \ + tests/stub_libdiskio.cc \ + tests/stub_liberror.cc \ + tests/stub_libeui.cc \ tests/stub_libmem.cc \ + tests/stub_libsecurity.cc \ + tests/stub_libstore.cc \ + tests/stub_main_cc.cc \ mem_node.cc \ - MemBuf.cc \ - MemObject.cc \ - mime.h \ mime.cc \ - mime_header.h \ + mime.h \ mime_header.cc \ - multicast.h \ + mime_header.h \ multicast.cc \ - neighbors.h \ + multicast.h \ neighbors.cc \ - Notes.cc \ - Notes.h \ - Parsing.cc \ + neighbors.h \ pconn.cc \ peer_digest.cc \ - peer_proxy_negotiate_auth.h \ peer_proxy_negotiate_auth.cc \ + peer_proxy_negotiate_auth.h \ peer_select.cc \ - peer_sourcehash.h \ peer_sourcehash.cc \ - peer_userhash.h \ + peer_sourcehash.h \ peer_userhash.cc \ - Pipeline.cc \ - Pipeline.h \ - redirect.h \ + peer_userhash.h \ tests/stub_redirect.cc \ - refresh.h \ + redirect.h \ refresh.cc \ - RemovalPolicy.cc \ - ResolvedPeers.h \ - ResolvedPeers.cc \ - StrList.h \ - StrList.cc \ - tests/stub_SBufDetailedStats.cc \ - $(SNMP_SOURCE) \ - SquidMath.cc \ - SquidMath.h \ - IoStats.h \ - stat.h \ + refresh.h \ + repl_modules.h \ stat.cc \ - StatCounters.h \ - StatCounters.cc \ - StatHist.h \ - StatHist.cc \ + stat.h \ stmem.cc \ - repl_modules.h \ store.cc \ store_client.cc \ - store_digest.h \ tests/stub_store_digest.cc \ + store_digest.h \ store_io.cc \ - store_key_md5.h \ store_key_md5.cc \ - store_log.h \ + store_key_md5.h \ store_log.cc \ - store_rebuild.h \ + store_log.h \ store_rebuild.cc \ - store_swapin.h \ + store_rebuild.h \ + tests/stub_store_stats.cc \ store_swapin.cc \ + store_swapin.h \ store_swapmeta.cc \ store_swapout.cc \ - StoreFileSystem.cc \ - StoreIOState.cc \ - tests/stub_StoreMeta.cc \ - StoreMetaUnpacker.cc \ - StoreSwapLogData.cc \ - String.cc \ - tests/stub_cache_cf.cc \ - tests/stub_HttpUpgradeProtocolAccess.cc \ - tests/stub_libstore.cc \ tests/CapturingStoreEntry.h \ - tests/testEvent.cc \ - tests/testEvent.h \ - tests/stub_main_cc.cc \ - tests/stub_ipc_Forwarder.cc \ - tests/stub_libauth_acls.cc \ - tests/stub_libauth.cc \ - tests/stub_libdiskio.cc \ - tests/stub_libeui.cc \ - tests/stub_store_stats.cc \ time.cc \ - tools.h \ tools.cc \ - Transients.cc \ + tools.h \ tests/stub_tunnel.cc \ - MemStore.cc \ - $(UNLINKDSOURCE) \ - urn.h \ urn.cc \ - wccp2.h \ + urn.h \ tests/stub_wccp2.cc \ - whois.h \ + wccp2.h \ tests/stub_whois.cc \ - $(WIN32_SOURCE) \ - wordlist.h \ - wordlist.cc + whois.h \ + wordlist.cc \ + wordlist.h nodist_tests_testEvent_SOURCES = \ $(BUILT_SOURCES) @@ -5593,31 +5607,27 @@ $(SSLLIB) \ $(KRB5LIBS) \ $(LIBCPPUNIT_LIBS) \ + $(SYSTEMD_LIBS) \ $(COMPAT_LIB) \ $(XTRA_LIBS) tests_testEvent_LDFLAGS = $(LIBADD_DL) tests_testEventLoop_SOURCES = \ + $(DELAY_POOL_SOURCE) \ + $(DNSSOURCE) \ + $(HTCPSOURCE) \ + $(IPC_SOURCE) \ + $(SNMP_SOURCE) \ + $(UNLINKDSOURCE) \ + $(WIN32_SOURCE) \ AccessLogEntry.cc \ + AuthReg.h \ BodyPipe.cc \ - CacheDigest.h \ tests/stub_CacheDigest.cc \ - cache_manager.cc \ - cache_cf.h \ - AuthReg.h \ - RefreshPattern.h \ + CacheDigest.h \ CachePeer.cc \ CachePeer.h \ - carp.h \ - tests/stub_carp.cc \ - cbdata.cc \ - tests/stub_client_db.cc \ - client_side.h \ - client_side.cc \ - client_side_reply.cc \ - client_side_request.cc \ ClientInfo.h \ - clientStream.cc \ tests/stub_CollapsedForwarding.cc \ ConfigOption.cc \ ConfigParser.cc \ @@ -5625,170 +5635,176 @@ CpuAffinityMap.h \ CpuAffinitySet.cc \ CpuAffinitySet.h \ - debug.cc \ - $(DELAY_POOL_SOURCE) \ - fs_io.h \ - fs_io.cc \ - dlink.h \ - dlink.cc \ - $(DNSSOURCE) \ - errorpage.cc \ tests/stub_ETag.cc \ - EventLoop.h \ EventLoop.cc \ - event.cc \ - external_acl.cc \ + tests/testEventLoop.cc \ + EventLoop.h \ + tests/testEventLoop.h \ ExternalACLEntry.cc \ FadingCounter.cc \ - fatal.h \ - tests/stub_fatal.cc \ - fd.h \ - fd.cc \ - fde.cc \ FileMap.h \ - filemap.cc \ - fqdncache.h \ - fqdncache.cc \ FwdState.cc \ FwdState.h \ - gopher.h \ - tests/stub_gopher.cc \ HappyConnOpener.cc \ HappyConnOpener.h \ - helper.cc \ - hier_code.h \ - $(HTCPSOURCE) \ - http.cc \ - HttpBody.h \ HttpBody.cc \ + HttpBody.h \ tests/stub_HttpControlMsg.cc \ - HttpHeader.h \ - HttpHeader.cc \ - HttpHeaderFieldInfo.h \ - HttpHeaderTools.h \ - HttpHeaderTools.cc \ - HttpHeaderFieldStat.h \ - HttpHdrCc.h \ HttpHdrCc.cc \ + HttpHdrCc.h \ HttpHdrContRange.cc \ HttpHdrRange.cc \ HttpHdrSc.cc \ HttpHdrScTarget.cc \ + HttpHeader.cc \ + HttpHeader.h \ + HttpHeaderFieldInfo.h \ + HttpHeaderFieldStat.h \ + HttpHeaderTools.cc \ + HttpHeaderTools.h \ HttpReply.cc \ - PeerPoolMgr.h \ - PeerPoolMgr.cc \ - RequestFlags.h \ - RequestFlags.cc \ HttpRequest.cc \ - icp_v2.cc \ - icp_v3.cc \ - $(IPC_SOURCE) \ - ipcache.cc \ - int.h \ - int.cc \ - internal.h \ - internal.cc \ + tests/stub_HttpUpgradeProtocolAccess.cc \ + IoStats.h \ LogTags.cc \ MasterXaction.cc \ MasterXaction.h \ MemBuf.cc \ MemObject.cc \ + MemStore.cc \ + Notes.cc \ + Notes.h \ + Parsing.cc \ + PeerPoolMgr.cc \ + PeerPoolMgr.h \ + Pipeline.cc \ + Pipeline.h \ + RefreshPattern.h \ + RemovalPolicy.cc \ + RequestFlags.cc \ + RequestFlags.h \ + ResolvedPeers.cc \ + ResolvedPeers.h \ + tests/stub_SBufDetailedStats.cc \ + SquidMath.cc \ + SquidMath.h \ + StatCounters.cc \ + StatCounters.h \ + StatHist.cc \ + StatHist.h \ + StoreFileSystem.cc \ + StoreIOState.cc \ + tests/stub_StoreMeta.cc \ + StoreMetaUnpacker.cc \ + StoreSwapLogData.cc \ + StrList.cc \ + StrList.h \ + String.cc \ + Transients.cc \ + tests/stub_cache_cf.cc \ + cache_cf.h \ + cache_manager.cc \ + tests/stub_carp.cc \ + carp.h \ + cbdata.cc \ + clientStream.cc \ + tests/stub_client_db.cc \ + client_side.cc \ + client_side.h \ + client_side_reply.cc \ + client_side_request.cc \ + debug.cc \ + dlink.cc \ + dlink.h \ + errorpage.cc \ + event.cc \ + external_acl.cc \ + tests/stub_fatal.cc \ + fatal.h \ + fd.cc \ + fd.h \ + fde.cc \ + filemap.cc \ + fqdncache.cc \ + fqdncache.h \ + fs_io.cc \ + fs_io.h \ + tests/stub_gopher.cc \ + gopher.h \ + helper.cc \ + hier_code.h \ + http.cc \ + icp_v2.cc \ + icp_v3.cc \ + int.cc \ + int.h \ + internal.cc \ + internal.h \ + tests/stub_ipc_Forwarder.cc \ + ipcache.cc \ + tests/stub_libauth.cc \ + tests/stub_libauth_acls.cc \ + tests/stub_libdiskio.cc \ + tests/stub_liberror.cc \ + tests/stub_libeui.cc \ tests/stub_libmem.cc \ + tests/stub_libsecurity.cc \ + tests/stub_libstore.cc \ + tests/stub_main_cc.cc \ mem_node.cc \ - mime.h \ mime.cc \ - mime_header.h \ + mime.h \ mime_header.cc \ - multicast.h \ + mime_header.h \ multicast.cc \ - neighbors.h \ + multicast.h \ neighbors.cc \ - Notes.cc \ - Notes.h \ - Parsing.cc \ + neighbors.h \ pconn.cc \ peer_digest.cc \ - peer_proxy_negotiate_auth.h \ peer_proxy_negotiate_auth.cc \ + peer_proxy_negotiate_auth.h \ peer_select.cc \ - peer_sourcehash.h \ peer_sourcehash.cc \ - peer_userhash.h \ + peer_sourcehash.h \ peer_userhash.cc \ - Pipeline.cc \ - Pipeline.h \ - RemovalPolicy.cc \ - ResolvedPeers.cc \ - ResolvedPeers.h \ - redirect.h \ + peer_userhash.h \ tests/stub_redirect.cc \ - refresh.h \ + redirect.h \ refresh.cc \ - tests/stub_SBufDetailedStats.cc \ - $(SNMP_SOURCE) \ - SquidMath.h \ - SquidMath.cc \ - IoStats.h \ - stat.h \ + refresh.h \ + repl_modules.h \ stat.cc \ - StatCounters.h \ - StatCounters.cc \ - StatHist.h \ - StatHist.cc \ + stat.h \ stmem.cc \ - repl_modules.h \ store.cc \ store_client.cc \ - store_digest.h \ tests/stub_store_digest.cc \ + store_digest.h \ store_io.cc \ - store_key_md5.h \ store_key_md5.cc \ - store_log.h \ + store_key_md5.h \ store_log.cc \ - store_rebuild.h \ + store_log.h \ store_rebuild.cc \ - store_swapin.h \ + store_rebuild.h \ + tests/stub_store_stats.cc \ store_swapin.cc \ + store_swapin.h \ store_swapmeta.cc \ store_swapout.cc \ - StoreFileSystem.cc \ - StoreIOState.cc \ - tests/stub_StoreMeta.cc \ - StoreMetaUnpacker.cc \ - StoreSwapLogData.cc \ - String.cc \ - StrList.h \ - StrList.cc \ - tests/stub_cache_cf.cc \ - tests/stub_HttpUpgradeProtocolAccess.cc \ - tests/stub_libstore.cc \ - tests/testEventLoop.cc \ - tests/testEventLoop.h \ - tests/stub_main_cc.cc \ - tests/stub_ipc_Forwarder.cc \ - tests/stub_libauth_acls.cc \ - tests/stub_libauth.cc \ - tests/stub_libdiskio.cc \ - tests/stub_libeui.cc \ - tests/stub_libsecurity.cc \ - tests/stub_store_stats.cc \ time.cc \ - tools.h \ tools.cc \ - Transients.cc \ + tools.h \ tests/stub_tunnel.cc \ - MemStore.cc \ - $(UNLINKDSOURCE) \ - urn.h \ urn.cc \ - wccp2.h \ + urn.h \ tests/stub_wccp2.cc \ - whois.h \ + wccp2.h \ tests/stub_whois.cc \ - $(WIN32_SOURCE) \ - wordlist.h \ - wordlist.cc + whois.h \ + wordlist.cc \ + wordlist.h nodist_tests_testEventLoop_SOURCES = \ $(BUILT_SOURCES) @@ -5832,6 +5848,7 @@ $(SSLLIB) \ $(KRB5LIBS) \ $(LIBCPPUNIT_LIBS) \ + $(SYSTEMD_LIBS) \ $(COMPAT_LIB) \ $(XTRA_LIBS) @@ -6066,6 +6083,16 @@ @: > tests/$(DEPDIR)/$(am__dirstamp) tests/testACLMaxUserIP.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_HelperChildConfig.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_HttpHeader.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_HttpRequest.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_MemBuf.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_StatHist.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) tests/stub_access_log.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_cache_cf.$(OBJEXT): tests/$(am__dirstamp) \ @@ -6080,12 +6107,6 @@ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_fatal.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_HelperChildConfig.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_HttpHeader.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_HttpRequest.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) tests/stub_libauth.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_libhttp.$(OBJEXT): tests/$(am__dirstamp) \ @@ -6094,10 +6115,6 @@ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_libsecurity.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_MemBuf.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_StatHist.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) tests/testACLMaxUserIP$(EXEEXT): $(tests_testACLMaxUserIP_OBJECTS) $(tests_testACLMaxUserIP_DEPENDENCIES) $(EXTRA_tests_testACLMaxUserIP_DEPENDENCIES) tests/$(am__dirstamp) @rm -f tests/testACLMaxUserIP$(EXEEXT) @@ -6108,47 +6125,49 @@ tests/testBoilerplate$(EXEEXT): $(tests_testBoilerplate_OBJECTS) $(tests_testBoilerplate_DEPENDENCIES) $(EXTRA_tests_testBoilerplate_DEPENDENCIES) tests/$(am__dirstamp) @rm -f tests/testBoilerplate$(EXEEXT) $(AM_V_CXXLD)$(tests_testBoilerplate_LINK) $(tests_testBoilerplate_OBJECTS) $(tests_testBoilerplate_LDADD) $(LIBS) +tests/stub_CacheDigest.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) tests/testCacheManager.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_main_cc.$(OBJEXT): tests/$(am__dirstamp) \ +tests/stub_CollapsedForwarding.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_HttpControlMsg.$(OBJEXT): tests/$(am__dirstamp) \ +tests/stub_ETag.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_ipc_Forwarder.$(OBJEXT): tests/$(am__dirstamp) \ +tests/stub_EventLoop.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_store_stats.$(OBJEXT): tests/$(am__dirstamp) \ +tests/stub_HttpControlMsg.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_EventLoop.$(OBJEXT): tests/$(am__dirstamp) \ +tests/stub_HttpUpgradeProtocolAccess.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_CacheDigest.$(OBJEXT): tests/$(am__dirstamp) \ +tests/stub_SBufDetailedStats.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_StoreMeta.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_carp.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_client_db.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_CollapsedForwarding.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_ETag.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) tests/stub_gopher.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_redirect.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_SBufDetailedStats.$(OBJEXT): tests/$(am__dirstamp) \ +tests/stub_ipc_Forwarder.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_libauth_acls.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_libdiskio.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_store_digest.$(OBJEXT): tests/$(am__dirstamp) \ +tests/stub_liberror.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_StoreMeta.$(OBJEXT): tests/$(am__dirstamp) \ +tests/stub_libstore.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_HttpUpgradeProtocolAccess.$(OBJEXT): tests/$(am__dirstamp) \ +tests/stub_main_cc.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_tunnel.$(OBJEXT): tests/$(am__dirstamp) \ +tests/stub_redirect.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_libstore.$(OBJEXT): tests/$(am__dirstamp) \ +tests/stub_store_digest.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_store_stats.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_tunnel.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_wccp2.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) @@ -6164,16 +6183,26 @@ tests/testCharacterSet$(EXEEXT): $(tests_testCharacterSet_OBJECTS) $(tests_testCharacterSet_DEPENDENCIES) $(EXTRA_tests_testCharacterSet_DEPENDENCIES) tests/$(am__dirstamp) @rm -f tests/testCharacterSet$(EXEEXT) $(AM_V_CXXLD)$(tests_testCharacterSet_LINK) $(tests_testCharacterSet_OBJECTS) $(tests_testCharacterSet_LDADD) $(LIBS) -tests/stub_time.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) tests/testConfigParser.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_time.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) tests/stub_tools.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/testConfigParser$(EXEEXT): $(tests_testConfigParser_OBJECTS) $(tests_testConfigParser_DEPENDENCIES) $(EXTRA_tests_testConfigParser_DEPENDENCIES) tests/$(am__dirstamp) @rm -f tests/testConfigParser$(EXEEXT) $(AM_V_CXXLD)$(tests_testConfigParser_LINK) $(tests_testConfigParser_OBJECTS) $(tests_testConfigParser_LDADD) $(LIBS) +tests/testDiskIO.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_MemStore.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_Port.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/testStoreSupport.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_UdsOp.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) tests/stub_acl.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_cache_manager.$(OBJEXT): tests/$(am__dirstamp) \ @@ -6192,6 +6221,8 @@ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_ipcache.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_libanyp.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) tests/stub_libeui.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_libformat.$(OBJEXT): tests/$(am__dirstamp) \ @@ -6200,30 +6231,18 @@ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_liblog.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_MemStore.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) tests/stub_mime.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_neighbors.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_pconn.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_Port.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) tests/stub_stat.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_store_client.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_store_rebuild.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_UdsOp.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) -tests/testDiskIO.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) -tests/testStoreSupport.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_libanyp.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) tests/testDiskIO$(EXEEXT): $(tests_testDiskIO_OBJECTS) $(tests_testDiskIO_DEPENDENCIES) $(EXTRA_tests_testDiskIO_DEPENDENCIES) tests/$(am__dirstamp) @rm -f tests/testDiskIO$(EXEEXT) @@ -6252,6 +6271,8 @@ tests/testEventLoop$(EXEEXT): $(tests_testEventLoop_OBJECTS) $(tests_testEventLoop_DEPENDENCIES) $(EXTRA_tests_testEventLoop_DEPENDENCIES) tests/$(am__dirstamp) @rm -f tests/testEventLoop$(EXEEXT) $(AM_V_CXXLD)$(tests_testEventLoop_LINK) $(tests_testEventLoop_OBJECTS) $(tests_testEventLoop_LDADD) $(LIBS) +tests/testHttp1Parser.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) tests/stub_MemObject.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_comm.$(OBJEXT): tests/$(am__dirstamp) \ @@ -6262,12 +6283,12 @@ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_store.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/testHttp1Parser.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) tests/testHttp1Parser$(EXEEXT): $(tests_testHttp1Parser_OBJECTS) $(tests_testHttp1Parser_DEPENDENCIES) $(EXTRA_tests_testHttp1Parser_DEPENDENCIES) tests/$(am__dirstamp) @rm -f tests/testHttp1Parser$(EXEEXT) $(AM_V_CXXLD)$(tests_testHttp1Parser_LINK) $(tests_testHttp1Parser_OBJECTS) $(tests_testHttp1Parser_LDADD) $(LIBS) +tests/testHttpReply.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) tests/stub_fd.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_libcomm.$(OBJEXT): tests/$(am__dirstamp) \ @@ -6276,8 +6297,6 @@ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_libsslsquid.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/testHttpReply.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) tests/testHttpReply$(EXEEXT): $(tests_testHttpReply_OBJECTS) $(tests_testHttpReply_DEPENDENCIES) $(EXTRA_tests_testHttpReply_DEPENDENCIES) tests/$(am__dirstamp) @rm -f tests/testHttpReply$(EXEEXT) @@ -6334,10 +6353,10 @@ tests/testRock$(EXEEXT): $(tests_testRock_OBJECTS) $(tests_testRock_DEPENDENCIES) $(EXTRA_tests_testRock_DEPENDENCIES) tests/$(am__dirstamp) @rm -f tests/testRock$(EXEEXT) $(AM_V_CXXLD)$(tests_testRock_LINK) $(tests_testRock_OBJECTS) $(tests_testRock_LDADD) $(LIBS) -tests/SBufFindTest.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) tests/testSBuf.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) +tests/SBufFindTest.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) tests/testSBuf$(EXEEXT): $(tests_testSBuf_OBJECTS) $(tests_testSBuf_DEPENDENCIES) $(EXTRA_tests_testSBuf_DEPENDENCIES) tests/$(am__dirstamp) @rm -f tests/testSBuf$(EXEEXT) @@ -6358,8 +6377,6 @@ $(AM_V_CXXLD)$(tests_testStatHist_LINK) $(tests_testStatHist_OBJECTS) $(tests_testStatHist_LDADD) $(LIBS) tests/stub_HttpReply.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_store_swapout.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) tests/testPackableStream.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/testStore.$(OBJEXT): tests/$(am__dirstamp) \ @@ -6368,6 +6385,8 @@ tests/$(DEPDIR)/$(am__dirstamp) tests/testStoreHashIndex.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_store_swapout.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) tests/TestSwapDir.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) @@ -6532,8 +6551,6 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/delay_pools.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlink.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dns_internal.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/err_detail_type.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/err_type.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errorpage.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/external_acl.Po@am__quote@ # am--include-marker @@ -6654,6 +6671,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/stub_libauth_acls.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/stub_libcomm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/stub_libdiskio.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/stub_liberror.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/stub_libeui.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/stub_libformat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/stub_libhttp.Po@am__quote@ # am--include-marker @@ -7530,8 +7548,6 @@ -rm -f ./$(DEPDIR)/delay_pools.Po -rm -f ./$(DEPDIR)/dlink.Po -rm -f ./$(DEPDIR)/dns_internal.Po - -rm -f ./$(DEPDIR)/err_detail_type.Po - -rm -f ./$(DEPDIR)/err_type.Po -rm -f ./$(DEPDIR)/errorpage.Po -rm -f ./$(DEPDIR)/event.Po -rm -f ./$(DEPDIR)/external_acl.Po @@ -7652,6 +7668,7 @@ -rm -f tests/$(DEPDIR)/stub_libauth_acls.Po -rm -f tests/$(DEPDIR)/stub_libcomm.Po -rm -f tests/$(DEPDIR)/stub_libdiskio.Po + -rm -f tests/$(DEPDIR)/stub_liberror.Po -rm -f tests/$(DEPDIR)/stub_libeui.Po -rm -f tests/$(DEPDIR)/stub_libformat.Po -rm -f tests/$(DEPDIR)/stub_libhttp.Po @@ -7864,8 +7881,6 @@ -rm -f ./$(DEPDIR)/delay_pools.Po -rm -f ./$(DEPDIR)/dlink.Po -rm -f ./$(DEPDIR)/dns_internal.Po - -rm -f ./$(DEPDIR)/err_detail_type.Po - -rm -f ./$(DEPDIR)/err_type.Po -rm -f ./$(DEPDIR)/errorpage.Po -rm -f ./$(DEPDIR)/event.Po -rm -f ./$(DEPDIR)/external_acl.Po @@ -7986,6 +8001,7 @@ -rm -f tests/$(DEPDIR)/stub_libauth_acls.Po -rm -f tests/$(DEPDIR)/stub_libcomm.Po -rm -f tests/$(DEPDIR)/stub_libdiskio.Po + -rm -f tests/$(DEPDIR)/stub_liberror.Po -rm -f tests/$(DEPDIR)/stub_libeui.Po -rm -f tests/$(DEPDIR)/stub_libformat.Po -rm -f tests/$(DEPDIR)/stub_libhttp.Po @@ -8112,12 +8128,6 @@ hier_code.cc: hier_code.h mk-string-arrays.awk $(AWK) -f $(srcdir)/mk-string-arrays.awk < $(srcdir)/hier_code.h > $@ || ($(RM) -f $@ && exit 1) -err_type.cc: err_type.h mk-string-arrays.awk - $(AWK) -f $(srcdir)/mk-string-arrays.awk < $(srcdir)/err_type.h > $@ || ($(RM) -f $@ && exit 1) - -err_detail_type.cc: err_detail_type.h mk-string-arrays.awk - $(AWK) -f $(srcdir)/mk-string-arrays.awk < $(srcdir)/err_detail_type.h | sed 's/ERR_DETAIL_//' > $@ || ($(RM) -f $@ && exit 1) - lookup_t.cc: lookup_t.h mk-string-arrays.awk $(AWK) -f $(srcdir)/mk-string-arrays.awk < $(srcdir)/lookup_t.h > $@ || ($(RM) -f $@ && exit 1) diff -u -r -N squid-5.0.5/src/mem/Makefile.am squid-5.0.6/src/mem/Makefile.am --- squid-5.0.5/src/mem/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mem/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -13,13 +13,13 @@ libmem_la_SOURCES = \ AllocatorProxy.cc \ AllocatorProxy.h \ - forward.h \ Meter.h \ - old_api.cc \ Pool.cc \ Pool.h \ PoolChunked.cc \ PoolChunked.h \ - PoolingAllocator.h \ PoolMalloc.cc \ - PoolMalloc.h + PoolMalloc.h \ + PoolingAllocator.h \ + forward.h \ + old_api.cc diff -u -r -N squid-5.0.5/src/mem/Makefile.in squid-5.0.6/src/mem/Makefile.in --- squid-5.0.5/src/mem/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/mem/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -164,8 +164,8 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libmem_la_LIBADD = -am_libmem_la_OBJECTS = AllocatorProxy.lo old_api.lo Pool.lo \ - PoolChunked.lo PoolMalloc.lo +am_libmem_la_OBJECTS = AllocatorProxy.lo Pool.lo PoolChunked.lo \ + PoolMalloc.lo old_api.lo libmem_la_OBJECTS = $(am_libmem_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -733,16 +733,16 @@ libmem_la_SOURCES = \ AllocatorProxy.cc \ AllocatorProxy.h \ - forward.h \ Meter.h \ - old_api.cc \ Pool.cc \ Pool.h \ PoolChunked.cc \ PoolChunked.h \ - PoolingAllocator.h \ PoolMalloc.cc \ - PoolMalloc.h + PoolMalloc.h \ + PoolingAllocator.h \ + forward.h \ + old_api.cc all: all-am diff -u -r -N squid-5.0.5/src/mgr/Action.cc squid-5.0.6/src/mgr/Action.cc --- squid-5.0.5/src/mgr/Action.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mgr/Action.cc 2021-05-10 21:02:34.000000000 +1200 @@ -79,7 +79,7 @@ } void -Mgr::Action::sendResponse(unsigned int requestId) +Mgr::Action::sendResponse(const Ipc::RequestId requestId) { Response response(requestId, this); Ipc::TypedMsgHdr message; diff -u -r -N squid-5.0.5/src/mgr/Action.h squid-5.0.6/src/mgr/Action.h --- squid-5.0.5/src/mgr/Action.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mgr/Action.h 2021-05-10 21:02:34.000000000 +1200 @@ -55,7 +55,7 @@ virtual void unpack(const Ipc::TypedMsgHdr &) {} /// notify Coordinator that this action is done with local processing - void sendResponse(unsigned int requestId); + void sendResponse(Ipc::RequestId); /* Action properties */ diff -u -r -N squid-5.0.5/src/mgr/Filler.cc squid-5.0.6/src/mgr/Filler.cc --- squid-5.0.5/src/mgr/Filler.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mgr/Filler.cc 2021-05-10 21:02:34.000000000 +1200 @@ -11,6 +11,7 @@ #include "squid.h" #include "base/TextException.h" #include "comm/Connection.h" +#include "ipc/RequestId.h" #include "mgr/Filler.h" #include "mgr/Response.h" #include "Store.h" @@ -18,7 +19,7 @@ CBDATA_NAMESPACED_CLASS_INIT(Mgr, Filler); Mgr::Filler::Filler(const Action::Pointer &anAction, const Comm::ConnectionPointer &conn, - unsigned int aRequestId): + const Ipc::RequestId aRequestId): StoreToCommWriter(conn, anAction->createStoreEntry()), action(anAction), requestId(aRequestId) diff -u -r -N squid-5.0.5/src/mgr/Filler.h squid-5.0.6/src/mgr/Filler.h --- squid-5.0.5/src/mgr/Filler.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mgr/Filler.h 2021-05-10 21:02:34.000000000 +1200 @@ -12,6 +12,7 @@ #define SQUID_MGR_FILLER_H #include "comm/forward.h" +#include "ipc/forward.h" #include "mgr/Action.h" #include "mgr/StoreToCommWriter.h" @@ -24,7 +25,7 @@ CBDATA_CLASS(Filler); public: - Filler(const Action::Pointer &anAction, const Comm::ConnectionPointer &conn, unsigned int aRequestId); + Filler(const Action::Pointer &, const Comm::ConnectionPointer &, Ipc::RequestId); protected: /* AsyncJob API */ @@ -33,7 +34,7 @@ private: Action::Pointer action; ///< action that will run() and sendResponse() - unsigned int requestId; ///< the ID of the Request we are responding to + Ipc::RequestId requestId; ///< the ID of the Request we are responding to }; } // namespace Mgr diff -u -r -N squid-5.0.5/src/mgr/Forwarder.cc squid-5.0.6/src/mgr/Forwarder.cc --- squid-5.0.5/src/mgr/Forwarder.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mgr/Forwarder.cc 2021-05-10 21:02:34.000000000 +1200 @@ -28,7 +28,10 @@ Mgr::Forwarder::Forwarder(const Comm::ConnectionPointer &aConn, const ActionParams &aParams, HttpRequest* aRequest, StoreEntry* anEntry, const AccessLogEntryPointer &anAle): - Ipc::Forwarder(new Request(KidIdentifier, 0, aConn, aParams), 10), + // TODO: Add virtual Forwarder::makeRequest() to avoid prematurely creating + // this dummy request with a dummy ID that are finalized by Ipc::Forwarder. + // Same for Snmp::Forwarder. + Ipc::Forwarder(new Request(KidIdentifier, Ipc::RequestId(/*XXX*/), aConn, aParams), 10), httpRequest(aRequest), entry(anEntry), conn(aConn), ale(anAle) { debugs(16, 5, HERE << conn); diff -u -r -N squid-5.0.5/src/mgr/FunAction.cc squid-5.0.6/src/mgr/FunAction.cc --- squid-5.0.5/src/mgr/FunAction.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mgr/FunAction.cc 2021-05-10 21:02:34.000000000 +1200 @@ -12,6 +12,7 @@ #include "base/TextException.h" #include "comm/Connection.h" #include "globals.h" +#include "ipc/RequestId.h" #include "ipc/UdsOp.h" #include "mgr/Command.h" #include "mgr/Filler.h" diff -u -r -N squid-5.0.5/src/mgr/InfoAction.cc squid-5.0.6/src/mgr/InfoAction.cc --- squid-5.0.5/src/mgr/InfoAction.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mgr/InfoAction.cc 2021-05-10 21:02:34.000000000 +1200 @@ -14,6 +14,7 @@ #include "globals.h" #include "HttpReply.h" #include "ipc/Messages.h" +#include "ipc/RequestId.h" #include "ipc/TypedMsgHdr.h" #include "ipc/UdsOp.h" #include "mgr/Filler.h" diff -u -r -N squid-5.0.5/src/mgr/Makefile.am squid-5.0.6/src/mgr/Makefile.am --- squid-5.0.5/src/mgr/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mgr/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -12,12 +12,12 @@ libmgr_la_SOURCES = \ Action.cc \ - ActionCreator.h \ Action.h \ + ActionCreator.h \ ActionParams.cc \ ActionParams.h \ - ActionPasswordList.h \ ActionPasswordList.cc \ + ActionPasswordList.h \ ActionProfile.h \ ActionWriter.cc \ ActionWriter.h \ @@ -31,17 +31,21 @@ Filler.h \ Forwarder.cc \ Forwarder.h \ - forward.h \ FunAction.cc \ FunAction.h \ InfoAction.cc \ InfoAction.h \ Inquirer.cc \ Inquirer.h \ + IntParam.cc \ + IntParam.h \ IntervalAction.cc \ IntervalAction.h \ IoAction.cc \ IoAction.h \ + QueryParam.h \ + QueryParams.cc \ + QueryParams.h \ Registration.cc \ Registration.h \ Request.cc \ @@ -54,10 +58,6 @@ StoreIoAction.h \ StoreToCommWriter.cc \ StoreToCommWriter.h \ - QueryParam.h \ - QueryParams.cc \ - QueryParams.h \ - IntParam.cc \ - IntParam.h \ StringParam.cc \ - StringParam.h + StringParam.h \ + forward.h diff -u -r -N squid-5.0.5/src/mgr/Makefile.in squid-5.0.6/src/mgr/Makefile.in --- squid-5.0.5/src/mgr/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/mgr/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -167,9 +167,9 @@ am_libmgr_la_OBJECTS = Action.lo ActionParams.lo ActionPasswordList.lo \ ActionWriter.lo BasicActions.lo Command.lo CountersAction.lo \ Filler.lo Forwarder.lo FunAction.lo InfoAction.lo Inquirer.lo \ - IntervalAction.lo IoAction.lo Registration.lo Request.lo \ - Response.lo ServiceTimesAction.lo StoreIoAction.lo \ - StoreToCommWriter.lo QueryParams.lo IntParam.lo StringParam.lo + IntParam.lo IntervalAction.lo IoAction.lo QueryParams.lo \ + Registration.lo Request.lo Response.lo ServiceTimesAction.lo \ + StoreIoAction.lo StoreToCommWriter.lo StringParam.lo libmgr_la_OBJECTS = $(am_libmgr_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -747,12 +747,12 @@ noinst_LTLIBRARIES = libmgr.la libmgr_la_SOURCES = \ Action.cc \ - ActionCreator.h \ Action.h \ + ActionCreator.h \ ActionParams.cc \ ActionParams.h \ - ActionPasswordList.h \ ActionPasswordList.cc \ + ActionPasswordList.h \ ActionProfile.h \ ActionWriter.cc \ ActionWriter.h \ @@ -766,17 +766,21 @@ Filler.h \ Forwarder.cc \ Forwarder.h \ - forward.h \ FunAction.cc \ FunAction.h \ InfoAction.cc \ InfoAction.h \ Inquirer.cc \ Inquirer.h \ + IntParam.cc \ + IntParam.h \ IntervalAction.cc \ IntervalAction.h \ IoAction.cc \ IoAction.h \ + QueryParam.h \ + QueryParams.cc \ + QueryParams.h \ Registration.cc \ Registration.h \ Request.cc \ @@ -789,13 +793,9 @@ StoreIoAction.h \ StoreToCommWriter.cc \ StoreToCommWriter.h \ - QueryParam.h \ - QueryParams.cc \ - QueryParams.h \ - IntParam.cc \ - IntParam.h \ StringParam.cc \ - StringParam.h + StringParam.h \ + forward.h all: all-am diff -u -r -N squid-5.0.5/src/mgr/QueryParams.cc squid-5.0.6/src/mgr/QueryParams.cc --- squid-5.0.5/src/mgr/QueryParams.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mgr/QueryParams.cc 2021-05-10 21:02:34.000000000 +1200 @@ -14,6 +14,10 @@ #include "mgr/IntParam.h" #include "mgr/QueryParams.h" #include "mgr/StringParam.h" +#include "parser/Tokenizer.h" +#include "sbuf/StringConvert.h" + +#include Mgr::QueryParam::Pointer Mgr::QueryParams::get(const String& name) const @@ -65,61 +69,76 @@ return iter; } -bool -Mgr::QueryParams::ParseParam(const String& paramStr, Param& param) +/** + * Parses the value part of a "param=value" URL section. + * Value can be a comma-separated list of integers or an opaque string. + * + * value = *pchar | ( 1*DIGIT *( ',' 1*DIGIT ) ) + * + * \note opaque string may be a list with a non-integer (e.g., "1,2,3,z") + */ +Mgr::QueryParam::Pointer +ParseParamValue(const SBuf &rawValue) +{ + static const CharacterSet comma("comma", ","); + + Parser::Tokenizer tok(rawValue); + std::vector array; + int64_t intVal = 0; + while (tok.int64(intVal, 10, false)) { + Must(intVal >= std::numeric_limits::min()); + Must(intVal <= std::numeric_limits::max()); + array.emplace_back(intVal); + // integer list has comma between values. + // Require at least one potential DIGIT after the skipped ',' + if (tok.remaining().length() > 1) + (void)tok.skipOne(comma); + } + + if (tok.atEnd()) + return new Mgr::IntParam(array); + else + return new Mgr::StringParam(SBufToString(rawValue)); +} + +/** + * Syntax: + * query = [ param *( '&' param ) ] + * param = name '=' value + * name = [a-zA-Z0-9]+ + * value = *pchar | ( 1*DIGIT *( ',' 1*DIGIT ) ) + */ +void +Mgr::QueryParams::Parse(Parser::Tokenizer &tok, QueryParams &aParams) { - bool parsed = false; - regmatch_t pmatch[3]; - regex_t intExpr; - regcomp(&intExpr, "^([a-z][a-z0-9_]*)=([0-9]+((,[0-9]+))*)$", REG_EXTENDED | REG_ICASE); - regex_t stringExpr; - regcomp(&stringExpr, "^([a-z][a-z0-9_]*)=([^&= ]+)$", REG_EXTENDED | REG_ICASE); - if (regexec(&intExpr, paramStr.termedBuf(), 3, pmatch, 0) == 0) { - param.first = paramStr.substr(pmatch[1].rm_so, pmatch[1].rm_eo); - std::vector array; - int n = pmatch[2].rm_so; - for (int i = n; i < pmatch[2].rm_eo; ++i) { - if (paramStr[i] == ',') { - array.push_back(atoi(paramStr.substr(n, i).termedBuf())); - n = i + 1; - } - } - if (n < pmatch[2].rm_eo) - array.push_back(atoi(paramStr.substr(n, pmatch[2].rm_eo).termedBuf())); - param.second = new IntParam(array); - parsed = true; - } else if (regexec(&stringExpr, paramStr.termedBuf(), 3, pmatch, 0) == 0) { - param.first = paramStr.substr(pmatch[1].rm_so, pmatch[1].rm_eo); - param.second = new StringParam(paramStr.substr(pmatch[2].rm_so, pmatch[2].rm_eo)); - parsed = true; - } - regfree(&stringExpr); - regfree(&intExpr); - return parsed; -} - -bool -Mgr::QueryParams::Parse(const String& aParamsStr, QueryParams& aParams) -{ - if (aParamsStr.size() != 0) { - Param param; - size_t n = 0; - size_t len = aParamsStr.size(); - for (size_t i = n; i < len; ++i) { - if (aParamsStr[i] == '&') { - if (!ParseParam(aParamsStr.substr(n, i), param)) - return false; - aParams.params.push_back(param); - n = i + 1; - } - } - if (n < len) { - if (!ParseParam(aParamsStr.substr(n, len), param)) - return false; - aParams.params.push_back(param); - } + static const CharacterSet nameChars = CharacterSet("param-name", "_") + CharacterSet::ALPHA + CharacterSet::DIGIT; + static const CharacterSet valueChars = CharacterSet("param-value", "&= #").complement(); + static const CharacterSet delimChars("param-delim", "&"); + + while (!tok.atEnd()) { + + // TODO: remove '#' processing when AnyP::Uri splits 'query#fragment' properly + // #fragment handled by caller. Do not throw. + if (tok.remaining()[0] == '#') + return; + + if (tok.skipAll(delimChars)) + continue; + + SBuf nameStr; + if (!tok.prefix(nameStr, nameChars)) + throw TextException("invalid query parameter name", Here()); + if (!tok.skip('=')) + throw TextException("missing parameter value", Here()); + + SBuf valueStr; + if (!tok.prefix(valueStr, valueChars)) + throw TextException("missing or malformed parameter value", Here()); + + const auto name = SBufToString(nameStr); + const auto value = ParseParamValue(valueStr); + aParams.params.emplace_back(name, value); } - return true; } Mgr::QueryParam::Pointer @@ -138,4 +157,3 @@ } return NULL; } - diff -u -r -N squid-5.0.5/src/mgr/QueryParams.h squid-5.0.6/src/mgr/QueryParams.h --- squid-5.0.5/src/mgr/QueryParams.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mgr/QueryParams.h 2021-05-10 21:02:34.000000000 +1200 @@ -13,9 +13,11 @@ #include "ipc/forward.h" #include "mgr/QueryParam.h" +#include "parser/forward.h" #include "SquidString.h" -#include + #include +#include namespace Mgr { @@ -32,15 +34,13 @@ void pack(Ipc::TypedMsgHdr& msg) const; ///< store params into msg void unpack(const Ipc::TypedMsgHdr& msg); ///< load params from msg /// parses the query string parameters - static bool Parse(const String& aParamsStr, QueryParams& aParams); + static void Parse(Parser::Tokenizer &, QueryParams &); private: /// find query parameter by name Params::const_iterator find(const String& name) const; /// creates a parameter of the specified type static QueryParam::Pointer CreateParam(QueryParam::Type aType); - /// parses string like "param=value"; returns true if success - static bool ParseParam(const String& paramStr, Param& param); private: Params params; diff -u -r -N squid-5.0.5/src/mgr/Request.cc squid-5.0.6/src/mgr/Request.cc --- squid-5.0.5/src/mgr/Request.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mgr/Request.cc 2021-05-10 21:02:34.000000000 +1200 @@ -16,7 +16,9 @@ #include "mgr/ActionParams.h" #include "mgr/Request.h" -Mgr::Request::Request(int aRequestorId, unsigned int aRequestId, const Comm::ConnectionPointer &aConn, +Mgr::Request::Request(const int aRequestorId, + const Ipc::RequestId aRequestId, + const Comm::ConnectionPointer &aConn, const ActionParams &aParams): Ipc::Request(aRequestorId, aRequestId), conn(aConn), @@ -25,14 +27,7 @@ Must(requestorId > 0); } -Mgr::Request::Request(const Request& request): - Ipc::Request(request.requestorId, request.requestId), - conn(request.conn), params(request.params) -{ -} - -Mgr::Request::Request(const Ipc::TypedMsgHdr& msg): - Ipc::Request(0, 0) +Mgr::Request::Request(const Ipc::TypedMsgHdr &msg) { msg.checkType(Ipc::mtCacheMgrRequest); msg.getPod(requestorId); diff -u -r -N squid-5.0.5/src/mgr/Request.h squid-5.0.6/src/mgr/Request.h --- squid-5.0.5/src/mgr/Request.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mgr/Request.h 2021-05-10 21:02:34.000000000 +1200 @@ -22,7 +22,7 @@ class Request: public Ipc::Request { public: - Request(int aRequestorId, unsigned int aRequestId, const Comm::ConnectionPointer &aConn, + Request(int aRequestorId, Ipc::RequestId, const Comm::ConnectionPointer &aConn, const ActionParams &aParams); explicit Request(const Ipc::TypedMsgHdr& msg); ///< from recvmsg() @@ -30,9 +30,6 @@ virtual void pack(Ipc::TypedMsgHdr& msg) const; virtual Pointer clone() const; -private: - Request(const Request& request); - public: Comm::ConnectionPointer conn; ///< HTTP client connection descriptor diff -u -r -N squid-5.0.5/src/mgr/Response.cc squid-5.0.6/src/mgr/Response.cc --- squid-5.0.5/src/mgr/Response.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mgr/Response.cc 2021-05-10 21:02:34.000000000 +1200 @@ -12,24 +12,19 @@ #include "base/TextException.h" #include "CacheManager.h" #include "ipc/Messages.h" +#include "ipc/RequestId.h" #include "ipc/TypedMsgHdr.h" #include "mgr/ActionCreator.h" #include "mgr/ActionProfile.h" #include "mgr/Response.h" -Mgr::Response::Response(unsigned int aRequestId, Action::Pointer anAction): +Mgr::Response::Response(const Ipc::RequestId aRequestId, const Action::Pointer anAction): Ipc::Response(aRequestId), action(anAction) { Must(!action || action->name()); // if there is an action, it must be named } -Mgr::Response::Response(const Response& response): - Ipc::Response(response.requestId), action(response.action) -{ -} - -Mgr::Response::Response(const Ipc::TypedMsgHdr& msg): - Ipc::Response(0) +Mgr::Response::Response(const Ipc::TypedMsgHdr &msg) { msg.checkType(Ipc::mtCacheMgrResponse); msg.getPod(requestId); diff -u -r -N squid-5.0.5/src/mgr/Response.h squid-5.0.6/src/mgr/Response.h --- squid-5.0.5/src/mgr/Response.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mgr/Response.h 2021-05-10 21:02:34.000000000 +1200 @@ -23,7 +23,8 @@ class Response: public Ipc::Response { public: - Response(unsigned int aRequestId, Action::Pointer anAction = NULL); + /// sender's constructor + Response(Ipc::RequestId, Action::Pointer anAction = nullptr); explicit Response(const Ipc::TypedMsgHdr& msg); ///< from recvmsg() @@ -34,9 +35,6 @@ bool hasAction() const; ///< whether response contain action object const Action& getAction() const; ///< returns action object -private: - Response(const Response& response); - public: Action::Pointer action; ///< action relating to response }; diff -u -r -N squid-5.0.5/src/mk-string-arrays.awk squid-5.0.6/src/mk-string-arrays.awk --- squid-5.0.5/src/mk-string-arrays.awk 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/mk-string-arrays.awk 2021-05-10 21:02:34.000000000 +1200 @@ -74,7 +74,8 @@ END { if (sbuf) print "#include \"sbuf/SBuf.h\"" - print "#include \"" nspath type ".h\"" + if (ifile != "") print "#include \"" ifile "\"" + else print "#include \"" nspath type ".h\"" # if namespace is not empty ?? if (namespace) print "namespace " namespace diff -u -r -N squid-5.0.5/src/multicast.cc squid-5.0.6/src/multicast.cc --- squid-5.0.5/src/multicast.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/multicast.cc 2021-05-10 21:02:34.000000000 +1200 @@ -42,7 +42,7 @@ return; } - for (const auto ip: ia->goodAndBad()) { // TODO: Consider using just good(). + for (const auto &ip: ia->goodAndBad()) { // TODO: Consider using just good(). debugs(7, 9, "Listening for ICP requests on " << ip); if (!ip.isIPv4()) { diff -u -r -N squid-5.0.5/src/Notes.cc squid-5.0.6/src/Notes.cc --- squid-5.0.5/src/Notes.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/Notes.cc 2021-05-10 21:02:34.000000000 +1200 @@ -76,7 +76,7 @@ if (reply) HTTPMSGLOCK(ch.reply); - for (auto v: values) { + for (const auto &v: values) { assert(v->aclList); const auto ret = ch.fastCheck(v->aclList); debugs(93, 5, "Check for header name: " << theKey << ": " << v->value() << @@ -93,7 +93,7 @@ void Note::updateNotePairs(NotePairs::Pointer pairs, const CharacterSet *delimiters, const AccessLogEntryPointer &al) { - for (auto v: values) { + for (const auto &v: values) { const SBuf &formatted = v->format(al); if (!pairs->empty() && v->method() == Value::mhReplace) pairs->remove(theKey); @@ -107,7 +107,7 @@ void Note::dump(StoreEntry *entry, const char *k) { - for (auto v: values) { + for (const auto &v: values) { storeAppendPrintf(entry, "%s %.*s %s", k, key().length(), key().rawContent(), ConfigParser::QuoteString(SBufToString(v->value()))); dump_acl_list(entry, v->aclList); @@ -119,14 +119,14 @@ Note::toString(const char *sep) const { SBuf result; - for (auto val: values) + for (const auto &val: values) result.appendf("%.*s: %.*s%s", key().length(), key().rawContent(), val->value().length(), val->value().rawContent(), sep); return result; } const Notes::Keys & -Notes::BlackList() +Notes::ReservedKeys() { // these keys are used for internal Squid-helper communication static const char *names[] = { @@ -147,12 +147,12 @@ return keys; } -Notes::Notes(const char *aDescr, const Keys *extraBlacklist, bool allowFormatted): +Notes::Notes(const char *aDescr, const Keys *extraReservedKeys, bool allowFormatted): descr(aDescr), formattedValues(allowFormatted) { - if (extraBlacklist) - blacklist = *extraBlacklist; + if (extraReservedKeys) + reservedKeys = *extraReservedKeys; } Note::Pointer @@ -167,7 +167,7 @@ Note::Pointer Notes::find(const SBuf ¬eKey) { - for (auto n: notes) + for (const auto &n: notes) if (n->key() == noteKey) return n; return nullptr; @@ -183,8 +183,8 @@ void Notes::validateKey(const SBuf &key) const { - banReservedKey(key, BlackList()); - banReservedKey(key, blacklist); + banReservedKey(key, ReservedKeys()); + banReservedKey(key, reservedKeys); // TODO: fix code duplication: the same set of specials is produced // by isKeyNameChar(). @@ -247,14 +247,14 @@ void Notes::updateNotePairs(NotePairs::Pointer pairs, const CharacterSet *delimiters, const AccessLogEntry::Pointer &al) { - for (auto n: notes) + for (const auto &n: notes) n->updateNotePairs(pairs, delimiters, al); } void Notes::dump(StoreEntry *entry, const char *key) { - for (auto n: notes) + for (const auto &n: notes) n->dump(entry, key); } @@ -263,7 +263,7 @@ { static SBuf result; result.clear(); - for (auto note: notes) + for (const auto ¬e: notes) result.append(note->toString(sep)); return result.isEmpty() ? nullptr : result.c_str(); } @@ -272,7 +272,7 @@ NotePairs::find(SBuf &resultNote, const char *noteKey, const char *sep) const { resultNote.clear(); - for (auto e: entries) { + for (const auto &e: entries) { if (!e->name().cmp(noteKey)) { if (!resultNote.isEmpty()) resultNote.append(sep); @@ -287,7 +287,7 @@ { static SBuf result; result.clear(); - for (auto e: entries) + for (const auto &e: entries) result.appendf("%.*s: %.*s%s", e->name().length(), e->name().rawContent(), e->value().length(), e->value().rawContent(), sep); return result.isEmpty() ? nullptr : result.c_str(); @@ -296,7 +296,7 @@ const char * NotePairs::findFirst(const char *noteKey) const { - for (auto e: entries) + for (const auto &e: entries) if (!e->name().cmp(noteKey)) return const_cast(e->value()).c_str(); return nullptr; @@ -348,7 +348,7 @@ if (delimiters) { static NotePairs::Entries expandedEntries; expandedEntries.clear(); - for(auto entry: entries) + for (const auto &entry: entries) AppendTokens(expandedEntries, entry->name(), entry->value(), *delimiters); return expandedEntries; } @@ -364,7 +364,7 @@ bool NotePairs::hasPair(const SBuf &key, const SBuf &value) const { - for (auto e: entries) + for (const auto &e: entries) if (e->name() == key && e->value() == value) return true; return false; @@ -373,14 +373,14 @@ void NotePairs::append(const NotePairs *src) { - for (auto e: src->entries) + for (const auto &e: src->entries) entries.push_back(new NotePairs::Entry(e->name(), e->value())); } void NotePairs::appendNewOnly(const NotePairs *src) { - for (auto e: src->entries) { + for (const auto &e: src->entries) { if (!hasPair(e->name(), e->value())) entries.push_back(new NotePairs::Entry(e->name(), e->value())); } @@ -389,7 +389,7 @@ void NotePairs::replaceOrAddOrAppend(const NotePairs *src, const NotePairs::Names &appendables) { - for (const auto e: src->entries) { + for (const auto &e: src->entries) { if (std::find(appendables.begin(), appendables.end(), e->name()) == appendables.end()) remove(e->name()); } @@ -399,7 +399,7 @@ void NotePairs::replaceOrAdd(const NotePairs *src) { - for (auto e: src->entries) + for (const auto &e: src->entries) remove(e->name()); append(src); } diff -u -r -N squid-5.0.5/src/Notes.h squid-5.0.6/src/Notes.h --- squid-5.0.5/src/Notes.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/Notes.h 2021-05-10 21:02:34.000000000 +1200 @@ -114,7 +114,7 @@ typedef NotesList::iterator iterator; ///< iterates over the notes list typedef NotesList::const_iterator const_iterator; ///< iterates over the notes list - explicit Notes(const char *aDescr, const Keys *extraBlacklist = nullptr, bool allowFormatted = true); + explicit Notes(const char *aDescr, const Keys *extraReservedKeys = nullptr, bool allowFormatted = true); Notes() = default; ~Notes() { notes.clear(); } Notes(const Notes&) = delete; @@ -146,7 +146,7 @@ /// Makes sure the given key is not on the given list of banned names. void banReservedKey(const SBuf &key, const Keys &banned) const; - /// Verifies that the key is not blacklisted (fatal error) and + /// Verifies that the key is not reserved (fatal error) and /// does not contain special characters (non-fatal error). void validateKey(const SBuf &key) const; @@ -160,10 +160,10 @@ NotesList notes; ///< The Note::Pointer objects array list const char *descr = nullptr; ///< identifies note source in error messages - Keys blacklist; ///< a list of additional prohibited key names + Keys reservedKeys; ///< a list of additional prohibited key names bool formattedValues = false; ///< whether to expand quoted logformat %codes - static const Notes::Keys &BlackList(); ///< always prohibited key names + static const Notes::Keys &ReservedKeys(); ///< always prohibited key names }; /** diff -u -r -N squid-5.0.5/src/parser/Makefile.am squid-5.0.6/src/parser/Makefile.am --- squid-5.0.5/src/parser/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/parser/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,9 +11,9 @@ noinst_LTLIBRARIES = libparser.la libparser_la_SOURCES = \ - BinaryTokenizer.h \ BinaryTokenizer.cc \ - forward.h \ + BinaryTokenizer.h \ + Tokenizer.cc \ Tokenizer.h \ - Tokenizer.cc + forward.h diff -u -r -N squid-5.0.5/src/parser/Makefile.in squid-5.0.6/src/parser/Makefile.in --- squid-5.0.5/src/parser/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/parser/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -729,11 +729,11 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libparser.la libparser_la_SOURCES = \ - BinaryTokenizer.h \ BinaryTokenizer.cc \ - forward.h \ + BinaryTokenizer.h \ + Tokenizer.cc \ Tokenizer.h \ - Tokenizer.cc + forward.h all: all-am diff -u -r -N squid-5.0.5/src/Pipeline.cc squid-5.0.6/src/Pipeline.cc --- squid-5.0.5/src/Pipeline.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/Pipeline.cc 2021-05-10 21:02:34.000000000 +1200 @@ -49,18 +49,6 @@ } void -Pipeline::terminateAll(int xerrno) -{ - while (!requests.empty()) { - Http::StreamPointer context = requests.front(); - debugs(33, 3, "Pipeline " << (void*)this << " notify(" << xerrno << ") " << context); - context->noteIoError(xerrno); - context->finished(); // cleanup and self-deregister - assert(context != requests.front()); - } -} - -void Pipeline::popMe(const Http::StreamPointer &which) { if (requests.empty()) diff -u -r -N squid-5.0.5/src/Pipeline.h squid-5.0.6/src/Pipeline.h --- squid-5.0.5/src/Pipeline.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/Pipeline.h 2021-05-10 21:02:34.000000000 +1200 @@ -55,9 +55,6 @@ /// whether there are none or any requests currently pipelined bool empty() const {return requests.empty();} - /// tell everybody about the err, and abort all waiting requests - void terminateAll(const int xerrno); - /// deregister the front request from the pipeline void popMe(const Http::StreamPointer &); diff -u -r -N squid-5.0.5/src/proxyp/Makefile.am squid-5.0.6/src/proxyp/Makefile.am --- squid-5.0.5/src/proxyp/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/proxyp/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,11 +11,11 @@ noinst_LTLIBRARIES = libproxyp.la libproxyp_la_SOURCES = \ - forward.h \ - Elements.h \ Elements.cc \ + Elements.h \ Header.cc \ Header.h \ Parser.cc \ - Parser.h + Parser.h \ + forward.h diff -u -r -N squid-5.0.5/src/proxyp/Makefile.in squid-5.0.6/src/proxyp/Makefile.in --- squid-5.0.5/src/proxyp/Makefile.in 2021-02-08 13:40:47.000000000 +1300 +++ squid-5.0.6/src/proxyp/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -729,13 +729,13 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libproxyp.la libproxyp_la_SOURCES = \ - forward.h \ - Elements.h \ Elements.cc \ + Elements.h \ Header.cc \ Header.h \ Parser.cc \ - Parser.h + Parser.h \ + forward.h all: all-am diff -u -r -N squid-5.0.5/src/proxyp/Parser.cc squid-5.0.6/src/proxyp/Parser.cc --- squid-5.0.5/src/proxyp/Parser.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/proxyp/Parser.cc 2021-05-10 21:02:34.000000000 +1200 @@ -15,6 +15,7 @@ #include "sbuf/Stream.h" #include +#include #if HAVE_SYS_SOCKET_H #include diff -u -r -N squid-5.0.5/src/repl/Makefile.am squid-5.0.6/src/repl/Makefile.am --- squid-5.0.5/src/repl/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/repl/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -16,7 +16,10 @@ noinst_LIBRARIES = $(REPL_LIBS) liblru_a_SOURCES = lru/store_repl_lru.cc -libheap_a_SOURCES = heap/store_heap_replacement.h heap/store_heap_replacement.cc heap/store_repl_heap.cc +libheap_a_SOURCES = \ + heap/store_heap_replacement.cc \ + heap/store_heap_replacement.h \ + heap/store_repl_heap.cc ## Until such time as we have a makefile in src/repl/heap etc. diff -u -r -N squid-5.0.5/src/repl/Makefile.in squid-5.0.6/src/repl/Makefile.in --- squid-5.0.5/src/repl/Makefile.in 2021-02-08 13:40:48.000000000 +1300 +++ squid-5.0.6/src/repl/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -744,7 +744,11 @@ EXTRA_LIBRARIES = liblru.a libheap.a noinst_LIBRARIES = $(REPL_LIBS) liblru_a_SOURCES = lru/store_repl_lru.cc -libheap_a_SOURCES = heap/store_heap_replacement.h heap/store_heap_replacement.cc heap/store_repl_heap.cc +libheap_a_SOURCES = \ + heap/store_heap_replacement.cc \ + heap/store_heap_replacement.h \ + heap/store_repl_heap.cc + all: all-am .SUFFIXES: diff -u -r -N squid-5.0.5/src/sbuf/Makefile.am squid-5.0.6/src/sbuf/Makefile.am --- squid-5.0.5/src/sbuf/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/sbuf/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -15,7 +15,6 @@ Algorithms.h \ DetailedStats.cc \ DetailedStats.h \ - forward.h \ List.cc \ List.h \ MemBlob.cc \ @@ -24,4 +23,5 @@ SBuf.h \ Stats.cc \ Stats.h \ - Stream.h + Stream.h \ + forward.h diff -u -r -N squid-5.0.5/src/sbuf/Makefile.in squid-5.0.6/src/sbuf/Makefile.in --- squid-5.0.5/src/sbuf/Makefile.in 2021-02-08 13:40:48.000000000 +1300 +++ squid-5.0.6/src/sbuf/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -736,7 +736,6 @@ Algorithms.h \ DetailedStats.cc \ DetailedStats.h \ - forward.h \ List.cc \ List.h \ MemBlob.cc \ @@ -745,7 +744,8 @@ SBuf.h \ Stats.cc \ Stats.h \ - Stream.h + Stream.h \ + forward.h all: all-am diff -u -r -N squid-5.0.5/src/sbuf/SBuf.cc squid-5.0.6/src/sbuf/SBuf.cc --- squid-5.0.5/src/sbuf/SBuf.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/sbuf/SBuf.cc 2021-05-10 21:02:34.000000000 +1200 @@ -148,7 +148,7 @@ debugs(24, 8, id << " finish appending " << actualSize << " bytes"); size_type newSize = length() + actualSize; - Must2(newSize <= min(maxSize,store_->capacity-off_), "raw append overflow"); + Must3(newSize <= min(maxSize, store_->capacity-off_), "raw append fits", Here()); len_ = newSize; store_->size = off_ + newSize; } @@ -258,7 +258,7 @@ va_copy(ap, vargs); sz = vsnprintf(space, spaceSize(), fmt, ap); va_end(ap); - Must2(sz >= 0, "vsnprintf() output error"); + Must3(sz >= 0, "vsnprintf() succeeds", Here()); /* check for possible overflow */ /* snprintf on Linux returns -1 on output errors, or the size @@ -270,7 +270,7 @@ requiredSpaceEstimate = sz*2; // TODO: tune heuristics space = rawSpace(requiredSpaceEstimate); sz = vsnprintf(space, spaceSize(), fmt, vargs); - Must2(sz >= 0, "vsnprintf() output error despite increased buffer space"); + Must3(sz >= 0, "vsnprintf() succeeds (with increased buffer space)", Here()); } // data was appended, update internal state diff -u -r -N squid-5.0.5/src/security/cert_validators/fake/security_fake_certverify.8 squid-5.0.6/src/security/cert_validators/fake/security_fake_certverify.8 --- squid-5.0.5/src/security/cert_validators/fake/security_fake_certverify.8 2021-02-08 13:46:40.000000000 +1300 +++ squid-5.0.6/src/security/cert_validators/fake/security_fake_certverify.8 2021-05-10 23:02:25.000000000 +1200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "SECURITY_FAKE_CERTVERIFY 8" -.TH SECURITY_FAKE_CERTVERIFY 8 "2021-02-08" "perl v5.32.0" "User Contributed Perl Documentation" +.TH SECURITY_FAKE_CERTVERIFY 8 "2021-05-10" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -u -r -N squid-5.0.5/src/security/ErrorDetail.cc squid-5.0.6/src/security/ErrorDetail.cc --- squid-5.0.5/src/security/ErrorDetail.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/security/ErrorDetail.cc 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,744 @@ +/* + * Copyright (C) 1996-2021 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +#include "squid.h" +#include "error/SysErrorDetail.h" +#include "html_quote.h" +#include "sbuf/SBuf.h" +#include "sbuf/Stream.h" +#include "security/ErrorDetail.h" +#include "security/forward.h" +#include "security/Io.h" +#include "util.h" + +#if USE_OPENSSL +#include "ssl/ErrorDetailManager.h" +#elif USE_GNUTLS +#if HAVE_GNUTLS_GNUTLS_H +#include +#endif +#endif +#include + +namespace Security { + +// we use std::map to optimize search; TODO: Use std::unordered_map instead? +typedef std::map ErrorCodeNames; +static const ErrorCodeNames TheErrorCodeNames = { + { SQUID_TLS_ERR_ACCEPT, + "SQUID_TLS_ERR_ACCEPT" + }, + { SQUID_TLS_ERR_CONNECT, + "SQUID_TLS_ERR_CONNECT" + }, + { SQUID_X509_V_ERR_INFINITE_VALIDATION, + "SQUID_X509_V_ERR_INFINITE_VALIDATION" + }, + { SQUID_X509_V_ERR_CERT_CHANGE, + "SQUID_X509_V_ERR_CERT_CHANGE" + }, + { SQUID_X509_V_ERR_DOMAIN_MISMATCH, + "SQUID_X509_V_ERR_DOMAIN_MISMATCH" + }, +#if USE_OPENSSL + { X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT, + "X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT" + }, + { X509_V_ERR_UNABLE_TO_GET_CRL, + "X509_V_ERR_UNABLE_TO_GET_CRL" + }, + { X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE, + "X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE" + }, + { X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE, + "X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE" + }, + { X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY, + "X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY" + }, + { X509_V_ERR_CERT_SIGNATURE_FAILURE, + "X509_V_ERR_CERT_SIGNATURE_FAILURE" + }, + { X509_V_ERR_CRL_SIGNATURE_FAILURE, + "X509_V_ERR_CRL_SIGNATURE_FAILURE" + }, + { X509_V_ERR_CERT_NOT_YET_VALID, + "X509_V_ERR_CERT_NOT_YET_VALID" + }, + { X509_V_ERR_CERT_HAS_EXPIRED, + "X509_V_ERR_CERT_HAS_EXPIRED" + }, + { X509_V_ERR_CRL_NOT_YET_VALID, + "X509_V_ERR_CRL_NOT_YET_VALID" + }, + { X509_V_ERR_CRL_HAS_EXPIRED, + "X509_V_ERR_CRL_HAS_EXPIRED" + }, + { X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD, + "X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD" + }, + { X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD, + "X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD" + }, + { X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD, + "X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD" + }, + { X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD, + "X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD" + }, + { X509_V_ERR_OUT_OF_MEM, + "X509_V_ERR_OUT_OF_MEM" + }, + { X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT, + "X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT" + }, + { X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN, + "X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN" + }, + { X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY, + "X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY" + }, + { X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE, + "X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE" + }, + { X509_V_ERR_CERT_CHAIN_TOO_LONG, + "X509_V_ERR_CERT_CHAIN_TOO_LONG" + }, + { X509_V_ERR_CERT_REVOKED, + "X509_V_ERR_CERT_REVOKED" + }, + { X509_V_ERR_INVALID_CA, + "X509_V_ERR_INVALID_CA" + }, + { X509_V_ERR_PATH_LENGTH_EXCEEDED, + "X509_V_ERR_PATH_LENGTH_EXCEEDED" + }, + { X509_V_ERR_INVALID_PURPOSE, + "X509_V_ERR_INVALID_PURPOSE" + }, + { X509_V_ERR_CERT_UNTRUSTED, + "X509_V_ERR_CERT_UNTRUSTED" + }, + { X509_V_ERR_CERT_REJECTED, + "X509_V_ERR_CERT_REJECTED" + }, + { X509_V_ERR_SUBJECT_ISSUER_MISMATCH, + "X509_V_ERR_SUBJECT_ISSUER_MISMATCH" + }, + { X509_V_ERR_AKID_SKID_MISMATCH, + "X509_V_ERR_AKID_SKID_MISMATCH" + }, + { X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH, + "X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH" + }, + { X509_V_ERR_KEYUSAGE_NO_CERTSIGN, + "X509_V_ERR_KEYUSAGE_NO_CERTSIGN" + }, +#if defined(X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER) + { + X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER, // 33 + "X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER" + }, +#endif +#if defined(X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION) + { + X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION, // 34 + "X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION" + }, +#endif +#if defined(X509_V_ERR_KEYUSAGE_NO_CRL_SIGN) + { + X509_V_ERR_KEYUSAGE_NO_CRL_SIGN, // 35 + "X509_V_ERR_KEYUSAGE_NO_CRL_SIGN" + }, +#endif +#if defined(X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION) + { + X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION, // 36 + "X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION" + }, +#endif +#if defined(X509_V_ERR_INVALID_NON_CA) + { + X509_V_ERR_INVALID_NON_CA, // 37 + "X509_V_ERR_INVALID_NON_CA" + }, +#endif +#if defined(X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED) + { + X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED, // 38 + "X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED" + }, +#endif +#if defined(X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE) + { + X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE, // 39 + "X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE" + }, +#endif +#if defined(X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED) + { + X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED, // 40 + "X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED" + }, +#endif +#if defined(X509_V_ERR_INVALID_EXTENSION) + { + X509_V_ERR_INVALID_EXTENSION, // 41 + "X509_V_ERR_INVALID_EXTENSION" + }, +#endif +#if defined(X509_V_ERR_INVALID_POLICY_EXTENSION) + { + X509_V_ERR_INVALID_POLICY_EXTENSION, // 42 + "X509_V_ERR_INVALID_POLICY_EXTENSION" + }, +#endif +#if defined(X509_V_ERR_NO_EXPLICIT_POLICY) + { + X509_V_ERR_NO_EXPLICIT_POLICY, // 43 + "X509_V_ERR_NO_EXPLICIT_POLICY" + }, +#endif +#if defined(X509_V_ERR_DIFFERENT_CRL_SCOPE) + { + X509_V_ERR_DIFFERENT_CRL_SCOPE, // 44 + "X509_V_ERR_DIFFERENT_CRL_SCOPE" + }, +#endif +#if defined(X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE) + { + X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE, // 45 + "X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE" + }, +#endif +#if defined(X509_V_ERR_UNNESTED_RESOURCE) + { + X509_V_ERR_UNNESTED_RESOURCE, // 46 + "X509_V_ERR_UNNESTED_RESOURCE" + }, +#endif +#if defined(X509_V_ERR_PERMITTED_VIOLATION) + { + X509_V_ERR_PERMITTED_VIOLATION, // 47 + "X509_V_ERR_PERMITTED_VIOLATION" + }, +#endif +#if defined(X509_V_ERR_EXCLUDED_VIOLATION) + { + X509_V_ERR_EXCLUDED_VIOLATION, // 48 + "X509_V_ERR_EXCLUDED_VIOLATION" + }, +#endif +#if defined(X509_V_ERR_SUBTREE_MINMAX) + { + X509_V_ERR_SUBTREE_MINMAX, // 49 + "X509_V_ERR_SUBTREE_MINMAX" + }, +#endif + { X509_V_ERR_APPLICATION_VERIFICATION, // 50 + "X509_V_ERR_APPLICATION_VERIFICATION" + }, +#if defined(X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE) + { + X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE, // 51 + "X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE" + }, +#endif +#if defined(X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX) + { + X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX, // 52 + "X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX" + }, +#endif +#if defined(X509_V_ERR_UNSUPPORTED_NAME_SYNTAX) + { + X509_V_ERR_UNSUPPORTED_NAME_SYNTAX, // 53 + "X509_V_ERR_UNSUPPORTED_NAME_SYNTAX" + }, +#endif +#if defined(X509_V_ERR_CRL_PATH_VALIDATION_ERROR) + { + X509_V_ERR_CRL_PATH_VALIDATION_ERROR, // 54 + "X509_V_ERR_CRL_PATH_VALIDATION_ERROR" + }, +#endif +#if defined(X509_V_ERR_PATH_LOOP) + { + X509_V_ERR_PATH_LOOP, // 55 + "X509_V_ERR_PATH_LOOP" + }, +#endif +#if defined(X509_V_ERR_SUITE_B_INVALID_VERSION) + { + X509_V_ERR_SUITE_B_INVALID_VERSION, // 56 + "X509_V_ERR_SUITE_B_INVALID_VERSION" + }, +#endif +#if defined(X509_V_ERR_SUITE_B_INVALID_ALGORITHM) + { + X509_V_ERR_SUITE_B_INVALID_ALGORITHM, // 57 + "X509_V_ERR_SUITE_B_INVALID_ALGORITHM" + }, +#endif +#if defined(X509_V_ERR_SUITE_B_INVALID_CURVE) + { + X509_V_ERR_SUITE_B_INVALID_CURVE, // 58 + "X509_V_ERR_SUITE_B_INVALID_CURVE" + }, +#endif +#if defined(X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM) + { + X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM, // 59 + "X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM" + }, +#endif +#if defined(X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED) + { + X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED, // 60 + "X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED" + }, +#endif +#if defined(X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256) + { + X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256, // 61 + "X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256" + }, +#endif +#if defined(X509_V_ERR_HOSTNAME_MISMATCH) + { + X509_V_ERR_HOSTNAME_MISMATCH, // 62 + "X509_V_ERR_HOSTNAME_MISMATCH" + }, +#endif +#if defined(X509_V_ERR_EMAIL_MISMATCH) + { + X509_V_ERR_EMAIL_MISMATCH, // 63 + "X509_V_ERR_EMAIL_MISMATCH" + }, +#endif +#if defined(X509_V_ERR_IP_ADDRESS_MISMATCH) + { + X509_V_ERR_IP_ADDRESS_MISMATCH, // 64 + "X509_V_ERR_IP_ADDRESS_MISMATCH" + }, +#endif +#if defined(X509_V_ERR_DANE_NO_MATCH) + { + X509_V_ERR_DANE_NO_MATCH, // 65 + "X509_V_ERR_DANE_NO_MATCH" + }, +#endif +#if defined(X509_V_ERR_EE_KEY_TOO_SMALL) + { + X509_V_ERR_EE_KEY_TOO_SMALL, // 66 + "X509_V_ERR_EE_KEY_TOO_SMALL" + }, +#endif +#if defined(X509_V_ERR_CA_KEY_TOO_SMALL) + { + X509_V_ERR_CA_KEY_TOO_SMALL, // 67 + "X509_V_ERR_CA_KEY_TOO_SMALL" + }, +#endif +#if defined(X509_V_ERR_CA_MD_TOO_WEAK) + { + X509_V_ERR_CA_MD_TOO_WEAK, // 68 + "X509_V_ERR_CA_MD_TOO_WEAK" + }, +#endif +#if defined(X509_V_ERR_INVALID_CALL) + { + X509_V_ERR_INVALID_CALL, // 69 + "X509_V_ERR_INVALID_CALL" + }, +#endif +#if defined(X509_V_ERR_STORE_LOOKUP) + { + X509_V_ERR_STORE_LOOKUP, // 70 + "X509_V_ERR_STORE_LOOKUP" + }, +#endif +#if defined(X509_V_ERR_NO_VALID_SCTS) + { + X509_V_ERR_NO_VALID_SCTS, // 71 + "X509_V_ERR_NO_VALID_SCTS" + }, +#endif +#if defined(X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION) + { + X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION, // 72 + "X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION" + }, +#endif +#if defined(X509_V_ERR_OCSP_VERIFY_NEEDED) + { + X509_V_ERR_OCSP_VERIFY_NEEDED, // 73 + "X509_V_ERR_OCSP_VERIFY_NEEDED" + }, +#endif +#if defined(X509_V_ERR_OCSP_VERIFY_FAILED) + { + X509_V_ERR_OCSP_VERIFY_FAILED, // 74 + "X509_V_ERR_OCSP_VERIFY_FAILED" + }, +#endif +#if defined(X509_V_ERR_OCSP_CERT_UNKNOWN) + { + X509_V_ERR_OCSP_CERT_UNKNOWN, // 75 + "X509_V_ERR_OCSP_CERT_UNKNOWN" + }, +#endif + { + SSL_ERROR_NONE, + "SSL_ERROR_NONE" + }, +#endif // USE_OPENSSL +}; + +} // namespace Security + +Security::ErrorCode +Security::ErrorCodeFromName(const char *name) +{ + static auto TheCmp = [](const char *a, const char *b) {return strcmp(a, b) < 0;}; + static std::map TheErrorCodeByNameIndx(TheCmp); + if (TheErrorCodeByNameIndx.empty()) { + for (const auto &i: TheErrorCodeNames) + TheErrorCodeByNameIndx.insert(std::make_pair(i.second, i.first)); + + // redirector to support legacy error translations + TheErrorCodeByNameIndx.insert(std::make_pair("SQUID_ERR_SSL_HANDSHAKE", SQUID_TLS_ERR_CONNECT)); + } + + const auto it = TheErrorCodeByNameIndx.find(name); + if (it != TheErrorCodeByNameIndx.end()) + return it->second; + + return 0; +} + +const char * +Security::ErrorNameFromCode(const ErrorCode err, const bool prefixRawCode) +{ + const auto it = TheErrorCodeNames.find(err); + if (it != TheErrorCodeNames.end()) + return it->second; + + static char tmpBuffer[128]; + snprintf(tmpBuffer, sizeof(tmpBuffer), "%s%d", + (prefixRawCode ? "SSL_ERR=" : ""), static_cast(err)); + return tmpBuffer; +} + +/* Security::ErrorDetail */ + +/// helper constructor implementing the logic shared by the two public ones +Security::ErrorDetail::ErrorDetail(const ErrorCode err, const int aSysErrorNo): + error_no(err), + // We could restrict errno(3) collection to cases where the TLS library + // explicitly talks about the errno being set, but correctly detecting those + // cases is difficult. We simplify in hope that all other cases will either + // have a useful errno or a zero errno. + sysErrorNo(aSysErrorNo) +{ +#if USE_OPENSSL + /// Extract and remember errors stored internally by the TLS library. + if ((lib_error_no = ERR_get_error())) { + debugs(83, 7, "got " << asHex(lib_error_no)); + // more errors may be stacked + // TODO: Save/detail all stacked errors by always flushing stale ones. + ForgetErrors(); + } +#else + // other libraries return errors explicitly instead of auto-storing them +#endif +} + +Security::ErrorDetail::ErrorDetail(const ErrorCode anErrorCode, const CertPointer &cert, const CertPointer &broken, const char *aReason): + ErrorDetail(anErrorCode, 0) +{ + errReason = aReason; + peer_cert = cert; + broken_cert = broken ? broken : cert; +} + +#if USE_OPENSSL +Security::ErrorDetail::ErrorDetail(const ErrorCode anErrorCode, const int anIoErrorNo, const int aSysErrorNo): + ErrorDetail(anErrorCode, aSysErrorNo) +{ + ioErrorNo = anIoErrorNo; +} + +#elif USE_GNUTLS +Security::ErrorDetail::ErrorDetail(const ErrorCode anErrorCode, const LibErrorCode aLibErrorNo, const int aSysErrorNo): + ErrorDetail(anErrorCode, aSysErrorNo) +{ + lib_error_no = aLibErrorNo; +} +#endif + +void +Security::ErrorDetail::setPeerCertificate(const CertPointer &cert) +{ + assert(cert); + assert(!peer_cert); + assert(!broken_cert); + peer_cert = cert; + // unlike the constructor, the supplied certificate is not a broken_cert +} + +SBuf +Security::ErrorDetail::brief() const +{ + SBuf buf(err_code()); // TODO: Upgrade err_code()/etc. to return SBuf. + + if (lib_error_no) { +#if USE_OPENSSL + // TODO: Log ERR_error_string_n() instead, despite length, whitespace? + // Example: `error:1408F09C:SSL routines:ssl3_get_record:http request`. + buf.append(ToSBuf("+TLS_LIB_ERR=", std::hex, std::uppercase, lib_error_no)); +#elif USE_GNUTLS + buf.append(ToSBuf("+", gnutls_strerror_name(lib_error_no))); +#endif + } + +#if USE_OPENSSL + // TODO: Consider logging long but human-friendly names (e.g., + // SSL_ERROR_SYSCALL). + if (ioErrorNo) + buf.append(ToSBuf("+TLS_IO_ERR=", ioErrorNo)); +#endif + + if (sysErrorNo) { + buf.append('+'); + buf.append(SysErrorDetail::Brief(sysErrorNo)); + } + + if (broken_cert) + buf.append("+broken_cert"); + + return buf; +} + +SBuf +Security::ErrorDetail::verbose(const HttpRequestPointer &request) const +{ + char const *format = nullptr; +#if USE_OPENSSL + if (Ssl::ErrorDetailsManager::GetInstance().getErrorDetail(error_no, request, detailEntry)) + format = detailEntry.detail.termedBuf(); +#endif + if (!format) + format = "SSL handshake error (%err_name)"; + + SBuf errDetailStr; + assert(format); + auto remainder = format; + while (auto p = strchr(remainder, '%')) { + errDetailStr.append(remainder, p - remainder); + char const *converted = nullptr; + const auto formattingCodeLen = convert(++p, &converted); + if (formattingCodeLen) + errDetailStr.append(converted); + else + errDetailStr.append("%"); + remainder = p + formattingCodeLen; + } + errDetailStr.append(remainder, strlen(remainder)); + return errDetailStr; +} + +/// textual representation of the subject of the broken certificate +const char * +Security::ErrorDetail::subject() const +{ +#if USE_OPENSSL + if (broken_cert.get()) { + static char tmpBuffer[256]; // A temporary buffer + if (X509_NAME_oneline(X509_get_subject_name(broken_cert.get()), tmpBuffer, sizeof(tmpBuffer))) { + // quote to avoid possible html code injection through + // certificate subject + return html_quote(tmpBuffer); + } + } +#endif // USE_OPENSSL + return "[Not available]"; +} + +#if USE_OPENSSL +/// helper function to collect CNs using Ssl::matchX509CommonNames() +static int +copy_cn(void *check_data, ASN1_STRING *cn_data) +{ + const auto str = static_cast(check_data); + if (!str) // no data? abort + return 0; + if (cn_data && cn_data->length) { + if (str->size() > 0) + str->append(", "); + str->append(reinterpret_cast(cn_data->data), cn_data->length); + } + return 1; +} +#endif // USE_OPENSSL + +/// a list of the broken certificates CN and alternate names +const char * +Security::ErrorDetail::cn() const +{ +#if USE_OPENSSL + if (broken_cert.get()) { + static String tmpStr; + tmpStr.clean(); + Ssl::matchX509CommonNames(broken_cert.get(), &tmpStr, copy_cn); + if (tmpStr.size()) { + // quote to avoid possible HTML code injection through + // certificate subject + return html_quote(tmpStr.termedBuf()); + } + } +#endif // USE_OPENSSL + return "[Not available]"; +} + +/// the issuer of the broken certificate +const char * +Security::ErrorDetail::ca_name() const +{ +#if USE_OPENSSL + if (broken_cert.get()) { + static char tmpBuffer[256]; // A temporary buffer + if (X509_NAME_oneline(X509_get_issuer_name(broken_cert.get()), tmpBuffer, sizeof(tmpBuffer))) { + // quote to avoid possible html code injection through + // certificate issuer subject + return html_quote(tmpBuffer); + } + } +#endif // USE_OPENSSL + return "[Not available]"; +} + +/// textual representation of the "not before" field of the broken certificate +const char * +Security::ErrorDetail::notbefore() const +{ +#if USE_OPENSSL + if (broken_cert.get()) { + if (const auto tm = X509_getm_notBefore(broken_cert.get())) { + static char tmpBuffer[256]; // A temporary buffer + Ssl::asn1timeToString(tm, tmpBuffer, sizeof(tmpBuffer)); + return tmpBuffer; + } + } +#endif // USE_OPENSSL + return "[Not available]"; +} + +/// textual representation of the "not after" field of the broken certificate +const char * +Security::ErrorDetail::notafter() const +{ +#if USE_OPENSSL + if (broken_cert.get()) { + if (const auto tm = X509_getm_notAfter(broken_cert.get())) { + static char tmpBuffer[256]; // A temporary buffer + Ssl::asn1timeToString(tm, tmpBuffer, sizeof(tmpBuffer)); + return tmpBuffer; + } + } +#endif // USE_OPENSSL + return "[Not available]"; +} + +/// textual representation of error_no +const char * +Security::ErrorDetail::err_code() const +{ +#if USE_OPENSSL + // try detailEntry first because it is faster + if (const char *err = detailEntry.name.termedBuf()) + return err; +#endif + + return ErrorNameFromCode(error_no); +} + +/// short description of error_no +const char * +Security::ErrorDetail::err_descr() const +{ + if (!error_no) + return "[No Error]"; +#if USE_OPENSSL + if (const char *err = detailEntry.descr.termedBuf()) + return err; +#endif + return "[Not available]"; +} + +/// textual representation of lib_error_no +const char * +Security::ErrorDetail::err_lib_error() const +{ + if (errReason.size() > 0) + return errReason.termedBuf(); + else if (lib_error_no) + return ErrorString(lib_error_no); + else + return "[No Error]"; + return "[Not available]"; +} + +/** + * Converts the code to a string value. Supported formatting codes are: + * + * Error meta information: + * %err_name: The name of a high-level SSL error (e.g., X509_V_ERR_*) + * %ssl_error_descr: A short description of the SSL error + * %ssl_lib_error: human-readable low-level error string by ErrorString() + * + * Certificate information extracted from broken (not necessarily peer!) cert + * %ssl_cn: The comma-separated list of common and alternate names + * %ssl_subject: The certificate subject + * %ssl_ca_name: The certificate issuer name + * %ssl_notbefore: The certificate "not before" field + * %ssl_notafter: The certificate "not after" field + * + \returns the length of the code (the number of characters to be replaced by value) + \retval 0 for unsupported codes +*/ +size_t +Security::ErrorDetail::convert(const char *code, const char **value) const +{ + typedef const char *(ErrorDetail::*PartDescriber)() const; + static const std::map PartDescriberByCode = { + {"ssl_subject", &ErrorDetail::subject}, + {"ssl_ca_name", &ErrorDetail::ca_name}, + {"ssl_cn", &ErrorDetail::cn}, + {"ssl_notbefore", &ErrorDetail::notbefore}, + {"ssl_notafter", &ErrorDetail::notafter}, + {"err_name", &ErrorDetail::err_code}, + {"ssl_error_descr", &ErrorDetail::err_descr}, + {"ssl_lib_error", &ErrorDetail::err_lib_error} + }; + + for (const auto &pair: PartDescriberByCode) { + const auto len = strlen(pair.first); + if (strncmp(code, pair.first, len) == 0) { + const auto method = pair.second; + *value = (this->*method)(); + return len; + } + } + + // TODO: Support logformat %codes. + *value = ""; // unused with zero return + return 0; +} + diff -u -r -N squid-5.0.5/src/security/ErrorDetail.h squid-5.0.6/src/security/ErrorDetail.h --- squid-5.0.5/src/security/ErrorDetail.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/security/ErrorDetail.h 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,132 @@ +/* + * Copyright (C) 1996-2021 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +#ifndef SQUID_SRC_SECURITY_DETAIL_H +#define SQUID_SRC_SECURITY_DETAIL_H + +#include "base/RefCount.h" +#include "error/Detail.h" +#include "http/forward.h" +#include "security/forward.h" +#include "SquidString.h" + +#if USE_OPENSSL +#include "ssl/ErrorDetailManager.h" +#endif + +namespace Security { + +/// Details a TLS-related error. Two kinds of errors can be detailed: +/// * certificate validation errors (including built-in and helper-driven) and +/// * TLS logic and I/O errors (detected by Squid or the TLS library). +/// +/// The following details may be available (only the first one is required): +/// * for all errors: problem classification (\see ErrorCode) +/// * for all errors: peer certificate +/// * for certificate validation errors: the broken certificate +/// * for certificate validation errors: validation failure reason +/// * for non-validation errors: TLS library-reported error(s) +/// * for non-validation errors: system call errno(3) +class ErrorDetail: public ::ErrorDetail +{ + MEMPROXY_CLASS(Security::ErrorDetail); + +public: + typedef ErrorDetailPointer Pointer; + + /// Details a server-side certificate verification failure. + /// If `broken` is nil, then the broken certificate is the peer certificate. + ErrorDetail(ErrorCode err_no, const CertPointer &peer, const CertPointer &broken, const char *aReason = NULL); + +#if USE_OPENSSL + /// Details (or starts detailing) a non-validation failure. + /// \param anIoErrorNo TLS I/O function outcome; \see ErrorDetail::ioErrorNo + /// \param aSysErrorNo saved errno(3); \see ErrorDetail::sysErrorNo + ErrorDetail(ErrorCode anErrorCode, int anIoErrorNo, int aSysErrorNo); +#elif USE_GNUTLS + /// Details (or starts detailing) a non-validation failure. + /// \param anLibErrorNo TLS function outcome; \see ErrorDetail::lib_error_no + /// \param aSysErrorNo saved errno(3); \see ErrorDetail::sysErrorNo + ErrorDetail(ErrorCode anErrorCode, LibErrorCode aLibErrorNo, int aSysErrorNo); +#endif + + /* ErrorDetail API */ + virtual SBuf brief() const; + virtual SBuf verbose(const HttpRequestPointer &) const; + + /// \returns error category; \see ErrorCode + ErrorCode errorNo() const { return error_no; } + + /// \returns the previously saved errno(3) or zero + int sysError() const { return sysErrorNo; } + + /* Certificate manipulation API. TODO: Add GnuTLS implementations, users. */ + + /// the peer certificate (or nil) + Certificate *peerCert() { return peer_cert.get(); } + + /// peer or intermediate certificate that failed validation (or nil) + Certificate *brokenCert() {return broken_cert.get(); } + + /// remember the SSL certificate of our peer; requires nil peerCert() + /// unlike the cert-setting constructor, does not assume the cert is bad + void setPeerCertificate(const CertPointer &); + +private: + ErrorDetail(ErrorCode err, int aSysErrorNo); + + /* methods for formatting error details using admin-configurable %codes */ + const char *subject() const; + const char *ca_name() const; + const char *cn() const; + const char *notbefore() const; + const char *notafter() const; + const char *err_code() const; + const char *err_descr() const; + const char *err_lib_error() const; + size_t convert(const char *code, const char **value) const; + + CertPointer peer_cert; ///< A pointer to the peer certificate + CertPointer broken_cert; ///< A pointer to the broken certificate (peer or intermediate) + + /// Squid-discovered error, validation error, or zero; \see ErrorCode + ErrorCode error_no = 0; + + /// TLS library-reported non-validation error or zero; \see LibErrorCode + LibErrorCode lib_error_no = 0; + + /// errno(3); system call failure code or zero + int sysErrorNo = 0; + +#if USE_OPENSSL + /// OpenSSL-specific (first-level or intermediate) TLS I/O operation result + /// reported by SSL_get_error(3SSL) (e.g., SSL_ERROR_SYSCALL) or zero. + /// Unlike lib_error_no, this error is mostly meant for I/O control and has + /// no OpenSSL-provided human-friendly text representation. + int ioErrorNo = 0; + + using ErrorDetailEntry = Ssl::ErrorDetailEntry; + mutable ErrorDetailEntry detailEntry; +#else + // other TLS libraries do not use custom ErrorDetail members +#endif + + String errReason; ///< a custom reason for the error +}; + +/// \returns ErrorCode with a given name (or zero) +ErrorCode ErrorCodeFromName(const char *name); + +/// \returns string representation of ErrorCode, including raw X.509 error codes +/// \param prefixRawCode whether to prefix raw codes with "SSL_ERR=" +const char *ErrorNameFromCode(ErrorCode err, bool prefixRawCode = false); + +} + +#endif + diff -u -r -N squid-5.0.5/src/security/forward.h squid-5.0.6/src/security/forward.h --- squid-5.0.5/src/security/forward.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/security/forward.h 2021-05-10 21:02:34.000000000 +1200 @@ -10,6 +10,7 @@ #define SQUID_SRC_SECURITY_FORWARD_H #include "base/CbDataList.h" +#include "base/forward.h" #include "security/Context.h" #include "security/Session.h" @@ -17,6 +18,7 @@ #include #endif #include +#include #if USE_OPENSSL #include "compat/openssl.h" #if HAVE_OPENSSL_BN_H @@ -60,12 +62,20 @@ typedef CbDataList CertErrors; #if USE_OPENSSL +typedef X509 Certificate; +#elif USE_GNUTLS +typedef struct gnutls_x509_crt_int Certificate; +#else +typedef class {} Certificate; +#endif + +#if USE_OPENSSL CtoCpp1(X509_free, X509 *); typedef Security::LockingPointer > CertPointer; #elif USE_GNUTLS typedef std::shared_ptr CertPointer; #else -typedef std::shared_ptr CertPointer; +typedef std::shared_ptr CertPointer; #endif #if USE_OPENSSL @@ -91,10 +101,26 @@ class EncryptorAnswer; -/// Squid defined error code (<0), an error code returned by X.509 API, or SSL_ERROR_NONE +/// Squid-defined error code (<0), an error code returned by X.509 API, or zero typedef int ErrorCode; -inline const char *ErrorString(const ErrorCode code) { +/// TLS library-reported non-validation error +#if USE_OPENSSL +/// the result of the first ERR_get_error(3SSL) call after a library call; +/// `openssl errstr` expands these numbers into human-friendlier strings like +/// `error:1408F09C:SSL routines:ssl3_get_record:http request` +typedef unsigned long LibErrorCode; +#elif USE_GNUTLS +/// the result of an API function like gnutls_handshake() (e.g., +/// GNUTLS_E_WARNING_ALERT_RECEIVED) +typedef int LibErrorCode; +#else +/// should always be zero and virtually unused +typedef int LibErrorCode; +#endif + +/// converts numeric LibErrorCode into a human-friendlier string +inline const char *ErrorString(const LibErrorCode code) { #if USE_OPENSSL return ERR_error_string(code, nullptr); #elif USE_GNUTLS @@ -127,6 +153,9 @@ } // namespace Io +// TODO: Either move to Security::Io or remove/restrict the Io namespace. +class IoResult; + class KeyData; #if USE_OPENSSL @@ -156,7 +185,29 @@ class ServerOptions; +class ErrorDetail; +typedef RefCount ErrorDetailPointer; + } // namespace Security +/// Squid-specific TLS handling errors (a subset of ErrorCode) +/// These errors either distinguish high-level library calls/contexts or +/// supplement official certificate validation errors to cover special cases. +/// We use negative values, assuming that those official errors are positive. +enum { + SQUID_TLS_ERR_OFFSET = std::numeric_limits::min(), + + /* TLS library calls/contexts other than validation (e.g., I/O) */ + SQUID_TLS_ERR_ACCEPT, ///< failure to accept a connection from a TLS client + SQUID_TLS_ERR_CONNECT, ///< failure to establish a connection with a TLS server + + /* certificate validation problems not covered by official errors */ + SQUID_X509_V_ERR_CERT_CHANGE, + SQUID_X509_V_ERR_DOMAIN_MISMATCH, + SQUID_X509_V_ERR_INFINITE_VALIDATION, + + SQUID_TLS_ERR_END +}; + #endif /* SQUID_SRC_SECURITY_FORWARD_H */ diff -u -r -N squid-5.0.5/src/security/Handshake.cc squid-5.0.6/src/security/Handshake.cc --- squid-5.0.5/src/security/Handshake.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/security/Handshake.cc 2021-05-10 21:02:34.000000000 +1200 @@ -366,11 +366,6 @@ if (Tls1p3orLater(details->tlsSupportedVersion)) done = "ServerHello in v1.3+"; return; - case HandshakeType::hskCertificate: - Must(state < atCertificatesReceived); - parseServerCertificates(message.msg_body); - state = atCertificatesReceived; - return; case HandshakeType::hskServerHelloDone: Must(state < atHelloDoneReceived); // zero-length @@ -664,47 +659,6 @@ return false; // unreached } -/// Creates and returns a certificate by parsing a DER-encoded X509 structure. -/// Throws on failures. -Security::CertPointer -Security::HandshakeParser::ParseCertificate(const SBuf &raw) -{ - Security::CertPointer pCert; -#if USE_OPENSSL - auto x509Start = reinterpret_cast(raw.rawContent()); - auto x509Pos = x509Start; - X509 *x509 = d2i_X509(nullptr, &x509Pos, raw.length()); - pCert.resetWithoutLocking(x509); - Must(x509); // successfully parsed - Must(x509Pos == x509Start + raw.length()); // no leftovers -#else - assert(false); // this code should never be reached - pCert = Security::CertPointer(nullptr); // avoid warnings about uninitialized pCert; XXX: Fix CertPoint declaration. - (void)raw; // avoid warnings about unused method parameter; TODO: Add a SimulateUse() macro. -#endif - assert(pCert); - return pCert; -} - -void -Security::HandshakeParser::parseServerCertificates(const SBuf &raw) -{ -#if USE_OPENSSL - Parser::BinaryTokenizer tkList(raw); - const SBuf clist = tkList.pstring24("CertificateList"); - Must(tkList.atEnd()); // no leftovers after all certificates - - Parser::BinaryTokenizer tkItems(clist); - while (!tkItems.atEnd()) { - if (Security::CertPointer cert = ParseCertificate(tkItems.pstring24("Certificate"))) - serverCertificates.push_back(cert); - debugs(83, 7, "parsed " << serverCertificates.size() << " certificates so far"); - } -#else - debugs(83, 7, "no support for CertificateList parsing; ignoring " << raw.length() << " bytes"); -#endif -} - /// A helper function to create a set of all supported TLS extensions static Security::Extensions diff -u -r -N squid-5.0.5/src/security/Handshake.h squid-5.0.6/src/security/Handshake.h --- squid-5.0.5/src/security/Handshake.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/security/Handshake.h 2021-05-10 21:02:34.000000000 +1200 @@ -61,7 +61,7 @@ { public: /// The parsing states - typedef enum {atHelloNone = 0, atHelloStarted, atHelloReceived, atCertificatesReceived, atHelloDoneReceived, atNstReceived, atCcsReceived, atFinishReceived} ParserState; + typedef enum { atHelloNone = 0, atHelloStarted, atHelloReceived, atHelloDoneReceived, atNstReceived, atCcsReceived, atFinishReceived } ParserState; /// the originator of the TLS handshake being parsed typedef enum { fromClient = 0, fromServer } MessageSource; @@ -76,8 +76,6 @@ TlsDetails::Pointer details; ///< TLS handshake meta info. Never nil. - Security::CertList serverCertificates; ///< parsed certificates chain - ParserState state; ///< current parsing state. bool resumingSession; ///< True if this is a resuming session @@ -112,7 +110,6 @@ void parseV23Ciphers(const SBuf &raw); void parseServerCertificates(const SBuf &raw); - static CertPointer ParseCertificate(const SBuf &raw); unsigned int currentContentType; ///< The current TLS/SSL record content type diff -u -r -N squid-5.0.5/src/security/Io.cc squid-5.0.6/src/security/Io.cc --- squid-5.0.5/src/security/Io.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/security/Io.cc 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,223 @@ +/* + * Copyright (C) 1996-2021 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +/* DEBUG: section 83 TLS I/O */ + +#include "squid.h" +#include "fde.h" +#include "security/Io.h" + +namespace Security { + +template +static IoResult Handshake(Comm::Connection &, ErrorCode, Fun); +static void PrepForIo(); + +typedef SessionPointer::element_type *ConnectionPointer; + +} // namespace Security + +void +Security::IoResult::print(std::ostream &os) const +{ + const char *strCat = "unknown"; + switch (category) { + case ioSuccess: + strCat = "success"; + break; + case ioWantRead: + strCat = "want-read"; + break; + case ioWantWrite: + strCat = "want-write"; + break; + case ioError: + strCat = "error"; + break; + } + os << strCat; + + if (errorDescription) + os << ", " << errorDescription; + + if (important) + os << ", important"; +} + +// TODO: Replace high-level ERR_get_error() calls with a new std::ostream +// ReportErrors manipulator inside debugs(), followed by a ForgetErrors() call. +void +Security::ForgetErrors() +{ +#if USE_OPENSSL + unsigned int reported = 0; // efficiently marks ForgetErrors() call boundary + while (const auto errorToForget = ERR_get_error()) + debugs(83, 7, '#' << (++reported) << ": " << asHex(errorToForget)); +#endif +} + +/// the steps necessary to perform before the upcoming TLS I/O +/// to correctly interpret/detail the outcome of that I/O +static void +Security::PrepForIo() +{ + // flush earlier errors that some call forgot to extract, so that we will + // only get the error(s) specific to the upcoming I/O operation + ForgetErrors(); + + // as the last step, reset errno to know when the I/O operation set it + errno = 0; +} + +/// Calls the given TLS handshake function and analysis its outcome. +/// Handles alert logging and being called without adequate TLS library support. +template +static Security::IoResult +Security::Handshake(Comm::Connection &transport, const ErrorCode topError, Fun ioCall) +{ + assert(transport.isOpen()); + const auto fd = transport.fd; + auto connection = fd_table[fd].ssl.get(); + + PrepForIo(); + const auto callResult = ioCall(connection); + const auto xerrno = errno; + + debugs(83, 5, callResult << '/' << xerrno << " for TLS connection " << + static_cast(connection) << " over " << transport); + +#if USE_OPENSSL + if (callResult > 0) + return IoResult(IoResult::ioSuccess); + + const auto ioError = SSL_get_error(connection, callResult); + + // quickly handle common, non-erroneous outcomes + switch (ioError) { + + case SSL_ERROR_WANT_READ: + return IoResult(IoResult::ioWantRead); + + case SSL_ERROR_WANT_WRITE: + return IoResult(IoResult::ioWantWrite); + + default: + ; // fall through to handle the problem + } + + // now we know that we are dealing with a real problem; detail it + ErrorDetail::Pointer errorDetail; + if (const auto oldDetail = SSL_get_ex_data(connection, ssl_ex_index_ssl_error_detail)) { + errorDetail = *static_cast(oldDetail); + } else { + errorDetail = new ErrorDetail(topError, ioError, xerrno); + if (const auto serverCert = SSL_get_peer_certificate(connection)) + errorDetail->setPeerCertificate(CertPointer(serverCert)); + } + IoResult ioResult(errorDetail); + + // collect debugging-related details + switch (ioError) { + case SSL_ERROR_SYSCALL: + if (callResult == 0) { + ioResult.errorDescription = "peer aborted"; + } else { + ioResult.errorDescription = "system call failure"; + ioResult.important = (xerrno == ECONNRESET); + } + break; + + case SSL_ERROR_ZERO_RETURN: + // peer sent a "close notify" alert, closing TLS connection for writing + ioResult.errorDescription = "peer closed"; + ioResult.important = true; + break; + + default: + // an ever-increasing number of possible cases but usually SSL_ERROR_SSL + ioResult.errorDescription = "failure"; + ioResult.important = true; + } + + return ioResult; + +#elif USE_GNUTLS + if (callResult == GNUTLS_E_SUCCESS) { + // TODO: Avoid gnutls_*() calls if debugging is off. + const auto desc = gnutls_session_get_desc(connection); + debugs(83, 2, "TLS session info: " << desc); + gnutls_free(desc); + return IoResult(IoResult::ioSuccess); + } + + // Debug the TLS connection state so far. + // TODO: Avoid gnutls_*() calls if debugging is off. + const auto descIn = gnutls_handshake_get_last_in(connection); + debugs(83, 2, "handshake IN: " << gnutls_handshake_description_get_name(descIn)); + const auto descOut = gnutls_handshake_get_last_out(connection); + debugs(83, 2, "handshake OUT: " << gnutls_handshake_description_get_name(descOut)); + + if (callResult == GNUTLS_E_WARNING_ALERT_RECEIVED) { + const auto alert = gnutls_alert_get(connection); + debugs(83, DBG_IMPORTANT, "WARNING: TLS alert: " << gnutls_alert_get_name(alert)); + // fall through to retry + } + + if (!gnutls_error_is_fatal(callResult)) { + const auto reading = gnutls_record_get_direction(connection) == 0; + return IoResult(reading ? IoResult::ioWantRead : IoResult::ioWantWrite); + } + + // now we know that we are dealing with a real problem; detail it + const ErrorDetail::Pointer errorDetail = + new ErrorDetail(topError, callResult, xerrno); + + IoResult ioResult(errorDetail); + ioResult.errorDescription = "failure"; + return ioResult; + +#else + // TLS I/O code path should never be reachable without a TLS/SSL library. + debugs(1, DBG_CRITICAL, ForceAlert << "BUG: " << + "Unexpected TLS I/O in Squid built without a TLS/SSL library"); + assert(false); // we want a stack trace which fatal() does not produce + return IoResult(nullptr); // not reachable +#endif +} + +// TODO: After dropping OpenSSL v1.1.0 support, this and Security::Connect() can +// be simplified further by using SSL_do_handshake() and eliminating lambdas. +Security::IoResult +Security::Accept(Comm::Connection &transport) +{ + return Handshake(transport, SQUID_TLS_ERR_ACCEPT, [] (ConnectionPointer tlsConn) { +#if USE_OPENSSL + return SSL_accept(tlsConn); +#elif USE_GNUTLS + return gnutls_handshake(tlsConn); +#else + return sizeof(tlsConn); // the value is unused; should be unreachable +#endif + }); +} + +/// establish a TLS connection over the specified from-Squid transport connection +Security::IoResult +Security::Connect(Comm::Connection &transport) +{ + return Handshake(transport, SQUID_TLS_ERR_CONNECT, [] (ConnectionPointer tlsConn) { +#if USE_OPENSSL + return SSL_connect(tlsConn); +#elif USE_GNUTLS + return gnutls_handshake(tlsConn); +#else + return sizeof(tlsConn); // the value is unused; should be unreachable +#endif + }); +} + diff -u -r -N squid-5.0.5/src/security/Io.h squid-5.0.6/src/security/Io.h --- squid-5.0.5/src/security/Io.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/security/Io.h 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,66 @@ +/* + * Copyright (C) 1996-2021 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +#ifndef SQUID_SRC_SECURITY_IO_H +#define SQUID_SRC_SECURITY_IO_H + +#include "comm/forward.h" +#include "security/ErrorDetail.h" +#include "security/forward.h" + +namespace Security { + +/// a summary a TLS I/O operation outcome +class IoResult: public RefCountable { +public: + typedef RefCount Pointer; + + /// all possible outcome cases + typedef enum { ioSuccess, ioWantRead, ioWantWrite, ioError } Category; + + explicit IoResult(const Category aCategory): category(aCategory) {} + explicit IoResult(const ErrorDetailPointer &anErrorDetail): errorDetail(anErrorDetail) {} + IoResult(const IoResult &aRes) = default; + + /// convenience wrapper to detect successful I/O outcome; implies !wantsIo() + bool successful() const { return category == ioSuccess; } + + /// convenience wrapper to detect whether more I/O is needed + bool wantsIo() const { return category == ioWantRead || category == ioWantWrite; } + + void print(std::ostream &os) const; + + ErrorDetailPointer errorDetail; ///< ioError case details (or nil) + + Category category = ioError; ///< primary outcome classification + + /* the data members below facilitate human-friendly debugging */ + const char *errorDescription = nullptr; ///< a brief description of an error + bool important = false; ///< whether the error was serious/unusual +}; + +inline std::ostream & +operator <<(std::ostream &os, const IoResult &result) +{ + result.print(os); + return os; +} + +/// accept a TLS connection over the specified to-Squid transport connection +IoResult Accept(Comm::Connection &transport); + +/// establish a TLS connection over the specified from-Squid transport connection +IoResult Connect(Comm::Connection &transport); + +/// clear any errors that a TLS library has accumulated in its global storage +void ForgetErrors(); + +} // namespace Security + +#endif /* SQUID_SRC_SECURITY_IO_H */ + diff -u -r -N squid-5.0.5/src/security/KeyData.cc squid-5.0.6/src/security/KeyData.cc --- squid-5.0.5/src/security/KeyData.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/security/KeyData.cc 2021-05-10 21:02:34.000000000 +1200 @@ -39,7 +39,7 @@ #elif USE_GNUTLS const char *certFilename = certFile.c_str(); gnutls_datum_t data; - Security::ErrorCode x = gnutls_load_file(certFilename, &data); + Security::LibErrorCode x = gnutls_load_file(certFilename, &data); if (x != GNUTLS_E_SUCCESS) { debugs(83, DBG_IMPORTANT, "ERROR: unable to load certificate file '" << certFile << "': " << ErrorString(x)); return false; diff -u -r -N squid-5.0.5/src/security/LockingPointer.h squid-5.0.6/src/security/LockingPointer.h --- squid-5.0.5/src/security/LockingPointer.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/security/LockingPointer.h 2021-05-10 21:02:34.000000000 +1200 @@ -57,13 +57,19 @@ /// a helper label to simplify this objects API definitions below typedef Security::LockingPointer SelfType; + /// constructs a nil smart pointer + constexpr LockingPointer(): raw(nullptr) {} + + /// constructs a nil smart pointer from nullptr + constexpr LockingPointer(std::nullptr_t): raw(nullptr) {} + /** - * Construct directly from a raw pointer. - * This action requires that the producer of that pointer has already - * created one reference lock for the object pointed to. - * Our destructor will do the matching unlock. + * Construct directly from a (possibly nil) raw pointer. If the supplied + * pointer is not nil, it is expected that its producer has already created + * one reference lock for the object pointed to, and our destructor will do + * the matching unlock. */ - explicit LockingPointer(T *t = nullptr): raw(nullptr) { + explicit LockingPointer(T *t): raw(nullptr) { // de-optimized for clarity about non-locking resetWithoutLocking(t); } diff -u -r -N squid-5.0.5/src/security/Makefile.am squid-5.0.6/src/security/Makefile.am --- squid-5.0.5/src/security/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/security/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -12,16 +12,19 @@ noinst_LTLIBRARIES = libsecurity.la -libsecurity_la_SOURCES= \ +libsecurity_la_SOURCES = \ BlindPeerConnector.cc \ BlindPeerConnector.h \ CertError.h \ Context.h \ EncryptorAnswer.cc \ EncryptorAnswer.h \ + ErrorDetail.cc \ + ErrorDetail.h \ Handshake.cc \ Handshake.h \ - forward.h \ + Io.cc \ + Io.h \ KeyData.cc \ KeyData.h \ LockingPointer.h \ @@ -34,4 +37,5 @@ ServerOptions.cc \ ServerOptions.h \ Session.cc \ - Session.h + Session.h \ + forward.h diff -u -r -N squid-5.0.5/src/security/Makefile.in squid-5.0.6/src/security/Makefile.in --- squid-5.0.5/src/security/Makefile.in 2021-02-08 13:40:48.000000000 +1300 +++ squid-5.0.6/src/security/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -165,8 +165,9 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) libsecurity_la_LIBADD = am_libsecurity_la_OBJECTS = BlindPeerConnector.lo EncryptorAnswer.lo \ - Handshake.lo KeyData.lo NegotiationHistory.lo PeerConnector.lo \ - PeerOptions.lo ServerOptions.lo Session.lo + ErrorDetail.lo Handshake.lo Io.lo KeyData.lo \ + NegotiationHistory.lo PeerConnector.lo PeerOptions.lo \ + ServerOptions.lo Session.lo libsecurity_la_OBJECTS = $(am_libsecurity_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -188,7 +189,8 @@ depcomp = $(SHELL) $(top_srcdir)/cfgaux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/BlindPeerConnector.Plo \ - ./$(DEPDIR)/EncryptorAnswer.Plo ./$(DEPDIR)/Handshake.Plo \ + ./$(DEPDIR)/EncryptorAnswer.Plo ./$(DEPDIR)/ErrorDetail.Plo \ + ./$(DEPDIR)/Handshake.Plo ./$(DEPDIR)/Io.Plo \ ./$(DEPDIR)/KeyData.Plo ./$(DEPDIR)/NegotiationHistory.Plo \ ./$(DEPDIR)/PeerConnector.Plo ./$(DEPDIR)/PeerOptions.Plo \ ./$(DEPDIR)/ServerOptions.Plo ./$(DEPDIR)/Session.Plo @@ -782,9 +784,12 @@ Context.h \ EncryptorAnswer.cc \ EncryptorAnswer.h \ + ErrorDetail.cc \ + ErrorDetail.h \ Handshake.cc \ Handshake.h \ - forward.h \ + Io.cc \ + Io.h \ KeyData.cc \ KeyData.h \ LockingPointer.h \ @@ -797,7 +802,8 @@ ServerOptions.cc \ ServerOptions.h \ Session.cc \ - Session.h + Session.h \ + forward.h all: all-recursive @@ -865,7 +871,9 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BlindPeerConnector.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EncryptorAnswer.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ErrorDetail.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Handshake.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Io.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/KeyData.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NegotiationHistory.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeerConnector.Plo@am__quote@ # am--include-marker @@ -1278,7 +1286,9 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/BlindPeerConnector.Plo -rm -f ./$(DEPDIR)/EncryptorAnswer.Plo + -rm -f ./$(DEPDIR)/ErrorDetail.Plo -rm -f ./$(DEPDIR)/Handshake.Plo + -rm -f ./$(DEPDIR)/Io.Plo -rm -f ./$(DEPDIR)/KeyData.Plo -rm -f ./$(DEPDIR)/NegotiationHistory.Plo -rm -f ./$(DEPDIR)/PeerConnector.Plo @@ -1332,7 +1342,9 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/BlindPeerConnector.Plo -rm -f ./$(DEPDIR)/EncryptorAnswer.Plo + -rm -f ./$(DEPDIR)/ErrorDetail.Plo -rm -f ./$(DEPDIR)/Handshake.Plo + -rm -f ./$(DEPDIR)/Io.Plo -rm -f ./$(DEPDIR)/KeyData.Plo -rm -f ./$(DEPDIR)/NegotiationHistory.Plo -rm -f ./$(DEPDIR)/PeerConnector.Plo diff -u -r -N squid-5.0.5/src/security/NegotiationHistory.cc squid-5.0.6/src/security/NegotiationHistory.cc --- squid-5.0.5/src/security/NegotiationHistory.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/security/NegotiationHistory.cc 2021-05-10 21:02:34.000000000 +1200 @@ -38,6 +38,10 @@ toProtocolVersion(const int v) { switch(v) { +#if defined(TLS1_3_VERSION) + case TLS1_3_VERSION: + return AnyP::ProtocolVersion(AnyP::PROTO_TLS, 1, 3); +#endif #if defined(TLS1_2_VERSION) case TLS1_2_VERSION: return AnyP::ProtocolVersion(AnyP::PROTO_TLS, 1, 2); diff -u -r -N squid-5.0.5/src/security/PeerConnector.cc squid-5.0.6/src/security/PeerConnector.cc --- squid-5.0.5/src/security/PeerConnector.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/security/PeerConnector.cc 2021-05-10 21:02:34.000000000 +1200 @@ -20,6 +20,7 @@ #include "HttpRequest.h" #include "neighbors.h" #include "pconn.h" +#include "security/Io.h" #include "security/NegotiationHistory.h" #include "security/PeerConnector.h" #include "SquidConfig.h" @@ -56,6 +57,8 @@ comm_add_close_handler(serverConn->fd, closeHandler); } +Security::PeerConnector::~PeerConnector() = default; + bool Security::PeerConnector::doneAll() const { return (!callback || callback->canceled()) && AsyncJob::doneAll(); @@ -90,9 +93,8 @@ debugs(83, 5, "FD " << params.fd << ", Security::PeerConnector=" << params.data); const auto err = new ErrorState(ERR_SECURE_CONNECT_FAIL, Http::scServiceUnavailable, request.getRaw(), al); -#if USE_OPENSSL - err->detail = new Ssl::ErrorDetail(SQUID_ERR_SSL_HANDSHAKE, nullptr, nullptr); -#endif + static const auto d = MakeNamedErrorDetail("TLS_CONNECT_CLOSE"); + err->detailError(d); bail(err); } @@ -101,9 +103,8 @@ { debugs(83, 5, serverConnection() << " timedout. this=" << (void*)this); const auto err = new ErrorState(ERR_SECURE_CONNECT_FAIL, Http::scGatewayTimeout, request.getRaw(), al); -#if USE_OPENSSL - err->detail = new Ssl::ErrorDetail(SQUID_ERR_SSL_HANDSHAKE, nullptr, nullptr); -#endif + static const auto d = MakeNamedErrorDetail("TLS_CONNECT_TIMEOUT"); + err->detailError(d); bail(err); } @@ -143,6 +144,16 @@ SSL_set_ex_data(serverSession.get(), ssl_ex_index_cert_error_check, check); } } + + // Protect from cycles in the certificate dependency graph: TLS site S1 is + // missing certificate C1 located at TLS site S2. TLS site S2 is missing + // certificate C2 located at [...] TLS site S1. + const auto cycle = certDownloadNestingLevel() >= MaxNestedDownloads; + if (cycle) + debugs(83, 3, "will not fetch any missing certificates; suspecting cycle: " << certDownloadNestingLevel() << '/' << MaxNestedDownloads); + const auto sessData = Ssl::VerifyCallbackParameters::New(*serverSession); + // when suspecting a cycle, break it by not fetching any missing certs + sessData->callerHandlesMissingCertificates = !cycle; #endif return true; @@ -173,41 +184,67 @@ if (fd_table[fd].closing()) return; + const auto result = Security::Connect(*serverConnection()); + #if USE_OPENSSL - auto session = fd_table[fd].ssl.get(); - debugs(83, 5, "SSL_connect session=" << (void*)session); - const int result = SSL_connect(session); - if (result <= 0) { -#elif USE_GNUTLS - auto session = fd_table[fd].ssl.get(); - const int result = gnutls_handshake(session); - debugs(83, 5, "gnutls_handshake session=" << (void*)session << ", result=" << result); - - if (result == GNUTLS_E_SUCCESS) { - char *desc = gnutls_session_get_desc(session); - debugs(83, 2, serverConnection() << " TLS Session info: " << desc); - gnutls_free(desc); - } - - if (result != GNUTLS_E_SUCCESS) { - // debug the TLS session state so far - auto descIn = gnutls_handshake_get_last_in(session); - debugs(83, 2, "handshake IN: " << gnutls_handshake_description_get_name(descIn)); - auto descOut = gnutls_handshake_get_last_out(session); - debugs(83, 2, "handshake OUT: " << gnutls_handshake_description_get_name(descOut)); -#else - if (const int result = -1) { -#endif - handleNegotiateError(result); - return; // we might be gone by now + auto &sconn = *fd_table[fd].ssl; + + // OpenSSL v1 APIs do not allow unthreaded applications like Squid to fetch + // missing certificates _during_ OpenSSL certificate validation. Our + // handling of X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY (abbreviated + // here as EUNABLE) approximates what would happen if we did (attempt to) + // fetch any missing certificates during OpenSSL certificate validation. + // * We did not hide EUNABLE; SSL_connect() was successful: Handle success. + // * We did not hide EUNABLE; SSL_connect() reported some error E: Honor E. + // * We hid EUNABLE; SSL_connect() was successful: Remember success and try + // to fetch the missing certificates. If all goes well, honor success. + // * We hid EUNABLE; SSL_connect() reported EUNABLE: Warn but honor EUNABLE. + // * We hid EUNABLE; SSL_connect() reported some EOTHER: Remember EOTHER and + // try to fetch the missing certificates. If all goes well, honor EOTHER. + // If fetching or post-fetching validation fails, then honor that failure + // because EOTHER would not have happened if we fetched during validation. + if (auto &hidMissingIssuer = Ssl::VerifyCallbackParameters::At(sconn).hidMissingIssuer) { + hidMissingIssuer = false; // prep for the next SSL_connect() + + if (result.category == IoResult::ioSuccess || + !(result.errorDetail && result.errorDetail->errorNo() == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY)) + return handleMissingCertificates(result); + + debugs(83, DBG_IMPORTANT, "BUG: Honoring unexpected SSL_connect() error: X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY"); + // fall through to regular error handling } +#endif - recordNegotiationDetails(); + handleNegotiationResult(result); +} + +void +Security::PeerConnector::handleNegotiationResult(const Security::IoResult &result) +{ + switch (result.category) { + case Security::IoResult::ioSuccess: + recordNegotiationDetails(); + if (sslFinalized()) + sendSuccess(); + return; // we may be gone by now - if (!sslFinalized()) + case Security::IoResult::ioWantRead: + noteWantRead(); return; - sendSuccess(); + case Security::IoResult::ioWantWrite: + noteWantWrite(); + return; + + case Security::IoResult::ioError: + break; // fall through to error handling + } + + // TODO: Honor result.important when working in a reverse proxy role? + debugs(83, 2, "ERROR: " << result.errorDescription << + " while establishing TLS connection on FD: " << serverConnection()->fd << result.errorDetail); + recordNegotiationDetails(); + noteNegotiationError(result.errorDetail); } bool @@ -259,7 +296,7 @@ { Must(validationResponse != NULL); - Ssl::ErrorDetail *errDetails = NULL; + ErrorDetail::Pointer errDetails; bool validatorFailed = false; if (Debug::Enabled(83, 5)) { @@ -289,7 +326,7 @@ anErr = new ErrorState(ERR_GATEWAY_FAILURE, Http::scInternalServerError, request.getRaw(), al); } else { anErr = new ErrorState(ERR_SECURE_CONNECT_FAIL, Http::scServiceUnavailable, request.getRaw(), al); - anErr->detail = errDetails; + anErr->detailError(errDetails); /*anErr->xerrno= Should preserved*/ } @@ -304,7 +341,7 @@ /// The first honored error, if any, is returned via errDetails parameter. /// The method returns all seen errors except SSL_ERROR_NONE as Security::CertErrors. Security::CertErrors * -Security::PeerConnector::sslCrtvdCheckForErrors(Ssl::CertValidationResponse const &resp, Ssl::ErrorDetail *& errDetails) +Security::PeerConnector::sslCrtvdCheckForErrors(Ssl::CertValidationResponse const &resp, ErrorDetail::Pointer &errDetails) { ACLFilledChecklist *check = NULL; Security::SessionPointer session(fd_table[serverConnection()->fd].ssl); @@ -337,10 +374,10 @@ debugs(83, 3, "bypassing SSL error " << i->error_no << " in " << "buffer"); } else { debugs(83, 5, "confirming SSL error " << i->error_no); - X509 *brokenCert = i->cert.get(); + const auto &brokenCert = i->cert; Security::CertPointer peerCert(SSL_get_peer_certificate(session.get())); const char *aReason = i->error_reason.empty() ? NULL : i->error_reason.c_str(); - errDetails = new Ssl::ErrorDetail(i->error_no, peerCert.get(), brokenCert, aReason); + errDetails = new ErrorDetail(i->error_no, peerCert, brokenCert, aReason); } if (check) { delete check->sslErrors; @@ -379,96 +416,10 @@ } void -Security::PeerConnector::handleNegotiateError(const int ret) -{ - const int fd = serverConnection()->fd; - const Security::SessionPointer session(fd_table[fd].ssl); - unsigned long ssl_lib_error = ret; - -#if USE_OPENSSL - const int ssl_error = SSL_get_error(session.get(), ret); - - switch (ssl_error) { - case SSL_ERROR_WANT_READ: - noteWantRead(); - return; - - case SSL_ERROR_WANT_WRITE: - noteWantWrite(); - return; - - case SSL_ERROR_SSL: - case SSL_ERROR_SYSCALL: - ssl_lib_error = ERR_get_error(); - // proceed to the general error handling code - break; - default: - // no special error handling for all other errors - ssl_lib_error = SSL_ERROR_NONE; - break; - } - -#elif USE_GNUTLS - const int ssl_error = ret; - - switch (ret) { - case GNUTLS_E_WARNING_ALERT_RECEIVED: { - auto alert = gnutls_alert_get(session.get()); - debugs(83, DBG_IMPORTANT, "TLS ALERT: " << gnutls_alert_get_name(alert)); - } - // drop through to next case - - case GNUTLS_E_AGAIN: - case GNUTLS_E_INTERRUPTED: - if (gnutls_record_get_direction(session.get()) == 0) - noteWantRead(); - else - noteWantWrite(); - return; - - default: - // no special error handling for all other errors - break; - } - -#else - // this avoids unused variable compiler warnings. - Must(!session); - const int ssl_error = ret; -#endif - - // Log connection details, if any - recordNegotiationDetails(); - noteNegotiationError(ret, ssl_error, ssl_lib_error); -} - -void Security::PeerConnector::noteWantRead() { const int fd = serverConnection()->fd; debugs(83, 5, serverConnection()); -#if USE_OPENSSL - Security::SessionPointer session(fd_table[fd].ssl); - BIO *b = SSL_get_rbio(session.get()); - Ssl::ServerBio *srvBio = static_cast(BIO_get_data(b)); - if (srvBio->holdRead()) { - if (srvBio->gotHello()) { - if (checkForMissingCertificates()) - return; // Wait to download certificates before proceed. - - srvBio->holdRead(false); - // schedule a negotiateSSl to allow openSSL parse received data - negotiateSsl(); - return; - } else if (srvBio->gotHelloFailed()) { - srvBio->holdRead(false); - debugs(83, DBG_IMPORTANT, "Error parsing SSL Server Hello Message on FD " << fd); - // schedule a negotiateSSl to allow openSSL parse received data - negotiateSsl(); - return; - } - } -#endif // read timeout to avoid getting stuck while reading from a silent server typedef CommCbMemFunT TimeoutDialer; @@ -490,48 +441,13 @@ } void -Security::PeerConnector::noteNegotiationError(const int ret, const int ssl_error, const int ssl_lib_error) +Security::PeerConnector::noteNegotiationError(const Security::ErrorDetailPointer &detail) { -#if defined(EPROTO) - int sysErrNo = EPROTO; -#else - int sysErrNo = EACCES; -#endif - -#if USE_OPENSSL - // store/report errno when ssl_error is SSL_ERROR_SYSCALL, ssl_lib_error is 0, and ret is -1 - if (ssl_error == SSL_ERROR_SYSCALL && ret == -1 && ssl_lib_error == 0) - sysErrNo = errno; -#endif - int xerr = errno; - - const int fd = serverConnection()->fd; - debugs(83, DBG_IMPORTANT, "ERROR: negotiating TLS on FD " << fd << - ": " << Security::ErrorString(ssl_lib_error) << " (" << - ssl_error << "/" << ret << "/" << xerr << ")"); - const auto anErr = ErrorState::NewForwarding(ERR_SECURE_CONNECT_FAIL, request, al); - anErr->xerrno = sysErrNo; - -#if USE_OPENSSL - Security::SessionPointer session(fd_table[fd].ssl); - Ssl::ErrorDetail *errFromFailure = static_cast(SSL_get_ex_data(session.get(), ssl_ex_index_ssl_error_detail)); - if (errFromFailure != NULL) { - // The errFromFailure is attached to the ssl object - // and will be released when ssl object destroyed. - // Copy errFromFailure to a new Ssl::ErrorDetail object - anErr->detail = new Ssl::ErrorDetail(*errFromFailure); - } else { - // server_cert can be NULL here - X509 *server_cert = SSL_get_peer_certificate(session.get()); - anErr->detail = new Ssl::ErrorDetail(SQUID_ERR_SSL_HANDSHAKE, server_cert, NULL); - X509_free(server_cert); + if (detail) { + anErr->xerrno = detail->sysError(); + anErr->detailError(detail); } - - if (ssl_lib_error != SSL_ERROR_NONE) - anErr->detail->setLibError(ssl_lib_error); -#endif - noteNegotiationDone(anErr); bail(anErr); } @@ -643,6 +559,20 @@ CbcPointer peerConnector_; ///< The Security::PeerConnector object }; +/// the number of concurrent PeerConnector jobs waiting for us +unsigned int +Security::PeerConnector::certDownloadNestingLevel() const +{ + if (request) { + // Nesting level increases when a PeerConnector (at level L) creates a + // Downloader (which is assigned level L+1). If we were initiated by + // such a Downloader, then their nesting level is our nesting level. + if (const auto previousDownloader = request->downloader.get()) + return previousDownloader->nestedLevel(); + } + return 0; // no other PeerConnector job waits for us +} + void Security::PeerConnector::startCertDownloading(SBuf &url) { @@ -650,8 +580,7 @@ "Security::PeerConnector::certDownloadingDone", PeerConnectorCertDownloaderDialer(&Security::PeerConnector::certDownloadingDone, this)); - const Downloader *csd = (request ? dynamic_cast(request->downloader.valid()) : nullptr); - Downloader *dl = new Downloader(url, certCallback, XactionInitiator::initCertFetcher, csd ? csd->nestedLevel() + 1 : 1); + const auto dl = new Downloader(url, certCallback, XactionInitiator::initCertFetcher, certDownloadNestingLevel() + 1); AsyncJob::Start(dl); } @@ -661,11 +590,7 @@ ++certsDownloads; debugs(81, 5, "Certificate downloading status: " << downloadStatus << " certificate size: " << obj.length()); - // get ServerBio from SSL object - const int fd = serverConnection()->fd; - Security::SessionPointer session(fd_table[fd].ssl); - BIO *b = SSL_get_rbio(session.get()); - Ssl::ServerBio *srvBio = static_cast(BIO_get_data(b)); + const auto &sconn = *fd_table[serverConnection()->fd].ssl; // Parse Certificate. Assume that it is in DER format. // According to RFC 4325: @@ -678,12 +603,29 @@ if (X509 *cert = d2i_X509(NULL, &raw, obj.length())) { char buffer[1024]; debugs(81, 5, "Retrieved certificate: " << X509_NAME_oneline(X509_get_subject_name(cert), buffer, 1024)); + + if (!downloadedCerts) + downloadedCerts.reset(sk_X509_new_null()); + sk_X509_push(downloadedCerts.get(), cert); + ContextPointer ctx(getTlsContext()); - const Security::CertList &certsList = srvBio->serverCertificatesIfAny(); - if (const char *issuerUri = Ssl::uriOfIssuerIfMissing(cert, certsList, ctx)) { - urlsOfMissingCerts.push(SBuf(issuerUri)); + const auto certsList = SSL_get_peer_cert_chain(&sconn); + if (!Ssl::findIssuerCertificate(cert, certsList, ctx)) { + if (const auto issuerUri = Ssl::findIssuerUri(cert)) { + debugs(81, 5, "certificate " << + X509_NAME_oneline(X509_get_subject_name(cert), buffer, sizeof(buffer)) << + " points to its missing issuer certificate at " << issuerUri); + urlsOfMissingCerts.push(SBuf(issuerUri)); + } else { + debugs(81, 3, "found a certificate with no IAI, " << + "signed by a missing issuer certificate: " << + X509_NAME_oneline(X509_get_subject_name(cert), buffer, sizeof(buffer))); + // We could short-circuit here, proceeding to chain validation + // that is likely to fail. Instead, we keep going because we + // hope that if we find at least one certificate to fetch, it + // will complete the chain (that contained extra certificates). + } } - Ssl::SSL_add_untrusted_cert(session.get(), cert); } // Check if there are URIs to download from and if yes start downloading @@ -694,39 +636,82 @@ return; } - srvBio->holdRead(false); - negotiateSsl(); + resumeNegotiation(); } -bool -Security::PeerConnector::checkForMissingCertificates() +void +Security::PeerConnector::handleMissingCertificates(const Security::IoResult &ioResult) { - // Check for nested SSL certificates downloads. For example when the - // certificate located in an SSL site which requires to download a - // a missing certificate (... from an SSL site which requires to ...). + auto &sconn = *fd_table[serverConnection()->fd].ssl; + + // We download the missing certificate(s) once. We would prefer to clear + // this right after the first validation, but that ideal place is _inside_ + // OpenSSL if validation is triggered by SSL_connect(). That function and + // our OpenSSL verify_callback function (\ref OpenSSL_vcb_disambiguation) + // may be called multiple times, so we cannot reset there. + auto &callerHandlesMissingCertificates = Ssl::VerifyCallbackParameters::At(sconn).callerHandlesMissingCertificates; + Must(callerHandlesMissingCertificates); + callerHandlesMissingCertificates = false; - const Downloader *csd = (request ? request->downloader.get() : nullptr); - if (csd && csd->nestedLevel() >= MaxNestedDownloads) + if (!computeMissingCertificateUrls(sconn)) + return handleNegotiationResult(ioResult); + + suspendNegotiation(ioResult); + + assert(!urlsOfMissingCerts.empty()); + startCertDownloading(urlsOfMissingCerts.front()); + urlsOfMissingCerts.pop(); +} + +/// finds URLs of (some) missing intermediate certificates or returns false +bool +Security::PeerConnector::computeMissingCertificateUrls(const Connection &sconn) +{ + const auto certs = SSL_get_peer_cert_chain(&sconn); + if (!certs) { + debugs(83, 3, "nothing to bootstrap the fetch with"); return false; + } + debugs(83, 5, "server certificates: " << sk_X509_num(certs)); - const int fd = serverConnection()->fd; - Security::SessionPointer session(fd_table[fd].ssl); - BIO *b = SSL_get_rbio(session.get()); - Ssl::ServerBio *srvBio = static_cast(BIO_get_data(b)); - const Security::CertList &certs = srvBio->serverCertificatesIfAny(); + const auto ctx = getTlsContext(); + if (!Ssl::missingChainCertificatesUrls(urlsOfMissingCerts, *certs, ctx)) + return false; // missingChainCertificatesUrls() reports the exact reason - if (certs.size()) { - debugs(83, 5, "SSL server sent " << certs.size() << " certificates"); - ContextPointer ctx(getTlsContext()); - Ssl::missingChainCertificatesUrls(urlsOfMissingCerts, certs, ctx); - if (urlsOfMissingCerts.size()) { - startCertDownloading(urlsOfMissingCerts.front()); - urlsOfMissingCerts.pop(); - return true; - } + debugs(83, 5, "URLs: " << urlsOfMissingCerts.size()); + assert(!urlsOfMissingCerts.empty()); + return true; +} + +void +Security::PeerConnector::suspendNegotiation(const Security::IoResult &ioResult) +{ + debugs(83, 5, "after " << ioResult); + Must(!isSuspended()); + suspendedError_ = new Security::IoResult(ioResult); + Must(isSuspended()); + // negotiations resume with a resumeNegotiation() call +} + +void +Security::PeerConnector::resumeNegotiation() +{ + Must(isSuspended()); + + auto lastError = suspendedError_; // may be reset below + suspendedError_ = nullptr; + + auto &sconn = *fd_table[serverConnection()->fd].ssl; + if (!Ssl::VerifyConnCertificates(sconn, downloadedCerts)) { + // simulate an earlier SSL_connect() failure with a new error + // TODO: When we can use Security::ErrorDetail, we should resume with a + // detailed _validation_ error, not just a generic SSL_ERROR_SSL! + const ErrorDetail::Pointer errorDetail = new ErrorDetail(SQUID_TLS_ERR_CONNECT, SSL_ERROR_SSL, 0); + lastError = new Security::IoResult(errorDetail); } - return false; + handleNegotiationResult(*lastError); } + #endif //USE_OPENSSL diff -u -r -N squid-5.0.5/src/security/PeerConnector.h squid-5.0.6/src/security/PeerConnector.h --- squid-5.0.5/src/security/PeerConnector.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/security/PeerConnector.h 2021-05-10 21:02:34.000000000 +1200 @@ -30,6 +30,9 @@ namespace Security { +class IoResult; +typedef RefCount IoResultPointer; + /** * Initiates encryption of a given open TCP connection to a peer or server. * Despite its name does not perform any connect(2) operations. Owns the @@ -59,7 +62,7 @@ AsyncCall::Pointer &aCallback, const AccessLogEntryPointer &alp, const time_t timeout = 0); - virtual ~PeerConnector() = default; + virtual ~PeerConnector(); /// hack: whether the connection requires fwdPconnPool->noteUses() bool noteFwdPconnUse; @@ -89,23 +92,27 @@ /// Otherwise, returns true, regardless of negotiation success/failure. bool sslFinalized(); - /// Called when the negotiation step aborted because data needs to - /// be transferred to/from server or on error. In the first case - /// setups the appropriate Comm::SetSelect handler. In second case - /// fill an error and report to the PeerConnector caller. - void handleNegotiateError(const int result); + /// Called after each negotiation step to handle the result + void handleNegotiationResult(const Security::IoResult &); /// Called when the openSSL SSL_connect fnction request more data from /// the remote SSL server. Sets the read timeout and sets the /// Squid COMM_SELECT_READ handler. void noteWantRead(); + /// Whether TLS negotiation has been paused and not yet resumed + bool isSuspended() const { return static_cast(suspendedError_); } + #if USE_OPENSSL - /// Run the certificates list sent by the SSL server and check if there - /// are missing certificates. Adds to the urlOfMissingCerts list the - /// URLS of missing certificates if this information provided by the - /// issued certificates with Authority Info Access extension. - bool checkForMissingCertificates(); + /// Suspends TLS negotiation to download the missing certificates + /// \param lastError an error to handle when resuming negotiations + void suspendNegotiation(const Security::IoResult &lastError); + + /// Resumes TLS negotiation paused by suspendNegotiation() + void resumeNegotiation(); + + /// Either initiates fetching of missing certificates or bails with an error + void handleMissingCertificates(const Security::IoResult &lastError); /// Start downloading procedure for the given URL. void startCertDownloading(SBuf &url); @@ -119,10 +126,7 @@ virtual void noteWantWrite(); /// Called when the SSL_connect function aborts with an SSL negotiation error - /// \param result the SSL_connect return code - /// \param ssl_error the error code returned from the SSL_get_error function - /// \param ssl_lib_error the error returned from the ERR_Get_Error function - virtual void noteNegotiationError(const int result, const int ssl_error, const int ssl_lib_error); + virtual void noteNegotiationError(const Security::ErrorDetailPointer &); /// Called when the SSL negotiation to the server completed and the certificates /// validated using the cert validator. @@ -164,19 +168,24 @@ PeerConnector &operator =(const PeerConnector &); // not implemented #if USE_OPENSSL + unsigned int certDownloadNestingLevel() const; + /// Process response from cert validator helper void sslCrtvdHandleReply(Ssl::CertValidationResponsePointer); /// Check SSL errors returned from cert validator against sslproxy_cert_error access list - Security::CertErrors *sslCrtvdCheckForErrors(Ssl::CertValidationResponse const &, Ssl::ErrorDetail *&); + Security::CertErrors *sslCrtvdCheckForErrors(Ssl::CertValidationResponse const &, ErrorDetailPointer &); + + bool computeMissingCertificateUrls(const Connection &); #endif static void NegotiateSsl(int fd, void *data); void negotiateSsl(); - /// The maximum allowed missing certificates downloads. + /// The maximum number of missing certificates a single PeerConnector may download static const unsigned int MaxCertsDownloads = 10; - /// The maximum allowed nested certificates downloads. + + /// The maximum number of inter-dependent Downloader jobs a worker may initiate static const unsigned int MaxNestedDownloads = 3; AsyncCall::Pointer closeHandler; ///< we call this when the connection closed @@ -186,6 +195,14 @@ /// The list of URLs where missing certificates should be downloaded. std::queue urlsOfMissingCerts; unsigned int certsDownloads; ///< the number of downloaded missing certificates + +#if USE_OPENSSL + /// successfully downloaded intermediate certificates (omitted by the peer) + Ssl::X509_STACK_Pointer downloadedCerts; +#endif + + /// outcome of the last (failed and) suspended negotiation attempt (or nil) + Security::IoResultPointer suspendedError_; }; } // namespace Security diff -u -r -N squid-5.0.5/src/security/PeerOptions.cc squid-5.0.6/src/security/PeerOptions.cc --- squid-5.0.5/src/security/PeerOptions.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/security/PeerOptions.cc 2021-05-10 21:02:34.000000000 +1200 @@ -254,7 +254,7 @@ #elif USE_GNUTLS // Initialize for X.509 certificate exchange gnutls_certificate_credentials_t t; - if (const int x = gnutls_certificate_allocate_credentials(&t)) { + if (const auto x = gnutls_certificate_allocate_credentials(&t)) { fatalf("Failed to allocate TLS client context: %s\n", Security::ErrorString(x)); } ctx = convertContextFromRawPtr(t); @@ -527,7 +527,7 @@ const char *err = nullptr; const char *priorities = str.c_str(); gnutls_priority_t op; - int x = gnutls_priority_init(&op, priorities, &err); + const auto x = gnutls_priority_init(&op, priorities, &err); if (x != GNUTLS_E_SUCCESS) { fatalf("(%s) in TLS options '%s'", ErrorString(x), err); } @@ -767,7 +767,7 @@ SSL_set_options(s.get(), parsedOptions); #elif USE_GNUTLS - int x; + LibErrorCode x; SBuf errMsg; if (!parsedOptions) { debugs(83, 5, "set GnuTLS default priority/options for session=" << s); diff -u -r -N squid-5.0.5/src/security/ServerOptions.cc squid-5.0.6/src/security/ServerOptions.cc --- squid-5.0.5/src/security/ServerOptions.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/security/ServerOptions.cc 2021-05-10 21:02:34.000000000 +1200 @@ -24,6 +24,8 @@ #endif #endif +#include + Security::ServerOptions & Security::ServerOptions::operator =(const Security::ServerOptions &old) { if (this != &old) { @@ -169,7 +171,7 @@ #elif USE_GNUTLS // Initialize for X.509 certificate exchange gnutls_certificate_credentials_t t; - if (const int x = gnutls_certificate_allocate_credentials(&t)) { + if (const auto x = gnutls_certificate_allocate_credentials(&t)) { debugs(83, DBG_CRITICAL, "ERROR: Failed to allocate TLS server context: " << Security::ErrorString(x)); } ctx = convertContextFromRawPtr(t); diff -u -r -N squid-5.0.5/src/security/Session.cc squid-5.0.6/src/security/Session.cc --- squid-5.0.5/src/security/Session.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/security/Session.cc 2021-05-10 21:02:34.000000000 +1200 @@ -116,7 +116,7 @@ #if USE_OPENSSL || USE_GNUTLS const char *errAction = "with no TLS/SSL library"; - int errCode = 0; + Security::LibErrorCode errCode = 0; #if USE_OPENSSL Security::SessionPointer session(Security::NewSessionObject(ctx)); if (!session) { diff -u -r -N squid-5.0.5/src/security/Session.h squid-5.0.6/src/security/Session.h --- squid-5.0.5/src/security/Session.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/security/Session.h 2021-05-10 21:02:34.000000000 +1200 @@ -41,6 +41,8 @@ bool CreateServerSession(const Security::ContextPointer &, const Comm::ConnectionPointer &, Security::PeerOptions &, const char *squidCtx); #if USE_OPENSSL +typedef SSL Connection; + typedef std::shared_ptr SessionPointer; typedef std::unique_ptr> SessionStatePointer; @@ -53,6 +55,8 @@ typedef std::unique_ptr> SessionStatePointer; #else +typedef std::nullptr_t Connection; + typedef std::shared_ptr SessionPointer; typedef std::unique_ptr SessionStatePointer; diff -u -r -N squid-5.0.5/src/servers/FtpServer.cc squid-5.0.6/src/servers/FtpServer.cc --- squid-5.0.5/src/servers/FtpServer.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/servers/FtpServer.cc 2021-05-10 21:02:34.000000000 +1200 @@ -807,7 +807,7 @@ void Ftp::Server::handleFeatReply(const HttpReply *reply, StoreIOBuffer) { - if (pipeline.front()->http->request->errType != ERR_NONE) { + if (pipeline.front()->http->request->error) { writeCustomReply(502, "Server does not support FEAT", reply); return; } @@ -879,7 +879,7 @@ const Http::StreamPointer context(pipeline.front()); assert(context != nullptr); - if (context->http->request->errType != ERR_NONE) { + if (context->http->request->error) { writeCustomReply(502, "Server does not support PASV", reply); return; } @@ -916,7 +916,7 @@ void Ftp::Server::handlePortReply(const HttpReply *reply, StoreIOBuffer) { - if (pipeline.front()->http->request->errType != ERR_NONE) { + if (pipeline.front()->http->request->error) { writeCustomReply(502, "Server does not support PASV (converted from PORT)", reply); return; } @@ -1054,7 +1054,7 @@ void Ftp::Server::handleEprtReply(const HttpReply *reply, StoreIOBuffer) { - if (pipeline.front()->http->request->errType != ERR_NONE) { + if (pipeline.front()->http->request->error) { writeCustomReply(502, "Server does not support PASV (converted from EPRT)", reply); return; } @@ -1067,7 +1067,7 @@ void Ftp::Server::handleEpsvReply(const HttpReply *reply, StoreIOBuffer) { - if (pipeline.front()->http->request->errType != ERR_NONE) { + if (pipeline.front()->http->request->error) { writeCustomReply(502, "Cannot connect to server", reply); return; } @@ -1096,14 +1096,12 @@ MemBuf mb; mb.init(); - if (request->errType != ERR_NONE) - mb.appendf("%i-%s\r\n", scode, errorPageName(request->errType)); + if (request->error) + mb.appendf("%i-%s\r\n", scode, errorPageName(request->error.category)); - if (request->errDetail > 0) { - // XXX: > 0 may not always mean that this is an errno - mb.appendf("%i-Error: (%d) %s\r\n", scode, - request->errDetail, - strerror(request->errDetail)); + if (const auto &detail = request->error.detail) { + mb.appendf("%i-Error-Detail-Brief: " SQUIDSBUFPH "\r\n", scode, SQUIDSBUFPRINT(detail->brief())); + mb.appendf("%i-Error-Detail-Verbose: " SQUIDSBUFPH "\r\n", scode, SQUIDSBUFPRINT(detail->verbose(request))); } #if USE_ADAPTATION @@ -1836,16 +1834,16 @@ static bool Ftp::SupportedCommand(const SBuf &name) { - static std::set BlackList; - if (BlackList.empty()) { + static std::set BlockList; + if (BlockList.empty()) { /* Add FTP commands that Squid cannot relay correctly. */ // We probably do not support AUTH TLS.* and AUTH SSL, // but let's disclaim all AUTH support to KISS, for now. - BlackList.insert(cmdAuth()); + BlockList.insert(cmdAuth()); } // we claim support for all commands that we do not know about - return BlackList.find(name) == BlackList.end(); + return BlockList.find(name) == BlockList.end(); } diff -u -r -N squid-5.0.5/src/servers/Makefile.am squid-5.0.6/src/servers/Makefile.am --- squid-5.0.5/src/servers/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/servers/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -11,10 +11,10 @@ noinst_LTLIBRARIES = libservers.la libservers_la_SOURCES = \ - forward.h \ FtpServer.cc \ FtpServer.h \ Http1Server.cc \ Http1Server.h \ Server.cc \ - Server.h + Server.h \ + forward.h diff -u -r -N squid-5.0.5/src/servers/Makefile.in squid-5.0.6/src/servers/Makefile.in --- squid-5.0.5/src/servers/Makefile.in 2021-02-08 13:40:48.000000000 +1300 +++ squid-5.0.6/src/servers/Makefile.in 2021-05-10 22:57:55.000000000 +1200 @@ -729,13 +729,13 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libservers.la libservers_la_SOURCES = \ - forward.h \ FtpServer.cc \ FtpServer.h \ Http1Server.cc \ Http1Server.h \ Server.cc \ - Server.h + Server.h \ + forward.h all: all-am diff -u -r -N squid-5.0.5/src/servers/Server.cc squid-5.0.6/src/servers/Server.cc --- squid-5.0.5/src/servers/Server.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/servers/Server.cc 2021-05-10 21:02:34.000000000 +1200 @@ -12,9 +12,11 @@ #include "comm.h" #include "comm/Read.h" #include "Debug.h" +#include "error/SysErrorDetail.h" #include "fd.h" #include "fde.h" #include "http/Stream.h" +#include "LogTags.h" #include "MasterXaction.h" #include "servers/Server.h" #include "SquidConfig.h" @@ -146,8 +148,10 @@ case Comm::ENDFILE: // close detected by 0-byte read debugs(33, 5, io.conn << " closed?"); - if (connFinishedWithConn(rd.size)) { - clientConnection->close(); + if (shouldCloseOnEof()) { + LogTagsErrors lte; + lte.aborted = true; + terminateAll(ERR_CLIENT_GONE, lte); return; } @@ -167,9 +171,10 @@ // case Comm::COMM_ERROR: default: // no other flags should ever occur debugs(33, 2, io.conn << ": got flag " << rd.flag << "; " << xstrerr(rd.xerrno)); - checkLogging(); - pipeline.terminateAll(rd.xerrno); - io.conn->close(); + LogTagsErrors lte; + lte.timedout = rd.xerrno == ETIMEDOUT; + lte.aborted = !lte.timedout; // intentionally true for zero rd.xerrno + terminateAll(Error(ERR_CLIENT_GONE, SysErrorDetail::NewIfAny(rd.xerrno)), lte); return; } diff -u -r -N squid-5.0.5/src/servers/Server.h squid-5.0.6/src/servers/Server.h --- squid-5.0.5/src/servers/Server.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/servers/Server.h 2021-05-10 21:02:34.000000000 +1200 @@ -17,6 +17,7 @@ #include "BodyPipe.h" #include "comm/Write.h" #include "CommCalls.h" +#include "log/forward.h" #include "Pipeline.h" #include "sbuf/SBuf.h" #include "servers/forward.h" @@ -36,8 +37,8 @@ virtual bool doneAll() const; virtual void swanSong(); - /// ?? - virtual bool connFinishedWithConn(int size) = 0; + /// whether to stop serving our client after reading EOF on its connection + virtual bool shouldCloseOnEof() const = 0; /// maybe grow the inBuf and schedule Comm::Read() void readSomeData(); @@ -115,12 +116,12 @@ Pipeline pipeline; protected: + /// abort any pending transactions and prevent new ones (by closing) + virtual void terminateAll(const Error &, const LogTagsErrors &) = 0; + void doClientRead(const CommIoCbParams &io); void clientWriteDone(const CommIoCbParams &io); - /// Log the current [attempt at] transaction if nobody else will. - virtual void checkLogging() = 0; - AsyncCall::Pointer reader; ///< set when we are reading AsyncCall::Pointer writer; ///< set when we are writing }; diff -u -r -N squid-5.0.5/src/snmp/Forwarder.cc squid-5.0.6/src/snmp/Forwarder.cc --- squid-5.0.5/src/snmp/Forwarder.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/snmp/Forwarder.cc 2021-05-10 21:02:34.000000000 +1200 @@ -23,7 +23,7 @@ Snmp::Forwarder::Forwarder(const Pdu& aPdu, const Session& aSession, int aFd, const Ip::Address& anAddress): - Ipc::Forwarder(new Request(KidIdentifier, 0, aPdu, aSession, aFd, anAddress), 2), + Ipc::Forwarder(new Request(KidIdentifier, Ipc::RequestId(), aPdu, aSession, aFd, anAddress), 2), fd(aFd) { debugs(49, 5, HERE << "FD " << aFd); @@ -88,7 +88,7 @@ } void -Snmp::SendResponse(unsigned int requestId, const Pdu& pdu) +Snmp::SendResponse(const Ipc::RequestId requestId, const Pdu &pdu) { debugs(49, 5, HERE); // snmpAgentResponse() can modify arg diff -u -r -N squid-5.0.5/src/snmp/Forwarder.h squid-5.0.6/src/snmp/Forwarder.h --- squid-5.0.5/src/snmp/Forwarder.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/snmp/Forwarder.h 2021-05-10 21:02:34.000000000 +1200 @@ -47,7 +47,7 @@ AsyncCall::Pointer closer; ///< comm_close handler for the connection }; -void SendResponse(unsigned int requestId, const Pdu& pdu); +void SendResponse(Ipc::RequestId, const Pdu &); } // namespace Snmp diff -u -r -N squid-5.0.5/src/snmp/Makefile.am squid-5.0.6/src/snmp/Makefile.am --- squid-5.0.5/src/snmp/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/snmp/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -13,7 +13,6 @@ libsnmp_la_SOURCES = \ Forwarder.cc \ Forwarder.h \ - forward.h \ Inquirer.cc \ Inquirer.h \ Pdu.cc \ @@ -25,4 +24,5 @@ Session.cc \ Session.h \ Var.cc \ - Var.h + Var.h \ + forward.h diff -u -r -N squid-5.0.5/src/snmp/Makefile.in squid-5.0.6/src/snmp/Makefile.in --- squid-5.0.5/src/snmp/Makefile.in 2021-02-08 13:40:48.000000000 +1300 +++ squid-5.0.6/src/snmp/Makefile.in 2021-05-10 22:57:56.000000000 +1200 @@ -734,7 +734,6 @@ libsnmp_la_SOURCES = \ Forwarder.cc \ Forwarder.h \ - forward.h \ Inquirer.cc \ Inquirer.h \ Pdu.cc \ @@ -746,7 +745,8 @@ Session.cc \ Session.h \ Var.cc \ - Var.h + Var.h \ + forward.h all: all-am diff -u -r -N squid-5.0.5/src/snmp/Request.cc squid-5.0.6/src/snmp/Request.cc --- squid-5.0.5/src/snmp/Request.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/snmp/Request.cc 2021-05-10 21:02:34.000000000 +1200 @@ -13,7 +13,7 @@ #include "ipc/TypedMsgHdr.h" #include "snmp/Request.h" -Snmp::Request::Request(int aRequestorId, unsigned int aRequestId, +Snmp::Request::Request(const int aRequestorId, const Ipc::RequestId aRequestId, const Pdu& aPdu, const Session& aSession, int aFd, const Ip::Address& anAddress): Ipc::Request(aRequestorId, aRequestId), @@ -21,15 +21,7 @@ { } -Snmp::Request::Request(const Request& request): - Ipc::Request(request.requestorId, request.requestId), - pdu(request.pdu), session(request.session), - fd(request.fd), address(request.address) -{ -} - -Snmp::Request::Request(const Ipc::TypedMsgHdr& msg): - Ipc::Request(0, 0) +Snmp::Request::Request(const Ipc::TypedMsgHdr &msg) { msg.checkType(Ipc::mtSnmpRequest); msg.getPod(requestorId); diff -u -r -N squid-5.0.5/src/snmp/Request.h squid-5.0.6/src/snmp/Request.h --- squid-5.0.5/src/snmp/Request.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/snmp/Request.h 2021-05-10 21:02:34.000000000 +1200 @@ -24,7 +24,7 @@ class Request: public Ipc::Request { public: - Request(int aRequestorId, unsigned int aRequestId, const Pdu& aPdu, + Request(int aRequestorId, Ipc::RequestId aRequestId, const Pdu& aPdu, const Session& aSession, int aFd, const Ip::Address& anAddress); explicit Request(const Ipc::TypedMsgHdr& msg); ///< from recvmsg() @@ -32,9 +32,6 @@ virtual void pack(Ipc::TypedMsgHdr& msg) const; virtual Pointer clone() const; -private: - Request(const Request& request); - public: Pdu pdu; ///< SNMP protocol data unit Session session; ///< SNMP session diff -u -r -N squid-5.0.5/src/snmp/Response.cc squid-5.0.6/src/snmp/Response.cc --- squid-5.0.5/src/snmp/Response.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/snmp/Response.cc 2021-05-10 21:02:34.000000000 +1200 @@ -11,27 +11,16 @@ #include "squid.h" #include "base/TextException.h" #include "ipc/Messages.h" +#include "ipc/RequestId.h" #include "ipc/TypedMsgHdr.h" #include "snmp/Response.h" -std::ostream& Snmp::operator << (std::ostream& os, const Response& response) -{ - os << "response: {requestId: " << response.requestId << '}'; - return os; -} - -Snmp::Response::Response(unsigned int aRequestId): +Snmp::Response::Response(const Ipc::RequestId aRequestId): Ipc::Response(aRequestId), pdu() { } -Snmp::Response::Response(const Response& response): - Ipc::Response(response.requestId), pdu(response.pdu) -{ -} - -Snmp::Response::Response(const Ipc::TypedMsgHdr& msg): - Ipc::Response(0) +Snmp::Response::Response(const Ipc::TypedMsgHdr &msg) { msg.checkType(Ipc::mtSnmpResponse); msg.getPod(requestId); diff -u -r -N squid-5.0.5/src/snmp/Response.h squid-5.0.6/src/snmp/Response.h --- squid-5.0.5/src/snmp/Response.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/snmp/Response.h 2021-05-10 21:02:34.000000000 +1200 @@ -23,21 +23,16 @@ class Response: public Ipc::Response { public: - Response(unsigned int aRequestId); + explicit Response(Ipc::RequestId); ///< sender's constructor explicit Response(const Ipc::TypedMsgHdr& msg); ///< from recvmsg() /* Ipc::Response API */ virtual void pack(Ipc::TypedMsgHdr& msg) const; virtual Ipc::Response::Pointer clone() const; -private: - Response(const Response& response); - public: Pdu pdu; ///< SNMP protocol data unit }; -std::ostream& operator << (std::ostream& os, const Response& response); - } // namespace Snmp #endif /* SQUID_SNMPX_RESPONSE_H */ diff -u -r -N squid-5.0.5/src/snmp_core.cc squid-5.0.6/src/snmp_core.cc --- squid-5.0.5/src/snmp_core.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/snmp_core.cc 2021-05-10 21:02:34.000000000 +1200 @@ -947,7 +947,7 @@ } // if we aborted before the lst octet was found, return false. - safe_free(name); + safe_free(*name); return false; } diff -u -r -N squid-5.0.5/src/ssl/bio.cc squid-5.0.6/src/ssl/bio.cc --- squid-5.0.5/src/ssl/bio.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ssl/bio.cc 2021-05-10 21:02:34.000000000 +1200 @@ -245,7 +245,6 @@ allowSplice(false), allowBump(false), holdWrite_(false), - holdRead_(true), record_(false), parsedHandshake(false), parseError(false), @@ -319,12 +318,6 @@ parseError = true; } - if (holdRead_) { - debugs(83, 7, "Hold flag is set, retry latter. (Hold " << size << "bytes)"); - BIO_set_retry_read(table); - return -1; - } - return giveBuffered(buf, size); } diff -u -r -N squid-5.0.5/src/ssl/bio.h squid-5.0.6/src/ssl/bio.h --- squid-5.0.5/src/ssl/bio.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ssl/bio.h 2021-05-10 21:02:34.000000000 +1200 @@ -151,10 +151,6 @@ bool holdWrite() const {return holdWrite_;} /// Enables or disables the write hold state void holdWrite(bool h) {holdWrite_ = h;} - /// The read hold state - bool holdRead() const {return holdRead_;} - /// Enables or disables the read hold state - void holdRead(bool h) {holdRead_ = h;} /// Enables or disables the input data recording, for internal analysis. void recordInput(bool r) {record_ = r;} /// Whether we can splice or not the SSL stream @@ -171,9 +167,6 @@ /// Return true if the Server Hello parsing failed bool gotHelloFailed() const { return (parsedHandshake && parseError); } - /// \return the server certificates list if received and parsed correctly - const Security::CertList &serverCertificatesIfAny() { return parser_.serverCertificates; } - /// \return the TLS Details advertised by TLS server. const Security::TlsDetails::Pointer &receivedHelloDetails() const {return parser_.details;} @@ -193,7 +186,6 @@ bool allowSplice; ///< True if the SSL stream can be spliced bool allowBump; ///< True if the SSL stream can be bumped bool holdWrite_; ///< The write hold state of the bio. - bool holdRead_; ///< The read hold state of the bio. bool record_; ///< If true the input data recorded to rbuf for internal use bool parsedHandshake; ///< whether we are done parsing TLS Hello bool parseError; ///< error while parsing server hello message diff -u -r -N squid-5.0.5/src/ssl/cert_validate_message.cc squid-5.0.6/src/ssl/cert_validate_message.cc --- squid-5.0.5/src/ssl/cert_validate_message.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ssl/cert_validate_message.cc 2021-05-10 21:02:34.000000000 +1200 @@ -211,44 +211,12 @@ return errors.back(); } -Ssl::CertValidationResponse::RecvdError::RecvdError(const RecvdError &old) -{ - id = old.id; - error_no = old.error_no; - error_reason = old.error_reason; - error_depth = old.error_depth; - setCert(old.cert.get()); -} - -Ssl::CertValidationResponse::RecvdError & Ssl::CertValidationResponse::RecvdError::operator = (const RecvdError &old) -{ - id = old.id; - error_no = old.error_no; - error_reason = old.error_reason; - error_depth = old.error_depth; - setCert(old.cert.get()); - return *this; -} - void Ssl::CertValidationResponse::RecvdError::setCert(X509 *aCert) { cert.resetAndLock(aCert); } -Ssl::CertValidationMsg::CertItem::CertItem(const CertItem &old) -{ - name = old.name; - setCert(old.cert.get()); -} - -Ssl::CertValidationMsg::CertItem & Ssl::CertValidationMsg::CertItem::operator = (const CertItem &old) -{ - name = old.name; - setCert(old.cert.get()); - return *this; -} - void Ssl::CertValidationMsg::CertItem::setCert(X509 *aCert) { diff -u -r -N squid-5.0.5/src/ssl/cert_validate_message.h squid-5.0.6/src/ssl/cert_validate_message.h --- squid-5.0.5/src/ssl/cert_validate_message.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ssl/cert_validate_message.h 2021-05-10 21:02:34.000000000 +1200 @@ -47,15 +47,12 @@ class RecvdError { public: - RecvdError(): id(0), error_no(SSL_ERROR_NONE), cert(NULL), error_depth(-1) {} - RecvdError(const RecvdError &); - RecvdError & operator =(const RecvdError &); void setCert(X509 *); ///< Sets cert to the given certificate - int id; ///< The id of the error - Security::ErrorCode error_no; ///< The OpenSSL error code + int id = 0; ///< The id of the error + Security::ErrorCode error_no = 0; ///< The OpenSSL error code std::string error_reason; ///< A string describing the error Security::CertPointer cert; ///< The broken certificate - int error_depth; ///< The error depth + int error_depth = -1; ///< The error depth }; typedef std::vector RecvdErrors; @@ -89,9 +86,6 @@ public: std::string name; ///< The certificate Id to use Security::CertPointer cert; ///< A pointer to certificate - CertItem(): cert(NULL) {} - CertItem(const CertItem &); - CertItem & operator =(const CertItem &); void setCert(X509 *); ///< Sets cert to the given certificate }; diff -u -r -N squid-5.0.5/src/ssl/ErrorDetail.cc squid-5.0.6/src/ssl/ErrorDetail.cc --- squid-5.0.5/src/ssl/ErrorDetail.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ssl/ErrorDetail.cc 2021-05-10 21:02:34.000000000 +1200 @@ -9,387 +9,11 @@ #include "squid.h" #include "errorpage.h" #include "fatal.h" -#include "html_quote.h" #include "ssl/ErrorDetail.h" +#include "ssl/ErrorDetailManager.h" -#include #include -struct SslErrorEntry { - Security::ErrorCode value; - const char *name; -}; - -static const char *SslErrorDetailDefaultStr = "SSL handshake error (%err_name)"; -//Use std::map to optimize search -typedef std::map SslErrors; -SslErrors TheSslErrors; - -static SslErrorEntry TheSslErrorArray[] = { - { SQUID_X509_V_ERR_INFINITE_VALIDATION, - "SQUID_X509_V_ERR_INFINITE_VALIDATION" - }, - { SQUID_X509_V_ERR_CERT_CHANGE, - "SQUID_X509_V_ERR_CERT_CHANGE" - }, - { SQUID_ERR_SSL_HANDSHAKE, - "SQUID_ERR_SSL_HANDSHAKE" - }, - { SQUID_X509_V_ERR_DOMAIN_MISMATCH, - "SQUID_X509_V_ERR_DOMAIN_MISMATCH" - }, - { X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT, - "X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT" - }, - { X509_V_ERR_UNABLE_TO_GET_CRL, - "X509_V_ERR_UNABLE_TO_GET_CRL" - }, - { X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE, - "X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE" - }, - { X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE, - "X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE" - }, - { X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY, - "X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY" - }, - { X509_V_ERR_CERT_SIGNATURE_FAILURE, - "X509_V_ERR_CERT_SIGNATURE_FAILURE" - }, - { X509_V_ERR_CRL_SIGNATURE_FAILURE, - "X509_V_ERR_CRL_SIGNATURE_FAILURE" - }, - { X509_V_ERR_CERT_NOT_YET_VALID, - "X509_V_ERR_CERT_NOT_YET_VALID" - }, - { X509_V_ERR_CERT_HAS_EXPIRED, - "X509_V_ERR_CERT_HAS_EXPIRED" - }, - { X509_V_ERR_CRL_NOT_YET_VALID, - "X509_V_ERR_CRL_NOT_YET_VALID" - }, - { X509_V_ERR_CRL_HAS_EXPIRED, - "X509_V_ERR_CRL_HAS_EXPIRED" - }, - { X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD, - "X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD" - }, - { X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD, - "X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD" - }, - { X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD, - "X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD" - }, - { X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD, - "X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD" - }, - { X509_V_ERR_OUT_OF_MEM, - "X509_V_ERR_OUT_OF_MEM" - }, - { X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT, - "X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT" - }, - { X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN, - "X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN" - }, - { X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY, - "X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY" - }, - { X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE, - "X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE" - }, - { X509_V_ERR_CERT_CHAIN_TOO_LONG, - "X509_V_ERR_CERT_CHAIN_TOO_LONG" - }, - { X509_V_ERR_CERT_REVOKED, - "X509_V_ERR_CERT_REVOKED" - }, - { X509_V_ERR_INVALID_CA, - "X509_V_ERR_INVALID_CA" - }, - { X509_V_ERR_PATH_LENGTH_EXCEEDED, - "X509_V_ERR_PATH_LENGTH_EXCEEDED" - }, - { X509_V_ERR_INVALID_PURPOSE, - "X509_V_ERR_INVALID_PURPOSE" - }, - { X509_V_ERR_CERT_UNTRUSTED, - "X509_V_ERR_CERT_UNTRUSTED" - }, - { X509_V_ERR_CERT_REJECTED, - "X509_V_ERR_CERT_REJECTED" - }, - { X509_V_ERR_SUBJECT_ISSUER_MISMATCH, - "X509_V_ERR_SUBJECT_ISSUER_MISMATCH" - }, - { X509_V_ERR_AKID_SKID_MISMATCH, - "X509_V_ERR_AKID_SKID_MISMATCH" - }, - { X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH, - "X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH" - }, - { X509_V_ERR_KEYUSAGE_NO_CERTSIGN, - "X509_V_ERR_KEYUSAGE_NO_CERTSIGN" - }, -#if defined(X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER) - { - X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER, //33 - "X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER" - }, -#endif -#if defined(X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION) - { - X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION, //34 - "X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION" - }, -#endif -#if defined(X509_V_ERR_KEYUSAGE_NO_CRL_SIGN) - { - X509_V_ERR_KEYUSAGE_NO_CRL_SIGN, //35 - "X509_V_ERR_KEYUSAGE_NO_CRL_SIGN" - }, -#endif -#if defined(X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION) - { - X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION, //36 - "X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION" - }, -#endif -#if defined(X509_V_ERR_INVALID_NON_CA) - { - X509_V_ERR_INVALID_NON_CA, //37 - "X509_V_ERR_INVALID_NON_CA" - }, -#endif -#if defined(X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED) - { - X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED, //38 - "X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED" - }, -#endif -#if defined(X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE) - { - X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE, //39 - "X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE" - }, -#endif -#if defined(X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED) - { - X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED, //40 - "X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED" - }, -#endif -#if defined(X509_V_ERR_INVALID_EXTENSION) - { - X509_V_ERR_INVALID_EXTENSION, //41 - "X509_V_ERR_INVALID_EXTENSION" - }, -#endif -#if defined(X509_V_ERR_INVALID_POLICY_EXTENSION) - { - X509_V_ERR_INVALID_POLICY_EXTENSION, //42 - "X509_V_ERR_INVALID_POLICY_EXTENSION" - }, -#endif -#if defined(X509_V_ERR_NO_EXPLICIT_POLICY) - { - X509_V_ERR_NO_EXPLICIT_POLICY, //43 - "X509_V_ERR_NO_EXPLICIT_POLICY" - }, -#endif -#if defined(X509_V_ERR_DIFFERENT_CRL_SCOPE) - { - X509_V_ERR_DIFFERENT_CRL_SCOPE, //44 - "X509_V_ERR_DIFFERENT_CRL_SCOPE" - }, -#endif -#if defined(X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE) - { - X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE, //45 - "X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE" - }, -#endif -#if defined(X509_V_ERR_UNNESTED_RESOURCE) - { - X509_V_ERR_UNNESTED_RESOURCE, //46 - "X509_V_ERR_UNNESTED_RESOURCE" - }, -#endif -#if defined(X509_V_ERR_PERMITTED_VIOLATION) - { - X509_V_ERR_PERMITTED_VIOLATION, //47 - "X509_V_ERR_PERMITTED_VIOLATION" - }, -#endif -#if defined(X509_V_ERR_EXCLUDED_VIOLATION) - { - X509_V_ERR_EXCLUDED_VIOLATION, //48 - "X509_V_ERR_EXCLUDED_VIOLATION" - }, -#endif -#if defined(X509_V_ERR_SUBTREE_MINMAX) - { - X509_V_ERR_SUBTREE_MINMAX, //49 - "X509_V_ERR_SUBTREE_MINMAX" - }, -#endif - { X509_V_ERR_APPLICATION_VERIFICATION, //50 - "X509_V_ERR_APPLICATION_VERIFICATION" - }, -#if defined(X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE) - { - X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE, //51 - "X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE" - }, -#endif -#if defined(X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX) - { - X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX, //52 - "X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX" - }, -#endif -#if defined(X509_V_ERR_UNSUPPORTED_NAME_SYNTAX) - { - X509_V_ERR_UNSUPPORTED_NAME_SYNTAX, //53 - "X509_V_ERR_UNSUPPORTED_NAME_SYNTAX" - }, -#endif -#if defined(X509_V_ERR_CRL_PATH_VALIDATION_ERROR) - { - X509_V_ERR_CRL_PATH_VALIDATION_ERROR, //54 - "X509_V_ERR_CRL_PATH_VALIDATION_ERROR" - }, -#endif -#if defined(X509_V_ERR_PATH_LOOP) - { - X509_V_ERR_PATH_LOOP, //55 - "X509_V_ERR_PATH_LOOP" - }, -#endif -#if defined(X509_V_ERR_SUITE_B_INVALID_VERSION) - { - X509_V_ERR_SUITE_B_INVALID_VERSION, //56 - "X509_V_ERR_SUITE_B_INVALID_VERSION" - }, -#endif -#if defined(X509_V_ERR_SUITE_B_INVALID_ALGORITHM) - { - X509_V_ERR_SUITE_B_INVALID_ALGORITHM, //57 - "X509_V_ERR_SUITE_B_INVALID_ALGORITHM" - }, -#endif -#if defined(X509_V_ERR_SUITE_B_INVALID_CURVE) - { - X509_V_ERR_SUITE_B_INVALID_CURVE, //58 - "X509_V_ERR_SUITE_B_INVALID_CURVE" - }, -#endif -#if defined(X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM) - { - X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM, //59 - "X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM" - }, -#endif -#if defined(X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED) - { - X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED, //60 - "X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED" - }, -#endif -#if defined(X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256) - { - X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256, //61 - "X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256" - }, -#endif -#if defined(X509_V_ERR_HOSTNAME_MISMATCH) - { - X509_V_ERR_HOSTNAME_MISMATCH, //62 - "X509_V_ERR_HOSTNAME_MISMATCH" - }, -#endif -#if defined(X509_V_ERR_EMAIL_MISMATCH) - { - X509_V_ERR_EMAIL_MISMATCH, //63 - "X509_V_ERR_EMAIL_MISMATCH" - }, -#endif -#if defined(X509_V_ERR_IP_ADDRESS_MISMATCH) - { - X509_V_ERR_IP_ADDRESS_MISMATCH, //64 - "X509_V_ERR_IP_ADDRESS_MISMATCH" - }, -#endif -#if defined(X509_V_ERR_DANE_NO_MATCH) - { - X509_V_ERR_DANE_NO_MATCH, //65 - "X509_V_ERR_DANE_NO_MATCH" - }, -#endif -#if defined(X509_V_ERR_EE_KEY_TOO_SMALL) - { - X509_V_ERR_EE_KEY_TOO_SMALL, //66 - "X509_V_ERR_EE_KEY_TOO_SMALL" - }, -#endif -#if defined(X509_V_ERR_CA_KEY_TOO_SMALL) - { - X509_V_ERR_CA_KEY_TOO_SMALL, //67 - "X509_V_ERR_CA_KEY_TOO_SMALL" - }, -#endif -#if defined(X509_V_ERR_CA_MD_TOO_WEAK) - { - X509_V_ERR_CA_MD_TOO_WEAK, //68 - "X509_V_ERR_CA_MD_TOO_WEAK" - }, -#endif -#if defined(X509_V_ERR_INVALID_CALL) - { - X509_V_ERR_INVALID_CALL, //69 - "X509_V_ERR_INVALID_CALL" - }, -#endif -#if defined(X509_V_ERR_STORE_LOOKUP) - { - X509_V_ERR_STORE_LOOKUP, //70 - "X509_V_ERR_STORE_LOOKUP" - }, -#endif -#if defined(X509_V_ERR_NO_VALID_SCTS) - { - X509_V_ERR_NO_VALID_SCTS, //71 - "X509_V_ERR_NO_VALID_SCTS" - }, -#endif -#if defined(X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION) - { - X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION, //72 - "X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION" - }, -#endif -#if defined(X509_V_ERR_OCSP_VERIFY_NEEDED) - { - X509_V_ERR_OCSP_VERIFY_NEEDED, //73 - "X509_V_ERR_OCSP_VERIFY_NEEDED" - }, -#endif -#if defined(X509_V_ERR_OCSP_VERIFY_FAILED) - { - X509_V_ERR_OCSP_VERIFY_FAILED, //74 - "X509_V_ERR_OCSP_VERIFY_FAILED" - }, -#endif -#if defined(X509_V_ERR_OCSP_CERT_UNKNOWN) - { - X509_V_ERR_OCSP_CERT_UNKNOWN, //75 - "X509_V_ERR_OCSP_CERT_UNKNOWN" - }, -#endif - { SSL_ERROR_NONE, "SSL_ERROR_NONE"}, - {SSL_ERROR_NONE, NULL} -}; - static const char *OptionalSslErrors[] = { "X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER", "X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION", @@ -475,14 +99,6 @@ typedef std::map SslErrorShortcuts; SslErrorShortcuts TheSslErrorShortcuts; -static void loadSslErrorMap() -{ - assert(TheSslErrors.empty()); - for (int i = 0; TheSslErrorArray[i].name; ++i) { - TheSslErrors[TheSslErrorArray[i].value] = &TheSslErrorArray[i]; - } -} - static void loadSslErrorShortcutsMap() { assert(TheSslErrorShortcuts.empty()); @@ -490,16 +106,6 @@ TheSslErrorShortcuts[TheSslErrorShortcutsArray[i].name] = TheSslErrorShortcutsArray[i].errors; } -Security::ErrorCode Ssl::GetErrorCode(const char *name) -{ - //TODO: use a std::map? - for (int i = 0; TheSslErrorArray[i].name != NULL; ++i) { - if (strcmp(name, TheSslErrorArray[i].name) == 0) - return TheSslErrorArray[i].value; - } - return SSL_ERROR_NONE; -} - bool Ssl::ParseErrorString(const char *name, Security::Errors &errors) { @@ -513,7 +119,8 @@ if (xisdigit(*name)) { const long int value = strtol(name, NULL, 0); - if (SQUID_SSL_ERROR_MIN <= value && value <= SQUID_SSL_ERROR_MAX) { + if ((SQUID_TLS_ERR_OFFSET < value && value < SQUID_TLS_ERR_END) || // custom + (value >= 0)) { // an official error, including SSL_ERROR_NONE errors.emplace(value); return true; } @@ -537,20 +144,6 @@ return false; // not reached } -const char *Ssl::GetErrorName(Security::ErrorCode value, const bool prefixRawCode) -{ - if (TheSslErrors.empty()) - loadSslErrorMap(); - - const SslErrors::const_iterator it = TheSslErrors.find(value); - if (it != TheSslErrors.end()) - return it->second->name; - - static char tmpBuffer[128]; - snprintf(tmpBuffer, sizeof(tmpBuffer), "%s%d", prefixRawCode ? "SSL_ERR=" : "", (int)value); - return tmpBuffer; -} - bool Ssl::ErrorIsOptional(const char *name) { @@ -567,248 +160,3 @@ return ErrorDetailsManager::GetInstance().getDefaultErrorDescr(value); } -Ssl::ErrorDetail::err_frm_code Ssl::ErrorDetail::ErrorFormatingCodes[] = { - {"ssl_subject", &Ssl::ErrorDetail::subject}, - {"ssl_ca_name", &Ssl::ErrorDetail::ca_name}, - {"ssl_cn", &Ssl::ErrorDetail::cn}, - {"ssl_notbefore", &Ssl::ErrorDetail::notbefore}, - {"ssl_notafter", &Ssl::ErrorDetail::notafter}, - {"err_name", &Ssl::ErrorDetail::err_code}, - {"ssl_error_descr", &Ssl::ErrorDetail::err_descr}, - {"ssl_lib_error", &Ssl::ErrorDetail::err_lib_error}, - {NULL,NULL} -}; - -/** - * The subject of the current certification in text form - */ -const char *Ssl::ErrorDetail::subject() const -{ - if (broken_cert.get()) { - static char tmpBuffer[256]; // A temporary buffer - if (X509_NAME_oneline(X509_get_subject_name(broken_cert.get()), tmpBuffer, sizeof(tmpBuffer))) { - // quote to avoid possible html code injection through - // certificate subject - return html_quote(tmpBuffer); - } - } - return "[Not available]"; -} - -// helper function to be used with Ssl::matchX509CommonNames -static int copy_cn(void *check_data, ASN1_STRING *cn_data) -{ - String *str = (String *)check_data; - if (!str) // no data? abort - return 0; - if (cn_data && cn_data->length) { - if (str->size() > 0) - str->append(", "); - str->append((const char *)cn_data->data, cn_data->length); - } - return 1; -} - -/** - * The list with certificates cn and alternate names - */ -const char *Ssl::ErrorDetail::cn() const -{ - if (broken_cert.get()) { - static String tmpStr; ///< A temporary string buffer - tmpStr.clean(); - Ssl::matchX509CommonNames(broken_cert.get(), &tmpStr, copy_cn); - if (tmpStr.size()) { - // quote to avoid possible html code injection through - // certificate subject - return html_quote(tmpStr.termedBuf()); - } - } - return "[Not available]"; -} - -/** - * The issuer name - */ -const char *Ssl::ErrorDetail::ca_name() const -{ - if (broken_cert.get()) { - static char tmpBuffer[256]; // A temporary buffer - if (X509_NAME_oneline(X509_get_issuer_name(broken_cert.get()), tmpBuffer, sizeof(tmpBuffer))) { - // quote to avoid possible html code injection through - // certificate issuer subject - return html_quote(tmpBuffer); - } - } - return "[Not available]"; -} - -/** - * The certificate "not before" field - */ -const char *Ssl::ErrorDetail::notbefore() const -{ - if (broken_cert.get()) { - if (const auto tm = X509_getm_notBefore(broken_cert.get())) { - static char tmpBuffer[256]; // A temporary buffer - Ssl::asn1timeToString(tm, tmpBuffer, sizeof(tmpBuffer)); - return tmpBuffer; - } - } - return "[Not available]"; -} - -/** - * The certificate "not after" field - */ -const char *Ssl::ErrorDetail::notafter() const -{ - if (broken_cert.get()) { - if (const auto tm = X509_getm_notAfter(broken_cert.get())) { - static char tmpBuffer[256]; // A temporary buffer - Ssl::asn1timeToString(tm, tmpBuffer, sizeof(tmpBuffer)); - return tmpBuffer; - } - } - return "[Not available]"; -} - -/** - * The string representation of the error_no - */ -const char *Ssl::ErrorDetail::err_code() const -{ - // We can use the GetErrorName but using the detailEntry is faster, - // so try it first. - if (const char *err = detailEntry.name.termedBuf()) - return err; - - // error details not loaded yet or not defined in error_details.txt, - // try the GetErrorName... - return GetErrorName(error_no); -} - -/** - * A short description of the error_no - */ -const char *Ssl::ErrorDetail::err_descr() const -{ - if (error_no == SSL_ERROR_NONE) - return "[No Error]"; - if (const char *err = detailEntry.descr.termedBuf()) - return err; - return "[Not available]"; -} - -const char *Ssl::ErrorDetail::err_lib_error() const -{ - if (errReason.size() > 0) - return errReason.termedBuf(); - else if (lib_error_no != SSL_ERROR_NONE) - return Security::ErrorString(lib_error_no); - else - return "[No Error]"; -} - -/** - * Converts the code to a string value. Supported formating codes are: - * - * Error meta information: - * %err_name: The name of a high-level SSL error (e.g., X509_V_ERR_*) - * %ssl_error_descr: A short description of the SSL error - * %ssl_lib_error: human-readable low-level error string by Security::ErrorString() - * - * Certificate information extracted from broken (not necessarily peer!) cert - * %ssl_cn: The comma-separated list of common and alternate names - * %ssl_subject: The certificate subject - * %ssl_ca_name: The certificate issuer name - * %ssl_notbefore: The certificate "not before" field - * %ssl_notafter: The certificate "not after" field - * - \retval the length of the code (the number of characters will be replaced by value) -*/ -int Ssl::ErrorDetail::convert(const char *code, const char **value) const -{ - *value = "-"; - for (int i=0; ErrorFormatingCodes[i].code!=NULL; ++i) { - const int len = strlen(ErrorFormatingCodes[i].code); - if (strncmp(code,ErrorFormatingCodes[i].code, len)==0) { - ErrorDetail::fmt_action_t action = ErrorFormatingCodes[i].fmt_action; - *value = (this->*action)(); - return len; - } - } - // TODO: Support logformat %codes. - return 0; -} - -/** - * It uses the convert method to build the string errDetailStr using - * a template message for the current SSL error. The template messages - * can also contain normal error pages formating codes. - * Currently the error template messages are hard-coded - */ -void Ssl::ErrorDetail::buildDetail() const -{ - char const *s = NULL; - char const *p; - char const *t; - int code_len = 0; - - if (ErrorDetailsManager::GetInstance().getErrorDetail(error_no, request, detailEntry)) - s = detailEntry.detail.termedBuf(); - - if (!s) - s = SslErrorDetailDefaultStr; - - assert(s); - while ((p = strchr(s, '%'))) { - errDetailStr.append(s, p - s); - code_len = convert(++p, &t); - if (code_len) - errDetailStr.append(t); - else - errDetailStr.append("%"); - s = p + code_len; - } - errDetailStr.append(s, strlen(s)); -} - -const String &Ssl::ErrorDetail::toString() const -{ - if (errDetailStr.size() == 0) - buildDetail(); - return errDetailStr; -} - -Ssl::ErrorDetail::ErrorDetail( Security::ErrorCode err_no, X509 *cert, X509 *broken, const char *aReason): error_no (err_no), lib_error_no(SSL_ERROR_NONE), errReason(aReason) -{ - if (cert) - peer_cert.resetAndLock(cert); - - if (broken) - broken_cert.resetAndLock(broken); - else - broken_cert.resetAndLock(cert); - - detailEntry.error_no = SSL_ERROR_NONE; -} - -Ssl::ErrorDetail::ErrorDetail(Ssl::ErrorDetail const &anErrDetail) -{ - error_no = anErrDetail.error_no; - request = anErrDetail.request; - - if (anErrDetail.peer_cert.get()) { - peer_cert.resetAndLock(anErrDetail.peer_cert.get()); - } - - if (anErrDetail.broken_cert.get()) { - broken_cert.resetAndLock(anErrDetail.broken_cert.get()); - } - - detailEntry = anErrDetail.detailEntry; - - lib_error_no = anErrDetail.lib_error_no; -} - diff -u -r -N squid-5.0.5/src/ssl/ErrorDetail.h squid-5.0.6/src/ssl/ErrorDetail.h --- squid-5.0.5/src/ssl/ErrorDetail.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ssl/ErrorDetail.h 2021-05-10 21:02:34.000000000 +1200 @@ -9,10 +9,10 @@ #ifndef _SQUID_SSL_ERROR_DETAIL_H #define _SQUID_SSL_ERROR_DETAIL_H -#include "err_detail_type.h" -#include "ErrorDetailManager.h" -#include "HttpRequest.h" -#include "security/forward.h" +#include "security/ErrorDetail.h" + +// TODO: Remove Security::X wrappers and move the remaining configurable error +// details (i.e. templates/error-details.txt) code to src/security/ErrorDetail. namespace Ssl { @@ -24,11 +24,19 @@ bool ParseErrorString(const char *name, Security::Errors &); /// The Security::ErrorCode code of the error described by "name". -Security::ErrorCode GetErrorCode(const char *name); +inline Security::ErrorCode +GetErrorCode(const char *name) +{ + return Security::ErrorCodeFromName(name); +} /// \return string representation of a known TLS error (or a raw error code) /// \param prefixRawCode whether to prefix raw codes with "SSL_ERR=" -const char *GetErrorName(Security::ErrorCode value, const bool prefixRawCode = false); +inline const char * +GetErrorName(const Security::ErrorCode code, const bool prefixRawCode = false) +{ + return Security::ErrorNameFromCode(code, prefixRawCode); +} /// A short description of the TLS error "value" const char *GetErrorDescr(Security::ErrorCode value); @@ -36,63 +44,6 @@ /// \return true if the TLS error is optional and may not be supported by current squid version bool ErrorIsOptional(const char *name); -/** - * Used to pass SSL error details to the error pages returned to the - * end user. - */ -class ErrorDetail -{ -public: - // if broken certificate is nil, the peer certificate is broken - ErrorDetail(Security::ErrorCode err_no, X509 *peer, X509 *broken, const char *aReason = NULL); - ErrorDetail(ErrorDetail const &); - const String &toString() const; ///< An error detail string to embed in squid error pages - void useRequest(HttpRequest *aRequest) { if (aRequest != NULL) request = aRequest;} - /// The error name to embed in squid error pages - const char *errorName() const {return err_code();} - /// The error no - Security::ErrorCode errorNo() const {return error_no;} - ///Sets the low-level error returned by OpenSSL ERR_get_error() - void setLibError(unsigned long lib_err_no) {lib_error_no = lib_err_no;} - /// the peer certificate - X509 *peerCert() { return peer_cert.get(); } - /// peer or intermediate certificate that failed validation - X509 *brokenCert() {return broken_cert.get(); } -private: - typedef const char * (ErrorDetail::*fmt_action_t)() const; - /** - * Holds a formating code and its conversion method - */ - class err_frm_code - { - public: - const char *code; ///< The formating code - fmt_action_t fmt_action; ///< A pointer to the conversion method - }; - static err_frm_code ErrorFormatingCodes[]; ///< The supported formating codes - - const char *subject() const; - const char *ca_name() const; - const char *cn() const; - const char *notbefore() const; - const char *notafter() const; - const char *err_code() const; - const char *err_descr() const; - const char *err_lib_error() const; - - int convert(const char *code, const char **value) const; - void buildDetail() const; - - mutable String errDetailStr; ///< Caches the error detail message - Security::ErrorCode error_no; ///< The error code - unsigned long lib_error_no; ///< low-level error returned by OpenSSL ERR_get_error(3SSL) - Security::CertPointer peer_cert; ///< A pointer to the peer certificate - Security::CertPointer broken_cert; ///< A pointer to the broken certificate (peer or intermediate) - String errReason; ///< A custom reason for error, else retrieved from OpenSSL. - mutable ErrorDetailEntry detailEntry; - HttpRequest::Pointer request; -}; - }//namespace Ssl #endif diff -u -r -N squid-5.0.5/src/ssl/ErrorDetailManager.h squid-5.0.6/src/ssl/ErrorDetailManager.h --- squid-5.0.5/src/ssl/ErrorDetailManager.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ssl/ErrorDetailManager.h 2021-05-10 21:02:34.000000000 +1200 @@ -25,7 +25,7 @@ class ErrorDetailEntry { public: - Security::ErrorCode error_no; ///< The SSL error code + Security::ErrorCode error_no = 0; ///< TLS error; \see Security::ErrorCode String name; ///< a name for the error String detail; ///< for error page %D macro expansion; may contain macros String descr; ///< short error description (for use in debug messages or error pages) diff -u -r -N squid-5.0.5/src/ssl/gadgets.h squid-5.0.6/src/ssl/gadgets.h --- squid-5.0.5/src/ssl/gadgets.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ssl/gadgets.h 2021-05-10 21:02:34.000000000 +1200 @@ -70,6 +70,7 @@ typedef std::unique_ptr> X509_EXTENSION_Pointer; +typedef std::unique_ptr> X509_STORE_CTX_Pointer; /** \ingroup SslCrtdSslAPI * Create 1024 bits rsa key. diff -u -r -N squid-5.0.5/src/ssl/Makefile.am squid-5.0.6/src/ssl/Makefile.am --- squid-5.0.5/src/ssl/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ssl/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -12,12 +12,6 @@ ## SSL stuff used by main Squid but not by certgen helper libsslsquid_la_SOURCES = \ - bio.cc \ - bio.h \ - cert_validate_message.cc \ - cert_validate_message.h \ - context_storage.cc \ - context_storage.h \ Config.cc \ Config.h \ ErrorDetail.cc \ @@ -29,14 +23,20 @@ ProxyCerts.h \ ServerBump.cc \ ServerBump.h \ - support.cc \ - support.h \ + bio.cc \ + bio.h \ + cert_validate_message.cc \ + cert_validate_message.h \ + context_storage.cc \ + context_storage.h \ helper.cc \ - helper.h + helper.h \ + support.cc \ + support.h ## SSL stuff used by main Squid and certgen helper libsslutil_la_SOURCES = \ - gadgets.cc \ - gadgets.h \ crtd_message.cc \ - crtd_message.h + crtd_message.h \ + gadgets.cc \ + gadgets.h diff -u -r -N squid-5.0.5/src/ssl/Makefile.in squid-5.0.6/src/ssl/Makefile.in --- squid-5.0.5/src/ssl/Makefile.in 2021-02-08 13:40:48.000000000 +1300 +++ squid-5.0.6/src/ssl/Makefile.in 2021-05-10 22:57:56.000000000 +1200 @@ -164,17 +164,17 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libsslsquid_la_LIBADD = -am_libsslsquid_la_OBJECTS = bio.lo cert_validate_message.lo \ - context_storage.lo Config.lo ErrorDetail.lo \ +am_libsslsquid_la_OBJECTS = Config.lo ErrorDetail.lo \ ErrorDetailManager.lo PeekingPeerConnector.lo ServerBump.lo \ - support.lo helper.lo + bio.lo cert_validate_message.lo context_storage.lo helper.lo \ + support.lo libsslsquid_la_OBJECTS = $(am_libsslsquid_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libsslutil_la_LIBADD = -am_libsslutil_la_OBJECTS = gadgets.lo crtd_message.lo +am_libsslutil_la_OBJECTS = crtd_message.lo gadgets.lo libsslutil_la_OBJECTS = $(am_libsslutil_la_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) @@ -741,12 +741,6 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libsslsquid.la libsslutil.la libsslsquid_la_SOURCES = \ - bio.cc \ - bio.h \ - cert_validate_message.cc \ - cert_validate_message.h \ - context_storage.cc \ - context_storage.h \ Config.cc \ Config.h \ ErrorDetail.cc \ @@ -758,16 +752,22 @@ ProxyCerts.h \ ServerBump.cc \ ServerBump.h \ - support.cc \ - support.h \ + bio.cc \ + bio.h \ + cert_validate_message.cc \ + cert_validate_message.h \ + context_storage.cc \ + context_storage.h \ helper.cc \ - helper.h + helper.h \ + support.cc \ + support.h libsslutil_la_SOURCES = \ - gadgets.cc \ - gadgets.h \ crtd_message.cc \ - crtd_message.h + crtd_message.h \ + gadgets.cc \ + gadgets.h all: all-am diff -u -r -N squid-5.0.5/src/ssl/PeekingPeerConnector.cc squid-5.0.6/src/ssl/PeekingPeerConnector.cc --- squid-5.0.5/src/ssl/PeekingPeerConnector.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ssl/PeekingPeerConnector.cc 2021-05-10 21:02:34.000000000 +1200 @@ -15,6 +15,7 @@ #include "fde.h" #include "http/Stream.h" #include "HttpRequest.h" +#include "security/ErrorDetail.h" #include "security/NegotiationHistory.h" #include "SquidConfig.h" #include "ssl/bio.h" @@ -222,8 +223,9 @@ if (Ssl::ServerBump *serverBump = request->clientConnectionManager->serverBump()) { if (!serverBump->serverCert.get()) { // remember the server certificate from the ErrorDetail object - if (error && error->detail && error->detail->peerCert()) - serverBump->serverCert.resetAndLock(error->detail->peerCert()); + const auto errDetail = dynamic_cast(error ? error->detail.getRaw() : nullptr); + if (errDetail && errDetail->peerCert()) + serverBump->serverCert.resetAndLock(errDetail->peerCert()); else { handleServerCertificate(); } @@ -292,7 +294,7 @@ } void -Ssl::PeekingPeerConnector::noteNegotiationError(const int result, const int ssl_error, const int ssl_lib_error) +Ssl::PeekingPeerConnector::noteNegotiationError(const Security::ErrorDetailPointer &errorDetail) { const int fd = serverConnection()->fd; Security::SessionPointer session(fd_table[fd].ssl); @@ -336,18 +338,21 @@ // thus hiding them. // Abort if no certificate found probably because of malformed or // unsupported server Hello message (TODO: make configurable). + // TODO: Add/use a positive "successfully validated server cert" signal + // instead of relying on the "![presumably_]validation_error && serverCert" + // signal combo. if (!SSL_get_ex_data(session.get(), ssl_ex_index_ssl_error_detail) && (srvBio->bumpMode() == Ssl::bumpPeek || srvBio->bumpMode() == Ssl::bumpStare) && srvBio->holdWrite()) { Security::CertPointer serverCert(SSL_get_peer_certificate(session.get())); if (serverCert) { - debugs(81, 3, "Error (" << Security::ErrorString(ssl_lib_error) << ") but, hold write on SSL connection on FD " << fd); + debugs(81, 3, "hold TLS write on FD " << fd << " despite " << errorDetail); checkForPeekAndSplice(); return; } } // else call parent noteNegotiationError to produce an error page - Security::PeerConnector::noteNegotiationError(result, ssl_error, ssl_lib_error); + Security::PeerConnector::noteNegotiationError(errorDetail); } void diff -u -r -N squid-5.0.5/src/ssl/PeekingPeerConnector.h squid-5.0.6/src/ssl/PeekingPeerConnector.h --- squid-5.0.5/src/ssl/PeekingPeerConnector.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ssl/PeekingPeerConnector.h 2021-05-10 21:02:34.000000000 +1200 @@ -39,7 +39,7 @@ virtual bool initialize(Security::SessionPointer &); virtual Security::ContextPointer getTlsContext(); virtual void noteWantWrite(); - virtual void noteNegotiationError(const int result, const int ssl_error, const int ssl_lib_error); + virtual void noteNegotiationError(const Security::ErrorDetailPointer &); virtual void noteNegotiationDone(ErrorState *error); /// Updates associated client connection manager members diff -u -r -N squid-5.0.5/src/ssl/support.cc squid-5.0.6/src/ssl/support.cc --- squid-5.0.5/src/ssl/support.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ssl/support.cc 2021-05-10 21:02:34.000000000 +1200 @@ -24,6 +24,7 @@ #include "globals.h" #include "ipc/MemMap.h" #include "security/CertError.h" +#include "security/ErrorDetail.h" #include "security/Session.h" #include "SquidConfig.h" #include "SquidTime.h" @@ -36,7 +37,7 @@ #include // TODO: Move ssl_ex_index_* global variables from global.cc here. -int ssl_ex_index_ssl_untrusted_chain = -1; +static int ssl_ex_index_verify_callback_parameters = -1; static Ssl::CertsIndexedList SquidUntrustedCerts; @@ -253,7 +254,8 @@ return matchX509CommonNames(cert, (void *)server, check_domain); } -/// \ingroup ServerProtocolSSLInternal +/// adjusts OpenSSL validation results for each verified certificate in ctx +/// OpenSSL "verify_callback function" (\ref OpenSSL_vcb_disambiguation) static int ssl_verify_cb(int ok, X509_STORE_CTX * ctx) { @@ -311,6 +313,16 @@ } } + if (!ok && error_no == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY) { + if (const auto params = Ssl::VerifyCallbackParameters::Find(*ssl)) { + if (params->callerHandlesMissingCertificates) { + debugs(83, 3, "hiding X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY"); + params->hidMissingIssuer = true; + ok = 1; + } + } + } + if (!ok) { Security::CertPointer broken_cert; broken_cert.resetAndLock(X509_STORE_CTX_get_current_cert(ctx)); @@ -379,11 +391,12 @@ broken_cert.resetAndLock(last_used_cert); } - auto *errDetail = new Ssl::ErrorDetail(error_no, peer_cert.get(), broken_cert.get()); - if (!SSL_set_ex_data(ssl, ssl_ex_index_ssl_error_detail, errDetail)) { - debugs(83, 2, "Failed to set Ssl::ErrorDetail in ssl_verify_cb: Certificate " << buffer); - delete errDetail; - } + std::unique_ptr edp(new Security::ErrorDetail::Pointer( + new Security::ErrorDetail(error_no, peer_cert, broken_cert))); + if (SSL_set_ex_data(ssl, ssl_ex_index_ssl_error_detail, edp.get())) + edp.release(); + else + debugs(83, 2, "failed to store a " << buffer << " error detail: " << *edp); } return ok; @@ -405,7 +418,7 @@ mode = SSL_VERIFY_NONE; } else if (flags & SSL_FLAG_CONDITIONAL_AUTH) { - debugs(83, DBG_PARSE_NOTE(3), "will request the client certificate but ignore its absense"); + debugs(83, DBG_PARSE_NOTE(3), "will request the client certificate but ignore its absence"); mode = SSL_VERIFY_PEER; } else { @@ -423,6 +436,126 @@ SSL_CTX_set_verify(ctx.get(),SSL_VERIFY_NONE,nullptr); } +static int VerifyCtxCertificates(X509_STORE_CTX *ctx, STACK_OF(X509) *extraCerts); + +bool +Ssl::VerifyConnCertificates(Security::Connection &sconn, const Ssl::X509_STACK_Pointer &extraCerts) +{ + const auto peerCertificatesChain = SSL_get_peer_cert_chain(&sconn); + + // TODO: Replace debugs/return false with returning ErrorDetail::Pointer. + // Using Security::ErrorDetail terminology, errors in _this_ function are + // "non-validation errors", but VerifyCtxCertificates() errors may be + // "certificate validation errors". Callers detail SQUID_TLS_ERR_CONNECT. + // Some details should be created right here. Others extracted from OpenSSL. + // Why not throw? Most of the reasons detailed in the following commit apply + // here as well: https://github.com/measurement-factory/squid/commit/e862d33 + + if (!peerCertificatesChain || sk_X509_num(peerCertificatesChain) == 0) { + debugs(83, 2, "no server certificates"); + return false; + } + + const auto verificationStore = SSL_CTX_get_cert_store(SSL_get_SSL_CTX(&sconn)); + if (!verificationStore) { + debugs(83, 2, "no certificate store"); + return false; + } + + const X509_STORE_CTX_Pointer storeCtx(X509_STORE_CTX_new()); + if (!storeCtx) { + debugs(83, 2, "cannot create X509_STORE_CTX; likely OOM"); + return false; + } + + const auto peerCert = sk_X509_value(peerCertificatesChain, 0); + if (!X509_STORE_CTX_init(storeCtx.get(), verificationStore, peerCert, peerCertificatesChain)) { + debugs(83, 2, "cannot initialize X509_STORE_CTX"); + return false; + } + +#if defined(SSL_CERT_FLAG_SUITEB_128_LOS) + // overwrite context Suite B (RFC 5759) flags with connection non-defaults + // SSL_set_cert_flags() return type is long, but its implementation actually + // returns an unsigned long flags value expected by X509_STORE_CTX_set_flags + const unsigned long certFlags = SSL_set_cert_flags(&sconn, 0); + if (const auto suiteBflags = certFlags & SSL_CERT_FLAG_SUITEB_128_LOS) + X509_STORE_CTX_set_flags(storeCtx.get(), suiteBflags); +#endif + + if (!X509_STORE_CTX_set_ex_data(storeCtx.get(), SSL_get_ex_data_X509_STORE_CTX_idx(), &sconn)) { + debugs(83, 2, "cannot attach SSL object to X509_STORE_CTX"); + return false; + } + + // If we ever add DANE support to Squid, we will supply DANE details here: + // X509_STORE_CTX_set0_dane(storeCtx.get(), SSL_get0_dane(&sconn)); + + // tell OpenSSL we are verifying a server certificate + if (!X509_STORE_CTX_set_default(storeCtx.get(), "ssl_server")) { + debugs(83, 2, "cannot set default verification method to ssl_server"); + return false; + } + + // overwrite context "verification parameters" with connection non-defaults + const auto param = X509_STORE_CTX_get0_param(storeCtx.get()); + if (!param) { + debugs(83, 2, "no context verification parameters"); + return false; + } +#if defined(HAVE_X509_VERIFY_PARAM_SET_AUTH_LEVEL) + X509_VERIFY_PARAM_set_auth_level(param, SSL_get_security_level(&sconn)); +#endif + if (!X509_VERIFY_PARAM_set1(param, SSL_get0_param(&sconn))) { + debugs(83, 2, "cannot overwrite context verification parameters"); + return false; + } + + // copy any connection "verify_callback function" to the validation context + // (\ref OpenSSL_vcb_disambiguation) + if (const auto cb = SSL_get_verify_callback(&sconn)) + X509_STORE_CTX_set_verify_cb(storeCtx.get(), cb); + + // verify the server certificate chain in the prepared validation context + if (VerifyCtxCertificates(storeCtx.get(), extraCerts.get()) <= 0) { + // see also: ssl_verify_cb() details errors via ssl_ex_index_ssl_errors + const auto verifyResult = X509_STORE_CTX_get_error(storeCtx.get()); + debugs(83, 3, "verification failure: " << verifyResult << ' ' << X509_verify_cert_error_string(verifyResult)); + return false; + } + + debugs(83, 7, "success"); + return true; +} + +/* Ssl::VerifyCallbackParameters */ + +Ssl::VerifyCallbackParameters * +Ssl::VerifyCallbackParameters::Find(Security::Connection &sconn) +{ + return static_cast(SSL_get_ex_data(&sconn, ssl_ex_index_verify_callback_parameters)); +} + +Ssl::VerifyCallbackParameters * +Ssl::VerifyCallbackParameters::New(Security::Connection &sconn) +{ + Must(!Find(sconn)); + const auto parameters = new VerifyCallbackParameters(); + if (!SSL_set_ex_data(&sconn, ssl_ex_index_verify_callback_parameters, parameters)) { + delete parameters; + throw TextException("SSL_set_ex_data() failed; likely OOM", Here()); + } + return parameters; +} + +Ssl::VerifyCallbackParameters & +Ssl::VerifyCallbackParameters::At(Security::Connection &sconn) +{ + const auto parameters = Find(sconn); + Must(parameters); + return *parameters; +} + // "dup" function for SSL_get_ex_new_index("cert_err_check") #if SQUID_USE_CONST_CRYPTO_EX_DATA_DUP static int @@ -453,7 +586,7 @@ ssl_free_ErrorDetail(void *, void *ptr, CRYPTO_EX_DATA *, int, long, void *) { - Ssl::ErrorDetail *errDetail = static_cast (ptr); + const auto errDetail = static_cast(ptr); delete errDetail; } @@ -503,6 +636,14 @@ delete buf; } +/// "free" function for the ssl_ex_index_verify_callback_parameters entry +static void +ssl_free_VerifyCallbackParameters(void *, void *ptr, CRYPTO_EX_DATA *, + int, long, void *) +{ + delete static_cast(ptr); +} + void Ssl::Initialize(void) { @@ -521,7 +662,7 @@ fatalf("Unable to find SSL engine '%s'\n", ::Config.SSL.ssl_engine); if (!ENGINE_set_default(e, ENGINE_METHOD_ALL)) { - const int ssl_error = ERR_get_error(); + const auto ssl_error = ERR_get_error(); fatalf("Failed to initialise SSL engine: %s\n", Security::ErrorString(ssl_error)); } } @@ -543,7 +684,7 @@ ssl_ex_index_ssl_errors = SSL_get_ex_new_index(0, (void *) "ssl_errors", NULL, NULL, &ssl_free_SslErrors); ssl_ex_index_ssl_cert_chain = SSL_get_ex_new_index(0, (void *) "ssl_cert_chain", NULL, NULL, &ssl_free_CertChain); ssl_ex_index_ssl_validation_counter = SSL_get_ex_new_index(0, (void *) "ssl_validation_counter", NULL, NULL, &ssl_free_int); - ssl_ex_index_ssl_untrusted_chain = SSL_get_ex_new_index(0, (void *) "ssl_untrusted_chain", NULL, NULL, &ssl_free_CertChain); + ssl_ex_index_verify_callback_parameters = SSL_get_ex_new_index(0, (void *) "verify_callback_parameters", nullptr, nullptr, &ssl_free_VerifyCallbackParameters); } bool @@ -566,7 +707,7 @@ const char *cipher = peer.sslCipher.c_str(); if (!SSL_CTX_set_cipher_list(ctx.get(), cipher)) { - const int ssl_error = ERR_get_error(); + const auto ssl_error = ERR_get_error(); fatalf("Failed to set SSL cipher suite '%s': %s\n", cipher, Security::ErrorString(ssl_error)); } @@ -580,7 +721,7 @@ const char *certfile = keys.certFile.c_str(); if (!SSL_CTX_use_certificate_chain_file(ctx.get(), certfile)) { - const int ssl_error = ERR_get_error(); + const auto ssl_error = ERR_get_error(); fatalf("Failed to acquire SSL certificate '%s': %s\n", certfile, Security::ErrorString(ssl_error)); } @@ -590,7 +731,7 @@ ssl_ask_password(ctx.get(), keyfile); if (!SSL_CTX_use_PrivateKey_file(ctx.get(), keyfile, SSL_FILETYPE_PEM)) { - const int ssl_error = ERR_get_error(); + const auto ssl_error = ERR_get_error(); fatalf("Failed to acquire SSL private key '%s': %s\n", keyfile, Security::ErrorString(ssl_error)); } @@ -598,7 +739,7 @@ debugs(83, 5, "Comparing private and public SSL keys."); if (!SSL_CTX_check_private_key(ctx.get())) { - const int ssl_error = ERR_get_error(); + const auto ssl_error = ERR_get_error(); fatalf("SSL private key '%s' does not match public key '%s': %s\n", certfile, keyfile, Security::ErrorString(ssl_error)); } @@ -825,7 +966,7 @@ // increase the certificate lock X509_up_ref(signingCert); } else { - const int ssl_error = ERR_get_error(); + const auto ssl_error = ERR_get_error(); debugs(33, DBG_IMPORTANT, "WARNING: can not add signing certificate to SSL context chain: " << Security::ErrorString(ssl_error)); } @@ -926,7 +1067,7 @@ // if the TLS servername extension (SNI) is enabled in openssl library. #if defined(SSL_CTRL_SET_TLSEXT_HOSTNAME) if (!SSL_set_tlsext_host_name(ssl, fqdn)) { - const int ssl_error = ERR_get_error(); + const auto ssl_error = ERR_get_error(); debugs(83, 3, "WARNING: unable to set TLS servername extension (SNI): " << Security::ErrorString(ssl_error) << "\n"); } @@ -935,8 +1076,8 @@ #endif } -static const char * -hasAuthorityInfoAccessCaIssuers(X509 *cert) +const char * +Ssl::findIssuerUri(X509 *cert) { AUTHORITY_INFO_ACCESS *info; if (!cert) @@ -1008,170 +1149,196 @@ } /// slowly find the issuer certificate of a given cert using linear search -static bool -findCertIssuer(Security::CertList const &list, X509 *cert) +static X509 * +sk_x509_findIssuer(const STACK_OF(X509) *sk, X509 *cert) { - for (Security::CertList::const_iterator it = list.begin(); it != list.end(); ++it) { - if (X509_check_issued(it->get(), cert) == X509_V_OK) - return true; + if (!sk) + return nullptr; + + const auto certCount = sk_X509_num(sk); + for (int i = 0; i < certCount; ++i) { + const auto issuer = sk_X509_value(sk, i); + if (X509_check_issued(issuer, cert) == X509_V_OK) + return issuer; } - return false; + return nullptr; } -/// \return true if the cert issuer exist in the certificates stored in connContext -static bool -issuerExistInCaDb(X509 *cert, const Security::ContextPointer &connContext) +/// finds issuer of a given certificate in CA store of the given connContext +/// \returns the cert issuer (after increasing its reference count) or nil +static X509 * +findIssuerInCaDb(X509 *cert, const Security::ContextPointer &connContext) { if (!connContext) - return false; + return nullptr; X509_STORE_CTX *storeCtx = X509_STORE_CTX_new(); if (!storeCtx) { debugs(83, DBG_IMPORTANT, "Failed to allocate STORE_CTX object"); - return false; + return nullptr; } - bool gotIssuer = false; + X509 *issuer = nullptr; X509_STORE *store = SSL_CTX_get_cert_store(connContext.get()); if (X509_STORE_CTX_init(storeCtx, store, nullptr, nullptr)) { - X509 *issuer = nullptr; - gotIssuer = (X509_STORE_CTX_get1_issuer(&issuer, storeCtx, cert) > 0); - if (issuer) - X509_free(issuer); + const auto ret = X509_STORE_CTX_get1_issuer(&issuer, storeCtx, cert); + if (ret > 0) { + assert(issuer); + char buffer[256]; + debugs(83, 5, "found " << X509_NAME_oneline(X509_get_subject_name(issuer), buffer, sizeof(buffer))); + } else { + debugs(83, ret < 0 ? 2 : 3, "not found or failure: " << ret); + assert(!issuer); + } } else { - const int ssl_error = ERR_get_error(); + const auto ssl_error = ERR_get_error(); debugs(83, DBG_IMPORTANT, "Failed to initialize STORE_CTX object: " << Security::ErrorString(ssl_error)); } + X509_STORE_CTX_free(storeCtx); - return gotIssuer; + return issuer; } -const char * -Ssl::uriOfIssuerIfMissing(X509 *cert, Security::CertList const &serverCertificates, const Security::ContextPointer &context) +Security::CertPointer +Ssl::findIssuerCertificate(X509 *cert, const STACK_OF(X509) *serverCertificates, const Security::ContextPointer &context) { - if (!cert || !serverCertificates.size()) - return nullptr; + Must(cert); - if (!findCertIssuer(serverCertificates, cert)) { - //if issuer is missing - if (const char *issuerUri = hasAuthorityInfoAccessCaIssuers(cert)) { - // There is a URI where we can download a certificate. - if (!findCertIssuerFast(SquidUntrustedCerts, cert) && - !issuerExistInCaDb(cert, context)) { - // and issuer not found in local databases containing - // untrusted certificates and trusted CA certificates - return issuerUri; - } - } + // check certificate chain, if any + if (const auto issuer = serverCertificates ? sk_x509_findIssuer(serverCertificates, cert) : nullptr) { + X509_up_ref(issuer); + return Security::CertPointer(issuer); } - return nullptr; -} - -void -Ssl::missingChainCertificatesUrls(std::queue &URIs, Security::CertList const &serverCertificates, const Security::ContextPointer &context) -{ - if (!serverCertificates.size()) - return; - for (const auto &i : serverCertificates) { - if (const char *issuerUri = uriOfIssuerIfMissing(i.get(), serverCertificates, context)) - URIs.push(SBuf(issuerUri)); + // check untrusted certificates + if (const auto issuer = findCertIssuerFast(SquidUntrustedCerts, cert)) { + X509_up_ref(issuer); + return Security::CertPointer(issuer); } -} -void -Ssl::SSL_add_untrusted_cert(SSL *ssl, X509 *cert) -{ - STACK_OF(X509) *untrustedStack = static_cast (SSL_get_ex_data(ssl, ssl_ex_index_ssl_untrusted_chain)); - if (!untrustedStack) { - untrustedStack = sk_X509_new_null(); - if (!SSL_set_ex_data(ssl, ssl_ex_index_ssl_untrusted_chain, untrustedStack)) { - sk_X509_pop_free(untrustedStack, X509_free); - throw TextException("Failed to attach untrusted certificates chain", Here()); - } + // check trusted CA certificates + if (const auto issuer = findIssuerInCaDb(cert, context)) { + // no X509_up_ref(issuer) because findIssuerInCaDb() ups reference count + return Security::CertPointer(issuer); } - sk_X509_push(untrustedStack, cert); + + return Security::CertPointer(nullptr); } -/// Search for the issuer certificate of cert in sk list. -static X509 * -sk_x509_findIssuer(STACK_OF(X509) *sk, X509 *cert) +bool +Ssl::missingChainCertificatesUrls(std::queue &URIs, const STACK_OF(X509) &serverCertificates, const Security::ContextPointer &context) { - if (!sk) - return NULL; + for (int i = 0; i < sk_X509_num(&serverCertificates); ++i) { + const auto cert = sk_X509_value(&serverCertificates, i); - const int skItemsNum = sk_X509_num(sk); - for (int i = 0; i < skItemsNum; ++i) { - X509 *issuer = sk_X509_value(sk, i); - if (X509_check_issued(issuer, cert) == X509_V_OK) - return issuer; + if (findIssuerCertificate(cert, &serverCertificates, context)) + continue; + + if (const auto issuerUri = findIssuerUri(cert)) { + URIs.push(SBuf(issuerUri)); + } else { + static char name[2048]; + debugs(83, 3, "Issuer certificate for " << + X509_NAME_oneline(X509_get_subject_name(cert), name, sizeof(name)) << + " is missing and its URI is not provided"); + } } - return NULL; + + debugs(83, (URIs.empty() ? 3 : 5), "found: " << URIs.size()); + return !URIs.empty(); } /// add missing issuer certificates to untrustedCerts static void -completeIssuers(X509_STORE_CTX *ctx, STACK_OF(X509) *untrustedCerts) +completeIssuers(X509_STORE_CTX *ctx, STACK_OF(X509) &untrustedCerts) { - debugs(83, 2, "completing " << sk_X509_num(untrustedCerts) << " OpenSSL untrusted certs using " << SquidUntrustedCerts.size() << " configured untrusted certificates"); + debugs(83, 2, "completing " << sk_X509_num(&untrustedCerts) << + " OpenSSL untrusted certs using " << SquidUntrustedCerts.size() << + " configured untrusted certificates"); const X509_VERIFY_PARAM *param = X509_STORE_CTX_get0_param(ctx); int depth = X509_VERIFY_PARAM_get_depth(param); - X509 *current = X509_STORE_CTX_get0_cert(ctx); + Security::CertPointer current; + current.resetAndLock(X509_STORE_CTX_get0_cert(ctx)); int i = 0; for (i = 0; current && (i < depth); ++i) { - if (X509_check_issued(current, current) == X509_V_OK) { + if (X509_check_issued(current.get(), current.get()) == X509_V_OK) { // either ctx->cert is itself self-signed or untrustedCerts // aready contain the self-signed current certificate break; } // untrustedCerts is short, not worth indexing - X509 *issuer = sk_x509_findIssuer(untrustedCerts, current); - if (!issuer) { - if ((issuer = findCertIssuerFast(SquidUntrustedCerts, current))) - sk_X509_push(untrustedCerts, issuer); - } + const Security::ContextPointer nullCtx; + auto issuer = Ssl::findIssuerCertificate(current.get(), &untrustedCerts, nullCtx); current = issuer; + if (issuer) + sk_X509_push(&untrustedCerts, issuer.release()); } if (i >= depth) debugs(83, 2, "exceeded the maximum certificate chain length: " << depth); } -/// OpenSSL certificate validation callback. +/// Validates certificates while consulting sslproxy_foreign_intermediate_certs +/// and, optionally, the given extra certificates. +/// \returns whatever OpenSSL X509_verify_cert() returns static int -untrustedToStoreCtx_cb(X509_STORE_CTX *ctx,void *data) +VerifyCtxCertificates(X509_STORE_CTX *ctx, STACK_OF(X509) *extraCerts) { - debugs(83, 4, "Try to use pre-downloaded intermediate certificates"); - - SSL *ssl = static_cast(X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx())); - STACK_OF(X509) *sslUntrustedStack = static_cast (SSL_get_ex_data(ssl, ssl_ex_index_ssl_untrusted_chain)); - // OpenSSL already maintains ctx->untrusted but we cannot modify // internal OpenSSL list directly. We have to give OpenSSL our own // list, but it must include certificates on the OpenSSL ctx->untrusted STACK_OF(X509) *oldUntrusted = X509_STORE_CTX_get0_untrusted(ctx); - STACK_OF(X509) *sk = sk_X509_dup(oldUntrusted); // oldUntrusted is always not NULL + // X509_chain_up_ref() increments cert references _and_ dupes the stack + Ssl::X509_STACK_Pointer untrustedCerts(oldUntrusted ? X509_chain_up_ref(oldUntrusted) : sk_X509_new_null()); - for (int i = 0; i < sk_X509_num(sslUntrustedStack); ++i) { - X509 *cert = sk_X509_value(sslUntrustedStack, i); - sk_X509_push(sk, cert); + if (extraCerts) { + for (int i = 0; i < sk_X509_num(extraCerts); ++i) { + const auto cert = sk_X509_value(extraCerts, i); + X509_up_ref(cert); + sk_X509_push(untrustedCerts.get(), cert); + } } // If the local untrusted certificates internal database is used // run completeIssuers to add missing certificates if possible. if (SquidUntrustedCerts.size() > 0) - completeIssuers(ctx, sk); + completeIssuers(ctx, *untrustedCerts); - X509_STORE_CTX_set0_untrusted(ctx, sk); // No locking/unlocking, just sets ctx->untrusted + X509_STORE_CTX_set0_untrusted(ctx, untrustedCerts.get()); // No locking/unlocking, just sets ctx->untrusted int ret = X509_verify_cert(ctx); X509_STORE_CTX_set0_untrusted(ctx, oldUntrusted); // Set back the old untrusted list - sk_X509_free(sk); // Release sk list return ret; } +/// \interface OpenSSL_vcb_disambiguation +/// +/// OpenSSL has two very different concepts with nearly identical names: +/// +/// a) A (replaceable) certificate verification function -- X509_verify_cert(): +/// This function drives the entire certificate verification algorithm. +/// It can be called directly, but is usually called during SSL_connect(). +/// OpenSSL calls this function a "verification callback function". +/// SSL_CTX_set_cert_verify_callback(3) replaces X509_verify_cert() default. +/// +/// b) An (optional) certificate verification adjustment callback: +/// This function, if set, is called at the end of (a) to adjust (a) results. +/// It is never called directly, only from (a). +/// OpenSSL calls this function a "verify_callback function". +/// The SSL_CTX_set_verify(3) family of functions sets this function. + +/// Validates certificates while consulting sslproxy_foreign_intermediate_certs +/// but without using any dynamically downloaded intermediate certificates. +/// OpenSSL "verification callback function" (\ref OpenSSL_vcb_disambiguation) +static int +untrustedToStoreCtx_cb(X509_STORE_CTX *ctx, void *) +{ + debugs(83, 4, "Try to use pre-downloaded intermediate certificates"); + return VerifyCtxCertificates(ctx, nullptr); +} + void Ssl::useSquidUntrusted(SSL_CTX *sslContext) { diff -u -r -N squid-5.0.5/src/ssl/support.h squid-5.0.6/src/ssl/support.h --- squid-5.0.5/src/ssl/support.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/ssl/support.h 2021-05-10 21:02:34.000000000 +1200 @@ -37,15 +37,6 @@ \ingroup ServerProtocol */ -// Custom SSL errors; assumes all official errors are positive -#define SQUID_X509_V_ERR_INFINITE_VALIDATION -4 -#define SQUID_X509_V_ERR_CERT_CHANGE -3 -#define SQUID_ERR_SSL_HANDSHAKE -2 -#define SQUID_X509_V_ERR_DOMAIN_MISMATCH -1 -// All SSL errors range: from smallest (negative) custom to largest SSL error -#define SQUID_SSL_ERROR_MIN SQUID_X509_V_ERR_CERT_CHANGE -#define SQUID_SSL_ERROR_MAX INT_MAX - // Maximum certificate validation callbacks. OpenSSL versions exceeding this // limit are deemed stuck in an infinite validation loop (OpenSSL bug #3090) // and will trigger the SQUID_X509_V_ERR_INFINITE_VALIDATION error. @@ -75,7 +66,6 @@ /// call before generating any SSL context void Initialize(); -class ErrorDetail; class CertValidationResponse; typedef RefCount CertValidationResponsePointer; @@ -178,17 +168,20 @@ */ void SSL_add_untrusted_cert(SSL *ssl, X509 *cert); -/** - * Searches in serverCertificates list for the cert issuer and if not found - * and Authority Info Access of cert provides a URI return it. - */ -const char *uriOfIssuerIfMissing(X509 *cert, Security::CertList const &serverCertificates, const Security::ContextPointer &context); +/// finds certificate issuer URI in the Authority Info Access extension +const char *findIssuerUri(X509 *cert); + +/// Searches serverCertificates and local databases for the cert issuer. +/// \param context where to retrieve the configured CA's db; may be nil +/// \returns the found issuer certificate or nil +Security::CertPointer findIssuerCertificate(X509 *cert, const STACK_OF(X509) *serverCertificates, const Security::ContextPointer &context); /** * Fill URIs queue with the uris of missing certificates from serverCertificate chain * if this information provided by Authority Info Access. + \return whether at least one URI is known, including previously known ones */ -void missingChainCertificatesUrls(std::queue &URIs, Security::CertList const &serverCertificates, const Security::ContextPointer &context); +bool missingChainCertificatesUrls(std::queue &URIs, const STACK_OF(X509) &serverCertificates, const Security::ContextPointer &context); /** \ingroup ServerProtocolSSLAPI @@ -329,6 +322,48 @@ TODO: Add support for reading from `buf`. */ BIO *BIO_new_SBuf(SBuf *buf); + +/// Validates the given TLS connection server certificate chain in conjunction +/// with a (possibly empty) set of "extra" intermediate certs. Also consults +/// sslproxy_foreign_intermediate_certs. This is a C++/Squid-friendly wrapper of +/// OpenSSL "verification callback function" (\ref OpenSSL_vcb_disambiguation). +/// OpenSSL has a similar wrapper, ssl_verify_cert_chain(), but that wrapper is +/// not a part of the public OpenSSL API. +bool VerifyConnCertificates(Security::Connection &, const Ssl::X509_STACK_Pointer &extraCerts); + +// TODO: Move other ssl_ex_index_* validation-related information here. +/// OpenSSL "verify_callback function" input/output parameters. This information +/// cannot be passed through the verification API directly, so it is aggregated +/// in this class and exchanged via ssl_ex_index_verify_callback_parameters. For +/// OpenSSL validation callback details, see \ref OpenSSL_vcb_disambiguation. +class VerifyCallbackParameters { +public: + /// creates a VerifyCallbackParameters object and adds it to the given TLS connection + /// \returns the successfully created and added object + static VerifyCallbackParameters *New(Security::Connection &); + + /// \returns the VerifyCallbackParameters object previously attached via New() + static VerifyCallbackParameters &At(Security::Connection &); + + /// \returns the VerifyCallbackParameters object previously attached via New() or nil + static VerifyCallbackParameters *Find(Security::Connection &); + + /* input parameters */ + + /// whether X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY should be cleared + /// (after setting hidMissingIssuer) because the validation initiator wants + /// to get the missing certificates and redo the validation with them + bool callerHandlesMissingCertificates = false; + + /* output parameters */ + + /// whether certificate validation has failed due to missing certificate(s) + /// (i.e. X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY), but the failure was + /// cleared/hidden due to true callerHandlesMissingCertificates setting; the + /// certificate chain has to be deemed untrusted until revalidation (if any) + bool hidMissingIssuer = false; +}; + } //namespace Ssl #if _SQUID_WINDOWS_ diff -u -r -N squid-5.0.5/src/store/id_rewriters/file/storeid_file_rewrite.8 squid-5.0.6/src/store/id_rewriters/file/storeid_file_rewrite.8 --- squid-5.0.5/src/store/id_rewriters/file/storeid_file_rewrite.8 2021-02-08 13:46:38.000000000 +1300 +++ squid-5.0.6/src/store/id_rewriters/file/storeid_file_rewrite.8 2021-05-10 23:02:23.000000000 +1200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "STOREID_FILE_REWRITE 8" -.TH STOREID_FILE_REWRITE 8 "2021-02-08" "perl v5.32.0" "User Contributed Perl Documentation" +.TH STOREID_FILE_REWRITE 8 "2021-05-10" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -u -r -N squid-5.0.5/src/store/Makefile.am squid-5.0.6/src/store/Makefile.am --- squid-5.0.5/src/store/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/store/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -12,7 +12,7 @@ noinst_LTLIBRARIES = libstore.la -libstore_la_SOURCES= \ +libstore_la_SOURCES = \ Controlled.h \ Controller.cc \ Controller.h \ @@ -20,7 +20,7 @@ Disk.h \ Disks.cc \ Disks.h \ - forward.h \ LocalSearch.cc \ LocalSearch.h \ - Storage.h + Storage.h \ + forward.h diff -u -r -N squid-5.0.5/src/store/Makefile.in squid-5.0.6/src/store/Makefile.in --- squid-5.0.5/src/store/Makefile.in 2021-02-08 13:40:48.000000000 +1300 +++ squid-5.0.6/src/store/Makefile.in 2021-05-10 22:57:56.000000000 +1200 @@ -778,10 +778,10 @@ Disk.h \ Disks.cc \ Disks.h \ - forward.h \ LocalSearch.cc \ LocalSearch.h \ - Storage.h + Storage.h \ + forward.h all: all-recursive diff -u -r -N squid-5.0.5/src/tests/Stub.am squid-5.0.6/src/tests/Stub.am --- squid-5.0.5/src/tests/Stub.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/tests/Stub.am 2021-05-10 21:02:34.000000000 +1200 @@ -49,6 +49,7 @@ tests/stub_libauth.cc \ tests/stub_libcomm.cc \ tests/stub_libdiskio.cc \ + tests/stub_liberror.cc \ tests/stub_libeui.cc \ tests/stub_libformat.cc \ tests/stub_libhttp.cc \ diff -u -r -N squid-5.0.5/src/tests/stub_errorpage.cc squid-5.0.6/src/tests/stub_errorpage.cc --- squid-5.0.5/src/tests/stub_errorpage.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/tests/stub_errorpage.cc 2021-05-10 21:02:34.000000000 +1200 @@ -19,3 +19,5 @@ TemplateFile::TemplateFile(char const*, err_type) STUB bool TemplateFile::loadFor(const HttpRequest *) STUB_RETVAL(false) +std::ostream &operator <<(std::ostream &os, const ErrorState *) STUB_RETVAL(os) + diff -u -r -N squid-5.0.5/src/tests/stub_HttpRequest.cc squid-5.0.6/src/tests/stub_HttpRequest.cc --- squid-5.0.5/src/tests/stub_HttpRequest.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/tests/stub_HttpRequest.cc 2021-05-10 21:02:34.000000000 +1200 @@ -34,7 +34,6 @@ Adaptation::Icap::History::Pointer HttpRequest::icapHistory() const STUB_RETVAL(Adaptation::Icap::History::Pointer()) #endif void HttpRequest::recordLookup(const Dns::LookupDetails &) STUB -void HttpRequest::detailError(err_type, int) STUB void HttpRequest::clearError() STUB void HttpRequest::clean() STUB void HttpRequest::init() STUB diff -u -r -N squid-5.0.5/src/tests/stub_liberror.cc squid-5.0.6/src/tests/stub_liberror.cc --- squid-5.0.5/src/tests/stub_liberror.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-5.0.6/src/tests/stub_liberror.cc 2021-05-10 21:02:34.000000000 +1200 @@ -0,0 +1,15 @@ +#include "squid.h" +#include "error/Error.h" +#include "sbuf/SBuf.h" + +#define STUB_API "error/liberror.la" +#include "tests/STUB.h" + +const char * err_type_str[ERR_MAX] = {}; + +void Error::update(const Error &) STUB_NOP + +std::ostream &operator <<(std::ostream &os, const Error &) STUB_RETVAL(os) + +ErrorDetail::Pointer MakeNamedErrorDetail(const char *name) STUB_RETVAL(ErrorDetail::Pointer()) + diff -u -r -N squid-5.0.5/src/tests/stub_libhttp.cc squid-5.0.6/src/tests/stub_libhttp.cc --- squid-5.0.5/src/tests/stub_libhttp.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/tests/stub_libhttp.cc 2021-05-10 21:02:34.000000000 +1200 @@ -118,7 +118,7 @@ clientStreamNode *Stream::getTail() const STUB_RETVAL(nullptr) clientStreamNode *Stream::getClientReplyContext() const STUB_RETVAL(nullptr) ConnStateData *Stream::getConn() const STUB_RETVAL(nullptr) -void Stream::noteIoError(const int) STUB +void Stream::noteIoError(const Error &, const LogTagsErrors &) STUB void Stream::finished() STUB void Stream::initiateClose(const char *) STUB void Stream::deferRecipientForLater(clientStreamNode *, HttpReply *, StoreIOBuffer) STUB diff -u -r -N squid-5.0.5/src/tests/stub_libmgr.cc squid-5.0.6/src/tests/stub_libmgr.cc --- squid-5.0.5/src/tests/stub_libmgr.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/tests/stub_libmgr.cc 2021-05-10 21:02:34.000000000 +1200 @@ -12,6 +12,8 @@ #define STUB_API "lmgr/libmgr.la" #include "tests/STUB.h" +#include "ipc/RequestId.h" + // NP: used by Command.h instantiations #include "mgr/ActionProfile.h" @@ -26,7 +28,7 @@ void Mgr::Action::fillEntry(StoreEntry *entry, bool writeHttpHeader) STUB void Mgr::Action::add(const Action &action) STUB void Mgr::Action::respond(const Request &request) STUB -void Mgr::Action::sendResponse(unsigned int requestId) STUB +void Mgr::Action::sendResponse(const Ipc::RequestId) STUB bool Mgr::Action::atomic() const STUB_RETVAL(false) const char * Mgr::Action::name() const STUB_RETVAL(NULL) static Mgr::Command static_Command; @@ -174,11 +176,10 @@ Mgr::QueryParam::Pointer Mgr::QueryParams::get(const String& name) const STUB_RETVAL(Mgr::QueryParam::Pointer(NULL)) void Mgr::QueryParams::pack(Ipc::TypedMsgHdr& msg) const STUB void Mgr::QueryParams::unpack(const Ipc::TypedMsgHdr& msg) STUB -bool Mgr::QueryParams::Parse(const String& aParamsStr, QueryParams& aParams) STUB_RETVAL(false) +void Mgr::QueryParams::Parse(Parser::Tokenizer &, QueryParams &) STUB //private: //Params::const_iterator Mgr::QueryParams::find(const String& name) const STUB_RETVAL(new Mgr::Params::const_iterator(*this)) Mgr::QueryParam::Pointer Mgr::QueryParams::CreateParam(QueryParam::Type aType) STUB_RETVAL(Mgr::QueryParam::Pointer(NULL)) -bool Mgr::QueryParams::ParseParam(const String& paramStr, Param& param) STUB_RETVAL(false) #include "mgr/Registration.h" //void Mgr::RegisterAction(char const * action, char const * desc, OBJH * handler, int pw_req_flag, int atomic); diff -u -r -N squid-5.0.5/src/tests/stub_libsecurity.cc squid-5.0.6/src/tests/stub_libsecurity.cc --- squid-5.0.5/src/tests/stub_libsecurity.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/tests/stub_libsecurity.cc 2021-05-10 21:02:34.000000000 +1200 @@ -31,12 +31,30 @@ Security::HandshakeParser::HandshakeParser(MessageSource) STUB bool Security::HandshakeParser::parseHello(const SBuf &) STUB_RETVAL(false) +#include "security/Io.h" +Security::IoResult Security::Accept(Comm::Connection &) STUB_RETVAL(IoResult(IoResult::ioError)) +Security::IoResult Security::Connect(Comm::Connection &) STUB_RETVAL(IoResult(IoResult::ioError)) +void Security::ForgetErrors() STUB + #include "security/KeyData.h" namespace Security { void KeyData::loadFromFiles(const AnyP::PortCfg &, const char *) STUB } +#include "security/ErrorDetail.h" +Security::ErrorDetail::ErrorDetail(ErrorCode, const CertPointer &, const CertPointer &, const char *) STUB +#if USE_OPENSSL +Security::ErrorDetail::ErrorDetail(ErrorCode, int, int) STUB +#elif USE_GNUTLS +Security::ErrorDetail::ErrorDetail(ErrorCode, LibErrorCode, int) STUB +#endif +void Security::ErrorDetail::setPeerCertificate(const CertPointer &) STUB +SBuf Security::ErrorDetail::verbose(const HttpRequestPointer &) const STUB_RETVAL(SBuf()) +SBuf Security::ErrorDetail::brief() const STUB_RETVAL(SBuf()) +Security::ErrorCode Security::ErrorCodeFromName(const char *) STUB_RETVAL(0) +const char *Security::ErrorNameFromCode(ErrorCode, bool) STUB_RETVAL("") + #include "security/NegotiationHistory.h" Security::NegotiationHistory::NegotiationHistory() STUB void Security::NegotiationHistory::retrieveNegotiatedInfo(const Security::SessionPointer &) STUB @@ -45,11 +63,13 @@ const char *Security::NegotiationHistory::printTlsVersion(AnyP::ProtocolVersion const &v) const STUB #include "security/PeerConnector.h" +class TlsNegotiationDetails: public RefCountable {}; CBDATA_NAMESPACED_CLASS_INIT(Security, PeerConnector); namespace Security { PeerConnector::PeerConnector(const Comm::ConnectionPointer &, AsyncCall::Pointer &, const AccessLogEntryPointer &, const time_t) : AsyncJob("Security::PeerConnector") {STUB} +PeerConnector::~PeerConnector() STUB void PeerConnector::start() STUB bool PeerConnector::doneAll() const STUB_RETVAL(true) void PeerConnector::swanSong() STUB @@ -59,10 +79,10 @@ bool PeerConnector::initialize(Security::SessionPointer &) STUB_RETVAL(false) void PeerConnector::negotiate() STUB bool PeerConnector::sslFinalized() STUB_RETVAL(false) -void PeerConnector::handleNegotiateError(const int) STUB +void PeerConnector::handleNegotiationResult(const Security::IoResult &) STUB; void PeerConnector::noteWantRead() STUB void PeerConnector::noteWantWrite() STUB -void PeerConnector::noteNegotiationError(const int, const int, const int) STUB +void PeerConnector::noteNegotiationError(const Security::ErrorDetailPointer &) STUB // virtual Security::ContextPointer getTlsContext() = 0; void PeerConnector::bail(ErrorState *) STUB void PeerConnector::sendSuccess() STUB diff -u -r -N squid-5.0.5/src/tests/stub_libsslsquid.cc squid-5.0.6/src/tests/stub_libsslsquid.cc --- squid-5.0.5/src/tests/stub_libsslsquid.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/tests/stub_libsslsquid.cc 2021-05-10 21:02:34.000000000 +1200 @@ -43,10 +43,6 @@ #include "ssl/ErrorDetail.h" Security::ErrorCode parseErrorString(const char *name) STUB_RETVAL(0) -//const char *Ssl::getErrorName(Security::ErrorCode value) STUB_RETVAL(NULL) -Ssl::ErrorDetail::ErrorDetail(Security::ErrorCode, X509 *, X509 *, const char *) STUB -Ssl::ErrorDetail::ErrorDetail(ErrorDetail const &) STUB -const String & Ssl::ErrorDetail::toString() const STUB_RETSTATREF(String) #include "ssl/support.h" namespace Ssl diff -u -r -N squid-5.0.5/src/tests/testCacheManager.cc squid-5.0.6/src/tests/testCacheManager.cc --- squid-5.0.5/src/tests/testCacheManager.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/tests/testCacheManager.cc 2021-05-10 21:02:34.000000000 +1200 @@ -7,6 +7,7 @@ */ #include "squid.h" +#include "anyp/Uri.h" #include "CacheManager.h" #include "mgr/Action.h" #include "Store.h" @@ -17,11 +18,19 @@ CPPUNIT_TEST_SUITE_REGISTRATION( testCacheManager ); +/// Provides test code access to CacheManager internal symbols +class CacheManagerInternals : public CacheManager +{ +public: + void ParseUrl(const AnyP::Uri &u) { CacheManager::ParseUrl(u); } +}; + /* init memory pools */ void testCacheManager::setUp() { Mem::Init(); + AnyP::UriScheme::Init(); } /* @@ -66,3 +75,146 @@ CPPUNIT_ASSERT_EQUAL(1,(int)sentry->flags); } +void +testCacheManager::testParseUrl() +{ + auto *mgr = static_cast(CacheManager::GetInstance()); + CPPUNIT_ASSERT(mgr != nullptr); + + std::vector validSchemes = { + AnyP::PROTO_CACHE_OBJECT, + AnyP::PROTO_HTTP, + AnyP::PROTO_HTTPS, + AnyP::PROTO_FTP + }; + + AnyP::Uri mgrUrl; + mgrUrl.host("localhost"); + mgrUrl.port(3128); + + const std::vector magicPrefixes = { + "/", + "/squid-internal-mgr/" + }; + + const std::vector validActions = { + "", + "menu" + }; + + const std::vector invalidActions = { + "INVALID" // any unregistered name + }; + + const std::vector validParams = { + "", + "?", + "?&", + "?&&&&&&&&&&&&", + "?foo=bar", + "?0123456789=bar", + "?foo=bar&", + "?foo=bar&&&&", + "?&foo=bar", + "?&&&&foo=bar", + "?&foo=bar&", + "?&&&&foo=bar&&&&", + "?foo=?_weird?~`:[]stuff&bar=okay&&&&&&", + "?intlist=1", + "?intlist=1,2,3,4,5", + "?string=1a", + "?string=1,2,3,4,z", + "?string=1,2,3,4,[0]", + "?intlist=1,2,3,4,5&string=1,2,3,4,y" + }; + + const std::vector invalidParams = { + "?/", + "?foo", + "?/foo", + "?foo/", + "?foo=", + "?foo=&", + "?=foo", + "? foo=bar", + "? &", + "?& ", + "?=&", + "?&=", + "? &&&", + "?& &&", + "?&& &", + "?=&&&", + "?&=&&", + "?&&=&" + }; + + const std::vector validFragments = { + "", + "#", + "##", + "#?a=b", + "#fragment" + }; + + for (const auto &scheme : validSchemes) { + mgrUrl.setScheme(scheme); + + for (const auto *magic : magicPrefixes) { + + // all schemes except cache_object require magic path prefix bytes + if (scheme != AnyP::PROTO_CACHE_OBJECT && strlen(magic) <= 2) + continue; + + /* Check the parser accepts all the valid cases */ + + for (const auto *action : validActions) { + for (const auto *param : validParams) { + for (const auto *frag : validFragments) { + try { + SBuf bits; + bits.append(magic); + bits.append(action); + bits.append(param); + bits.append(frag); + mgrUrl.path(bits); + + (void)mgr->ParseUrl(mgrUrl); + } catch (...) { + std::cerr << std::endl + << "FAIL: " << mgrUrl + << Debug::Extra << "error: " << CurrentException << std::endl; + CPPUNIT_FAIL("rejected a valid URL"); + } + } + } + } + + /* Check that invalid parameters are rejected */ + + for (const auto *action : validActions) { + for (const auto *param : invalidParams) { + for (const auto *frag : validFragments) { + try { + SBuf bits; + bits.append(magic); + bits.append(action); + bits.append(param); + bits.append(frag); + mgrUrl.path(bits); + + (void)mgr->ParseUrl(mgrUrl); + + std::cerr << std::endl + << "FAIL: " << mgrUrl + << Debug::Extra << "error: should be rejected due to '" << param << "'" << std::endl; + } catch (const TextException &e) { + continue; // success. caught bad input + } + CPPUNIT_FAIL("failed to reject an invalid URL"); + } + } + } + } + } +} diff -u -r -N squid-5.0.5/src/tests/testCacheManager.h squid-5.0.6/src/tests/testCacheManager.h --- squid-5.0.5/src/tests/testCacheManager.h 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/tests/testCacheManager.h 2021-05-10 21:02:34.000000000 +1200 @@ -20,6 +20,7 @@ CPPUNIT_TEST_SUITE( testCacheManager ); CPPUNIT_TEST( testCreate ); CPPUNIT_TEST( testRegister ); + CPPUNIT_TEST( testParseUrl ); CPPUNIT_TEST_SUITE_END(); public: @@ -28,6 +29,7 @@ protected: void testCreate(); void testRegister(); + void testParseUrl(); }; #endif diff -u -r -N squid-5.0.5/src/urn.cc squid-5.0.6/src/urn.cc --- squid-5.0.5/src/urn.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/urn.cc 2021-05-10 21:02:34.000000000 +1200 @@ -261,6 +261,12 @@ return; } + if (!e->isAccepting()) { + debugs(52, 3, "terminating due to bad " << *e); + delete urnState; + return; + } + /* Update reqofs to point to where in the buffer we'd be */ urnState->reqofs += result.length; @@ -429,6 +435,7 @@ } debugs(52, 3, "urnParseReply: Found " << i << " URLs"); + xfree(buf); return list; } diff -u -r -N squid-5.0.5/src/whois.cc squid-5.0.6/src/whois.cc --- squid-5.0.5/src/whois.cc 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/src/whois.cc 2021-05-10 21:02:34.000000000 +1200 @@ -118,6 +118,16 @@ debugs(75, 3, HERE << conn << " read " << aBufferLength << " bytes"); debugs(75, 5, "{" << aBuffer << "}"); + // TODO: Honor delay pools. + + // XXX: Update statCounter before bailing + if (!entry->isAccepting()) { + debugs(52, 3, "terminating due to bad " << *entry); + // TODO: Do not abuse connection for triggering cleanup. + conn->close(); + return; + } + if (flag != Comm::OK) { debugs(50, 2, conn << ": read failure: " << xstrerr(xerrno)); diff -u -r -N squid-5.0.5/test-suite/Makefile.am squid-5.0.6/test-suite/Makefile.am --- squid-5.0.5/test-suite/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/test-suite/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -95,30 +95,49 @@ ## XXX: somewhat broken. Its meant to test our debugs() implementation. ## but it has never been linked to the actual src/debug.cc implementation !! ## all it tests are the stream operators and macro in src/Debug.h -debug_SOURCES = debug.cc stub_libmem.cc $(DEBUG_SOURCE) - -ESIExpressions_SOURCES = ESIExpressions.cc stub_libmem.cc $(DEBUG_SOURCE) +debug_SOURCES = \ + $(DEBUG_SOURCE) \ + debug.cc \ + stub_libmem.cc + +ESIExpressions_SOURCES = \ + $(DEBUG_SOURCE) \ + ESIExpressions.cc \ + stub_libmem.cc ESIExpressions_LDADD = $(top_builddir)/src/esi/Expression.o \ $(LDADD) -mem_node_test_SOURCES = mem_node_test.cc $(DEBUG_SOURCE) +mem_node_test_SOURCES = \ + $(DEBUG_SOURCE) \ + mem_node_test.cc mem_node_test_LDADD = \ $(top_builddir)/src/mem_node.o \ $(top_builddir)/src/mem/libmem.la \ $(LDADD) -mem_hdr_test_SOURCES = mem_hdr_test.cc $(DEBUG_SOURCE) +mem_hdr_test_SOURCES = \ + $(DEBUG_SOURCE) \ + mem_hdr_test.cc mem_hdr_test_LDADD = \ $(top_builddir)/src/stmem.o \ $(top_builddir)/src/mem_node.o \ $(top_builddir)/src/mem/libmem.la \ $(LDADD) -splay_SOURCES = splay.cc stub_libmem.cc $(DEBUG_SOURCE) - -syntheticoperators_SOURCES = syntheticoperators.cc stub_libmem.cc $(DEBUG_SOURCE) - -VirtualDeleteOperator_SOURCES = VirtualDeleteOperator.cc stub_libmem.cc $(DEBUG_SOURCE) +splay_SOURCES = \ + $(DEBUG_SOURCE) \ + splay.cc \ + stub_libmem.cc + +syntheticoperators_SOURCES = \ + $(DEBUG_SOURCE) \ + stub_libmem.cc \ + syntheticoperators.cc + +VirtualDeleteOperator_SOURCES = \ + $(DEBUG_SOURCE) \ + VirtualDeleteOperator.cc \ + stub_libmem.cc ## membanger won't link today. Bitrot.. ##CC = gcc diff -u -r -N squid-5.0.5/test-suite/Makefile.in squid-5.0.6/test-suite/Makefile.in --- squid-5.0.5/test-suite/Makefile.in 2021-02-08 13:40:48.000000000 +1300 +++ squid-5.0.6/test-suite/Makefile.in 2021-05-10 22:57:56.000000000 +1200 @@ -175,8 +175,8 @@ stub_MemBuf.$(OBJEXT) stub_SBuf.$(OBJEXT) stub_tools.$(OBJEXT) \ stub_fatal.$(OBJEXT) am__objects_2 = test_tools.$(OBJEXT) $(am__objects_1) -am_ESIExpressions_OBJECTS = ESIExpressions.$(OBJEXT) \ - stub_libmem.$(OBJEXT) $(am__objects_2) +am_ESIExpressions_OBJECTS = $(am__objects_2) ESIExpressions.$(OBJEXT) \ + stub_libmem.$(OBJEXT) ESIExpressions_OBJECTS = $(am_ESIExpressions_OBJECTS) @ENABLE_XPROF_STATS_TRUE@am__DEPENDENCIES_1 = $(top_builddir)/lib/profiler/libprofiler.la am__DEPENDENCIES_2 = $(top_builddir)/compat/libcompatsquid.la \ @@ -192,8 +192,8 @@ am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = -am_VirtualDeleteOperator_OBJECTS = VirtualDeleteOperator.$(OBJEXT) \ - stub_libmem.$(OBJEXT) $(am__objects_2) +am_VirtualDeleteOperator_OBJECTS = $(am__objects_2) \ + VirtualDeleteOperator.$(OBJEXT) stub_libmem.$(OBJEXT) VirtualDeleteOperator_OBJECTS = $(am_VirtualDeleteOperator_OBJECTS) VirtualDeleteOperator_LDADD = $(LDADD) VirtualDeleteOperator_DEPENDENCIES = \ @@ -201,20 +201,20 @@ $(top_builddir)/src/globals.o $(top_builddir)/src/time.o \ $(top_builddir)/lib/libmiscutil.la $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_3) -am_debug_OBJECTS = debug.$(OBJEXT) stub_libmem.$(OBJEXT) \ - $(am__objects_2) +am_debug_OBJECTS = $(am__objects_2) debug.$(OBJEXT) \ + stub_libmem.$(OBJEXT) debug_OBJECTS = $(am_debug_OBJECTS) debug_LDADD = $(LDADD) debug_DEPENDENCIES = $(top_builddir)/src/base/libbase.la \ $(top_builddir)/src/globals.o $(top_builddir)/src/time.o \ $(top_builddir)/lib/libmiscutil.la $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_3) -am_mem_hdr_test_OBJECTS = mem_hdr_test.$(OBJEXT) $(am__objects_2) +am_mem_hdr_test_OBJECTS = $(am__objects_2) mem_hdr_test.$(OBJEXT) mem_hdr_test_OBJECTS = $(am_mem_hdr_test_OBJECTS) mem_hdr_test_DEPENDENCIES = $(top_builddir)/src/stmem.o \ $(top_builddir)/src/mem_node.o \ $(top_builddir)/src/mem/libmem.la $(am__DEPENDENCIES_4) -am_mem_node_test_OBJECTS = mem_node_test.$(OBJEXT) $(am__objects_2) +am_mem_node_test_OBJECTS = $(am__objects_2) mem_node_test.$(OBJEXT) mem_node_test_OBJECTS = $(am_mem_node_test_OBJECTS) mem_node_test_DEPENDENCIES = $(top_builddir)/src/mem_node.o \ $(top_builddir)/src/mem/libmem.la $(am__DEPENDENCIES_4) @@ -225,16 +225,16 @@ $(top_builddir)/src/globals.o $(top_builddir)/src/time.o \ $(top_builddir)/lib/libmiscutil.la $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_3) -am_splay_OBJECTS = splay.$(OBJEXT) stub_libmem.$(OBJEXT) \ - $(am__objects_2) +am_splay_OBJECTS = $(am__objects_2) splay.$(OBJEXT) \ + stub_libmem.$(OBJEXT) splay_OBJECTS = $(am_splay_OBJECTS) splay_LDADD = $(LDADD) splay_DEPENDENCIES = $(top_builddir)/src/base/libbase.la \ $(top_builddir)/src/globals.o $(top_builddir)/src/time.o \ $(top_builddir)/lib/libmiscutil.la $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_3) -am_syntheticoperators_OBJECTS = syntheticoperators.$(OBJEXT) \ - stub_libmem.$(OBJEXT) $(am__objects_2) +am_syntheticoperators_OBJECTS = $(am__objects_2) stub_libmem.$(OBJEXT) \ + syntheticoperators.$(OBJEXT) syntheticoperators_OBJECTS = $(am_syntheticoperators_OBJECTS) syntheticoperators_LDADD = $(LDADD) syntheticoperators_DEPENDENCIES = $(top_builddir)/src/base/libbase.la \ @@ -843,27 +843,53 @@ STUB.h DEBUG_SOURCE = test_tools.cc $(STUBS) -debug_SOURCES = debug.cc stub_libmem.cc $(DEBUG_SOURCE) -ESIExpressions_SOURCES = ESIExpressions.cc stub_libmem.cc $(DEBUG_SOURCE) +debug_SOURCES = \ + $(DEBUG_SOURCE) \ + debug.cc \ + stub_libmem.cc + +ESIExpressions_SOURCES = \ + $(DEBUG_SOURCE) \ + ESIExpressions.cc \ + stub_libmem.cc + ESIExpressions_LDADD = $(top_builddir)/src/esi/Expression.o \ $(LDADD) -mem_node_test_SOURCES = mem_node_test.cc $(DEBUG_SOURCE) +mem_node_test_SOURCES = \ + $(DEBUG_SOURCE) \ + mem_node_test.cc + mem_node_test_LDADD = \ $(top_builddir)/src/mem_node.o \ $(top_builddir)/src/mem/libmem.la \ $(LDADD) -mem_hdr_test_SOURCES = mem_hdr_test.cc $(DEBUG_SOURCE) +mem_hdr_test_SOURCES = \ + $(DEBUG_SOURCE) \ + mem_hdr_test.cc + mem_hdr_test_LDADD = \ $(top_builddir)/src/stmem.o \ $(top_builddir)/src/mem_node.o \ $(top_builddir)/src/mem/libmem.la \ $(LDADD) -splay_SOURCES = splay.cc stub_libmem.cc $(DEBUG_SOURCE) -syntheticoperators_SOURCES = syntheticoperators.cc stub_libmem.cc $(DEBUG_SOURCE) -VirtualDeleteOperator_SOURCES = VirtualDeleteOperator.cc stub_libmem.cc $(DEBUG_SOURCE) +splay_SOURCES = \ + $(DEBUG_SOURCE) \ + splay.cc \ + stub_libmem.cc + +syntheticoperators_SOURCES = \ + $(DEBUG_SOURCE) \ + stub_libmem.cc \ + syntheticoperators.cc + +VirtualDeleteOperator_SOURCES = \ + $(DEBUG_SOURCE) \ + VirtualDeleteOperator.cc \ + stub_libmem.cc + all: all-am .SUFFIXES: diff -u -r -N squid-5.0.5/tools/helper-mux/helper-mux.8 squid-5.0.6/tools/helper-mux/helper-mux.8 --- squid-5.0.5/tools/helper-mux/helper-mux.8 2021-02-08 13:46:41.000000000 +1300 +++ squid-5.0.6/tools/helper-mux/helper-mux.8 2021-05-10 23:02:25.000000000 +1200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "HELPER-MUX 8" -.TH HELPER-MUX 8 "2021-02-08" "perl v5.32.0" "User Contributed Perl Documentation" +.TH HELPER-MUX 8 "2021-05-10" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -u -r -N squid-5.0.5/tools/Makefile.am squid-5.0.6/tools/Makefile.am --- squid-5.0.5/tools/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/tools/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -72,18 +72,18 @@ libexec_PROGRAMS = cachemgr$(CGIEXT) cachemgr__CGIEXT__SOURCES = \ - cachemgr.cc \ CharacterSet.cc \ Here.cc \ MemBuf.cc \ + cachemgr.cc \ test_tools.cc \ time.cc nodist_cachemgr__CGIEXT__SOURCES = \ - tests/STUB.h \ tests/stub_cbdata.cc \ tests/stub_debug.cc \ - tests/stub_libmem.cc + tests/stub_libmem.cc \ + tests/STUB.h cachemgr__CGIEXT__CXXFLAGS = -DDEFAULT_CACHEMGR_CONFIG=\"$(DEFAULT_CACHEMGR_CONFIG)\" $(AM_CXXFLAGS) diff -u -r -N squid-5.0.5/tools/Makefile.in squid-5.0.6/tools/Makefile.in --- squid-5.0.5/tools/Makefile.in 2021-02-08 13:40:48.000000000 +1300 +++ squid-5.0.6/tools/Makefile.in 2021-05-10 22:57:56.000000000 +1200 @@ -166,10 +166,11 @@ CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(man8dir)" PROGRAMS = $(libexec_PROGRAMS) -am_cachemgr__CGIEXT__OBJECTS = cachemgr__CGIEXT_-cachemgr.$(OBJEXT) \ +am_cachemgr__CGIEXT__OBJECTS = \ cachemgr__CGIEXT_-CharacterSet.$(OBJEXT) \ cachemgr__CGIEXT_-Here.$(OBJEXT) \ cachemgr__CGIEXT_-MemBuf.$(OBJEXT) \ + cachemgr__CGIEXT_-cachemgr.$(OBJEXT) \ cachemgr__CGIEXT_-test_tools.$(OBJEXT) \ cachemgr__CGIEXT_-time.$(OBJEXT) am__dirstamp = $(am__leading_dot)dirstamp @@ -837,18 +838,18 @@ TESTSOURCES = test_tools.cc DEFAULT_CACHEMGR_CONFIG = $(sysconfdir)/cachemgr.conf cachemgr__CGIEXT__SOURCES = \ - cachemgr.cc \ CharacterSet.cc \ Here.cc \ MemBuf.cc \ + cachemgr.cc \ test_tools.cc \ time.cc nodist_cachemgr__CGIEXT__SOURCES = \ - tests/STUB.h \ tests/stub_cbdata.cc \ tests/stub_debug.cc \ - tests/stub_libmem.cc + tests/stub_libmem.cc \ + tests/STUB.h cachemgr__CGIEXT__CXXFLAGS = -DDEFAULT_CACHEMGR_CONFIG=\"$(DEFAULT_CACHEMGR_CONFIG)\" $(AM_CXXFLAGS) all: all-recursive @@ -1007,20 +1008,6 @@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< -cachemgr__CGIEXT_-cachemgr.o: cachemgr.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cachemgr__CGIEXT__CXXFLAGS) $(CXXFLAGS) -MT cachemgr__CGIEXT_-cachemgr.o -MD -MP -MF $(DEPDIR)/cachemgr__CGIEXT_-cachemgr.Tpo -c -o cachemgr__CGIEXT_-cachemgr.o `test -f 'cachemgr.cc' || echo '$(srcdir)/'`cachemgr.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cachemgr__CGIEXT_-cachemgr.Tpo $(DEPDIR)/cachemgr__CGIEXT_-cachemgr.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cachemgr.cc' object='cachemgr__CGIEXT_-cachemgr.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cachemgr__CGIEXT__CXXFLAGS) $(CXXFLAGS) -c -o cachemgr__CGIEXT_-cachemgr.o `test -f 'cachemgr.cc' || echo '$(srcdir)/'`cachemgr.cc - -cachemgr__CGIEXT_-cachemgr.obj: cachemgr.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cachemgr__CGIEXT__CXXFLAGS) $(CXXFLAGS) -MT cachemgr__CGIEXT_-cachemgr.obj -MD -MP -MF $(DEPDIR)/cachemgr__CGIEXT_-cachemgr.Tpo -c -o cachemgr__CGIEXT_-cachemgr.obj `if test -f 'cachemgr.cc'; then $(CYGPATH_W) 'cachemgr.cc'; else $(CYGPATH_W) '$(srcdir)/cachemgr.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cachemgr__CGIEXT_-cachemgr.Tpo $(DEPDIR)/cachemgr__CGIEXT_-cachemgr.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cachemgr.cc' object='cachemgr__CGIEXT_-cachemgr.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cachemgr__CGIEXT__CXXFLAGS) $(CXXFLAGS) -c -o cachemgr__CGIEXT_-cachemgr.obj `if test -f 'cachemgr.cc'; then $(CYGPATH_W) 'cachemgr.cc'; else $(CYGPATH_W) '$(srcdir)/cachemgr.cc'; fi` - cachemgr__CGIEXT_-CharacterSet.o: CharacterSet.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cachemgr__CGIEXT__CXXFLAGS) $(CXXFLAGS) -MT cachemgr__CGIEXT_-CharacterSet.o -MD -MP -MF $(DEPDIR)/cachemgr__CGIEXT_-CharacterSet.Tpo -c -o cachemgr__CGIEXT_-CharacterSet.o `test -f 'CharacterSet.cc' || echo '$(srcdir)/'`CharacterSet.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cachemgr__CGIEXT_-CharacterSet.Tpo $(DEPDIR)/cachemgr__CGIEXT_-CharacterSet.Po @@ -1063,6 +1050,20 @@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cachemgr__CGIEXT__CXXFLAGS) $(CXXFLAGS) -c -o cachemgr__CGIEXT_-MemBuf.obj `if test -f 'MemBuf.cc'; then $(CYGPATH_W) 'MemBuf.cc'; else $(CYGPATH_W) '$(srcdir)/MemBuf.cc'; fi` +cachemgr__CGIEXT_-cachemgr.o: cachemgr.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cachemgr__CGIEXT__CXXFLAGS) $(CXXFLAGS) -MT cachemgr__CGIEXT_-cachemgr.o -MD -MP -MF $(DEPDIR)/cachemgr__CGIEXT_-cachemgr.Tpo -c -o cachemgr__CGIEXT_-cachemgr.o `test -f 'cachemgr.cc' || echo '$(srcdir)/'`cachemgr.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cachemgr__CGIEXT_-cachemgr.Tpo $(DEPDIR)/cachemgr__CGIEXT_-cachemgr.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cachemgr.cc' object='cachemgr__CGIEXT_-cachemgr.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cachemgr__CGIEXT__CXXFLAGS) $(CXXFLAGS) -c -o cachemgr__CGIEXT_-cachemgr.o `test -f 'cachemgr.cc' || echo '$(srcdir)/'`cachemgr.cc + +cachemgr__CGIEXT_-cachemgr.obj: cachemgr.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cachemgr__CGIEXT__CXXFLAGS) $(CXXFLAGS) -MT cachemgr__CGIEXT_-cachemgr.obj -MD -MP -MF $(DEPDIR)/cachemgr__CGIEXT_-cachemgr.Tpo -c -o cachemgr__CGIEXT_-cachemgr.obj `if test -f 'cachemgr.cc'; then $(CYGPATH_W) 'cachemgr.cc'; else $(CYGPATH_W) '$(srcdir)/cachemgr.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cachemgr__CGIEXT_-cachemgr.Tpo $(DEPDIR)/cachemgr__CGIEXT_-cachemgr.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cachemgr.cc' object='cachemgr__CGIEXT_-cachemgr.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cachemgr__CGIEXT__CXXFLAGS) $(CXXFLAGS) -c -o cachemgr__CGIEXT_-cachemgr.obj `if test -f 'cachemgr.cc'; then $(CYGPATH_W) 'cachemgr.cc'; else $(CYGPATH_W) '$(srcdir)/cachemgr.cc'; fi` + cachemgr__CGIEXT_-test_tools.o: test_tools.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cachemgr__CGIEXT__CXXFLAGS) $(CXXFLAGS) -MT cachemgr__CGIEXT_-test_tools.o -MD -MP -MF $(DEPDIR)/cachemgr__CGIEXT_-test_tools.Tpo -c -o cachemgr__CGIEXT_-test_tools.o `test -f 'test_tools.cc' || echo '$(srcdir)/'`test_tools.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cachemgr__CGIEXT_-test_tools.Tpo $(DEPDIR)/cachemgr__CGIEXT_-test_tools.Po diff -u -r -N squid-5.0.5/tools/purge/Makefile.am squid-5.0.6/tools/purge/Makefile.am --- squid-5.0.5/tools/purge/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/tools/purge/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -13,19 +13,19 @@ endif purge_SOURCES = \ + conffile.cc \ + conffile.hh \ convert.cc \ convert.hh \ - socket.cc \ - socket.hh \ + copyout.cc \ + copyout.hh \ + purge.cc \ signal.cc \ signal.hh \ + socket.cc \ + socket.hh \ squid-tlv.cc \ - squid-tlv.hh \ - copyout.cc \ - copyout.hh \ - conffile.cc \ - conffile.hh \ - purge.cc + squid-tlv.hh purge_LDADD = \ $(COMPAT_LIB) \ diff -u -r -N squid-5.0.5/tools/purge/Makefile.in squid-5.0.6/tools/purge/Makefile.in --- squid-5.0.5/tools/purge/Makefile.in 2021-02-08 13:40:48.000000000 +1300 +++ squid-5.0.6/tools/purge/Makefile.in 2021-05-10 22:57:56.000000000 +1200 @@ -166,9 +166,9 @@ CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) -am_purge_OBJECTS = convert.$(OBJEXT) socket.$(OBJEXT) signal.$(OBJEXT) \ - squid-tlv.$(OBJEXT) copyout.$(OBJEXT) conffile.$(OBJEXT) \ - purge.$(OBJEXT) +am_purge_OBJECTS = conffile.$(OBJEXT) convert.$(OBJEXT) \ + copyout.$(OBJEXT) purge.$(OBJEXT) signal.$(OBJEXT) \ + socket.$(OBJEXT) squid-tlv.$(OBJEXT) purge_OBJECTS = $(am_purge_OBJECTS) @ENABLE_XPROF_STATS_TRUE@am__DEPENDENCIES_1 = $(top_builddir)/lib/profiler/libprofiler.la am__DEPENDENCIES_2 = $(top_builddir)/compat/libcompatsquid.la \ @@ -739,19 +739,19 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) @ENABLE_WIN32SPECIFIC_FALSE@man_MANS = purge.1 purge_SOURCES = \ + conffile.cc \ + conffile.hh \ convert.cc \ convert.hh \ - socket.cc \ - socket.hh \ + copyout.cc \ + copyout.hh \ + purge.cc \ signal.cc \ signal.hh \ + socket.cc \ + socket.hh \ squid-tlv.cc \ - squid-tlv.hh \ - copyout.cc \ - copyout.hh \ - conffile.cc \ - conffile.hh \ - purge.cc + squid-tlv.hh purge_LDADD = \ $(COMPAT_LIB) \ diff -u -r -N squid-5.0.5/tools/squidclient/Makefile.am squid-5.0.6/tools/squidclient/Makefile.am --- squid-5.0.5/tools/squidclient/Makefile.am 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/tools/squidclient/Makefile.am 2021-05-10 21:02:34.000000000 +1200 @@ -54,16 +54,16 @@ bin_PROGRAMS = squidclient squidclient_SOURCES = \ - gssapi_support.cc \ - gssapi_support.h \ Parameters.h \ Ping.cc \ Ping.h \ + Transport.cc \ + Transport.h \ + gssapi_support.cc \ + gssapi_support.h \ squidclient.cc \ test_tools.cc \ - time.cc \ - Transport.cc \ - Transport.h + time.cc nodist_squidclient_SOURCES = \ tests/stub_debug.cc \ diff -u -r -N squid-5.0.5/tools/squidclient/Makefile.in squid-5.0.6/tools/squidclient/Makefile.in --- squid-5.0.5/tools/squidclient/Makefile.in 2021-02-08 13:40:48.000000000 +1300 +++ squid-5.0.6/tools/squidclient/Makefile.in 2021-05-10 22:57:56.000000000 +1200 @@ -166,9 +166,9 @@ CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) -am_squidclient_OBJECTS = gssapi_support.$(OBJEXT) Ping.$(OBJEXT) \ - squidclient.$(OBJEXT) test_tools.$(OBJEXT) time.$(OBJEXT) \ - Transport.$(OBJEXT) +am_squidclient_OBJECTS = Ping.$(OBJEXT) Transport.$(OBJEXT) \ + gssapi_support.$(OBJEXT) squidclient.$(OBJEXT) \ + test_tools.$(OBJEXT) time.$(OBJEXT) am__dirstamp = $(am__leading_dot)dirstamp nodist_squidclient_OBJECTS = tests/stub_debug.$(OBJEXT) \ tests/stub_libmem.$(OBJEXT) @@ -822,16 +822,16 @@ # Neither of these should be disted from here. TESTSOURCES = test_tools.cc squidclient_SOURCES = \ - gssapi_support.cc \ - gssapi_support.h \ Parameters.h \ Ping.cc \ Ping.h \ + Transport.cc \ + Transport.h \ + gssapi_support.cc \ + gssapi_support.h \ squidclient.cc \ test_tools.cc \ - time.cc \ - Transport.cc \ - Transport.h + time.cc nodist_squidclient_SOURCES = \ tests/stub_debug.cc \ diff -u -r -N squid-5.0.5/tools/squidclient/squidclient.1 squid-5.0.6/tools/squidclient/squidclient.1 --- squid-5.0.5/tools/squidclient/squidclient.1 2021-02-05 11:15:11.000000000 +1300 +++ squid-5.0.6/tools/squidclient/squidclient.1 2021-05-10 21:02:34.000000000 +1200 @@ -219,7 +219,7 @@ . .if !'po4a'hide' .TP .if !'po4a'hide' .B "\-g count" -Ping mode, perform\ +Ping mode, perform .I count iterations (default is to loop until interrupted). .