diff -u -r -N squid-3.2.0.17/acinclude/compiler-flags.m4 squid-3.2.0.18/acinclude/compiler-flags.m4 --- squid-3.2.0.17/acinclude/compiler-flags.m4 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/acinclude/compiler-flags.m4 2012-06-29 13:38:29.000000000 +1200 @@ -47,6 +47,33 @@ }]) ]) +# Check if the compiler requires a supplied flag to build a test program. +# When cross-compiling set flags explicitly. +# +# first argument is the variable containing the result +# (will be set to "yes" or "no") +# second argument is the flag to be tested, verbatim +# third is the #include and global setup for test program, verbatim +# fourth is the test program to compile, verbatim +# +AC_DEFUN([SQUID_CC_REQUIRE_ARGUMENT],[ + AC_CACHE_CHECK([whether compiler requires $2],[$1], + [{ + AC_REQUIRE([AC_PROG_CC]) + SAVED_FLAGS="$CFLAGS" + SAVED_CXXFLAGS="$CXXFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM($3,$4)],[$1=no],[],[$1=no]) + if test "$1" != "no" ; then + CFLAGS="$CXXFLAGS $2" + CXXFLAGS="$CXXFLAGS $2" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM($3,$4)],[$1=yes],[$1=no],[$1=no]) + fi + CFLAGS="$SAVED_CFLAGS" + CXXFLAGS="$SAVED_CXXFLAGS" + }]) + AC_MSG_RESULT([$1]) +]) + # detect what kind of compiler we're using, either by using hints from # autoconf itself, or by using predefined preprocessor macros # sets the variable squid_cv_compiler to one of diff -u -r -N squid-3.2.0.17/acinclude/lib-checks.m4 squid-3.2.0.18/acinclude/lib-checks.m4 --- squid-3.2.0.17/acinclude/lib-checks.m4 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/acinclude/lib-checks.m4 2012-06-29 13:38:29.000000000 +1200 @@ -72,3 +72,25 @@ [ squid_cv_regex_works=no ]) ]) ]) + + +AC_DEFUN([SQUID_CHECK_LIBIPHLPAPI],[ + AC_CACHE_CHECK([for libIpHlpApi],squid_cv_have_libiphlpapi,[ + SQUID_STATE_SAVE(iphlpapi) + LIBS="$LIBS -liphlpapi" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include +#include +#include +]], [[ + MIB_IPNETTABLE i; + unsigned long isz=sizeof(i); + GetIpNetTable(&i,&isz,FALSE); + ]])], + [squid_cv_have_libiphlpapi=yes + SQUID_STATE_COMMIT(iphlpapi)], + [squid_cv_have_libiphlpapi=no + SQUID_STATE_ROLLBACK(iphlpapi)]) + ]) + SQUID_STATE_ROLLBACK(iphlpapi) +]) diff -u -r -N squid-3.2.0.17/acinclude/squid-util.m4 squid-3.2.0.18/acinclude/squid-util.m4 --- squid-3.2.0.17/acinclude/squid-util.m4 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/acinclude/squid-util.m4 2012-06-29 13:38:29.000000000 +1200 @@ -41,7 +41,7 @@ $1_CC="${CC}" $1_CXX="${CXX}" $1_squid_saved_vars="$2" -for squid_util_var_tosave in $2 +for squid_util_var_tosave in $$1_squid_saved_vars do squid_util_var_tosave2="$1_${squid_util_var_tosave}" eval "${squid_util_var_tosave2}=\"${squid_util_var_tosave}\"" diff -u -r -N squid-3.2.0.17/ChangeLog squid-3.2.0.18/ChangeLog --- squid-3.2.0.17/ChangeLog 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/ChangeLog 2012-06-29 13:38:29.000000000 +1200 @@ -1,4 +1,27 @@ -Changes to squid-3.2.0.17 (12 Apr 2011): +Changes to squid-3.2.0.18 (29 Jun 2012): + + - Bug 3576: ICY streams being Transfer-Encoding:chunked + - Bug 3537: statistics histogram leaks memory + - Bug 3526: digest authentication crash + - Bug 3484: Docs: sslproxy_cert_error example flawed + - Bug 3462: Delay Pools and ICAP + - Bug 3405: ssl_crtd crashes failing to remove certificate + - Bug 3380: Mac OSX compile errors with CMSG_SPACE + - Bug 3258: Requests hang when Host forgery verify fails + - Bug 3186: Digest auth caches failed state without revalidating + - Bug 2976: ERR_INVALID_URL for transparently captured requests when reconfiguring + - Bug 2885: AIX: check and set required compiler flags + - Fix ssl_crtd compile issues with libsslutil + - Fix build with GCC 4.7 (and probably other C++11 compilers). + - Fix double-escape of %R on deny_info redirect responses + - Support status 308 Permanent Redirect + - Support for TLSv1.1 and TLSv1.2 options and methods + - Support passing external_acl_type credentials on ICAP + - Language Updates: fr, hy, pt_BR + - ... and many compile issues on Windows + - ... and some minor code polish + +Changes to squid-3.2.0.17 (12 Apr 2012): - Bug 3527: EUI compile errors on Mac OS X 10.5.8 PPC - Bug 3509: kQueue compile error @@ -10,7 +33,7 @@ - Solaris 9/10 various build fixes - ... and some more code polish -Changes to squid-3.2.0.16 (07 Mar 2011): +Changes to squid-3.2.0.16 (07 Mar 2012): - Bug 3508: Correct DNS timeout handling. - Bug 3503: DNS PTR queries timeout due to wrong QIDs. @@ -28,7 +51,7 @@ - ... and several fixes related to in-transit object performance - ... and some structural design changes for portability -Changes to squid-3.2.0.15 (06 Feb 2011): +Changes to squid-3.2.0.15 (06 Feb 2012): - Bug 3472: segfault with the message 'urlParse: URL too large' - Bug 3471: segfault when %la formating code used @@ -363,7 +386,27 @@ - ... and a great many testing improvements - ... and many documentation updates -Changes to squid-3.1.19 (06 Feb 2011): +Changes to squid-3.1.20 (08 Jun 2012): + + - Regression Bug 3545: FreeBSD dnsserver segfaults + - Regression Bug 3504: clientside_tos fails to mark traffic + - Bug 3539: CONNECT server connection not closed correctly on errors + - Bug 3502: client timeout uses server-side read_timeout, not request_timeout + - Bug 3466: Adaptation stuck on last single-byte body piece + - Bug 3463: dnsserver fails to compile + - Bug 3439: correct external_acl_type documented default for ipv4/ipv6 option + - Bug 3390: Proxy auth data visible to scripts + - Bug 3263: ssl_crtd: undefined references to squid_curtime + - Bug 3233: Invalid URL accepted with url host is white spaces + - Bug 3133: Memory leak handling requests for sites that don't exist + - Bug 3074: Improper URL handling with empty path (RFC 3986) + - Bug 3013: segmentation fault on shutdown commSetCloseOnExec at comm.cc:1889 + - Regression: snmp/udp address directives not resolving hostname + - Better helper-to-Squid buffer size management. + - Support CoAP over HTTP (coap:// and coaps:// URLs) + - Support for 3.2 error template codes + +Changes to squid-3.1.19 (06 Feb 2012): - Regression Bug 3441: part 2: Prevent further cache size corruption of swap.state - Bug 3473: erase last uses of obsolete auth_user_hash_pointer @@ -500,7 +543,7 @@ - Bug 3164: Total memory info display 32-bit overflows - Bug 3155: Werror is hard-coded in libTrie build - Bug 3151: squid_kerb_auth: use autoconf LIBS instead of FLAGS for library linkage - - Bug 2976: invalid URL on intercepted requests during reconfigure + - Bug 2976: invalid URL on intercepted requests during reconfigure (workaround) - Bug 2720: comment in same line as cache/mem_replacement_policy causes error - Bug 2621: Provide request headers to RESPMOD when using cache_peer. - Bug 2330: AuthUser objects are never unlocked diff -u -r -N squid-3.2.0.17/compat/cmsg.h squid-3.2.0.18/compat/cmsg.h --- squid-3.2.0.17/compat/cmsg.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.18/compat/cmsg.h 2012-06-29 13:38:29.000000000 +1200 @@ -0,0 +1,18 @@ +#ifndef SQUID_COMPAT_CMSG_H +#define SQUID_COMPAT_CMSG_H + +// CMSG_SPACE is not constant on some systems (in particular Max OS X), +// provide a replacement that can be used at build time in that case + +#if HAVE_SYS_SOCKET_H +#include +#endif + +#if HAVE_CONSTANT_CMSG_SPACE +#define SQUID_CMSG_SPACE CMSG_SPACE +#else +// add 16 bytes for header and data alignment +#define SQUID_CMSG_SPACE(len) (sizeof(struct cmsghdr) + (len) + 16) +#endif + +#endif /* SQUID_COMPAT_CMSG_H */ diff -u -r -N squid-3.2.0.17/compat/Makefile.am squid-3.2.0.18/compat/Makefile.am --- squid-3.2.0.17/compat/Makefile.am 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/compat/Makefile.am 2012-06-29 13:38:29.000000000 +1200 @@ -13,6 +13,7 @@ libcompat_squid_a_SOURCES = \ assert.cc \ assert.h \ + cmsg.h \ compat.cc \ compat.h \ compat_shared.h \ diff -u -r -N squid-3.2.0.17/compat/Makefile.in squid-3.2.0.18/compat/Makefile.in --- squid-3.2.0.17/compat/Makefile.in 2012-04-13 01:45:23.000000000 +1200 +++ squid-3.2.0.18/compat/Makefile.in 2012-06-29 13:39:05.000000000 +1200 @@ -159,6 +159,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ @@ -336,6 +337,7 @@ libcompat_squid_a_SOURCES = \ assert.cc \ assert.h \ + cmsg.h \ compat.cc \ compat.h \ compat_shared.h \ diff -u -r -N squid-3.2.0.17/compat/os/macosx.h squid-3.2.0.18/compat/os/macosx.h --- squid-3.2.0.17/compat/os/macosx.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/compat/os/macosx.h 2012-06-29 13:38:29.000000000 +1200 @@ -18,5 +18,7 @@ //#define s6_addr16 __u6_addr.__u6_addr16 #define s6_addr32 __u6_addr.__u6_addr32 +#include "compat/cmsg.h" + #endif /* _SQUID_APPLE_ */ #endif /* SQUID_OS_MACOSX_H */ diff -u -r -N squid-3.2.0.17/compat/types.h squid-3.2.0.18/compat/types.h --- squid-3.2.0.17/compat/types.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/compat/types.h 2012-06-29 13:38:29.000000000 +1200 @@ -122,6 +122,21 @@ #endif #endif +#ifndef PRIuSIZE +// NP: configure checks for support of %zu and defines where possible +#if SIZEOF_SIZE_T == 4 && _SQUID_MINGW_ +#define PRIuSIZE "I32u" +#elif SIZEOF_SIZE_T == 4 +#define PRIuSIZE "u" +#elif SIZEOF_SIZE_T == 8 && _SQUID_MINGW_ +#define PRIuSIZE "I64u" +#elif SIZEOF_SIZE_T == 8 +#define PRIuSIZE "lu" +#else +#error size_t is not 32-bit or 64-bit +#endif +#endif /* PRIuSIZE */ + #ifndef HAVE_MODE_T typedef unsigned short mode_t; #endif diff -u -r -N squid-3.2.0.17/configure squid-3.2.0.18/configure --- squid-3.2.0.17/configure 2012-04-13 01:47:04.000000000 +1200 +++ squid-3.2.0.18/configure 2012-06-29 13:39:35.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.68 for Squid Web Proxy 3.2.0.17. +# Generated by GNU Autoconf 2.68 for Squid Web Proxy 3.2.0.18. # # Report bugs to . # @@ -575,8 +575,8 @@ # Identity of this package. PACKAGE_NAME='Squid Web Proxy' PACKAGE_TARNAME='squid' -PACKAGE_VERSION='3.2.0.17' -PACKAGE_STRING='Squid Web Proxy 3.2.0.17' +PACKAGE_VERSION='3.2.0.18' +PACKAGE_STRING='Squid Web Proxy 3.2.0.18' PACKAGE_BUGREPORT='http://www.squid-cache.org/bugs/' PACKAGE_URL='' @@ -696,6 +696,7 @@ ENABLE_HTCP_TRUE USE_SQUID_EUI_FALSE USE_SQUID_EUI_TRUE +EUILIB makesnmplib SNMPLIB ENABLE_SNMP_FALSE @@ -1570,7 +1571,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 3.2.0.17 to adapt to many kinds of systems. +\`configure' configures Squid Web Proxy 3.2.0.18 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1640,7 +1641,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Squid Web Proxy 3.2.0.17:";; + short | recursive ) echo "Configuration of Squid Web Proxy 3.2.0.18:";; esac cat <<\_ACEOF @@ -2018,7 +2019,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Squid Web Proxy configure 3.2.0.17 +Squid Web Proxy configure 3.2.0.18 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -3114,7 +3115,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 3.2.0.17, which was +It was created by Squid Web Proxy $as_me 3.2.0.18, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -3933,7 +3934,7 @@ # Define the identity of the package. PACKAGE='squid' - VERSION='3.2.0.17' + VERSION='3.2.0.18' cat >>confdefs.h <<_ACEOF @@ -4120,6 +4121,17 @@ # +# Check if the compiler requires a supplied flag to build a test program. +# When cross-compiling set flags explicitly. +# +# first argument is the variable containing the result +# (will be set to "yes" or "no") +# second argument is the flag to be tested, verbatim +# third is the #include and global setup for test program, verbatim +# fourth is the test program to compile, verbatim +# + + # detect what kind of compiler we're using, either by using hints from # autoconf itself, or by using predefined preprocessor macros # sets the variable squid_cv_compiler to one of @@ -4324,6 +4336,9 @@ + + + PRESET_CFLAGS="$CFLAGS" PRESET_LDFLAGS="$LDFLAGS" @@ -18947,12 +18962,20 @@ fi case "$module" in DiskDaemon) - { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling DiskDaemon DiskIO module" >&5 + case "$squid_host_os" in + mingw) + { $as_echo "$as_me:${as_lineno-$LINENO}: \"DiskDaemon not supported on MinGW\"" >&5 +$as_echo "$as_me: \"DiskDaemon not supported on MinGW\"" >&6;} + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling DiskDaemon DiskIO module" >&5 $as_echo "$as_me: Enabling DiskDaemon DiskIO module" >&6;} - DISK_LIBS="$DISK_LIBS libDiskDaemon.a" - DISK_MODULES="$DISK_MODULES DiskDaemon" - DISK_PROGRAMS="$DISK_PROGRAMS DiskIO/DiskDaemon/diskd" - DISK_LINKOBJS="$DISK_LINKOBJS DiskIO/DiskDaemon/DiskDaemonDiskIOModule.o" + DISK_LIBS="$DISK_LIBS libDiskDaemon.a" + DISK_MODULES="$DISK_MODULES DiskDaemon" + DISK_PROGRAMS="$DISK_PROGRAMS DiskIO/DiskDaemon/diskd" + DISK_LINKOBJS="$DISK_LINKOBJS DiskIO/DiskDaemon/DiskDaemonDiskIOModule.o" + ;; + esac ;; DiskThreads) squid_opt_use_diskthreads="yes" @@ -18966,7 +18989,7 @@ diskthreads_state_CC="${CC}" diskthreads_state_CXX="${CXX}" diskthreads_state_squid_saved_vars="SQUID_CFLAGS SQUID_CXXFLAGS" -for squid_util_var_tosave in SQUID_CFLAGS SQUID_CXXFLAGS +for squid_util_var_tosave in $diskthreads_state_squid_saved_vars do squid_util_var_tosave2="diskthreads_state_${squid_util_var_tosave}" eval "${squid_util_var_tosave2}=\"${squid_util_var_tosave}\"" @@ -20251,6 +20274,7 @@ +test "x$squid_host_os" = "xmingw" && enable_wccp=no # Check whether --enable-wccp was given. if test "${enable_wccp+set}" = set; then : enableval=$enable_wccp; @@ -20279,6 +20303,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: Web Cache Coordination Protocol enabled: $enable_wccp" >&5 $as_echo "$as_me: Web Cache Coordination Protocol enabled: $enable_wccp" >&6;} +test "x$squid_host_os" = "xmingw" && enable_wccpv2=no # Check whether --enable-wccpv2 was given. if test "${enable_wccpv2+set}" = set; then : enableval=$enable_wccpv2; @@ -20484,6 +20509,7 @@ done fi + { $as_echo "$as_me:${as_lineno-$LINENO}: EUI (MAC address) controls enabled: $enable_eui" >&5 $as_echo "$as_me: EUI (MAC address) controls enabled: $enable_eui" >&6;} @@ -20832,7 +20858,7 @@ squid_epoll_state_CC="${CC}" squid_epoll_state_CXX="${CXX}" squid_epoll_state_squid_saved_vars="" -for squid_util_var_tosave in +for squid_util_var_tosave in $squid_epoll_state_squid_saved_vars do squid_util_var_tosave2="squid_epoll_state_${squid_util_var_tosave}" eval "${squid_util_var_tosave2}=\"${squid_util_var_tosave}\"" @@ -21943,7 +21969,7 @@ krbsave_CC="${CC}" krbsave_CXX="${CXX}" krbsave_squid_saved_vars="" -for squid_util_var_tosave in +for squid_util_var_tosave in $krbsave_squid_saved_vars do squid_util_var_tosave2="krbsave_${squid_util_var_tosave}" eval "${squid_util_var_tosave2}=\"${squid_util_var_tosave}\"" @@ -25062,6 +25088,40 @@ _ACEOF +#need the defines for PRIuSIZE +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 +$as_echo_n "checking size of size_t... " >&6; } +if ${ac_cv_sizeof_size_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_size_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (size_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_size_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 +$as_echo "$ac_cv_sizeof_size_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t +_ACEOF + + #need the define for overflow checks # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects @@ -25311,6 +25371,37 @@ fi +# check for compiler support of %zu printf macro + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for compiler %zu support" >&5 +$as_echo_n "checking for compiler %zu support... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +int +main () +{ +size_t n=1;printf("%zu",n); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + $as_echo "#define PRIuSIZE \"zu\"" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 @@ -26080,7 +26171,7 @@ winsock_CC="${CC}" winsock_CXX="${CXX}" winsock_squid_saved_vars="" -for squid_util_var_tosave in +for squid_util_var_tosave in $winsock_squid_saved_vars do squid_util_var_tosave2="winsock_${squid_util_var_tosave}" eval "${squid_util_var_tosave2}=\"${squid_util_var_tosave}\"" @@ -26609,7 +26700,7 @@ maxfd_CC="${CC}" maxfd_CXX="${CXX}" maxfd_squid_saved_vars="" -for squid_util_var_tosave in +for squid_util_var_tosave in $maxfd_squid_saved_vars do squid_util_var_tosave2="maxfd_${squid_util_var_tosave}" eval "${squid_util_var_tosave2}=\"${squid_util_var_tosave}\"" @@ -27909,7 +28000,7 @@ dbopen_libdb_CC="${CC}" dbopen_libdb_CXX="${CXX}" dbopen_libdb_squid_saved_vars="" -for squid_util_var_tosave in +for squid_util_var_tosave in $dbopen_libdb_squid_saved_vars do squid_util_var_tosave2="dbopen_libdb_${squid_util_var_tosave}" eval "${squid_util_var_tosave2}=\"${squid_util_var_tosave}\"" @@ -28006,14 +28097,113 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: Removing -lbsd for AIX..." >&5 $as_echo "$as_me: Removing -lbsd for AIX..." >&6;} LIBS=`echo $LIBS | sed -e s/-lbsd//` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for aix xlc c++ comments support" >&5 -$as_echo_n "checking for aix xlc c++ comments support... " >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler requires -rtti" >&5 +$as_echo_n "checking whether compiler requires -rtti... " >&6; } +if ${ac_cv_require_rtti+:} false; then : + $as_echo_n "(cached) " >&6 +else + { + + SAVED_FLAGS="$CFLAGS" + SAVED_CXXFLAGS="$CXXFLAGS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifndef NULL +#define NULL 0 +#endif +class Foo{ +public:virtual ~Foo(){} +}; +class Bar:public Foo{ +public:Bar():Foo(){} +}; + +int +main () +{ + +Foo * myFoo=new Bar(); +Bar * myBar=dynamic_cast(myFoo); +assert(myBar != NULL); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_require_rtti=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test "ac_cv_require_rtti" != "no" ; then + CFLAGS="$CXXFLAGS -rtti" + CXXFLAGS="$CXXFLAGS -rtti" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifndef NULL +#define NULL 0 +#endif +class Foo{ +public:virtual ~Foo(){} +}; +class Bar:public Foo{ +public:Bar():Foo(){} +}; + +int +main () +{ + +Foo * myFoo=new Bar(); +Bar * myBar=dynamic_cast(myFoo); +assert(myBar != NULL); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_require_rtti=yes +else + ac_cv_require_rtti=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + CFLAGS="$SAVED_CFLAGS" + CXXFLAGS="$SAVED_CXXFLAGS" + } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_require_rtti" >&5 +$as_echo "$ac_cv_require_rtti" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ac_cv_require_rtti" >&5 +$as_echo "ac_cv_require_rtti" >&6; } + + if test "$ac_cv_require_rtti" = "yes"; then + SQUID_CFLAGS="-rtti $SQUID_CFLAGS" + SQUID_CXXFLAGS="-rtti $SQUID_CXXFLAGS" + fi + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler requires -qcpluscmt" >&5 +$as_echo_n "checking whether compiler requires -qcpluscmt... " >&6; } +if ${ac_cv_require_qcpluscmt+:} false; then : + $as_echo_n "(cached) " >&6 +else + { + + SAVED_FLAGS="$CFLAGS" + SAVED_CXXFLAGS="$CXXFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -28026,26 +28216,50 @@ } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - AIX_CPPCMT_SUPPORT=yes + ac_cv_require_qcpluscmt=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test "ac_cv_require_qcpluscmt" != "no" ; then + CFLAGS="$CXXFLAGS -qcpluscmt" + CXXFLAGS="$CXXFLAGS -qcpluscmt" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +//c++ cmt + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_require_qcpluscmt=yes else - AIX_CPPCMT_SUPPORT=no + ac_cv_require_qcpluscmt=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AIX_CPPCMT_SUPPORT" >&5 -$as_echo "$AIX_CPPCMT_SUPPORT" >&6; } - if test -n `echo $CC | grep cc` 2>/dev/null && \ - test -n `cc -qversion 2>/dev/null | grep "IBM XL C/C++ for AIX"` 2>/dev/null; then - if test "$AIX_CPPCMT_SUPPORT"="no";then - SQUID_CFLAGS="-qcpluscmt $SQUID_CFLAGS" - fi fi + CFLAGS="$SAVED_CFLAGS" + CXXFLAGS="$SAVED_CXXFLAGS" + } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_require_qcpluscmt" >&5 +$as_echo "$ac_cv_require_qcpluscmt" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ac_cv_require_qcpluscmt" >&5 +$as_echo "ac_cv_require_qcpluscmt" >&6; } + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + if test "$ac_cv_require_qcpluscmt" = "yes"; then + SQUID_CFLAGS="-qcpluscmt $SQUID_CFLAGS" + fi ;; + *m88k*) SQUID_CFLAGS="$SQUID_CFLAGS -D_SQUID_MOTOROLA_" SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_SQUID_MOTOROLA_" @@ -28511,6 +28725,34 @@ fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for constant CMSG_SPACE" >&5 +$as_echo_n "checking for constant CMSG_SPACE... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #if HAVE_SYS_SOCKET_H + #include + #endif + + int a[CMSG_SPACE(int)]; + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CONSTANT_CMSG_SPACE 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + # Yay! This one is a MacOSX brokenness. Its not good enough @@ -30632,7 +30874,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 3.2.0.17, which was +This file was extended by Squid Web Proxy $as_me 3.2.0.18, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -30698,7 +30940,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 3.2.0.17 +Squid Web Proxy config.status 3.2.0.18 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" diff -u -r -N squid-3.2.0.17/configure.ac squid-3.2.0.18/configure.ac --- squid-3.2.0.17/configure.ac 2012-04-13 01:47:04.000000000 +1200 +++ squid-3.2.0.18/configure.ac 2012-06-29 13:39:35.000000000 +1200 @@ -3,7 +3,7 @@ dnl dnl dnl -AC_INIT([Squid Web Proxy],[3.2.0.17],[http://www.squid-cache.org/bugs/],[squid]) +AC_INIT([Squid Web Proxy],[3.2.0.18],[http://www.squid-cache.org/bugs/],[squid]) AC_PREREQ(2.61) AC_CONFIG_HEADERS([include/autoconf.h]) AC_CONFIG_AUX_DIR(cfgaux) @@ -533,11 +533,18 @@ fi case "$module" in DiskDaemon) - AC_MSG_NOTICE([Enabling DiskDaemon DiskIO module]) - DISK_LIBS="$DISK_LIBS libDiskDaemon.a" - DISK_MODULES="$DISK_MODULES DiskDaemon" - DISK_PROGRAMS="$DISK_PROGRAMS DiskIO/DiskDaemon/diskd" - DISK_LINKOBJS="$DISK_LINKOBJS DiskIO/DiskDaemon/DiskDaemonDiskIOModule.o" + case "$squid_host_os" in + mingw) + AC_MSG_NOTICE(["DiskDaemon not supported on MinGW"]) + ;; + *) + AC_MSG_NOTICE([Enabling DiskDaemon DiskIO module]) + DISK_LIBS="$DISK_LIBS libDiskDaemon.a" + DISK_MODULES="$DISK_MODULES DiskDaemon" + DISK_PROGRAMS="$DISK_PROGRAMS DiskIO/DiskDaemon/diskd" + DISK_LINKOBJS="$DISK_LINKOBJS DiskIO/DiskDaemon/DiskDaemonDiskIOModule.o" + ;; + esac ;; DiskThreads) squid_opt_use_diskthreads="yes" @@ -1023,6 +1030,7 @@ dnl ]) +test "x$squid_host_os" = "xmingw" && enable_wccp=no AC_ARG_ENABLE(wccp, AS_HELP_STRING([--disable-wccp],[Disable Web Cache Coordination Protocol]), [ SQUID_YESNO([$enableval],[unrecognized argument to --disable-wccp: $enableval]) @@ -1030,6 +1038,7 @@ SQUID_DEFINE_BOOL(USE_WCCP, ${enable_wccp:=yes}, [Define to enable WCCP]) AC_MSG_NOTICE([Web Cache Coordination Protocol enabled: $enable_wccp]) +test "x$squid_host_os" = "xmingw" && enable_wccpv2=no AC_ARG_ENABLE(wccpv2, AS_HELP_STRING([--disable-wccpv2], [Disable Web Cache Coordination V2 Protocol]), [ @@ -1125,6 +1134,7 @@ #endif ]]) fi +AC_SUBST(EUILIB) AC_MSG_NOTICE([EUI (MAC address) controls enabled: $enable_eui]) SQUID_DEFINE_BOOL(USE_SQUID_EUI,$enable_eui, [Define this to include code which lets you use ethernet addresses. This code uses API initially defined in 4.4-BSD.]) @@ -2491,6 +2501,8 @@ #need the defines for PRId64 AC_CHECK_SIZEOF(int64_t) AC_CHECK_SIZEOF(long) +#need the defines for PRIuSIZE +AC_CHECK_SIZEOF(size_t) #need the define for overflow checks AC_CHECK_SIZEOF(off_t) AC_CHECK_SIZEOF(size_t) @@ -2522,6 +2534,17 @@ #include #include ]) +# check for compiler support of %zu printf macro +AH_TEMPLATE(PRIuSIZE,[Compiler supports %zu printf macro]) +AC_MSG_CHECKING([for compiler %zu support]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include + ]],[[size_t n=1;printf("%zu",n);]])],[ + AC_DEFINE(PRIuSIZE,"zu") + AC_MSG_RESULT(yes) + ],[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)]) + + dnl Check for special functions AC_FUNC_ALLOCA @@ -2987,19 +3010,36 @@ *-ibm-aix*) AC_MSG_NOTICE([Removing -lbsd for AIX...]) LIBS=`echo $LIBS | sed -e s/-lbsd//` - AC_MSG_CHECKING(for aix xlc c++ comments support) - AC_LANG_PUSH([C]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[//c++ cmt]])], - [AIX_CPPCMT_SUPPORT=yes],[AIX_CPPCMT_SUPPORT=no]) - AC_MSG_RESULT($AIX_CPPCMT_SUPPORT) - if test -n `echo $CC | grep cc` 2>/dev/null && \ - test -n `cc -qversion 2>/dev/null | grep "IBM XL C/C++ for AIX"` 2>/dev/null; then - if test "$AIX_CPPCMT_SUPPORT"="no";then - SQUID_CFLAGS="-qcpluscmt $SQUID_CFLAGS" - fi + + SQUID_CC_REQUIRE_ARGUMENT([ac_cv_require_rtti],[-rtti],[[ +#include +#ifndef NULL +#define NULL 0 +#endif +class Foo{ +public:virtual ~Foo(){} +}; +class Bar:public Foo{ +public:Bar():Foo(){} +}; + ]],[[ +Foo * myFoo=new Bar(); +Bar * myBar=dynamic_cast(myFoo); +assert(myBar != NULL); + ]]) + if test "$ac_cv_require_rtti" = "yes"; then + SQUID_CFLAGS="-rtti $SQUID_CFLAGS" + SQUID_CXXFLAGS="-rtti $SQUID_CXXFLAGS" fi + + AC_LANG_PUSH([C]) + SQUID_CC_REQUIRE_ARGUMENT([ac_cv_require_qcpluscmt],[-qcpluscmt],[[]],[[//c++ cmt]]) AC_LANG_POP([C]) + if test "$ac_cv_require_qcpluscmt" = "yes"; then + SQUID_CFLAGS="-qcpluscmt $SQUID_CFLAGS" + fi ;; + *m88k*) SQUID_CFLAGS="$SQUID_CFLAGS -D_SQUID_MOTOROLA_" SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_SQUID_MOTOROLA_" @@ -3206,6 +3246,20 @@ AC_DEFINE(HAVE_SETRESUID,1,[Yay! Another Linux brokenness. Knowing that setresuid() exists is not enough, because RedHat 5.0 declares setresuid() but does not implement it.]) fi +AC_MSG_CHECKING([for constant CMSG_SPACE]) +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ + #if HAVE_SYS_SOCKET_H + #include + #endif + + int a[CMSG_SPACE(int)]; +]])], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_CONSTANT_CMSG_SPACE, 1, [Define to 1 if CMSG_SPACE is constant]) +], [ + AC_MSG_RESULT(no) +]) + SQUID_CHECK_FUNC_STRNSTR SQUID_CHECK_FUNC_VACOPY SQUID_CHECK_FUNC___VACOPY diff -u -r -N squid-3.2.0.17/contrib/Makefile.in squid-3.2.0.18/contrib/Makefile.in --- squid-3.2.0.17/contrib/Makefile.in 2012-04-13 01:45:24.000000000 +1200 +++ squid-3.2.0.18/contrib/Makefile.in 2012-06-29 13:39:05.000000000 +1200 @@ -108,6 +108,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/doc/Makefile.in squid-3.2.0.18/doc/Makefile.in --- squid-3.2.0.17/doc/Makefile.in 2012-04-13 01:45:24.000000000 +1200 +++ squid-3.2.0.18/doc/Makefile.in 2012-06-29 13:39:05.000000000 +1200 @@ -143,6 +143,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/doc/manuals/Makefile.in squid-3.2.0.18/doc/manuals/Makefile.in --- squid-3.2.0.17/doc/manuals/Makefile.in 2012-04-13 01:45:24.000000000 +1200 +++ squid-3.2.0.18/doc/manuals/Makefile.in 2012-06-29 13:39:05.000000000 +1200 @@ -104,6 +104,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/errors/fr/ERR_INVALID_REQ squid-3.2.0.18/errors/fr/ERR_INVALID_REQ --- squid-3.2.0.17/errors/fr/ERR_INVALID_REQ 2012-04-13 02:08:23.000000000 +1200 +++ squid-3.2.0.18/errors/fr/ERR_INVALID_REQ 2012-06-29 13:45:56.000000000 +1200 @@ -1 +1 @@ - ERREUR: L'URL demandée n'a pas pu être trouvé

ERROR

The requested URL could not be retrieved


Requête invalide une erreur a été rencontrée en essayant de traiter la requête :

%R

Problèmes possibles :

  • Requête de la méthode non précisée ou inconnue.

  • L'URL n'est pas spécifiée

  • L'identifiant HTTP est absent pour (HTTP/1.0).

  • La requête est trop volumineuse

  • Le champ "Content-Length" est absent, pour l'utilisation des requêtes avec POST ou PUT

  • Caractère non valide dans le nom d'hôte; Les caractères soulignés (underscores) ne sont pas autorisés.

  • HTTP/1.1 Expect: cette fonction a besoin du logiciel HTTP/1.0.

Votre administrateur proxy est %w.



\ No newline at end of file + ERREUR: L'URL demandée n'a pas pu être trouvé

ERROR

The requested URL could not be retrieved


Requête invalide une erreur a été rencontrée en essayant de traiter la requête :

%R

Problèmes possibles :

  • Requête de la méthode non précisée ou inconnue.

  • L'URL n'est pas spécifiée

  • L'identifiant HTTP est absent pour (HTTP/1.0).

  • La requête est trop grande

  • Le champ "Content-Length" est absent, pour l'utilisation des requêtes avec POST ou PUT

  • Caractère illégal dans le nom d'hôte; Le caractère tiret bas n'est pas autorisé.

  • HTTP/1.1 Expect: cette fonction a besoin du logiciel HTTP/1.0.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/fr/ERR_INVALID_URL squid-3.2.0.18/errors/fr/ERR_INVALID_URL --- squid-3.2.0.17/errors/fr/ERR_INVALID_URL 2012-04-13 02:08:27.000000000 +1200 +++ squid-3.2.0.18/errors/fr/ERR_INVALID_URL 2012-06-29 13:45:57.000000000 +1200 @@ -1 +1 @@ - ERREUR: L'URL demandée n'a pas pu être trouvé

ERROR

The requested URL could not be retrieved


L'erreur suivante s'est produite en essayant d'accéder à l'URL : %U

URL invalide

Quelque chose dans l'adresse URL est incorrect.

Problèmes possibles :

  • Le protocole d'accès est absent ou incorrect (il doit être sous la forme http:// ou similaire)

  • Le nom d'hôte n'est pas spécifié

  • Les double espaces ne sont pas valides dans une adresse URL

  • Caractère non valide dans le nom d'hôte; Les caractères soulignés (underscores) ne sont pas autorisés.

Votre administrateur proxy est %w.



\ No newline at end of file + ERREUR: L'URL demandée n'a pas pu être trouvé

ERROR

The requested URL could not be retrieved


L'erreur suivante s'est produite en essayant d'accéder à l'URL : %U

URL invalide

Certains aspects de l'adresse URL est incorrect.

Problèmes possibles :

  • Le protocole d'accès est absent ou incorrect (il doit être sous la forme http:// ou similaire)

  • Le nom d'hôte n'est pas spécifié

  • Les doubles espaces sont illégaux dans une adresse URL

  • Caractère illégal dans le nom d'hôte; Le caractère tiret bas n'est pas autorisé.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/fr/ERR_TOO_BIG squid-3.2.0.18/errors/fr/ERR_TOO_BIG --- squid-3.2.0.17/errors/fr/ERR_TOO_BIG 2012-04-13 02:08:43.000000000 +1200 +++ squid-3.2.0.18/errors/fr/ERR_TOO_BIG 2012-06-29 13:46:02.000000000 +1200 @@ -1 +1 @@ - ERREUR: L'URL demandée n'a pas pu être trouvé

ERROR

The requested URL could not be retrieved


L'erreur suivante s'est produite en essayant d'accéder à l'URL : %U

La requête ou la réponse sont trop volumineuses.

Si vous effectuez une requête avec POST ou PUT, l'élément que vous essayez d'envoyer est alors trop volumineux.

Si vous effectuez une requête avec GET, l'élément que vous essayez de télécharger est alors trop volumineux.

Ces limites ont été fixées par le Fournisseur d'Accès Internet et agissent sur ce proxy. Si vous pensez que c'est une erreur, contactez le fournisseur d'accès.

Votre administrateur proxy est %w.



\ No newline at end of file + ERREUR: L'URL demandée n'a pas pu être trouvé

ERROR

The requested URL could not be retrieved


L'erreur suivante s'est produite en essayant d'accéder à l'URL : %U

La requête ou la réponse est trop grande.

Si vous effectuez une requête avec POST ou PUT, l'élément que vous essayez d'envoyer est alors trop volumineux.

Si vous effectuez une requête avec GET, l'élément que vous essayez de télécharger est alors trop volumineux.

Ces limites ont été fixées par le Fournisseur d'Accès Internet et agissent sur ce proxy. Si vous pensez que c'est une erreur, contactez le fournisseur d'accès.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/fr/ERR_URN_RESOLVE squid-3.2.0.18/errors/fr/ERR_URN_RESOLVE --- squid-3.2.0.17/errors/fr/ERR_URN_RESOLVE 2012-04-13 02:08:48.000000000 +1200 +++ squid-3.2.0.18/errors/fr/ERR_URN_RESOLVE 2012-06-29 13:46:04.000000000 +1200 @@ -1 +1 @@ - ERREUR: The requested URN could not be retrieved

ERROR

En utilisant URN, la requête URL n'a pas pu être chargée.


L'erreur suivante s'est produite en essayant d'accéder à l'URN : %U

Impossible de résoudre l'URN

Hé! Il ne faut pas attendre grand-chose des URNs avec %T :)

Votre administrateur proxy est %w.



\ No newline at end of file + ERREUR: The requested URN could not be retrieved

ERROR

L'URL n'a pas pu être chargée pour une demande URN


L'erreur suivante s'est produite en essayant d'accéder à l'URN : %U

Impossible de résoudre l'URN

Hé! Il ne faut pas attendre grand-chose des URNs avec %T :)

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/hy/ERR_AGENT_WPAD squid-3.2.0.18/errors/hy/ERR_AGENT_WPAD --- squid-3.2.0.17/errors/hy/ERR_AGENT_WPAD 2012-04-13 02:11:29.000000000 +1200 +++ squid-3.2.0.18/errors/hy/ERR_AGENT_WPAD 2012-06-29 13:46:56.000000000 +1200 @@ -1 +1 @@ - Վեբ բրաուզերի կարգաբերումներ

ՍԽԱԼ

Web Browser Configuration


Այս ցանցից օգտվելու համար Ձեր բրաուզերը անհրաժեշտ է կարգաբերել

Ինչպես փնտրել այս կարգաբերումները քո բրաուզերում:

Firefox բրաուզերի համար այցելեք:
  • Գործիքներ -> Կարգաբերումներ -> Լրացուցիչ -> Ցանց -> Կապի կարգաբերումներ
  • Ընտրեք Automatically detect settings
Internet Explorer բրաուզերի համար այցելեք:
  • Գործիքներ -> Ինտերնետ կարգաբերումներ -> Կապ -> LAN կարգաբերումներ ->Պրոքսի
  • Ընտրեք Automatically detect settings
Opera բրաուզերի համար այցելեք:
  • Գործիքներ -> Նախընտրություններ -> Լրացուցիչ -> Ցանց -> Պրոքսի սերվերներ
  • Ընտրեք Use Automatic proxy configuration

Ձեր քեշի կառավարիչը %w է.



\ No newline at end of file + Վեբ բրաուզերի կարգաբերումներ

ՍԽԱԼ

Web Browser Configuration


Այս ցանցից օգտվելու համար Ձեր բրաուզերը անհրաժեշտ է կարգաբերել

Ինչպես փնտրել այս կարգաբերումները քո բրաուզերում:

Firefox բրաուզերի համար այցելեք:
  • Գործիքներ -> Կարգաբերումներ -> Լրացուցիչ -> Ցանց -> Կապի կարգաբերումներ
  • Ընտրեք Auto-detect proxy settings for this network
Internet Explorer բրաուզերի համար այցելեք:
  • Գործիքներ -> Ինտերնետ կարգաբերումներ -> Կապ -> LAN կարգաբերումներ ->Պրոքսի
  • Ընտրեք Automatically detect settings
Opera բրաուզերի համար այցելեք:
  • Գործիքներ -> Նախընտրություններ -> Լրացուցիչ -> Ցանց -> Պրոքսի սերվերներ
  • Ընտրեք Use Automatic proxy configuration

Ձեր քեշի կառավարիչը %w է.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/hy/ERR_CANNOT_FORWARD squid-3.2.0.18/errors/hy/ERR_CANNOT_FORWARD --- squid-3.2.0.17/errors/hy/ERR_CANNOT_FORWARD 2012-04-13 02:11:35.000000000 +1200 +++ squid-3.2.0.18/errors/hy/ERR_CANNOT_FORWARD 2012-06-29 13:46:58.000000000 +1200 @@ -1 +1 @@ - ՍԽԱԼ: Պահանջվող URL-ն հնարավոր չէ ստանալ

ERROR

The requested URL could not be retrieved


URL-ի ստացման ընթացքում առաջացավ հետևյալ սխալը: %U

Ձեր հարցումը հնարավոր չէ վերահասցեագրել տվյալ պահին

This request could not be forwarded to the origin server or to any parent caches.

Հնարավոր պատճառներն են:

  • An Internet connection needed to access this domains origin servers may be down.
  • All configured parent caches may be currently unreachable.
  • The administrator may not allow this cache to make direct connections to origin servers.

Ձեր քեշի կառավարիչը %w է.



\ No newline at end of file + ՍԽԱԼ: Պահանջվող URL-ն հնարավոր չէ ստանալ

ERROR

The requested URL could not be retrieved


URL-ի ստացման ընթացքում առաջացավ հետևյալ սխալը: %U

Ձեր հարցումը հնարավոր չէ վերահասցեագրել տվյալ պահին

Հարցումը չի կարող վերահասցեագրվել որևէ ծնողական քեշի

Հնարավոր պատճառներն են:

  • Հնարավոր է, ելակետային սերվերներին միանալու համար անհրաժեշտ կապը խափանվել է
  • Բոլոր ծնողական քեշերը կարող են զբաղված լինել այս պահին
  • Կառավարիչը կարող է արգելել ուղիղ կապ հաստատել ելակետային սերվերների հետ

Ձեր քեշի կառավարիչը %w է.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/hy/ERR_CONFLICT_HOST squid-3.2.0.18/errors/hy/ERR_CONFLICT_HOST --- squid-3.2.0.17/errors/hy/ERR_CONFLICT_HOST 2012-04-13 02:11:36.000000000 +1200 +++ squid-3.2.0.18/errors/hy/ERR_CONFLICT_HOST 2012-06-29 13:46:58.000000000 +1200 @@ -1 +1 @@ - ՍԽԱԼ: Պահանջվող URL-ն հնարավոր չէ ստանալ

ERROR

The requested URL could not be retrieved


URL-ի ստացման ընթացքում առաջացավ հետևյալ սխալը: %U

URI Host Conflict

This means the domain name you are trying to access apparently no longer exists on the machine you are requesting it from.

Հնարավոր պատճառներն են:

  • The domain may have moved very recently. Trying again will resolve that.
  • The website may require you to use a local country-based version. Using your ISP provided DNS server(s) should resolve that.

Ձեր քեշի կառավարիչը %w է.



\ No newline at end of file + ՍԽԱԼ: Պահանջվող URL-ն հնարավոր չէ ստանալ

ERROR

The requested URL could not be retrieved


URL-ի ստացման ընթացքում առաջացավ հետևյալ սխալը: %U

URI հանգույցի կոնֆլիկտ

Սա նշանակում է, որ դոմեյնը ,որին փորձում եք կապվել, այլևս գոյություն չունի

Հնարավոր պատճառներն են:

  • Հնարավոր է, դոմենը տեղափոխվել է․ Կրկին փորձեք
  • Օգտագործեք Ձեր պրովայդերի տրամադրած DNS սերվերները

Ձեր քեշի կառավարիչը %w է.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/hy/ERR_SOCKET_FAILURE squid-3.2.0.18/errors/hy/ERR_SOCKET_FAILURE --- squid-3.2.0.17/errors/hy/ERR_SOCKET_FAILURE 2012-04-13 02:12:16.000000000 +1200 +++ squid-3.2.0.18/errors/hy/ERR_SOCKET_FAILURE 2012-06-29 13:47:12.000000000 +1200 @@ -1 +1 @@ - ՍԽԱԼ: Պահանջվող URL-ն հնարավոր չէ ստանալ

ERROR

The requested URL could not be retrieved


URL-ի ստացման ընթացքում առաջացավ հետևյալ սխալը: %U

Socket ձախողում

Ստացված պատասխանը: %E

Squid-ը չի կարող ստեղծել TCP Socket, հավանաբար գերբեռնվածության պատճառով: Խնդրվում է կրկնել հարցումը: Եթե իրավիճակը կրկնվի, դիմեք քեշի կառավարիչին․:

Ձեր քեշի կառավարիչը %w է.



\ No newline at end of file + ՍԽԱԼ: Պահանջվող URL-ն հնարավոր չէ ստանալ

ERROR

The requested URL could not be retrieved


URL-ի ստացման ընթացքում առաջացավ հետևյալ սխալը: %U

Socket -ի ձախողում

Ստացված պատասխանը: %E

Squid-ը չի կարող ստեղծել TCP Socket, հավանաբար գերբեռնվածության պատճառով: Խնդրվում է կրկնել հարցումը: Եթե իրավիճակը կրկնվի, դիմեք քեշի կառավարիչին․:

Ձեր քեշի կառավարիչը %w է.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/hy/ERR_UNSUP_HTTPVERSION squid-3.2.0.18/errors/hy/ERR_UNSUP_HTTPVERSION --- squid-3.2.0.17/errors/hy/ERR_UNSUP_HTTPVERSION 2012-04-13 02:12:19.000000000 +1200 +++ squid-3.2.0.18/errors/hy/ERR_UNSUP_HTTPVERSION 2012-06-29 13:47:13.000000000 +1200 @@ -1 +1 @@ - ՍԽԱԼ: Պահանջվող URL-ն հնարավոր չէ ստանալ

ERROR

HTTP արձանագրության այս վարկածը չի աջակցվում


URL-ի ստացման ընթացքում առաջացավ հետևյալ սխալը: %U

Unsupported HTTP version

HTTP արձանագրության այն տեսակը,որը Դուք փորձում եք օգտագործել,այս Squid-ը չի ընդունում:

Ձեր քեշի կառավարիչը %w է.



\ No newline at end of file + ՍԽԱԼ: Պահանջվող URL-ն հնարավոր չէ ստանալ

ERROR

HTTP արձանագրության այս վարկածը չի աջակցվում


URL-ի ստացման ընթացքում առաջացավ հետևյալ սխալը: %U

Unsupported HTTP version

HTTP արձանագրության այն տեսակը, որը Դուք փորձում եք օգտագործել,այս Squid-ը չի ընդունում:

Ձեր քեշի կառավարիչը %w է.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/Makefile.in squid-3.2.0.18/errors/Makefile.in --- squid-3.2.0.17/errors/Makefile.in 2012-04-13 01:45:25.000000000 +1200 +++ squid-3.2.0.18/errors/Makefile.in 2012-06-29 13:39:06.000000000 +1200 @@ -108,6 +108,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_ACCESS_DENIED squid-3.2.0.18/errors/pt-br/ERR_ACCESS_DENIED --- squid-3.2.0.17/errors/pt-br/ERR_ACCESS_DENIED 2012-04-13 02:24:06.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_ACCESS_DENIED 2012-06-29 13:50:57.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Acesso Negado.

Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Acesso negado.

A configuração do controle de acesso impede que sua requisição seja permitida neste momento. Por favor, contate seu provedor de serviço se você acha que isso está incorreto.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_ACL_TIME_QUOTA_EXCEEDED squid-3.2.0.18/errors/pt-br/ERR_ACL_TIME_QUOTA_EXCEEDED --- squid-3.2.0.17/errors/pt-br/ERR_ACL_TIME_QUOTA_EXCEEDED 2012-04-13 02:24:08.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_ACL_TIME_QUOTA_EXCEEDED 2012-06-29 13:50:57.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Time Quota Exceeded.

This proxy limits your time online with a quota. Your time budget is now empty but will be refilled when the configured time period starts again.

These limits have been established by the Internet Service Provider who operates this cache. Please contact them directly if you feel this is an error.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Quota de tempo Excedida.

Este proxy limita seu tempo conectado com uma cota. Sua cota de tempo está vazia agora mas será recarregada quando o período de tempo configurado recomeçar.

Esses limites foram estabelecidos pelo Provedor de Serviço Internet que opera este cache. Por favor, contate-os diretamente se você acha que isso é um erro.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_AGENT_CONFIGURE squid-3.2.0.18/errors/pt-br/ERR_AGENT_CONFIGURE --- squid-3.2.0.17/errors/pt-br/ERR_AGENT_CONFIGURE 2012-04-13 02:24:09.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_AGENT_CONFIGURE 2012-06-29 13:50:58.000000000 +1200 @@ -1 +1 @@ - Web Browser Configuration

ERRO

Web Browser Configuration


Your Web Browser configuration needs to be corrected to use this network.

How to find these settings in your browser:

For Firefox browsers go to:
  • Tools -> Options -> Advanced -> Network -> Connection Settings
  • In the HTTP proxy box type the proxy name %h and port %b.
For Internet Explorer browsers go to:
  • Tools -> Internet Options -> Connection -> LAN Settings ->Proxy
  • In the HTTP proxy box type the proxy name %h and port %b.
For Opera browsers go to:
  • Tools -> Preferences -> Advanced -> Network -> Proxy Servers
  • In the HTTP proxy box type the proxy name %h and port %b.

Seu administrador do cache é %w.



\ No newline at end of file + Configuração do Navegador Web

ERRO

Web Browser Configuration


A configuração de seu navegador precisa ser corrigida para usar esta rede.

Como encontrar estas configurações no seu navegador:

Para navegadores Firefox vá para:
  • Ferramentas -> Opções -> Avançado -> Rede -> Configurações da Conexão
  • Na caixa HTTP proxy digite o nome do proxy %h e porta %b.
Para navegadores Internet Expĺorer vá para:
  • Ferramentas -> Opções de Internet -> Conexão -> Configurações da LAN ->Proxy
  • In the HTTP proxy box type the proxy name %h and port %b.
Para navegadores Opera vá para:
  • Ferramentas -> Preferências -> Avançado -> Rede -> Servidores Proxy
  • In the HTTP proxy box type the proxy name %h and port %b.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_AGENT_WPAD squid-3.2.0.18/errors/pt-br/ERR_AGENT_WPAD --- squid-3.2.0.17/errors/pt-br/ERR_AGENT_WPAD 2012-04-13 02:24:11.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_AGENT_WPAD 2012-06-29 13:50:58.000000000 +1200 @@ -1 +1 @@ - Web Browser Configuration

ERRO

Web Browser Configuration


Your Web Browser configuration needs to be corrected to use this network.

How to find these settings in your browser:

For Firefox browsers go to:
  • Tools -> Options -> Advanced -> Network -> Connection Settings
  • Select Auto-detect proxy settings for this network
For Internet Explorer browsers go to:
  • Tools -> Internet Options -> Connection -> LAN Settings ->Proxy
  • Select Automatically detect settings
For Opera browsers go to:
  • Tools -> Preferences -> Advanced -> Network -> Proxy Servers
  • Select Use Automatic proxy configuration

Seu administrador do cache é %w.



\ No newline at end of file + Configuração do Navegador Web

ERRO

Web Browser Configuration


A configuração de seu navegador precisa ser corrigida para usar esta rede.

Como encontrar estas configurações no seu navegador:

Para navegadores Firefox vá para:
  • Ferramentas -> Opções -> Avançado -> Rede -> Configurações da Conexão
  • Selecionar configurações de auto-detecção de proxy para esta rede
Para navegadores Internet Expĺorer vá para:
  • Ferramentas -> Opções de Internet -> Conexão -> Configurações da LAN ->Proxy
  • Selecione Detectar configurações automaticamente
Para navegadores Opera vá para:
  • Ferramentas -> Preferências -> Avançado -> Rede -> Servidores Proxy
  • Selecione Usar configuração automática de proxy

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_CACHE_ACCESS_DENIED squid-3.2.0.18/errors/pt-br/ERR_CACHE_ACCESS_DENIED --- squid-3.2.0.17/errors/pt-br/ERR_CACHE_ACCESS_DENIED 2012-04-13 02:24:12.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_CACHE_ACCESS_DENIED 2012-06-29 13:50:59.000000000 +1200 @@ -1 +1 @@ - ERRO: Cache Access Denied

ERROR

Cache Acesso Negado.


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Acesso negado ao cache.

Desculpe. Atualmente, você não está permitido a requisitar %U desse cache até que você tenha se autenticado.

Please contact the cache administrator if you have difficulties authenticating yourself.



\ No newline at end of file + ERRO: Cache Access Denied

ERROR

Cache Acesso negado.


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Acesso negado ao cache.

Desculpe. Atualmente, você não tem permissáo para requisitar %U deste cache até que você tenha se autenticado.

Por favor, contate o administrador do cache se você está tendo dificuldades em se autenticar ou mude sua senha.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_CACHE_MGR_ACCESS_DENIED squid-3.2.0.18/errors/pt-br/ERR_CACHE_MGR_ACCESS_DENIED --- squid-3.2.0.17/errors/pt-br/ERR_CACHE_MGR_ACCESS_DENIED 2012-04-13 02:24:14.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_CACHE_MGR_ACCESS_DENIED 2012-06-29 13:50:59.000000000 +1200 @@ -1 +1 @@ - ERRO: Cache Manager Access Denied

ERROR

Cache Manager Acesso Negado.


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Acesso negado ao gerenciador de cache.

Desculpe. Atualmente, você não tem permissão para requisitar %U deste gerenciador de cache até que você tenha se autenticado.

Por favor, contate o administrador do cache se você está tendo dificuldades em se autenticar ou, se você é o administrador, leia a documentação do Squid na interface de gerenciamento de cache e cheque o log para maiores detalhes sobre mensagens de erro.



\ No newline at end of file + ERRO: Cache Manager Access Denied

ERROR

Cache Manager Acesso negado.


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Acesso negado ao gerenciador de cache.

Desculpe. Atualmente, você não tem permissão para requisitar %U deste gerenciador de cache até que você tenha se autenticado.

Por favor, contate o administrador do cache se você está tendo dificuldades em se autenticar ou, se você é o administrador, leia a documentação do Squid na interface de gerenciamento de cache e cheque o log para maiores detalhes sobre mensagens de erro.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_CANNOT_FORWARD squid-3.2.0.18/errors/pt-br/ERR_CANNOT_FORWARD --- squid-3.2.0.17/errors/pt-br/ERR_CANNOT_FORWARD 2012-04-13 02:24:15.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_CANNOT_FORWARD 2012-06-29 13:51:00.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Impossível encaminhar esta requisição nesse momento.

This request could not be forwarded to the origin server or to any parent caches.

Alguns dos possíveis problemas são:

  • An Internet connection needed to access this domains origin servers may be down.
  • All configured parent caches may be currently unreachable.
  • The administrator may not allow this cache to make direct connections to origin servers.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Impossível encaminhar esta requisição nesse momento.

Esta requisição não pode ser repassada para o servidor de origem ou para qualquer cache pai.

Alguns dos possíveis problemas são:

  • Uma conexão à Internet necessária para acessar estes servidores de origem de domínios parece estar fora.
  • Todos os caches-pais configurados parecem estar fora de alcance no momento.
  • O administrador pode não ter permitido que este cache fizesse conexoes diretas a servidores de origem.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_CONFLICT_HOST squid-3.2.0.18/errors/pt-br/ERR_CONFLICT_HOST --- squid-3.2.0.17/errors/pt-br/ERR_CONFLICT_HOST 2012-04-13 02:24:17.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_CONFLICT_HOST 2012-06-29 13:51:00.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

URI Host Conflict

This means the domain name you are trying to access apparently no longer exists on the machine you are requesting it from.

Alguns dos possíveis problemas são:

  • The domain may have moved very recently. Trying again will resolve that.
  • The website may require you to use a local country-based version. Using your ISP provided DNS server(s) should resolve that.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Conflito de máquina de URI

Isto significa que o nome de domínio que você está tentando acessar aparentemente não existe mais na máquina onde você está requisitando.

Alguns dos possíveis problemas são:

  • O domínio pode ter se movido muito recentemente. Tentar de novo pode resolver isto.
  • O website pode exigir que você use uma versão baseada no país local. Usar o(s) servidore(s) DNS fornecido(s) por seu provedor pode resolver isto.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_CONNECT_FAIL squid-3.2.0.18/errors/pt-br/ERR_CONNECT_FAIL --- squid-3.2.0.17/errors/pt-br/ERR_CONNECT_FAIL 2012-04-13 02:24:19.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_CONNECT_FAIL 2012-06-29 13:51:01.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Conexão para %I falhou.

O sistema retornou: %E

The remote host or network may be down. Please try the request again.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Conexão para %I falhou.

O sistema retornou: %E

O host ou rede remota pode estar fora do ar. Por favor, faça a requisição novamente.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_DIR_LISTING squid-3.2.0.18/errors/pt-br/ERR_DIR_LISTING --- squid-3.2.0.17/errors/pt-br/ERR_DIR_LISTING 2012-04-13 02:24:20.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_DIR_LISTING 2012-06-29 13:51:02.000000000 +1200 @@ -1 +1 @@ - Diretório: %U

Directório: %U/


Conteúdo do diretório:

%z
%g
Diretório pai (Diretório raiz)

\ No newline at end of file + Diretório: %U

Diretório: %U/


Conteúdo do diretório:

%z
%g
Diretório pai (Diretório raiz)

\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_FORWARDING_DENIED squid-3.2.0.18/errors/pt-br/ERR_FORWARDING_DENIED --- squid-3.2.0.17/errors/pt-br/ERR_FORWARDING_DENIED 2012-04-13 02:24:25.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_FORWARDING_DENIED 2012-06-29 13:51:05.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Encaminhamento Negado.

This cache will not forward your request because it is trying to enforce a sibling relationship. Perhaps the client at %i is a cache which has been misconfigured.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Encaminhamento Negado.

Este cache não encaminhará sua requisição porque está tentando forçar um relacionamento. Talvez o cliente em %i é um cache que está mal configurado.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_FTP_NOT_FOUND squid-3.2.0.18/errors/pt-br/ERR_FTP_NOT_FOUND --- squid-3.2.0.17/errors/pt-br/ERR_FTP_NOT_FOUND 2012-04-13 02:24:31.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_FTP_NOT_FOUND 2012-06-29 13:51:09.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


A seguinte URL não pôde ser recuperada: %U

Squid enviou o seguinte comando FTP:

%f

O servidor respondeu com:

%F
%g

This might be caused by an FTP URL with an absolute path (which does not comply with RFC 1738). If this is the cause, then the file can be found at %B.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


A seguinte URL não pôde ser recuperada: %U

Squid enviou o seguinte comando FTP:

%f

O servidor respondeu com:

%F
%g

Isto pode ser causa de uma URL de FTP com um caminho absoluto (que não é conforme com a RFC 1738). Se esta for a causa, então o arquivo pode ser encontrado em %B.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_FTP_PUT_CREATED squid-3.2.0.18/errors/pt-br/ERR_FTP_PUT_CREATED --- squid-3.2.0.17/errors/pt-br/ERR_FTP_PUT_CREATED 2012-04-13 02:24:33.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_FTP_PUT_CREATED 2012-06-29 13:51:10.000000000 +1200 @@ -1 +1 @@ - FTP PUT Successful.

Operação bem sucedida

Arquivo criado




\ No newline at end of file + PUT FTP bem sucedido.

Operação bem sucedida

Arquivo criado




\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_FTP_PUT_ERROR squid-3.2.0.18/errors/pt-br/ERR_FTP_PUT_ERROR --- squid-3.2.0.17/errors/pt-br/ERR_FTP_PUT_ERROR 2012-04-13 02:24:34.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_FTP_PUT_ERROR 2012-06-29 13:51:11.000000000 +1200 @@ -1 +1 @@ - ERRO: FTP upload failed

ERROR

FTP PUT upload failed


Um erro no protocolo FTP ocorreu ao tentar recuperar a URL: %U

Squid enviou o seguinte comando FTP:

%f

O servidor respondeu com:

%F

Isto significa que o servidor FTP não tem permissão ou espaço suficiente para armazenar o arquivo. Verifique o caminho, permissão, espaço em disco e tente novamente.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: FTP upload failed

ERROR

Upload de FTP PUT falhou


Um erro no protocolo FTP ocorreu ao tentar recuperar a URL: %U

Squid enviou o seguinte comando FTP:

%f

O servidor respondeu com:

%F

Isto significa que o servidor FTP não tem permissão ou espaço suficiente para armazenar o arquivo. Verifique o caminho, permissão, espaço em disco e tente novamente.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_FTP_PUT_MODIFIED squid-3.2.0.18/errors/pt-br/ERR_FTP_PUT_MODIFIED --- squid-3.2.0.17/errors/pt-br/ERR_FTP_PUT_MODIFIED 2012-04-13 02:24:36.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_FTP_PUT_MODIFIED 2012-06-29 13:51:12.000000000 +1200 @@ -1 +1 @@ - FTP PUT Successful.

Operação bem sucedida

Arquivo atualizado




\ No newline at end of file + PUT FTP bem sucedido.

Operação bem sucedida

Arquivo atualizado




\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_GATEWAY_FAILURE squid-3.2.0.18/errors/pt-br/ERR_GATEWAY_FAILURE --- squid-3.2.0.17/errors/pt-br/ERR_GATEWAY_FAILURE 2012-04-13 02:24:39.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_GATEWAY_FAILURE 2012-06-29 13:51:14.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Gateway Proxy Failure

A non-recoverable internal failure or configuration problem prevents this request from being completed.

This may be due to limits established by the Internet Service Provider who operates this cache. Please contact them directly for more information.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Falha de Gateway Proxy

Uma falha interna ou problema de configuração irrecuperáveis impedem que esta requisição seja completada.

Isto pode ser devido aos limites estabelecidos pelo provedor de internet que opera este cache. Por favor contate-os para mais informações.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_INVALID_REQ squid-3.2.0.18/errors/pt-br/ERR_INVALID_REQ --- squid-3.2.0.17/errors/pt-br/ERR_INVALID_REQ 2012-04-13 02:24:42.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_INVALID_REQ 2012-06-29 13:51:16.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


Requisição Inválida erro encontrado ao tentar processar a requisição:

%R

Alguns dos possíveis problemas são:

  • Método de requisição faltando ou desconhecido.

  • URL faltando.

  • Identificador HTTP faltando (HTTP/1.0).

  • Requisição é muito grande.

  • Content-Length faltando para requisições POST ou PUT.

  • Caracter ilegal no nome de host; underscores não são permitidos.

  • HTTP/1.1 Expect: feature is being asked from an HTTP/1.0 software.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


Requisição Inválida erro encontrado ao tentar processar a requisição:

%R

Alguns dos possíveis problemas são:

  • Método de requisição faltando ou desconhecido.

  • URL faltando.

  • Identificador HTTP faltando (HTTP/1.0).

  • Requisição é muito grande.

  • Content-Length faltando para requisições POST ou PUT.

  • Caracter ilegal no nome de host; underscores não são permitidos.

  • HTTP/1.1 Expect: requisição proveniente de um software HTTP/1.0.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_NO_RELAY squid-3.2.0.18/errors/pt-br/ERR_NO_RELAY --- squid-3.2.0.17/errors/pt-br/ERR_NO_RELAY 2012-04-13 02:24:48.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_NO_RELAY 2012-06-29 13:51:19.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Sem Wais Relay

There is no WAIS Relay host defined for this Cache! Yell at the administrator.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Sem Wais Relay

Não há nenhum host de relay de WAIS definido para esse Cache! Contate o administrador.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_ONLY_IF_CACHED_MISS squid-3.2.0.18/errors/pt-br/ERR_ONLY_IF_CACHED_MISS --- squid-3.2.0.17/errors/pt-br/ERR_ONLY_IF_CACHED_MISS 2012-04-13 02:24:50.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_ONLY_IF_CACHED_MISS 2012-06-29 13:51:20.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Um documento válido não foi encontrado no cache e a diretiva only-if-cached foi especificada.

Você enviou uma requisição com a diretiva de controle de cache only-if-cached. O documento não foi encontrado no cache ou o cache requer uma revalidação, que é proibida por esta diretiva.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Um documento válido não foi encontrado no cache e a diretiva only-if-cached foi especificada.

Você enviou uma requisição com a diretiva de controle de cache only-if-cached. O documento não foi encontrado no cache ou o cache requer uma revalidação, que é proibida pela diretiva only-if-cached.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_PRECONDITION_FAILED squid-3.2.0.18/errors/pt-br/ERR_PRECONDITION_FAILED --- squid-3.2.0.17/errors/pt-br/ERR_PRECONDITION_FAILED 2012-04-13 02:24:51.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_PRECONDITION_FAILED 2012-06-29 13:51:21.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Precondition Failed.

This means:

At least one precondition specified by the HTTP client in the request header has failed.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Précondição falhou.

Isto significa:

Pelo menos uma pré-condição especificada pelo cliente HTTP no cabeçalho da requisição falhou.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_READ_ERROR squid-3.2.0.18/errors/pt-br/ERR_READ_ERROR --- squid-3.2.0.17/errors/pt-br/ERR_READ_ERROR 2012-04-13 02:24:53.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_READ_ERROR 2012-06-29 13:51:22.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Erro de Leitura

O sistema retornou: %E

An error condition occurred while reading data from the network. Please retry your request.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Erro de Leitura

O sistema retornou: %E

Ocorreu uma condição de erro ao ler dados da rede. Por favor, repita sua requisição.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_READ_TIMEOUT squid-3.2.0.18/errors/pt-br/ERR_READ_TIMEOUT --- squid-3.2.0.17/errors/pt-br/ERR_READ_TIMEOUT 2012-04-13 02:24:54.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_READ_TIMEOUT 2012-06-29 13:51:22.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Tempo de leitura esgotado

O sistema retornou: %E

A Timeout occurred while waiting to read data from the network. The network or server may be down or congested. Please retry your request.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Tempo de leitura esgotado

O sistema retornou: %E

Tempo esgotado esperando a leitura de dados pela rede. A rede ou o servidor pode estar desconectado ou congestionado. Por favor, repita sua requisição.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_SHUTTING_DOWN squid-3.2.0.18/errors/pt-br/ERR_SHUTTING_DOWN --- squid-3.2.0.17/errors/pt-br/ERR_SHUTTING_DOWN 2012-04-13 02:24:58.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_SHUTTING_DOWN 2012-06-29 13:51:24.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

This cache is in the process of shutting down and can not service your request at this time. Please retry your request again soon.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Este cache está sendo desligado e não pode atender sua requisição neste momento. Por favor, tente novamente em breve.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_TOO_BIG squid-3.2.0.18/errors/pt-br/ERR_TOO_BIG --- squid-3.2.0.17/errors/pt-br/ERR_TOO_BIG 2012-04-13 02:25:02.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_TOO_BIG 2012-06-29 13:51:25.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

A requisição ou a resposta é muito grande.

Se você está fazendo uma requisição POST ou PUT, então o item que você está tentando enviar é muito grande.

Se você está fazendo uma requisição GET, então o item que você está tentando baixar é muito grande.

These limits have been established by the Internet Service Provider who operates this cache. Please contact them directly if you feel this is an error.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

A requisição ou a resposta é muito grande.

Se você está fazendo uma requisição POST ou PUT, então o item que você está tentando enviar é muito grande.

Se você está fazendo uma requisição GET, então o item que você está tentando baixar é muito grande.

Esses limites foram estabelecidos pelo Provedor de Serviço Internet que opera este cache. Por favor, contate-os diretamente se você acha que isso é um erro.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_UNSUP_HTTPVERSION squid-3.2.0.18/errors/pt-br/ERR_UNSUP_HTTPVERSION --- squid-3.2.0.17/errors/pt-br/ERR_UNSUP_HTTPVERSION 2012-04-13 02:25:03.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_UNSUP_HTTPVERSION 2012-06-29 13:51:26.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

Versão do HTTP não é suportada.


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Unsupported HTTP version

Este Squid não aceita a versão do HTTP que você está tentando usar.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

Versão do HTTP não é suportada


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Unsupported HTTP version

Este Squid não aceita a versão do HTTP que você está tentando usar.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/errors/pt-br/ERR_WRITE_ERROR squid-3.2.0.18/errors/pt-br/ERR_WRITE_ERROR --- squid-3.2.0.17/errors/pt-br/ERR_WRITE_ERROR 2012-04-13 02:25:10.000000000 +1200 +++ squid-3.2.0.18/errors/pt-br/ERR_WRITE_ERROR 2012-06-29 13:51:29.000000000 +1200 @@ -1 +1 @@ - ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Erro ao enviar

O sistema retornou: %E

An error condition occurred while writing to the network. Please retry your request.

Seu administrador do cache é %w.



\ No newline at end of file + ERRO: A URL requisitada não pôde ser recuperada

ERROR

The requested URL could not be retrieved


O seguinte erro foi encontrado ao tentar recuperar a URL: %U

Erro ao enviar

O sistema retornou: %E

Ocorreu uma condição de erro ao escrever na rede. Por favor, repita sua requisição.

Seu administrador do cache é %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.17/helpers/basic_auth/DB/basic_db_auth.8 squid-3.2.0.18/helpers/basic_auth/DB/basic_db_auth.8 --- squid-3.2.0.17/helpers/basic_auth/DB/basic_db_auth.8 2012-04-13 02:44:59.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/DB/basic_db_auth.8 2012-06-29 13:57:13.000000000 +1200 @@ -124,7 +124,7 @@ .\" ======================================================================== .\" .IX Title "BASIC_DB_AUTH 1" -.TH BASIC_DB_AUTH 1 "2012-04-12" "perl v5.10.1" "User Contributed Perl Documentation" +.TH BASIC_DB_AUTH 1 "2012-06-28" "perl v5.10.1" "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-3.2.0.17/helpers/basic_auth/DB/Makefile.in squid-3.2.0.18/helpers/basic_auth/DB/Makefile.in --- squid-3.2.0.17/helpers/basic_auth/DB/Makefile.in 2012-04-13 01:45:25.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/DB/Makefile.in 2012-06-29 13:39:06.000000000 +1200 @@ -136,6 +136,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/basic_auth/fake/Makefile.in squid-3.2.0.18/helpers/basic_auth/fake/Makefile.in --- squid-3.2.0.17/helpers/basic_auth/fake/Makefile.in 2012-04-13 01:45:33.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/fake/Makefile.in 2012-06-29 13:39:08.000000000 +1200 @@ -134,6 +134,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/basic_auth/getpwnam/Makefile.in squid-3.2.0.18/helpers/basic_auth/getpwnam/Makefile.in --- squid-3.2.0.17/helpers/basic_auth/getpwnam/Makefile.in 2012-04-13 01:45:33.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/getpwnam/Makefile.in 2012-06-29 13:39:08.000000000 +1200 @@ -160,6 +160,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/basic_auth/LDAP/Makefile.in squid-3.2.0.18/helpers/basic_auth/LDAP/Makefile.in --- squid-3.2.0.17/helpers/basic_auth/LDAP/Makefile.in 2012-04-13 01:45:26.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/LDAP/Makefile.in 2012-06-29 13:39:06.000000000 +1200 @@ -161,6 +161,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/basic_auth/Makefile.in squid-3.2.0.18/helpers/basic_auth/Makefile.in --- squid-3.2.0.17/helpers/basic_auth/Makefile.in 2012-04-13 01:45:27.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/Makefile.in 2012-06-29 13:39:07.000000000 +1200 @@ -142,6 +142,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/basic_auth/MSNT/Makefile.in squid-3.2.0.18/helpers/basic_auth/MSNT/Makefile.in --- squid-3.2.0.17/helpers/basic_auth/MSNT/Makefile.in 2012-04-13 01:45:27.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/MSNT/Makefile.in 2012-06-29 13:39:06.000000000 +1200 @@ -173,6 +173,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/basic_auth/MSNT-multi-domain/Makefile.in squid-3.2.0.18/helpers/basic_auth/MSNT-multi-domain/Makefile.in --- squid-3.2.0.17/helpers/basic_auth/MSNT-multi-domain/Makefile.in 2012-04-13 01:45:26.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/MSNT-multi-domain/Makefile.in 2012-06-29 13:39:06.000000000 +1200 @@ -133,6 +133,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/basic_auth/NCSA/Makefile.in squid-3.2.0.18/helpers/basic_auth/NCSA/Makefile.in --- squid-3.2.0.17/helpers/basic_auth/NCSA/Makefile.in 2012-04-13 01:45:28.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/NCSA/Makefile.in 2012-06-29 13:39:07.000000000 +1200 @@ -173,6 +173,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/basic_auth/NIS/Makefile.in squid-3.2.0.18/helpers/basic_auth/NIS/Makefile.in --- squid-3.2.0.17/helpers/basic_auth/NIS/Makefile.in 2012-04-13 01:45:28.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/NIS/Makefile.in 2012-06-29 13:39:07.000000000 +1200 @@ -146,6 +146,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/basic_auth/PAM/Makefile.in squid-3.2.0.18/helpers/basic_auth/PAM/Makefile.in --- squid-3.2.0.17/helpers/basic_auth/PAM/Makefile.in 2012-04-13 01:45:29.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/PAM/Makefile.in 2012-06-29 13:39:07.000000000 +1200 @@ -159,6 +159,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/basic_auth/POP3/Makefile.in squid-3.2.0.18/helpers/basic_auth/POP3/Makefile.in --- squid-3.2.0.17/helpers/basic_auth/POP3/Makefile.in 2012-04-13 01:45:30.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/POP3/Makefile.in 2012-06-29 13:39:07.000000000 +1200 @@ -133,6 +133,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/basic_auth/RADIUS/Makefile.in squid-3.2.0.18/helpers/basic_auth/RADIUS/Makefile.in --- squid-3.2.0.17/helpers/basic_auth/RADIUS/Makefile.in 2012-04-13 01:45:31.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/RADIUS/Makefile.in 2012-06-29 13:39:07.000000000 +1200 @@ -170,6 +170,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/basic_auth/SASL/Makefile.in squid-3.2.0.18/helpers/basic_auth/SASL/Makefile.in --- squid-3.2.0.17/helpers/basic_auth/SASL/Makefile.in 2012-04-13 01:45:31.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/SASL/Makefile.in 2012-06-29 13:39:08.000000000 +1200 @@ -160,6 +160,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/basic_auth/SMB/Makefile.in squid-3.2.0.18/helpers/basic_auth/SMB/Makefile.in --- squid-3.2.0.17/helpers/basic_auth/SMB/Makefile.in 2012-04-13 01:45:32.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/SMB/Makefile.in 2012-06-29 13:39:08.000000000 +1200 @@ -163,6 +163,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/basic_auth/SSPI/Makefile.in squid-3.2.0.18/helpers/basic_auth/SSPI/Makefile.in --- squid-3.2.0.17/helpers/basic_auth/SSPI/Makefile.in 2012-04-13 01:45:32.000000000 +1200 +++ squid-3.2.0.18/helpers/basic_auth/SSPI/Makefile.in 2012-06-29 13:39:08.000000000 +1200 @@ -175,6 +175,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/digest_auth/eDirectory/Makefile.in squid-3.2.0.18/helpers/digest_auth/eDirectory/Makefile.in --- squid-3.2.0.17/helpers/digest_auth/eDirectory/Makefile.in 2012-04-13 01:45:35.000000000 +1200 +++ squid-3.2.0.18/helpers/digest_auth/eDirectory/Makefile.in 2012-06-29 13:39:09.000000000 +1200 @@ -148,6 +148,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/digest_auth/file/Makefile.in squid-3.2.0.18/helpers/digest_auth/file/Makefile.in --- squid-3.2.0.17/helpers/digest_auth/file/Makefile.in 2012-04-13 01:45:35.000000000 +1200 +++ squid-3.2.0.18/helpers/digest_auth/file/Makefile.in 2012-06-29 13:39:09.000000000 +1200 @@ -173,6 +173,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/digest_auth/LDAP/Makefile.in squid-3.2.0.18/helpers/digest_auth/LDAP/Makefile.in --- squid-3.2.0.17/helpers/digest_auth/LDAP/Makefile.in 2012-04-13 01:45:34.000000000 +1200 +++ squid-3.2.0.18/helpers/digest_auth/LDAP/Makefile.in 2012-06-29 13:39:08.000000000 +1200 @@ -148,6 +148,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/digest_auth/Makefile.in squid-3.2.0.18/helpers/digest_auth/Makefile.in --- squid-3.2.0.17/helpers/digest_auth/Makefile.in 2012-04-13 01:45:34.000000000 +1200 +++ squid-3.2.0.18/helpers/digest_auth/Makefile.in 2012-06-29 13:39:09.000000000 +1200 @@ -142,6 +142,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/external_acl/AD_group/Makefile.in squid-3.2.0.18/helpers/external_acl/AD_group/Makefile.in --- squid-3.2.0.17/helpers/external_acl/AD_group/Makefile.in 2012-04-13 01:45:36.000000000 +1200 +++ squid-3.2.0.18/helpers/external_acl/AD_group/Makefile.in 2012-06-29 13:39:09.000000000 +1200 @@ -160,6 +160,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/external_acl/eDirectory_userip/ext_edirectory_userip_acl.cc squid-3.2.0.18/helpers/external_acl/eDirectory_userip/ext_edirectory_userip_acl.cc --- squid-3.2.0.17/helpers/external_acl/eDirectory_userip/ext_edirectory_userip_acl.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/helpers/external_acl/eDirectory_userip/ext_edirectory_userip_acl.cc 2012-06-29 13:38:29.000000000 +1200 @@ -242,7 +242,7 @@ *(dbuf) = '\0'; } else { /* FAIL */ - debug("local_printfx() FAILURE: %zd\n", x); + debug("local_printfx() FAILURE: %" PRIuSIZE "\n", x); } /* stdout needs to be flushed for it to work with Squid */ @@ -475,7 +475,7 @@ DisplayVersion(); local_printfx("\n"); local_printfx("Configuration:\n"); - local_printfx(" EDUI_MAXLEN: %zd\n", EDUI_MAXLEN); + local_printfx(" EDUI_MAXLEN: %u\n", EDUI_MAXLEN); if (edui_conf.mode & EDUI_MODE_DEBUG) local_printfx(" Debug mode: ON\n"); else @@ -1261,7 +1261,7 @@ memcpy(bufa, l->val[i]->bv_val, j); z = BinarySplit(bufa, j, '#', bufb, sizeof(bufb)); /* BINARY DEBUGGING * - local_printfx("value[%zd]: BinarySplit(", (size_t) i); + local_printfx("value[%" PRIuSIZE "]: BinarySplit(", (size_t) i); for (k = 0; k < z; k++) { c = (int) bufb[k]; if (c < 0) @@ -1275,7 +1275,7 @@ c = c + 256; local_printfx("%02X", c); } - local_printfx("): %zd\n", (size_t) z); + local_printfx("): %" PRIuSIZE "\n", (size_t) z); * BINARY DEBUGGING */ z = j - z - 1; j = atoi(bufb); @@ -1759,7 +1759,7 @@ edui_elap = 0; k = strlen(bufa); /* BINARY DEBUGGING * - local_printfx("while() -> bufa[%zd]: %s", k, bufa); + local_printfx("while() -> bufa[%" PRIuSIZE "]: %s", k, bufa); for (i = 0; i < k; i++) local_printfx("%02X", bufa[i]); local_printfx("\n"); @@ -1866,10 +1866,10 @@ /* If we got a group string, split it */ if (p != NULL) { /* Split string */ - debug("StringSplit(%s, ' ', %s, %zd)\n", bufa, bufb, sizeof(bufb)); + debug("StringSplit(%s, ' ', %s, %" PRIuSIZE ")\n", bufa, bufb, sizeof(bufb)); i = StringSplit(bufa, ' ', bufb, sizeof(bufb)); if (i > 0) { - debug("StringSplit(%s, %s) done. Result: %zd\n", bufa, bufb, i); + debug("StringSplit(%s, %s) done. Result: %" PRIuSIZE "\n", bufa, bufb, i); /* Got a group to match against */ x = ConvertIP(&edui_ldap, bufb); if (x < 0) { @@ -1907,8 +1907,8 @@ } } } else { - debug("StringSplit() -> Error: %Zu\n", i); - local_printfx("ERR (StringSplit Error %d)\n", i); + debug("StringSplit() -> Error: %" PRIuSIZE "\n", i); + local_printfx("ERR (StringSplit Error %" PRIuSIZE ")\n", i); } } else { /* No group to match against, only an IP */ diff -u -r -N squid-3.2.0.17/helpers/external_acl/eDirectory_userip/Makefile.in squid-3.2.0.18/helpers/external_acl/eDirectory_userip/Makefile.in --- squid-3.2.0.17/helpers/external_acl/eDirectory_userip/Makefile.in 2012-04-13 01:45:38.000000000 +1200 +++ squid-3.2.0.18/helpers/external_acl/eDirectory_userip/Makefile.in 2012-06-29 13:39:10.000000000 +1200 @@ -162,6 +162,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/external_acl/file_userip/Makefile.in squid-3.2.0.18/helpers/external_acl/file_userip/Makefile.in --- squid-3.2.0.17/helpers/external_acl/file_userip/Makefile.in 2012-04-13 01:45:38.000000000 +1200 +++ squid-3.2.0.18/helpers/external_acl/file_userip/Makefile.in 2012-06-29 13:39:10.000000000 +1200 @@ -161,6 +161,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/external_acl/kerberos_ldap_group/Makefile.in squid-3.2.0.18/helpers/external_acl/kerberos_ldap_group/Makefile.in --- squid-3.2.0.17/helpers/external_acl/kerberos_ldap_group/Makefile.in 2012-04-13 01:45:39.000000000 +1200 +++ squid-3.2.0.18/helpers/external_acl/kerberos_ldap_group/Makefile.in 2012-06-29 13:39:10.000000000 +1200 @@ -217,6 +217,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/external_acl/LDAP_group/Makefile.in squid-3.2.0.18/helpers/external_acl/LDAP_group/Makefile.in --- squid-3.2.0.17/helpers/external_acl/LDAP_group/Makefile.in 2012-04-13 01:45:36.000000000 +1200 +++ squid-3.2.0.18/helpers/external_acl/LDAP_group/Makefile.in 2012-06-29 13:39:09.000000000 +1200 @@ -162,6 +162,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/external_acl/LM_group/Makefile.in squid-3.2.0.18/helpers/external_acl/LM_group/Makefile.in --- squid-3.2.0.17/helpers/external_acl/LM_group/Makefile.in 2012-04-13 01:45:37.000000000 +1200 +++ squid-3.2.0.18/helpers/external_acl/LM_group/Makefile.in 2012-06-29 13:39:10.000000000 +1200 @@ -160,6 +160,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/external_acl/Makefile.in squid-3.2.0.18/helpers/external_acl/Makefile.in --- squid-3.2.0.17/helpers/external_acl/Makefile.in 2012-04-13 01:45:37.000000000 +1200 +++ squid-3.2.0.18/helpers/external_acl/Makefile.in 2012-06-29 13:39:10.000000000 +1200 @@ -142,6 +142,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/external_acl/session/Makefile.in squid-3.2.0.18/helpers/external_acl/session/Makefile.in --- squid-3.2.0.17/helpers/external_acl/session/Makefile.in 2012-04-13 01:45:39.000000000 +1200 +++ squid-3.2.0.18/helpers/external_acl/session/Makefile.in 2012-06-29 13:39:10.000000000 +1200 @@ -160,6 +160,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/external_acl/unix_group/Makefile.in squid-3.2.0.18/helpers/external_acl/unix_group/Makefile.in --- squid-3.2.0.17/helpers/external_acl/unix_group/Makefile.in 2012-04-13 01:45:40.000000000 +1200 +++ squid-3.2.0.18/helpers/external_acl/unix_group/Makefile.in 2012-06-29 13:39:11.000000000 +1200 @@ -161,6 +161,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/external_acl/wbinfo_group/ext_wbinfo_group_acl.8 squid-3.2.0.18/helpers/external_acl/wbinfo_group/ext_wbinfo_group_acl.8 --- squid-3.2.0.17/helpers/external_acl/wbinfo_group/ext_wbinfo_group_acl.8 2012-04-13 02:45:14.000000000 +1200 +++ squid-3.2.0.18/helpers/external_acl/wbinfo_group/ext_wbinfo_group_acl.8 2012-06-29 13:57:15.000000000 +1200 @@ -124,7 +124,7 @@ .\" ======================================================================== .\" .IX Title "EXT_WBINFO_GROUP_ACL.PL.IN 1" -.TH EXT_WBINFO_GROUP_ACL.PL.IN 1 "2012-04-12" "perl v5.10.1" "User Contributed Perl Documentation" +.TH EXT_WBINFO_GROUP_ACL.PL.IN 1 "2012-06-28" "perl v5.10.1" "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-3.2.0.17/helpers/external_acl/wbinfo_group/Makefile.in squid-3.2.0.18/helpers/external_acl/wbinfo_group/Makefile.in --- squid-3.2.0.17/helpers/external_acl/wbinfo_group/Makefile.in 2012-04-13 01:45:40.000000000 +1200 +++ squid-3.2.0.18/helpers/external_acl/wbinfo_group/Makefile.in 2012-06-29 13:39:11.000000000 +1200 @@ -136,6 +136,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/log_daemon/file/Makefile.in squid-3.2.0.18/helpers/log_daemon/file/Makefile.in --- squid-3.2.0.17/helpers/log_daemon/file/Makefile.in 2012-04-13 01:45:41.000000000 +1200 +++ squid-3.2.0.18/helpers/log_daemon/file/Makefile.in 2012-06-29 13:39:11.000000000 +1200 @@ -135,6 +135,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/log_daemon/Makefile.in squid-3.2.0.18/helpers/log_daemon/Makefile.in --- squid-3.2.0.17/helpers/log_daemon/Makefile.in 2012-04-13 01:45:41.000000000 +1200 +++ squid-3.2.0.18/helpers/log_daemon/Makefile.in 2012-06-29 13:39:11.000000000 +1200 @@ -142,6 +142,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/Makefile.in squid-3.2.0.18/helpers/Makefile.in --- squid-3.2.0.17/helpers/Makefile.in 2012-04-13 01:45:25.000000000 +1200 +++ squid-3.2.0.18/helpers/Makefile.in 2012-06-29 13:39:06.000000000 +1200 @@ -143,6 +143,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/negotiate_auth/kerberos/Makefile.in squid-3.2.0.18/helpers/negotiate_auth/kerberos/Makefile.in --- squid-3.2.0.17/helpers/negotiate_auth/kerberos/Makefile.in 2012-04-13 01:45:43.000000000 +1200 +++ squid-3.2.0.18/helpers/negotiate_auth/kerberos/Makefile.in 2012-06-29 13:39:12.000000000 +1200 @@ -218,6 +218,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/negotiate_auth/Makefile.in squid-3.2.0.18/helpers/negotiate_auth/Makefile.in --- squid-3.2.0.17/helpers/negotiate_auth/Makefile.in 2012-04-13 01:45:41.000000000 +1200 +++ squid-3.2.0.18/helpers/negotiate_auth/Makefile.in 2012-06-29 13:39:11.000000000 +1200 @@ -142,6 +142,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/negotiate_auth/SSPI/Makefile.in squid-3.2.0.18/helpers/negotiate_auth/SSPI/Makefile.in --- squid-3.2.0.17/helpers/negotiate_auth/SSPI/Makefile.in 2012-04-13 01:45:42.000000000 +1200 +++ squid-3.2.0.18/helpers/negotiate_auth/SSPI/Makefile.in 2012-06-29 13:39:11.000000000 +1200 @@ -136,6 +136,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/negotiate_auth/wrapper/Makefile.in squid-3.2.0.18/helpers/negotiate_auth/wrapper/Makefile.in --- squid-3.2.0.17/helpers/negotiate_auth/wrapper/Makefile.in 2012-04-13 01:45:43.000000000 +1200 +++ squid-3.2.0.18/helpers/negotiate_auth/wrapper/Makefile.in 2012-06-29 13:39:12.000000000 +1200 @@ -136,6 +136,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/ntlm_auth/fake/Makefile.in squid-3.2.0.18/helpers/ntlm_auth/fake/Makefile.in --- squid-3.2.0.17/helpers/ntlm_auth/fake/Makefile.in 2012-04-13 01:45:44.000000000 +1200 +++ squid-3.2.0.18/helpers/ntlm_auth/fake/Makefile.in 2012-06-29 13:39:12.000000000 +1200 @@ -137,6 +137,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/ntlm_auth/Makefile.in squid-3.2.0.18/helpers/ntlm_auth/Makefile.in --- squid-3.2.0.17/helpers/ntlm_auth/Makefile.in 2012-04-13 01:45:43.000000000 +1200 +++ squid-3.2.0.18/helpers/ntlm_auth/Makefile.in 2012-06-29 13:39:12.000000000 +1200 @@ -142,6 +142,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/ntlm_auth/smb_lm/Makefile.in squid-3.2.0.18/helpers/ntlm_auth/smb_lm/Makefile.in --- squid-3.2.0.17/helpers/ntlm_auth/smb_lm/Makefile.in 2012-04-13 01:45:45.000000000 +1200 +++ squid-3.2.0.18/helpers/ntlm_auth/smb_lm/Makefile.in 2012-06-29 13:39:12.000000000 +1200 @@ -139,6 +139,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/ntlm_auth/SSPI/Makefile.in squid-3.2.0.18/helpers/ntlm_auth/SSPI/Makefile.in --- squid-3.2.0.17/helpers/ntlm_auth/SSPI/Makefile.in 2012-04-13 01:45:44.000000000 +1200 +++ squid-3.2.0.18/helpers/ntlm_auth/SSPI/Makefile.in 2012-06-29 13:39:12.000000000 +1200 @@ -160,6 +160,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/url_rewrite/fake/Makefile.in squid-3.2.0.18/helpers/url_rewrite/fake/Makefile.in --- squid-3.2.0.17/helpers/url_rewrite/fake/Makefile.in 2012-04-13 01:45:46.000000000 +1200 +++ squid-3.2.0.18/helpers/url_rewrite/fake/Makefile.in 2012-06-29 13:39:13.000000000 +1200 @@ -156,6 +156,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/helpers/url_rewrite/Makefile.in squid-3.2.0.18/helpers/url_rewrite/Makefile.in --- squid-3.2.0.17/helpers/url_rewrite/Makefile.in 2012-04-13 01:45:45.000000000 +1200 +++ squid-3.2.0.18/helpers/url_rewrite/Makefile.in 2012-06-29 13:39:12.000000000 +1200 @@ -142,6 +142,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/icons/Makefile.in squid-3.2.0.18/icons/Makefile.in --- squid-3.2.0.17/icons/Makefile.in 2012-04-13 01:45:46.000000000 +1200 +++ squid-3.2.0.18/icons/Makefile.in 2012-06-29 13:39:13.000000000 +1200 @@ -128,6 +128,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/include/autoconf.h.in squid-3.2.0.18/include/autoconf.h.in --- squid-3.2.0.17/include/autoconf.h.in 2012-04-13 01:45:10.000000000 +1200 +++ squid-3.2.0.18/include/autoconf.h.in 2012-06-29 13:39:02.000000000 +1200 @@ -136,6 +136,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_COM_ERR_H +/* Define to 1 if CMSG_SPACE is constant */ +#undef HAVE_CONSTANT_CMSG_SPACE + /* Support setting CPU affinity for workers */ #undef HAVE_CPU_AFFINITY @@ -1153,6 +1156,9 @@ /* Print stack traces on fatal errors */ #undef PRINT_STACK_TRACE +/* Compiler supports %zu printf macro */ +#undef PRIuSIZE + /* The size of `int64_t', as computed by sizeof. */ #undef SIZEOF_INT64_T diff -u -r -N squid-3.2.0.17/include/util.h squid-3.2.0.18/include/util.h --- squid-3.2.0.17/include/util.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/include/util.h 2012-06-29 13:38:29.000000000 +1200 @@ -46,7 +46,6 @@ SQUIDCEXTERN int tvSubUsec(struct timeval, struct timeval); SQUIDCEXTERN double tvSubDsec(struct timeval, struct timeval); -SQUIDCEXTERN size_t xcountws(const char *str); SQUIDCEXTERN void Tolower(char *); #if defined(__cplusplus) /* @@ -57,7 +56,7 @@ * for the extern version in squid */ #if !defined(_SQUID_EXTERNNEW_) -#if defined(__GNUC_STDC_INLINE__) +#if defined(__GNUC_STDC_INLINE__) || defined(__GNUC_GNU_INLINE__) #define _SQUID_EXTERNNEW_ extern inline __attribute__((gnu_inline)) #else #define _SQUID_EXTERNNEW_ extern inline diff -u -r -N squid-3.2.0.17/include/version.h squid-3.2.0.18/include/version.h --- squid-3.2.0.17/include/version.h 2012-04-13 01:47:04.000000000 +1200 +++ squid-3.2.0.18/include/version.h 2012-06-29 13:39:35.000000000 +1200 @@ -9,7 +9,7 @@ */ #ifndef SQUID_RELEASE_TIME -#define SQUID_RELEASE_TIME 1334238203 +#define SQUID_RELEASE_TIME 1340933908 #endif #ifndef APP_SHORTNAME diff -u -r -N squid-3.2.0.17/lib/hash.c squid-3.2.0.18/lib/hash.c --- squid-3.2.0.17/lib/hash.c 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/lib/hash.c 1970-01-01 12:00:00.000000000 +1200 @@ -1,420 +0,0 @@ - -/* - * $Id$ - * - * DEBUG: section 00 Hash Tables - * AUTHOR: Harvest Derived - * - * SQUID Web Proxy Cache http://www.squid-cache.org/ - * ---------------------------------------------------------- - * - * Squid is the result of efforts by numerous individuals from - * the Internet community; see the CONTRIBUTORS file for full - * details. Many organizations have provided support for Squid's - * development; see the SPONSORS file for full details. Squid is - * Copyrighted (C) 2001 by the Regents of the University of - * California; see the COPYRIGHT file for full details. Squid - * incorporates software developed and/or copyrighted by other - * sources; see the CREDITS file for full details. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. - * - */ - -#include "squid.h" -#include "hash.h" -#include "profiler/Profiler.h" - -#if HAVE_STDIO_H -#include -#endif -#if HAVE_STDLIB_H -#include -#endif -#if HAVE_STRING_H -#include -#endif -#if HAVE_UNISTD_H -#include -#endif -#if HAVE_GNUMALLLOC_H -#include -#elif HAVE_MALLOC_H -#include -#endif -#if HAVE_ASSERT_H -#include -#endif -#if HAVE_MATH_H -#include -#endif - -static void hash_next_bucket(hash_table * hid); - -unsigned int -hash_string(const void *data, unsigned int size) -{ - const char *s = data; - unsigned int n = 0; - unsigned int j = 0; - unsigned int i = 0; - while (*s) { - j++; - n ^= 271 * (unsigned) *s++; - } - i = n ^ (j * 271); - return i % size; -} - -/* the following function(s) were adapted from - * usr/src/lib/libc/db/hash_func.c, 4.4 BSD lite */ - -/* Hash function from Chris Torek. */ -unsigned int -hash4(const void *data, unsigned int size) -{ - const char *key = data; - size_t loop; - unsigned int h; - size_t len; - -#define HASH4a h = (h << 5) - h + *key++; -#define HASH4b h = (h << 5) + h + *key++; -#define HASH4 HASH4b - - h = 0; - len = strlen(key); - loop = len >> 3; - switch (len & (8 - 1)) { - case 0: - break; - case 7: - HASH4; - /* FALLTHROUGH */ - case 6: - HASH4; - /* FALLTHROUGH */ - case 5: - HASH4; - /* FALLTHROUGH */ - case 4: - HASH4; - /* FALLTHROUGH */ - case 3: - HASH4; - /* FALLTHROUGH */ - case 2: - HASH4; - /* FALLTHROUGH */ - case 1: - HASH4; - } - while (loop--) { - HASH4; - HASH4; - HASH4; - HASH4; - HASH4; - HASH4; - HASH4; - HASH4; - } - return h % size; -} - -/* - * hash_create - creates a new hash table, uses the cmp_func - * to compare keys. Returns the identification for the hash table; - * otherwise returns a negative number on error. - */ -hash_table * -hash_create(HASHCMP * cmp_func, int hash_sz, HASHHASH * hash_func) -{ - hash_table *hid = xcalloc(1, sizeof(hash_table)); - if (!hash_sz) - hid->size = (unsigned int) DEFAULT_HASH_SIZE; - else - hid->size = (unsigned int) hash_sz; - /* allocate and null the buckets */ - hid->buckets = xcalloc(hid->size, sizeof(hash_link *)); - hid->cmp = cmp_func; - hid->hash = hash_func; - hid->next = NULL; - hid->current_slot = 0; - return hid; -} - -/* - * hash_join - joins a hash_link under its key lnk->key - * into the hash table 'hid'. - * - * It does not copy any data into the hash table, only links pointers. - */ -void -hash_join(hash_table * hid, hash_link * lnk) -{ - int i; - i = hid->hash(lnk->key, hid->size); - lnk->next = hid->buckets[i]; - hid->buckets[i] = lnk; - hid->count++; -} - -/* - * hash_lookup - locates the item under the key 'k' in the hash table - * 'hid'. Returns a pointer to the hash bucket on success; otherwise - * returns NULL. - */ -hash_link * -hash_lookup(hash_table * hid, const void *k) -{ - hash_link *walker; - int b; - PROF_start(hash_lookup); - assert(k != NULL); - b = hid->hash(k, hid->size); - for (walker = hid->buckets[b]; walker != NULL; walker = walker->next) { - if ((hid->cmp) (k, walker->key) == 0) { - PROF_stop(hash_lookup); - return (walker); - } - assert(walker != walker->next); - } - PROF_stop(hash_lookup); - return NULL; -} - -static void -hash_next_bucket(hash_table * hid) -{ - while (hid->next == NULL && ++hid->current_slot < hid->size) - hid->next = hid->buckets[hid->current_slot]; -} - -/* - * hash_first - initializes the hash table for the hash_next() - * function. - */ -void -hash_first(hash_table * hid) -{ - assert(NULL == hid->next); - hid->current_slot = 0; - hid->next = hid->buckets[hid->current_slot]; - if (NULL == hid->next) - hash_next_bucket(hid); -} - -/* - * hash_next - returns the next item in the hash table 'hid'. - * Otherwise, returns NULL on error or end of list. - * - * MUST call hash_first() before hash_next(). - */ -hash_link * -hash_next(hash_table * hid) -{ - hash_link *this = hid->next; - if (NULL == this) - return NULL; - hid->next = this->next; - if (NULL == hid->next) - hash_next_bucket(hid); - return this; -} - -/* - * hash_last - resets hash traversal state to NULL - * - */ -void -hash_last(hash_table * hid) -{ - assert(hid != NULL); - hid->next = NULL; - hid->current_slot = 0; -} - -/* - * hash_remove_link - deletes the given hash_link node from the - * hash table 'hid'. Does not free the item, only removes it - * from the list. - * - * An assertion is triggered if the hash_link is not found in the - * list. - */ -void -hash_remove_link(hash_table * hid, hash_link * hl) -{ - hash_link **P; - int i; - assert(hl != NULL); - i = hid->hash(hl->key, hid->size); - for (P = &hid->buckets[i]; *P; P = &(*P)->next) { - if (*P != hl) - continue; - *P = hl->next; - if (hid->next == hl) { - hid->next = hl->next; - if (NULL == hid->next) - hash_next_bucket(hid); - } - hid->count--; - return; - } - assert(0); -} - -/* - * hash_get_bucket - returns the head item of the bucket - * in the hash table 'hid'. Otherwise, returns NULL on error. - */ -hash_link * -hash_get_bucket(hash_table * hid, unsigned int bucket) -{ - if (bucket >= hid->size) - return NULL; - return (hid->buckets[bucket]); -} - -void -hashFreeItems(hash_table * hid, HASHFREE * free_func) -{ - hash_link *l; - hash_link **list; - int i = 0; - int j; - list = xcalloc(hid->count, sizeof(hash_link *)); - hash_first(hid); - while ((l = hash_next(hid)) && i < hid->count) { - *(list + i) = l; - i++; - } - for (j = 0; j < i; j++) - free_func(*(list + j)); - xfree(list); -} - -void -hashFreeMemory(hash_table * hid) -{ - if (hid == NULL) - return; - if (hid->buckets) - xfree(hid->buckets); - xfree(hid); -} - -static int hash_primes[] = { - 103, - 229, - 467, - 977, - 1979, - 4019, - 6037, - 7951, - 12149, - 16231, - 33493, - 65357 -}; - -int -hashPrime(int n) -{ - int I = sizeof(hash_primes) / sizeof(int); - int i; - int best_prime = hash_primes[0]; - double min = fabs(log((double) n) - log((double) hash_primes[0])); - double d; - for (i = 0; i < I; i++) { - d = fabs(log((double) n) - log((double) hash_primes[i])); - if (d > min) - continue; - min = d; - best_prime = hash_primes[i]; - } - return best_prime; -} - -/* - * return the key of a hash_link as a const string - */ -const char * -hashKeyStr(hash_link * hl) -{ - return (const char *) hl->key; -} - - -#if USE_HASH_DRIVER -/* - * hash-driver - Run with a big file as stdin to insert each line into the - * hash table, then prints the whole hash table, then deletes a random item, - * and prints the table again... - */ -int -main(void) -{ - hash_table *hid; - int i; - LOCAL_ARRAY(char, buf, BUFSIZ); - LOCAL_ARRAY(char, todelete, BUFSIZ); - hash_link *walker = NULL; - - todelete[0] = '\0'; - printf("init\n"); - - printf("creating hash table\n"); - if ((hid = hash_create((HASHCMP *) strcmp, 229, hash4)) < 0) { - printf("hash_create error.\n"); - exit(1); - } - printf("done creating hash table: %d\n", hid); - - while (fgets(buf, BUFSIZ, stdin)) { - buf[strlen(buf) - 1] = '\0'; - printf("Inserting '%s' for item %p to hash table: %d\n", - buf, buf, hid); - hash_insert(hid, xstrdup(buf), (void *) 0x12345678); - if (random() % 17 == 0) - strcpy(todelete, buf); - } - - printf("walking hash table...\n"); - for (i = 0, walker = hash_first(hid); walker; walker = hash_next(hid)) { - printf("item %5d: key: '%s' item: %p\n", i++, walker->key, - walker->item); - } - printf("done walking hash table...\n"); - - if (todelete[0]) { - printf("deleting %s from %d\n", todelete, hid); - if (hash_delete(hid, todelete)) - printf("hash_delete error\n"); - } - printf("walking hash table...\n"); - for (i = 0, walker = hash_first(hid); walker; walker = hash_next(hid)) { - printf("item %5d: key: '%s' item: %p\n", i++, walker->key, - walker->item); - } - printf("done walking hash table...\n"); - - - printf("driver finished.\n"); - exit(0); -} -#endif diff -u -r -N squid-3.2.0.17/lib/hash.cc squid-3.2.0.18/lib/hash.cc --- squid-3.2.0.17/lib/hash.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.18/lib/hash.cc 2012-06-29 13:38:29.000000000 +1200 @@ -0,0 +1,413 @@ + +/* + * $Id$ + * + * DEBUG: section 00 Hash Tables + * AUTHOR: Harvest Derived + * + * SQUID Web Proxy Cache http://www.squid-cache.org/ + * ---------------------------------------------------------- + * + * Squid is the result of efforts by numerous individuals from + * the Internet community; see the CONTRIBUTORS file for full + * details. Many organizations have provided support for Squid's + * development; see the SPONSORS file for full details. Squid is + * Copyrighted (C) 2001 by the Regents of the University of + * California; see the COPYRIGHT file for full details. Squid + * incorporates software developed and/or copyrighted by other + * sources; see the CREDITS file for full details. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. + * + */ + +#include "squid.h" +#include "hash.h" +#include "profiler/Profiler.h" + +#if HAVE_STDIO_H +#include +#endif +#if HAVE_STDLIB_H +#include +#endif +#if HAVE_STRING_H +#include +#endif +#if HAVE_UNISTD_H +#include +#endif +#if HAVE_GNUMALLLOC_H +#include +#elif HAVE_MALLOC_H +#include +#endif +#if HAVE_ASSERT_H +#include +#endif +#if HAVE_MATH_H +#include +#endif + +static void hash_next_bucket(hash_table * hid); + +unsigned int +hash_string(const void *data, unsigned int size) +{ + const unsigned char *s = static_cast(data); + unsigned int n = 0; + unsigned int j = 0; + unsigned int i = 0; + while (*s) { + j++; + n ^= 271 * (*s++); + } + i = n ^ (j * 271); + return i % size; +} + +/* the following function(s) were adapted from + * usr/src/lib/libc/db/hash_func.c, 4.4 BSD lite */ + +/* Hash function from Chris Torek. */ +unsigned int +hash4(const void *data, unsigned int size) +{ + const char *key = static_cast(data); + size_t loop; + unsigned int h; + size_t len; + +#define HASH4a h = (h << 5) - h + *key++; +#define HASH4b h = (h << 5) + h + *key++; +#define HASH4 HASH4b + + h = 0; + len = strlen(key); + loop = len >> 3; + switch (len & (8 - 1)) { + case 0: + break; + case 7: + HASH4; + /* FALLTHROUGH */ + case 6: + HASH4; + /* FALLTHROUGH */ + case 5: + HASH4; + /* FALLTHROUGH */ + case 4: + HASH4; + /* FALLTHROUGH */ + case 3: + HASH4; + /* FALLTHROUGH */ + case 2: + HASH4; + /* FALLTHROUGH */ + case 1: + HASH4; + } + while (loop--) { + HASH4; + HASH4; + HASH4; + HASH4; + HASH4; + HASH4; + HASH4; + HASH4; + } + return h % size; +} + +/** + * hash_create - creates a new hash table, uses the cmp_func + * to compare keys. Returns the identification for the hash table; + * otherwise returns a negative number on error. + */ +hash_table * +hash_create(HASHCMP * cmp_func, int hash_sz, HASHHASH * hash_func) +{ + hash_table *hid = (hash_table *)xcalloc(1, sizeof(hash_table)); + if (!hash_sz) + hid->size = (unsigned int) DEFAULT_HASH_SIZE; + else + hid->size = (unsigned int) hash_sz; + /* allocate and null the buckets */ + hid->buckets = (hash_link **)xcalloc(hid->size, sizeof(hash_link *)); + hid->cmp = cmp_func; + hid->hash = hash_func; + hid->next = NULL; + hid->current_slot = 0; + return hid; +} + +/** + * hash_join - joins a hash_link under its key lnk->key + * into the hash table 'hid'. + * + * It does not copy any data into the hash table, only links pointers. + */ +void +hash_join(hash_table * hid, hash_link * lnk) +{ + int i; + i = hid->hash(lnk->key, hid->size); + lnk->next = hid->buckets[i]; + hid->buckets[i] = lnk; + hid->count++; +} + +/** + * hash_lookup - locates the item under the key 'k' in the hash table + * 'hid'. Returns a pointer to the hash bucket on success; otherwise + * returns NULL. + */ +hash_link * +hash_lookup(hash_table * hid, const void *k) +{ + int b; + PROF_start(hash_lookup); + assert(k != NULL); + b = hid->hash(k, hid->size); + for (hash_link *walker = hid->buckets[b]; walker != NULL; walker = walker->next) { + if ((hid->cmp) (k, walker->key) == 0) { + PROF_stop(hash_lookup); + return (walker); + } + assert(walker != walker->next); + } + PROF_stop(hash_lookup); + return NULL; +} + +static void +hash_next_bucket(hash_table * hid) +{ + while (hid->next == NULL && ++hid->current_slot < hid->size) + hid->next = hid->buckets[hid->current_slot]; +} + +/** + * hash_first - initializes the hash table for the hash_next() + * function. + */ +void +hash_first(hash_table * hid) +{ + assert(NULL == hid->next); + hid->current_slot = 0; + hid->next = hid->buckets[hid->current_slot]; + if (NULL == hid->next) + hash_next_bucket(hid); +} + +/** + * hash_next - returns the next item in the hash table 'hid'. + * Otherwise, returns NULL on error or end of list. + * + * MUST call hash_first() before hash_next(). + */ +hash_link * +hash_next(hash_table * hid) +{ + hash_link *p = hid->next; + if (NULL == p) + return NULL; + hid->next = p->next; + if (NULL == hid->next) + hash_next_bucket(hid); + return p; +} + +/** + * hash_last - resets hash traversal state to NULL + * + */ +void +hash_last(hash_table * hid) +{ + assert(hid != NULL); + hid->next = NULL; + hid->current_slot = 0; +} + +/** + * hash_remove_link - deletes the given hash_link node from the + * hash table 'hid'. Does not free the item, only removes it + * from the list. + * + * An assertion is triggered if the hash_link is not found in the + * list. + */ +void +hash_remove_link(hash_table * hid, hash_link * hl) +{ + assert(hl != NULL); + int i = hid->hash(hl->key, hid->size); + for (hash_link **P = &hid->buckets[i]; *P; P = &(*P)->next) { + if (*P != hl) + continue; + *P = hl->next; + if (hid->next == hl) { + hid->next = hl->next; + if (NULL == hid->next) + hash_next_bucket(hid); + } + hid->count--; + return; + } + assert(0); +} + +/** + * hash_get_bucket - returns the head item of the bucket + * in the hash table 'hid'. Otherwise, returns NULL on error. + */ +hash_link * +hash_get_bucket(hash_table * hid, unsigned int bucket) +{ + if (bucket >= hid->size) + return NULL; + return (hid->buckets[bucket]); +} + +void +hashFreeItems(hash_table * hid, HASHFREE * free_func) +{ + hash_link *l; + int i = 0; + hash_link **list = (hash_link **)xcalloc(hid->count, sizeof(hash_link *)); + hash_first(hid); + while ((l = hash_next(hid)) && i < hid->count) { + *(list + i) = l; + i++; + } + for (int j = 0; j < i; j++) + free_func(*(list + j)); + xfree(list); +} + +void +hashFreeMemory(hash_table * hid) +{ + if (hid == NULL) + return; + if (hid->buckets) + xfree(hid->buckets); + xfree(hid); +} + +static int hash_primes[] = { + 103, + 229, + 467, + 977, + 1979, + 4019, + 6037, + 7951, + 12149, + 16231, + 33493, + 65357 +}; + +int +hashPrime(int n) +{ + int I = sizeof(hash_primes) / sizeof(int); + int best_prime = hash_primes[0]; + double min = fabs(log((double) n) - log((double) hash_primes[0])); + double d; + for (int i = 0; i < I; i++) { + d = fabs(log((double) n) - log((double) hash_primes[i])); + if (d > min) + continue; + min = d; + best_prime = hash_primes[i]; + } + return best_prime; +} + +/** + * return the key of a hash_link as a const string + */ +const char * +hashKeyStr(hash_link * hl) +{ + return (const char *) hl->key; +} + + +#if USE_HASH_DRIVER +/** + * hash-driver - Run with a big file as stdin to insert each line into the + * hash table, then prints the whole hash table, then deletes a random item, + * and prints the table again... + */ +int +main(void) +{ + hash_table *hid; + LOCAL_ARRAY(char, buf, BUFSIZ); + LOCAL_ARRAY(char, todelete, BUFSIZ); + hash_link *walker = NULL; + + todelete[0] = '\0'; + printf("init\n"); + + printf("creating hash table\n"); + if ((hid = hash_create((HASHCMP *) strcmp, 229, hash4)) < 0) { + printf("hash_create error.\n"); + exit(1); + } + printf("done creating hash table: %d\n", hid); + + while (fgets(buf, BUFSIZ, stdin)) { + buf[strlen(buf) - 1] = '\0'; + printf("Inserting '%s' for item %p to hash table: %d\n", + buf, buf, hid); + hash_insert(hid, xstrdup(buf), (void *) 0x12345678); + if (random() % 17 == 0) + strcpy(todelete, buf); + } + + printf("walking hash table...\n"); + for (int i = 0, walker = hash_first(hid); walker; walker = hash_next(hid)) { + printf("item %5d: key: '%s' item: %p\n", i++, walker->key, + walker->item); + } + printf("done walking hash table...\n"); + + if (todelete[0]) { + printf("deleting %s from %d\n", todelete, hid); + if (hash_delete(hid, todelete)) + printf("hash_delete error\n"); + } + printf("walking hash table...\n"); + for (int i = 0, walker = hash_first(hid); walker; walker = hash_next(hid)) { + printf("item %5d: key: '%s' item: %p\n", i++, walker->key, + walker->item); + } + printf("done walking hash table...\n"); + + + printf("driver finished.\n"); + exit(0); +} +#endif diff -u -r -N squid-3.2.0.17/lib/Makefile.am squid-3.2.0.18/lib/Makefile.am --- squid-3.2.0.17/lib/Makefile.am 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/lib/Makefile.am 2012-06-29 13:38:29.000000000 +1200 @@ -50,7 +50,7 @@ uudecode.c libmisccontainers_la_SOURCES = \ - hash.c + hash.cc libmiscutil_la_SOURCES = \ malloc_trace.cc \ diff -u -r -N squid-3.2.0.17/lib/Makefile.in squid-3.2.0.18/lib/Makefile.in --- squid-3.2.0.17/lib/Makefile.in 2012-04-13 01:45:48.000000000 +1200 +++ squid-3.2.0.18/lib/Makefile.in 2012-06-29 13:39:13.000000000 +1200 @@ -212,6 +212,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ @@ -414,7 +415,7 @@ uudecode.c libmisccontainers_la_SOURCES = \ - hash.c + hash.cc libmiscutil_la_SOURCES = \ malloc_trace.cc \ @@ -500,7 +501,7 @@ rm -f "$${dir}/so_locations"; \ done libmisccontainers.la: $(libmisccontainers_la_OBJECTS) $(libmisccontainers_la_DEPENDENCIES) - $(LINK) $(libmisccontainers_la_OBJECTS) $(libmisccontainers_la_LIBADD) $(LIBS) + $(CXXLINK) $(libmisccontainers_la_OBJECTS) $(libmisccontainers_la_LIBADD) $(LIBS) libmiscencoding.la: $(libmiscencoding_la_OBJECTS) $(libmiscencoding_la_DEPENDENCIES) $(LINK) $(libmiscencoding_la_OBJECTS) $(libmiscencoding_la_LIBADD) $(LIBS) libmiscutil.la: $(libmiscutil_la_OBJECTS) $(libmiscutil_la_DEPENDENCIES) diff -u -r -N squid-3.2.0.17/lib/ntlmauth/Makefile.in squid-3.2.0.18/lib/ntlmauth/Makefile.in --- squid-3.2.0.17/lib/ntlmauth/Makefile.in 2012-04-13 01:45:49.000000000 +1200 +++ squid-3.2.0.18/lib/ntlmauth/Makefile.in 2012-06-29 13:39:13.000000000 +1200 @@ -137,6 +137,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/lib/profiler/Makefile.in squid-3.2.0.18/lib/profiler/Makefile.in --- squid-3.2.0.17/lib/profiler/Makefile.in 2012-04-13 01:45:50.000000000 +1200 +++ squid-3.2.0.18/lib/profiler/Makefile.in 2012-06-29 13:39:13.000000000 +1200 @@ -141,6 +141,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/lib/profiler/xprof_type.h squid-3.2.0.18/lib/profiler/xprof_type.h --- squid-3.2.0.17/lib/profiler/xprof_type.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/lib/profiler/xprof_type.h 2012-06-29 13:38:29.000000000 +1200 @@ -73,7 +73,6 @@ XPROF_storeWriteComplete, XPROF_write, XPROF_xcalloc, - XPROF_xcountws, XPROF_xmalloc, XPROF_xrealloc, XPROF_LAST diff -u -r -N squid-3.2.0.17/lib/rfcnb/Makefile.in squid-3.2.0.18/lib/rfcnb/Makefile.in --- squid-3.2.0.17/lib/rfcnb/Makefile.in 2012-04-13 01:45:50.000000000 +1200 +++ squid-3.2.0.18/lib/rfcnb/Makefile.in 2012-06-29 13:39:14.000000000 +1200 @@ -129,6 +129,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/lib/smblib/Makefile.in squid-3.2.0.18/lib/smblib/Makefile.in --- squid-3.2.0.17/lib/smblib/Makefile.in 2012-04-13 01:45:51.000000000 +1200 +++ squid-3.2.0.18/lib/smblib/Makefile.in 2012-06-29 13:39:14.000000000 +1200 @@ -130,6 +130,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/lib/util.c squid-3.2.0.18/lib/util.c --- squid-3.2.0.17/lib/util.c 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/lib/util.c 2012-06-29 13:38:29.000000000 +1200 @@ -35,7 +35,6 @@ #define _etext etext #include "squid.h" -#include "profiler/Profiler.h" #include "util.h" #if HAVE_STDIO_H @@ -79,24 +78,6 @@ (double) (t2.tv_usec - t1.tv_usec) / 1000000.0; } -/* returns the number of leading white spaces in str; handy in skipping ws */ -size_t -xcountws(const char *str) -{ - size_t count = 0; - PROF_start(xcountws); - - if (str) { - while (xisspace(*str)) { - str++; - count++; - } - } - - PROF_stop(xcountws); - return count; -} - /* somewhat safer calculation of %s */ double xpercent(double part, double whole) diff -u -r -N squid-3.2.0.17/lib/xusleep.c squid-3.2.0.18/lib/xusleep.c --- squid-3.2.0.17/lib/xusleep.c 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/lib/xusleep.c 2012-06-29 13:38:29.000000000 +1200 @@ -1,5 +1,4 @@ #include "squid.h" -#include "profiler/Profiler.h" #include "xusleep.h" #if HAVE_UNISTD_H diff -u -r -N squid-3.2.0.17/Makefile.in squid-3.2.0.18/Makefile.in --- squid-3.2.0.17/Makefile.in 2012-04-13 01:46:19.000000000 +1200 +++ squid-3.2.0.18/Makefile.in 2012-06-29 13:39:21.000000000 +1200 @@ -162,6 +162,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/RELEASENOTES.html squid-3.2.0.18/RELEASENOTES.html --- squid-3.2.0.17/RELEASENOTES.html 2012-04-13 02:45:46.000000000 +1200 +++ squid-3.2.0.18/RELEASENOTES.html 2012-06-29 13:57:21.000000000 +1200 @@ -2,10 +2,10 @@ - Squid 3.2.0.17 release notes + Squid 3.2.0.18 release notes -

Squid 3.2.0.17 release notes

+

Squid 3.2.0.18 release notes

Squid Developers


@@ -25,18 +25,17 @@

3. Changes to squid.conf since Squid-3.1

@@ -73,7 +72,7 @@

1. Notice

-

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

+

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

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

@@ -88,6 +87,18 @@

Although this release is deemed good enough for use in many setups, please note the existence of open bugs against Squid-3.2.

+

Currently known issues which only depends on available developer time and may still be resolved in a future 3.2 release are:

+

+

    +
  • CVE-2009-0801 : interception proxies cannot relay certain requests to peers. see the CVE section below for details.
  • +
  • SMP Support still has a number of important bugs needing to be resolved. see the bugs list above for details.
  • +
  • Windows support is still incomplete.
  • +
  • TCP logging of access.log does not recover from broken connections well.
  • +
  • The lack of some features available in Squid-2.x series. See the regression sections below for full details.
  • +
+

+ +

1.2 Changes since earlier releases of Squid-3.2

@@ -101,12 +112,11 @@

The most important of these new features are:

  • Fixed CVE-2009-0801 : NAT interception vulnerability to malicious clients.
  • -
  • NCSA helper DES algorithm password limits
  • SMP scalability
  • Helper Multiplexer and On-Demand
  • Helper Name Changes
  • Multi-Lingual manuals
  • -
  • Solaris 10 pthreads Support (Experimental)
  • +
  • Solaris 10 pthreads Support
  • Surrogate/1.0 protocol extensions to HTTP
  • Logging Infrastructure Updated
  • Client Bandwidth Limits
  • @@ -130,31 +140,24 @@ DNS entries.

    When the Host: authority contradicts another authority source Squid will log -"SECURITY ALERT: Host: header forgery detected" and respond with a 409 Conflict -error status page.

    +"SECURITY ALERT: Host: header forgery detected". The response will then be determined +by the +host_verify_strict +directive. Squid will respond with 409 Conflict error response when strict validation +fails and handles the request normally when strict validation succeeds or is OFF (default).

    + +

    Relaying of messages which FAIL non-strct Host: validation are permitted through Squid but +only to the original destination IP the client was requesting. This means interception proxies +can not be used as feeder gateways into a cluster or peer hierarchy without strict validation.

    + +

    Known Issue: When non-strict validation fails Squid will relay the request, but can only do +so to the orginal destination IP the client was contacting. This means that interception +proxy Squid are unable to pass traffic reliably to peers in a cache hierarchy. +Developer time is required to implement safe transit of these requests. +Please contact squid-dev if you are able to assist or sponsor the development.

    -

    2.2 NCSA helper DES algorithm password limits -

    - -

    Details in Advisory -SQUID-2011:2

    - -

    The DES algorithm used by the NCSA Basic authentication helper has an -limit of 8 bytes but some implementations do not error when truncating -longer passwords down to this unsafe level.

    - -

    This both significantly lowers the threshold of difficulty decrypting -captured password files and hides from users the fact that the extra bits -of their chosen long password is not being utilized.

    - -

    The NCSA helper bundled with Squid will prevent passwords longer than 8 -characters being sent to the DES algorithm. The MD5 hash algorithm which -supports longer than 8 character passwords is also supported by this helper -and should be used instead.

    - - -

    2.3 SMP scalability +

    2.2 SMP scalability

    The new "workers" squid.conf option can be used to launch multiple worker @@ -198,7 +201,7 @@ configuration" and "SMP-Related Macros" sections in squid.conf.documented.

    -

    2.4 Helper Multiplexer +

    2.3 Helper Multiplexer

    The helper multiplexer's purpose is to relieve some of the burden @@ -246,7 +249,7 @@

    -

    2.5 Helpers On-Demand +

    2.4 Helpers On-Demand

    Traditionally Squid has been configured with a fixed number of helpers and started them during @@ -282,7 +285,7 @@ of starting the maximum number of helpers will occur.

    -

    2.6 Helper Name Changes +

    2.5 Helper Name Changes

    To improve the understanding of what each helper does and where it should be used the helper binaries @@ -365,7 +368,7 @@

    -

    2.7 Multi-Lingual manuals +

    2.6 Multi-Lingual manuals

    The man(8) and man(1) pages bundled with Squid are now provided online for all @@ -378,7 +381,7 @@ This move begins the Localization of the internal administrator facing manuals.

    -

    2.8 Solaris 10 pthreads Support (Experimental) +

    2.7 Solaris 10 pthreads Support (Experimental)

    Automatic detection and use of the pthreads library available from Solaris 10

    @@ -390,7 +393,7 @@ We recommend giving AUFS a try for faster disk storage and encourage feedback.

    -

    2.9 Surrogate/1.0 protocol extensions to HTTP +

    2.8 Surrogate/1.0 protocol extensions to HTTP

    The Surrogate extensions to HTTP protocol enable an origin web server to specify separate @@ -415,7 +418,7 @@ is required to prevent an unacceptable surrogate ID of 'localhost' being generated.

    -

    2.10 Logging Infrastructure Updated +

    2.9 Logging Infrastructure Updated

    The advanced logging modules introduced in Squid-2.7 are now available from Squid-3.2.

    @@ -442,8 +445,11 @@ These logs are now created using an access_log line with the format "referrer" or "useragent". They also now log all client requests, if there was no Referer or User-Agent header a dash (-) is logged.

    +

    Known Issue: The TCP logging module does not recover from broken connections well. +At present it will restart the affected Squid instance if the TCP connection is broken.

    + -

    2.11 Client Bandwidth Limits +

    2.10 Client Bandwidth Limits

    In mobile environments, Squid may need to limit Squid-to-client bandwidth @@ -475,14 +481,17 @@ high-bandwidth environments.

    -

    2.12 Better eCAP Suport +

    2.11 Better eCAP Suport

    Support for libecap version 0.2.0 has been added with this series of Squid. Bringing better support for body handling, and logging.

    +

    Known Issue: Due to API changes in libecap this release of Squid will not build +against any older libecap releases.

    -

    2.13 Cache Manager access changes + +

    2.12 Cache Manager access changes

    The Squid Cache Manager has previously only been accessible under the cache_object:// @@ -597,6 +606,14 @@

    eui_lookup

    Whether to lookup the EUI or MAC address of a connected client.

    +
    host_verify_strict
    +

    New option to enable super-strict HTTP and DNS information match. +Ensuring the HTTP URI details, DNS records, and TCP connection layers all match in a +three-legged security verification. Preventing domain hijacking or malicious poisoning +attacks by malicious scripts.

    +

    The default is to verify only intercepted traffic, to log all issues and let failed +traffic through when doing so can be done safely.

    +
    icap_206_enable

    New option to toggle whether the ICAP 206 (Partial Content) responses extension. Default is on.

    @@ -693,6 +710,7 @@ idle=N determines how many helper to retain as buffer against sudden traffic loads. concurrency=N previously called auth_param ... concurrency as a separate option.

    Removed Basic, Digest, NTLM, Negotiate auth_param ... concurrency setting option.

    +

    Known Issue: NTLM and Negotiate protocols do not support concurrency. When set this option is ignored.

    cache_dir

    min-size option ported from Squid-2

    diff -u -r -N squid-3.2.0.17/scripts/Makefile.in squid-3.2.0.18/scripts/Makefile.in --- squid-3.2.0.17/scripts/Makefile.in 2012-04-13 01:45:53.000000000 +1200 +++ squid-3.2.0.18/scripts/Makefile.in 2012-06-29 13:39:14.000000000 +1200 @@ -106,6 +106,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/scripts/trace-master.pl squid-3.2.0.18/scripts/trace-master.pl --- squid-3.2.0.17/scripts/trace-master.pl 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/scripts/trace-master.pl 2012-06-29 13:38:29.000000000 +1200 @@ -106,6 +106,8 @@ start => undef(), history => '', + + reported => 0, }; $Jobs{$id} = $job; @@ -118,6 +120,10 @@ my $job = $Jobs{$id} or die("Did not see job$id\n"); + # several kids may try to report their common parent + return if $job->{reported}; + $job->{reported} = 1; + &reportJob($job->{parent}, 0) if $job->{parent}; &reportJobParam($id, 'parent'); diff -u -r -N squid-3.2.0.17/snmplib/Makefile.in squid-3.2.0.18/snmplib/Makefile.in --- squid-3.2.0.17/snmplib/Makefile.in 2012-04-13 01:45:54.000000000 +1200 +++ squid-3.2.0.18/snmplib/Makefile.in 2012-06-29 13:39:14.000000000 +1200 @@ -128,6 +128,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/AccessLogEntry.h squid-3.2.0.18/src/AccessLogEntry.h --- squid-3.2.0.17/src/AccessLogEntry.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/AccessLogEntry.h 2012-06-29 13:38:29.000000000 +1200 @@ -30,6 +30,7 @@ #ifndef SQUID_HTTPACCESSLOGENTRY_H #define SQUID_HTTPACCESSLOGENTRY_H +#include "anyp/PortCfg.h" #include "comm/Connection.h" #include "HttpVersion.h" #include "HttpRequestMethod.h" @@ -39,7 +40,6 @@ #if ICAP_CLIENT #include "adaptation/icap/Elements.h" #endif -#include "ProtoPort.h" /* forward decls */ class HttpReply; @@ -154,7 +154,7 @@ const char *ssluser; #endif - http_port_list *port; + AnyP::PortCfg *port; } cache; diff -u -r -N squid-3.2.0.17/src/acl/Acl.cc squid-3.2.0.18/src/acl/Acl.cc --- squid-3.2.0.17/src/acl/Acl.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/acl/Acl.cc 2012-06-29 13:38:29.000000000 +1200 @@ -37,7 +37,7 @@ #include "acl/Checklist.h" #include "ConfigParser.h" #include "dlink.h" -#include "ProtoPort.h" +#include "anyp/PortCfg.h" const char *AclMatchedName = NULL; @@ -129,7 +129,7 @@ // Is this ACL going to work? if (strcmp(theType, "myip") == 0) { - http_port_list *p = Config.Sockaddr.http; + AnyP::PortCfg *p = Config.Sockaddr.http; while (p) { // Bug 3239: not reliable when there is interception traffic coming if (p->intercepted) @@ -137,7 +137,7 @@ p = p->next; } } else if (strcmp(theType, "myport") == 0) { - http_port_list *p = Config.Sockaddr.http; + AnyP::PortCfg *p = Config.Sockaddr.http; while (p) { // Bug 3239: not reliable when there is interception traffic coming // Bug 3239: myport - not reliable (yet) when there is interception traffic coming diff -u -r -N squid-3.2.0.17/src/acl/Makefile.in squid-3.2.0.18/src/acl/Makefile.in --- squid-3.2.0.17/src/acl/Makefile.in 2012-04-13 01:45:59.000000000 +1200 +++ squid-3.2.0.18/src/acl/Makefile.in 2012-06-29 13:39:16.000000000 +1200 @@ -183,6 +183,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/acl/MyPortName.cc squid-3.2.0.18/src/acl/MyPortName.cc --- squid-3.2.0.17/src/acl/MyPortName.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/acl/MyPortName.cc 2012-06-29 13:38:29.000000000 +1200 @@ -34,10 +34,10 @@ */ #include "squid-old.h" -#include "ProtoPort.h" #include "acl/MyPortName.h" #include "acl/StringData.h" #include "acl/Checklist.h" +#include "anyp/PortCfg.h" #include "HttpRequest.h" /* for ConnStateData */ diff -u -r -N squid-3.2.0.17/src/adaptation/ecap/Makefile.in squid-3.2.0.18/src/adaptation/ecap/Makefile.in --- squid-3.2.0.17/src/adaptation/ecap/Makefile.in 2012-04-13 01:46:00.000000000 +1200 +++ squid-3.2.0.18/src/adaptation/ecap/Makefile.in 2012-06-29 13:39:16.000000000 +1200 @@ -144,6 +144,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/adaptation/ecap/MessageRep.cc squid-3.2.0.18/src/adaptation/ecap/MessageRep.cc --- squid-3.2.0.17/src/adaptation/ecap/MessageRep.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/adaptation/ecap/MessageRep.cc 2012-06-29 13:38:29.000000000 +1200 @@ -162,6 +162,8 @@ return protocolInternal; case AnyP::PROTO_ICY: return protocolIcy; + case AnyP::PROTO_COAP: + case AnyP::PROTO_COAPS: // use 'unknown' until libecap supports coap:// and coaps:// case AnyP::PROTO_UNKNOWN: return protocolUnknown; // until we remember the protocol image case AnyP::PROTO_NONE: diff -u -r -N squid-3.2.0.17/src/adaptation/ecap/XactionRep.cc squid-3.2.0.18/src/adaptation/ecap/XactionRep.cc --- squid-3.2.0.17/src/adaptation/ecap/XactionRep.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/adaptation/ecap/XactionRep.cc 2012-06-29 13:38:29.000000000 +1200 @@ -144,6 +144,9 @@ if (request->auth_user_request != NULL) { if (char const *name = request->auth_user_request->username()) return libecap::Area::FromTempBuffer(name, strlen(name)); + else if (request->extacl_user.defined() && request->extacl_user.size()) + return libecap::Area::FromTempBuffer(request->extacl_user.rawBuf(), + request->extacl_user.size()); } #endif return libecap::Area(); diff -u -r -N squid-3.2.0.17/src/adaptation/icap/Makefile.in squid-3.2.0.18/src/adaptation/icap/Makefile.in --- squid-3.2.0.17/src/adaptation/icap/Makefile.in 2012-04-13 01:46:01.000000000 +1200 +++ squid-3.2.0.18/src/adaptation/icap/Makefile.in 2012-06-29 13:39:16.000000000 +1200 @@ -139,6 +139,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/adaptation/icap/ModXact.cc squid-3.2.0.18/src/adaptation/icap/ModXact.cc --- squid-3.2.0.17/src/adaptation/icap/ModXact.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/adaptation/icap/ModXact.cc 2012-06-29 13:38:29.000000000 +1200 @@ -1332,6 +1332,8 @@ if (!TheConfig.reuse_connections) buf.Printf("Connection: close\r\n"); + const HttpRequest *request = &virginRequest(); + // we must forward "Proxy-Authenticate" and "Proxy-Authorization" // as ICAP headers. if (virgin.header->header.has(HDR_PROXY_AUTHENTICATE)) { @@ -1342,10 +1344,14 @@ if (virgin.header->header.has(HDR_PROXY_AUTHORIZATION)) { String vh=virgin.header->header.getByName("Proxy-Authorization"); buf.Printf("Proxy-Authorization: " SQUIDSTRINGPH "\r\n", SQUIDSTRINGPRINT(vh)); + } else if (request->extacl_user.defined() && request->extacl_user.size() && request->extacl_passwd.defined() && request->extacl_passwd.size()) { + char loginbuf[256]; + snprintf(loginbuf, sizeof(loginbuf), SQUIDSTRINGPH ":" SQUIDSTRINGPH, + SQUIDSTRINGPRINT(request->extacl_user), + SQUIDSTRINGPRINT(request->extacl_passwd)); + buf.Printf("Proxy-Authorization: Basic %s\r\n", old_base64_encode(loginbuf)); } - const HttpRequest *request = &virginRequest(); - // share the cross-transactional database records if needed if (Adaptation::Config::masterx_shared_name) { Adaptation::History::Pointer ah = request->adaptHistory(false); @@ -1488,6 +1494,9 @@ const char *value = TheConfig.client_username_encode ? old_base64_encode(name) : name; buf.Printf("%s: %s\r\n", TheConfig.client_username_header, value); } + } else if (request->extacl_user.defined() && request->extacl_user.size()) { + const char *value = TheConfig.client_username_encode ? old_base64_encode(request->extacl_user.termedBuf()) : request->extacl_user.termedBuf(); + buf.Printf("%s: %s\r\n", TheConfig.client_username_header, value); } #endif } diff -u -r -N squid-3.2.0.17/src/adaptation/Makefile.in squid-3.2.0.18/src/adaptation/Makefile.in --- squid-3.2.0.17/src/adaptation/Makefile.in 2012-04-13 01:45:59.000000000 +1200 +++ squid-3.2.0.18/src/adaptation/Makefile.in 2012-06-29 13:39:16.000000000 +1200 @@ -180,6 +180,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/anyp/Makefile.am squid-3.2.0.18/src/anyp/Makefile.am --- squid-3.2.0.17/src/anyp/Makefile.am 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/anyp/Makefile.am 2012-06-29 13:38:29.000000000 +1200 @@ -4,6 +4,8 @@ noinst_LTLIBRARIES = libanyp.la libanyp_la_SOURCES = \ + PortCfg.cc \ + PortCfg.h \ ProtocolType.cc \ ProtocolType.h \ ProtocolVersion.h diff -u -r -N squid-3.2.0.17/src/anyp/Makefile.in squid-3.2.0.18/src/anyp/Makefile.in --- squid-3.2.0.17/src/anyp/Makefile.in 2012-04-13 01:46:01.000000000 +1200 +++ squid-3.2.0.18/src/anyp/Makefile.in 2012-06-29 13:39:16.000000000 +1200 @@ -56,7 +56,7 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libanyp_la_LIBADD = -am_libanyp_la_OBJECTS = ProtocolType.lo +am_libanyp_la_OBJECTS = PortCfg.lo ProtocolType.lo libanyp_la_OBJECTS = $(am_libanyp_la_OBJECTS) DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/cfgaux/depcomp @@ -137,6 +137,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ @@ -309,6 +310,8 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libanyp.la libanyp_la_SOURCES = \ + PortCfg.cc \ + PortCfg.h \ ProtocolType.cc \ ProtocolType.h \ ProtocolVersion.h @@ -374,6 +377,7 @@ distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PortCfg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProtocolType.Plo@am__quote@ .cc.o: diff -u -r -N squid-3.2.0.17/src/anyp/PortCfg.cc squid-3.2.0.18/src/anyp/PortCfg.cc --- squid-3.2.0.17/src/anyp/PortCfg.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.18/src/anyp/PortCfg.cc 2012-06-29 13:38:29.000000000 +1200 @@ -0,0 +1,91 @@ +#include "squid.h" +#include "anyp/PortCfg.h" +#include "comm.h" +#if HAVE_LIMITS +#include +#endif + +CBDATA_NAMESPACED_CLASS_INIT(AnyP, PortCfg); + +int NHttpSockets = 0; +int HttpSockets[MAXTCPLISTENPORTS]; + +AnyP::PortCfg::PortCfg(const char *aProtocol) +#if USE_SSL + : + dynamicCertMemCacheSize(std::numeric_limits::max()) +#endif +{ + protocol = xstrdup(aProtocol); +} + +AnyP::PortCfg::~PortCfg() +{ + if (Comm::IsConnOpen(listenConn)) { + listenConn->close(); + listenConn = NULL; + } + + safe_free(name); + safe_free(defaultsite); + safe_free(protocol); + +#if USE_SSL + safe_free(cert); + safe_free(key); + safe_free(options); + safe_free(cipher); + safe_free(cafile); + safe_free(capath); + safe_free(dhfile); + safe_free(sslflags); + safe_free(sslContextSessionId); +#endif +} + +AnyP::PortCfg * +AnyP::PortCfg::clone() const +{ + AnyP::PortCfg *b = new AnyP::PortCfg(protocol); + + b->s = s; + if (name) + b->name = xstrdup(name); + if (defaultsite) + b->defaultsite = xstrdup(defaultsite); + + b->intercepted = intercepted; + b->spoof_client_ip = spoof_client_ip; + b->accel = accel; + b->allow_direct = allow_direct; + b->vhost = vhost; + b->sslBump = sslBump; + b->vport = vport; + b->connection_auth_disabled = connection_auth_disabled; + b->disable_pmtu_discovery = disable_pmtu_discovery; + + memcpy( &(b->tcp_keepalive), &(tcp_keepalive), sizeof(tcp_keepalive)); + +#if 0 + // AYJ: 2009-07-18: for now SSL does not clone. Configure separate ports with IPs and SSL settings + +#if USE_SSL + char *cert; + char *key; + int version; + char *cipher; + char *options; + char *clientca; + char *cafile; + char *capath; + char *crlfile; + char *dhfile; + char *sslflags; + char *sslContextSessionId; + SSL_CTX *sslContext; +#endif + +#endif /*0*/ + + return b; +} diff -u -r -N squid-3.2.0.17/src/anyp/PortCfg.h squid-3.2.0.18/src/anyp/PortCfg.h --- squid-3.2.0.17/src/anyp/PortCfg.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.18/src/anyp/PortCfg.h 2012-06-29 13:38:29.000000000 +1200 @@ -0,0 +1,87 @@ +#ifndef SQUID_ANYP_PORTCFG_H +#define SQUID_ANYP_PORTCFG_H + +#include "cbdata.h" +#include "comm/Connection.h" + +#if USE_SSL +#include "ssl/gadgets.h" +#endif + +namespace AnyP +{ + +struct PortCfg { + PortCfg(const char *aProtocol); + ~PortCfg(); + AnyP::PortCfg *clone() const; + + PortCfg *next; + + Ip::Address s; + char *protocol; /* protocol name */ + char *name; /* visible name */ + char *defaultsite; /* default web site */ + + unsigned int intercepted:1; /**< intercepting proxy port */ + unsigned int spoof_client_ip:1; /**< spoof client ip if possible */ + unsigned int accel:1; /**< HTTP accelerator */ + unsigned int allow_direct:1; /**< Allow direct forwarding in accelerator mode */ + unsigned int vhost:1; /**< uses host header */ + unsigned int sslBump:1; /**< intercepts CONNECT requests */ + unsigned int actAsOrigin:1; ///< update replies to conform with RFC 2616 + unsigned int ignore_cc:1; /**< Ignore request Cache-Control directives */ + + int vport; /* virtual port support, -1 for dynamic, >0 static*/ + bool connection_auth_disabled; /* Don't support connection oriented auth */ + int disable_pmtu_discovery; + + struct { + unsigned int enabled; + unsigned int idle; + unsigned int interval; + unsigned int timeout; + } tcp_keepalive; + + /** + * The listening socket details. + * If Comm::ConnIsOpen() we are actively listening for client requests. + * use listenConn->close() to stop. + */ + Comm::ConnectionPointer listenConn; + +#if USE_SSL + char *cert; + char *key; + int version; + char *cipher; + char *options; + char *clientca; + char *cafile; + char *capath; + char *crlfile; + char *dhfile; + char *sslflags; + char *sslContextSessionId; ///< "session id context" for staticSslContext + bool generateHostCertificates; ///< dynamically make host cert for sslBump + size_t dynamicCertMemCacheSize; ///< max size of generated certificates memory cache + + Ssl::SSL_CTX_Pointer staticSslContext; ///< for HTTPS accelerator or static sslBump + Ssl::X509_Pointer signingCert; ///< x509 certificate for signing generated certificates + Ssl::EVP_PKEY_Pointer signPkey; ///< private key for sighing generated certificates + Ssl::X509_STACK_Pointer certsToChain; ///< x509 certificates to send with the generated cert +#endif + + CBDATA_CLASS2(PortCfg); // namespaced +}; + +} // namespace AnyP + +// Max number of TCP listening ports +#define MAXTCPLISTENPORTS 128 + +// TODO: kill this global array. Need to check performance of array vs list though. +extern int NHttpSockets; +extern int HttpSockets[MAXTCPLISTENPORTS]; + +#endif /* SQUID_ANYP_PORTCFG_H */ diff -u -r -N squid-3.2.0.17/src/auth/AclProxyAuth.cc squid-3.2.0.18/src/auth/AclProxyAuth.cc --- squid-3.2.0.17/src/auth/AclProxyAuth.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/auth/AclProxyAuth.cc 2012-06-29 13:38:29.000000000 +1200 @@ -148,15 +148,12 @@ } void -ProxyAuthLookup::LookupDone(void *data, char *result) +ProxyAuthLookup::LookupDone(void *data) { ACLFilledChecklist *checklist = Filled(static_cast(data)); assert (checklist->asyncState() == ProxyAuthLookup::Instance()); - if (result != NULL) - fatal("AclLookupProxyAuthDone: Old code floating around somewhere.\nMake clean and if that doesn't work, report a bug to the squid developers.\n"); - if (checklist->auth_user_request == NULL || !checklist->auth_user_request->valid() || checklist->conn() == NULL) { /* credentials could not be checked either way * restart the whole process */ diff -u -r -N squid-3.2.0.17/src/auth/AclProxyAuth.h squid-3.2.0.18/src/auth/AclProxyAuth.h --- squid-3.2.0.17/src/auth/AclProxyAuth.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/auth/AclProxyAuth.h 2012-06-29 13:38:29.000000000 +1200 @@ -50,7 +50,7 @@ private: static ProxyAuthLookup instance_; - static void LookupDone(void *data, char *result); + static void LookupDone(void *data); }; class ProxyAuthNeeded : public ACLChecklist::AsyncState diff -u -r -N squid-3.2.0.17/src/auth/basic/auth_basic.h squid-3.2.0.18/src/auth/basic/auth_basic.h --- squid-3.2.0.17/src/auth/basic/auth_basic.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/auth/basic/auth_basic.h 2012-06-29 13:38:29.000000000 +1200 @@ -20,7 +20,7 @@ public: BasicAuthQueueNode *next; Auth::UserRequest::Pointer auth_user_request; - RH *handler; + AUTHCB *handler; void *data; }; diff -u -r -N squid-3.2.0.17/src/auth/basic/Makefile.in squid-3.2.0.18/src/auth/basic/Makefile.in --- squid-3.2.0.17/src/auth/basic/Makefile.in 2012-04-13 01:46:03.000000000 +1200 +++ squid-3.2.0.18/src/auth/basic/Makefile.in 2012-06-29 13:39:17.000000000 +1200 @@ -138,6 +138,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/auth/basic/UserRequest.cc squid-3.2.0.18/src/auth/basic/UserRequest.cc --- squid-3.2.0.17/src/auth/basic/UserRequest.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/auth/basic/UserRequest.cc 2012-06-29 13:38:29.000000000 +1200 @@ -77,7 +77,7 @@ /* send the initial data to a basic authenticator module */ void -Auth::Basic::UserRequest::module_start(RH * handler, void *data) +Auth::Basic::UserRequest::module_start(AUTHCB * handler, void *data) { assert(user()->auth_type == Auth::AUTH_BASIC); Auth::Basic::User *basic_auth = dynamic_cast(user().getRaw()); @@ -86,7 +86,7 @@ if (static_cast(Auth::Config::Find("basic"))->authenticateProgram == NULL) { debugs(29, DBG_CRITICAL, "ERROR: No Basic authentication program configured."); - handler(data, NULL); + handler(data); return; } @@ -124,10 +124,10 @@ int sz = snprintf(buf, sizeof(buf), "%s %s\n", username, pass); if (sz<=0) { debugs(9, DBG_CRITICAL, "ERROR: Basic Authentication Failure. Can not build helper validation request."); - handler(data, NULL); + handler(data); } else if (static_cast(sz) >= sizeof(buf)) { debugs(9, DBG_CRITICAL, "ERROR: Basic Authentication Failure. user:password exceeds " << sizeof(buf) << " bytes."); - handler(data, NULL); + handler(data); } else helperSubmit(basicauthenticators, buf, Auth::Basic::UserRequest::HandleReply, new Auth::StateData(this, handler, data)); @@ -171,7 +171,7 @@ basic_auth->expiretime = squid_curtime; if (cbdataReferenceValidDone(r->data, &cbdata)) - r->handler(cbdata, NULL); + r->handler(cbdata); cbdataReferenceDone(r->data); @@ -179,7 +179,7 @@ tmpnode = basic_auth->auth_queue->next; if (cbdataReferenceValidDone(basic_auth->auth_queue->data, &cbdata)) - basic_auth->auth_queue->handler(cbdata, NULL); + basic_auth->auth_queue->handler(cbdata); xfree(basic_auth->auth_queue); diff -u -r -N squid-3.2.0.17/src/auth/basic/UserRequest.h squid-3.2.0.18/src/auth/basic/UserRequest.h --- squid-3.2.0.17/src/auth/basic/UserRequest.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/auth/basic/UserRequest.h 2012-06-29 13:38:29.000000000 +1200 @@ -26,7 +26,7 @@ virtual int authenticated() const; virtual void authenticate(HttpRequest * request, ConnStateData *conn, http_hdr_type type); virtual Auth::Direction module_direction(); - virtual void module_start(RH *, void *); + virtual void module_start(AUTHCB *, void *); private: static HLPCB HandleReply; diff -u -r -N squid-3.2.0.17/src/auth/digest/auth_digest.cc squid-3.2.0.18/src/auth/digest/auth_digest.cc --- squid-3.2.0.17/src/auth/digest/auth_digest.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/auth/digest/auth_digest.cc 2012-06-29 13:38:29.000000000 +1200 @@ -185,6 +185,8 @@ while ((temp = authenticateDigestNonceFindNonce((char const *) (newnonce->key)))) { /* create a new nonce */ newnonce->noncedata.randomdata = squid_random(); + /* Bug 3526 high performance fix: add 1 second to creationtime to avoid duplication */ + newnonce->noncedata.creationtime++; authDigestNonceEncode(newnonce); } @@ -1063,6 +1065,7 @@ } else { debugs(29, 9, HERE << "Found user '" << username << "' in the user cache as '" << auth_user << "'"); digest_user = static_cast(auth_user.getRaw()); + digest_user->credentials(Auth::Unchecked); xfree(username); } diff -u -r -N squid-3.2.0.17/src/auth/digest/Makefile.in squid-3.2.0.18/src/auth/digest/Makefile.in --- squid-3.2.0.17/src/auth/digest/Makefile.in 2012-04-13 01:46:04.000000000 +1200 +++ squid-3.2.0.18/src/auth/digest/Makefile.in 2012-06-29 13:39:17.000000000 +1200 @@ -138,6 +138,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/auth/digest/UserRequest.cc squid-3.2.0.18/src/auth/digest/UserRequest.cc --- squid-3.2.0.17/src/auth/digest/UserRequest.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/auth/digest/UserRequest.cc 2012-06-29 13:38:29.000000000 +1200 @@ -245,7 +245,7 @@ /* send the initial data to a digest authenticator module */ void -Auth::Digest::UserRequest::module_start(RH * handler, void *data) +Auth::Digest::UserRequest::module_start(AUTHCB * handler, void *data) { char buf[8192]; @@ -254,7 +254,7 @@ if (static_cast(Auth::Config::Find("digest"))->authenticateProgram == NULL) { debugs(29, DBG_CRITICAL, "ERROR: No Digest authentication program configured."); - handler(data, NULL); + handler(data); return; } @@ -309,7 +309,7 @@ } if (cbdataReferenceValidDone(replyData->data, &cbdata)) - replyData->handler(cbdata, NULL); + replyData->handler(cbdata); delete replyData; } diff -u -r -N squid-3.2.0.17/src/auth/digest/UserRequest.h squid-3.2.0.18/src/auth/digest/UserRequest.h --- squid-3.2.0.17/src/auth/digest/UserRequest.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/auth/digest/UserRequest.h 2012-06-29 13:38:29.000000000 +1200 @@ -34,7 +34,7 @@ virtual void addAuthenticationInfoTrailer(HttpReply * rep, int accel); #endif - virtual void module_start(RH *, void *); + virtual void module_start(AUTHCB *, void *); char *nonceb64; /* "dcd98b7102dd2f0e8b11d0f600bfb0c093" */ char *cnonce; /* "0a4f113b" */ diff -u -r -N squid-3.2.0.17/src/auth/Makefile.in squid-3.2.0.18/src/auth/Makefile.in --- squid-3.2.0.17/src/auth/Makefile.in 2012-04-13 01:46:02.000000000 +1200 +++ squid-3.2.0.18/src/auth/Makefile.in 2012-06-29 13:39:17.000000000 +1200 @@ -178,6 +178,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/auth/negotiate/Makefile.in squid-3.2.0.18/src/auth/negotiate/Makefile.in --- squid-3.2.0.17/src/auth/negotiate/Makefile.in 2012-04-13 01:46:04.000000000 +1200 +++ squid-3.2.0.18/src/auth/negotiate/Makefile.in 2012-06-29 13:39:17.000000000 +1200 @@ -138,6 +138,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/auth/negotiate/UserRequest.cc squid-3.2.0.18/src/auth/negotiate/UserRequest.cc --- squid-3.2.0.17/src/auth/negotiate/UserRequest.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/auth/negotiate/UserRequest.cc 2012-06-29 13:38:29.000000000 +1200 @@ -79,7 +79,7 @@ } void -Auth::Negotiate::UserRequest::module_start(RH * handler, void *data) +Auth::Negotiate::UserRequest::module_start(AUTHCB * handler, void *data) { static char buf[MAX_AUTHTOKEN_LEN]; @@ -91,7 +91,7 @@ if (static_cast(Auth::Config::Find("negotiate"))->authenticateProgram == NULL) { debugs(29, DBG_CRITICAL, "ERROR: No Negotiate authentication program configured."); - handler(data, NULL); + handler(data); return; } @@ -360,7 +360,7 @@ } lm_request->request = NULL; - r->handler(r->data, NULL); + r->handler(r->data); delete r; } diff -u -r -N squid-3.2.0.17/src/auth/negotiate/UserRequest.h squid-3.2.0.18/src/auth/negotiate/UserRequest.h --- squid-3.2.0.17/src/auth/negotiate/UserRequest.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/auth/negotiate/UserRequest.h 2012-06-29 13:38:29.000000000 +1200 @@ -27,7 +27,7 @@ virtual void authenticate(HttpRequest * request, ConnStateData * conn, http_hdr_type type); virtual Direction module_direction(); virtual void onConnectionClose(ConnStateData *); - virtual void module_start(RH *, void *); + virtual void module_start(AUTHCB *, void *); virtual void addAuthenticationInfoHeader(HttpReply * rep, int accel); diff -u -r -N squid-3.2.0.17/src/auth/ntlm/Makefile.in squid-3.2.0.18/src/auth/ntlm/Makefile.in --- squid-3.2.0.17/src/auth/ntlm/Makefile.in 2012-04-13 01:46:05.000000000 +1200 +++ squid-3.2.0.18/src/auth/ntlm/Makefile.in 2012-06-29 13:39:17.000000000 +1200 @@ -137,6 +137,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/auth/ntlm/UserRequest.cc squid-3.2.0.18/src/auth/ntlm/UserRequest.cc --- squid-3.2.0.17/src/auth/ntlm/UserRequest.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/auth/ntlm/UserRequest.cc 2012-06-29 13:38:29.000000000 +1200 @@ -77,7 +77,7 @@ } void -Auth::Ntlm::UserRequest::module_start(RH * handler, void *data) +Auth::Ntlm::UserRequest::module_start(AUTHCB * handler, void *data) { static char buf[MAX_AUTHTOKEN_LEN]; @@ -86,7 +86,7 @@ if (static_cast(Auth::Config::Find("ntlm"))->authenticateProgram == NULL) { debugs(29, DBG_CRITICAL, "ERROR: NTLM Start: no NTLM program configured."); - handler(data, NULL); + handler(data); return; } @@ -340,6 +340,6 @@ HTTPMSGUNLOCK(lm_request->request); lm_request->request = NULL; } - r->handler(r->data, NULL); + r->handler(r->data); delete r; } diff -u -r -N squid-3.2.0.17/src/auth/ntlm/UserRequest.h squid-3.2.0.18/src/auth/ntlm/UserRequest.h --- squid-3.2.0.17/src/auth/ntlm/UserRequest.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/auth/ntlm/UserRequest.h 2012-06-29 13:38:29.000000000 +1200 @@ -27,7 +27,7 @@ virtual void authenticate(HttpRequest * request, ConnStateData * conn, http_hdr_type type); virtual Auth::Direction module_direction(); virtual void onConnectionClose(ConnStateData *); - virtual void module_start(RH *, void *); + virtual void module_start(AUTHCB *, void *); virtual const char * connLastHeader(); diff -u -r -N squid-3.2.0.17/src/auth/State.h squid-3.2.0.18/src/auth/State.h --- squid-3.2.0.17/src/auth/State.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/auth/State.h 2012-06-29 13:38:29.000000000 +1200 @@ -15,7 +15,7 @@ class StateData { public: - StateData(const UserRequest::Pointer &r, RH *h, void *d) : + StateData(const UserRequest::Pointer &r, AUTHCB *h, void *d) : data(cbdataReference(d)), auth_user_request(r), handler(h) {} @@ -27,7 +27,7 @@ void *data; UserRequest::Pointer auth_user_request; - RH *handler; + AUTHCB *handler; private: CBDATA_CLASS2(StateData); diff -u -r -N squid-3.2.0.17/src/auth/UserRequest.cc squid-3.2.0.18/src/auth/UserRequest.cc --- squid-3.2.0.17/src/auth/UserRequest.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/auth/UserRequest.cc 2012-06-29 13:38:29.000000000 +1200 @@ -63,7 +63,7 @@ /* send the initial data to an authenticator module */ void -Auth::UserRequest::start(RH * handler, void *data) +Auth::UserRequest::start(AUTHCB * handler, void *data) { assert(handler); assert(data); diff -u -r -N squid-3.2.0.17/src/auth/UserRequest.h squid-3.2.0.18/src/auth/UserRequest.h --- squid-3.2.0.17/src/auth/UserRequest.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/auth/UserRequest.h 2012-06-29 13:38:29.000000000 +1200 @@ -66,6 +66,9 @@ time_t ip_expiretime; }; +// TODO: make auth schedule AsyncCalls? +typedef void AUTHCB(void*); + namespace Auth { @@ -156,7 +159,7 @@ * \param handler Handler to process the callback when its run * \param data CBDATA for handler */ - virtual void module_start(RH *handler, void *data) = 0; + virtual void module_start(AUTHCB *handler, void *data) = 0; // User credentials object this UserRequest is managing virtual User::Pointer user() {return _auth_user;} @@ -186,7 +189,7 @@ /// Add the appropriate [Proxy-]Authenticate header to the given reply static void addReplyAuthHeader(HttpReply * rep, UserRequest::Pointer auth_user_request, HttpRequest * request, int accelerated, int internal); - void start( RH * handler, void *data); + void start(AUTHCB *handler, void *data); char const * denyMessage(char const * const default_message = NULL); /** Possibly overrideable in future */ diff -u -r -N squid-3.2.0.17/src/base/Makefile.in squid-3.2.0.18/src/base/Makefile.in --- squid-3.2.0.17/src/base/Makefile.in 2012-04-13 01:46:06.000000000 +1200 +++ squid-3.2.0.18/src/base/Makefile.in 2012-06-29 13:39:18.000000000 +1200 @@ -138,6 +138,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/BodyPipe.cc squid-3.2.0.18/src/BodyPipe.cc --- squid-3.2.0.17/src/BodyPipe.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/BodyPipe.cc 2012-06-29 13:38:29.000000000 +1200 @@ -447,9 +447,9 @@ outputBuffer.append(" [", 2); - outputBuffer.Printf("%"PRIu64"<=%"PRIu64, theGetSize, thePutSize); + outputBuffer.Printf("%" PRIu64 "<=%" PRIu64, theGetSize, thePutSize); if (theBodySize >= 0) - outputBuffer.Printf("<=%"PRId64, theBodySize); + outputBuffer.Printf("<=%" PRId64, theBodySize); else outputBuffer.append("<=?", 3); diff -u -r -N squid-3.2.0.17/src/cache_cf.cc squid-3.2.0.18/src/cache_cf.cc --- squid-3.2.0.17/src/cache_cf.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/cache_cf.cc 2012-06-29 13:38:29.000000000 +1200 @@ -46,6 +46,7 @@ #if USE_ECAP #include "adaptation/ecap/Config.h" #endif +#include "anyp/PortCfg.h" #if USE_SSL #include "ssl/support.h" #include "ssl/Config.h" @@ -71,7 +72,6 @@ #include "MemBuf.h" #include "mgr/Registration.h" #include "Parsing.h" -#include "ProtoPort.h" #include "rfc1738.h" #if SQUID_SNMP #include "snmp.h" @@ -189,17 +189,10 @@ #endif /* CURRENTLY_UNUSED */ #endif /* USE_WCCPv2 */ -static void parsePortList(http_port_list **, const char *protocol); -#define parse_http_port_list(l) parsePortList((l),"http") -static void dump_http_port_list(StoreEntry *, const char *, const http_port_list *); -static void free_http_port_list(http_port_list **); - -#if USE_SSL -#define parse_https_port_list(l) parsePortList((l),"https") -#define dump_https_port_list(e,n,l) dump_http_port_list((e),(n),(l)) -#define free_https_port_list(l) free_http_port_list((l)) -#define check_null_https_port_list(l) check_null_http_port_list((l)) -#endif /* USE_SSL */ +static void parsePortCfg(AnyP::PortCfg **, const char *protocol); +#define parse_PortCfg(l) parsePortCfg((l), token) +static void dump_PortCfg(StoreEntry *, const char *, const AnyP::PortCfg *); +static void free_PortCfg(AnyP::PortCfg **); static void parse_b_size_t(size_t * var); static void parse_b_int64_t(int64_t * var); @@ -880,51 +873,36 @@ Config.ssl_client.sslContext = sslCreateClientContext(Config.ssl_client.cert, Config.ssl_client.key, Config.ssl_client.version, Config.ssl_client.cipher, Config.ssl_client.options, Config.ssl_client.flags, Config.ssl_client.cafile, Config.ssl_client.capath, Config.ssl_client.crlfile); - { - - peer *p; - - for (p = Config.peers; p != NULL; p = p->next) { - if (p->use_ssl) { - debugs(3, 1, "Initializing cache_peer " << p->name << " SSL context"); - p->sslContext = sslCreateClientContext(p->sslcert, p->sslkey, p->sslversion, p->sslcipher, p->ssloptions, p->sslflags, p->sslcafile, p->sslcapath, p->sslcrlfile); - } + for (peer *p = Config.peers; p != NULL; p = p->next) { + if (p->use_ssl) { + debugs(3, 1, "Initializing cache_peer " << p->name << " SSL context"); + p->sslContext = sslCreateClientContext(p->sslcert, p->sslkey, p->sslversion, p->sslcipher, p->ssloptions, p->sslflags, p->sslcafile, p->sslcapath, p->sslcrlfile); } } - { - - http_port_list *s; - - for (s = Config.Sockaddr.http; s != NULL; s = (http_port_list *) s->next) { - if (!s->cert && !s->key) - continue; + for (AnyP::PortCfg *s = Config.Sockaddr.http; s != NULL; s = s->next) { + if (!s->cert && !s->key) + continue; - debugs(3, 1, "Initializing http_port " << s->s << " SSL context"); + debugs(3, 1, "Initializing http_port " << s->s << " SSL context"); - s->staticSslContext.reset( - sslCreateServerContext(s->cert, s->key, - s->version, s->cipher, s->options, s->sslflags, s->clientca, - s->cafile, s->capath, s->crlfile, s->dhfile, - s->sslContextSessionId)); + s->staticSslContext.reset( + sslCreateServerContext(s->cert, s->key, + s->version, s->cipher, s->options, s->sslflags, s->clientca, + s->cafile, s->capath, s->crlfile, s->dhfile, + s->sslContextSessionId)); - Ssl::readCertChainAndPrivateKeyFromFiles(s->signingCert, s->signPkey, s->certsToChain, s->cert, s->key); - } + Ssl::readCertChainAndPrivateKeyFromFiles(s->signingCert, s->signPkey, s->certsToChain, s->cert, s->key); } - { - - http_port_list *s; + for (AnyP::PortCfg *s = Config.Sockaddr.https; s != NULL; s = s->next) { + debugs(3, 1, "Initializing https_port " << s->s << " SSL context"); - for (s = Config.Sockaddr.https; s != NULL; s = s->next) { - debugs(3, 1, "Initializing https_port " << s->s << " SSL context"); - - s->staticSslContext.reset( - sslCreateServerContext(s->cert, s->key, - s->version, s->cipher, s->options, s->sslflags, s->clientca, - s->cafile, s->capath, s->crlfile, s->dhfile, - s->sslContextSessionId)); - } + s->staticSslContext.reset( + sslCreateServerContext(s->cert, s->key, + s->version, s->cipher, s->options, s->sslflags, s->clientca, + s->cafile, s->capath, s->crlfile, s->dhfile, + s->sslContextSessionId)); } #endif @@ -3057,7 +3035,7 @@ dump_time_msec(StoreEntry * entry, const char *name, time_msec_t var) { if (var % 1000) - storeAppendPrintf(entry, "%s %"PRId64" milliseconds\n", name, var); + storeAppendPrintf(entry, "%s %" PRId64 " milliseconds\n", name, var); else storeAppendPrintf(entry, "%s %d seconds\n", name, (int)(var/1000) ); } @@ -3108,13 +3086,13 @@ static void dump_b_int64_t(StoreEntry * entry, const char *name, int64_t var) { - storeAppendPrintf(entry, "%s %"PRId64" %s\n", name, var, B_BYTES_STR); + storeAppendPrintf(entry, "%s %" PRId64 " %s\n", name, var, B_BYTES_STR); } static void dump_kb_int64_t(StoreEntry * entry, const char *name, int64_t var) { - storeAppendPrintf(entry, "%s %"PRId64" %s\n", name, var, B_KBYTES_STR); + storeAppendPrintf(entry, "%s %" PRId64 " %s\n", name, var, B_KBYTES_STR); } #if UNUSED_CODE @@ -3511,10 +3489,8 @@ #endif /* CURRENTLY_UNUSED */ #endif /* USE_WCCPv2 */ -CBDATA_CLASS_INIT(http_port_list); - static void -parsePortSpecification(http_port_list * s, char *token) +parsePortSpecification(AnyP::PortCfg * s, char *token) { char *host = NULL; unsigned short port = 0; @@ -3588,7 +3564,7 @@ } static void -parse_http_port_option(http_port_list * s, char *token) +parse_port_option(AnyP::PortCfg * s, char *token) { /* modes first */ @@ -3789,67 +3765,29 @@ void add_http_port(char *portspec) { - http_port_list *s = new http_port_list("http"); + AnyP::PortCfg *s = new AnyP::PortCfg("http_port"); parsePortSpecification(s, portspec); - // we may need to merge better of the above returns a list with clones + // we may need to merge better if the above returns a list with clones assert(s->next == NULL); - s->next = Config.Sockaddr.http; - Config.Sockaddr.http = s; -} - -http_port_list * -clone_http_port_list(http_port_list *a) -{ - http_port_list *b = new http_port_list(a->protocol); - - b->s = a->s; - if (a->name) - b->name = xstrdup(a->name); - if (a->defaultsite) - b->defaultsite = xstrdup(a->defaultsite); - - b->intercepted = a->intercepted; - b->spoof_client_ip = a->spoof_client_ip; - b->accel = a->accel; - b->allow_direct = a->allow_direct; - b->vhost = a->vhost; - b->sslBump = a->sslBump; - b->vport = a->vport; - b->connection_auth_disabled = a->connection_auth_disabled; - b->disable_pmtu_discovery = a->disable_pmtu_discovery; - - memcpy( &(b->tcp_keepalive), &(a->tcp_keepalive), sizeof(a->tcp_keepalive)); - -#if 0 - // AYJ: 2009-07-18: for now SSL does not clone. Configure separate ports with IPs and SSL settings - -#if USE_SSL - // XXX: temporary hack to ease move of SSL options to http_port - http_port_list &http; - - char *cert; - char *key; - int version; - char *cipher; - char *options; - char *clientca; - char *cafile; - char *capath; - char *crlfile; - char *dhfile; - char *sslflags; - char *sslContextSessionId; - SSL_CTX *sslContext; -#endif - -#endif /*0*/ - - return b; + s->next = cbdataReference(Config.Sockaddr.http); + cbdataReferenceDone(Config.Sockaddr.http); + Config.Sockaddr.http = cbdataReference(s); } static void -parsePortList(http_port_list ** head, const char *protocol) +parsePortCfg(AnyP::PortCfg ** head, const char *optionName) { + const char *protocol = NULL; + if (strcmp(optionName, "http_port") == 0 || + strcmp(optionName, "ascii_port") == 0) + protocol = "http"; + else if (strcmp(optionName, "https_port") == 0) + protocol = "https"; + if (!protocol) { + self_destruct(); + return; + } + char *token = strtok(NULL, w_space); if (!token) { @@ -3857,17 +3795,17 @@ return; } - http_port_list *s = new http_port_list(protocol); + AnyP::PortCfg *s = new AnyP::PortCfg(protocol); parsePortSpecification(s, token); /* parse options ... */ while ((token = strtok(NULL, w_space))) { - parse_http_port_option(s, token); + parse_port_option(s, token); } if (Ip::EnableIpv6&IPV6_SPECIAL_SPLITSTACK && s->s.IsAnyAddr()) { // clone the port options from *s to *(s->next) - s->next = clone_http_port_list(s); + s->next = cbdataReference(s->clone()); s->next->s.SetIPv4(); debugs(3, 3, protocol << "_port: clone wildcard address for split-stack: " << s->s << " and " << s->next->s); } @@ -3875,11 +3813,11 @@ while (*head) head = &(*head)->next; - *head = s; + *head = cbdataReference(s); } static void -dump_generic_http_port(StoreEntry * e, const char *n, const http_port_list * s) +dump_generic_port(StoreEntry * e, const char *n, const AnyP::PortCfg * s) { char buf[MAX_IPSTRLEN]; @@ -4002,23 +3940,23 @@ } static void -dump_http_port_list(StoreEntry * e, const char *n, const http_port_list * s) +dump_PortCfg(StoreEntry * e, const char *n, const AnyP::PortCfg * s) { while (s) { - dump_generic_http_port(e, n, s); + dump_generic_port(e, n, s); storeAppendPrintf(e, "\n"); s = s->next; } } static void -free_http_port_list(http_port_list ** head) +free_PortCfg(AnyP::PortCfg ** head) { - http_port_list *s; + AnyP::PortCfg *s; while ((s = *head) != NULL) { *head = s->next; - delete s; + cbdataReferenceDone(s); } } diff -u -r -N squid-3.2.0.17/src/cf.data.depend squid-3.2.0.18/src/cf.data.depend --- squid-3.2.0.17/src/cf.data.depend 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/cf.data.depend 2012-06-29 13:38:29.000000000 +1200 @@ -31,8 +31,6 @@ hostdomaintype cache_peer http_header_access acl http_header_replace -http_port_list -https_port_list adaptation_access_type adaptation_service_set adaptation_service_chain acl icap_service icap_class adaptation_service_set_type icap_service ecap_service adaptation_service_chain_type icap_service ecap_service @@ -52,6 +50,7 @@ onoff peer peer_access cache_peer acl +PortCfg QosConfig refreshpattern removalpolicy diff -u -r -N squid-3.2.0.17/src/cf.data.pre squid-3.2.0.18/src/cf.data.pre --- squid-3.2.0.17/src/cf.data.pre 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/cf.data.pre 2012-06-29 13:38:29.000000000 +1200 @@ -1277,7 +1277,7 @@ COMMENT_END NAME: http_port ascii_port -TYPE: http_port_list +TYPE: PortCfg DEFAULT: none LOC: Config.Sockaddr.http DOC_START @@ -1400,7 +1400,9 @@ 1 automatic (default) 2 SSLv2 only 3 SSLv3 only - 4 TLSv1 only + 4 TLSv1.0 only + 5 TLSv1.1 only + 6 TLSv1.2 only cipher= Colon separated list of supported ciphers. NOTE: some ciphers such as EDH ciphers depend on @@ -1410,9 +1412,11 @@ options= Various SSL implementation options. The most important being: - NO_SSLv2 Disallow the use of SSLv2 - NO_SSLv3 Disallow the use of SSLv3 - NO_TLSv1 Disallow the use of TLSv1 + NO_SSLv2 Disallow the use of SSLv2 + NO_SSLv3 Disallow the use of SSLv3 + NO_TLSv1 Disallow the use of TLSv1.0 + NO_TLSv1_1 Disallow the use of TLSv1.1 + NO_TLSv1_2 Disallow the use of TLSv1.2 SINGLE_DH_USE Always create a new key when using temporary/ephemeral DH key exchanges ALL Enable various bug workarounds @@ -1508,7 +1512,7 @@ NAME: https_port IFDEF: USE_SSL -TYPE: https_port_list +TYPE: PortCfg DEFAULT: none LOC: Config.Sockaddr.https DOC_START @@ -1864,6 +1868,15 @@ TYPE: int DOC_START SSL version level to use when proxying https:// URLs + + The versions of SSL/TLS supported: + + 1 automatic (default) + 2 SSLv2 only + 3 SSLv3 only + 4 TLSv1.0 only + 5 TLSv1.1 only + 6 TLSv1.2 only DOC_END NAME: sslproxy_options @@ -1876,9 +1889,11 @@ The most important being: - NO_SSLv2 Disallow the use of SSLv2 - NO_SSLv3 Disallow the use of SSLv3 - NO_TLSv1 Disallow the use of TLSv1 + NO_SSLv2 Disallow the use of SSLv2 + NO_SSLv3 Disallow the use of SSLv3 + NO_TLSv1 Disallow the use of TLSv1.0 + NO_TLSv1_1 Disallow the use of TLSv1.1 + NO_TLSv1_2 Disallow the use of TLSv1.2 SINGLE_DH_USE Always create a new key when using temporary/ephemeral DH key exchanges @@ -1980,8 +1995,8 @@ when talking to servers for example.com. All other validation errors will result in ERR_SECURE_CONNECT_FAIL error. - acl BrokenServersAtTrustedIP dstdomain example.com - sslproxy_cert_error allow BrokenServersAtTrustedIP + acl BrokenButTrustedServers dstdomain example.com + sslproxy_cert_error allow BrokenButTrustedServers sslproxy_cert_error deny all This clause only supports fast acl types. @@ -2329,21 +2344,25 @@ reference a combined file containing both the certificate and the key. - sslversion=1|2|3|4 + sslversion=1|2|3|4|5|6 The SSL version to use when connecting to this peer 1 = automatic (default) 2 = SSL v2 only 3 = SSL v3 only - 4 = TLS v1 only + 4 = TLS v1.0 only + 5 = TLS v1.1 only + 6 = TLS v1.2 only sslcipher=... The list of valid SSL ciphers to use when connecting to this peer. ssloptions=... Specify various SSL implementation options: - NO_SSLv2 Disallow the use of SSLv2 - NO_SSLv3 Disallow the use of SSLv3 - NO_TLSv1 Disallow the use of TLSv1 + NO_SSLv2 Disallow the use of SSLv2 + NO_SSLv3 Disallow the use of SSLv3 + NO_TLSv1 Disallow the use of TLSv1.0 + NO_TLSv1_1 Disallow the use of TLSv1.1 + NO_TLSv1_2 Disallow the use of TLSv1.2 SINGLE_DH_USE Always create a new key when using temporary/ephemeral DH key exchanges @@ -6305,40 +6324,60 @@ ----------------------------------------------------------------------------- COMMENT_END -NAME: incoming_icp_average +NAME: incoming_udp_average incoming_icp_average TYPE: int DEFAULT: 6 -LOC: Config.comm_incoming.icp_average -DOC_NONE +LOC: Config.comm_incoming.udp.average +DOC_START + Heavy voodoo here. I can't even believe you are reading this. + Are you crazy? Don't even think about adjusting these unless + you understand the algorithms in comm_select.c first! +DOC_END -NAME: incoming_http_average +NAME: incoming_tcp_average incoming_http_average TYPE: int DEFAULT: 4 -LOC: Config.comm_incoming.http_average -DOC_NONE +LOC: Config.comm_incoming.tcp.average +DOC_START + Heavy voodoo here. I can't even believe you are reading this. + Are you crazy? Don't even think about adjusting these unless + you understand the algorithms in comm_select.c first! +DOC_END NAME: incoming_dns_average TYPE: int DEFAULT: 4 -LOC: Config.comm_incoming.dns_average -DOC_NONE +LOC: Config.comm_incoming.dns.average +DOC_START + Heavy voodoo here. I can't even believe you are reading this. + Are you crazy? Don't even think about adjusting these unless + you understand the algorithms in comm_select.c first! +DOC_END -NAME: min_icp_poll_cnt +NAME: min_udp_poll_cnt min_icp_poll_cnt TYPE: int DEFAULT: 8 -LOC: Config.comm_incoming.icp_min_poll -DOC_NONE +LOC: Config.comm_incoming.udp.min_poll +DOC_START + Heavy voodoo here. I can't even believe you are reading this. + Are you crazy? Don't even think about adjusting these unless + you understand the algorithms in comm_select.c first! +DOC_END NAME: min_dns_poll_cnt TYPE: int DEFAULT: 8 -LOC: Config.comm_incoming.dns_min_poll -DOC_NONE +LOC: Config.comm_incoming.dns.min_poll +DOC_START + Heavy voodoo here. I can't even believe you are reading this. + Are you crazy? Don't even think about adjusting these unless + you understand the algorithms in comm_select.c first! +DOC_END -NAME: min_http_poll_cnt +NAME: min_tcp_poll_cnt min_http_poll_cnt TYPE: int DEFAULT: 8 -LOC: Config.comm_incoming.http_min_poll +LOC: Config.comm_incoming.tcp.min_poll DOC_START Heavy voodoo here. I can't even believe you are reading this. Are you crazy? Don't even think about adjusting these unless diff -u -r -N squid-3.2.0.17/src/ClientDelayConfig.cc squid-3.2.0.18/src/ClientDelayConfig.cc --- squid-3.2.0.17/src/ClientDelayConfig.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/ClientDelayConfig.cc 2012-06-29 13:38:29.000000000 +1200 @@ -12,7 +12,7 @@ LOCAL_ARRAY(char, nom, 32); snprintf(nom, 32, "client_delay_access %d", poolNumberMinusOne + 1); dump_acl_access(entry, nom, access); - storeAppendPrintf(entry, "client_delay_parameters %d %d %"PRId64"\n", poolNumberMinusOne + 1, rate,highwatermark); + storeAppendPrintf(entry, "client_delay_parameters %d %d %" PRId64 "\n", poolNumberMinusOne + 1, rate,highwatermark); storeAppendPrintf(entry, "\n"); } diff -u -r -N squid-3.2.0.17/src/client_side.cc squid-3.2.0.18/src/client_side.cc --- squid-3.2.0.17/src/client_side.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/client_side.cc 2012-06-29 13:38:29.000000000 +1200 @@ -87,6 +87,7 @@ #if USE_AUTH #include "auth/UserRequest.h" #endif +#include "anyp/PortCfg.h" #include "base/Subscription.h" #include "base/TextException.h" #include "ChunkedCodingParser.h" @@ -115,7 +116,6 @@ #include "ipc/StartListening.h" #include "MemBuf.h" #include "MemObject.h" -#include "ProtoPort.h" #include "rfc1738.h" #include "StatCounters.h" #include "StatHist.h" @@ -145,8 +145,8 @@ class ListeningStartedDialer: public CallDialer, public Ipc::StartListeningCb { public: - typedef void (*Handler)(http_port_list *portCfg, const Ipc::FdNoteId note, const Subscription::Pointer &sub); - ListeningStartedDialer(Handler aHandler, http_port_list *aPortCfg, const Ipc::FdNoteId note, const Subscription::Pointer &aSub): + typedef void (*Handler)(AnyP::PortCfg *portCfg, const Ipc::FdNoteId note, const Subscription::Pointer &sub); + ListeningStartedDialer(Handler aHandler, AnyP::PortCfg *aPortCfg, const Ipc::FdNoteId note, const Subscription::Pointer &aSub): handler(aHandler), portCfg(aPortCfg), portTypeNote(note), sub(aSub) {} virtual void print(std::ostream &os) const { @@ -161,12 +161,12 @@ Handler handler; private: - http_port_list *portCfg; ///< from Config.Sockaddr.http + AnyP::PortCfg *portCfg; ///< from Config.Sockaddr.http Ipc::FdNoteId portTypeNote; ///< Type of IPC socket being opened Subscription::Pointer sub; ///< The handler to be subscribed for this connetion listener }; -static void clientListenerConnectionOpened(http_port_list *s, const Ipc::FdNoteId portTypeNote, const Subscription::Pointer &sub); +static void clientListenerConnectionOpened(AnyP::PortCfg *s, const Ipc::FdNoteId portTypeNote, const Subscription::Pointer &sub); /* our socket-related context */ @@ -225,7 +225,7 @@ char *skipLeadingSpace(char *aString); static void connNoteUseOfBuffer(ConnStateData* conn, size_t byteCount); -static ConnStateData *connStateCreate(const Comm::ConnectionPointer &client, http_port_list *port); +static ConnStateData *connStateCreate(const Comm::ConnectionPointer &client, AnyP::PortCfg *port); clientStreamNode * @@ -1001,7 +1001,7 @@ static_cast(lengthToSend(bodyData.range())); noteSentBodyBytes(length); - mb.Printf("%"PRIX64"\r\n", length); + mb.Printf("%" PRIX64 "\r\n", length); mb.append(bodyData.data, length); mb.Printf("\r\n"); } @@ -2087,21 +2087,20 @@ return; /* already in good shape */ /* BUG: Squid cannot deal with '*' URLs (RFC2616 5.1.2) */ - // BUG 2976: Squid only accepts intercepted HTTP. if ((host = mime_get_header(req_hdr, "Host")) != NULL) { int url_sz = strlen(url) + 32 + Config.appendDomainLen + strlen(host); http->uri = (char *)xcalloc(url_sz, 1); - snprintf(http->uri, url_sz, "http://%s%s", /*conn->port->protocol,*/ host, url); + snprintf(http->uri, url_sz, "%s://%s%s", conn->port->protocol, host, url); debugs(33, 5, "TRANSPARENT HOST REWRITE: '" << http->uri <<"'"); } else { /* Put the local socket IP address as the hostname. */ int url_sz = strlen(url) + 32 + Config.appendDomainLen; http->uri = (char *)xcalloc(url_sz, 1); - http->getConn()->clientConnection->local.ToHostname(ipbuf,MAX_IPSTRLEN), - snprintf(http->uri, url_sz, "http://%s:%d%s", - // http->getConn()->port->protocol, + http->getConn()->clientConnection->local.ToHostname(ipbuf,MAX_IPSTRLEN); + snprintf(http->uri, url_sz, "%s://%s:%d%s", + http->getConn()->port->protocol, ipbuf, http->getConn()->clientConnection->local.GetPort(), url); debugs(33, 5, "TRANSPARENT REWRITE: '" << http->uri << "'"); } @@ -3148,7 +3147,7 @@ } ConnStateData * -connStateCreate(const Comm::ConnectionPointer &client, http_port_list *port) +connStateCreate(const Comm::ConnectionPointer &client, AnyP::PortCfg *port) { ConnStateData *result = new ConnStateData; @@ -3210,7 +3209,7 @@ void httpAccept(const CommAcceptCbParams ¶ms) { - http_port_list *s = (http_port_list *)params.data; + AnyP::PortCfg *s = static_cast(params.data); if (params.flag != COMM_OK) { // Its possible the call was still queued when the client disconnected @@ -3431,7 +3430,7 @@ static void httpsAccept(const CommAcceptCbParams ¶ms) { - http_port_list *s = (http_port_list *)params.data; + AnyP::PortCfg *s = static_cast(params.data); if (params.flag != COMM_OK) { // Its possible the call was still queued when the client disconnected @@ -3632,12 +3631,12 @@ static void clientHttpConnectionsOpen(void) { - http_port_list *s = NULL; + AnyP::PortCfg *s = NULL; for (s = Config.Sockaddr.http; s; s = s->next) { - if (MAXHTTPPORTS == NHttpSockets) { + if (MAXTCPLISTENPORTS == NHttpSockets) { debugs(1, 1, "WARNING: You have too many 'http_port' lines."); - debugs(1, 1, " The limit is " << MAXHTTPPORTS); + debugs(1, 1, " The limit is " << MAXTCPLISTENPORTS << " HTTP ports."); continue; } @@ -3680,12 +3679,12 @@ static void clientHttpsConnectionsOpen(void) { - http_port_list *s; + AnyP::PortCfg *s; for (s = Config.Sockaddr.https; s; s = s->next) { - if (MAXHTTPPORTS == NHttpSockets) { + if (MAXTCPLISTENPORTS == NHttpSockets) { debugs(1, 1, "Ignoring 'https_port' lines exceeding the limit."); - debugs(1, 1, "The limit is " << MAXHTTPPORTS << " HTTPS ports."); + debugs(1, 1, "The limit is " << MAXTCPLISTENPORTS << " HTTPS ports."); continue; } @@ -3717,7 +3716,7 @@ /// process clientHttpConnectionsOpen result static void -clientListenerConnectionOpened(http_port_list *s, const Ipc::FdNoteId portTypeNote, const Subscription::Pointer &sub) +clientListenerConnectionOpened(AnyP::PortCfg *s, const Ipc::FdNoteId portTypeNote, const Subscription::Pointer &sub) { if (!OpenedHttpSocket(s->listenConn, portTypeNote)) return; @@ -3754,7 +3753,7 @@ void clientHttpConnectionsClose(void) { - for (http_port_list *s = Config.Sockaddr.http; s; s = s->next) { + for (AnyP::PortCfg *s = Config.Sockaddr.http; s; s = s->next) { if (s->listenConn != NULL) { debugs(1, 1, "Closing HTTP port " << s->listenConn->local); s->listenConn->close(); @@ -3763,7 +3762,7 @@ } #if USE_SSL - for (http_port_list *s = Config.Sockaddr.https; s; s = s->next) { + for (AnyP::PortCfg *s = Config.Sockaddr.https; s; s = s->next) { if (s->listenConn != NULL) { debugs(1, 1, "Closing HTTPS port " << s->listenConn->local); s->listenConn->close(); diff -u -r -N squid-3.2.0.17/src/client_side.h squid-3.2.0.18/src/client_side.h --- squid-3.2.0.17/src/client_side.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/client_side.h 2012-06-29 13:38:29.000000000 +1200 @@ -254,7 +254,7 @@ AsyncCall::Pointer closeHandler; /*The close handler for pinned server side connection*/ } pinning; - http_port_list *port; + AnyP::PortCfg *port; bool transparent() const; bool reading() const; diff -u -r -N squid-3.2.0.17/src/client_side_reply.cc squid-3.2.0.18/src/client_side_reply.cc --- squid-3.2.0.17/src/client_side_reply.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/client_side_reply.cc 2012-06-29 13:38:29.000000000 +1200 @@ -40,6 +40,7 @@ #include "squid-old.h" #include "acl/FilledChecklist.h" #include "acl/Gadgets.h" +#include "anyp/PortCfg.h" #if USE_AUTH #include "auth/UserRequest.h" #endif @@ -61,7 +62,6 @@ #include "ip/QosConfig.h" #include "ipcache.h" #include "MemObject.h" -#include "ProtoPort.h" #include "SquidTime.h" #include "StoreClient.h" #include "Store.h" @@ -646,11 +646,7 @@ if (http->redirect.status) { HttpReply *rep = new HttpReply; -#if LOG_TCP_REDIRECTS - http->logType = LOG_TCP_REDIRECT; -#endif - http->storeEntry()->releaseRequest(); rep->redirect(http->redirect.status, http->redirect.location); http->storeEntry()->replaceHttpReply(rep); @@ -1438,6 +1434,7 @@ #endif const bool maySendChunkedReply = !request->multipartRangeRequest() && + reply->sline.protocol == AnyP::PROTO_HTTP && // response is HTTP (request->http_ver >= HttpVersion(1, 1)); /* Check whether we should send keep-alive */ @@ -1611,9 +1608,9 @@ if (http->redirect.status) { /** \li If redirection status is True force this to be a MISS */ - debugs(85, 3, "clientProcessRequest2: redirectStatus forced StoreEntry to NULL - MISS"); + debugs(85, 3, HERE << "REDIRECT status forced StoreEntry to NULL (no body on 3XX responses)"); http->storeEntry(NULL); - http->logType = LOG_TCP_MISS; + http->logType = LOG_TCP_REDIRECT; doGetMoreData(); return; } diff -u -r -N squid-3.2.0.17/src/client_side_request.cc squid-3.2.0.18/src/client_side_request.cc --- squid-3.2.0.17/src/client_side_request.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/client_side_request.cc 2012-06-29 13:38:29.000000000 +1200 @@ -54,6 +54,7 @@ #include "adaptation/icap/History.h" #endif #endif +#include "anyp/PortCfg.h" #if USE_AUTH #include "auth/UserRequest.h" #endif @@ -72,7 +73,6 @@ #include "HttpRequest.h" #include "ip/QosConfig.h" #include "MemObject.h" -#include "ProtoPort.h" #include "Store.h" #include "SquidTime.h" #include "wordlist.h" @@ -540,6 +540,7 @@ for (int i = 0; i < ia->count; i++) { if (clientConn->local.matchIPAddr(ia->in_addrs[i]) == 0) { debugs(85, 3, HERE << "validate IP " << clientConn->local << " possible from Host:"); + http->request->flags.hostVerified = 1; http->doCallouts(); return; } @@ -565,6 +566,7 @@ // XXX: when we have updated the cache key to base on raw-IP + URI this cacheable limit can go. http->request->flags.hierarchical = 0; // MUST NOT pass to peers (for now) // XXX: when we have sorted out the best way to relay requests properly to peers this hierarchical limit can go. + http->doCallouts(); return; } @@ -1185,6 +1187,7 @@ if (status == HTTP_MOVED_PERMANENTLY || status == HTTP_MOVED_TEMPORARILY || status == HTTP_SEE_OTHER + || status == HTTP_PERMANENT_REDIRECT || status == HTTP_TEMPORARY_REDIRECT) { char *t = result; @@ -1193,10 +1196,7 @@ http->redirect.location = xstrdup(t + 1); // TODO: validate the URL produced here is RFC 2616 compliant absolute URI } else { - if (old_request->http_ver < HttpVersion(1,1)) - debugs(85, DBG_CRITICAL, "ERROR: URL-rewrite produces invalid 302 redirect Location: " << result); - else - debugs(85, DBG_CRITICAL, "ERROR: URL-rewrite produces invalid 303 redirect Location: " << result); + debugs(85, DBG_CRITICAL, "ERROR: URL-rewrite produces invalid " << status << " redirect Location: " << result); } } else if (strcmp(result, http->uri)) { // XXX: validate the URL properly *without* generating a whole new request object right here. @@ -1721,10 +1721,7 @@ assert(adaptedBodySource != NULL); if (size_t contentSize = adaptedBodySource->buf().contentSize()) { - // XXX: entry->bytesWanted returns contentSize-1 if entry can accept data. - // We have to add 1 to avoid suspending forever. - const size_t bytesWanted = storeEntry()->bytesWanted(Range(0,contentSize)); - const size_t spaceAvailable = bytesWanted > 0 ? (bytesWanted + 1) : 0; + const size_t spaceAvailable = storeEntry()->bytesWanted(Range(0,contentSize)); if (spaceAvailable < contentSize ) { // No or partial body data consuming @@ -1734,8 +1731,7 @@ storeEntry()->deferProducer(call); } - // XXX: bytesWanted API does not allow us to write just one byte! - if (!spaceAvailable && contentSize > 1) + if (!spaceAvailable) return; if (spaceAvailable < contentSize ) diff -u -r -N squid-3.2.0.17/src/comm/ConnOpener.cc squid-3.2.0.18/src/comm/ConnOpener.cc --- squid-3.2.0.17/src/comm/ConnOpener.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/comm/ConnOpener.cc 2012-06-29 13:38:29.000000000 +1200 @@ -261,7 +261,7 @@ doneConnecting(COMM_TIMEOUT, errno); } else if (failRetries_ < Config.connect_retries) { debugs(5, 5, HERE << conn_ << ": * - try again"); - eventAdd("Comm::ConnOpener::DelayedConnectRetry", Comm::ConnOpener::DelayedConnectRetry, new Pointer(this), 0.05, 0); + eventAdd("Comm::ConnOpener::DelayedConnectRetry", Comm::ConnOpener::DelayedConnectRetry, new Pointer(this), 0.05, 0, false); return; } else { // send ERROR back to the upper layer. diff -u -r -N squid-3.2.0.17/src/comm/Loops.h squid-3.2.0.18/src/comm/Loops.h --- squid-3.2.0.17/src/comm/Loops.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/comm/Loops.h 2012-06-29 13:38:29.000000000 +1200 @@ -31,6 +31,37 @@ extern void QuickPollRequired(void); +/** + * Max number of UDP messages to receive per call to the UDP receive poller. + * This is a per-port limit for ICP/HTCP ports. + * DNS has a separate limit. + */ +#if _SQUID_MSWIN_ +#define INCOMING_UDP_MAX 1 +#else +#define INCOMING_UDP_MAX 15 +#endif + +/** + * Max number of DNS messages to receive per call to DNS read handler + */ +#if _SQUID_MSWIN_ +#define INCOMING_DNS_MAX 1 +#else +#define INCOMING_DNS_MAX 15 +#endif + +/** + * Max number of new TCP connections to accept per call to the TCP listener poller. + * This is a per-port limit for HTTP/HTTPS ports. + */ +#if _SQUID_MSWIN_ +#define INCOMING_TCP_MAX 1 +#else +#define INCOMING_TCP_MAX 10 +#endif +#define INCOMING_TOTAL_MAX (INCOMING_TCP_MAX+INCOMING_UDP_MAX+INCOMING_DNS_MAX) + } // namespace Comm #endif /* _SQUID_SRC_COMM_LOOPS_H */ diff -u -r -N squid-3.2.0.17/src/comm/Makefile.in squid-3.2.0.18/src/comm/Makefile.in --- squid-3.2.0.17/src/comm/Makefile.in 2012-04-13 01:46:06.000000000 +1200 +++ squid-3.2.0.18/src/comm/Makefile.in 2012-06-29 13:39:18.000000000 +1200 @@ -140,6 +140,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/comm/ModPoll.cc squid-3.2.0.18/src/comm/ModPoll.cc --- squid-3.2.0.17/src/comm/ModPoll.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/comm/ModPoll.cc 2012-06-29 13:38:29.000000000 +1200 @@ -35,6 +35,7 @@ #if USE_POLL #include "squid-old.h" +#include "anyp/PortCfg.h" #include "comm/Connection.h" #include "comm/Loops.h" #include "fde.h" @@ -70,8 +71,8 @@ #define FD_MASK_BITS (FD_MASK_BYTES*NBBY) /* STATIC */ -static int fdIsHttp(int fd); -static int fdIsIcp(int fd); +static int fdIsTcpListen(int fd); +static int fdIsUdpListen(int fd); static int fdIsDns(int fd); static OBJH commIncomingStats; static int comm_check_incoming_poll_handlers(int nfds, int *fds); @@ -92,7 +93,7 @@ * multipled by a factor of (2^INCOMING_FACTOR) to have some * pseudo-floating point precision. * - * The variable 'icp_io_events' and 'http_io_events' counts how many normal + * The variable 'udp_io_events' and 'tcp_io_events' counts how many normal * I/O events have been processed since the last check on the incoming * sockets. When io_events > incoming_interval, its time to check incoming * sockets. @@ -106,7 +107,7 @@ * * incoming_interval = incoming_interval + target_average - number_of_events_processed * - * There are separate incoming_interval counters for both HTTP and ICP events + * There are separate incoming_interval counters for TCP-based, UDP-based, and DNS events * * You can see the current values of the incoming_interval's, as well as * a histogram of 'incoming_events' by asking the cache manager @@ -128,15 +129,15 @@ #define MAX_INCOMING_INTEGER 256 #define INCOMING_FACTOR 5 #define MAX_INCOMING_INTERVAL (MAX_INCOMING_INTEGER << INCOMING_FACTOR) -static int icp_io_events = 0; -static int dns_io_events = 0; -static int http_io_events = 0; -static int incoming_icp_interval = 16 << INCOMING_FACTOR; +static int udp_io_events = 0; ///< I/O events passed since last UDP receiver socket poll +static int dns_io_events = 0; ///< I/O events passed since last DNS socket poll +static int tcp_io_events = 0; ///< I/O events passed since last TCP listening socket poll +static int incoming_udp_interval = 16 << INCOMING_FACTOR; static int incoming_dns_interval = 16 << INCOMING_FACTOR; -static int incoming_http_interval = 16 << INCOMING_FACTOR; -#define commCheckICPIncoming (++icp_io_events > (incoming_icp_interval>> INCOMING_FACTOR)) -#define commCheckDNSIncoming (++dns_io_events > (incoming_dns_interval>> INCOMING_FACTOR)) -#define commCheckHTTPIncoming (++http_io_events > (incoming_http_interval>> INCOMING_FACTOR)) +static int incoming_tcp_interval = 16 << INCOMING_FACTOR; +#define commCheckUdpIncoming (++udp_io_events > (incoming_udp_interval>> INCOMING_FACTOR)) +#define commCheckDnsIncoming (++dns_io_events > (incoming_dns_interval>> INCOMING_FACTOR)) +#define commCheckTcpIncoming (++tcp_io_events > (incoming_tcp_interval>> INCOMING_FACTOR)) void @@ -169,7 +170,7 @@ } static int -fdIsIcp(int fd) +fdIsUdpListen(int fd) { if (icpIncomingConn != NULL && icpIncomingConn->fd == fd) return 1; @@ -193,12 +194,10 @@ } static int -fdIsHttp(int fd) +fdIsTcpListen(int fd) { - int j; - - for (j = 0; j < NHttpSockets; j++) { - if (fd == HttpSockets[j]) + for (const AnyP::PortCfg *s = Config.Sockaddr.http; s; s = s->next) { + if (s->listenConn != NULL && s->listenConn->fd == fd) return 1; } @@ -213,7 +212,7 @@ PF *hdl = NULL; int npfds; - struct pollfd pfds[3 + MAXHTTPPORTS]; + struct pollfd pfds[3 + MAXTCPLISTENPORTS]; PROF_start(comm_check_incoming); incoming_sockets_accepted = 0; @@ -277,12 +276,12 @@ } static void -comm_poll_icp_incoming(void) +comm_poll_udp_incoming(void) { int nfds = 0; int fds[2]; int nevents; - icp_io_events = 0; + udp_io_events = 0; if (Comm::IsConnOpen(icpIncomingConn)) fds[nfds++] = icpIncomingConn->fd; @@ -295,30 +294,30 @@ nevents = comm_check_incoming_poll_handlers(nfds, fds); - incoming_icp_interval += Config.comm_incoming.icp_average - nevents; + incoming_udp_interval += Config.comm_incoming.udp.average - nevents; - if (incoming_icp_interval < Config.comm_incoming.icp_min_poll) - incoming_icp_interval = Config.comm_incoming.icp_min_poll; + if (incoming_udp_interval < Config.comm_incoming.udp.min_poll) + incoming_udp_interval = Config.comm_incoming.udp.min_poll; - if (incoming_icp_interval > MAX_INCOMING_INTERVAL) - incoming_icp_interval = MAX_INCOMING_INTERVAL; + if (incoming_udp_interval > MAX_INCOMING_INTERVAL) + incoming_udp_interval = MAX_INCOMING_INTERVAL; - if (nevents > INCOMING_ICP_MAX) - nevents = INCOMING_ICP_MAX; + if (nevents > INCOMING_UDP_MAX) + nevents = INCOMING_UDP_MAX; - statCounter.comm_icp_incoming.count(nevents); + statCounter.comm_udp_incoming.count(nevents); } static void -comm_poll_http_incoming(void) +comm_poll_tcp_incoming(void) { int nfds = 0; - int fds[MAXHTTPPORTS]; + int fds[MAXTCPLISTENPORTS]; int j; int nevents; - http_io_events = 0; + tcp_io_events = 0; - /* only poll sockets that won't be deferred */ + // XXX: only poll sockets that won't be deferred. But how do we identify them? for (j = 0; j < NHttpSockets; j++) { if (HttpSockets[j] < 0) @@ -328,19 +327,19 @@ } nevents = comm_check_incoming_poll_handlers(nfds, fds); - incoming_http_interval = incoming_http_interval - + Config.comm_incoming.http_average - nevents; + incoming_tcp_interval = incoming_tcp_interval + + Config.comm_incoming.tcp.average - nevents; - if (incoming_http_interval < Config.comm_incoming.http_min_poll) - incoming_http_interval = Config.comm_incoming.http_min_poll; + if (incoming_tcp_interval < Config.comm_incoming.tcp.min_poll) + incoming_tcp_interval = Config.comm_incoming.tcp.min_poll; - if (incoming_http_interval > MAX_INCOMING_INTERVAL) - incoming_http_interval = MAX_INCOMING_INTERVAL; + if (incoming_tcp_interval > MAX_INCOMING_INTERVAL) + incoming_tcp_interval = MAX_INCOMING_INTERVAL; - if (nevents > INCOMING_HTTP_MAX) - nevents = INCOMING_HTTP_MAX; + if (nevents > INCOMING_TCP_MAX) + nevents = INCOMING_TCP_MAX; - statCounter.comm_http_incoming.count(nevents); + statCounter.comm_tcp_incoming.count(nevents); } /* poll all sockets; call handlers for those that are ready. */ @@ -355,8 +354,7 @@ unsigned long nfds; unsigned long npending; int num; - int callicp = 0, callhttp = 0; - int calldns = 0; + int calldns = 0, calludp = 0, calltcp = 0; double timeout = current_dtime + (msec / 1000.0); do { @@ -364,18 +362,18 @@ getCurrentTime(); start = current_dtime; - if (commCheckICPIncoming) - comm_poll_icp_incoming(); + if (commCheckUdpIncoming) + comm_poll_udp_incoming(); - if (commCheckDNSIncoming) + if (commCheckDnsIncoming) comm_poll_dns_incoming(); - if (commCheckHTTPIncoming) - comm_poll_http_incoming(); + if (commCheckTcpIncoming) + comm_poll_tcp_incoming(); PROF_start(comm_poll_prep_pfds); - callicp = calldns = callhttp = 0; + calldns = calludp = calltcp = 0; nfds = 0; @@ -474,8 +472,8 @@ if (revents == 0) continue; - if (fdIsIcp(fd)) { - callicp = 1; + if (fdIsUdpListen(fd)) { + calludp = 1; continue; } @@ -484,8 +482,8 @@ continue; } - if (fdIsHttp(fd)) { - callhttp = 1; + if (fdIsTcpListen(fd)) { + calltcp = 1; continue; } @@ -494,9 +492,7 @@ if (revents & (POLLRDNORM | POLLIN | POLLHUP | POLLERR)) { debugs(5, 6, "comm_poll: FD " << fd << " ready for reading"); - if (NULL == (hdl = F->read_handler)) - (void) 0; - else { + if ((hdl = F->read_handler)) { PROF_start(comm_read_handler); F->read_handler = NULL; F->flags.read_pending = 0; @@ -504,14 +500,14 @@ PROF_stop(comm_read_handler); statCounter.select_fds++; - if (commCheckICPIncoming) - comm_poll_icp_incoming(); + if (commCheckUdpIncoming) + comm_poll_udp_incoming(); - if (commCheckDNSIncoming) + if (commCheckDnsIncoming) comm_poll_dns_incoming(); - if (commCheckHTTPIncoming) - comm_poll_http_incoming(); + if (commCheckTcpIncoming) + comm_poll_tcp_incoming(); } } @@ -525,14 +521,14 @@ PROF_stop(comm_write_handler); statCounter.select_fds++; - if (commCheckICPIncoming) - comm_poll_icp_incoming(); + if (commCheckUdpIncoming) + comm_poll_udp_incoming(); - if (commCheckDNSIncoming) + if (commCheckDnsIncoming) comm_poll_dns_incoming(); - if (commCheckHTTPIncoming) - comm_poll_http_incoming(); + if (commCheckTcpIncoming) + comm_poll_tcp_incoming(); } } @@ -566,14 +562,14 @@ PROF_stop(comm_handle_ready_fd); - if (callicp) - comm_poll_icp_incoming(); + if (calludp) + comm_poll_udp_incoming(); if (calldns) comm_poll_dns_incoming(); - if (callhttp) - comm_poll_http_incoming(); + if (calltcp) + comm_poll_tcp_incoming(); getCurrentTime(); @@ -610,10 +606,10 @@ if (nevents < 0) return; - incoming_dns_interval += Config.comm_incoming.dns_average - nevents; + incoming_dns_interval += Config.comm_incoming.dns.average - nevents; - if (incoming_dns_interval < Config.comm_incoming.dns_min_poll) - incoming_dns_interval = Config.comm_incoming.dns_min_poll; + if (incoming_dns_interval < Config.comm_incoming.dns.min_poll) + incoming_dns_interval = Config.comm_incoming.dns.min_poll; if (incoming_dns_interval > MAX_INCOMING_INTERVAL) incoming_dns_interval = MAX_INCOMING_INTERVAL; @@ -642,20 +638,20 @@ static void commIncomingStats(StoreEntry * sentry) { - storeAppendPrintf(sentry, "Current incoming_icp_interval: %d\n", - incoming_icp_interval >> INCOMING_FACTOR); + storeAppendPrintf(sentry, "Current incoming_udp_interval: %d\n", + incoming_udp_interval >> INCOMING_FACTOR); storeAppendPrintf(sentry, "Current incoming_dns_interval: %d\n", incoming_dns_interval >> INCOMING_FACTOR); - storeAppendPrintf(sentry, "Current incoming_http_interval: %d\n", - incoming_http_interval >> INCOMING_FACTOR); + storeAppendPrintf(sentry, "Current incoming_tcp_interval: %d\n", + incoming_tcp_interval >> INCOMING_FACTOR); storeAppendPrintf(sentry, "\n"); storeAppendPrintf(sentry, "Histogram of events per incoming socket type\n"); - storeAppendPrintf(sentry, "ICP Messages handled per comm_poll_icp_incoming() call:\n"); - statCounter.comm_icp_incoming.dump(sentry, statHistIntDumper); + storeAppendPrintf(sentry, "ICP Messages handled per comm_poll_udp_incoming() call:\n"); + statCounter.comm_udp_incoming.dump(sentry, statHistIntDumper); storeAppendPrintf(sentry, "DNS Messages handled per comm_poll_dns_incoming() call:\n"); statCounter.comm_dns_incoming.dump(sentry, statHistIntDumper); - storeAppendPrintf(sentry, "HTTP Messages handled per comm_poll_http_incoming() call:\n"); - statCounter.comm_http_incoming.dump(sentry, statHistIntDumper); + storeAppendPrintf(sentry, "HTTP Messages handled per comm_poll_tcp_incoming() call:\n"); + statCounter.comm_tcp_incoming.dump(sentry, statHistIntDumper); } /* Called by async-io or diskd to speed up the polling */ diff -u -r -N squid-3.2.0.17/src/comm/ModSelect.cc squid-3.2.0.18/src/comm/ModSelect.cc --- squid-3.2.0.17/src/comm/ModSelect.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/comm/ModSelect.cc 2012-06-29 13:38:29.000000000 +1200 @@ -35,6 +35,7 @@ #if USE_SELECT #include "squid-old.h" +#include "anyp/PortCfg.h" #include "comm/Connection.h" #include "comm/Loops.h" #include "fde.h" @@ -58,8 +59,8 @@ /* STATIC */ static int examine_select(fd_set *, fd_set *); -static int fdIsHttp(int fd); -static int fdIsIcp(int fd); +static int fdIsTcpListener(int fd); +static int fdIsUdpListener(int fd); static int fdIsDns(int fd); static OBJH commIncomingStats; static int comm_check_incoming_select_handlers(int nfds, int *fds); @@ -83,13 +84,13 @@ * of incoming ICP, then we need to check these sockets more than * if we just have HTTP. * - * The variables 'incoming_icp_interval' and 'incoming_http_interval' + * The variables 'incoming_udp_interval' and 'incoming_tcp_interval' * determine how many normal I/O events to process before checking * incoming sockets again. Note we store the incoming_interval * multipled by a factor of (2^INCOMING_FACTOR) to have some * pseudo-floating point precision. * - * The variable 'icp_io_events' and 'http_io_events' counts how many normal + * The variable 'udp_io_events' and 'tcp_io_events' counts how many normal * I/O events have been processed since the last check on the incoming * sockets. When io_events > incoming_interval, its time to check incoming * sockets. @@ -103,7 +104,7 @@ * * incoming_interval = incoming_interval + target_average - number_of_events_processed * - * There are separate incoming_interval counters for both HTTP and ICP events + * There are separate incoming_interval counters for DNS, UDP and TCP events * * You can see the current values of the incoming_interval's, as well as * a histogram of 'incoming_events' by asking the cache manager @@ -125,15 +126,15 @@ #define MAX_INCOMING_INTEGER 256 #define INCOMING_FACTOR 5 #define MAX_INCOMING_INTERVAL (MAX_INCOMING_INTEGER << INCOMING_FACTOR) -static int icp_io_events = 0; +static int udp_io_events = 0; static int dns_io_events = 0; -static int http_io_events = 0; -static int incoming_icp_interval = 16 << INCOMING_FACTOR; +static int tcp_io_events = 0; +static int incoming_udp_interval = 16 << INCOMING_FACTOR; static int incoming_dns_interval = 16 << INCOMING_FACTOR; -static int incoming_http_interval = 16 << INCOMING_FACTOR; -#define commCheckICPIncoming (++icp_io_events > (incoming_icp_interval>> INCOMING_FACTOR)) -#define commCheckDNSIncoming (++dns_io_events > (incoming_dns_interval>> INCOMING_FACTOR)) -#define commCheckHTTPIncoming (++http_io_events > (incoming_http_interval>> INCOMING_FACTOR)) +static int incoming_tcp_interval = 16 << INCOMING_FACTOR; +#define commCheckUdpIncoming (++udp_io_events > (incoming_udp_interval>> INCOMING_FACTOR)) +#define commCheckDnsIncoming (++dns_io_events > (incoming_dns_interval>> INCOMING_FACTOR)) +#define commCheckTcpIncoming (++tcp_io_events > (incoming_tcp_interval>> INCOMING_FACTOR)) void Comm::SetSelect(int fd, unsigned int type, PF * handler, void *client_data, time_t timeout) @@ -167,7 +168,7 @@ } static int -fdIsIcp(int fd) +fdIsUdpListener(int fd) { if (icpIncomingConn != NULL && fd == icpIncomingConn->fd) return 1; @@ -191,12 +192,10 @@ } static int -fdIsHttp(int fd) +fdIsTcpListener(int fd) { - int j; - - for (j = 0; j < NHttpSockets; j++) { - if (fd == HttpSockets[j]) + for (const AnyP::PortCfg *s = Config.Sockaddr.http; s; s = s->next) { + if (s->listenConn != NULL && s->listenConn->fd == fd) return 1; } @@ -272,12 +271,12 @@ } static void -comm_select_icp_incoming(void) +comm_select_udp_incoming(void) { int nfds = 0; int fds[2]; int nevents; - icp_io_events = 0; + udp_io_events = 0; if (Comm::IsConnOpen(icpIncomingConn)) fds[nfds++] = icpIncomingConn->fd; @@ -290,49 +289,48 @@ nevents = comm_check_incoming_select_handlers(nfds, fds); - incoming_icp_interval += Config.comm_incoming.icp_average - nevents; + incoming_udp_interval += Config.comm_incoming.udp.average - nevents; - if (incoming_icp_interval < 0) - incoming_icp_interval = 0; + if (incoming_udp_interval < 0) + incoming_udp_interval = 0; - if (incoming_icp_interval > MAX_INCOMING_INTERVAL) - incoming_icp_interval = MAX_INCOMING_INTERVAL; + if (incoming_udp_interval > MAX_INCOMING_INTERVAL) + incoming_udp_interval = MAX_INCOMING_INTERVAL; - if (nevents > INCOMING_ICP_MAX) - nevents = INCOMING_ICP_MAX; + if (nevents > INCOMING_UDP_MAX) + nevents = INCOMING_UDP_MAX; - statCounter.comm_icp_incoming.count(nevents); + statCounter.comm_udp_incoming.count(nevents); } static void -comm_select_http_incoming(void) +comm_select_tcp_incoming(void) { int nfds = 0; - int fds[MAXHTTPPORTS]; - int j; + int fds[MAXTCPLISTENPORTS]; int nevents; - http_io_events = 0; + tcp_io_events = 0; - for (j = 0; j < NHttpSockets; j++) { - if (HttpSockets[j] < 0) - continue; + // XXX: only poll sockets that won't be deferred. But how do we identify them? - fds[nfds++] = HttpSockets[j]; + for (const AnyP::PortCfg *s = Config.Sockaddr.http; s; s = s->next) { + if (Comm::IsConnOpen(s->listenConn)) + fds[nfds++] = s->listenConn->fd; } nevents = comm_check_incoming_select_handlers(nfds, fds); - incoming_http_interval += Config.comm_incoming.http_average - nevents; + incoming_tcp_interval += Config.comm_incoming.tcp.average - nevents; - if (incoming_http_interval < 0) - incoming_http_interval = 0; + if (incoming_tcp_interval < 0) + incoming_tcp_interval = 0; - if (incoming_http_interval > MAX_INCOMING_INTERVAL) - incoming_http_interval = MAX_INCOMING_INTERVAL; + if (incoming_tcp_interval > MAX_INCOMING_INTERVAL) + incoming_tcp_interval = MAX_INCOMING_INTERVAL; - if (nevents > INCOMING_HTTP_MAX) - nevents = INCOMING_HTTP_MAX; + if (nevents > INCOMING_TCP_MAX) + nevents = INCOMING_TCP_MAX; - statCounter.comm_http_incoming.count(nevents); + statCounter.comm_tcp_incoming.count(nevents); } #define DEBUG_FDBITS 0 @@ -349,8 +347,7 @@ int maxfd; int num; int pending; - int callicp = 0, callhttp = 0; - int calldns = 0; + int calldns = 0, calludp = 0, calltcp = 0; int maxindex; unsigned int k; int j; @@ -372,16 +369,16 @@ getCurrentTime(); start = current_dtime; - if (commCheckICPIncoming) - comm_select_icp_incoming(); + if (commCheckUdpIncoming) + comm_select_udp_incoming(); - if (commCheckDNSIncoming) + if (commCheckDnsIncoming) comm_select_dns_incoming(); - if (commCheckHTTPIncoming) - comm_select_http_incoming(); + if (commCheckTcpIncoming) + comm_select_tcp_incoming(); - callicp = calldns = callhttp = 0; + calldns = calludp = calltcp = 0; maxfd = Biggest_FD + 1; @@ -508,8 +505,8 @@ #endif - if (fdIsIcp(fd)) { - callicp = 1; + if (fdIsUdpListener(fd)) { + calludp = 1; continue; } @@ -518,8 +515,8 @@ continue; } - if (fdIsHttp(fd)) { - callhttp = 1; + if (fdIsTcpListener(fd)) { + calltcp = 1; continue; } @@ -535,14 +532,14 @@ hdl(fd, F->read_data); statCounter.select_fds++; - if (commCheckICPIncoming) - comm_select_icp_incoming(); + if (commCheckUdpIncoming) + comm_select_udp_incoming(); - if (commCheckDNSIncoming) + if (commCheckDnsIncoming) comm_select_dns_incoming(); - if (commCheckHTTPIncoming) - comm_select_http_incoming(); + if (commCheckTcpIncoming) + comm_select_tcp_incoming(); } } } @@ -573,8 +570,8 @@ #endif - if (fdIsIcp(fd)) { - callicp = 1; + if (fdIsUdpListener(fd)) { + calludp = 1; continue; } @@ -583,8 +580,8 @@ continue; } - if (fdIsHttp(fd)) { - callhttp = 1; + if (fdIsTcpListener(fd)) { + calltcp = 1; continue; } @@ -597,26 +594,26 @@ hdl(fd, F->write_data); statCounter.select_fds++; - if (commCheckICPIncoming) - comm_select_icp_incoming(); + if (commCheckUdpIncoming) + comm_select_udp_incoming(); - if (commCheckDNSIncoming) + if (commCheckDnsIncoming) comm_select_dns_incoming(); - if (commCheckHTTPIncoming) - comm_select_http_incoming(); + if (commCheckTcpIncoming) + comm_select_tcp_incoming(); } } } - if (callicp) - comm_select_icp_incoming(); + if (calludp) + comm_select_udp_incoming(); if (calldns) comm_select_dns_incoming(); - if (callhttp) - comm_select_http_incoming(); + if (calltcp) + comm_select_tcp_incoming(); getCurrentTime(); @@ -651,10 +648,10 @@ if (nevents < 0) return; - incoming_dns_interval += Config.comm_incoming.dns_average - nevents; + incoming_dns_interval += Config.comm_incoming.dns.average - nevents; - if (incoming_dns_interval < Config.comm_incoming.dns_min_poll) - incoming_dns_interval = Config.comm_incoming.dns_min_poll; + if (incoming_dns_interval < Config.comm_incoming.dns.min_poll) + incoming_dns_interval = Config.comm_incoming.dns.min_poll; if (incoming_dns_interval > MAX_INCOMING_INTERVAL) incoming_dns_interval = MAX_INCOMING_INTERVAL; @@ -754,20 +751,20 @@ static void commIncomingStats(StoreEntry * sentry) { - storeAppendPrintf(sentry, "Current incoming_icp_interval: %d\n", - incoming_icp_interval >> INCOMING_FACTOR); + storeAppendPrintf(sentry, "Current incoming_udp_interval: %d\n", + incoming_udp_interval >> INCOMING_FACTOR); storeAppendPrintf(sentry, "Current incoming_dns_interval: %d\n", incoming_dns_interval >> INCOMING_FACTOR); - storeAppendPrintf(sentry, "Current incoming_http_interval: %d\n", - incoming_http_interval >> INCOMING_FACTOR); + storeAppendPrintf(sentry, "Current incoming_tcp_interval: %d\n", + incoming_tcp_interval >> INCOMING_FACTOR); storeAppendPrintf(sentry, "\n"); storeAppendPrintf(sentry, "Histogram of events per incoming socket type\n"); - storeAppendPrintf(sentry, "ICP Messages handled per comm_select_icp_incoming() call:\n"); - statCounter.comm_icp_incoming.dump(sentry, statHistIntDumper); + storeAppendPrintf(sentry, "ICP Messages handled per comm_select_udp_incoming() call:\n"); + statCounter.comm_udp_incoming.dump(sentry, statHistIntDumper); storeAppendPrintf(sentry, "DNS Messages handled per comm_select_dns_incoming() call:\n"); statCounter.comm_dns_incoming.dump(sentry, statHistIntDumper); - storeAppendPrintf(sentry, "HTTP Messages handled per comm_select_http_incoming() call:\n"); - statCounter.comm_http_incoming.dump(sentry, statHistIntDumper); + storeAppendPrintf(sentry, "HTTP Messages handled per comm_select_tcp_incoming() call:\n"); + statCounter.comm_tcp_incoming.dump(sentry, statHistIntDumper); } void diff -u -r -N squid-3.2.0.17/src/comm/ModSelectWin32.cc squid-3.2.0.18/src/comm/ModSelectWin32.cc --- squid-3.2.0.17/src/comm/ModSelectWin32.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/comm/ModSelectWin32.cc 2012-06-29 13:38:29.000000000 +1200 @@ -35,6 +35,7 @@ #if USE_SELECT_WIN32 #include "squid-old.h" +#include "anyp/PortCfg.h" #include "comm/Connection.h" #include "comm/Loops.h" #include "fde.h" @@ -58,8 +59,8 @@ /* STATIC */ static int examine_select(fd_set *, fd_set *); -static int fdIsHttp(int fd); -static int fdIsIcp(int fd); +static int fdIsTcpListener(int fd); +static int fdIsUdpListener(int fd); static int fdIsDns(int fd); static OBJH commIncomingStats; static int comm_check_incoming_select_handlers(int nfds, int *fds); @@ -83,13 +84,13 @@ * of incoming ICP, then we need to check these sockets more than * if we just have HTTP. * - * The variables 'incoming_icp_interval' and 'incoming_http_interval' + * The variables 'incoming_udp_interval' and 'incoming_tcp_interval' * determine how many normal I/O events to process before checking * incoming sockets again. Note we store the incoming_interval * multipled by a factor of (2^INCOMING_FACTOR) to have some * pseudo-floating point precision. * - * The variable 'icp_io_events' and 'http_io_events' counts how many normal + * The variable 'udp_io_events' and 'tcp_io_events' counts how many normal * I/O events have been processed since the last check on the incoming * sockets. When io_events > incoming_interval, its time to check incoming * sockets. @@ -103,7 +104,7 @@ * * incoming_interval = incoming_interval + target_average - number_of_events_processed * - * There are separate incoming_interval counters for both HTTP and ICP events + * There are separate incoming_interval counters for DNS, UDP and TCP events * * You can see the current values of the incoming_interval's, as well as * a histogram of 'incoming_events' by asking the cache manager @@ -125,15 +126,15 @@ #define MAX_INCOMING_INTEGER 256 #define INCOMING_FACTOR 5 #define MAX_INCOMING_INTERVAL (MAX_INCOMING_INTEGER << INCOMING_FACTOR) -static int icp_io_events = 0; +static int udp_io_events = 0; static int dns_io_events = 0; -static int http_io_events = 0; -static int incoming_icp_interval = 16 << INCOMING_FACTOR; +static int tcp_io_events = 0; +static int incoming_udp_interval = 16 << INCOMING_FACTOR; static int incoming_dns_interval = 16 << INCOMING_FACTOR; -static int incoming_http_interval = 16 << INCOMING_FACTOR; -#define commCheckICPIncoming (++icp_io_events > (incoming_icp_interval>> INCOMING_FACTOR)) -#define commCheckDNSIncoming (++dns_io_events > (incoming_dns_interval>> INCOMING_FACTOR)) -#define commCheckHTTPIncoming (++http_io_events > (incoming_http_interval>> INCOMING_FACTOR)) +static int incoming_tcp_interval = 16 << INCOMING_FACTOR; +#define commCheckUdpIncoming (++udp_io_events > (incoming_udp_interval>> INCOMING_FACTOR)) +#define commCheckDnsIncoming (++dns_io_events > (incoming_dns_interval>> INCOMING_FACTOR)) +#define commCheckTcpIncoming (++tcp_io_events > (incoming_tcp_interval>> INCOMING_FACTOR)) void Comm::SetSelect(int fd, unsigned int type, PF * handler, void *client_data, time_t timeout) @@ -167,7 +168,7 @@ } static int -fdIsIcp(int fd) +fdIsUdpListener(int fd) { if (icpIncomingConn != NULL && fd == icpIncomingConn->fd) return 1; @@ -191,12 +192,10 @@ } static int -fdIsHttp(int fd) +fdIsTcpListener(int fd) { - int j; - - for (j = 0; j < NHttpSockets; j++) { - if (fd == HttpSockets[j]) + for (const AnyP::PortCfg *s = Config.Sockaddr.http; s; s = s->next) { + if (s->listenConn != NULL && s->listenConn->fd == fd) return 1; } @@ -275,12 +274,12 @@ } static void -comm_select_icp_incoming(void) +comm_select_udp_incoming(void) { int nfds = 0; int fds[2]; int nevents; - icp_io_events = 0; + udp_io_events = 0; if (Comm::IsConnOpen(icpIncomingConn)) fds[nfds++] = icpIncomingConn->fd; @@ -293,49 +292,48 @@ nevents = comm_check_incoming_select_handlers(nfds, fds); - incoming_icp_interval += Config.comm_incoming.icp_average - nevents; + incoming_udp_interval += Config.comm_incoming.udp_average - nevents; - if (incoming_icp_interval < 0) - incoming_icp_interval = 0; + if (incoming_udp_interval < 0) + incoming_udp_interval = 0; - if (incoming_icp_interval > MAX_INCOMING_INTERVAL) - incoming_icp_interval = MAX_INCOMING_INTERVAL; + if (incoming_udp_interval > MAX_INCOMING_INTERVAL) + incoming_udp_interval = MAX_INCOMING_INTERVAL; - if (nevents > INCOMING_ICP_MAX) - nevents = INCOMING_ICP_MAX; + if (nevents > INCOMING_UDP_MAX) + nevents = INCOMING_UDP_MAX; - statCounter.comm_icp_incoming.count(nevents); + statCounter.comm_udp_incoming.count(nevents); } static void -comm_select_http_incoming(void) +comm_select_tcp_incoming(void) { int nfds = 0; - int fds[MAXHTTPPORTS]; - int j; + int fds[MAXTCPLISTENPORTS]; int nevents; - http_io_events = 0; + tcp_io_events = 0; - for (j = 0; j < NHttpSockets; j++) { - if (HttpSockets[j] < 0) - continue; + // XXX: only poll sockets that won't be deferred. But how do we identify them? - fds[nfds++] = HttpSockets[j]; + for (const AnyP::PortCfg *s = Config.Sockaddr.http; s; s = s->next) { + if (Comm::IsConnOpen(s->listenConn)) + fds[nfds++] = s->listenConn->fd; } nevents = comm_check_incoming_select_handlers(nfds, fds); - incoming_http_interval += Config.comm_incoming.http_average - nevents; + incoming_tcp_interval += Config.comm_incoming.tcp_average - nevents; - if (incoming_http_interval < 0) - incoming_http_interval = 0; + if (incoming_tcp_interval < 0) + incoming_tcp_interval = 0; - if (incoming_http_interval > MAX_INCOMING_INTERVAL) - incoming_http_interval = MAX_INCOMING_INTERVAL; + if (incoming_tcp_interval > MAX_INCOMING_INTERVAL) + incoming_tcp_interval = MAX_INCOMING_INTERVAL; - if (nevents > INCOMING_HTTP_MAX) - nevents = INCOMING_HTTP_MAX; + if (nevents > INCOMING_TCP_MAX) + nevents = INCOMING_TCP_MAX; - statCounter.comm_http_incoming.count(nevents); + statCounter.comm_tcp_incoming.count(nevents); } #define DEBUG_FDBITS 0 @@ -352,8 +350,7 @@ int maxfd; int num; int pending; - int callicp = 0, callhttp = 0; - int calldns = 0; + int calldns = 0, callicp = 0, callhttp = 0; int j; #if DEBUG_FDBITS @@ -372,16 +369,16 @@ getCurrentTime(); start = current_dtime; - if (commCheckICPIncoming) - comm_select_icp_incoming(); + if (commCheckUdpIncoming) + comm_select_udp_incoming(); - if (commCheckDNSIncoming) + if (commCheckDnsIncoming) comm_select_dns_incoming(); - if (commCheckHTTPIncoming) - comm_select_http_incoming(); + if (commCheckTcpIncoming) + comm_select_tcp_incoming(); - callicp = calldns = callhttp = 0; + calludp = calldns = calltcp = 0; maxfd = Biggest_FD + 1; @@ -510,8 +507,8 @@ #endif - if (fdIsIcp(fd)) { - callicp = 1; + if (fdIsUdpListener(fd)) { + calludp = 1; continue; } @@ -520,31 +517,29 @@ continue; } - if (fdIsHttp(fd)) { - callhttp = 1; + if (fdIsTcpListener(fd)) { + calltcp = 1; continue; } F = &fd_table[fd]; debugs(5, 6, "comm_select: FD " << fd << " ready for reading"); - if (NULL == (hdl = F->read_handler)) - (void) 0; - else { + if ((hdl = F->read_handler)) { F->read_handler = NULL; F->flags.read_pending = 0; commUpdateReadBits(fd, NULL); hdl(fd, F->read_data); statCounter.select_fds++; - if (commCheckICPIncoming) - comm_select_icp_incoming(); + if (commCheckUdpIncoming) + comm_select_udp_incoming(); - if (commCheckDNSIncoming) + if (commCheckDnsIncoming) comm_select_dns_incoming(); - if (commCheckHTTPIncoming) - comm_select_http_incoming(); + if (commCheckTcpIncoming) + comm_select_tcp_incoming(); } } @@ -596,8 +591,8 @@ #endif - if (fdIsIcp(fd)) { - callicp = 1; + if (fdIsUdpListener(fd)) { + calludp = 1; continue; } @@ -606,8 +601,8 @@ continue; } - if (fdIsHttp(fd)) { - callhttp = 1; + if (fdIsTcpListener(fd)) { + calltcp = 1; continue; } @@ -620,25 +615,25 @@ hdl(fd, F->write_data); statCounter.select_fds++; - if (commCheckICPIncoming) - comm_select_icp_incoming(); + if (commCheckUdpIncoming) + comm_select_udp_incoming(); - if (commCheckDNSIncoming) + if (commCheckDnsIncoming) comm_select_dns_incoming(); - if (commCheckHTTPIncoming) - comm_select_http_incoming(); + if (commCheckTcpIncoming) + comm_select_tcp_incoming(); } } - if (callicp) - comm_select_icp_incoming(); + if (calludp) + comm_select_udp_incoming(); if (calldns) comm_select_dns_incoming(); - if (callhttp) - comm_select_http_incoming(); + if (calltcp) + comm_select_tcp_incoming(); getCurrentTime(); @@ -673,10 +668,10 @@ if (nevents < 0) return; - incoming_dns_interval += Config.comm_incoming.dns_average - nevents; + incoming_dns_interval += Config.comm_incoming.dns.average - nevents; - if (incoming_dns_interval < Config.comm_incoming.dns_min_poll) - incoming_dns_interval = Config.comm_incoming.dns_min_poll; + if (incoming_dns_interval < Config.comm_incoming.dns.min_poll) + incoming_dns_interval = Config.comm_incoming.dns.min_poll; if (incoming_dns_interval > MAX_INCOMING_INTERVAL) incoming_dns_interval = MAX_INCOMING_INTERVAL; @@ -776,20 +771,20 @@ static void commIncomingStats(StoreEntry * sentry) { - storeAppendPrintf(sentry, "Current incoming_icp_interval: %d\n", - incoming_icp_interval >> INCOMING_FACTOR); + storeAppendPrintf(sentry, "Current incoming_udp_interval: %d\n", + incoming_udp_interval >> INCOMING_FACTOR); storeAppendPrintf(sentry, "Current incoming_dns_interval: %d\n", incoming_dns_interval >> INCOMING_FACTOR); - storeAppendPrintf(sentry, "Current incoming_http_interval: %d\n", - incoming_http_interval >> INCOMING_FACTOR); + storeAppendPrintf(sentry, "Current incoming_tcp_interval: %d\n", + incoming_tcp_interval >> INCOMING_FACTOR); storeAppendPrintf(sentry, "\n"); storeAppendPrintf(sentry, "Histogram of events per incoming socket type\n"); - storeAppendPrintf(sentry, "ICP Messages handled per comm_select_icp_incoming() call:\n"); - statCounter.comm_icp_incoming.dump(sentry, statHistIntDumper); + storeAppendPrintf(sentry, "ICP Messages handled per comm_select_udp_incoming() call:\n"); + statCounter.comm_udp_incoming.dump(sentry, statHistIntDumper); storeAppendPrintf(sentry, "DNS Messages handled per comm_select_dns_incoming() call:\n"); statCounter.comm_dns_incoming.dump(sentry, statHistIntDumper); - storeAppendPrintf(sentry, "HTTP Messages handled per comm_select_http_incoming() call:\n"); - statCounter.comm_http_incoming.dump(sentry, statHistIntDumper); + storeAppendPrintf(sentry, "HTTP Messages handled per comm_select_tcp_incoming() call:\n"); + statCounter.comm_tcp_incoming.dump(sentry, statHistIntDumper); } void diff -u -r -N squid-3.2.0.17/src/CpuAffinitySet.cc squid-3.2.0.18/src/CpuAffinitySet.cc --- squid-3.2.0.17/src/CpuAffinitySet.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/CpuAffinitySet.cc 2012-06-29 13:38:29.000000000 +1200 @@ -39,7 +39,7 @@ } else { cpu_set_t cpuSet; memcpy(&cpuSet, &theCpuSet, sizeof(cpuSet)); - CPU_AND(&cpuSet, &cpuSet, &theOrigCpuSet); + (void) CPU_AND(&cpuSet, &cpuSet, &theOrigCpuSet); if (CPU_COUNT(&cpuSet) <= 0) { debugs(54, DBG_IMPORTANT, "ERROR: invalid CPU affinity for process " "PID " << getpid() << ", may be caused by an invalid core in " diff -u -r -N squid-3.2.0.17/src/defines.h squid-3.2.0.18/src/defines.h --- squid-3.2.0.17/src/defines.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/defines.h 2012-06-29 13:38:29.000000000 +1200 @@ -56,8 +56,6 @@ #define ACL_ALLWEEK 0x7F #define ACL_WEEKDAYS 0x3E -#define MAXHTTPPORTS 128 - /* Select types. */ #define COMM_SELECT_READ (0x1) #define COMM_SELECT_WRITE (0x2) @@ -209,33 +207,6 @@ #define countof(arr) (sizeof(arr)/sizeof(*arr)) /* - * Max number of ICP messages to receive per call to icpHandleUdp - */ -#if _SQUID_MSWIN_ -#define INCOMING_ICP_MAX 1 -#else -#define INCOMING_ICP_MAX 15 -#endif -/* - * Max number of DNS messages to receive per call to DNS read handler - */ -#if _SQUID_MSWIN_ -#define INCOMING_DNS_MAX 1 -#else -#define INCOMING_DNS_MAX 15 -#endif -/* - * Max number of HTTP connections to accept per call to httpAccept - * and PER HTTP PORT - */ -#if _SQUID_MSWIN_ -#define INCOMING_HTTP_MAX 1 -#else -#define INCOMING_HTTP_MAX 10 -#endif -#define INCOMING_TOTAL_MAX (INCOMING_ICP_MAX+INCOMING_HTTP_MAX) - -/* * This many TCP connections must FAIL before we mark the * peer as DEAD */ diff -u -r -N squid-3.2.0.17/src/DelaySpec.cc squid-3.2.0.18/src/DelaySpec.cc --- squid-3.2.0.17/src/DelaySpec.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/DelaySpec.cc 2012-06-29 13:38:29.000000000 +1200 @@ -57,14 +57,14 @@ } storeAppendPrintf(sentry, "\t%s:\n", label); - storeAppendPrintf(sentry, "\t\tMax: %"PRId64"\n", max_bytes); + storeAppendPrintf(sentry, "\t\tMax: %" PRId64 "\n", max_bytes); storeAppendPrintf(sentry, "\t\tRestore: %d\n", restore_bps); } void DelaySpec::dump (StoreEntry *entry) const { - storeAppendPrintf(entry, " %d/%"PRId64"", restore_bps, max_bytes); + storeAppendPrintf(entry, " %d/%" PRId64 "", restore_bps, max_bytes); } void diff -u -r -N squid-3.2.0.17/src/DiskIO/DiskDaemon/diskd.cc squid-3.2.0.18/src/DiskIO/DiskDaemon/diskd.cc --- squid-3.2.0.17/src/DiskIO/DiskDaemon/diskd.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/DiskIO/DiskDaemon/diskd.cc 2012-06-29 13:38:29.000000000 +1200 @@ -156,12 +156,12 @@ if (r->offset > -1 && r->offset != fs->offset) { DEBUG(2) { - fprintf(stderr, "seeking to %"PRId64"\n", (int64_t)r->offset); + fprintf(stderr, "seeking to %" PRId64 "\n", (int64_t)r->offset); } if (lseek(fs->fd, r->offset, SEEK_SET) < 0) { DEBUG(1) { - fprintf(stderr, "%d FD %d, offset %"PRId64": ", (int) mypid, fs->fd, (int64_t)r->offset); + fprintf(stderr, "%d FD %d, offset %" PRId64 ": ", (int) mypid, fs->fd, (int64_t)r->offset); perror("lseek"); } } @@ -169,7 +169,7 @@ x = read(fs->fd, buf, readlen); DEBUG(2) { - fprintf(stderr, "%d READ %d,%d,%"PRId64" ret %d\n", (int) mypid, + fprintf(stderr, "%d READ %d,%d,%" PRId64 " ret %d\n", (int) mypid, fs->fd, readlen, (int64_t)r->offset, x); } @@ -207,14 +207,14 @@ if (r->offset > -1 && r->offset != fs->offset) { if (lseek(fs->fd, r->offset, SEEK_SET) < 0) { DEBUG(1) { - fprintf(stderr, "%d FD %d, offset %"PRId64": ", (int) mypid, fs->fd, (int64_t)r->offset); + fprintf(stderr, "%d FD %d, offset %" PRId64 ": ", (int) mypid, fs->fd, (int64_t)r->offset); perror("lseek"); } } } DEBUG(2) { - fprintf(stderr, "%d WRITE %d,%d,%"PRId64"\n", (int) mypid, + fprintf(stderr, "%d WRITE %d,%d,%" PRId64 "\n", (int) mypid, fs->fd, wrtlen, (int64_t)r->offset); } x = write(fs->fd, buf, wrtlen); diff -u -r -N squid-3.2.0.17/src/DiskIO/DiskThreads/CommIO.cc squid-3.2.0.18/src/DiskIO/DiskThreads/CommIO.cc --- squid-3.2.0.17/src/DiskIO/DiskThreads/CommIO.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/DiskIO/DiskThreads/CommIO.cc 2012-06-29 13:38:29.000000000 +1200 @@ -33,6 +33,7 @@ */ #include "squid.h" +#include "squid-old.h" #include "comm/Loops.h" #include "DiskIO/DiskThreads/CommIO.h" diff -u -r -N squid-3.2.0.17/src/dnsserver.cc squid-3.2.0.18/src/dnsserver.cc --- squid-3.2.0.17/src/dnsserver.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/dnsserver.cc 2012-06-29 13:38:29.000000000 +1200 @@ -194,8 +194,10 @@ const bool isDomain = (getaddrinfo(buf,NULL,&hints,&AI) != 0); // reset for real lookup - freeaddrinfo(AI); - AI = NULL; + if (AI != NULL) { + freeaddrinfo(AI); + AI = NULL; + } // resolve the address/name memset(&hints, '\0', sizeof(struct addrinfo)); @@ -331,7 +333,8 @@ printf("$fail A system error occured looking up Domain/IP '%s': %s.\n", buf, gai_strerror(res)); } - freeaddrinfo(AI); + if (AI != NULL) + freeaddrinfo(AI); } /** @@ -432,7 +435,8 @@ fprintf(stderr, "IPv6 nameservers not supported on this resolver\n"); #endif } - freeaddrinfo(AI); + if (AI != NULL) + freeaddrinfo(AI); #else /* !HAVE_RES_INIT || !defined(_SQUID_RES_NSADDR_LIST) */ diff -u -r -N squid-3.2.0.17/src/enums.h squid-3.2.0.18/src/enums.h --- squid-3.2.0.17/src/enums.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/enums.h 2012-06-29 13:38:29.000000000 +1200 @@ -52,9 +52,7 @@ LOG_TCP_DENIED, LOG_TCP_DENIED_REPLY, LOG_TCP_OFFLINE_HIT, -#if LOG_TCP_REDIRECTS LOG_TCP_REDIRECT, -#endif LOG_UDP_HIT, LOG_UDP_MISS, LOG_UDP_DENIED, diff -u -r -N squid-3.2.0.17/src/errorpage.cc squid-3.2.0.18/src/errorpage.cc --- squid-3.2.0.17/src/errorpage.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/errorpage.cc 2012-06-29 13:38:29.000000000 +1200 @@ -974,6 +974,7 @@ case 'R': if (building_deny_info_url) { p = (request->urlpath.size() != 0 ? request->urlpath.termedBuf() : "/"); + no_urlescape = 1; break; } if (NULL != request) { @@ -991,7 +992,7 @@ AnyP::ProtocolType_str[request->http_ver.protocol], request->http_ver.major, request->http_ver.minor); packerToMemInit(&pck, &mb); - request->header.packInto(&pck); + request->header.packInto(&pck, true); //hide authorization data packerClean(&pck); } else if (request_hdrs) { p = request_hdrs; diff -u -r -N squid-3.2.0.17/src/esi/Makefile.in squid-3.2.0.18/src/esi/Makefile.in --- squid-3.2.0.17/src/esi/Makefile.in 2012-04-13 01:46:07.000000000 +1200 +++ squid-3.2.0.18/src/esi/Makefile.in 2012-06-29 13:39:18.000000000 +1200 @@ -157,6 +157,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/eui/Makefile.in squid-3.2.0.18/src/eui/Makefile.in --- squid-3.2.0.17/src/eui/Makefile.in 2012-04-13 01:46:07.000000000 +1200 +++ squid-3.2.0.18/src/eui/Makefile.in 2012-06-29 13:39:18.000000000 +1200 @@ -55,7 +55,8 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) -libeui_la_DEPENDENCIES = +am__DEPENDENCIES_1 = +libeui_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libeui_la_OBJECTS = Config.lo Eui48.lo Eui64.lo libeui_la_OBJECTS = $(am_libeui_la_OBJECTS) DEFAULT_INCLUDES = @@ -137,6 +138,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/fde.cc squid-3.2.0.18/src/fde.cc --- squid-3.2.0.17/src/fde.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/fde.cc 2012-06-29 13:38:29.000000000 +1200 @@ -56,11 +56,11 @@ #if _SQUID_MSWIN_ - storeAppendPrintf(&dumpEntry, "%4d 0x%-8lX %-6.6s %4d %7"PRId64"%c %7"PRId64"%c %-21s %s\n", + storeAppendPrintf(&dumpEntry, "%4d 0x%-8lX %-6.6s %4d %7" PRId64 "%c %7" PRId64 "%c %-21s %s\n", fdNumber, win32.handle, #else - storeAppendPrintf(&dumpEntry, "%4d %-6.6s %4d %7"PRId64"%c %7"PRId64"%c %-21s %s\n", + storeAppendPrintf(&dumpEntry, "%4d %-6.6s %4d %7" PRId64 "%c %7" PRId64 "%c %-21s %s\n", fdNumber, #endif fdTypeStr[type], diff -u -r -N squid-3.2.0.17/src/format/Makefile.in squid-3.2.0.18/src/format/Makefile.in --- squid-3.2.0.17/src/format/Makefile.in 2012-04-13 01:46:08.000000000 +1200 +++ squid-3.2.0.18/src/format/Makefile.in 2012-06-29 13:39:18.000000000 +1200 @@ -137,6 +137,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/format/Token.cc squid-3.2.0.18/src/format/Token.cc --- squid-3.2.0.17/src/format/Token.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/format/Token.cc 2012-06-29 13:38:29.000000000 +1200 @@ -20,9 +20,7 @@ "TCP_DENIED", "TCP_DENIED_REPLY", "TCP_OFFLINE_HIT", -#if LOG_TCP_REDIRECTS "TCP_REDIRECT", -#endif "UDP_HIT", "UDP_MISS", "UDP_DENIED", diff -u -r -N squid-3.2.0.17/src/forward.cc squid-3.2.0.18/src/forward.cc --- squid-3.2.0.17/src/forward.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/forward.cc 2012-06-29 13:38:29.000000000 +1200 @@ -759,10 +759,12 @@ peerConnectSucceded(serverConnection()->getPeer()); #if USE_SSL - if ((serverConnection()->getPeer() && serverConnection()->getPeer()->use_ssl) || - (!serverConnection()->getPeer() && request->protocol == AnyP::PROTO_HTTPS)) { - initiateSSL(); - return; + if (!request->flags.pinned) { + if ((serverConnection()->getPeer() && serverConnection()->getPeer()->use_ssl) || + (!serverConnection()->getPeer() && request->protocol == AnyP::PROTO_HTTPS)) { + initiateSSL(); + return; + } } #endif @@ -1277,16 +1279,6 @@ // TODO use the connection details in ACL. // needs a bit of rework in ACLFilledChecklist to use Comm::Connection instead of ConnStateData - if (request) { -#if FOLLOW_X_FORWARDED_FOR - if (Config.onoff.acl_uses_indirect_client) - ch.src_addr = request->indirect_client_addr; - else -#endif - ch.src_addr = request->client_addr; - ch.my_addr = request->my_addr; - } - acl_address *l; for (l = Config.accessList.outgoing_address; l; l = l->next) { diff -u -r -N squid-3.2.0.17/src/fs/coss/store_dir_coss.cc squid-3.2.0.18/src/fs/coss/store_dir_coss.cc --- squid-3.2.0.17/src/fs/coss/store_dir_coss.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/fs/coss/store_dir_coss.cc 2012-06-29 13:38:29.000000000 +1200 @@ -973,7 +973,7 @@ CossSwapDir::statfs(StoreEntry & sentry) const { storeAppendPrintf(&sentry, "\n"); - storeAppendPrintf(&sentry, "Maximum Size: %"PRIu64" KB\n", maxSize() >> 10); + storeAppendPrintf(&sentry, "Maximum Size: %" PRIu64 " KB\n", maxSize() >> 10); storeAppendPrintf(&sentry, "Current Size: %.2f KB\n", currentSize() / 1024.0); storeAppendPrintf(&sentry, "Percent Used: %0.2f%%\n", Math::doublePercent(currentSize(), maxSize()) ); @@ -1066,7 +1066,7 @@ void CossSwapDir::dump(StoreEntry &entry)const { - storeAppendPrintf(&entry, " %"PRIu64, maxSize() >> 20); + storeAppendPrintf(&entry, " %" PRIu64, maxSize() >> 20); dumpOptions(&entry); } diff -u -r -N squid-3.2.0.17/src/fs/Makefile.in squid-3.2.0.18/src/fs/Makefile.in --- squid-3.2.0.17/src/fs/Makefile.in 2012-04-13 01:46:09.000000000 +1200 +++ squid-3.2.0.18/src/fs/Makefile.in 2012-06-29 13:39:19.000000000 +1200 @@ -159,6 +159,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/fs/rock/RockSwapDir.cc squid-3.2.0.18/src/fs/rock/RockSwapDir.cc --- squid-3.2.0.17/src/fs/rock/RockSwapDir.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/fs/rock/RockSwapDir.cc 2012-06-29 13:38:29.000000000 +1200 @@ -351,7 +351,7 @@ Rock::SwapDir::dumpTimeOption(StoreEntry * e) const { if (fileConfig.ioTimeout) - storeAppendPrintf(e, " swap-timeout=%"PRId64, + storeAppendPrintf(e, " swap-timeout=%" PRId64, static_cast(fileConfig.ioTimeout)); } @@ -786,7 +786,7 @@ Rock::SwapDir::statfs(StoreEntry &e) const { storeAppendPrintf(&e, "\n"); - storeAppendPrintf(&e, "Maximum Size: %"PRIu64" KB\n", maxSize() >> 10); + storeAppendPrintf(&e, "Maximum Size: %" PRIu64 " KB\n", maxSize() >> 10); storeAppendPrintf(&e, "Current Size: %.2f KB %.2f%%\n", currentSize() / 1024.0, Math::doublePercent(currentSize(), maxSize())); diff -u -r -N squid-3.2.0.17/src/fs/ufs/store_dir_ufs.cc squid-3.2.0.18/src/fs/ufs/store_dir_ufs.cc --- squid-3.2.0.17/src/fs/ufs/store_dir_ufs.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/fs/ufs/store_dir_ufs.cc 2012-06-29 13:38:29.000000000 +1200 @@ -318,7 +318,7 @@ int x; storeAppendPrintf(&sentry, "First level subdirectories: %d\n", l1); storeAppendPrintf(&sentry, "Second level subdirectories: %d\n", l2); - storeAppendPrintf(&sentry, "Maximum Size: %"PRIu64" KB\n", maxSize() >> 10); + storeAppendPrintf(&sentry, "Maximum Size: %" PRIu64 " KB\n", maxSize() >> 10); storeAppendPrintf(&sentry, "Current Size: %.2f KB\n", currentSize() / 1024.0); storeAppendPrintf(&sentry, "Percent Used: %0.2f%%\n", Math::doublePercent(currentSize(), maxSize())); @@ -1347,7 +1347,7 @@ void UFSSwapDir::dump(StoreEntry & entry) const { - storeAppendPrintf(&entry, " %"PRIu64" %d %d", maxSize() >> 20, l1, l2); + storeAppendPrintf(&entry, " %" PRIu64 " %d %d", maxSize() >> 20, l1, l2); dumpOptions(&entry); } diff -u -r -N squid-3.2.0.17/src/ftp.cc squid-3.2.0.18/src/ftp.cc --- squid-3.2.0.17/src/ftp.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/ftp.cc 2012-06-29 13:38:29.000000000 +1200 @@ -1060,7 +1060,7 @@ snprintf(icon, 2048, "\"%-6s\"", mimeGetIconURL(parts->name), "[FILE]"); - snprintf(size, 2048, " %6"PRId64"k", parts->size); + snprintf(size, 2048, " %6" PRId64 "k", parts->size); break; } @@ -3096,7 +3096,7 @@ debugs(9, 3, HERE); - snprintf(cbuf, CTRL_BUFLEN, "REST %"PRId64"\r\n", ftpState->restart_offset); + snprintf(cbuf, CTRL_BUFLEN, "REST %" PRId64 "\r\n", ftpState->restart_offset); ftpState->writeCommand(cbuf); ftpState->state = SENT_REST; } diff -u -r -N squid-3.2.0.17/src/globals.h squid-3.2.0.18/src/globals.h --- squid-3.2.0.17/src/globals.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/globals.h 2012-06-29 13:38:29.000000000 +1200 @@ -38,7 +38,7 @@ #include "rfc2181.h" -/* for ERROR_BUF_SZ, BUFSIZ, MAXHTTPPORTS */ +/* for ERROR_BUF_SZ, BUFSIZ */ #include "defines.h" /* for iostats */ @@ -78,9 +78,7 @@ extern int Biggest_FD; /* -1 */ extern int Number_FD; /* 0 */ extern int Opening_FD; /* 0 */ - extern int HttpSockets[MAXHTTPPORTS]; extern int NDnsServersAlloc; /* 0 */ - extern int NHttpSockets; /* 0 */ extern int RESERVED_FD; extern int Squid_MaxFD; /* SQUID_MAXFD */ extern int config_lineno; /* 0 */ diff -u -r -N squid-3.2.0.17/src/htcp.cc squid-3.2.0.18/src/htcp.cc --- squid-3.2.0.17/src/htcp.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/htcp.cc 2012-06-29 13:38:29.000000000 +1200 @@ -38,6 +38,7 @@ #include "acl/FilledChecklist.h" #include "acl/Acl.h" #include "comm.h" +#include "comm/Connection.h" #include "comm/Loops.h" #include "comm/UdpOpenDialer.h" #include "htcp.h" @@ -1469,7 +1470,7 @@ */ void -htcpInit(void) +htcpOpenPorts(void) { if (Config.Port.htcp <= 0) { debugs(31, DBG_IMPORTANT, "HTCP Disabled."); @@ -1703,7 +1704,7 @@ } void -htcpSocketClose(void) +htcpClosePorts(void) { htcpSocketShutdown(); diff -u -r -N squid-3.2.0.17/src/htcp.h squid-3.2.0.18/src/htcp.h --- squid-3.2.0.17/src/htcp.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/htcp.h 2012-06-29 13:38:29.000000000 +1200 @@ -62,7 +62,7 @@ SQUIDCEXTERN void neighborsHtcpReply(const cache_key *, htcpReplyData *, const Ip::Address &); /// \ingroup ServerProtocolHTCP -SQUIDCEXTERN void htcpInit(void); +SQUIDCEXTERN void htcpOpenPorts(void); /** * \ingroup ServerProtocolHTCP @@ -86,7 +86,7 @@ SQUIDCEXTERN void htcpSocketShutdown(void); /// \ingroup ServerProtocolHTCP -SQUIDCEXTERN void htcpSocketClose(void); +SQUIDCEXTERN void htcpClosePorts(void); #endif /* USE_HTCP */ diff -u -r -N squid-3.2.0.17/src/http.cc squid-3.2.0.18/src/http.cc --- squid-3.2.0.17/src/http.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/http.cc 2012-06-29 13:38:29.000000000 +1200 @@ -412,6 +412,7 @@ case HTTP_MULTIPLE_CHOICES: case HTTP_MOVED_PERMANENTLY: + case HTTP_PERMANENT_REDIRECT: case HTTP_GONE: /* diff -u -r -N squid-3.2.0.17/src/HttpHdrContRange.cc squid-3.2.0.18/src/HttpHdrContRange.cc --- squid-3.2.0.17/src/HttpHdrContRange.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/HttpHdrContRange.cc 2012-06-29 13:38:29.000000000 +1200 @@ -129,7 +129,7 @@ if (!known_spec(spec->offset) || !known_spec(spec->length)) packerPrintf(p, "*"); else - packerPrintf(p, "bytes %"PRId64"-%"PRId64, + packerPrintf(p, "bytes %" PRId64 "-%" PRId64, spec->offset, spec->offset + spec->length - 1); } @@ -233,7 +233,7 @@ if (!known_spec(range->elength)) packerPrintf(p, "/*"); else - packerPrintf(p, "/%"PRId64, range->elength); + packerPrintf(p, "/%" PRId64, range->elength); } void diff -u -r -N squid-3.2.0.17/src/HttpHdrRange.cc squid-3.2.0.18/src/HttpHdrRange.cc --- squid-3.2.0.17/src/HttpHdrRange.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/HttpHdrRange.cc 2012-06-29 13:38:29.000000000 +1200 @@ -132,11 +132,11 @@ HttpHdrRangeSpec::packInto(Packer * packer) const { if (!known_spec(offset)) /* suffix */ - packerPrintf(packer, "-%"PRId64, length); + packerPrintf(packer, "-%" PRId64, length); else if (!known_spec(length)) /* trailer */ - packerPrintf(packer, "%"PRId64"-", offset); + packerPrintf(packer, "%" PRId64 "-", offset); else /* range */ - packerPrintf(packer, "%"PRId64"-%"PRId64, + packerPrintf(packer, "%" PRId64 "-%" PRId64, offset, offset + length - 1); } diff -u -r -N squid-3.2.0.17/src/HttpHeader.cc squid-3.2.0.18/src/HttpHeader.cc --- squid-3.2.0.17/src/HttpHeader.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/HttpHeader.cc 2012-06-29 13:38:29.000000000 +1200 @@ -698,16 +698,29 @@ /* packs all the entries using supplied packer */ void -HttpHeader::packInto(Packer * p) const +HttpHeader::packInto(Packer * p, bool mask_sensitive_info) const { HttpHeaderPos pos = HttpHeaderInitPos; const HttpHeaderEntry *e; assert(p); debugs(55, 7, "packing hdr: (" << this << ")"); /* pack all entries one by one */ - while ((e = getEntry(&pos))) - e->packInto(p); - + while ((e = getEntry(&pos))) { + if (!mask_sensitive_info) { + e->packInto(p); + continue; + } + switch (e->id) { + case HDR_AUTHORIZATION: + case HDR_PROXY_AUTHORIZATION: + packerAppend(p, e->name.rawBuf(), e->name.size()); + packerAppend(p, ": ** NOT DISPLAYED **\r\n", 23); + break; + default: + e->packInto(p); + break; + } + } /* Pack in the "special" entries */ /* Cache-Control */ @@ -1420,7 +1433,7 @@ return NULL; /* skip white space */ - field += xcountws(field); + for (; field && xisspace(*field); field++); if (!*field) /* no authorization cookie */ return NULL; diff -u -r -N squid-3.2.0.17/src/HttpHeader.h squid-3.2.0.18/src/HttpHeader.h --- squid-3.2.0.17/src/HttpHeader.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/HttpHeader.h 2012-06-29 13:38:29.000000000 +1200 @@ -234,7 +234,7 @@ void compact(); int reset(); int parse(const char *header_start, const char *header_end); - void packInto(Packer * p) const; + void packInto(Packer * p, bool mask_sensitive_info=false) const; HttpHeaderEntry *getEntry(HttpHeaderPos * pos) const; HttpHeaderEntry *findEntry(http_hdr_type id) const; int delByName(const char *name); diff -u -r -N squid-3.2.0.17/src/HttpReply.cc squid-3.2.0.18/src/HttpReply.cc --- squid-3.2.0.17/src/HttpReply.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/HttpReply.cc 2012-06-29 13:38:29.000000000 +1200 @@ -595,13 +595,6 @@ return; ACLFilledChecklist ch(NULL, &request, NULL); -#if FOLLOW_X_FORWARDED_FOR - if (Config.onoff.acl_uses_indirect_client) - ch.src_addr = request.indirect_client_addr; - else -#endif - ch.src_addr = request.client_addr; - ch.my_addr = request.my_addr; ch.reply = HTTPMSGLOCK(this); // XXX: this lock makes method non-const for (acl_size_t *l = Config.ReplyBodySize; l; l = l -> next) { /* if there is no ACL list or if the ACLs listed match use this size value */ diff -u -r -N squid-3.2.0.17/src/HttpStatusCode.h squid-3.2.0.18/src/HttpStatusCode.h --- squid-3.2.0.17/src/HttpStatusCode.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/HttpStatusCode.h 2012-06-29 13:38:29.000000000 +1200 @@ -24,6 +24,7 @@ HTTP_NOT_MODIFIED = 304, HTTP_USE_PROXY = 305, HTTP_TEMPORARY_REDIRECT = 307, + HTTP_PERMANENT_REDIRECT = 308, HTTP_BAD_REQUEST = 400, HTTP_UNAUTHORIZED = 401, HTTP_PAYMENT_REQUIRED = 402, @@ -45,6 +46,9 @@ HTTP_UNPROCESSABLE_ENTITY = 422, /**< RFC2518 section 10.3 */ HTTP_LOCKED = 423, /**< RFC2518 section 10.4 */ HTTP_FAILED_DEPENDENCY = 424, /**< RFC2518 section 10.5 */ + HTTP_PRECONDITION_REQUIRED = 428, /**< RFC6585 */ + HTTP_TOO_MANY_REQUESTS = 429, /**< RFC6585 */ + HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431, /**< RFC6585 */ HTTP_INTERNAL_SERVER_ERROR = 500, HTTP_NOT_IMPLEMENTED = 501, HTTP_BAD_GATEWAY = 502, @@ -52,6 +56,7 @@ HTTP_GATEWAY_TIMEOUT = 504, HTTP_HTTP_VERSION_NOT_SUPPORTED = 505, HTTP_INSUFFICIENT_STORAGE = 507, /**< RFC2518 section 10.6 */ + HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511, /**< RFC6585 */ // The 6xx codes below are for internal use only: Bad requests result // in HTTP_BAD_REQUEST; bad responses in HTTP_GATEWAY_TIMEOUT. diff -u -r -N squid-3.2.0.17/src/HttpStatusLine.cc squid-3.2.0.18/src/HttpStatusLine.cc --- squid-3.2.0.17/src/HttpStatusLine.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/HttpStatusLine.cc 2012-06-29 13:38:29.000000000 +1200 @@ -220,6 +220,10 @@ p = "Temporary Redirect"; break; + case HTTP_PERMANENT_REDIRECT: + p = "Permanent Redirect"; + break; + case HTTP_BAD_REQUEST: p = "Bad Request"; break; @@ -316,6 +320,23 @@ p = "HTTP Version not supported"; break; + // RFC 6585 + case HTTP_PRECONDITION_REQUIRED: // 428 + p = "Precondition Required"; + break; + + case HTTP_TOO_MANY_REQUESTS: // 429 + p = "Too Many Requests"; + break; + + case HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE: // 431 + p = "Request Header Fields Too Large"; + break; + + case HTTP_NETWORK_AUTHENTICATION_REQUIRED: // 511 + p = "Network Authentication Required"; + break; + default: p = "Unknown"; debugs(57, 3, "Unknown HTTP status code: " << status); diff -u -r -N squid-3.2.0.17/src/icmp/Makefile.in squid-3.2.0.18/src/icmp/Makefile.in --- squid-3.2.0.17/src/icmp/Makefile.in 2012-04-13 01:46:10.000000000 +1200 +++ squid-3.2.0.18/src/icmp/Makefile.in 2012-06-29 13:39:19.000000000 +1200 @@ -174,6 +174,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/ICP.h squid-3.2.0.18/src/ICP.h --- squid-3.2.0.17/src/ICP.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/ICP.h 2012-06-29 13:38:29.000000000 +1200 @@ -109,7 +109,10 @@ /// \ingroup ServerProtocolICPAPI struct icpUdpData { + + /// IP address for the remote end. Because we reply to packets from unknown non-peers. Ip::Address address; + void *msg; size_t len; icpUdpData *next; @@ -128,10 +131,10 @@ extern Ip::Address theIcpPublicHostID; /// \ingroup ServerProtocolICPAPI -HttpRequest* icpGetRequest(char *url, int reqnum, int fd, Ip::Address &from); +extern HttpRequest* icpGetRequest(char *url, int reqnum, int fd, Ip::Address &from); /// \ingroup ServerProtocolICPAPI -bool icpAccessAllowed(Ip::Address &from, HttpRequest * icp_request); +extern bool icpAccessAllowed(Ip::Address &from, HttpRequest * icp_request); /// \ingroup ServerProtocolICPAPI SQUIDCEXTERN void icpCreateAndSend(icp_opcode, int flags, char const *url, int reqnum, int pad, int fd, const Ip::Address &from); @@ -161,13 +164,13 @@ SQUIDCEXTERN int icpCheckUdpHit(StoreEntry *, HttpRequest * request); /// \ingroup ServerProtocolICPAPI -SQUIDCEXTERN void icpConnectionsOpen(void); +SQUIDCEXTERN void icpOpenPorts(void); /// \ingroup ServerProtocolICPAPI SQUIDCEXTERN void icpConnectionShutdown(void); /// \ingroup ServerProtocolICPAPI -SQUIDCEXTERN void icpConnectionClose(void); +SQUIDCEXTERN void icpClosePorts(void); /// \ingroup ServerProtocolICPAPI SQUIDCEXTERN int icpSetCacheKey(const cache_key * key); diff -u -r -N squid-3.2.0.17/src/icp_v2.cc squid-3.2.0.18/src/icp_v2.cc --- squid-3.2.0.17/src/icp_v2.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/icp_v2.cc 2012-06-29 13:38:29.000000000 +1200 @@ -595,7 +595,7 @@ LOCAL_ARRAY(char, buf, SQUID_UDP_SO_RCVBUF); int len; int icp_version; - int max = INCOMING_ICP_MAX; + int max = INCOMING_UDP_MAX; Comm::SetSelect(sock, COMM_SELECT_READ, icpHandleUdp, NULL, 0); while (max--) { @@ -657,7 +657,7 @@ } void -icpConnectionsOpen(void) +icpOpenPorts(void) { uint16_t port; @@ -765,7 +765,7 @@ } void -icpConnectionClose(void) +icpClosePorts(void) { icpConnectionShutdown(); diff -u -r -N squid-3.2.0.17/src/ident/Makefile.in squid-3.2.0.18/src/ident/Makefile.in --- squid-3.2.0.17/src/ident/Makefile.in 2012-04-13 01:46:11.000000000 +1200 +++ squid-3.2.0.18/src/ident/Makefile.in 2012-06-29 13:39:19.000000000 +1200 @@ -137,6 +137,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/ip/Makefile.in squid-3.2.0.18/src/ip/Makefile.in --- squid-3.2.0.17/src/ip/Makefile.in 2012-04-13 01:46:12.000000000 +1200 +++ squid-3.2.0.18/src/ip/Makefile.in 2012-06-29 13:39:19.000000000 +1200 @@ -153,6 +153,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/ipc/Makefile.in squid-3.2.0.18/src/ipc/Makefile.in --- squid-3.2.0.17/src/ipc/Makefile.in 2012-04-13 01:46:13.000000000 +1200 +++ squid-3.2.0.18/src/ipc/Makefile.in 2012-06-29 13:39:19.000000000 +1200 @@ -142,6 +142,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/ipc/TypedMsgHdr.h squid-3.2.0.18/src/ipc/TypedMsgHdr.h --- squid-3.2.0.17/src/ipc/TypedMsgHdr.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/ipc/TypedMsgHdr.h 2012-06-29 13:38:29.000000000 +1200 @@ -8,6 +8,7 @@ #ifndef SQUID_IPC_TYPED_MSG_HDR_H #define SQUID_IPC_TYPED_MSG_HDR_H +#include "compat/cmsg.h" #if HAVE_SYS_SOCKET_H #include #endif @@ -90,7 +91,8 @@ } data; ///< same as .msg_iov[0].iov_base struct CtrlBuffer { - char raw[CMSG_SPACE(sizeof(int))]; ///< control buffer space for one fd + /// control buffer space for one fd + char raw[SQUID_CMSG_SPACE(sizeof(int))]; } ctrl; ///< same as .msg_control /// data offset for the next get/put*() to start with diff -u -r -N squid-3.2.0.17/src/log/FormatHttpdCombined.cc squid-3.2.0.18/src/log/FormatHttpdCombined.cc --- squid-3.2.0.17/src/log/FormatHttpdCombined.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/log/FormatHttpdCombined.cc 2012-06-29 13:38:29.000000000 +1200 @@ -65,7 +65,7 @@ char clientip[MAX_IPSTRLEN]; al->getLogClientIp(clientip, MAX_IPSTRLEN); - logfilePrintf(logfile, "%s %s %s [%s] \"%s %s %s/%d.%d\" %d %"PRId64" \"%s\" \"%s\" %s%s:%s%s", + logfilePrintf(logfile, "%s %s %s [%s] \"%s %s %s/%d.%d\" %d %" PRId64 " \"%s\" \"%s\" %s%s:%s%s", clientip, user_ident ? user_ident : dash_str, user_auth ? user_auth : dash_str, diff -u -r -N squid-3.2.0.17/src/log/FormatHttpdCommon.cc squid-3.2.0.18/src/log/FormatHttpdCommon.cc --- squid-3.2.0.17/src/log/FormatHttpdCommon.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/log/FormatHttpdCommon.cc 2012-06-29 13:38:29.000000000 +1200 @@ -49,7 +49,7 @@ char clientip[MAX_IPSTRLEN]; al->getLogClientIp(clientip, MAX_IPSTRLEN); - logfilePrintf(logfile, "%s %s %s [%s] \"%s %s %s/%d.%d\" %d %"PRId64" %s%s:%s%s", + logfilePrintf(logfile, "%s %s %s [%s] \"%s %s %s/%d.%d\" %d %" PRId64 " %s%s:%s%s", clientip, user_ident ? user_ident : dash_str, user_auth ? user_auth : dash_str, diff -u -r -N squid-3.2.0.17/src/log/FormatSquidIcap.cc squid-3.2.0.18/src/log/FormatSquidIcap.cc --- squid-3.2.0.17/src/log/FormatSquidIcap.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/log/FormatSquidIcap.cc 2012-06-29 13:38:29.000000000 +1200 @@ -75,7 +75,7 @@ if (user && !*user) safe_free(user); - logfilePrintf(logfile, "%9ld.%03d %6d %s %s/%03d %"PRId64" %s %s %s -/%s -\n", + logfilePrintf(logfile, "%9ld.%03d %6d %s %s/%03d %" PRId64 " %s %s %s -/%s -\n", (long int) current_time.tv_sec, (int) current_time.tv_usec / 1000, al->icap.trTime, diff -u -r -N squid-3.2.0.17/src/log/FormatSquidNative.cc squid-3.2.0.18/src/log/FormatSquidNative.cc --- squid-3.2.0.17/src/log/FormatSquidNative.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/log/FormatSquidNative.cc 2012-06-29 13:38:29.000000000 +1200 @@ -64,7 +64,7 @@ char clientip[MAX_IPSTRLEN]; al->getLogClientIp(clientip, MAX_IPSTRLEN); - logfilePrintf(logfile, "%9ld.%03d %6d %s %s%s/%03d %"PRId64" %s %s %s %s%s/%s %s%s", + logfilePrintf(logfile, "%9ld.%03d %6d %s %s%s/%03d %" PRId64 " %s %s %s %s%s/%s %s%s", (long int) current_time.tv_sec, (int) current_time.tv_usec / 1000, al->cache.msec, diff -u -r -N squid-3.2.0.17/src/log/Makefile.in squid-3.2.0.18/src/log/Makefile.in --- squid-3.2.0.17/src/log/Makefile.in 2012-04-13 01:46:13.000000000 +1200 +++ squid-3.2.0.18/src/log/Makefile.in 2012-06-29 13:39:20.000000000 +1200 @@ -141,6 +141,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/main.cc squid-3.2.0.18/src/main.cc --- squid-3.2.0.17/src/main.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/main.cc 2012-06-29 13:38:29.000000000 +1200 @@ -667,13 +667,12 @@ // start various proxying services if we are responsible for them if (IamWorkerProcess()) { clientOpenListenSockets(); - icpConnectionsOpen(); + icpOpenPorts(); #if USE_HTCP - - htcpInit(); + htcpOpenPorts(); #endif #if SQUID_SNMP - snmpConnectionOpen(); + snmpOpenPorts(); #endif clientdbInit(); @@ -710,13 +709,12 @@ clientHttpConnectionsClose(); icpConnectionShutdown(); #if USE_HTCP - htcpSocketShutdown(); #endif icmpEngine.Close(); #if SQUID_SNMP - snmpConnectionClose(); + snmpClosePorts(); #endif asnFreeMemory(); @@ -731,10 +729,9 @@ // Initiate asynchronous closing sequence serverConnectionsClose(); - icpConnectionClose(); + icpClosePorts(); #if USE_HTCP - - htcpSocketClose(); + htcpClosePorts(); #endif dnsShutdown(); #if USE_SSL_CRTD @@ -1832,13 +1829,12 @@ #endif redirectShutdown(); externalAclShutdown(); - icpConnectionClose(); + icpClosePorts(); #if USE_HTCP - - htcpSocketClose(); + htcpClosePorts(); #endif #if SQUID_SNMP - snmpConnectionClose(); + snmpClosePorts(); #endif #if USE_WCCP @@ -1910,6 +1906,9 @@ } #endif + // clear StoreController + Store::Root(NULL); + fdDumpOpen(); comm_exit(); diff -u -r -N squid-3.2.0.17/src/Makefile.am squid-3.2.0.18/src/Makefile.am --- squid-3.2.0.17/src/Makefile.am 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/Makefile.am 2012-06-29 13:38:29.000000000 +1200 @@ -171,7 +171,9 @@ endif if USE_AIOPS_WIN32 -AIOPS_SOURCE = DiskIO/DiskThreads/aiops_win32.cc +AIOPS_SOURCE = DiskIO/DiskThreads/aiops_win32.cc \ + DiskIO/DiskThreads/CommIO.cc \ + DiskIO/DiskThreads/CommIO.h else AIOPS_SOURCE = DiskIO/DiskThreads/aiops.cc \ DiskIO/DiskThreads/CommIO.cc \ @@ -262,8 +264,6 @@ AsyncEngine.cc \ AsyncEngine.h \ cache_cf.cc \ - ProtoPort.cc \ - ProtoPort.h \ CacheDigest.cc \ cache_manager.cc \ CacheManager.h \ @@ -637,7 +637,9 @@ ## dnsserver is a standalone helper. Do not link to any internal libraries dnsserver_SOURCES = dnsserver.cc -dnsserver_LDADD = $(COMPAT_LIB) +dnsserver_LDADD = \ + $(COMPAT_LIB) \ + $(XTRA_LIBS) recv_announce_SOURCES = recv-announce.cc @@ -650,7 +652,7 @@ ## ACLProxyAuth.cc wants ACLRegexData ## cache_cf.cc wants $(AUTH_LIBS) ## cache_cf.cc wants Swapdir -## cache_cf.cc wants ProtoPort +## cache_cf.cc wants AnyP::PortCfg ## client_side wants client_db ## client_db wants SNMP_SOURCE ## snmp_core wants ACLStringData @@ -1267,8 +1269,6 @@ BodyPipe.cc \ cache_manager.cc \ cache_cf.cc \ - ProtoPort.cc \ - ProtoPort.h \ CacheDigest.cc \ carp.cc \ cbdata.cc \ @@ -1545,7 +1545,6 @@ SquidMath.h \ swap_log_op.cc tests_testDiskIO_LDADD = \ - anyp/libanyp.la \ SquidConfig.o \ CommCalls.o \ DnsLookupDetails.o \ @@ -1557,6 +1556,7 @@ $(AUTH_LIBS) \ libsquid.la \ comm/libcomm.la \ + anyp/libanyp.la \ ip/libip.la \ fs/libfs.la \ ipc/libipc.la \ @@ -1676,8 +1676,6 @@ peer_select.cc \ peer_sourcehash.cc \ peer_userhash.cc \ - ProtoPort.cc \ - ProtoPort.h \ redirect.cc \ refresh.cc \ RemovalPolicy.cc \ @@ -1870,8 +1868,6 @@ peer_select.cc \ peer_sourcehash.cc \ peer_userhash.cc \ - ProtoPort.cc \ - ProtoPort.h \ RemovalPolicy.cc \ redirect.cc \ refresh.cc \ @@ -1975,8 +1971,6 @@ $(ACL_REGISTRATION_SOURCES) \ BodyPipe.cc \ cache_cf.cc \ - ProtoPort.cc \ - ProtoPort.h \ cache_manager.cc \ CacheDigest.cc \ carp.cc \ @@ -2215,8 +2209,6 @@ cache_manager.cc \ cache_cf.cc \ debug.cc \ - ProtoPort.cc \ - ProtoPort.h \ CacheDigest.cc \ carp.cc \ cbdata.cc \ @@ -2692,13 +2684,13 @@ mgr/libmgr.la \ $(REPL_OBJS) \ acl/libacls.la \ - anyp/libanyp.la \ $(DISK_LIBS) \ $(DISK_OS_LIBS) \ acl/libapi.la \ ipc/libipc.la \ $(SSL_LIBS) \ comm/libcomm.la \ + anyp/libanyp.la \ base/libbase.la \ ip/libip.la \ $(top_builddir)/lib/libmisccontainers.la \ @@ -2812,9 +2804,9 @@ SquidMath.h \ $(TESTSOURCES) tests_testRock_LDADD = \ - anyp/libanyp.la \ libsquid.la \ comm/libcomm.la \ + anyp/libanyp.la \ ip/libip.la \ fs/libfs.la \ $(AUTH_LIBS) \ @@ -3195,8 +3187,6 @@ peer_select.cc \ peer_sourcehash.cc \ peer_userhash.cc \ - ProtoPort.cc \ - ProtoPort.h \ redirect.cc \ refresh.cc \ RemovalPolicy.cc \ diff -u -r -N squid-3.2.0.17/src/Makefile.in squid-3.2.0.18/src/Makefile.in --- squid-3.2.0.17/src/Makefile.in 2012-04-13 01:45:58.000000000 +1200 +++ squid-3.2.0.18/src/Makefile.in 2012-06-29 13:39:15.000000000 +1200 @@ -137,7 +137,8 @@ @USE_AIOPS_WIN32_FALSE@am__objects_3 = \ @USE_AIOPS_WIN32_FALSE@ DiskIO/DiskThreads/aiops.$(OBJEXT) \ @USE_AIOPS_WIN32_FALSE@ DiskIO/DiskThreads/CommIO.$(OBJEXT) -@USE_AIOPS_WIN32_TRUE@am__objects_3 = DiskIO/DiskThreads/aiops_win32.$(OBJEXT) +@USE_AIOPS_WIN32_TRUE@am__objects_3 = DiskIO/DiskThreads/aiops_win32.$(OBJEXT) \ +@USE_AIOPS_WIN32_TRUE@ DiskIO/DiskThreads/CommIO.$(OBJEXT) am_libDiskThreads_a_OBJECTS = $(am__objects_3) \ DiskIO/DiskThreads/async_io.$(OBJEXT) \ DiskIO/DiskThreads/DiskThreadsDiskFile.$(OBJEXT) \ @@ -188,7 +189,7 @@ cf_gen_DEPENDENCIES = am_dnsserver_OBJECTS = dnsserver.$(OBJEXT) dnsserver_OBJECTS = $(am_dnsserver_OBJECTS) -dnsserver_DEPENDENCIES = $(am__DEPENDENCIES_2) +dnsserver_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) am_recv_announce_OBJECTS = recv-announce.$(OBJEXT) recv_announce_OBJECTS = $(am_recv_announce_OBJECTS) recv_announce_LDADD = $(LDADD) @@ -200,23 +201,22 @@ $(am__DEPENDENCIES_3) am__squid_SOURCES_DIST = AclRegs.cc AuthReg.cc AccessLogEntry.cc \ AccessLogEntry.h AsyncEngine.cc AsyncEngine.h cache_cf.cc \ - ProtoPort.cc ProtoPort.h CacheDigest.cc cache_manager.cc \ - CacheManager.h carp.cc cbdata.cc cbdata.h \ - ChunkedCodingParser.cc ChunkedCodingParser.h client_db.cc \ - 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 \ - ClientRequestContext.h clientStream.cc clientStream.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 \ - 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 NullDelayId.cc NullDelayId.h \ + CacheDigest.cc cache_manager.cc CacheManager.h carp.cc \ + cbdata.cc cbdata.h ChunkedCodingParser.cc \ + ChunkedCodingParser.h client_db.cc 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 ClientRequestContext.h clientStream.cc \ + clientStream.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 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 NullDelayId.cc NullDelayId.h \ ClientDelayConfig.cc ClientDelayConfig.h disk.cc \ DiskIO/DiskIOModule.cc DiskIO/ReadRequest.cc \ DiskIO/ReadRequest.h DiskIO/WriteRequest.cc \ @@ -298,19 +298,18 @@ am__objects_19 = LoadableModule.$(OBJEXT) LoadableModules.$(OBJEXT) @USE_LOADABLE_MODULES_TRUE@am__objects_20 = $(am__objects_19) am_squid_OBJECTS = $(am__objects_4) AccessLogEntry.$(OBJEXT) \ - AsyncEngine.$(OBJEXT) cache_cf.$(OBJEXT) ProtoPort.$(OBJEXT) \ - CacheDigest.$(OBJEXT) cache_manager.$(OBJEXT) carp.$(OBJEXT) \ - cbdata.$(OBJEXT) ChunkedCodingParser.$(OBJEXT) \ - client_db.$(OBJEXT) client_side.$(OBJEXT) \ - client_side_reply.$(OBJEXT) client_side_request.$(OBJEXT) \ - BodyPipe.$(OBJEXT) clientStream.$(OBJEXT) \ - CompletionDispatcher.$(OBJEXT) ConfigOption.$(OBJEXT) \ - ConfigParser.$(OBJEXT) CpuAffinity.$(OBJEXT) \ - CpuAffinityMap.$(OBJEXT) CpuAffinitySet.$(OBJEXT) \ - debug.$(OBJEXT) $(am__objects_6) disk.$(OBJEXT) \ - $(am__objects_7) dlink.$(OBJEXT) $(am__objects_8) \ - errorpage.$(OBJEXT) ETag.$(OBJEXT) event.$(OBJEXT) \ - EventLoop.$(OBJEXT) external_acl.$(OBJEXT) \ + AsyncEngine.$(OBJEXT) cache_cf.$(OBJEXT) CacheDigest.$(OBJEXT) \ + cache_manager.$(OBJEXT) carp.$(OBJEXT) cbdata.$(OBJEXT) \ + ChunkedCodingParser.$(OBJEXT) client_db.$(OBJEXT) \ + client_side.$(OBJEXT) client_side_reply.$(OBJEXT) \ + client_side_request.$(OBJEXT) BodyPipe.$(OBJEXT) \ + clientStream.$(OBJEXT) CompletionDispatcher.$(OBJEXT) \ + ConfigOption.$(OBJEXT) ConfigParser.$(OBJEXT) \ + CpuAffinity.$(OBJEXT) CpuAffinityMap.$(OBJEXT) \ + CpuAffinitySet.$(OBJEXT) debug.$(OBJEXT) $(am__objects_6) \ + disk.$(OBJEXT) $(am__objects_7) dlink.$(OBJEXT) \ + $(am__objects_8) errorpage.$(OBJEXT) ETag.$(OBJEXT) \ + event.$(OBJEXT) EventLoop.$(OBJEXT) external_acl.$(OBJEXT) \ ExternalACLEntry.$(OBJEXT) FadingCounter.$(OBJEXT) \ fd.$(OBJEXT) fde.$(OBJEXT) filemap.$(OBJEXT) forward.$(OBJEXT) \ fqdncache.$(OBJEXT) ftp.$(OBJEXT) gopher.$(OBJEXT) \ @@ -433,11 +432,10 @@ tests/testCacheManager.cc tests/testCacheManager.h \ tests/testMain.cc tests/stub_main_cc.cc \ tests/stub_ipc_Forwarder.cc tests/stub_store_stats.cc time.cc \ - BodyPipe.cc cache_manager.cc cache_cf.cc ProtoPort.cc \ - ProtoPort.h CacheDigest.cc carp.cc cbdata.cc \ - ChunkedCodingParser.cc client_db.cc client_side.cc \ - client_side_reply.cc client_side_request.cc ClientInfo.h \ - clientStream.cc ConfigOption.cc ConfigParser.cc \ + BodyPipe.cc cache_manager.cc cache_cf.cc CacheDigest.cc \ + carp.cc cbdata.cc ChunkedCodingParser.cc client_db.cc \ + client_side.cc client_side_reply.cc client_side_request.cc \ + ClientInfo.h clientStream.cc ConfigOption.cc ConfigParser.cc \ CpuAffinityMap.cc CpuAffinityMap.h CpuAffinitySet.cc \ CpuAffinitySet.h CommonPool.h CompositePoolNode.h \ delay_pools.cc DelayId.cc DelayId.h DelayIdComposite.h \ @@ -486,20 +484,20 @@ tests/stub_ipc_Forwarder.$(OBJEXT) \ tests/stub_store_stats.$(OBJEXT) time.$(OBJEXT) \ BodyPipe.$(OBJEXT) cache_manager.$(OBJEXT) cache_cf.$(OBJEXT) \ - ProtoPort.$(OBJEXT) CacheDigest.$(OBJEXT) carp.$(OBJEXT) \ - cbdata.$(OBJEXT) ChunkedCodingParser.$(OBJEXT) \ - client_db.$(OBJEXT) client_side.$(OBJEXT) \ - client_side_reply.$(OBJEXT) client_side_request.$(OBJEXT) \ - clientStream.$(OBJEXT) ConfigOption.$(OBJEXT) \ - ConfigParser.$(OBJEXT) CpuAffinityMap.$(OBJEXT) \ - CpuAffinitySet.$(OBJEXT) $(am__objects_6) $(am__objects_7) \ - disk.$(OBJEXT) dlink.$(OBJEXT) $(am__objects_8) \ - errorpage.$(OBJEXT) ETag.$(OBJEXT) event.$(OBJEXT) \ - external_acl.$(OBJEXT) ExternalACLEntry.$(OBJEXT) fd.$(OBJEXT) \ - fde.$(OBJEXT) filemap.$(OBJEXT) forward.$(OBJEXT) \ - fqdncache.$(OBJEXT) ftp.$(OBJEXT) gopher.$(OBJEXT) \ - helper.$(OBJEXT) HelperChildConfig.$(OBJEXT) $(am__objects_9) \ - http.$(OBJEXT) HttpBody.$(OBJEXT) HttpHeader.$(OBJEXT) \ + CacheDigest.$(OBJEXT) carp.$(OBJEXT) cbdata.$(OBJEXT) \ + ChunkedCodingParser.$(OBJEXT) client_db.$(OBJEXT) \ + client_side.$(OBJEXT) client_side_reply.$(OBJEXT) \ + client_side_request.$(OBJEXT) clientStream.$(OBJEXT) \ + ConfigOption.$(OBJEXT) ConfigParser.$(OBJEXT) \ + CpuAffinityMap.$(OBJEXT) CpuAffinitySet.$(OBJEXT) \ + $(am__objects_6) $(am__objects_7) disk.$(OBJEXT) \ + dlink.$(OBJEXT) $(am__objects_8) errorpage.$(OBJEXT) \ + ETag.$(OBJEXT) event.$(OBJEXT) external_acl.$(OBJEXT) \ + ExternalACLEntry.$(OBJEXT) fd.$(OBJEXT) fde.$(OBJEXT) \ + filemap.$(OBJEXT) forward.$(OBJEXT) fqdncache.$(OBJEXT) \ + ftp.$(OBJEXT) gopher.$(OBJEXT) helper.$(OBJEXT) \ + HelperChildConfig.$(OBJEXT) $(am__objects_9) http.$(OBJEXT) \ + HttpBody.$(OBJEXT) HttpHeader.$(OBJEXT) \ HttpHeaderTools.$(OBJEXT) HttpHdrCc.$(OBJEXT) \ HttpHdrContRange.$(OBJEXT) HttpHdrRange.$(OBJEXT) \ HttpHdrSc.$(OBJEXT) HttpHdrScTarget.$(OBJEXT) \ @@ -762,14 +760,14 @@ MemBuf.cc MemObject.cc mime.cc mime_header.cc multicast.cc \ neighbors.cc Packer.cc Parsing.cc pconn.cc peer_digest.cc \ peer_proxy_negotiate_auth.cc peer_select.cc peer_sourcehash.cc \ - peer_userhash.cc ProtoPort.cc ProtoPort.h redirect.cc \ - refresh.cc RemovalPolicy.cc Server.cc snmp_core.h snmp_core.cc \ - snmp_agent.cc SquidMath.cc SquidMath.h stat.cc StatCounters.h \ - StatCounters.cc StatHist.h StatHist.cc stmem.cc store.cc \ - store_client.cc store_digest.cc store_dir.cc store_io.cc \ - store_key_md5.cc store_log.cc store_rebuild.cc store_swapin.cc \ - store_swapmeta.cc store_swapout.cc StoreFileSystem.cc \ - StoreIOState.cc StoreMeta.cc StoreMetaMD5.cc StoreMetaSTD.cc \ + peer_userhash.cc redirect.cc refresh.cc RemovalPolicy.cc \ + Server.cc snmp_core.h snmp_core.cc snmp_agent.cc SquidMath.cc \ + SquidMath.h stat.cc StatCounters.h StatCounters.cc StatHist.h \ + StatHist.cc stmem.cc store.cc store_client.cc store_digest.cc \ + store_dir.cc store_io.cc store_key_md5.cc store_log.cc \ + store_rebuild.cc store_swapin.cc store_swapmeta.cc \ + store_swapout.cc StoreFileSystem.cc StoreIOState.cc \ + StoreMeta.cc StoreMetaMD5.cc StoreMetaSTD.cc \ StoreMetaSTDLFS.cc StoreMetaUnpacker.cc StoreMetaURL.cc \ StoreMetaVary.cc StoreSwapLogData.cc String.cc SwapDir.cc \ tests/CapturingStoreEntry.h tests/testEvent.cc \ @@ -808,22 +806,21 @@ pconn.$(OBJEXT) peer_digest.$(OBJEXT) \ peer_proxy_negotiate_auth.$(OBJEXT) peer_select.$(OBJEXT) \ peer_sourcehash.$(OBJEXT) peer_userhash.$(OBJEXT) \ - ProtoPort.$(OBJEXT) redirect.$(OBJEXT) refresh.$(OBJEXT) \ - RemovalPolicy.$(OBJEXT) Server.$(OBJEXT) $(am__objects_15) \ - SquidMath.$(OBJEXT) stat.$(OBJEXT) StatCounters.$(OBJEXT) \ - StatHist.$(OBJEXT) stmem.$(OBJEXT) store.$(OBJEXT) \ - store_client.$(OBJEXT) store_digest.$(OBJEXT) \ - store_dir.$(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) StoreMeta.$(OBJEXT) \ - StoreMetaMD5.$(OBJEXT) StoreMetaSTD.$(OBJEXT) \ - StoreMetaSTDLFS.$(OBJEXT) StoreMetaUnpacker.$(OBJEXT) \ - StoreMetaURL.$(OBJEXT) StoreMetaVary.$(OBJEXT) \ - StoreSwapLogData.$(OBJEXT) String.$(OBJEXT) SwapDir.$(OBJEXT) \ - tests/testEvent.$(OBJEXT) tests/testMain.$(OBJEXT) \ - tests/stub_main_cc.$(OBJEXT) \ + redirect.$(OBJEXT) refresh.$(OBJEXT) RemovalPolicy.$(OBJEXT) \ + Server.$(OBJEXT) $(am__objects_15) SquidMath.$(OBJEXT) \ + stat.$(OBJEXT) StatCounters.$(OBJEXT) StatHist.$(OBJEXT) \ + stmem.$(OBJEXT) store.$(OBJEXT) store_client.$(OBJEXT) \ + store_digest.$(OBJEXT) store_dir.$(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) \ + StoreMeta.$(OBJEXT) StoreMetaMD5.$(OBJEXT) \ + StoreMetaSTD.$(OBJEXT) StoreMetaSTDLFS.$(OBJEXT) \ + StoreMetaUnpacker.$(OBJEXT) StoreMetaURL.$(OBJEXT) \ + StoreMetaVary.$(OBJEXT) StoreSwapLogData.$(OBJEXT) \ + String.$(OBJEXT) SwapDir.$(OBJEXT) tests/testEvent.$(OBJEXT) \ + tests/testMain.$(OBJEXT) tests/stub_main_cc.$(OBJEXT) \ tests/stub_ipc_Forwarder.$(OBJEXT) \ tests/stub_store_stats.$(OBJEXT) time.$(OBJEXT) \ tools.$(OBJEXT) tunnel.$(OBJEXT) MemStore.$(OBJEXT) \ @@ -870,14 +867,14 @@ mem.cc mem_node.cc mime.cc mime_header.cc multicast.cc \ neighbors.cc Packer.cc Parsing.cc pconn.cc peer_digest.cc \ peer_proxy_negotiate_auth.cc peer_select.cc peer_sourcehash.cc \ - peer_userhash.cc ProtoPort.cc ProtoPort.h RemovalPolicy.cc \ - redirect.cc refresh.cc Server.cc snmp_core.h snmp_core.cc \ - snmp_agent.cc SquidMath.h SquidMath.cc stat.cc StatCounters.h \ - StatCounters.cc StatHist.h StatHist.cc stmem.cc store.cc \ - store_client.cc store_digest.cc store_dir.cc store_io.cc \ - store_key_md5.cc store_log.cc store_rebuild.cc store_swapin.cc \ - store_swapmeta.cc store_swapout.cc StoreFileSystem.cc \ - StoreIOState.cc StoreMeta.cc StoreMetaMD5.cc StoreMetaSTD.cc \ + peer_userhash.cc RemovalPolicy.cc redirect.cc refresh.cc \ + Server.cc snmp_core.h snmp_core.cc snmp_agent.cc SquidMath.h \ + SquidMath.cc stat.cc StatCounters.h StatCounters.cc StatHist.h \ + StatHist.cc stmem.cc store.cc store_client.cc store_digest.cc \ + store_dir.cc store_io.cc store_key_md5.cc store_log.cc \ + store_rebuild.cc store_swapin.cc store_swapmeta.cc \ + store_swapout.cc StoreFileSystem.cc StoreIOState.cc \ + StoreMeta.cc StoreMetaMD5.cc StoreMetaSTD.cc \ StoreMetaSTDLFS.cc StoreMetaUnpacker.cc StoreMetaURL.cc \ StoreMetaVary.cc StoreSwapLogData.cc String.cc SwapDir.cc \ tests/testEventLoop.cc tests/testEventLoop.h tests/testMain.cc \ @@ -916,20 +913,20 @@ pconn.$(OBJEXT) peer_digest.$(OBJEXT) \ peer_proxy_negotiate_auth.$(OBJEXT) peer_select.$(OBJEXT) \ peer_sourcehash.$(OBJEXT) peer_userhash.$(OBJEXT) \ - ProtoPort.$(OBJEXT) RemovalPolicy.$(OBJEXT) redirect.$(OBJEXT) \ - refresh.$(OBJEXT) Server.$(OBJEXT) $(am__objects_15) \ - SquidMath.$(OBJEXT) stat.$(OBJEXT) StatCounters.$(OBJEXT) \ - StatHist.$(OBJEXT) stmem.$(OBJEXT) store.$(OBJEXT) \ - store_client.$(OBJEXT) store_digest.$(OBJEXT) \ - store_dir.$(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) StoreMeta.$(OBJEXT) \ - StoreMetaMD5.$(OBJEXT) StoreMetaSTD.$(OBJEXT) \ - StoreMetaSTDLFS.$(OBJEXT) StoreMetaUnpacker.$(OBJEXT) \ - StoreMetaURL.$(OBJEXT) StoreMetaVary.$(OBJEXT) \ - StoreSwapLogData.$(OBJEXT) String.$(OBJEXT) SwapDir.$(OBJEXT) \ + RemovalPolicy.$(OBJEXT) redirect.$(OBJEXT) refresh.$(OBJEXT) \ + Server.$(OBJEXT) $(am__objects_15) SquidMath.$(OBJEXT) \ + stat.$(OBJEXT) StatCounters.$(OBJEXT) StatHist.$(OBJEXT) \ + stmem.$(OBJEXT) store.$(OBJEXT) store_client.$(OBJEXT) \ + store_digest.$(OBJEXT) store_dir.$(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) \ + StoreMeta.$(OBJEXT) StoreMetaMD5.$(OBJEXT) \ + StoreMetaSTD.$(OBJEXT) StoreMetaSTDLFS.$(OBJEXT) \ + StoreMetaUnpacker.$(OBJEXT) StoreMetaURL.$(OBJEXT) \ + StoreMetaVary.$(OBJEXT) StoreSwapLogData.$(OBJEXT) \ + String.$(OBJEXT) SwapDir.$(OBJEXT) \ tests/testEventLoop.$(OBJEXT) tests/testMain.$(OBJEXT) \ tests/stub_main_cc.$(OBJEXT) \ tests/stub_ipc_Forwarder.$(OBJEXT) \ @@ -986,18 +983,18 @@ tests/testHttpRequestMethod.cc tests/testMain.cc \ tests/stub_DiskIOModule.cc tests/stub_main_cc.cc \ tests/stub_ipc_Forwarder.cc tests/stub_store_stats.cc time.cc \ - BodyPipe.cc cache_manager.cc cache_cf.cc debug.cc ProtoPort.cc \ - ProtoPort.h CacheDigest.cc carp.cc cbdata.cc \ - ChunkedCodingParser.cc client_db.cc client_side.cc \ - client_side_reply.cc client_side_request.cc ClientInfo.h \ - clientStream.cc ConfigOption.cc ConfigParser.cc \ - CpuAffinityMap.cc CpuAffinityMap.h CpuAffinitySet.cc \ - CpuAffinitySet.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 NullDelayId.cc NullDelayId.h \ + BodyPipe.cc cache_manager.cc cache_cf.cc debug.cc \ + CacheDigest.cc carp.cc cbdata.cc ChunkedCodingParser.cc \ + client_db.cc client_side.cc client_side_reply.cc \ + client_side_request.cc ClientInfo.h clientStream.cc \ + ConfigOption.cc ConfigParser.cc CpuAffinityMap.cc \ + CpuAffinityMap.h CpuAffinitySet.cc CpuAffinitySet.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 NullDelayId.cc NullDelayId.h \ ClientDelayConfig.cc ClientDelayConfig.h disk.cc dlink.h \ dlink.cc dns_internal.cc SquidDns.h DnsLookupDetails.h \ DnsLookupDetails.cc dns.cc errorpage.cc ETag.cc \ @@ -1033,8 +1030,8 @@ tests/stub_ipc_Forwarder.$(OBJEXT) \ tests/stub_store_stats.$(OBJEXT) time.$(OBJEXT) \ BodyPipe.$(OBJEXT) cache_manager.$(OBJEXT) cache_cf.$(OBJEXT) \ - debug.$(OBJEXT) ProtoPort.$(OBJEXT) CacheDigest.$(OBJEXT) \ - carp.$(OBJEXT) cbdata.$(OBJEXT) ChunkedCodingParser.$(OBJEXT) \ + debug.$(OBJEXT) CacheDigest.$(OBJEXT) carp.$(OBJEXT) \ + cbdata.$(OBJEXT) ChunkedCodingParser.$(OBJEXT) \ client_db.$(OBJEXT) client_side.$(OBJEXT) \ client_side_reply.$(OBJEXT) client_side_request.$(OBJEXT) \ clientStream.$(OBJEXT) ConfigOption.$(OBJEXT) \ @@ -1397,18 +1394,18 @@ multicast.cc mem.cc mem_node.cc MemBuf.cc MemObject.cc mime.cc \ mime_header.cc neighbors.cc Packer.cc Parsing.cc pconn.cc \ peer_digest.cc peer_proxy_negotiate_auth.cc peer_select.cc \ - peer_sourcehash.cc peer_userhash.cc ProtoPort.cc ProtoPort.h \ - redirect.cc refresh.cc RemovalPolicy.cc Server.cc snmp_core.h \ - snmp_core.cc snmp_agent.cc SquidMath.h SquidMath.cc stat.cc \ - StatCounters.h StatCounters.cc StatHist.h \ - tests/stub_StatHist.cc stmem.cc store.cc store_client.cc \ - store_digest.cc store_dir.cc store_io.cc store_key_md5.cc \ - store_log.cc store_rebuild.cc store_swapin.cc \ - store_swapmeta.cc store_swapout.cc StoreFileSystem.cc \ - StoreIOState.cc StoreMeta.cc StoreMetaMD5.cc StoreMetaSTD.cc \ - StoreMetaSTDLFS.cc StoreMetaUnpacker.cc StoreMetaURL.cc \ - StoreMetaVary.cc StoreSwapLogData.cc String.cc SwapDir.cc \ - MemStore.cc tests/stub_debug.cc tests/stub_DiskIOModule.cc \ + peer_sourcehash.cc peer_userhash.cc redirect.cc refresh.cc \ + RemovalPolicy.cc Server.cc snmp_core.h snmp_core.cc \ + snmp_agent.cc SquidMath.h SquidMath.cc stat.cc StatCounters.h \ + StatCounters.cc StatHist.h tests/stub_StatHist.cc stmem.cc \ + store.cc store_client.cc store_digest.cc store_dir.cc \ + store_io.cc store_key_md5.cc store_log.cc store_rebuild.cc \ + store_swapin.cc store_swapmeta.cc store_swapout.cc \ + StoreFileSystem.cc StoreIOState.cc StoreMeta.cc \ + StoreMetaMD5.cc StoreMetaSTD.cc StoreMetaSTDLFS.cc \ + StoreMetaUnpacker.cc StoreMetaURL.cc StoreMetaVary.cc \ + StoreSwapLogData.cc String.cc SwapDir.cc MemStore.cc \ + tests/stub_debug.cc tests/stub_DiskIOModule.cc \ tests/stub_main_cc.cc tests/stub_ipc_Forwarder.cc \ tests/stub_store_stats.cc tests/testURL.cc tests/testURL.h \ tests/testURLScheme.cc tests/testURLScheme.h tests/testMain.cc \ @@ -1444,9 +1441,9 @@ pconn.$(OBJEXT) peer_digest.$(OBJEXT) \ peer_proxy_negotiate_auth.$(OBJEXT) peer_select.$(OBJEXT) \ peer_sourcehash.$(OBJEXT) peer_userhash.$(OBJEXT) \ - ProtoPort.$(OBJEXT) redirect.$(OBJEXT) refresh.$(OBJEXT) \ - RemovalPolicy.$(OBJEXT) Server.$(OBJEXT) $(am__objects_15) \ - SquidMath.$(OBJEXT) stat.$(OBJEXT) StatCounters.$(OBJEXT) \ + redirect.$(OBJEXT) refresh.$(OBJEXT) RemovalPolicy.$(OBJEXT) \ + Server.$(OBJEXT) $(am__objects_15) SquidMath.$(OBJEXT) \ + stat.$(OBJEXT) StatCounters.$(OBJEXT) \ tests/stub_StatHist.$(OBJEXT) stmem.$(OBJEXT) store.$(OBJEXT) \ store_client.$(OBJEXT) store_digest.$(OBJEXT) \ store_dir.$(OBJEXT) store_io.$(OBJEXT) store_key_md5.$(OBJEXT) \ @@ -1563,18 +1560,18 @@ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(tests_testUfs_LDFLAGS) $(LDFLAGS) -o $@ am__tests_test_http_range_SOURCES_DIST = AccessLogEntry.cc AclRegs.cc \ - AuthReg.cc BodyPipe.cc cache_cf.cc ProtoPort.cc ProtoPort.h \ - cache_manager.cc CacheDigest.cc carp.cc cbdata.cc \ - ChunkedCodingParser.cc client_db.cc client_side.cc \ - client_side_reply.cc client_side_request.cc ClientInfo.h \ - clientStream.cc ConfigOption.cc ConfigParser.cc \ - CpuAffinityMap.cc CpuAffinityMap.h CpuAffinitySet.cc \ - CpuAffinitySet.h debug.cc 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 NullDelayId.cc NullDelayId.h \ + AuthReg.cc BodyPipe.cc cache_cf.cc cache_manager.cc \ + CacheDigest.cc carp.cc cbdata.cc ChunkedCodingParser.cc \ + client_db.cc client_side.cc client_side_reply.cc \ + client_side_request.cc ClientInfo.h clientStream.cc \ + ConfigOption.cc ConfigParser.cc CpuAffinityMap.cc \ + CpuAffinityMap.h CpuAffinitySet.cc CpuAffinitySet.h debug.cc \ + 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 NullDelayId.cc NullDelayId.h \ ClientDelayConfig.cc ClientDelayConfig.h \ DiskIO/DiskIOModule.cc DiskIO/ReadRequest.cc \ DiskIO/ReadRequest.h DiskIO/WriteRequest.cc \ @@ -1612,22 +1609,21 @@ win32.cc wordlist.cc am_tests_test_http_range_OBJECTS = AccessLogEntry.$(OBJEXT) \ $(am__objects_4) BodyPipe.$(OBJEXT) cache_cf.$(OBJEXT) \ - ProtoPort.$(OBJEXT) cache_manager.$(OBJEXT) \ - CacheDigest.$(OBJEXT) carp.$(OBJEXT) cbdata.$(OBJEXT) \ - ChunkedCodingParser.$(OBJEXT) client_db.$(OBJEXT) \ - client_side.$(OBJEXT) client_side_reply.$(OBJEXT) \ - client_side_request.$(OBJEXT) clientStream.$(OBJEXT) \ - ConfigOption.$(OBJEXT) ConfigParser.$(OBJEXT) \ - CpuAffinityMap.$(OBJEXT) CpuAffinitySet.$(OBJEXT) \ - debug.$(OBJEXT) $(am__objects_6) $(am__objects_7) \ - disk.$(OBJEXT) dlink.$(OBJEXT) $(am__objects_8) \ - errorpage.$(OBJEXT) ETag.$(OBJEXT) event.$(OBJEXT) \ - external_acl.$(OBJEXT) ExternalACLEntry.$(OBJEXT) \ - FadingCounter.$(OBJEXT) fd.$(OBJEXT) fde.$(OBJEXT) \ - filemap.$(OBJEXT) forward.$(OBJEXT) fqdncache.$(OBJEXT) \ - ftp.$(OBJEXT) gopher.$(OBJEXT) helper.$(OBJEXT) \ - HelperChildConfig.$(OBJEXT) $(am__objects_9) http.$(OBJEXT) \ - HttpBody.$(OBJEXT) HttpHdrCc.$(OBJEXT) \ + cache_manager.$(OBJEXT) CacheDigest.$(OBJEXT) carp.$(OBJEXT) \ + cbdata.$(OBJEXT) ChunkedCodingParser.$(OBJEXT) \ + client_db.$(OBJEXT) client_side.$(OBJEXT) \ + client_side_reply.$(OBJEXT) client_side_request.$(OBJEXT) \ + clientStream.$(OBJEXT) ConfigOption.$(OBJEXT) \ + ConfigParser.$(OBJEXT) CpuAffinityMap.$(OBJEXT) \ + CpuAffinitySet.$(OBJEXT) debug.$(OBJEXT) $(am__objects_6) \ + $(am__objects_7) disk.$(OBJEXT) dlink.$(OBJEXT) \ + $(am__objects_8) errorpage.$(OBJEXT) ETag.$(OBJEXT) \ + event.$(OBJEXT) external_acl.$(OBJEXT) \ + ExternalACLEntry.$(OBJEXT) FadingCounter.$(OBJEXT) \ + fd.$(OBJEXT) fde.$(OBJEXT) filemap.$(OBJEXT) forward.$(OBJEXT) \ + fqdncache.$(OBJEXT) ftp.$(OBJEXT) gopher.$(OBJEXT) \ + helper.$(OBJEXT) HelperChildConfig.$(OBJEXT) $(am__objects_9) \ + http.$(OBJEXT) HttpBody.$(OBJEXT) HttpHdrCc.$(OBJEXT) \ HttpHdrContRange.$(OBJEXT) HttpHdrRange.$(OBJEXT) \ HttpHdrSc.$(OBJEXT) HttpHdrScTarget.$(OBJEXT) \ HttpHeader.$(OBJEXT) HttpHeaderTools.$(OBJEXT) \ @@ -1901,6 +1897,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ @@ -2179,7 +2176,10 @@ @USE_AIOPS_WIN32_FALSE@ DiskIO/DiskThreads/CommIO.cc \ @USE_AIOPS_WIN32_FALSE@ DiskIO/DiskThreads/CommIO.h -@USE_AIOPS_WIN32_TRUE@AIOPS_SOURCE = DiskIO/DiskThreads/aiops_win32.cc +@USE_AIOPS_WIN32_TRUE@AIOPS_SOURCE = DiskIO/DiskThreads/aiops_win32.cc \ +@USE_AIOPS_WIN32_TRUE@ DiskIO/DiskThreads/CommIO.cc \ +@USE_AIOPS_WIN32_TRUE@ DiskIO/DiskThreads/CommIO.h + EXTRA_LIBRARIES = libAIO.a libBlocking.a libDiskDaemon.a libDiskThreads.a \ libMmapped.a libIpcIo.a @@ -2220,22 +2220,21 @@ squid_SOURCES = $(ACL_REGISTRATION_SOURCES) AccessLogEntry.cc \ AccessLogEntry.h AsyncEngine.cc AsyncEngine.h cache_cf.cc \ - ProtoPort.cc ProtoPort.h CacheDigest.cc cache_manager.cc \ - CacheManager.h carp.cc cbdata.cc cbdata.h \ - ChunkedCodingParser.cc ChunkedCodingParser.h client_db.cc \ - 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 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) disk.cc \ - $(DISKIO_SOURCE) dlink.h dlink.cc $(DNSSOURCE) 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 \ + CacheDigest.cc cache_manager.cc CacheManager.h carp.cc \ + cbdata.cc cbdata.h ChunkedCodingParser.cc \ + ChunkedCodingParser.h client_db.cc 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 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) disk.cc $(DISKIO_SOURCE) dlink.h dlink.cc \ + $(DNSSOURCE) 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 fd.cc \ fde.cc fde.h FileMap.h filemap.cc forward.cc forward.h \ fqdncache.cc ftp.cc Generic.h globals.h gopher.cc helper.cc \ @@ -2369,7 +2368,10 @@ $(XTRA_LIBS) dnsserver_SOURCES = dnsserver.cc -dnsserver_LDADD = $(COMPAT_LIB) +dnsserver_LDADD = \ + $(COMPAT_LIB) \ + $(XTRA_LIBS) + recv_announce_SOURCES = recv-announce.cc ufsdump_SOURCES = \ ClientInfo.h \ @@ -2873,8 +2875,6 @@ BodyPipe.cc \ cache_manager.cc \ cache_cf.cc \ - ProtoPort.cc \ - ProtoPort.h \ CacheDigest.cc \ carp.cc \ cbdata.cc \ @@ -3156,7 +3156,6 @@ swap_log_op.cc tests_testDiskIO_LDADD = \ - anyp/libanyp.la \ SquidConfig.o \ CommCalls.o \ DnsLookupDetails.o \ @@ -3168,6 +3167,7 @@ $(AUTH_LIBS) \ libsquid.la \ comm/libcomm.la \ + anyp/libanyp.la \ ip/libip.la \ fs/libfs.la \ ipc/libipc.la \ @@ -3286,8 +3286,6 @@ peer_select.cc \ peer_sourcehash.cc \ peer_userhash.cc \ - ProtoPort.cc \ - ProtoPort.h \ redirect.cc \ refresh.cc \ RemovalPolicy.cc \ @@ -3482,8 +3480,6 @@ peer_select.cc \ peer_sourcehash.cc \ peer_userhash.cc \ - ProtoPort.cc \ - ProtoPort.h \ RemovalPolicy.cc \ redirect.cc \ refresh.cc \ @@ -3590,8 +3586,6 @@ $(ACL_REGISTRATION_SOURCES) \ BodyPipe.cc \ cache_cf.cc \ - ProtoPort.cc \ - ProtoPort.h \ cache_manager.cc \ CacheDigest.cc \ carp.cc \ @@ -3834,8 +3828,6 @@ cache_manager.cc \ cache_cf.cc \ debug.cc \ - ProtoPort.cc \ - ProtoPort.h \ CacheDigest.cc \ carp.cc \ cbdata.cc \ @@ -4314,13 +4306,13 @@ mgr/libmgr.la \ $(REPL_OBJS) \ acl/libacls.la \ - anyp/libanyp.la \ $(DISK_LIBS) \ $(DISK_OS_LIBS) \ acl/libapi.la \ ipc/libipc.la \ $(SSL_LIBS) \ comm/libcomm.la \ + anyp/libanyp.la \ base/libbase.la \ ip/libip.la \ $(top_builddir)/lib/libmisccontainers.la \ @@ -4437,9 +4429,9 @@ $(TESTSOURCES) tests_testRock_LDADD = \ - anyp/libanyp.la \ libsquid.la \ comm/libcomm.la \ + anyp/libanyp.la \ ip/libip.la \ fs/libfs.la \ $(AUTH_LIBS) \ @@ -4823,8 +4815,6 @@ peer_select.cc \ peer_sourcehash.cc \ peer_userhash.cc \ - ProtoPort.cc \ - ProtoPort.h \ redirect.cc \ refresh.cc \ RemovalPolicy.cc \ @@ -5712,7 +5702,6 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Packer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Parsing.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProfStats.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProtoPort.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RemovalPolicy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Server.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SquidConfig.Plo@am__quote@ diff -u -r -N squid-3.2.0.17/src/MemObject.cc squid-3.2.0.18/src/MemObject.cc --- squid-3.2.0.17/src/MemObject.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/MemObject.cc 2012-06-29 13:38:29.000000000 +1200 @@ -225,13 +225,13 @@ RequestMethodStr(method), log_url); if (vary_headers) mb->Printf("\tvary_headers: %s\n", vary_headers); - mb->Printf("\tinmem_lo: %"PRId64"\n", inmem_lo); - mb->Printf("\tinmem_hi: %"PRId64"\n", data_hdr.endOffset()); - mb->Printf("\tswapout: %"PRId64" bytes queued\n", + mb->Printf("\tinmem_lo: %" PRId64 "\n", inmem_lo); + mb->Printf("\tinmem_hi: %" PRId64 "\n", data_hdr.endOffset()); + mb->Printf("\tswapout: %" PRId64 " bytes queued\n", swapout.queue_offset); if (swapout.sio.getRaw()) - mb->Printf("\tswapout: %"PRId64" bytes written\n", + mb->Printf("\tswapout: %" PRId64 " bytes written\n", (int64_t) swapout.sio->offset()); StoreClientStats statsVisitor(mb); @@ -415,16 +415,17 @@ } int -MemObject::mostBytesWanted(int max) const +MemObject::mostBytesWanted(int max, bool ignoreDelayPools) const { #if USE_DELAY_POOLS - /* identify delay id with largest allowance */ - DelayId largestAllowance = mostBytesAllowed (); - return largestAllowance.bytesWanted(0, max); -#else + if (!ignoreDelayPools) { + /* identify delay id with largest allowance */ + DelayId largestAllowance = mostBytesAllowed (); + return largestAllowance.bytesWanted(0, max); + } +#endif return max; -#endif } void @@ -476,10 +477,6 @@ #endif - if (sc->getType() != STORE_MEM_CLIENT) - /* reading off disk */ - continue; - j = sc->delayId.bytesWanted(0, sc->copyInto.length); if (j > jmax) { diff -u -r -N squid-3.2.0.17/src/MemObject.h squid-3.2.0.18/src/MemObject.h --- squid-3.2.0.17/src/MemObject.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/MemObject.h 2012-06-29 13:38:29.000000000 +1200 @@ -85,7 +85,7 @@ void trimSwappable(); void trimUnSwappable(); bool isContiguous() const; - int mostBytesWanted(int max) const; + int mostBytesWanted(int max, bool ignoreDelayPools) const; void setNoDelay(bool const newValue); #if USE_DELAY_POOLS DelayId mostBytesAllowed() const; diff -u -r -N squid-3.2.0.17/src/MemStore.cc squid-3.2.0.18/src/MemStore.cc --- squid-3.2.0.17/src/MemStore.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/MemStore.cc 2012-06-29 13:38:29.000000000 +1200 @@ -76,7 +76,7 @@ const int limit = map->entryLimit(); storeAppendPrintf(&e, "Maximum entries: %9d\n", limit); if (limit > 0) { - storeAppendPrintf(&e, "Current entries: %"PRId64" %.2f%%\n", + storeAppendPrintf(&e, "Current entries: %" PRId64 " %.2f%%\n", currentCount(), (100.0 * currentCount() / limit)); if (limit < 100) { // XXX: otherwise too expensive to count diff -u -r -N squid-3.2.0.17/src/mgr/Makefile.in squid-3.2.0.18/src/mgr/Makefile.in --- squid-3.2.0.17/src/mgr/Makefile.in 2012-04-13 01:46:14.000000000 +1200 +++ squid-3.2.0.18/src/mgr/Makefile.in 2012-06-29 13:39:20.000000000 +1200 @@ -142,6 +142,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/neighbors.cc squid-3.2.0.18/src/neighbors.cc --- squid-3.2.0.17/src/neighbors.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/neighbors.cc 2012-06-29 13:38:29.000000000 +1200 @@ -31,8 +31,8 @@ */ #include "squid-old.h" -#include "ProtoPort.h" #include "acl/FilledChecklist.h" +#include "anyp/PortCfg.h" #include "comm/Connection.h" #include "comm/ConnOpener.h" #include "event.h" @@ -540,13 +540,12 @@ if (Comm::IsConnOpen(icpIncomingConn)) { for (thisPeer = Config.peers; thisPeer; thisPeer = next) { - http_port_list *s = NULL; next = thisPeer->next; if (0 != strcmp(thisPeer->host, me)) continue; - for (s = Config.Sockaddr.http; s; s = s->next) { + for (AnyP::PortCfg *s = Config.Sockaddr.http; s; s = s->next) { if (thisPeer->http_port != s->s.GetPort()) continue; @@ -629,7 +628,8 @@ } debugs(15, 3, "neighborsUdpPing: sending HTCP query"); - if (htcpQuery(entry, request, p) <= 0) continue; // unable to send. + if (htcpQuery(entry, request, p) <= 0) + continue; // unable to send. } else #endif { diff -u -r -N squid-3.2.0.17/src/ProtoPort.cc squid-3.2.0.18/src/ProtoPort.cc --- squid-3.2.0.17/src/ProtoPort.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/ProtoPort.cc 1970-01-01 12:00:00.000000000 +1200 @@ -1,39 +0,0 @@ -#include "squid.h" -#include "comm.h" -#include "ProtoPort.h" -#if HAVE_LIMITS -#include -#endif - -http_port_list::http_port_list(const char *aProtocol) -#if USE_SSL - : - dynamicCertMemCacheSize(std::numeric_limits::max()) -#endif -{ - protocol = xstrdup(aProtocol); -} - -http_port_list::~http_port_list() -{ - if (Comm::IsConnOpen(listenConn)) { - listenConn->close(); - listenConn = NULL; - } - - safe_free(name); - safe_free(defaultsite); - safe_free(protocol); - -#if USE_SSL - safe_free(cert); - safe_free(key); - safe_free(options); - safe_free(cipher); - safe_free(cafile); - safe_free(capath); - safe_free(dhfile); - safe_free(sslflags); - safe_free(sslContextSessionId); -#endif -} diff -u -r -N squid-3.2.0.17/src/ProtoPort.h squid-3.2.0.18/src/ProtoPort.h --- squid-3.2.0.17/src/ProtoPort.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/ProtoPort.h 1970-01-01 12:00:00.000000000 +1200 @@ -1,78 +0,0 @@ -/* - * $Id$ - */ - -#ifndef SQUID_PROTO_PORT_H -#define SQUID_PROTO_PORT_H - -#include "cbdata.h" -#include "comm/Connection.h" - -#if USE_SSL -#include "ssl/gadgets.h" -#endif - -struct http_port_list { - http_port_list(const char *aProtocol); - ~http_port_list(); - - http_port_list *next; - - Ip::Address s; - char *protocol; /* protocol name */ - char *name; /* visible name */ - char *defaultsite; /* default web site */ - - unsigned int intercepted:1; /**< intercepting proxy port */ - unsigned int spoof_client_ip:1; /**< spoof client ip if possible */ - unsigned int accel:1; /**< HTTP accelerator */ - unsigned int allow_direct:1; /**< Allow direct forwarding in accelerator mode */ - unsigned int vhost:1; /**< uses host header */ - unsigned int sslBump:1; /**< intercepts CONNECT requests */ - unsigned int actAsOrigin:1; ///< update replies to conform with RFC 2616 - unsigned int ignore_cc:1; /**< Ignore request Cache-Control directives */ - - int vport; /* virtual port support, -1 for dynamic, >0 static*/ - bool connection_auth_disabled; /* Don't support connection oriented auth */ - int disable_pmtu_discovery; - - struct { - unsigned int enabled; - unsigned int idle; - unsigned int interval; - unsigned int timeout; - } tcp_keepalive; - - /** - * The listening socket details. - * If Comm::ConnIsOpen() we are actively listening for client requests. - * use listenConn->close() to stop. - */ - Comm::ConnectionPointer listenConn; - -#if USE_SSL - char *cert; - char *key; - int version; - char *cipher; - char *options; - char *clientca; - char *cafile; - char *capath; - char *crlfile; - char *dhfile; - char *sslflags; - char *sslContextSessionId; ///< "session id context" for staticSslContext - bool generateHostCertificates; ///< dynamically make host cert for sslBump - size_t dynamicCertMemCacheSize; ///< max size of generated certificates memory cache - - Ssl::SSL_CTX_Pointer staticSslContext; ///< for HTTPS accelerator or static sslBump - Ssl::X509_Pointer signingCert; ///< x509 certificate for signing generated certificates - Ssl::EVP_PKEY_Pointer signPkey; ///< private key for sighing generated certificates - Ssl::X509_STACK_Pointer certsToChain; ///< x509 certificates to send with the generated cert -#endif - - CBDATA_CLASS2(http_port_list); -}; - -#endif /* SQUID_PROTO_PORT_H */ diff -u -r -N squid-3.2.0.17/src/protos.h squid-3.2.0.18/src/protos.h --- squid-3.2.0.17/src/protos.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/protos.h 2012-06-29 13:38:29.000000000 +1200 @@ -239,8 +239,8 @@ #if SQUID_SNMP SQUIDCEXTERN PF snmpHandleUdp; SQUIDCEXTERN void snmpInit(void); -SQUIDCEXTERN void snmpConnectionOpen(void); -SQUIDCEXTERN void snmpConnectionClose(void); +SQUIDCEXTERN void snmpOpenPorts(void); +SQUIDCEXTERN void snmpClosePorts(void); SQUIDCEXTERN const char * snmpDebugOid(oid * Name, snint Len, MemBuf &outbuf); SQUIDCEXTERN void addr2oid(Ip::Address &addr, oid *Dest); diff -u -r -N squid-3.2.0.17/src/repl/Makefile.in squid-3.2.0.18/src/repl/Makefile.in --- squid-3.2.0.17/src/repl/Makefile.in 2012-04-13 01:46:15.000000000 +1200 +++ squid-3.2.0.18/src/repl/Makefile.in 2012-06-29 13:39:20.000000000 +1200 @@ -150,6 +150,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/Server.cc squid-3.2.0.18/src/Server.cc --- squid-3.2.0.17/src/Server.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/Server.cc 2012-06-29 13:38:29.000000000 +1200 @@ -734,10 +734,7 @@ if (!contentSize) return; // XXX: bytesWanted asserts on zero-size ranges - // XXX: entry->bytesWanted returns contentSize-1 if entry can accept data. - // We have to add 1 to avoid suspending forever. - const size_t bytesWanted = entry->bytesWanted(Range(0, contentSize)); - const size_t spaceAvailable = bytesWanted > 0 ? (bytesWanted + 1) : 0; + const size_t spaceAvailable = entry->bytesWanted(Range(0, contentSize), true); if (spaceAvailable < contentSize ) { // No or partial body data consuming @@ -747,8 +744,7 @@ entry->deferProducer(call); } - // XXX: bytesWanted API does not allow us to write just one byte! - if (!spaceAvailable && contentSize > 1) { + if (!spaceAvailable) { debugs(11, 5, HERE << "NOT storing " << contentSize << " bytes of adapted " << "response body at offset " << adaptedBodySource->consumedSize()); return; diff -u -r -N squid-3.2.0.17/src/snmp/Makefile.in squid-3.2.0.18/src/snmp/Makefile.in --- squid-3.2.0.17/src/snmp/Makefile.in 2012-04-13 01:46:16.000000000 +1200 +++ squid-3.2.0.18/src/snmp/Makefile.in 2012-06-29 13:39:20.000000000 +1200 @@ -138,6 +138,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/src/snmp_core.cc squid-3.2.0.18/src/snmp_core.cc --- squid-3.2.0.17/src/snmp_core.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/snmp_core.cc 2012-06-29 13:38:29.000000000 +1200 @@ -267,7 +267,7 @@ } void -snmpConnectionOpen(void) +snmpOpenPorts(void) { debugs(49, 5, "snmpConnectionOpen: Called"); @@ -330,7 +330,7 @@ } void -snmpConnectionClose(void) +snmpClosePorts(void) { if (Comm::IsConnOpen(snmpIncomingConn)) { debugs(49, DBG_IMPORTANT, "Closing SNMP receiving port " << snmpIncomingConn->local); diff -u -r -N squid-3.2.0.17/src/ssl/certificate_db.cc squid-3.2.0.18/src/ssl/certificate_db.cc --- squid-3.2.0.17/src/ssl/certificate_db.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/ssl/certificate_db.cc 2012-06-29 13:38:29.000000000 +1200 @@ -507,7 +507,7 @@ subSize(filename); int ret = remove(filename.c_str()); - if (ret < 0) + if (ret < 0 && errno != ENOENT) throw std::runtime_error("Failed to remove certficate file " + filename + " from db"); } diff -u -r -N squid-3.2.0.17/src/ssl/helper.cc squid-3.2.0.18/src/ssl/helper.cc --- squid-3.2.0.17/src/ssl/helper.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/ssl/helper.cc 2012-06-29 13:38:29.000000000 +1200 @@ -3,7 +3,7 @@ */ #include "squid.h" -#include "ProtoPort.h" +#include "anyp/PortCfg.h" #include "ssl/Config.h" #include "ssl/helper.h" #include "SquidTime.h" @@ -29,7 +29,7 @@ assert(ssl_crtd == NULL); bool useSslBump = false; - for (http_port_list *s = ::Config.Sockaddr.http; s; s = s->next) { + for (AnyP::PortCfg *s = ::Config.Sockaddr.http; s; s = s->next) { if (s->sslBump) { useSslBump = true; break; diff -u -r -N squid-3.2.0.17/src/ssl/Makefile.am squid-3.2.0.18/src/ssl/Makefile.am --- squid-3.2.0.17/src/ssl/Makefile.am 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/ssl/Makefile.am 2012-06-29 13:38:29.000000000 +1200 @@ -48,5 +48,5 @@ if USE_SSL_CRTD ssl_crtd_SOURCES = ssl_crtd.cc certificate_db.cc certificate_db.h -ssl_crtd_LDADD = $(SSLLIB) -lsslutil $(COMPAT_LIB) +ssl_crtd_LDADD = libsslutil.la $(SSLLIB) $(COMPAT_LIB) endif diff -u -r -N squid-3.2.0.17/src/ssl/Makefile.in squid-3.2.0.18/src/ssl/Makefile.in --- squid-3.2.0.17/src/ssl/Makefile.in 2012-04-13 01:46:17.000000000 +1200 +++ squid-3.2.0.18/src/ssl/Makefile.in 2012-06-29 13:39:20.000000000 +1200 @@ -82,8 +82,8 @@ am__DEPENDENCIES_1 = @ENABLE_XPROF_STATS_TRUE@am__DEPENDENCIES_2 = $(top_builddir)/lib/profiler/libprofiler.la am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) -@USE_SSL_CRTD_TRUE@ssl_crtd_DEPENDENCIES = $(am__DEPENDENCIES_1) \ -@USE_SSL_CRTD_TRUE@ $(am__DEPENDENCIES_3) +@USE_SSL_CRTD_TRUE@ssl_crtd_DEPENDENCIES = libsslutil.la \ +@USE_SSL_CRTD_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_3) DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/cfgaux/depcomp am__depfiles_maybe = depfiles @@ -165,6 +165,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ @@ -369,7 +370,7 @@ crtd_message.h @USE_SSL_CRTD_TRUE@ssl_crtd_SOURCES = ssl_crtd.cc certificate_db.cc certificate_db.h -@USE_SSL_CRTD_TRUE@ssl_crtd_LDADD = $(SSLLIB) -lsslutil $(COMPAT_LIB) +@USE_SSL_CRTD_TRUE@ssl_crtd_LDADD = libsslutil.la $(SSLLIB) $(COMPAT_LIB) all: all-am .SUFFIXES: diff -u -r -N squid-3.2.0.17/src/ssl/support.cc squid-3.2.0.18/src/ssl/support.cc --- squid-3.2.0.17/src/ssl/support.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/ssl/support.cc 2012-06-29 13:38:29.000000000 +1200 @@ -391,6 +391,16 @@ "NO_TLSv1", SSL_OP_NO_TLSv1 }, #endif +#if SSL_OP_NO_TLSv1_1 + { + "NO_TLSv1_1", SSL_OP_NO_TLSv1_1 + }, +#endif +#if SSL_OP_NO_TLSv1_2 + { + "NO_TLSv1_2", SSL_OP_NO_TLSv1_2 + }, +#endif { "", 0 }, @@ -680,6 +690,26 @@ method = TLSv1_server_method(); break; + case 5: +#if OPENSSL_VERSION_NUMBER >= 0x10001000L // NP: not sure exactly which sub-version yet. + debugs(83, 5, "Using TLSv1.1."); + method = TLSv1_1_server_method(); +#else + debugs(83, DBG_IMPORTANT, "TLSv1.1 is not available in this Proxy."); + return NULL; +#endif + break; + + case 6: +#if OPENSSL_VERSION_NUMBER >= 0x10001000L // NP: not sure exactly which sub-version yet. + debugs(83, 5, "Using TLSv1.2"); + method = TLSv1_2_server_method(); +#else + debugs(83, DBG_IMPORTANT, "TLSv1.2 is not available in this Proxy."); + return NULL; +#endif + break; + case 1: default: @@ -879,6 +909,26 @@ method = TLSv1_client_method(); break; + case 5: +#if OPENSSL_VERSION_NUMBER >= 0x10001000L // NP: not sure exactly which sub-version yet. + debugs(83, 5, "Using TLSv1.1."); + method = TLSv1_1_client_method(); +#else + debugs(83, DBG_IMPORTANT, "TLSv1.1 is not available in this Proxy."); + return NULL; +#endif + break; + + case 6: +#if OPENSSL_VERSION_NUMBER >= 0x10001000L // NP: not sure exactly which sub-version yet. + debugs(83, 5, "Using TLSv1.2"); + method = TLSv1_2_client_method(); +#else + debugs(83, DBG_IMPORTANT, "TLSv1.2 is not available in this Proxy."); + return NULL; +#endif + break; + case 1: default: diff -u -r -N squid-3.2.0.17/src/stat.cc squid-3.2.0.18/src/stat.cc --- squid-3.2.0.17/src/stat.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/stat.cc 2012-06-29 13:38:29.000000000 +1200 @@ -33,6 +33,7 @@ */ #include "squid-old.h" +#include "comm/Loops.h" #include "event.h" #include "format/Token.h" #include "StoreClient.h" @@ -1504,9 +1505,9 @@ * Cache Digest Stuff */ C->cd.on_xition_count.enumInit(CacheDigestHashFuncCount); - C->comm_icp_incoming.enumInit(INCOMING_ICP_MAX); + C->comm_udp_incoming.enumInit(INCOMING_UDP_MAX); C->comm_dns_incoming.enumInit(INCOMING_DNS_MAX); - C->comm_http_incoming.enumInit(INCOMING_HTTP_MAX); + C->comm_tcp_incoming.enumInit(INCOMING_TCP_MAX); C->select_fds_hist.enumInit(256); /* was SQUID_MAXFD, but it is way too much. It is OK to crop this statistics */ } @@ -1524,9 +1525,9 @@ C->icp.replySvcTime.clear(); C->dns.svcTime.clear(); C->cd.on_xition_count.clear(); - C->comm_icp_incoming.clear(); + C->comm_udp_incoming.clear(); C->comm_dns_incoming.clear(); - C->comm_http_incoming.clear(); + C->comm_tcp_incoming.clear(); C->select_fds_hist.clear(); } @@ -1551,8 +1552,9 @@ dest->icp.replySvcTime=orig->icp.replySvcTime; dest->dns.svcTime=orig->dns.svcTime; dest->cd.on_xition_count=orig->cd.on_xition_count; - dest->comm_icp_incoming=orig->comm_icp_incoming; - dest->comm_http_incoming=orig->comm_http_incoming; + dest->comm_udp_incoming=orig->comm_udp_incoming; + dest->comm_dns_incoming=orig->comm_dns_incoming; + dest->comm_tcp_incoming=orig->comm_tcp_incoming; dest->select_fds_hist=orig->select_fds_hist; } @@ -2011,7 +2013,7 @@ if (conn != NULL) { const int fd = conn->clientConnection->fd; - storeAppendPrintf(s, "\tFD %d, read %"PRId64", wrote %"PRId64"\n", fd, + storeAppendPrintf(s, "\tFD %d, read %" PRId64 ", wrote %" PRId64 "\n", fd, fd_table[fd].bytes_read, fd_table[fd].bytes_written); storeAppendPrintf(s, "\tFD desc: %s\n", fd_table[fd].desc); storeAppendPrintf(s, "\tin: buf %p, offset %ld, size %ld\n", diff -u -r -N squid-3.2.0.17/src/StatCounters.h squid-3.2.0.18/src/StatCounters.h --- squid-3.2.0.17/src/StatCounters.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/StatCounters.h 2012-06-29 13:38:29.000000000 +1200 @@ -144,9 +144,9 @@ double cputime; struct timeval timestamp; - StatHist comm_icp_incoming; + StatHist comm_udp_incoming; StatHist comm_dns_incoming; - StatHist comm_http_incoming; + StatHist comm_tcp_incoming; StatHist select_fds_hist; struct { diff -u -r -N squid-3.2.0.17/src/StatHist.cc squid-3.2.0.18/src/StatHist.cc --- squid-3.2.0.17/src/StatHist.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/StatHist.cc 2012-06-29 13:38:29.000000000 +1200 @@ -59,19 +59,12 @@ scale_ = capacity_ / val_in(max_ - min_); } -void -StatHist::clear() -{ - for (unsigned int i=0; i(xcalloc(src.capacity_, sizeof(int))); + bins = static_cast(xcalloc(src.capacity_, sizeof(bins_type))); memcpy(bins,src.bins,capacity_*sizeof(*bins)); } } diff -u -r -N squid-3.2.0.17/src/StatHist.h squid-3.2.0.18/src/StatHist.h --- squid-3.2.0.17/src/StatHist.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/StatHist.h 2012-06-29 13:38:29.000000000 +1200 @@ -57,7 +57,7 @@ */ StatHist(); StatHist(const StatHist&); //not needed - ~StatHist(); + ~StatHist() { clear(); }; typedef uint64_t bins_type; @@ -130,15 +130,18 @@ { if (this==&src) //handle self-assignment return *this; - xfree(bins); // xfree can handle NULL pointers, no need to check - capacity_=src.capacity_; - bins = static_cast(xcalloc(src.capacity_, sizeof(bins_type))); + if (capacity_ != src.capacity_) { + xfree(bins); // xfree can handle NULL pointers, no need to check + capacity_=src.capacity_; + bins = static_cast(xcalloc(src.capacity_, sizeof(bins_type))); + } min_=src.min_; max_=src.max_; scale_=src.scale_; val_in=src.val_in; val_out=src.val_out; - memcpy(bins,src.bins,capacity_*sizeof(*bins)); + if (bins != NULL) + memcpy(bins,src.bins,capacity_*sizeof(*bins)); return *this; } @@ -148,12 +151,12 @@ scale_(1.0), val_in(NULL), val_out(NULL) {} -inline -StatHist::~StatHist() +inline void +StatHist::clear() { - xfree(bins); //can handle case of bins being NULL + xfree(bins); // can handle case of bins being NULL bins=NULL; - capacity_=0; //mark as destructed, may be needed for troubleshooting + capacity_=0; // mark as destructed, may be needed for troubleshooting } #endif /* STATHIST_H_ */ diff -u -r -N squid-3.2.0.17/src/store.cc squid-3.2.0.18/src/store.cc --- squid-3.2.0.17/src/store.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/store.cc 2012-06-29 13:38:29.000000000 +1200 @@ -272,12 +272,10 @@ } size_t -StoreEntry::bytesWanted (Range const aRange) const +StoreEntry::bytesWanted (Range const aRange, bool ignoreDelayPools) const { - assert (aRange.size()); - if (mem_obj == NULL) - return aRange.end - 1; + return aRange.end; #if URL_CHECKSUM_DEBUG @@ -285,14 +283,10 @@ #endif - /* Always read *something* here - we haven't got the header yet */ - if (EBIT_TEST(flags, ENTRY_FWD_HDR_WAIT)) - return aRange.end - 1; - if (!mem_obj->readAheadPolicyCanRead()) return 0; - return mem_obj->mostBytesWanted(aRange.end - 1); + return mem_obj->mostBytesWanted(aRange.end, ignoreDelayPools); } bool diff -u -r -N squid-3.2.0.17/src/store_client.cc squid-3.2.0.18/src/store_client.cc --- squid-3.2.0.17/src/store_client.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/store_client.cc 2012-06-29 13:38:29.000000000 +1200 @@ -876,7 +876,7 @@ output->Printf("\tClient #%d, %p\n", clientNumber, _callback.callback_data); - output->Printf("\t\tcopy_offset: %"PRId64"\n", + output->Printf("\t\tcopy_offset: %" PRId64 "\n", copyInto.offset); output->Printf("\t\tcopy_size: %d\n", diff -u -r -N squid-3.2.0.17/src/store_dir.cc squid-3.2.0.18/src/store_dir.cc --- squid-3.2.0.17/src/store_dir.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/store_dir.cc 2012-06-29 13:38:29.000000000 +1200 @@ -352,7 +352,7 @@ storeAppendPrintf(&output, "Store Directory Statistics:\n"); storeAppendPrintf(&output, "Store Entries : %lu\n", (unsigned long int)StoreEntry::inUseCount()); - storeAppendPrintf(&output, "Maximum Swap Size : %"PRIu64" KB\n", + storeAppendPrintf(&output, "Maximum Swap Size : %" PRIu64 " KB\n", maxSize() >> 10); storeAppendPrintf(&output, "Current Store Swap Size: %.2f KB\n", currentSize() / 1024.0); diff -u -r -N squid-3.2.0.17/src/Store.h squid-3.2.0.18/src/Store.h --- squid-3.2.0.17/src/Store.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/Store.h 2012-06-29 13:38:29.000000000 +1200 @@ -86,7 +86,7 @@ virtual void write (StoreIOBuffer); virtual _SQUID_INLINE_ bool isEmpty() const; virtual bool isAccepting() const; - virtual size_t bytesWanted(Range const) const; + virtual size_t bytesWanted(Range const aRange, bool ignoreDelayPool = false) const; virtual void complete(); virtual store_client_t storeClientType() const; virtual char const *getSerialisedMetaData(); @@ -240,7 +240,7 @@ bool isEmpty () const {return true;} - virtual size_t bytesWanted(Range const aRange) const { assert (aRange.size()); return aRange.end - 1;} + virtual size_t bytesWanted(Range const aRange, bool ignoreDelayPool = false) const { return aRange.end; } void operator delete(void *address); void complete() {} diff -u -r -N squid-3.2.0.17/src/store_log.cc squid-3.2.0.18/src/store_log.cc --- squid-3.2.0.17/src/store_log.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/store_log.cc 2012-06-29 13:38:29.000000000 +1200 @@ -86,7 +86,7 @@ String ctype=(reply->content_type.size() ? reply->content_type.termedBuf() : str_unknown); logfileLineStart(storelog); - logfilePrintf(storelog, "%9d.%03d %-7s %02d %08X %s %4d %9d %9d %9d " SQUIDSTRINGPH " %"PRId64"/%"PRId64" %s %s\n", + logfilePrintf(storelog, "%9d.%03d %-7s %02d %08X %s %4d %9d %9d %9d " SQUIDSTRINGPH " %" PRId64 "/%" PRId64 " %s %s\n", (int) current_time.tv_sec, (int) current_time.tv_usec / 1000, storeLogTags[tag], diff -u -r -N squid-3.2.0.17/src/structs.h squid-3.2.0.18/src/structs.h --- squid-3.2.0.17/src/structs.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/structs.h 2012-06-29 13:38:29.000000000 +1200 @@ -145,7 +145,10 @@ class RemovalPolicySettings; class external_acl; class Store; -struct http_port_list; +namespace AnyP +{ +struct PortCfg; +} class SwapDir; /// Used for boolean enabled/disabled options with complex default logic. @@ -244,11 +247,10 @@ } Port; struct { - http_port_list *http; + AnyP::PortCfg *http; #if USE_SSL - http_port_list *https; + AnyP::PortCfg *https; #endif - } Sockaddr; #if SQUID_SNMP @@ -556,12 +558,10 @@ #endif struct { - int icp_average; - int dns_average; - int http_average; - int icp_min_poll; - int dns_min_poll; - int http_min_poll; + struct { + int average; + int min_poll; + } dns, udp, tcp; } comm_incoming; int max_open_disk_fds; int uri_whitespace; diff -u -r -N squid-3.2.0.17/src/SwapDir.cc squid-3.2.0.18/src/SwapDir.cc --- squid-3.2.0.17/src/SwapDir.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/SwapDir.cc 2012-06-29 13:38:29.000000000 +1200 @@ -342,10 +342,10 @@ SwapDir::optionObjectSizeDump(StoreEntry * e) const { if (min_objsize != 0) - storeAppendPrintf(e, " min-size=%"PRId64, min_objsize); + storeAppendPrintf(e, " min-size=%" PRId64, min_objsize); if (max_objsize != -1) - storeAppendPrintf(e, " max-size=%"PRId64, max_objsize); + storeAppendPrintf(e, " max-size=%" PRId64, max_objsize); } // some SwapDirs may maintain their indexes and be able to lookup an entry key diff -u -r -N squid-3.2.0.17/src/tests/stub_MemObject.cc squid-3.2.0.18/src/tests/stub_MemObject.cc --- squid-3.2.0.17/src/tests/stub_MemObject.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/tests/stub_MemObject.cc 2012-06-29 13:38:29.000000000 +1200 @@ -107,7 +107,7 @@ } int -MemObject::mostBytesWanted(int max) const +MemObject::mostBytesWanted(int max, bool ignoreDelayPools) const { fatal ("Not implemented"); return -1; diff -u -r -N squid-3.2.0.17/src/tests/stub_StatHist.cc squid-3.2.0.18/src/tests/stub_StatHist.cc --- squid-3.2.0.17/src/tests/stub_StatHist.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/tests/stub_StatHist.cc 2012-06-29 13:38:29.000000000 +1200 @@ -25,10 +25,6 @@ STUB_RETVAL(0.0) void -StatHist::clear() -STUB - -void StatHist::logInit(unsigned int i, double d1, double d2) STUB diff -u -r -N squid-3.2.0.17/src/tests/stub_store.cc squid-3.2.0.18/src/tests/stub_store.cc --- squid-3.2.0.17/src/tests/stub_store.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/tests/stub_store.cc 2012-06-29 13:38:29.000000000 +1200 @@ -21,7 +21,7 @@ HttpReply const *StoreEntry::getReply() const STUB_RETVAL(NULL) void StoreEntry::write(StoreIOBuffer) STUB bool StoreEntry::isAccepting() const STUB_RETVAL(false) -size_t StoreEntry::bytesWanted(Range const) const STUB_RETVAL(0) +size_t StoreEntry::bytesWanted(Range const, bool) const STUB_RETVAL(0) void StoreEntry::complete() STUB store_client_t StoreEntry::storeClientType() const STUB_RETVAL(STORE_NON_CLIENT) char const *StoreEntry::getSerialisedMetaData() STUB_RETVAL(NULL) diff -u -r -N squid-3.2.0.17/src/tests/testHttpParser.cc squid-3.2.0.18/src/tests/testHttpParser.cc --- squid-3.2.0.17/src/tests/testHttpParser.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/tests/testHttpParser.cc 2012-06-29 13:38:29.000000000 +1200 @@ -23,7 +23,7 @@ } void -testHttpParser::testParseRequestLine() +testHttpParser::testParseRequestLineProtocols() { // ensure MemPools etc exist globalSetup(); @@ -55,7 +55,29 @@ CPPUNIT_ASSERT_EQUAL(9, output.req.v_min); input.reset(); - // RFC 1945 and 2616 : HTTP/1.0 full-request + // RFC 1945 : invalid HTTP/0.9 simple-request (only GET is valid) +#if 0 + input.append("POST /\r\n", 7); + output.reset(input.content(), input.contentSize()); + CPPUNIT_ASSERT_EQUAL(1, HttpParserParseReqLine(&output)); + CPPUNIT_ASSERT_EQUAL(HTTP_OK, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(0, output.req.start); + CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); + CPPUNIT_ASSERT(memcmp("GET /\r\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); + CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); + CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start], (output.req.m_end-output.req.m_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); + CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start], (output.req.u_end-output.req.u_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(9, output.req.v_min); + input.reset(); +#endif + + // RFC 1945 and 2616 : HTTP/1.0 request input.append("GET / HTTP/1.0\r\n", 16); output.reset(input.content(), input.contentSize()); CPPUNIT_ASSERT_EQUAL(1, HttpParserParseReqLine(&output)); @@ -76,8 +98,7 @@ CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); input.reset(); - - // RFC 2616 : HTTP/1.1 full-request + // RFC 2616 : HTTP/1.1 request input.append("GET / HTTP/1.1\r\n", 16); output.reset(input.content(), input.contentSize()); CPPUNIT_ASSERT_EQUAL(1, HttpParserParseReqLine(&output)); @@ -99,6 +120,29 @@ input.reset(); // RFC 2616 : future version full-request + input.append("GET / HTTP/1.2\r\n", 16); + //printf("TEST: '%s'\n",input.content()); + output.reset(input.content(), input.contentSize()); + CPPUNIT_ASSERT_EQUAL(1, HttpParserParseReqLine(&output)); + CPPUNIT_ASSERT_EQUAL(HTTP_OK, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(0, output.req.start); + CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); + CPPUNIT_ASSERT(memcmp("GET / HTTP/1.2\r\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); + CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); + CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); + CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(6, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(13, output.req.v_end); + CPPUNIT_ASSERT(memcmp("HTTP/1.2", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(1, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(2, output.req.v_min); + input.reset(); + + // RFC 2616 : future version full-request + // XXX: IETF HTTPbis WG has made this two-digits format invalid. input.append("GET / HTTP/10.12\r\n", 18); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); @@ -120,51 +164,203 @@ CPPUNIT_ASSERT_EQUAL(12, output.req.v_min); input.reset(); - // space padded URL - input.append("GET / HTTP/1.1\r\n", 21); + // This stage of the parser does not yet accept non-HTTP protocol names. + // violations mode treats them as HTTP/0.9 requests! + input.append("GET / FOO/1.0\n", 14); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); +#if USE_HTTP_VIOLATIONS CPPUNIT_ASSERT_EQUAL(1, HttpParserParseReqLine(&output)); CPPUNIT_ASSERT_EQUAL(HTTP_OK, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(12, output.req.u_end); + CPPUNIT_ASSERT(memcmp("/ FOO/1.0", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(9, output.req.v_min); +#else + CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); + CPPUNIT_ASSERT_EQUAL(HTTP_HTTP_VERSION_NOT_SUPPORTED, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); + CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); +#endif CPPUNIT_ASSERT_EQUAL(0, output.req.start); CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); - CPPUNIT_ASSERT(memcmp("GET / HTTP/1.1\r\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); + CPPUNIT_ASSERT(memcmp("GET / FOO/1.0\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(5, output.req.u_start); - CPPUNIT_ASSERT_EQUAL(5, output.req.u_end); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(6, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(12, output.req.v_end); + CPPUNIT_ASSERT(memcmp("FOO/1.0", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); + input.reset(); + + // no version + input.append("GET / HTTP/\n", 12); + //printf("TEST: '%s'\n",input.content()); + output.reset(input.content(), input.contentSize()); + CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); + CPPUNIT_ASSERT_EQUAL(HTTP_HTTP_VERSION_NOT_SUPPORTED, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(0, output.req.start); + CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); + CPPUNIT_ASSERT(memcmp("GET / HTTP/\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); + CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); + CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(11, output.req.v_start); - CPPUNIT_ASSERT_EQUAL(18, output.req.v_end); - CPPUNIT_ASSERT(memcmp("HTTP/1.1", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(1, output.req.v_maj); - CPPUNIT_ASSERT_EQUAL(1, output.req.v_min); + CPPUNIT_ASSERT_EQUAL(6, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(10, output.req.v_end); + CPPUNIT_ASSERT(memcmp("HTTP/", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); input.reset(); - // space padded version - // RFC 1945 and 2616 specify version is followed by CRLF. No intermediary bytes. - // NP: the terminal whitespace is a special case: invalid for even HTTP/0.9 with no version tag - input.append("GET / HTTP/1.1 \n", 16); + // no major version + input.append("GET / HTTP/.1\n", 14); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); - CPPUNIT_ASSERT_EQUAL(HTTP_BAD_REQUEST, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(HTTP_HTTP_VERSION_NOT_SUPPORTED, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); - CPPUNIT_ASSERT(memcmp("GET / HTTP/1.1 \n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); + CPPUNIT_ASSERT(memcmp("GET / HTTP/.1\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); - CPPUNIT_ASSERT_EQUAL(13, output.req.u_end); - CPPUNIT_ASSERT(memcmp("/ HTTP/1.1", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); + CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(6, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(12, output.req.v_end); + CPPUNIT_ASSERT(memcmp("HTTP/.1", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); + input.reset(); + + // no version dot + input.append("GET / HTTP/11\n", 14); + //printf("TEST: '%s'\n",input.content()); + output.reset(input.content(), input.contentSize()); + CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); + CPPUNIT_ASSERT_EQUAL(HTTP_HTTP_VERSION_NOT_SUPPORTED, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(0, output.req.start); + CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); + CPPUNIT_ASSERT(memcmp("GET / HTTP/11\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); + CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); + CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); + CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(6, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(12, output.req.v_end); + CPPUNIT_ASSERT(memcmp("HTTP/11", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); + input.reset(); + + // negative major version (bug 3062) + input.append("GET / HTTP/-999999.1\n", 21); + //printf("TEST: '%s'\n",input.content()); + output.reset(input.content(), input.contentSize()); + CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); + CPPUNIT_ASSERT_EQUAL(HTTP_HTTP_VERSION_NOT_SUPPORTED, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(0, output.req.start); + CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); + CPPUNIT_ASSERT(memcmp("GET / HTTP/-999999.1\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); + CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); + CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); + CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(6, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(19, output.req.v_end); + CPPUNIT_ASSERT(memcmp("HTTP/-999999.1", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); input.reset(); + // no minor version + input.append("GET / HTTP/1.\n", 14); + //printf("TEST: '%s'\n",input.content()); + output.reset(input.content(), input.contentSize()); + CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); + CPPUNIT_ASSERT_EQUAL(HTTP_HTTP_VERSION_NOT_SUPPORTED, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(0, output.req.start); + CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); + CPPUNIT_ASSERT(memcmp("GET / HTTP/1.\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); + CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); + CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); + CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(6, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(12, output.req.v_end); + CPPUNIT_ASSERT(memcmp("HTTP/1.", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(1, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); + input.reset(); + + // negative major version (bug 3062 corollary) + input.append("GET / HTTP/1.-999999\n", 21); + //printf("TEST: '%s'\n",input.content()); + output.reset(input.content(), input.contentSize()); + CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); + CPPUNIT_ASSERT_EQUAL(HTTP_HTTP_VERSION_NOT_SUPPORTED, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(0, output.req.start); + CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); + CPPUNIT_ASSERT(memcmp("GET / HTTP/1.-999999\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); + CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); + CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); + CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(6, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(19, output.req.v_end); + CPPUNIT_ASSERT(memcmp("HTTP/1.-999999", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(1, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); + input.reset(); +} + +void +testHttpParser::testParseRequestLineStrange() +{ + // ensure MemPools etc exist + globalSetup(); + + MemBuf input; + HttpParser output; + input.init(); + + // space padded URL + input.append("GET / HTTP/1.1\r\n", 21); + //printf("TEST: '%s'\n",input.content()); + output.reset(input.content(), input.contentSize()); + CPPUNIT_ASSERT_EQUAL(1, HttpParserParseReqLine(&output)); + CPPUNIT_ASSERT_EQUAL(HTTP_OK, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(0, output.req.start); + CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); + CPPUNIT_ASSERT(memcmp("GET / HTTP/1.1\r\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); + CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); + CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(5, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(5, output.req.u_end); + CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(11, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(18, output.req.v_end); + CPPUNIT_ASSERT(memcmp("HTTP/1.1", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(1, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(1, output.req.v_min); + input.reset(); + // whitespace inside URI. (nasty but happens) input.append("GET /fo o/ HTTP/1.1\n", 20); //printf("TEST: '%s'\n",input.content()); @@ -208,6 +404,17 @@ CPPUNIT_ASSERT_EQUAL(1, output.req.v_maj); CPPUNIT_ASSERT_EQUAL(1, output.req.v_min); input.reset(); +} + +void +testHttpParser::testParseRequestLineTerminators() +{ + // ensure MemPools etc exist + globalSetup(); + + MemBuf input; + HttpParser output; + input.init(); // alternative EOL sequence: NL-only input.append("GET / HTTP/1.1\n", 15); @@ -297,6 +504,110 @@ CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); input.reset(); + // space padded version + // RFC 1945 and 2616 specify version is followed by CRLF. No intermediary bytes. + // NP: the terminal whitespace is a special case: invalid for even HTTP/0.9 with no version tag + input.append("GET / HTTP/1.1 \n", 16); + //printf("TEST: '%s'\n",input.content()); + output.reset(input.content(), input.contentSize()); + CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); + CPPUNIT_ASSERT_EQUAL(HTTP_BAD_REQUEST, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(0, output.req.start); + CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); + CPPUNIT_ASSERT(memcmp("GET / HTTP/1.1 \n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); + CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); + CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(13, output.req.u_end); + CPPUNIT_ASSERT(memcmp("/ HTTP/1.1", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); + input.reset(); + + // incomplete line at various positions + + input.append("GET", 3); + //printf("TEST: '%s'\n",input.content()); + output.reset(input.content(), input.contentSize()); + CPPUNIT_ASSERT_EQUAL(0, HttpParserParseReqLine(&output)); + CPPUNIT_ASSERT_EQUAL(HTTP_STATUS_NONE, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(0, output.req.start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.m_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); + input.reset(); + + input.append("GET ", 4); + //printf("TEST: '%s'\n",input.content()); + output.reset(input.content(), input.contentSize()); + CPPUNIT_ASSERT_EQUAL(0, HttpParserParseReqLine(&output)); + CPPUNIT_ASSERT_EQUAL(HTTP_STATUS_NONE, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(0, output.req.start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.m_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); + input.reset(); + + input.append("GET / HT", 8); + //printf("TEST: '%s'\n",input.content()); + output.reset(input.content(), input.contentSize()); + CPPUNIT_ASSERT_EQUAL(0, HttpParserParseReqLine(&output)); + CPPUNIT_ASSERT_EQUAL(HTTP_STATUS_NONE, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(0, output.req.start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.m_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); + input.reset(); + + input.append("GET / HTTP/1.1", 14); + //printf("TEST: '%s'\n",input.content()); + output.reset(input.content(), input.contentSize()); + CPPUNIT_ASSERT_EQUAL(0, HttpParserParseReqLine(&output)); + CPPUNIT_ASSERT_EQUAL(HTTP_STATUS_NONE, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(0, output.req.start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.m_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); + input.reset(); +} + +void +testHttpParser::testParseRequestLineMethods() +{ + // ensure MemPools etc exist + globalSetup(); + + MemBuf input; + HttpParser output; + input.init(); + // RFC 2616 : . method input.append(". / HTTP/1.1\n", 13); //printf("TEST: '%s'\n",input.content()); @@ -363,36 +674,41 @@ CPPUNIT_ASSERT_EQUAL(1, output.req.v_min); input.reset(); - // This stage of the parser does not yet accept non-HTTP protocol names. - // violations mode treats them as HTTP/0.9 requests! - input.append("GET / FOO/1.0\n", 14); + // method-only + input.append("A\n", 2); + //printf("TEST: '%s'\n",input.content()); + output.reset(input.content(), input.contentSize()); + CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); + CPPUNIT_ASSERT_EQUAL(HTTP_BAD_REQUEST, output.request_parse_status); + CPPUNIT_ASSERT_EQUAL(0, output.req.start); + CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); + CPPUNIT_ASSERT(memcmp("A\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); + input.reset(); + + input.append("GET\n", 4); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); -#if USE_HTTP_VIOLATIONS - CPPUNIT_ASSERT_EQUAL(1, HttpParserParseReqLine(&output)); - CPPUNIT_ASSERT_EQUAL(HTTP_OK, output.request_parse_status); - CPPUNIT_ASSERT_EQUAL(12, output.req.u_end); - CPPUNIT_ASSERT(memcmp("/ FOO/1.0", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); - CPPUNIT_ASSERT_EQUAL(9, output.req.v_min); -#else CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); - CPPUNIT_ASSERT_EQUAL(HTTP_HTTP_VERSION_NOT_SUPPORTED, output.request_parse_status); - CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); - CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); -#endif + CPPUNIT_ASSERT_EQUAL(HTTP_BAD_REQUEST, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); - CPPUNIT_ASSERT(memcmp("GET / FOO/1.0\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); + CPPUNIT_ASSERT(memcmp("GET\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); - CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); - CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); - CPPUNIT_ASSERT_EQUAL(6, output.req.v_start); - CPPUNIT_ASSERT_EQUAL(12, output.req.v_end); - CPPUNIT_ASSERT(memcmp("FOO/1.0", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); + CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); + CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); input.reset(); // RELAXED space padded method (in strict mode SP is reserved so invalid as a method byte) @@ -459,95 +775,20 @@ CPPUNIT_ASSERT_EQUAL(1, output.req.v_maj); CPPUNIT_ASSERT_EQUAL(1, output.req.v_min); input.reset(); +} - input.append("GET", 3); - //printf("TEST: '%s'\n",input.content()); - output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(0, HttpParserParseReqLine(&output)); - CPPUNIT_ASSERT_EQUAL(HTTP_STATUS_NONE, output.request_parse_status); - CPPUNIT_ASSERT_EQUAL(0, output.req.start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.end); - CPPUNIT_ASSERT_EQUAL(-1, output.req.m_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end); - CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end); - CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); - input.reset(); - - input.append("GET ", 4); - //printf("TEST: '%s'\n",input.content()); - output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(0, HttpParserParseReqLine(&output)); - CPPUNIT_ASSERT_EQUAL(HTTP_STATUS_NONE, output.request_parse_status); - CPPUNIT_ASSERT_EQUAL(0, output.req.start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.end); - CPPUNIT_ASSERT_EQUAL(-1, output.req.m_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end); - CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end); - CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); - input.reset(); - - input.append("GET / HT", 8); - //printf("TEST: '%s'\n",input.content()); - output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(0, HttpParserParseReqLine(&output)); - CPPUNIT_ASSERT_EQUAL(HTTP_STATUS_NONE, output.request_parse_status); - CPPUNIT_ASSERT_EQUAL(0, output.req.start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.end); - CPPUNIT_ASSERT_EQUAL(-1, output.req.m_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end); - CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end); - CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); - input.reset(); - - input.append("GET / HTTP/1.1", 14); - //printf("TEST: '%s'\n",input.content()); - output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(0, HttpParserParseReqLine(&output)); - CPPUNIT_ASSERT_EQUAL(HTTP_STATUS_NONE, output.request_parse_status); - CPPUNIT_ASSERT_EQUAL(0, output.req.start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.end); - CPPUNIT_ASSERT_EQUAL(-1, output.req.m_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end); - CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end); - CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); - input.reset(); +void +testHttpParser::testParseRequestLineInvalid() +{ + // ensure MemPools etc exist + globalSetup(); - // method-only - input.append("A\n", 2); - //printf("TEST: '%s'\n",input.content()); - output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); - CPPUNIT_ASSERT_EQUAL(HTTP_BAD_REQUEST, output.request_parse_status); - CPPUNIT_ASSERT_EQUAL(0, output.req.start); - CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); - CPPUNIT_ASSERT(memcmp("A\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end); - CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end); - CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start); - CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); - input.reset(); + MemBuf input; + HttpParser output; + input.init(); // no method (but in a form which is ambiguous with HTTP/0.9 simple-request) + // XXX: Bug: HTTP/0.9 requires method to be "GET" input.append("/ HTTP/1.0\n", 11); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); @@ -717,138 +958,6 @@ CPPUNIT_ASSERT_EQUAL(9, output.req.v_min); input.reset(); - // no version - input.append("GET / HTTP/\n", 12); - //printf("TEST: '%s'\n",input.content()); - output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); - CPPUNIT_ASSERT_EQUAL(HTTP_HTTP_VERSION_NOT_SUPPORTED, output.request_parse_status); - CPPUNIT_ASSERT_EQUAL(0, output.req.start); - CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); - CPPUNIT_ASSERT(memcmp("GET / HTTP/\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); - CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); - CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); - CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); - CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(6, output.req.v_start); - CPPUNIT_ASSERT_EQUAL(10, output.req.v_end); - CPPUNIT_ASSERT(memcmp("HTTP/", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); - input.reset(); - - // no major version - input.append("GET / HTTP/.1\n", 14); - //printf("TEST: '%s'\n",input.content()); - output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); - CPPUNIT_ASSERT_EQUAL(HTTP_HTTP_VERSION_NOT_SUPPORTED, output.request_parse_status); - CPPUNIT_ASSERT_EQUAL(0, output.req.start); - CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); - CPPUNIT_ASSERT(memcmp("GET / HTTP/.1\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); - CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); - CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); - CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); - CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(6, output.req.v_start); - CPPUNIT_ASSERT_EQUAL(12, output.req.v_end); - CPPUNIT_ASSERT(memcmp("HTTP/.1", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); - input.reset(); - - // no version dot - input.append("GET / HTTP/11\n", 14); - //printf("TEST: '%s'\n",input.content()); - output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); - CPPUNIT_ASSERT_EQUAL(HTTP_HTTP_VERSION_NOT_SUPPORTED, output.request_parse_status); - CPPUNIT_ASSERT_EQUAL(0, output.req.start); - CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); - CPPUNIT_ASSERT(memcmp("GET / HTTP/11\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); - CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); - CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); - CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); - CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(6, output.req.v_start); - CPPUNIT_ASSERT_EQUAL(12, output.req.v_end); - CPPUNIT_ASSERT(memcmp("HTTP/11", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); - input.reset(); - - // negative major version (bug 3062) - input.append("GET / HTTP/-999999.1\n", 21); - //printf("TEST: '%s'\n",input.content()); - output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); - CPPUNIT_ASSERT_EQUAL(HTTP_HTTP_VERSION_NOT_SUPPORTED, output.request_parse_status); - CPPUNIT_ASSERT_EQUAL(0, output.req.start); - CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); - CPPUNIT_ASSERT(memcmp("GET / HTTP/-999999.1\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); - CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); - CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); - CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); - CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(6, output.req.v_start); - CPPUNIT_ASSERT_EQUAL(19, output.req.v_end); - CPPUNIT_ASSERT(memcmp("HTTP/-999999.1", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_maj); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); - input.reset(); - - // no minor version - input.append("GET / HTTP/1.\n", 14); - //printf("TEST: '%s'\n",input.content()); - output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); - CPPUNIT_ASSERT_EQUAL(HTTP_HTTP_VERSION_NOT_SUPPORTED, output.request_parse_status); - CPPUNIT_ASSERT_EQUAL(0, output.req.start); - CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); - CPPUNIT_ASSERT(memcmp("GET / HTTP/1.\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); - CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); - CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); - CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); - CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(6, output.req.v_start); - CPPUNIT_ASSERT_EQUAL(12, output.req.v_end); - CPPUNIT_ASSERT(memcmp("HTTP/1.", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(1, output.req.v_maj); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); - input.reset(); - - // negative major version (bug 3062 corollary) - input.append("GET / HTTP/1.-999999\n", 21); - //printf("TEST: '%s'\n",input.content()); - output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(-1, HttpParserParseReqLine(&output)); - CPPUNIT_ASSERT_EQUAL(HTTP_HTTP_VERSION_NOT_SUPPORTED, output.request_parse_status); - CPPUNIT_ASSERT_EQUAL(0, output.req.start); - CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end); - CPPUNIT_ASSERT(memcmp("GET / HTTP/1.-999999\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(0, output.req.m_start); - CPPUNIT_ASSERT_EQUAL(2, output.req.m_end); - CPPUNIT_ASSERT(memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(4, output.req.u_start); - CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); - CPPUNIT_ASSERT(memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(6, output.req.v_start); - CPPUNIT_ASSERT_EQUAL(19, output.req.v_end); - CPPUNIT_ASSERT(memcmp("HTTP/1.-999999", &output.buf[output.req.v_start],(output.req.v_end-output.req.v_start+1)) == 0); - CPPUNIT_ASSERT_EQUAL(1, output.req.v_maj); - CPPUNIT_ASSERT_EQUAL(0, output.req.v_min); - input.reset(); - // binary line input.append("\xB\xC\xE\xF\n", 5); //printf("TEST: binary-line\n"); diff -u -r -N squid-3.2.0.17/src/tests/testHttpParser.h squid-3.2.0.18/src/tests/testHttpParser.h --- squid-3.2.0.17/src/tests/testHttpParser.h 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/tests/testHttpParser.h 2012-06-29 13:38:29.000000000 +1200 @@ -6,12 +6,22 @@ class testHttpParser : public CPPUNIT_NS::TestFixture { CPPUNIT_TEST_SUITE( testHttpParser ); - CPPUNIT_TEST( testParseRequestLine ); + CPPUNIT_TEST( testParseRequestLineTerminators ); + CPPUNIT_TEST( testParseRequestLineMethods ); + CPPUNIT_TEST( testParseRequestLineProtocols ); + CPPUNIT_TEST( testParseRequestLineStrange ); + CPPUNIT_TEST( testParseRequestLineInvalid ); CPPUNIT_TEST_SUITE_END(); protected: void globalSetup(); // MemPools init etc. - void testParseRequestLine(); + + // request-line unit tests + void testParseRequestLineTerminators(); // terminator detection correct + void testParseRequestLineMethods(); // methoid detection correct + void testParseRequestLineProtocols(); // protocol tokens handled correctly + void testParseRequestLineStrange(); // strange but valid lines accepted + void testParseRequestLineInvalid(); // rejection of invalid lines happens }; #endif diff -u -r -N squid-3.2.0.17/src/tools.cc squid-3.2.0.18/src/tools.cc --- squid-3.2.0.17/src/tools.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/tools.cc 2012-06-29 13:38:29.000000000 +1200 @@ -35,11 +35,12 @@ #include "squid-old.h" #include "base/Subscription.h" #include "fde.h" +#include "htcp.h" #include "ICP.h" #include "ip/Intercept.h" #include "ip/QosConfig.h" #include "MemBuf.h" -#include "ProtoPort.h" +#include "anyp/PortCfg.h" #include "SquidMath.h" #include "SquidTime.h" #include "ipc/Kids.h" @@ -88,19 +89,16 @@ void releaseServerSockets(void) { - int i; - /* Release the main ports as early as possible */ + // Release the main ports as early as possible // clear both http_port and https_port lists. - for (i = 0; i < NHttpSockets; i++) { - if (HttpSockets[i] >= 0) - close(HttpSockets[i]); - } + clientHttpConnectionsClose(); // clear icp_port's - icpConnectionClose(); + icpClosePorts(); // XXX: Why not the HTCP, SNMP, DNS ports as well? + // XXX: why does this differ from main closeServerConnections() anyway ? } static char * @@ -178,7 +176,7 @@ mp = mallinfo(); - fprintf(debug_log, "Memory usage for "APP_SHORTNAME" via mallinfo():\n"); + fprintf(debug_log, "Memory usage for " APP_SHORTNAME " via mallinfo():\n"); fprintf(debug_log, "\ttotal space in arena: %6ld KB\n", (long)mp.arena >> 10); @@ -1258,7 +1256,7 @@ int getMyPort(void) { - http_port_list *p = NULL; + AnyP::PortCfg *p = NULL; if ((p = Config.Sockaddr.http)) { // skip any special interception ports while (p && (p->intercepted || p->spoof_client_ip)) diff -u -r -N squid-3.2.0.17/src/url.cc squid-3.2.0.18/src/url.cc --- squid-3.2.0.17/src/url.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/url.cc 2012-06-29 13:38:29.000000000 +1200 @@ -268,8 +268,10 @@ src += 3; /* Then everything until first /; thats host (and port; which we'll look for here later) */ - /* bug 1881: If we don't get a "/" then we imply it was there */ - for (dst = host; i < l && *src != '/' && *src != '\0'; i++, src++, dst++) { + // bug 1881: If we don't get a "/" then we imply it was there + // bug 3074: We could just be given a "?" or "#". These also imply "/" + // bug 3233: whitespace is also a hostname delimiter. + for (dst = host; i < l && *src != '/' && *src != '?' && *src != '#' && *src != '\0' && !xisspace(*src); i++, src++, dst++) { *dst = *src; } @@ -282,8 +284,15 @@ return NULL; *dst = '\0'; + // bug 3074: received 'path' starting with '?', '#', or '\0' implies '/' + if (*src == '?' || *src == '#' || *src == '\0') { + urlpath[0] = '/'; + dst = &urlpath[1]; + } else { + dst = urlpath; + } /* Then everything from / (inclusive) until \r\n or \0 - thats urlpath */ - for (dst = urlpath; i < l && *src != '\r' && *src != '\n' && *src != '\0'; i++, src++, dst++) { + for (; i < l && *src != '\r' && *src != '\n' && *src != '\0'; i++, src++, dst++) { *dst = *src; } diff -u -r -N squid-3.2.0.17/src/win32.cc squid-3.2.0.18/src/win32.cc --- squid-3.2.0.17/src/win32.cc 2012-04-13 01:43:26.000000000 +1200 +++ squid-3.2.0.18/src/win32.cc 2012-06-29 13:38:29.000000000 +1200 @@ -159,9 +159,8 @@ return 0; } - -int Win32__WSAFDIsSet(int fd, fd_set FAR * set - ) +int +Win32__WSAFDIsSet(int fd, fd_set FAR * set) { fde *F = &fd_table[fd]; SOCKET s = F->win32.handle; diff -u -r -N squid-3.2.0.17/test-suite/Makefile.in squid-3.2.0.18/test-suite/Makefile.in --- squid-3.2.0.17/test-suite/Makefile.in 2012-04-13 01:46:18.000000000 +1200 +++ squid-3.2.0.18/test-suite/Makefile.in 2012-06-29 13:39:21.000000000 +1200 @@ -223,6 +223,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/tools/Makefile.in squid-3.2.0.18/tools/Makefile.in --- squid-3.2.0.17/tools/Makefile.in 2012-04-13 01:46:18.000000000 +1200 +++ squid-3.2.0.18/tools/Makefile.in 2012-06-29 13:39:21.000000000 +1200 @@ -228,6 +228,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ diff -u -r -N squid-3.2.0.17/tools/purge/Makefile.in squid-3.2.0.18/tools/purge/Makefile.in --- squid-3.2.0.17/tools/purge/Makefile.in 2012-04-13 01:46:19.000000000 +1200 +++ squid-3.2.0.18/tools/purge/Makefile.in 2012-06-29 13:39:21.000000000 +1200 @@ -145,6 +145,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPOLL_LIBS = @EPOLL_LIBS@ +EUILIB = @EUILIB@ EXEEXT = @EXEEXT@ EXPATLIB = @EXPATLIB@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@