diff -u -r -N squid-3.2.0.13/acinclude/compiler-flags.m4 squid-3.2.0.14/acinclude/compiler-flags.m4 --- squid-3.2.0.13/acinclude/compiler-flags.m4 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/acinclude/compiler-flags.m4 2011-12-13 00:08:18.000000000 +1300 @@ -47,19 +47,6 @@ }]) ]) -# check if the c++ compiler supports the -fhuge-objects flag -# sets the variable squid_cv_cxx_arg_fhugeobjects to either "yes" or "no" -# -AC_DEFUN([SQUID_CXX_CHECK_ARG_FHUGEOBJECTS],[ - AC_LANG_PUSH([C++]) - if test "$GCC" = "yes"; then - SQUID_CC_CHECK_ARGUMENT([squid_cv_cxx_arg_fhugeobjects],[-Werror -fhuge-objects]) - else - squid_cv_cxx_arg_fhugeobjects=no - fi - AC_LANG_POP([C++]) -]) - # 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.13/ChangeLog squid-3.2.0.14/ChangeLog --- squid-3.2.0.13/ChangeLog 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/ChangeLog 2011-12-13 00:08:18.000000000 +1300 @@ -1,3 +1,29 @@ +Changes to squid-3.2.0.14 (12 Dec 2011): + + - Bug 3433: Segfault closing SNMP + - Bug 3420: Request body consumption races and !theConsumer exception. + - Bug 3406: SSL Log Error in debug + - Bug 3383: store.cc:1631: "new_status != IN_MEMORY" assertion + - Bug 3383: unhandled exception: theGroupBSize > 0 + - Bug 3377: assertion failed: store.cc:885: "store_status == STORE_PENDING" + - Bug 3367: fix inverted check on host_strict_verify + - Bug 3366: assertion comm.cc:1276: isOpen(fd) via CompositePoolNode::kickReads + - Bug 3364: SNMP Orphans + - Bug 3301: ERR_DNS_FAIL never shown + - Bug 3150: do not start useless unlinkd + - ext_session_acl: version 1.2 + - Add adaptation_meta option + - Add a mask on the qos_flows miss configuration value + - Support intermediate CA in ssl-bump traffic certificates + - Support SSL certificate failure details on error page + - Fix flags for NAT intercept and TPROXY not set correctly + - Fix fastCheck() default result on multi-line actions + - Fix missing SMP shared memory statistics + - Fix Comm::Write closing() assertion when retrying a failed UDP DNS query + - ... and several other TCP and SMP support behaviour fixes + - ... and many code polishing cleanups and fixed build errors + - ... and several documentation polishings + Changes to squid-3.2.0.13 (14 Oct 2011): - Regression Bug 3363: never_direct always 'unable to forward this request at this time' @@ -286,6 +312,29 @@ - ... and a great many testing improvements - ... and many documentation updates +Changes to squid-3.1.18 (03 Dec 2011): + + - Regression: compile error in FTP + +Changes to squid-3.1.17 (03 Dec 2011): + + - Bug 3432: Crash logging FTP errors + - Bug 3428: Active FTP data channel accepted twice + - Bug 3423: access violation in URL parser + - Bug 3422: Buffer overflow in recv-announce + - Bug 3412: External ACL Uses Invalid Cache Entry + - Bug 3408: Wrong header length leads to EFAULTs when creating UFS swap.log.new + - Bug 3398: persistent server connection closed after PUT/DELETE + - Bug 3299: dnsserver: various undefined references + - Bug 3077: '\' in url query strings cause Digest authentication to fail + - Bug 2910: MemBuf may grow beyond max_capacity + - Bug 2619: Excessive RAM growth due to unlimited adapted body data consumption + - Bug 1243: Build overrides configured AR setting + - Avoid crashes when processing bad X509 common names (CN). + - Support %% in external ACL format + - ... and several other compile error fixes + - ... and several documentation fixes + Changes to squid-3.1.16 (14 Oct 2011): - Bug 3373: invalid URL in ERR_CACHE_ACCESS_DENIED diff -u -r -N squid-3.2.0.13/compat/Makefile.am squid-3.2.0.14/compat/Makefile.am --- squid-3.2.0.13/compat/Makefile.am 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/compat/Makefile.am 2011-12-13 00:08:18.000000000 +1300 @@ -31,12 +31,15 @@ initgroups.h \ osdetect.h \ psignal.h \ + shm.cc \ shm.h \ stdio.h \ stdvarargs.h \ strnstr.cc \ strsep.h \ strtoll.h \ + strnrchr.h \ + strnrchr.c \ tempnam.h \ types.h \ unsafe.h \ diff -u -r -N squid-3.2.0.13/compat/Makefile.in squid-3.2.0.14/compat/Makefile.in --- squid-3.2.0.13/compat/Makefile.in 2011-10-14 14:46:37.000000000 +1300 +++ squid-3.2.0.14/compat/Makefile.in 2011-12-13 00:10:09.000000000 +1300 @@ -66,9 +66,10 @@ libcompat_squid_a_AR = $(AR) $(ARFLAGS) libcompat_squid_a_DEPENDENCIES = $(LIBOBJS) am_libcompat_squid_a_OBJECTS = assert.$(OBJEXT) compat.$(OBJEXT) \ - debug.$(OBJEXT) GnuRegex.$(OBJEXT) strnstr.$(OBJEXT) \ - xalloc.$(OBJEXT) xstrerror.$(OBJEXT) xstring.$(OBJEXT) \ - xstrto.$(OBJEXT) mswin.$(OBJEXT) + debug.$(OBJEXT) GnuRegex.$(OBJEXT) shm.$(OBJEXT) \ + strnstr.$(OBJEXT) strnrchr.$(OBJEXT) xalloc.$(OBJEXT) \ + xstrerror.$(OBJEXT) xstring.$(OBJEXT) xstrto.$(OBJEXT) \ + mswin.$(OBJEXT) libcompat_squid_a_OBJECTS = $(am_libcompat_squid_a_OBJECTS) am_testPreCompiler_OBJECTS = testPreCompiler.$(OBJEXT) \ testMain.$(OBJEXT) @@ -353,12 +354,15 @@ initgroups.h \ osdetect.h \ psignal.h \ + shm.cc \ shm.h \ stdio.h \ stdvarargs.h \ strnstr.cc \ strsep.h \ strtoll.h \ + strnrchr.h \ + strnrchr.c \ tempnam.h \ types.h \ unsafe.h \ @@ -477,6 +481,8 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mswin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnrchr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnstr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testMain.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testPreCompiler.Po@am__quote@ diff -u -r -N squid-3.2.0.13/compat/shm.cc squid-3.2.0.14/compat/shm.cc --- squid-3.2.0.13/compat/shm.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/compat/shm.cc 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,28 @@ +#include "config.h" +#include "compat/shm.h" + +#if _SQUID_FREEBSD_ && (__FreeBSD__ >= 7) +#include +#endif + + +/* + * Some systems have filesystem-based resources and interpret segment names + * as file paths. The so-called 'portable' "/name" format does not work well + * for them. And, according to Boost::interprocess, recent FreeBSD versions + * make this decision depending on whether the shm_open() caller is jailed! + */ +bool +shm_portable_segment_name_is_path() +{ +#if _SQUID_HPUX_ || _SQUID_OSF_ || defined(__vms) || (_SQUID_FREEBSD_ && (__FreeBSD__ < 7)) + return true; +#elif _SQUID_FREEBSD_ + int jailed = 0; + size_t len = sizeof(jailed); + ::sysctlbyname("security.jail.jailed", &jailed, &len, NULL, 0); + return !jailed; +#else + return false; +#endif +} diff -u -r -N squid-3.2.0.13/compat/shm.h squid-3.2.0.14/compat/shm.h --- squid-3.2.0.13/compat/shm.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/compat/shm.h 2011-12-13 00:08:18.000000000 +1300 @@ -42,4 +42,8 @@ #endif /* HAVE_SHM */ + +/// Determines whether segment names are iterpreted as full file paths. +bool shm_portable_segment_name_is_path(); + #endif /* SQUID_COMPAT_CPU_H */ diff -u -r -N squid-3.2.0.13/compat/stdvarargs.h squid-3.2.0.14/compat/stdvarargs.h --- squid-3.2.0.13/compat/stdvarargs.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/compat/stdvarargs.h 2011-12-13 00:08:18.000000000 +1300 @@ -3,28 +3,35 @@ /* * va_* variables come from various places on different platforms. - * We provide a clean set of wrappers for the variosu operations + * We provide a clean set of wrappers for the various operations * Depending on what is available and needed. */ -#if defined(HAVE_STDARG_H) +#if HAVE_CSTDARG && defined(__cplusplus) +#include + +#else +#if HAVE_STDARG_H #include #define HAVE_STDARGS /* let's hope that works everywhere (mj) */ #define VA_LOCAL_DECL va_list ap; #define VA_START(f) va_start(ap, f) #define VA_SHIFT(v,t) ; /* no-op for ANSI */ #define VA_END va_end(ap) + #else -#if defined(HAVE_VARARGS_H) +#if HAVE_VARARGS_H #include #undef HAVE_STDARGS #define VA_LOCAL_DECL va_list ap; #define VA_START(f) va_start(ap) /* f is ignored! */ #define VA_SHIFT(v,t) v = va_arg(ap,t) #define VA_END va_end(ap) + #else #error XX **NO VARARGS ** XX -#endif -#endif +#endif /* HAVE_VARARGS_H */ +#endif /* HAVE_STDARG_H */ +#endif /* HAVE_CSTDARG */ /* Make sure syslog goes after stdarg/varargs */ #if HAVE_SYSLOG_H diff -u -r -N squid-3.2.0.13/compat/strnrchr.c squid-3.2.0.14/compat/strnrchr.c --- squid-3.2.0.13/compat/strnrchr.c 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/compat/strnrchr.c 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,46 @@ +/* + * strnrchr.c + * + * 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 "config.h" +#include "strnrchr.h" + +const char * +strnrchr(const char *s, size_t count, int c) +{ + const char *rv=NULL; + const char *l=s; + while (count > 0 && *l != 0) { + if (*l==c) + rv=l; + ++l; + --count; + } + return rv; +} diff -u -r -N squid-3.2.0.13/compat/strnrchr.h squid-3.2.0.14/compat/strnrchr.h --- squid-3.2.0.13/compat/strnrchr.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/compat/strnrchr.h 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,46 @@ +/* + * strnrchr.h + * + * SQUID Web Proxy Cache http://www.squid-cache.org/ + * ---------------------------------------------------------- + * + * Squid is the result of efforts by numerous individuals from + * the Internet community; see the CONTRIBUTORS file for full + * details. Many organizations have provided support for Squid's + * development; see the SPONSORS file for full details. Squid is + * Copyrighted (C) 2001 by the Regents of the University of + * California; see the COPYRIGHT file for full details. Squid + * incorporates software developed and/or copyrighted by other + * sources; see the CREDITS file for full details. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. + */ + +#ifndef COMPAT_STRNRCHR_H_ +#define COMPAT_STRNRCHR_H_ + +#if HAVE_STDDEF_H +#include +#endif + +/** + * look for the last occurrence of a character in a c-string. + * + * Scanning starts at the beginning of the c-string, and ends + * after count bytes or at the end of the c-string, whichever happens first + */ +SQUIDCEXTERN const char *strnrchr(const char *s, size_t count, int c); + +#endif /* COMPAT_STRNRCHR_H_ */ diff -u -r -N squid-3.2.0.13/compat/strnstr.cc squid-3.2.0.14/compat/strnstr.cc --- squid-3.2.0.13/compat/strnstr.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/compat/strnstr.cc 2011-12-13 00:08:18.000000000 +1300 @@ -1,5 +1,5 @@ -#ifndef _SQUID_COMPAT_STRNSTR_CC_ -#define _SQUID_COMPAT_STRNSTR_CC_ +#ifndef SQUID_COMPAT_STRNSTR_CC_ +#define SQUID_COMPAT_STRNSTR_CC_ /* * Shamelessly duplicated from the FreeBSD public sources @@ -93,4 +93,4 @@ } #endif /* !HAVE_STRNSTR */ -#endif /* _SQUID_COMPAT_STRNSTR_CC_ */ +#endif /* SQUID_COMPAT_STRNSTR_CC_ */ diff -u -r -N squid-3.2.0.13/compat/xstring.h squid-3.2.0.14/compat/xstring.h --- squid-3.2.0.13/compat/xstring.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/compat/xstring.h 2011-12-13 00:08:18.000000000 +1300 @@ -1,5 +1,5 @@ -#ifndef _SQUID_COMPAT_XSTRING_H -#define _SQUID_COMPAT_XSTRING_H +#ifndef SQUID_COMPAT_XSTRING_H +#define SQUID_COMPAT_XSTRING_H #if HAVE_STRING_H #include @@ -54,4 +54,4 @@ } #endif -#endif /* _SQUID_COMPAT_XSTRING_H */ +#endif /* SQUID_COMPAT_XSTRING_H */ diff -u -r -N squid-3.2.0.13/compat/xstrto.cc squid-3.2.0.14/compat/xstrto.cc --- squid-3.2.0.13/compat/xstrto.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/compat/xstrto.cc 2011-12-13 00:08:18.000000000 +1300 @@ -1,5 +1,5 @@ -#ifndef _SQUID_XSTRTO_C_ -#define _SQUID_XSTRTO_C_ +#ifndef SQUID_XSTRTO_C_ +#define SQUID_XSTRTO_C_ /* * Shamelessly duplicated from the netfilter iptables sources @@ -92,4 +92,4 @@ return ret; } -#endif /* _SQUID_XSTRTO_C_ */ +#endif /* SQUID_XSTRTO_C_ */ diff -u -r -N squid-3.2.0.13/configure squid-3.2.0.14/configure --- squid-3.2.0.13/configure 2011-10-14 14:49:52.000000000 +1300 +++ squid-3.2.0.14/configure 2011-12-13 00:11:47.000000000 +1300 @@ -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.13. +# Generated by GNU Autoconf 2.68 for Squid Web Proxy 3.2.0.14. # # Report bugs to . # @@ -575,8 +575,8 @@ # Identity of this package. PACKAGE_NAME='Squid Web Proxy' PACKAGE_TARNAME='squid' -PACKAGE_VERSION='3.2.0.13' -PACKAGE_STRING='Squid Web Proxy 3.2.0.13' +PACKAGE_VERSION='3.2.0.14' +PACKAGE_STRING='Squid Web Proxy 3.2.0.14' PACKAGE_BUGREPORT='http://www.squid-cache.org/bugs/' PACKAGE_URL='' @@ -1570,7 +1570,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.13 to adapt to many kinds of systems. +\`configure' configures Squid Web Proxy 3.2.0.14 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1640,7 +1640,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Squid Web Proxy 3.2.0.13:";; + short | recursive ) echo "Configuration of Squid Web Proxy 3.2.0.14:";; esac cat <<\_ACEOF @@ -2018,7 +2018,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Squid Web Proxy configure 3.2.0.13 +Squid Web Proxy configure 3.2.0.14 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -3114,7 +3114,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.13, which was +It was created by Squid Web Proxy $as_me 3.2.0.14, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -3933,7 +3933,7 @@ # Define the identity of the package. PACKAGE='squid' - VERSION='3.2.0.13' + VERSION='3.2.0.14' cat >>confdefs.h <<_ACEOF @@ -4120,11 +4120,6 @@ # -# check if the c++ compiler supports the -fhuge-objects flag -# sets the variable squid_cv_cxx_arg_fhugeobjects to either "yes" or "no" -# - - # 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 @@ -7194,7 +7189,8 @@ -# Extract the first word of "ar", so it can be a program name with args. +if test "x$AR" = "x"; then + # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } @@ -7235,6 +7231,7 @@ fi +fi AR_R="$AR r" @@ -18478,64 +18475,6 @@ SQUID_CXXFLAGS="$SQUID_CXXFLAGS $squid_cv_cxx_option_werror" fi - - 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 "$GCC" = "yes"; then - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler accepts -Werror -fhuge-objects" >&5 -$as_echo_n "checking whether compiler accepts -Werror -fhuge-objects... " >&6; } -if ${squid_cv_cxx_arg_fhugeobjects+:} false; then : - $as_echo_n "(cached) " >&6 -else - { - - SAVED_FLAGS="$CFLAGS" - SAVED_CXXFLAGS="$CXXFLAGS" - CFLAGS="$CXXFLAGS -Werror -fhuge-objects" - CXXFLAGS="$CXXFLAGS -Werror -fhuge-objects" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -int foo; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - squid_cv_cxx_arg_fhugeobjects=yes -else - squid_cv_cxx_arg_fhugeobjects=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" - CXXFLAGS="$SAVED_CXXFLAGS" - } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $squid_cv_cxx_arg_fhugeobjects" >&5 -$as_echo "$squid_cv_cxx_arg_fhugeobjects" >&6; } - - else - squid_cv_cxx_arg_fhugeobjects=no - fi - 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 "x$squid_cv_cxx_arg_fhugeobjects" = "xyes"; then - SQUID_CXXFLAGS="$SQUID_CXXFLAGS -fhuge-objects" -fi # squid_cv_cc_arg_pipe is set by SQUID_CC_GUESS_OPTIONS SQUID_CXXFLAGS="$SQUID_CXXFLAGS $squid_cv_cc_arg_pipe" SQUID_CFLAGS="$SQUID_CFLAGS $squid_cv_cc_arg_pipe" @@ -19594,6 +19533,7 @@ "x$squid_disk_module_candidates_Blocking" != "xyes"; then as_fn_error $? "Storage module Rock requires IpcIo or Blocking DiskIO module" "$LINENO" 5 fi + STORE_TESTS="$STORE_TESTS tests/testRock$EXEEXT" ;; ufs) STORE_TESTS="$STORE_TESTS tests/testUfs$EXEEXT" @@ -19862,8 +19802,13 @@ XMLLIB="-lxml2"; HAVE_LIBXML2=1 fi - ac_cv_libxml2_include='no' - for ac_header in libxml/parser.h + { $as_echo "$as_me:${as_lineno-$LINENO}: checking location of libxml2 include files" >&5 +$as_echo_n "checking location of libxml2 include files... " >&6; } +if ${ac_cv_libxml2_include+:} false; then : + $as_echo_n "(cached) " >&6 +else + + for ac_header in libxml/parser.h do : ac_fn_cxx_check_header_mongrel "$LINENO" "libxml/parser.h" "ac_cv_header_libxml_parser_h" "$ac_includes_default" if test "x$ac_cv_header_libxml_parser_h" = xyes; then : @@ -19885,42 +19830,50 @@ cat >>confdefs.h <<_ACEOF #define HAVE_LIBXML_PARSER_H 1 _ACEOF - ac_cv_libxml2_include="/usr/include/libxml2" -fi - -done + ac_cv_libxml2_include="-I/usr/include/libxml2" +else - CPPFLAGS="$SAVED_CPPFLAGS" - if test "x$ac_cv_libxml2_include" = "xno"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Testing in /usr/local/include/libxml2" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Testing in /usr/local/include/libxml2" >&5 $as_echo "$as_me: Testing in /usr/local/include/libxml2" >&6;} - SAVED_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="-I/usr/local/include/libxml2 $CPPFLAGS" - unset ac_cv_header_libxml_parser_h - for ac_header in libxml/parser.h + CPPFLAGS="-I/usr/local/include/libxml2 $SAVED_CPPFLAGS" + unset ac_cv_header_libxml_parser_h + for ac_header in libxml/parser.h do : ac_fn_cxx_check_header_mongrel "$LINENO" "libxml/parser.h" "ac_cv_header_libxml_parser_h" "$ac_includes_default" if test "x$ac_cv_header_libxml_parser_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBXML_PARSER_H 1 _ACEOF - ac_cv_libxml2_include="/usr/local/include/libxml2" + ac_cv_libxml2_include="-I/usr/local/include/libxml2" +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find libxml2 header file libxml/parser.h" >&5 +$as_echo "$as_me: Failed to find libxml2 header file libxml/parser.h" >&6;} + fi done - CPPFLAGS="$SAVED_CPPFLAGS" - fi fi done - if test "x$ac_cv_libxml2_include" != "xno"; then - SQUID_CXXFLAGS="-I$ac_cv_libxml2_include $SQUID_CXXFLAGS" - CPPFLAGS="-I$ac_cv_libxml2_include $CPPFLAGS" + CPPFLAGS="$SAVED_CPPFLAGS" + +fi + +done + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libxml2_include" >&5 +$as_echo "$ac_cv_libxml2_include" >&6; } + if test "x$ac_cv_libxml2_include" != "x"; then + SQUID_CXXFLAGS="$ac_cv_libxml2_include $SQUID_CXXFLAGS" + CPPFLAGS="$ac_cv_libxml2_include $CPPFLAGS" fi - for ac_header in libxml/HTMLparser.h libxml/HTMLtree.h + for ac_header in libxml/parser.h libxml/HTMLparser.h libxml/HTMLtree.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" @@ -24051,6 +24004,7 @@ bstring.h \ cassert \ crypt.h \ + cstdarg \ cstdlib \ cstring \ list \ @@ -30678,7 +30632,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.13, which was +This file was extended by Squid Web Proxy $as_me 3.2.0.14, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -30744,7 +30698,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.13 +Squid Web Proxy config.status 3.2.0.14 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" diff -u -r -N squid-3.2.0.13/configure.ac squid-3.2.0.14/configure.ac --- squid-3.2.0.13/configure.ac 2011-10-14 14:49:52.000000000 +1300 +++ squid-3.2.0.14/configure.ac 2011-12-13 00:11:46.000000000 +1300 @@ -3,7 +3,7 @@ dnl dnl dnl -AC_INIT([Squid Web Proxy],[3.2.0.13],[http://www.squid-cache.org/bugs/],[squid]) +AC_INIT([Squid Web Proxy],[3.2.0.14],[http://www.squid-cache.org/bugs/],[squid]) AC_PREREQ(2.61) AC_CONFIG_HEADERS([include/autoconf.h]) AC_CONFIG_AUX_DIR(cfgaux) @@ -86,8 +86,10 @@ fi AC_PATH_PROG(POD2MAN, pod2man, $FALSE) -dnl set $(AR) -AC_PATH_PROG(AR, ar, $FALSE) +dnl set $(AR) if not provided by the build environment +if test "x$AR" = "x"; then + AC_PATH_PROG(AR, ar, $FALSE) +fi AR_R="$AR r" AC_SUBST(AR_R) @@ -319,10 +321,6 @@ SQUID_CXXFLAGS="$SQUID_CXXFLAGS $squid_cv_cxx_option_werror" fi -SQUID_CXX_CHECK_ARG_FHUGEOBJECTS -if test "x$squid_cv_cxx_arg_fhugeobjects" = "xyes"; then - SQUID_CXXFLAGS="$SQUID_CXXFLAGS -fhuge-objects" -fi # squid_cv_cc_arg_pipe is set by SQUID_CC_GUESS_OPTIONS SQUID_CXXFLAGS="$SQUID_CXXFLAGS $squid_cv_cc_arg_pipe" SQUID_CFLAGS="$SQUID_CFLAGS $squid_cv_cc_arg_pipe" @@ -777,6 +775,7 @@ "x$squid_disk_module_candidates_Blocking" != "xyes"; then AC_MSG_ERROR([Storage module Rock requires IpcIo or Blocking DiskIO module]) fi + STORE_TESTS="$STORE_TESTS tests/testRock$EXEEXT" ;; ufs) STORE_TESTS="$STORE_TESTS tests/testUfs$EXEEXT" @@ -901,29 +900,29 @@ if test "x$squid_opt_use_esi" = "xyes" -a "x$with_libxml2" != "xno" ; then AC_CHECK_LIB([xml2], [main], [XMLLIB="-lxml2"; HAVE_LIBXML2=1]) dnl Find the main header and include path... - ac_cv_libxml2_include='no' - AC_CHECK_HEADERS([libxml/parser.h], [], [ + AC_CACHE_CHECK([location of libxml2 include files], [ac_cv_libxml2_include], [ + AC_CHECK_HEADERS([libxml/parser.h], [], [ AC_MSG_NOTICE([Testing in /usr/include/libxml2]) SAVED_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I/usr/include/libxml2 $CPPFLAGS" unset ac_cv_header_libxml_parser_h - AC_CHECK_HEADERS([libxml/parser.h], [ac_cv_libxml2_include="/usr/include/libxml2"], []) - CPPFLAGS="$SAVED_CPPFLAGS" - if test "x$ac_cv_libxml2_include" = "xno"; then - AC_MSG_NOTICE([Testing in /usr/local/include/libxml2]) - SAVED_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="-I/usr/local/include/libxml2 $CPPFLAGS" - unset ac_cv_header_libxml_parser_h - AC_CHECK_HEADERS([libxml/parser.h], [ac_cv_libxml2_include="/usr/local/include/libxml2"], []) - CPPFLAGS="$SAVED_CPPFLAGS" - fi + AC_CHECK_HEADERS([libxml/parser.h], [ac_cv_libxml2_include="-I/usr/include/libxml2"], [ + AC_MSG_NOTICE([Testing in /usr/local/include/libxml2]) + CPPFLAGS="-I/usr/local/include/libxml2 $SAVED_CPPFLAGS" + unset ac_cv_header_libxml_parser_h + AC_CHECK_HEADERS([libxml/parser.h], [ac_cv_libxml2_include="-I/usr/local/include/libxml2"], [ + AC_MSG_NOTICE([Failed to find libxml2 header file libxml/parser.h]) + ]) ]) - if test "x$ac_cv_libxml2_include" != "xno"; then - SQUID_CXXFLAGS="-I$ac_cv_libxml2_include $SQUID_CXXFLAGS" - CPPFLAGS="-I$ac_cv_libxml2_include $CPPFLAGS" + CPPFLAGS="$SAVED_CPPFLAGS" + ]) + ]) + if test "x$ac_cv_libxml2_include" != "x"; then + SQUID_CXXFLAGS="$ac_cv_libxml2_include $SQUID_CXXFLAGS" + CPPFLAGS="$ac_cv_libxml2_include $CPPFLAGS" fi - dnl Now that we know where to look find the other headers... - AC_CHECK_HEADERS(libxml/HTMLparser.h libxml/HTMLtree.h) + dnl Now that we know where to look find the headers... + AC_CHECK_HEADERS(libxml/parser.h libxml/HTMLparser.h libxml/HTMLtree.h) AC_DEFINE_UNQUOTED(HAVE_LIBXML2, $HAVE_LIBXML2, [Define to 1 if you have the libxml2 library]) if test "x$with_libxml2" = "xyes" -a "$HAVE_LIBXML2" != "1" ; then AC_MSG_ERROR([Required library libxml2 is not able to be found.]) @@ -2278,6 +2277,7 @@ bstring.h \ cassert \ crypt.h \ + cstdarg \ cstdlib \ cstring \ list \ diff -u -r -N squid-3.2.0.13/CREDITS squid-3.2.0.14/CREDITS --- squid-3.2.0.13/CREDITS 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/CREDITS 2011-12-13 00:08:18.000000000 +1300 @@ -559,3 +559,36 @@ documentation for the software which includes the set or a subset of the icons contained within. +============================================================================== + +shm_portable_segment_name_is_path() implementation: + + Derived from boost/interprocess/shared_memory_object.hpp and + boost/interprocess/detail/workaround.hpp at http://www.boost.org/ + + (C) Copyright Ion Gaztanaga 2005-2009. + Distributed under the Boost Software License, Version 1.0 + + Boost Software License - Version 1.0 - August 17th, 2003 + + Permission is hereby granted, free of charge, to any person or organization + obtaining a copy of the software and accompanying documentation covered by + this license (the "Software") to use, reproduce, display, distribute, + execute, and transmit the Software, and to prepare derivative works of the + Software, and to permit third-parties to whom the Software is furnished to + do so, all subject to the following: + + The copyright notices in the Software and this entire statement, including + the above license grant, this restriction and the following disclaimer, + must be included in all copies of the Software, in whole or in part, and + all derivative works of the Software, unless such copies or derivative + works are solely in the form of machine-executable object code generated by + a source language processor. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT + SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE + FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. diff -u -r -N squid-3.2.0.13/doc/debug-sections.txt squid-3.2.0.14/doc/debug-sections.txt --- squid-3.2.0.13/doc/debug-sections.txt 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/doc/debug-sections.txt 2011-12-13 00:08:18.000000000 +1300 @@ -41,6 +41,7 @@ section 20 Storage Manager Heap-based replacement section 20 Storage Manager Logging Functions section 20 Storage Manager MD5 Cache Keys +section 20 Storage Manager Statistics section 20 Storage Manager Swapfile Metadata section 20 Storage Manager Swapfile Unpacker section 20 Storage Manager Swapin Functions @@ -112,7 +113,6 @@ section 66 HTTP Header Tools section 67 String section 68 HTTP Content-Range Header -section 69 HTTP Header: Extension Field section 70 Cache Digest section 71 Store Digest Manager section 72 Peer Digest Routines diff -u -r -N squid-3.2.0.13/errors/af/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/af/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/af/ERR_CANNOT_FORWARD 2011-10-14 14:59:34.000000000 +1300 +++ squid-3.2.0.14/errors/af/ERR_CANNOT_FORWARD 2011-12-13 00:16:33.000000000 +1300 @@ -1 +1 @@ - FOUT: Die aangevraagde URL kon nie verkry word nie

ERROR

The requested URL could not be retrieved


Die volgende fout is teëgekom tydens verkryging van die URL: %U

Kan nie dié versoek nou aanstuur nie

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Die kasbediener se administrateur is %w.



\ No newline at end of file + FOUT: Die aangevraagde URL kon nie verkry word nie

ERROR

The requested URL could not be retrieved


Die volgende fout is teëgekom tydens verkryging van die URL: %U

Kan nie dié versoek nou aanstuur nie

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

Enkele moontlike probleme is:

  • 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.

Die kasbediener se administrateur is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/af/error-details.txt squid-3.2.0.14/errors/af/error-details.txt --- squid-3.2.0.13/errors/af/error-details.txt 2011-10-14 15:01:29.000000000 +1300 +++ squid-3.2.0.14/errors/af/error-details.txt 2011-12-13 00:17:44.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/ar/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/ar/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/ar/ERR_CANNOT_FORWARD 2011-10-14 15:01:57.000000000 +1300 +++ squid-3.2.0.14/errors/ar/ERR_CANNOT_FORWARD 2011-12-13 00:17:55.000000000 +1300 @@ -1 +1 @@ - خطأ: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + خطأ: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

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

Some possible problems are:

  • 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/ar/error-details.txt squid-3.2.0.14/errors/ar/error-details.txt --- squid-3.2.0.13/errors/ar/error-details.txt 2011-10-14 15:04:09.000000000 +1300 +++ squid-3.2.0.14/errors/ar/error-details.txt 2011-12-13 00:19:02.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/az/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/az/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/az/ERR_CANNOT_FORWARD 2011-10-14 15:04:35.000000000 +1300 +++ squid-3.2.0.14/errors/az/ERR_CANNOT_FORWARD 2011-12-13 00:19:17.000000000 +1300 @@ -1 +1 @@ - SƏHV: Sorğulanan URL ilə əlaqə yaradılmadı

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Hal-hazırda sorğunuzu yönlədirmək mümkün deyildir.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + SƏHV: Sorğulanan URL ilə əlaqə yaradılmadı

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Hal-hazırda sorğunuzu yönlədirmək mümkün deyildir.

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

Mümkün probleml�^�rd�^�n b�^�zil�^�ri:

  • 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/az/error-details.txt squid-3.2.0.14/errors/az/error-details.txt --- squid-3.2.0.13/errors/az/error-details.txt 2011-10-14 15:06:24.000000000 +1300 +++ squid-3.2.0.14/errors/az/error-details.txt 2011-12-13 00:20:58.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/bg/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/bg/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/bg/ERR_CANNOT_FORWARD 2011-10-14 15:06:43.000000000 +1300 +++ squid-3.2.0.14/errors/bg/ERR_CANNOT_FORWARD 2011-12-13 00:21:20.000000000 +1300 @@ -1 +1 @@ - ГРЕШКА: Заявеният адрес е недостъпен.

ERROR

The requested URL could not be retrieved


Възникна следната грешка при опит за достъп до: %U

Заявката не може да бъде пренасочена в този момент.

Заявката не може да бъде пренасочена към сървъра източник или към някой от висшестоящите кеш сървъри. Най-вероятно причината за тази грешка е, че администратора не позволява директни обръщения към сървъра източник, и всички кеш сървъри от по-горно ниво в момента са недостъпни.

Вашият кеш администратор е %w.



\ No newline at end of file + ГРЕШКА: Заявеният адрес е недостъпен.

ERROR

The requested URL could not be retrieved


Възникна следната грешка при опит за достъп до: %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 diff -u -r -N squid-3.2.0.13/errors/bg/error-details.txt squid-3.2.0.14/errors/bg/error-details.txt --- squid-3.2.0.13/errors/bg/error-details.txt 2011-10-14 15:08:37.000000000 +1300 +++ squid-3.2.0.14/errors/bg/error-details.txt 2011-12-13 00:22:57.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/ca/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/ca/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/ca/ERR_CANNOT_FORWARD 2011-10-14 15:08:55.000000000 +1300 +++ squid-3.2.0.14/errors/ca/ERR_CANNOT_FORWARD 2011-12-13 00:23:11.000000000 +1300 @@ -1 +1 @@ - ERROR: No es pot mostrar la URL que heu sol.licitat

ERROR

No es pot mostrar la URL que heu sol.licitat


The following error was encountered while trying to retrieve the URL: %U

No ha estat possible de reenviar aquesta petició.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

L'administrador d'aquesta cache és %w.



\ No newline at end of file + ERROR: No es pot mostrar la URL que heu sol.licitat

ERROR

No es pot mostrar la URL que heu sol.licitat


The following error was encountered while trying to retrieve the URL: %U

No ha estat possible de reenviar aquesta petició.

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

Some possible problems are:

  • 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.

L'administrador d'aquesta cache és %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/ca/error-details.txt squid-3.2.0.14/errors/ca/error-details.txt --- squid-3.2.0.13/errors/ca/error-details.txt 2011-10-14 15:10:25.000000000 +1300 +++ squid-3.2.0.14/errors/ca/error-details.txt 2011-12-13 00:24:31.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/cs/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/cs/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/cs/ERR_CANNOT_FORWARD 2011-10-14 15:10:40.000000000 +1300 +++ squid-3.2.0.14/errors/cs/ERR_CANNOT_FORWARD 2011-12-13 00:24:43.000000000 +1300 @@ -1 +1 @@ - CHYBA: Požadovaný dokument je nedostupný

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + CHYBA: Požadovaný dokument je nedostupný

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

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

Some possible problems are:

  • 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/cs/error-details.txt squid-3.2.0.14/errors/cs/error-details.txt --- squid-3.2.0.13/errors/cs/error-details.txt 2011-10-14 15:12:14.000000000 +1300 +++ squid-3.2.0.14/errors/cs/error-details.txt 2011-12-13 00:25:59.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/da/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/da/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/da/ERR_CANNOT_FORWARD 2011-10-14 15:12:28.000000000 +1300 +++ squid-3.2.0.14/errors/da/ERR_CANNOT_FORWARD 2011-12-13 00:26:15.000000000 +1300 @@ -1 +1 @@ - FEJL: Den angivne URL kunne ikke hentes

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Kunne ikke vidersende forespørgslen.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + FEJL: Den angivne URL kunne ikke hentes

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Kunne ikke vidersende forespørgslen.

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

Mulige problemer kan være:

  • 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/da/error-details.txt squid-3.2.0.14/errors/da/error-details.txt --- squid-3.2.0.13/errors/da/error-details.txt 2011-10-14 15:13:41.000000000 +1300 +++ squid-3.2.0.14/errors/da/error-details.txt 2011-12-13 00:27:27.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/de/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/de/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/de/ERR_CANNOT_FORWARD 2011-10-14 15:13:54.000000000 +1300 +++ squid-3.2.0.14/errors/de/ERR_CANNOT_FORWARD 2011-12-13 00:27:40.000000000 +1300 @@ -1 +1 @@ - FEHLER: Die angeforderte URL konnte nicht gefunden werden

ERROR

The requested URL could not be retrieved


Der folgende Fehler wurde beim Versuch die URL %U zu holen festgestellt:

Kann die Anfrage zurzeit nicht weiterleiten.

Die Anfrage kann nicht an den Quellserver oder irgendeinen vorgeschalteten Cache weitergeleitet werden. Der wahrscheinlichste Grund ist, dass der Administrator diesem Cache nicht erlaubt direkte Verbindungen zu Quellservern herzustellen oder alle vorgeschalteten Cache Server momentan nicht erreichbar sind.

Ihr Cache Administrator ist %w.



\ No newline at end of file + FEHLER: Die angeforderte URL konnte nicht gefunden werden

ERROR

The requested URL could not be retrieved


Der folgende Fehler wurde beim Versuch die URL %U zu holen festgestellt:

Kann die Anfrage zurzeit nicht weiterleiten.

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

Mögliche Probleme sind:

  • 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.

Ihr Cache Administrator ist %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/de/error-details.txt squid-3.2.0.14/errors/de/error-details.txt --- squid-3.2.0.13/errors/de/error-details.txt 2011-10-14 15:15:15.000000000 +1300 +++ squid-3.2.0.14/errors/de/error-details.txt 2011-12-13 00:29:05.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/el/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/el/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/el/ERR_CANNOT_FORWARD 2011-10-14 15:15:33.000000000 +1300 +++ squid-3.2.0.14/errors/el/ERR_CANNOT_FORWARD 2011-12-13 00:29:19.000000000 +1300 @@ -1 +1 @@ - ΣΦΑΛΜΑ: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Αδύνατη η προώθηση της αιτήσεως σας αυτή τη στιγμή.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Ο διαχειριστής του μεσολαβητή σας είναι ο %w.



\ No newline at end of file + ΣΦΑΛΜΑ: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Αδύνατη η προώθηση της αιτήσεως σας αυτή τη στιγμή.

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

Some possible problems are:

  • 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 diff -u -r -N squid-3.2.0.13/errors/el/error-details.txt squid-3.2.0.14/errors/el/error-details.txt --- squid-3.2.0.13/errors/el/error-details.txt 2011-10-14 15:17:23.000000000 +1300 +++ squid-3.2.0.14/errors/el/error-details.txt 2011-12-13 00:30:40.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/en/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/en/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/en/ERR_CANNOT_FORWARD 2011-10-14 15:17:36.000000000 +1300 +++ squid-3.2.0.14/errors/en/ERR_CANNOT_FORWARD 2011-12-13 00:30:53.000000000 +1300 @@ -1 +1 @@ - ERROR: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + ERROR: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

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

Some possible problems are:

  • 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/en/error-details.txt squid-3.2.0.14/errors/en/error-details.txt --- squid-3.2.0.13/errors/en/error-details.txt 2011-10-14 15:18:42.000000000 +1300 +++ squid-3.2.0.14/errors/en/error-details.txt 2011-12-13 00:32:18.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/es/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/es/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/es/ERR_CANNOT_FORWARD 2011-10-14 15:18:59.000000000 +1300 +++ squid-3.2.0.14/errors/es/ERR_CANNOT_FORWARD 2011-12-13 00:32:34.000000000 +1300 @@ -1 +1 @@ - ERROR: El URL solicitado no se ha podido conseguir

ERROR

El URL solicitado no se ha podido conseguir


Se encontró el siguiente error al intentar recuperar la dirección URL: %U

Imposibilidad de enviar la petición en este momento.

Esta solicitud no ha podido comunicarse con el servidor de origen o de alguna de los cachés padres. La causa más probable de este error es que el administrador de caché no permite que este caché realice conexiones directas a los servidores de origen, y todos los cachés configurados como padres son inalcanzables en este momento.

Su administrador del caché es %w.



\ No newline at end of file + ERROR: El URL solicitado no se ha podido conseguir

ERROR

El URL solicitado no se ha podido conseguir


Se encontró el siguiente error al intentar recuperar la dirección URL: %U

Imposibilidad de enviar la petición en este momento.

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

Algunos posibles problemas son:

  • 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.

Su administrador del caché es %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/es/error-details.txt squid-3.2.0.14/errors/es/error-details.txt --- squid-3.2.0.13/errors/es/error-details.txt 2011-10-14 15:20:44.000000000 +1300 +++ squid-3.2.0.14/errors/es/error-details.txt 2011-12-13 00:34:02.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/et/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/et/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/et/ERR_CANNOT_FORWARD 2011-10-14 15:21:00.000000000 +1300 +++ squid-3.2.0.14/errors/et/ERR_CANNOT_FORWARD 2011-12-13 00:34:13.000000000 +1300 @@ -1 +1 @@ - VIGA: Päring URLile ei saa vastust

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Päringu edastamine ebaõnnestus.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Teie teenusepakkuja aadress on %w.



\ No newline at end of file + VIGA: Päring URLile ei saa vastust

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Päringu edastamine ebaõnnestus.

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

Some possible problems are:

  • 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.

Teie teenusepakkuja aadress on %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/et/error-details.txt squid-3.2.0.14/errors/et/error-details.txt --- squid-3.2.0.13/errors/et/error-details.txt 2011-10-14 15:22:55.000000000 +1300 +++ squid-3.2.0.14/errors/et/error-details.txt 2011-12-13 00:35:26.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/fa/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/fa/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/fa/ERR_CANNOT_FORWARD 2011-10-14 15:23:12.000000000 +1300 +++ squid-3.2.0.14/errors/fa/ERR_CANNOT_FORWARD 2011-12-13 00:35:38.000000000 +1300 @@ -1 +1 @@ - خطا: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + خطا: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fa/error-details.txt squid-3.2.0.14/errors/fa/error-details.txt --- squid-3.2.0.13/errors/fa/error-details.txt 2011-10-14 15:24:44.000000000 +1300 +++ squid-3.2.0.14/errors/fa/error-details.txt 2011-12-13 00:37:00.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/fi/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/fi/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/fi/ERR_CANNOT_FORWARD 2011-10-14 15:25:00.000000000 +1300 +++ squid-3.2.0.14/errors/fi/ERR_CANNOT_FORWARD 2011-12-13 00:37:13.000000000 +1300 @@ -1 +1 @@ - VIRHE: Pyydettyä URL-osoitetta ei voitu hakea

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Pyyntöä ei voitu edelleenohjata.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + VIRHE: Pyydettyä URL-osoitetta ei voitu hakea

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Pyyntöä ei voitu edelleenohjata.

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

Mahdollisia ongelmia:

  • 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fi/error-details.txt squid-3.2.0.14/errors/fi/error-details.txt --- squid-3.2.0.13/errors/fi/error-details.txt 2011-10-14 15:26:48.000000000 +1300 +++ squid-3.2.0.14/errors/fi/error-details.txt 2011-12-13 00:38:35.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/fr/ERR_ACCESS_DENIED squid-3.2.0.14/errors/fr/ERR_ACCESS_DENIED --- squid-3.2.0.13/errors/fr/ERR_ACCESS_DENIED 2011-10-14 15:26:52.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_ACCESS_DENIED 2011-12-13 00:38:37.000000000 +1300 @@ -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

Accès interdit.

La configuration du contrôle d'accès, empêche votre requête d'être acceptée. Si vous pensez que c'est une erreur, contactez votre 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

Accès interdit.

La configuration du contrôle d'accès, empêche votre requête d'être acceptée. Si vous pensez que c'est une erreur, contactez votre fournisseur d'accès.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_AGENT_CONFIGURE squid-3.2.0.14/errors/fr/ERR_AGENT_CONFIGURE --- squid-3.2.0.13/errors/fr/ERR_AGENT_CONFIGURE 2011-10-14 15:26:57.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_AGENT_CONFIGURE 2011-12-13 00:38:39.000000000 +1300 @@ -1 +1 @@ - Configuration du navigateur Web

ERREUR

Web Browser Configuration


Vous devez corriger la configuration de votre navigateur Web, pour qu'il soit utilisé dans ce réseau

Comment trouver ces réglages dans votre navigateur :

Pour configurer Firefox, allez à :
  • Outils -> Options -> Avancé -> Réseau -> Paramètres de Connexion
  • Vous devez indiquer dans la fenêtre du proxy HTTP, le nom du proxy %h et le port 3128
Pour configurer Internet Explorer, allez à :
  • Outils -> Options Internet -> Connexion -> Paramètres LAN -> Proxy
  • In the HTTP proxy box type the proxy name %h and port %b.
Pour configurer Opéra, allez à :
  • Outils -> Préférences -> Avancé -> Réseau -> Serveur Proxy
  • In the HTTP proxy box type the proxy name %h and port %b.

Votre administrateur proxy est %w.



\ No newline at end of file + Configuration du navigateur Web

ERREUR

Web Browser Configuration


Vous devez corriger la configuration de votre navigateur Web, pour qu'il soit utilisé dans ce réseau

Comment trouver ces réglages dans votre navigateur :

Pour configurer Firefox, allez à :
  • Outils -> Options -> Avancé -> Réseau -> Paramètres de Connexion
  • Vous devez indiquer dans la fenêtre du proxy HTTP, le nom du proxy %h et le port %b
Pour configurer Internet Explorer, allez à :
  • Outils -> Options Internet -> Connexion -> Paramètres LAN -> Proxy
  • In the HTTP proxy box type the proxy name %h and port %b.
Pour configurer Opéra, allez à :
  • Outils -> Préférences -> Avancé -> Réseau -> Serveur Proxy
  • In the HTTP proxy box type the proxy name %h and port %b.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_AGENT_WPAD squid-3.2.0.14/errors/fr/ERR_AGENT_WPAD --- squid-3.2.0.13/errors/fr/ERR_AGENT_WPAD 2011-10-14 15:27:00.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_AGENT_WPAD 2011-12-13 00:38:41.000000000 +1300 @@ -1 +1 @@ - Configuration du navigateur Web

ERREUR

Web Browser Configuration


Vous devez corriger la configuration de votre navigateur Web, pour qu'il soit utilisé dans ce réseau

Comment trouver ces réglages dans votre navigateur :

Pour configurer Firefox, allez à :
  • Outils -> Options -> Avancé -> Réseau -> Paramètres de Connexion
  • Sélectionnez détection automatique des paramètres de proxy pour ce réseau
Pour configurer Internet Explorer, allez à :
  • Outils -> Options Internet -> Connexion -> Paramètres LAN -> Proxy
  • Sélectionnez la détection automatique des paramètres
Pour configurer Opéra, allez à :
  • Outils -> Préférences -> Avancé -> Réseau -> Serveur Proxy
  • Utilisez la sélection automatique pour configurer le proxy

Votre administrateur proxy est %w.



\ No newline at end of file + Configuration du navigateur Web

ERREUR

Web Browser Configuration


Vous devez corriger la configuration de votre navigateur Web, pour qu'il soit utilisé dans ce réseau

Comment trouver ces réglages dans votre navigateur :

Pour configurer Firefox, allez à :
  • Outils -> Options -> Avancé -> Réseau -> Paramètres de Connexion
  • Sélectionnez détection automatique dans les paramètres du proxy pour ce réseau
Pour configurer Internet Explorer, allez à :
  • Outils -> Options Internet -> Connexion -> Paramètres LAN -> Proxy
  • Sélectionnez le paramètre détection automatique
Pour configurer Opéra, allez à :
  • Outils -> Préférences -> Avancé -> Réseau -> Serveur Proxy
  • Utilisez la sélection automatique pour configurer le proxy

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_CACHE_ACCESS_DENIED squid-3.2.0.14/errors/fr/ERR_CACHE_ACCESS_DENIED --- squid-3.2.0.13/errors/fr/ERR_CACHE_ACCESS_DENIED 2011-10-14 15:27:04.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_CACHE_ACCESS_DENIED 2011-12-13 00:38:43.000000000 +1300 @@ -1 +1 @@ - ERREUR: Cache Access Denied

ERROR

Cache Accès interdit.


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

Accès au cache interdit.

Désolé, vous n'êtes pas autorisé à demander la requête %U de ce cache tant que vous ne vous serez pas identifié.

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



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

ERROR

Cache Accès interdit.


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

Accès au cache interdit.

Désolé, vous n'êtes pas autorisé à demander la requête %U de ce cache tant que vous ne serez pas identifié.

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



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_CACHE_MGR_ACCESS_DENIED squid-3.2.0.14/errors/fr/ERR_CACHE_MGR_ACCESS_DENIED --- squid-3.2.0.13/errors/fr/ERR_CACHE_MGR_ACCESS_DENIED 2011-10-14 15:27:08.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_CACHE_MGR_ACCESS_DENIED 2011-12-13 00:38:46.000000000 +1300 @@ -1 +1 @@ - ERREUR: Cache Manager Access Denied

ERROR

Cache Manager Accès interdit.


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

Accès au Gestionnaire de Cache Interdit.

Désolé, vous n'êtes pas autorisé à demander la requête %U au travers du gestionnaire de cache tant que vous ne vous serez pas identifié.

S'il vous plait, contacter l'administrateur du proxy si vous avez des difficultés pour vous authentifier ou si vous êtes administrateur, lisez la documentation Squid de l'interface du gestionnaire de cache, vérifiez aussi les fichiers logs du gestionnaire cache pour analyser en détails les messages d'erreurs.



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

ERROR

Cache Manager Accès interdit.


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

Accès au Gestionnaire de Cache Interdit.

Désolé, vous n'êtes pas autorisé à demander la requête %U au travers du gestionnaire de cache tant que vous ne serez pas identifié.

S'il vous plait, contacter l'administrateur du proxy si vous avez des difficultés pour vous authentifier ou si vous êtes administrateur, lisez la documentation Squid de l'interface du gestionnaire de cache, vérifiez aussi les fichiers logs du gestionnaire cache pour analyser en détails les messages d'erreurs.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/fr/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/fr/ERR_CANNOT_FORWARD 2011-10-14 15:27:12.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_CANNOT_FORWARD 2011-12-13 00:38:47.000000000 +1300 @@ -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

En ce moment, il est impossible de retransmettre cette requête.

Cette requête ne peut pas être transférée au serveur source ou à tous les proxy parent. La cause la plus probable est que l'administrateur du proxy a bloqué des connexions directes au serveur d'origine, et tous les proxy parents configurés sont actuellement inaccessibles.

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

En ce moment, il est impossible de retransmettre cette requête.

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

Problèmes possibles :

  • 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.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_CONNECT_FAIL squid-3.2.0.14/errors/fr/ERR_CONNECT_FAIL --- squid-3.2.0.13/errors/fr/ERR_CONNECT_FAIL 2011-10-14 15:27:16.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_CONNECT_FAIL 2011-12-13 00:38:49.000000000 +1300 @@ -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 connexion %I a échouée.

Le système a retourné : %E

L'hôte distant ou le réseau sont peut-être défaillant. Veuillez renouveler votre requête.

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 connexion %I a échouée.

Le système a retourné : %E

L'hôte distant ou le réseau sont peut-être défaillant. Veuillez renouveler votre requête.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_DIR_LISTING squid-3.2.0.14/errors/fr/ERR_DIR_LISTING --- squid-3.2.0.13/errors/fr/ERR_DIR_LISTING 2011-10-14 15:27:20.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_DIR_LISTING 2011-12-13 00:38:51.000000000 +1300 @@ -1 +1 @@ - Répertoire : %U

Répertoire : %U/


Contenu du Répertoire :

%z
%g
Répertoire Parent (Répertoire Racine)

\ No newline at end of file + Répertoire : %U

Répertoire : %U/


Contenu du Répertoire :

%z
%g
Répertoire Parent (Répertoire Racine)

\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_DNS_FAIL squid-3.2.0.14/errors/fr/ERR_DNS_FAIL --- squid-3.2.0.13/errors/fr/ERR_DNS_FAIL 2011-10-14 15:27:23.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_DNS_FAIL 2011-12-13 00:38:53.000000000 +1300 @@ -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

Impossible de déterminer l'adresse IP du nom d'hôte %H

Le serveur DNS a retourné :

%z

Cela signifie que le proxy ne peut pas résoudre le nom d'hôte présent dans l'URL. Vérifier si l'adresse est correcte.

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

Impossible de déterminer l'adresse IP du nom d'hôte %H

Le serveur DNS a retourné :

%z

Cela signifie que le proxy ne peut pas résoudre le nom d'hôte présent dans l'URL. Vérifier si l'adresse est correcte.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_ESI squid-3.2.0.14/errors/fr/ERR_ESI --- squid-3.2.0.13/errors/fr/ERR_ESI 2011-10-14 15:27:26.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_ESI 2011-12-13 00:38:55.000000000 +1300 @@ -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

Le traitement ESI a échoué.

Le processeur ESI a répondu :

%Z

Cela signifie que le substitut n'a pas été capable de traiter le modèle ESI. Veuillez reporter cette erreur au webmaster.

Votre webmaster 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

Le traitement ESI a échoué.

Le processeur ESI a répondu :

%Z

Cela signifie que le substitut n'a pas été capable de traiter le modèle ESI. Veuillez reporter cette erreur au webmaster.

Votre webmaster est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_FORWARDING_DENIED squid-3.2.0.14/errors/fr/ERR_FORWARDING_DENIED --- squid-3.2.0.13/errors/fr/ERR_FORWARDING_DENIED 2011-10-14 15:27:30.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_FORWARDING_DENIED 2011-12-13 00:38:57.000000000 +1300 @@ -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

Transmission interdite.

Ce proxy ne fera pas suivre votre requête, car il essaye de mettre en application une interaction. Le client %i est peut-être un cache mal configuré.

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

Transmission interdite.

Ce proxy ne fera pas suivre votre requête, car il essaye de mettre en application une interaction. Le client %i est peut-être un cache mal configuré.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_FTP_DISABLED squid-3.2.0.14/errors/fr/ERR_FTP_DISABLED --- squid-3.2.0.13/errors/fr/ERR_FTP_DISABLED 2011-10-14 15:27:33.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_FTP_DISABLED 2011-12-13 00:39:00.000000000 +1300 @@ -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

FTP est désactivé

Ce proxy ne prend pas en compte le protocole FTP.

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

FTP est désactivé

Ce proxy ne prend pas en compte le protocole FTP.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_FTP_FAILURE squid-3.2.0.14/errors/fr/ERR_FTP_FAILURE --- squid-3.2.0.13/errors/fr/ERR_FTP_FAILURE 2011-10-14 15:27:36.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_FTP_FAILURE 2011-12-13 00:39:01.000000000 +1300 @@ -1 +1 @@ - ERREUR: L'URL demandée n'a pas pu être trouvé

ERROR

The requested URL could not be retrieved


En essayant de charger l'URL : %U une erreur de protocole FTP est survenue.

Squid a envoyé la commande FTP suivante :

%f

Le serveur a répondu :

%F
%g

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


En essayant de charger l'URL : %U une erreur de protocole FTP est survenue.

Squid a envoyé la commande FTP suivante :

%f

Le serveur a répondu :

%F
%g

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_FTP_FORBIDDEN squid-3.2.0.14/errors/fr/ERR_FTP_FORBIDDEN --- squid-3.2.0.13/errors/fr/ERR_FTP_FORBIDDEN 2011-10-14 15:27:40.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_FTP_FORBIDDEN 2011-12-13 00:39:03.000000000 +1300 @@ -1 +1 @@ - ERREUR: L'URL demandée n'a pas pu être trouvé

ERROR

The requested URL could not be retrieved


En essayant de charger l'URL : %U une erreur d'authentification a eu lieu lors de l'accès au serveur FTP.

Squid a envoyé la commande FTP suivante :

%f

Le serveur a répondu :

%F
%g

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


En essayant de charger l'URL : %U une erreur d'authentification a eu lieu lors de l'accès au serveur FTP.

Squid a envoyé la commande FTP suivante :

%f

Le serveur a répondu :

%F
%g

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_FTP_NOT_FOUND squid-3.2.0.14/errors/fr/ERR_FTP_NOT_FOUND --- squid-3.2.0.13/errors/fr/ERR_FTP_NOT_FOUND 2011-10-14 15:27:42.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_FTP_NOT_FOUND 2011-12-13 00:39:05.000000000 +1300 @@ -1 +1 @@ - ERREUR: L'URL demandée n'a pas pu être trouvé

ERROR

The requested URL could not be retrieved


L'URL suivante n'a pas pu être chargée : %U

Squid a envoyé la commande FTP suivante :

%f

Le serveur a répondu :

%F
%g

Cela pourrait être causé par une URL FTP qui contient un chemin absolut (ce qui n'est pas compatible avec la RFC 1738). Si tel est le cas, le fichier peut être disponible à l'adresse %B.

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'URL suivante n'a pas pu être chargée : %U

Squid a envoyé la commande FTP suivante :

%f

Le serveur a répondu :

%F
%g

Cela pourrait être causé par une URL FTP qui contient un chemin absolut (ce qui n'est pas compatible avec la RFC 1738). Si tel est le cas, le fichier peut être disponible à l'adresse %B.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_FTP_PUT_CREATED squid-3.2.0.14/errors/fr/ERR_FTP_PUT_CREATED --- squid-3.2.0.13/errors/fr/ERR_FTP_PUT_CREATED 2011-10-14 15:27:45.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_FTP_PUT_CREATED 2011-12-13 00:39:07.000000000 +1300 @@ -1 +1 @@ - FTP avec PUT, envoi du fichier réussi.

Opération réussie

Le fichier a été créé.




\ No newline at end of file + FTP avec PUT, envoi du fichier réussi.

Opération réussie

Le fichier a été créé




\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_FTP_PUT_ERROR squid-3.2.0.14/errors/fr/ERR_FTP_PUT_ERROR --- squid-3.2.0.13/errors/fr/ERR_FTP_PUT_ERROR 2011-10-14 15:27:47.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_FTP_PUT_ERROR 2011-12-13 00:39:11.000000000 +1300 @@ -1 +1 @@ - ERREUR: FTP upload failed

ERROR

FTP avec PUT, échec lors de l'envoi du fichier


En essayant de charger l'URL : %U une erreur de protocole FTP est survenue.

Squid a envoyé la commande FTP suivante :

%f

Le serveur a répondu :

%F

Cela signifie que le serveur FTP n'a pas les autorisations ou pas assez d'espace pour stocker ce fichier. Veuillez vérifier le chemin, les autorisations et l'espace disque puis essayez de nouveau.

Votre administrateur proxy est %w.



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

ERROR

FTP avec PUT, échec lors de l'envoi du fichier


En essayant de charger l'URL : %U une erreur de protocole FTP est survenue.

Squid a envoyé la commande FTP suivante :

%f

Le serveur a répondu :

%F

Cela signifie que le serveur FTP n'a pas les autorisations ou pas assez d'espace pour stocker ce fichier. Veuillez vérifier le chemin, les autorisations et l'espace disque puis essayez de nouveau.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_FTP_PUT_MODIFIED squid-3.2.0.14/errors/fr/ERR_FTP_PUT_MODIFIED --- squid-3.2.0.13/errors/fr/ERR_FTP_PUT_MODIFIED 2011-10-14 15:27:51.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_FTP_PUT_MODIFIED 2011-12-13 00:39:14.000000000 +1300 @@ -1 +1 @@ - FTP avec PUT, envoi du fichier réussi.

Opération réussie

Le fichier a été mis à jour




\ No newline at end of file + FTP avec PUT, envoi du fichier réussi.

Opération réussie

Le fichier a été mis à jour




\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_FTP_UNAVAILABLE squid-3.2.0.14/errors/fr/ERR_FTP_UNAVAILABLE --- squid-3.2.0.13/errors/fr/ERR_FTP_UNAVAILABLE 2011-10-14 15:27:54.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_FTP_UNAVAILABLE 2011-12-13 00:39:16.000000000 +1300 @@ -1 +1 @@ - ERREUR: L'URL demandée n'a pas pu être trouvé

ERROR

The requested URL could not be retrieved


Le serveur FTP est surchargé et ne permet pas d'accéder à l'URL : %U

Squid a envoyé la commande FTP suivante :

%f

Le serveur a répondu :

%F
%g

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


Le serveur FTP est surchargé et ne permet pas d'accéder à l'URL : %U

Squid a envoyé la commande FTP suivante :

%f

Le serveur a répondu :

%F
%g

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_GATEWAY_FAILURE squid-3.2.0.14/errors/fr/ERR_GATEWAY_FAILURE --- squid-3.2.0.13/errors/fr/ERR_GATEWAY_FAILURE 2011-10-14 15:27:57.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_GATEWAY_FAILURE 2011-12-13 00:39:19.000000000 +1300 @@ -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

Défaillance de la passerelle Proxy

Une défaillance interne non-récupérable ou un problème de configuration empêchent cette requête de s'achever.

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

Défaillance de la passerelle Proxy

Une défaillance interne non-récupérable ou un problème de configuration empêchent cette requête de s'achever.

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.13/errors/fr/ERR_ICAP_FAILURE squid-3.2.0.14/errors/fr/ERR_ICAP_FAILURE --- squid-3.2.0.13/errors/fr/ERR_ICAP_FAILURE 2011-10-14 15:28:01.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_ICAP_FAILURE 2011-12-13 00:39:21.000000000 +1300 @@ -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

Erreur de protocole ICAP.

Le système a retourné : %E

Cela signifie que certains aspects de la communication ICAP a échoués.

Problèmes possibles :

  • Le serveur ICAP n'est pas joignable.

  • Une réponse illégale a été reçue par le serveur ICAP.



\ 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

Erreur de protocole ICAP.

Le système a retourné : %E

Cela signifie que certains aspects de la communication ICAP a échoués.

Problèmes possibles :

  • Le serveur ICAP n'est pas joignable.

  • Une réponse illégale a été reçue par le serveur ICAP.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_INVALID_REQ squid-3.2.0.14/errors/fr/ERR_INVALID_REQ --- squid-3.2.0.13/errors/fr/ERR_INVALID_REQ 2011-10-14 15:28:04.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_INVALID_REQ 2011-12-13 00:39:23.000000000 +1300 @@ -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 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 diff -u -r -N squid-3.2.0.13/errors/fr/ERR_INVALID_RESP squid-3.2.0.14/errors/fr/ERR_INVALID_RESP --- squid-3.2.0.13/errors/fr/ERR_INVALID_RESP 2011-10-14 15:28:07.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_INVALID_RESP 2011-12-13 00:39:25.000000000 +1300 @@ -1 +1 @@ - ERREUR: L'URL demandée n'a pas pu être trouvé

ERROR

The requested URL could not be retrieved


Réponse Invalide une erreur a été rencontrée en essayant de traiter la requête :

%R

La réponse HTTP reçu, qui a été envoyée par le serveur n'a pas pu être compris ou a été mal formulé. Veuillez contacter le responsable du site.

Si nécessaire, votre administrateur proxy peut vous fournir plus de détails sur la nature exacte du problème.

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


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

%R

La réponse HTTP reçu, qui a été envoyée par le serveur n'a pas pu être compris ou a été mal formulé. Veuillez contacter le responsable du site.

Si nécessaire, votre administrateur proxy peut vous fournir plus de détails sur la nature exacte du problème.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_INVALID_URL squid-3.2.0.14/errors/fr/ERR_INVALID_URL --- squid-3.2.0.13/errors/fr/ERR_INVALID_URL 2011-10-14 15:28:11.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_INVALID_URL 2011-12-13 00:39:27.000000000 +1300 @@ -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 de 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

Quelque chose dans l'adresse URL est incorrect.

Problèmes possibles :

  • Le protocole d'accès est absent ou incorrect (il doit être de 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 diff -u -r -N squid-3.2.0.13/errors/fr/ERR_LIFETIME_EXP squid-3.2.0.14/errors/fr/ERR_LIFETIME_EXP --- squid-3.2.0.13/errors/fr/ERR_LIFETIME_EXP 2011-10-14 15:28:14.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_LIFETIME_EXP 2011-12-13 00:39:31.000000000 +1300 @@ -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 durée de vie de la connexion est dépassée

Squid a mis fin à cette requête car elle a excédé la durée de vie maximale.

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 durée de vie de la connexion est dépassée

Squid a mis fin à cette requête car elle a excédé la durée de vie maximale.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_NO_RELAY squid-3.2.0.14/errors/fr/ERR_NO_RELAY --- squid-3.2.0.13/errors/fr/ERR_NO_RELAY 2011-10-14 15:28:17.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_NO_RELAY 2011-12-13 00:39:34.000000000 +1300 @@ -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

Aucun relais WAIS

Sur ce proxy Il n'y a pas d'hôte définie pour un relais WAIS! Adressez-vous à votre administrateur.

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

Aucun relais WAIS

Sur ce proxy il n'y a pas d'hôte définie pour le relais WAIS! Adressez-vous à votre administrateur.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_ONLY_IF_CACHED_MISS squid-3.2.0.14/errors/fr/ERR_ONLY_IF_CACHED_MISS --- squid-3.2.0.13/errors/fr/ERR_ONLY_IF_CACHED_MISS 2011-10-14 15:28:20.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_ONLY_IF_CACHED_MISS 2011-12-13 00:39:36.000000000 +1300 @@ -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

Aucun document valide n'a été trouvé dans le cache, de plus la directive only-if-cached a été spécifiée.

Vous avez émis une demande avec une directive de contrôle du cache only-if-cached. Le document n'a pas été trouvé dans le cache ou il nécessite une opération de vérification, qui est interdite par la directive only-if-cached.

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

Aucun document valide n'a été trouvé dans le cache, de plus la directive only-if-cached a été spécifiée.

Vous avez émis une demande avec une directive de contrôle du cache only-if-cached. Le document n'a pas été trouvé dans le cache ou il nécessite une opération de vérification, qui est interdite par la directive only-if-cached.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/error-details.txt squid-3.2.0.14/errors/fr/error-details.txt --- squid-3.2.0.13/errors/fr/error-details.txt 2011-10-14 15:28:55.000000000 +1300 +++ squid-3.2.0.14/errors/fr/error-details.txt 2011-12-13 00:40:09.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/fr/ERR_PRECONDITION_FAILED squid-3.2.0.14/errors/fr/ERR_PRECONDITION_FAILED --- squid-3.2.0.13/errors/fr/ERR_PRECONDITION_FAILED 2011-10-14 15:28:23.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_PRECONDITION_FAILED 2011-12-13 00:39:40.000000000 +1300 @@ -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 précondition a échouée.

Cela signifie :

Au moins une précondition indiquée dans l'en-tête de la requête du client HTTP a échoué.



\ 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 précondition a échouée.

Cela signifie :

Au moins une précondition indiquée dans l'en-tête de la requête du client HTTP a échoué.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_READ_ERROR squid-3.2.0.14/errors/fr/ERR_READ_ERROR --- squid-3.2.0.13/errors/fr/ERR_READ_ERROR 2011-10-14 15:28:26.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_READ_ERROR 2011-12-13 00:39:42.000000000 +1300 @@ -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

Erreur de lecture

Le système a retourné : %E

Lors de la lecture des informations sur le réseau une erreur est survenue. Veuillez renouveler votre requête.

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

Erreur de lecture

Le système a retourné : %E

Lors de la lecture des informations sur le réseau une erreur est survenue. Veuillez renouveler votre requête.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_READ_TIMEOUT squid-3.2.0.14/errors/fr/ERR_READ_TIMEOUT --- squid-3.2.0.13/errors/fr/ERR_READ_TIMEOUT 2011-10-14 15:28:29.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_READ_TIMEOUT 2011-12-13 00:39:44.000000000 +1300 @@ -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

Délai de lecture dépassé

Le système a retourné : %E

Le délai a été dépassé lors de la lecture de données sur le réseau. Le réseau ou le serveur sont peut-être hors service ou surchargés. Merci de renouveler votre requête.

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

Délai de lecture dépassé

Le système a retourné : %E

Le délai a été dépassé lors de la lecture de données sur le réseau. Le réseau ou le serveur sont peut-être hors service ou surchargés. Merci de renouveler votre requête.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_SECURE_CONNECT_FAIL squid-3.2.0.14/errors/fr/ERR_SECURE_CONNECT_FAIL --- squid-3.2.0.13/errors/fr/ERR_SECURE_CONNECT_FAIL 2011-10-14 15:28:32.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_SECURE_CONNECT_FAIL 2011-12-13 00:39:46.000000000 +1300 @@ -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

Il n'a pas été possible d'établir une connexion sécurisée vers %I

Le système a retourné : %E

Ce proxy et l'hôte distant n'ont pas pu négocier mutuellement une connexion sécurisée pour le traitement de votre requête. Il est possible que l'hôte distant ne supporte pas les connexions sécurisées, ou que le proxy n'est pas satisfait du certificat de sécurité de l'hôte distant.

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

Il n'a pas été possible d'établir une connexion sécurisée vers %I

Le système a retourné : %E

Ce proxy et l'hôte distant n'ont pas pu négocier mutuellement une connexion sécurisée pour le traitement de votre requête. Il est possible que l'hôte distant ne supporte pas les connexions sécurisées, ou que le proxy n'est pas satisfait du certificat de sécurité de l'hôte distant.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_SHUTTING_DOWN squid-3.2.0.14/errors/fr/ERR_SHUTTING_DOWN --- squid-3.2.0.13/errors/fr/ERR_SHUTTING_DOWN 2011-10-14 15:28:35.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_SHUTTING_DOWN 2011-12-13 00:39:48.000000000 +1300 @@ -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

Le proxy est arrêté temporairement, actuellement il est impossible de satisfaire votre requête. Veuillez renouveler votre requête ultérieurement.

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

Le proxy est arrêté temporairement, actuellement il est impossible de satisfaire votre requête. Veuillez renouveler votre requête ultérieurement.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_SOCKET_FAILURE squid-3.2.0.14/errors/fr/ERR_SOCKET_FAILURE --- squid-3.2.0.13/errors/fr/ERR_SOCKET_FAILURE 2011-10-14 15:28:38.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_SOCKET_FAILURE 2011-12-13 00:39:51.000000000 +1300 @@ -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

Erreur de socket

Le système a retourné : %E

Squid n'est pas en mesure d'ouvrir le socket TCP, probablement due à une surcharge. Veuillez renouveler votre requête.

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

Erreur de socket

Le système a retourné : %E

Squid n'est pas en mesure d'ouvrir le socket TCP, probablement due à une surcharge. Veuillez renouveler votre requête.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_TOO_BIG squid-3.2.0.14/errors/fr/ERR_TOO_BIG --- squid-3.2.0.13/errors/fr/ERR_TOO_BIG 2011-10-14 15:28:42.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_TOO_BIG 2011-12-13 00:39:53.000000000 +1300 @@ -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 est trop volumineuse.

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 volumineuse.

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.13/errors/fr/ERR_UNSUP_HTTPVERSION squid-3.2.0.14/errors/fr/ERR_UNSUP_HTTPVERSION --- squid-3.2.0.13/errors/fr/ERR_UNSUP_HTTPVERSION 2011-10-14 15:28:45.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_UNSUP_HTTPVERSION 2011-12-13 00:39:55.000000000 +1300 @@ -1 +1 @@ - ERREUR: L'URL demandée n'a pas pu être trouvé

ERROR

Version HTTP non supportée


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

Unsupported HTTP version

Ce Squid ne supporte pas la version HTTP que vous tentez d'utiliser.

Votre administrateur proxy est %w.



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

ERROR

Version HTTP non supportée


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

Unsupported HTTP version

Ce Squid ne supporte pas la version HTTP que vous tentez d'utiliser.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_UNSUP_REQ squid-3.2.0.14/errors/fr/ERR_UNSUP_REQ --- squid-3.2.0.13/errors/fr/ERR_UNSUP_REQ 2011-10-14 15:28:47.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_UNSUP_REQ 2011-12-13 00:39:57.000000000 +1300 @@ -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 méthode de requête et le protocole ne sont pas pris en charge.

Squid ne prend pas en charge tous les types de requêtes par rapport à tous les protocoles d'accès. Vous ne pouvez pas par exemple utiliser une requête POST avec le protocole Gopher.

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 méthode de requête et le protocole ne sont pas pris en charge.

Squid ne prend pas en charge tous les types de requêtes par rapport à tous les protocoles d'accès. Vous ne pouvez pas par exemple utiliser une requête POST avec le protocole Gopher.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_URN_RESOLVE squid-3.2.0.14/errors/fr/ERR_URN_RESOLVE --- squid-3.2.0.13/errors/fr/ERR_URN_RESOLVE 2011-10-14 15:28:50.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_URN_RESOLVE 2011-12-13 00:39:59.000000000 +1300 @@ -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

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 diff -u -r -N squid-3.2.0.13/errors/fr/ERR_WRITE_ERROR squid-3.2.0.14/errors/fr/ERR_WRITE_ERROR --- squid-3.2.0.13/errors/fr/ERR_WRITE_ERROR 2011-10-14 15:28:52.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_WRITE_ERROR 2011-12-13 00:40:03.000000000 +1300 @@ -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

Erreur d'écriture

Le système a retourné : %E

Lors de l'écriture des informations sur le réseau une erreur est survenue. Veuillez renouveler votre requête.

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

Erreur d'écriture

Le système a retourné : %E

Lors de l'écriture des informations sur le réseau une erreur est survenue. Veuillez renouveler votre requête.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/fr/ERR_ZERO_SIZE_OBJECT squid-3.2.0.14/errors/fr/ERR_ZERO_SIZE_OBJECT --- squid-3.2.0.13/errors/fr/ERR_ZERO_SIZE_OBJECT 2011-10-14 15:28:55.000000000 +1300 +++ squid-3.2.0.14/errors/fr/ERR_ZERO_SIZE_OBJECT 2011-12-13 00:40:09.000000000 +1300 @@ -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

Réponse de taille zéro

Squid n'a pas reçu toutes les données pour cette requête.

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

Réponse de taille zéro

Squid n'a pas reçu toutes les données pour cette requête.

Votre administrateur proxy est %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_ACCESS_DENIED squid-3.2.0.14/errors/he/ERR_ACCESS_DENIED --- squid-3.2.0.13/errors/he/ERR_ACCESS_DENIED 2011-10-14 15:28:58.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_ACCESS_DENIED 2011-12-13 00:40:11.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

הגישה נדחית

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

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

הגישה נדחתה

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

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_AGENT_CONFIGURE squid-3.2.0.14/errors/he/ERR_AGENT_CONFIGURE --- squid-3.2.0.13/errors/he/ERR_AGENT_CONFIGURE 2011-10-14 15:29:01.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_AGENT_CONFIGURE 2011-12-13 00:40:13.000000000 +1300 @@ -1 +1 @@ - Web Browser Configuration

שגיאה

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.

מנהל השרת הוא %w.



\ No newline at end of file + הגדרת דפדפן האינטרנט

שגיאה

Web Browser Configuration


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

איך למצוא את ההגדרות האלה בדפדפן שלך:

עבור דפדפן פיירפוקס, לך ל:
  • כלים -> אפשרויות -> אפשרויות מתקדמות -> רשת -> הגדרות חיבור
  • בתיבת הפרוקסי של HTTP, הקלד את שם שרת הפרוקסי %h ואת הפורט %b
עבור דפדפן אינטרנט אקספלורר, לך ל:
  • כלים -> אפשרויות אינטרנט -> חיבורים -> הגדרות LAN -> פרוקסי
  • In the HTTP proxy box type the proxy name %h and port %b.
עבור דפדפן אופרה, לך ל:
  • כלים -> העדפות -> הגדרות מתקדמות -> רשת -> שרתי פרוקסי
  • In the HTTP proxy box type the proxy name %h and port %b.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_AGENT_WPAD squid-3.2.0.14/errors/he/ERR_AGENT_WPAD --- squid-3.2.0.13/errors/he/ERR_AGENT_WPAD 2011-10-14 15:29:04.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_AGENT_WPAD 2011-12-13 00:40:15.000000000 +1300 @@ -1 +1 @@ - Web Browser Configuration

שגיאה

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

מנהל השרת הוא %w.



\ No newline at end of file + הגדרת דפדפן האינטרנט

שגיאה

Web Browser Configuration


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

איך למצוא את ההגדרות האלה בדפדפן שלך:

עבור דפדפן פיירפוקס, לך ל:
  • כלים -> אפשרויות -> אפשרויות מתקדמות -> רשת -> הגדרות חיבור
  • בחר "איתור הגדרות אוטומטי" עבר הרשת הזו
עבור דפדפן אינטרנט אקספלורר, לך ל:
  • כלים -> אפשרויות אינטרנט -> חיבורים -> הגדרות LAN -> פרוקסי
  • בחר "איתור הגדרות אוטומטי"
עבור דפדפן אופרה, לך ל:
  • כלים -> העדפות -> הגדרות מתקדמות -> רשת -> שרתי פרוקסי
  • בחר באיתור הגדרות אוטומטי עבור הגדרת הפרוקסי

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_CACHE_ACCESS_DENIED squid-3.2.0.14/errors/he/ERR_CACHE_ACCESS_DENIED --- squid-3.2.0.13/errors/he/ERR_CACHE_ACCESS_DENIED 2011-10-14 15:29:07.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_CACHE_ACCESS_DENIED 2011-12-13 00:40:17.000000000 +1300 @@ -1 +1 @@ - שגיאה: Cache Access Denied

ERROR

Cache הגישה נדחית


The following error was encountered while trying to retrieve the URL: %U

גישה ל-Cache נדחית

Sorry, you are not currently allowed to request %U from this cache until you have authenticated yourself.

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



\ No newline at end of file + שגיאה: Cache Access Denied

ERROR

Cache הגישה נדחתה


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

גישה ל-Cache נדחית

Sorry, you are not currently allowed to request %U from this cache until you have authenticated yourself.

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



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_CACHE_MGR_ACCESS_DENIED squid-3.2.0.14/errors/he/ERR_CACHE_MGR_ACCESS_DENIED --- squid-3.2.0.13/errors/he/ERR_CACHE_MGR_ACCESS_DENIED 2011-10-14 15:29:10.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_CACHE_MGR_ACCESS_DENIED 2011-12-13 00:40:19.000000000 +1300 @@ -1 +1 @@ - שגיאה: Cache Manager Access Denied

ERROR

Cache Manager הגישה נדחית


The following error was encountered while trying to retrieve the URL: %U

גישת מנהל לשרת נדחית.

Sorry, you are not currently allowed to request %U from this cache manager until you have authenticated yourself.

Please contact the cache administrator if you have difficulties authenticating yourself or, if you are the administrator, read Squid documentation on cache manager interface and check cache log for more detailed error messages.



\ No newline at end of file + שגיאה: Cache Manager Access Denied

ERROR

Cache Manager הגישה נדחתה


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

גישת מנהל לשרת נדחית.

Sorry, you are not currently allowed to request %U from this cache manager until you have authenticated yourself.

Please contact the cache administrator if you have difficulties authenticating yourself or, if you are the administrator, read Squid documentation on cache manager interface and check cache log for more detailed error messages.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/he/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/he/ERR_CANNOT_FORWARD 2011-10-14 15:29:12.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_CANNOT_FORWARD 2011-12-13 00:40:23.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

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.

Some possible problems are:

  • 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 diff -u -r -N squid-3.2.0.13/errors/he/ERR_CONNECT_FAIL squid-3.2.0.14/errors/he/ERR_CONNECT_FAIL --- squid-3.2.0.13/errors/he/ERR_CONNECT_FAIL 2011-10-14 15:29:15.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_CONNECT_FAIL 2011-12-13 00:40:26.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Connection to %I failed.

הודעת המערכת: %E

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

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

החיבור ל %I נכשל.

הודעת המערכת: %E

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

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_DIR_LISTING squid-3.2.0.14/errors/he/ERR_DIR_LISTING --- squid-3.2.0.13/errors/he/ERR_DIR_LISTING 2011-10-14 15:29:17.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_DIR_LISTING 2011-12-13 00:40:28.000000000 +1300 @@ -1 +1 @@ - Directory: %U

Directory: %U/


Directory Content:

%z
%g
Parent Directory (Root Directory)

\ No newline at end of file + תיקייה: %U

תיקייה: %U/


תוכן התיקיה:

%z
%g
תיקיית אב (תיקיית השורש)

\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_DNS_FAIL squid-3.2.0.14/errors/he/ERR_DNS_FAIL --- squid-3.2.0.13/errors/he/ERR_DNS_FAIL 2011-10-14 15:29:20.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_DNS_FAIL 2011-12-13 00:40:30.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

לא יכול למצוא כתובת IP בשביל %H

הודעת שרת השמות:

%z

זה אומר ש השרת לא הצליח למצוא את השרת שצויין. בדוק את הכתובת.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

לא יכול למצוא כתובת IP בשביל %H

הודעת שרת השמות:

%z

זה אומר ש השרת לא הצליח למצוא את השרת שצויין. בדוק את הכתובת.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_ESI squid-3.2.0.14/errors/he/ERR_ESI --- squid-3.2.0.13/errors/he/ERR_ESI 2011-10-14 15:29:22.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_ESI 2011-12-13 00:40:33.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

ESI Processing failed.

The ESI processor returned:

%Z

This means that the surrogate was not able to process the ESI template. Please report this error to the webmaster.

Your webmaster is %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

עיבוד ESI נכשל.

The ESI processor returned:

%Z

משמעות הדבר היא שלא היה ניתן לעבד את תבנית ESI. אנא דווח על שגיאה זו למנהל הרשת.

מנהל הרשת שלך הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_FORWARDING_DENIED squid-3.2.0.14/errors/he/ERR_FORWARDING_DENIED --- squid-3.2.0.13/errors/he/ERR_FORWARDING_DENIED 2011-10-14 15:29:25.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_FORWARDING_DENIED 2011-12-13 00:40:37.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

העברה נדחית.

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.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

העברה נדחית.

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.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_FTP_DISABLED squid-3.2.0.14/errors/he/ERR_FTP_DISABLED --- squid-3.2.0.13/errors/he/ERR_FTP_DISABLED 2011-10-14 15:29:28.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_FTP_DISABLED 2011-12-13 00:40:40.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

FTP מבוטל

שרת זה אינו תוצך ב-FTP.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

FTP מבוטל

שרת זה אינו תומך ב-FTP.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_FTP_FAILURE squid-3.2.0.14/errors/he/ERR_FTP_FAILURE --- squid-3.2.0.13/errors/he/ERR_FTP_FAILURE 2011-10-14 15:29:31.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_FTP_FAILURE 2011-12-13 00:40:42.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


קרתה שגיאת פרוטוקול FTP כאשר ניסיתי לגשת אל הכתובת: %U

השרת שלח את פקודת ה-FTP הבאה:

%f

The server responded with:

%F
%g

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


קרתה שגיאת פרוטוקול FTP כאשר בוצע ניסיון לגשת אל הכתובת: %U

שרת ה Squid שלח את פקודת ה-FTP הבאה:

%f

תגובת השרת היא:

%F
%g

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_FTP_FORBIDDEN squid-3.2.0.14/errors/he/ERR_FTP_FORBIDDEN --- squid-3.2.0.13/errors/he/ERR_FTP_FORBIDDEN 2011-10-14 15:29:33.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_FTP_FORBIDDEN 2011-12-13 00:40:45.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


שגיאה בזיהוי משתמש FTP כאשר ניסיתי לגשת אל הכתובת: %U

השרת שלח את פקודת ה-FTP הבאה:

%f

The server responded with:

%F
%g

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


שגיאה בזיהוי משתמש FTP כאשר בוצע ניסיון לגשת אל הכתובת: %U

שרת ה Squid שלח את פקודת ה-FTP הבאה:

%f

תגובת השרת היא:

%F
%g

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_FTP_NOT_FOUND squid-3.2.0.14/errors/he/ERR_FTP_NOT_FOUND --- squid-3.2.0.13/errors/he/ERR_FTP_NOT_FOUND 2011-10-14 15:29:36.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_FTP_NOT_FOUND 2011-12-13 00:40:47.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


לא ניתן לגשת אל הכתובת הנ"ל: %U

השרת שלח את פקודת ה-FTP הבאה:

%f

The server responded with:

%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.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


לא ניתן לגשת אל הכתובת: %U

שרת ה Squid שלח את פקודת ה-FTP הבאה:

%f

תגובת השרת היא:

%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.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_FTP_PUT_CREATED squid-3.2.0.14/errors/he/ERR_FTP_PUT_CREATED --- squid-3.2.0.13/errors/he/ERR_FTP_PUT_CREATED 2011-10-14 15:29:39.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_FTP_PUT_CREATED 2011-12-13 00:40:50.000000000 +1300 @@ -1 +1 @@ - FTP PUT Successful.

פעולה עברה בהצלחה

הקובץ נוצר




\ No newline at end of file + FTP PUT Successful.

הפעולה עברה בהצלחה

הקובץ נוצר




\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_FTP_PUT_ERROR squid-3.2.0.14/errors/he/ERR_FTP_PUT_ERROR --- squid-3.2.0.13/errors/he/ERR_FTP_PUT_ERROR 2011-10-14 15:29:41.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_FTP_PUT_ERROR 2011-12-13 00:40:51.000000000 +1300 @@ -1 +1 @@ - שגיאה: FTP upload failed

ERROR

FTP PUT upload failed


קרתה שגיאת פרוטוקול FTP כאשר ניסיתי לגשת אל הכתובת: %U

השרת שלח את פקודת ה-FTP הבאה:

%f

The server responded with:

%F

This means that the FTP server may not have permission or space to store the file. Check the path, permissions, diskspace and try again.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: FTP upload failed

ERROR

FTP PUT upload failed


קרתה שגיאת פרוטוקול FTP כאשר בוצע ניסיון לגשת אל הכתובת: %U

שרת ה Squid שלח את פקודת ה-FTP הבאה:

%f

תגובת השרת היא:

%F

This means that the FTP server may not have permission or space to store the file. Check the path, permissions, diskspace and try again.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_FTP_PUT_MODIFIED squid-3.2.0.14/errors/he/ERR_FTP_PUT_MODIFIED --- squid-3.2.0.13/errors/he/ERR_FTP_PUT_MODIFIED 2011-10-14 15:29:44.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_FTP_PUT_MODIFIED 2011-12-13 00:40:53.000000000 +1300 @@ -1 +1 @@ - FTP PUT Successful.

פעולה עברה בהצלחה

הקובץ עודכן




\ No newline at end of file + FTP PUT Successful.

הפעולה עברה בהצלחה

הקובץ עודכן




\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_FTP_UNAVAILABLE squid-3.2.0.14/errors/he/ERR_FTP_UNAVAILABLE --- squid-3.2.0.13/errors/he/ERR_FTP_UNAVAILABLE 2011-10-14 15:29:46.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_FTP_UNAVAILABLE 2011-12-13 00:40:55.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


שרת ה-FTP היה עסוק מדי, כאשר ניסיתי לגשת אל הכתובת: %U

השרת שלח את פקודת ה-FTP הבאה:

%f

The server responded with:

%F
%g

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


שרת ה-FTP היה עסוק מדי, כאשר ניסיתי לגשת אל הכתובת: %U

שרת ה Squid שלח את פקודת ה-FTP הבאה:

%f

תגובת השרת היא:

%F
%g

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_GATEWAY_FAILURE squid-3.2.0.14/errors/he/ERR_GATEWAY_FAILURE --- squid-3.2.0.13/errors/he/ERR_GATEWAY_FAILURE 2011-10-14 15:29:49.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_GATEWAY_FAILURE 2011-12-13 00:40:57.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the 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.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

Gateway Proxy Failure

בעיה פנימית לא מוגדרת או הגדרות שגויות מונעים את השלמת הבקשה

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

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_ICAP_FAILURE squid-3.2.0.14/errors/he/ERR_ICAP_FAILURE --- squid-3.2.0.13/errors/he/ERR_ICAP_FAILURE 2011-10-14 15:29:52.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_ICAP_FAILURE 2011-12-13 00:40:58.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

ICAP protocol error.

הודעת המערכת: %E

This means that some aspect of the ICAP communication failed.

Some possible problems are:

  • The ICAP server is not reachable.

  • An Illegal response was received from the ICAP server.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

שגיאה בפרוטוקול ICAP.

הודעת המערכת: %E

משמעות הדבר היא כי היבט כלשהו של התקשורת ICAP נכשל.

Some possible problems are:

  • שרת ה ICAP לא נגיש.

  • תגובה בלתי חוקית התקבלה משרת ה ICAP.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_INVALID_REQ squid-3.2.0.14/errors/he/ERR_INVALID_REQ --- squid-3.2.0.13/errors/he/ERR_INVALID_REQ 2011-10-14 15:29:56.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_INVALID_REQ 2011-12-13 00:41:00.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


Invalid Request error was encountered while trying to process the request:

%R

Some possible problems are:

  • סוג בקשה לא ידוע או חסר

  • כתובת חסרה

  • Missing HTTP Identifier (HTTP/1.0).

  • הבקשה ארוכה מדי

  • חסר Content-Length בשביל בקשות POST או PUT

  • תווים לא חוקיים בשם השרת; קווים תחתונים אסורים

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

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


בקשה לא חוקית אירעה שגיאה בעת ביצוע הבקשה:

%R

Some possible problems are:

  • סוג בקשה לא ידוע או חסר

  • כתובת URL חסרה.

  • Missing HTTP Identifier (HTTP/1.0).

  • הבקשה גדולה מידי.

  • חסר Content-Length בשביל בקשות POST או PUT

  • תווים לא חוקיים בשם השרת; קווים תחתונים אסורים

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

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_INVALID_RESP squid-3.2.0.14/errors/he/ERR_INVALID_RESP --- squid-3.2.0.13/errors/he/ERR_INVALID_RESP 2011-10-14 15:29:58.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_INVALID_RESP 2011-12-13 00:41:03.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


Invalid Response error was encountered while trying to process the request:

%R

The HTTP Response message received from the contacted server could not be understood or was otherwise malformed. Please contact the site operator.

Your cache administrator may be able to provide you with more details about the exact nature of the problem if needed.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


תגובה לא חוקית אירעה שגיאה בעת ביצוע הבקשה:

%R

התגובת ה HTTP שהתקבלה מהשרת אינה מובנת או פגומה. אנא צור קשר עם מפעיל האתר.

Your cache administrator may be able to provide you with more details about the exact nature of the problem if needed.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_INVALID_URL squid-3.2.0.14/errors/he/ERR_INVALID_URL --- squid-3.2.0.13/errors/he/ERR_INVALID_URL 2011-10-14 15:30:02.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_INVALID_URL 2011-12-13 00:41:06.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

כתובת שגויה

Some aspect of the requested URL is incorrect.

Some possible problems are:

  • Missing or incorrect access protocol (should be http:// or similar)

  • חסר שם שרת

  • בריחה כפולה שגויה בנתיב

  • תווים לא חוקיים בשם השרת; קווים תחתונים אסורים

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

כתובת URL שגויה

Some aspect of the requested URL is incorrect.

Some possible problems are:

  • Missing or incorrect access protocol (should be http:// or similar)

  • חסר שם שרת

  • בריחה כפולה שגויה בנתיב

  • תווים לא חוקיים בשם השרת; קווים תחתונים אסורים

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_LIFETIME_EXP squid-3.2.0.14/errors/he/ERR_LIFETIME_EXP --- squid-3.2.0.13/errors/he/ERR_LIFETIME_EXP 2011-10-14 15:30:05.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_LIFETIME_EXP 2011-12-13 00:41:08.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

אורך החיים של הבקשה נגמר

השרת ביטל את הבקשה בגלל שהיא עברה את אורך החיים המאושר ליצירת חיבור.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

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.13/errors/he/ERR_NO_RELAY squid-3.2.0.14/errors/he/ERR_NO_RELAY --- squid-3.2.0.13/errors/he/ERR_NO_RELAY 2011-10-14 15:30:08.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_NO_RELAY 2011-12-13 00:41:10.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

אין שרת WAIS

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

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

אין שרת WAIS

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

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_ONLY_IF_CACHED_MISS squid-3.2.0.14/errors/he/ERR_ONLY_IF_CACHED_MISS --- squid-3.2.0.13/errors/he/ERR_ONLY_IF_CACHED_MISS 2011-10-14 15:30:12.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_ONLY_IF_CACHED_MISS 2011-12-13 00:41:13.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Valid document was not found in the cache and only-if-cached directive was specified.

You have issued a request with a only-if-cached cache control directive. The document was not found in the cache, or it required revalidation prohibited by the only-if-cached directive.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

Valid document was not found in the cache and only-if-cached directive was specified.

You have issued a request with a only-if-cached cache control directive. The document was not found in the cache, or it required revalidation prohibited by the only-if-cached directive.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/error-details.txt squid-3.2.0.14/errors/he/error-details.txt --- squid-3.2.0.13/errors/he/error-details.txt 2011-10-14 15:30:40.000000000 +1300 +++ squid-3.2.0.14/errors/he/error-details.txt 2011-12-13 00:41:41.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/he/ERR_PRECONDITION_FAILED squid-3.2.0.14/errors/he/ERR_PRECONDITION_FAILED --- squid-3.2.0.13/errors/he/ERR_PRECONDITION_FAILED 2011-10-14 15:30:14.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_PRECONDITION_FAILED 2011-12-13 00:41:16.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the 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 + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

ביצוע תנאי מקדים נכשל.

מידע מפורט:

לפחות תנאי מוקדם אחד שצויין על ידי לקוח ה HTTP לא מתקיים



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_READ_ERROR squid-3.2.0.14/errors/he/ERR_READ_ERROR --- squid-3.2.0.13/errors/he/ERR_READ_ERROR 2011-10-14 15:30:18.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_READ_ERROR 2011-12-13 00:41:19.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

שגיאה בקריאה

הודעת המערכת: %E

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

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

שגיאה בקריאה

הודעת המערכת: %E

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

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_READ_TIMEOUT squid-3.2.0.14/errors/he/ERR_READ_TIMEOUT --- squid-3.2.0.13/errors/he/ERR_READ_TIMEOUT 2011-10-14 15:30:21.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_READ_TIMEOUT 2011-12-13 00:41:21.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

קריאה הופסקה

הודעת המערכת: %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.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

הקריאה אורכת יותר מידי זמן

הודעת המערכת: %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.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_SECURE_CONNECT_FAIL squid-3.2.0.14/errors/he/ERR_SECURE_CONNECT_FAIL --- squid-3.2.0.13/errors/he/ERR_SECURE_CONNECT_FAIL 2011-10-14 15:30:23.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_SECURE_CONNECT_FAIL 2011-12-13 00:41:24.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Failed to establish a secure connection to %I

הודעת המערכת: %E

This proxy and the remote host failed to negotiate a mutually acceptable security settings for handling your request. It is possible that the remote host does not support secure connections, or the proxy is not satisfied with the host security credentials.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

אירעה שגיאה בניסיון ליצור חיבור מאובטח ל %I

הודעת המערכת: %E

This proxy and the remote host failed to negotiate a mutually acceptable security settings for handling your request. It is possible that the remote host does not support secure connections, or the proxy is not satisfied with the host security credentials.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_SHUTTING_DOWN squid-3.2.0.14/errors/he/ERR_SHUTTING_DOWN --- squid-3.2.0.13/errors/he/ERR_SHUTTING_DOWN 2011-10-14 15:30:26.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_SHUTTING_DOWN 2011-12-13 00:41:26.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the 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.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת ה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.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_SOCKET_FAILURE squid-3.2.0.14/errors/he/ERR_SOCKET_FAILURE --- squid-3.2.0.13/errors/he/ERR_SOCKET_FAILURE 2011-10-14 15:30:28.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_SOCKET_FAILURE 2011-12-13 00:41:28.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

שגיאת חיבור

הודעת המערכת: %E

השר לא הצליח ליצור חיבור TCP, כנראה בגלל עומס יתר. אנא נסה שוב.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

שגיאת חיבור

הודעת המערכת: %E

שרת ה Squid לא הצליח ליצור חיבור TCP, כנראה בגלל עומס יתר. אנא נסה שוב.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_TOO_BIG squid-3.2.0.14/errors/he/ERR_TOO_BIG --- squid-3.2.0.13/errors/he/ERR_TOO_BIG 2011-10-14 15:30:30.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_TOO_BIG 2011-12-13 00:41:30.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

הבקשה או התשובה גדולים מדי.

If you are making a POST or PUT request, then the item you are trying to upload is too large.

If you are making a GET request, then the item you are trying to download is too large.

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.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

הבקשה או התשובה גדולים מדי.

If you are making a POST or PUT request, then the item you are trying to upload is too large.

If you are making a GET request, then the item you are trying to download is too large.

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.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_UNSUP_HTTPVERSION squid-3.2.0.14/errors/he/ERR_UNSUP_HTTPVERSION --- squid-3.2.0.13/errors/he/ERR_UNSUP_HTTPVERSION 2011-10-14 15:30:32.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_UNSUP_HTTPVERSION 2011-12-13 00:41:31.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

Unsupported HTTP version


The following error was encountered while trying to retrieve the URL: %U

Unsupported HTTP version

This Squid does not accept the HTTP version you are attempting to use.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

גרסת HTTP לא נתמכת


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

Unsupported HTTP version

Squid לא מאפשר להשתמש בגרסת ה HTTP שאתה מנסה להשתמש.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_UNSUP_REQ squid-3.2.0.14/errors/he/ERR_UNSUP_REQ --- squid-3.2.0.13/errors/he/ERR_UNSUP_REQ 2011-10-14 15:30:34.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_UNSUP_REQ 2011-12-13 00:41:33.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

שיטת בקשה ופרוטוקול לא נתמכים

השרת אינו תומך בכל שיטות הבקשה לכל הפרוטוקולים. לדוגמא אינך יכול לשלוח בקשת Gopher ב-Post.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

שיטת בקשה ופרוטוקול לא נתמכים

שרת ה Squid אינו תומך בכל שיטות הבקשה לכל הפרוטוקולים. לדוגמא אינך יכול לשלוח בקשת POST ב-Gopher.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_URN_RESOLVE squid-3.2.0.14/errors/he/ERR_URN_RESOLVE --- squid-3.2.0.13/errors/he/ERR_URN_RESOLVE 2011-10-14 15:30:36.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_URN_RESOLVE 2011-12-13 00:41:36.000000000 +1300 @@ -1 +1 @@ - שגיאה: The requested URN could not be retrieved

ERROR

A URL for the requested URN could not be retrieved


The following error was encountered while trying to retrieve the URN: %U

Cannot Resolve URN

אל תצפה יותר מדי מ-URN על %T :)

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: The requested URN could not be retrieved

ERROR

לא ניתן לאחזר את כתובת ה URL מתוך כתובת ה URN


השגיאה הבאה אירעה בזמן ניסיון לפענח את כתובת ה URN: %U

Cannot Resolve URN

אל תצפה ליותר מדי מ-URN על %T :)

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_WRITE_ERROR squid-3.2.0.14/errors/he/ERR_WRITE_ERROR --- squid-3.2.0.13/errors/he/ERR_WRITE_ERROR 2011-10-14 15:30:38.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_WRITE_ERROR 2011-12-13 00:41:39.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

שגיאת כתיבה

הודעת המערכת: %E

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

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

שגיאת כתיבה

הודעת המערכת: %E

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

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/he/ERR_ZERO_SIZE_OBJECT squid-3.2.0.14/errors/he/ERR_ZERO_SIZE_OBJECT --- squid-3.2.0.13/errors/he/ERR_ZERO_SIZE_OBJECT 2011-10-14 15:30:40.000000000 +1300 +++ squid-3.2.0.14/errors/he/ERR_ZERO_SIZE_OBJECT 2011-12-13 00:41:41.000000000 +1300 @@ -1 +1 @@ - שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Zero Sized Reply

השרת לא קיבל כל תשובה לבקשה זו.

מנהל השרת הוא %w.



\ No newline at end of file + שגיאה: לא ניתן לגשת אל הכתובת המבוקשת

ERROR

The requested URL could not be retrieved


השגיאה הבאה אירעה בעת ניסיון לפענח את כתובת הURL: %U

Zero Sized Reply

השרת לא קיבל כל תשובה לבקשה זו.

מנהל השרת הוא %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/hu/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/hu/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/hu/ERR_CANNOT_FORWARD 2011-10-14 15:30:56.000000000 +1300 +++ squid-3.2.0.14/errors/hu/ERR_CANNOT_FORWARD 2011-12-13 00:41:55.000000000 +1300 @@ -1 +1 @@ - HIBA: A kért URL nem tölthető le

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

A kérést jelenleg nem lehet továbbítani.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + HIBA: A kért URL nem tölthető le

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

A kérést jelenleg nem lehet továbbítani.

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

Néhány lehetséges probléma:

  • 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/hu/error-details.txt squid-3.2.0.14/errors/hu/error-details.txt --- squid-3.2.0.13/errors/hu/error-details.txt 2011-10-14 15:32:50.000000000 +1300 +++ squid-3.2.0.14/errors/hu/error-details.txt 2011-12-13 00:43:03.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/hy/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/hy/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/hy/ERR_CANNOT_FORWARD 2011-10-14 15:33:07.000000000 +1300 +++ squid-3.2.0.14/errors/hy/ERR_CANNOT_FORWARD 2011-12-13 00:43:12.000000000 +1300 @@ -1 +1 @@ - ՍԽԱԼ: Պահանջվող URL-ն հնարավոր չէ ստանալ

ERROR

The requested URL could not be retrieved


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

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

Այս հարցումը հնարավոր չէ վերահասցեագրել սկզբնաղբյուր սերվերին կամ ծնողական քեշերից որևէ մեկին: Սխալի ամենահավանական պատճառներն են` այս սերվերի կառավարիչը արգելել է բոլոր ուղիղ միացումները սկզբնաղբյուր սերվերների հետ կամ բոլոր ծնողական քեշերը տվյալ պահին անհասանելի են:

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



\ No newline at end of file + ՍԽԱԼ: Պահանջվող 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 diff -u -r -N squid-3.2.0.13/errors/hy/error-details.txt squid-3.2.0.14/errors/hy/error-details.txt --- squid-3.2.0.13/errors/hy/error-details.txt 2011-10-14 15:34:50.000000000 +1300 +++ squid-3.2.0.14/errors/hy/error-details.txt 2011-12-13 00:44:05.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/id/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/id/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/id/ERR_CANNOT_FORWARD 2011-10-14 15:35:13.000000000 +1300 +++ squid-3.2.0.14/errors/id/ERR_CANNOT_FORWARD 2011-12-13 00:44:15.000000000 +1300 @@ -1 +1 @@ - ERROR: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + ERROR: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

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

Some possible problems are:

  • 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/id/error-details.txt squid-3.2.0.14/errors/id/error-details.txt --- squid-3.2.0.13/errors/id/error-details.txt 2011-10-14 15:37:01.000000000 +1300 +++ squid-3.2.0.14/errors/id/error-details.txt 2011-12-13 00:45:28.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/it/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/it/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/it/ERR_CANNOT_FORWARD 2011-10-14 15:37:26.000000000 +1300 +++ squid-3.2.0.14/errors/it/ERR_CANNOT_FORWARD 2011-12-13 00:45:40.000000000 +1300 @@ -1 +1 @@ - ERRORE: Non è stato possibile accedere alla URL richiesta.

ERROR

The requested URL could not be retrieved


Mentre si cercava di accedere alla URL %U si è presentato il seguente errore:

Non è possibile inoltrare la richiesta in questo momento.

La richiesta non può essere inoltrata al server di origine dei dati né ad alcun proxy di livello superiore. La causa più probabile è che l'amministratore del proxy abbia bloccato le connessioni dirette al server originario, e che tutti i proxy di livello superiore siano inaccessibili.

L'amministratore del proxy è %w.



\ No newline at end of file + ERRORE: Non è stato possibile accedere alla URL richiesta.

ERROR

The requested URL could not be retrieved


Mentre si cercava di accedere alla URL %U si è presentato il seguente errore:

Non è possibile inoltrare la richiesta in questo momento.

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

Alcuni dei possibili problemi sono:

  • 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.

L'amministratore del proxy è %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/it/error-details.txt squid-3.2.0.14/errors/it/error-details.txt --- squid-3.2.0.13/errors/it/error-details.txt 2011-10-14 15:39:07.000000000 +1300 +++ squid-3.2.0.14/errors/it/error-details.txt 2011-12-13 00:47:05.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/ja/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/ja/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/ja/ERR_CANNOT_FORWARD 2011-10-14 15:39:23.000000000 +1300 +++ squid-3.2.0.14/errors/ja/ERR_CANNOT_FORWARD 2011-12-13 00:47:17.000000000 +1300 @@ -1 +1 @@ - エラー: リクエストされた URL は取得できませんでした

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

現在,リクエストの転送はできません.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + エラー: リクエストされた URL は取得できませんでした

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/ja/error-details.txt squid-3.2.0.14/errors/ja/error-details.txt --- squid-3.2.0.13/errors/ja/error-details.txt 2011-10-14 15:41:12.000000000 +1300 +++ squid-3.2.0.14/errors/ja/error-details.txt 2011-12-13 00:48:32.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/ko/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/ko/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/ko/ERR_CANNOT_FORWARD 2011-10-14 15:41:38.000000000 +1300 +++ squid-3.2.0.14/errors/ko/ERR_CANNOT_FORWARD 2011-12-13 00:48:44.000000000 +1300 @@ -1 +1 @@ - 에러: 요청된 URL을 가져올 수 없습니다.

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

현재로서는 이 요청을 진행 시킬 수 없습니다.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + 에러: 요청된 URL을 가져올 수 없습니다.

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

현재로서는 이 요청을 진행 시킬 수 없습니다.

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

Some possible problems are:

  • 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/ko/error-details.txt squid-3.2.0.14/errors/ko/error-details.txt --- squid-3.2.0.13/errors/ko/error-details.txt 2011-10-14 15:44:17.000000000 +1300 +++ squid-3.2.0.14/errors/ko/error-details.txt 2011-12-13 00:49:58.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/lt/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/lt/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/lt/ERR_CANNOT_FORWARD 2011-10-14 15:44:48.000000000 +1300 +++ squid-3.2.0.14/errors/lt/ERR_CANNOT_FORWARD 2011-12-13 00:50:22.000000000 +1300 @@ -1 +1 @@ - KLAIDA: Puslapis nurodytu adresu negali būti atsiųstas

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Šiuo metu negaliu persiųsti užklausos.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + KLAIDA: Puslapis nurodytu adresu negali būti atsiųstas

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Šiuo metu negaliu persiųsti užklausos.

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

Some possible problems are:

  • 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/lt/error-details.txt squid-3.2.0.14/errors/lt/error-details.txt --- squid-3.2.0.13/errors/lt/error-details.txt 2011-10-14 15:47:50.000000000 +1300 +++ squid-3.2.0.14/errors/lt/error-details.txt 2011-12-13 00:51:56.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/lv/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/lv/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/lv/ERR_CANNOT_FORWARD 2011-10-14 15:48:21.000000000 +1300 +++ squid-3.2.0.14/errors/lv/ERR_CANNOT_FORWARD 2011-12-13 00:52:08.000000000 +1300 @@ -1 +1 @@ - Kļūda: Nevar atvērt pieprasīto adresi.

ERROR

The requested URL could not be retrieved


Iestājusies sekojoša kļūda mēģinot atvērt adresi: %U

Šobrīda nav iespējams pārsūtīt šo pieprasījumu.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Jūsu kešatmiņas administrators ir %w.



\ No newline at end of file + Kļūda: Nevar atvērt pieprasīto adresi.

ERROR

The requested URL could not be retrieved


Iestājusies sekojoša kļūda mēģinot atvērt adresi: %U

Šobrīda nav iespējams pārsūtīt šo pieprasījumu.

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

Dažas iespējamās problēmas ir:

  • 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.

Jūsu kešatmiņas administrators ir %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/lv/error-details.txt squid-3.2.0.14/errors/lv/error-details.txt --- squid-3.2.0.13/errors/lv/error-details.txt 2011-10-14 15:50:53.000000000 +1300 +++ squid-3.2.0.14/errors/lv/error-details.txt 2011-12-13 00:54:02.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/ms/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/ms/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/ms/ERR_CANNOT_FORWARD 2011-10-14 15:51:26.000000000 +1300 +++ squid-3.2.0.14/errors/ms/ERR_CANNOT_FORWARD 2011-12-13 00:54:18.000000000 +1300 @@ -1 +1 @@ - RALAT: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Pengurus Proxy anda ialah %w.



\ No newline at end of file + RALAT: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

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

Some possible problems are:

  • 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.

Pengurus Proxy anda ialah %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/ms/error-details.txt squid-3.2.0.14/errors/ms/error-details.txt --- squid-3.2.0.13/errors/ms/error-details.txt 2011-10-14 15:53:51.000000000 +1300 +++ squid-3.2.0.14/errors/ms/error-details.txt 2011-12-13 00:55:59.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/nl/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/nl/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/nl/ERR_CANNOT_FORWARD 2011-10-14 15:54:15.000000000 +1300 +++ squid-3.2.0.14/errors/nl/ERR_CANNOT_FORWARD 2011-12-13 00:56:22.000000000 +1300 @@ -1 +1 @@ - FOUT: De gevraagde URL kon niet worden opgehaald

ERROR

The requested URL could not be retrieved


De volgende fout is opgetreden tijdens het ophalen van URL: %U

Momenteel niet in staat dit verzoek door te sturen.

Dit verzoek kon niet worden doorgestuurd naar de oorspronkelijke server of een van de parent caches. De meest waarschijnlijke reden voor deze fout is dat de cache beheerder het deze cache niet toestaat met de oorspronkelijke server te praten, en alle ingestelde parent caches op dit moment onbereikbaar zijn.

De beheerder van deze cache is %w.



\ No newline at end of file + FOUT: De gevraagde URL kon niet worden opgehaald

ERROR

The requested URL could not be retrieved


De volgende fout is opgetreden tijdens het ophalen van URL: %U

Momenteel niet in staat dit verzoek door te sturen.

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

Mogelijke problemen zijn:

  • 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.

De beheerder van deze cache is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/nl/error-details.txt squid-3.2.0.14/errors/nl/error-details.txt --- squid-3.2.0.13/errors/nl/error-details.txt 2011-10-14 15:56:40.000000000 +1300 +++ squid-3.2.0.14/errors/nl/error-details.txt 2011-12-13 00:57:51.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/oc/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/oc/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/oc/ERR_CANNOT_FORWARD 2011-10-14 15:57:14.000000000 +1300 +++ squid-3.2.0.14/errors/oc/ERR_CANNOT_FORWARD 2011-12-13 00:58:02.000000000 +1300 @@ -1 +1 @@ - ERREUR : L'URL demandada a pas pogut èsser cargada

ERROR

L'URL demandada a pas pogut èsser cargada


L'error seguenta s'es producha en ensajant d'accedir a l'URL : %U

Unable to forward this request at this time.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Vòstre administrator d'amagatal es %w.



\ No newline at end of file + ERREUR : L'URL demandada a pas pogut èsser cargada

ERROR

L'URL demandada a pas pogut èsser cargada


L'error seguenta s'es producha en ensajant d'accedir a l'URL : %U

Unable to forward this request at this time.

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

Problèmas envisajables :

  • 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.

Vòstre administrator d'amagatal es %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/oc/error-details.txt squid-3.2.0.14/errors/oc/error-details.txt --- squid-3.2.0.13/errors/oc/error-details.txt 2011-10-14 15:59:35.000000000 +1300 +++ squid-3.2.0.14/errors/oc/error-details.txt 2011-12-13 00:59:21.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/pl/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/pl/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/pl/ERR_CANNOT_FORWARD 2011-10-14 15:59:57.000000000 +1300 +++ squid-3.2.0.14/errors/pl/ERR_CANNOT_FORWARD 2011-12-13 00:59:33.000000000 +1300 @@ -1 +1 @@ - BŁĄD: Żądany URL nie może zostać pobrany

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Nie można przekazać tego żądania w chwili obecnej.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + BŁĄD: Żądany URL nie może zostać pobrany

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Nie można przekazać tego żądania w chwili obecnej.

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

Some possible problems are:

  • 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/pl/error-details.txt squid-3.2.0.14/errors/pl/error-details.txt --- squid-3.2.0.13/errors/pl/error-details.txt 2011-10-14 16:02:31.000000000 +1300 +++ squid-3.2.0.14/errors/pl/error-details.txt 2011-12-13 01:00:52.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/pt/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/pt/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/pt/ERR_CANNOT_FORWARD 2011-10-14 16:05:28.000000000 +1300 +++ squid-3.2.0.14/errors/pt/ERR_CANNOT_FORWARD 2011-12-13 01:02:31.000000000 +1300 @@ -1 +1 @@ - ERRO: A URL solicitada não pode ser recuperada

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Cache incapaz de encaminhar esta requisição neste momento.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + ERRO: A URL solicitada não pode ser recuperada

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Cache incapaz de encaminhar esta requisição neste momento.

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

Some possible problems are:

  • 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/pt/error-details.txt squid-3.2.0.14/errors/pt/error-details.txt --- squid-3.2.0.13/errors/pt/error-details.txt 2011-10-14 16:08:12.000000000 +1300 +++ squid-3.2.0.14/errors/pt/error-details.txt 2011-12-13 01:03:39.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/pt-br/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/pt-br/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/pt-br/ERR_CANNOT_FORWARD 2011-10-14 16:02:58.000000000 +1300 +++ squid-3.2.0.14/errors/pt-br/ERR_CANNOT_FORWARD 2011-12-13 01:01:07.000000000 +1300 @@ -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. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

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.

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 diff -u -r -N squid-3.2.0.13/errors/pt-br/error-details.txt squid-3.2.0.14/errors/pt-br/error-details.txt --- squid-3.2.0.13/errors/pt-br/error-details.txt 2011-10-14 16:05:12.000000000 +1300 +++ squid-3.2.0.14/errors/pt-br/error-details.txt 2011-12-13 01:02:21.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/ro/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/ro/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/ro/ERR_CANNOT_FORWARD 2011-10-14 16:08:37.000000000 +1300 +++ squid-3.2.0.14/errors/ro/ERR_CANNOT_FORWARD 2011-12-13 01:03:50.000000000 +1300 @@ -1 +1 @@ - EROARE: URL-ul cerut nu a putut fi accesat

ERROR

The requested URL could not be retrieved


S-a recepţionat următoarea eroare când se încerca accesarea URL-ului: %U

Nu pot să forwardez această cerere la acest moment.

Această cerere nu a putut fi înaintată către serverul de origine sau un cache părinte. Cea mai probabilă cauză de eroare este că administratorul cache-ului nu permite acestui cache să facă conexiuni directe către serverele de origine şi toate cache-urile părinte nu pot fi contactate în acest moment.

Administratorul cache-ului este %w.



\ No newline at end of file + EROARE: URL-ul cerut nu a putut fi accesat

ERROR

The requested URL could not be retrieved


S-a recepţionat următoarea eroare când se încerca accesarea URL-ului: %U

Nu pot să forwardez această cerere la acest moment.

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

Unele posibile probleme sunt:

  • 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.

Administratorul cache-ului este %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/ro/error-details.txt squid-3.2.0.14/errors/ro/error-details.txt --- squid-3.2.0.13/errors/ro/error-details.txt 2011-10-14 16:11:21.000000000 +1300 +++ squid-3.2.0.14/errors/ro/error-details.txt 2011-12-13 01:04:52.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/ru/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/ru/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/ru/ERR_CANNOT_FORWARD 2011-10-14 16:11:53.000000000 +1300 +++ squid-3.2.0.14/errors/ru/ERR_CANNOT_FORWARD 2011-12-13 01:05:06.000000000 +1300 @@ -1 +1 @@ - ОШИБКА: Запрошенный URL не может быть получен

ERROR

The requested URL could not be retrieved


При получении URL %U произошла следующая ошибка

Невозможно переслать этот запрос в данное время.

Запрос не может быть направлен на сервер-источник файла или на любой вышестоящий кэширующий прокси-сервер. Наиболее вероятной причиной этой ошибки является то, что кэш-администратор запретил подключаться к серверам интернета напрямую, а все вышестоящие кэширующие прокси-серверы в данный момент не доступны.

Администратор Вашего кэша: %w.



\ No newline at end of file + ОШИБКА: Запрошенный 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 diff -u -r -N squid-3.2.0.13/errors/ru/error-details.txt squid-3.2.0.14/errors/ru/error-details.txt --- squid-3.2.0.13/errors/ru/error-details.txt 2011-10-14 16:13:50.000000000 +1300 +++ squid-3.2.0.14/errors/ru/error-details.txt 2011-12-13 01:07:06.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/sk/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/sk/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/sk/ERR_CANNOT_FORWARD 2011-10-14 16:14:04.000000000 +1300 +++ squid-3.2.0.14/errors/sk/ERR_CANNOT_FORWARD 2011-12-13 01:07:25.000000000 +1300 @@ -1 +1 @@ - CHYBA: Požadovaný URL nebolo možné získať

ERROR

The requested URL could not be retrieved


Pri pokuse o získanie URL sa vyskytla nasledovná chyba: %U

Požiadavku teraz nie je možné presmerovať.

Požiadavku nemožno presmerovať k pôvodnému serveru alebo nadradeným cache serverom. Príčinou môže byť, že správca cache servera nedovolil tomuto cache serveru priamy prístup k pôvodným serverom a všetky nadradené cache servery sú práve nedostupné.

Vaším správcom cache je %w.



\ No newline at end of file + CHYBA: Požadovaný URL nebolo možné získať

ERROR

The requested URL could not be retrieved


Pri pokuse o získanie URL sa vyskytla nasledovná chyba: %U

Požiadavku teraz nie je možné presmerovať.

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

Niektoré možné problémy:

  • 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.

Vaším správcom cache je %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/sk/error-details.txt squid-3.2.0.14/errors/sk/error-details.txt --- squid-3.2.0.13/errors/sk/error-details.txt 2011-10-14 16:15:39.000000000 +1300 +++ squid-3.2.0.14/errors/sk/error-details.txt 2011-12-13 01:09:19.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/sl/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/sl/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/sl/ERR_CANNOT_FORWARD 2011-10-14 16:16:00.000000000 +1300 +++ squid-3.2.0.14/errors/sl/ERR_CANNOT_FORWARD 2011-12-13 01:09:37.000000000 +1300 @@ -1 +1 @@ - NAPAKA: Zahtevanega naslova URL ni bilo mogoče naložiti

ERROR

The requested URL could not be retrieved


Prišlo je do napake med poskusom nalaganja naslova URL: %U

Te zahteve trenutno ni mogoče posredovati.

Te zahteve ni bilo mogoče posredovati izvornemu strežniku ali nadrejenim predpomnilnikom. Vzrok za napako je najverjetneje to, da skrbnik predpomnilnika ne dovoli, da bi ta predpomnilnik vzpostavljal neposredne povezave z izvornimi strežniki, nastavljeni nadrejeni predpomnilniki pa so trenutno vsi nedosegljivi.

Skrbnik vašega predpomnilnika je %w.



\ No newline at end of file + NAPAKA: Zahtevanega naslova URL ni bilo mogoče naložiti

ERROR

The requested URL could not be retrieved


Prišlo je do napake med poskusom nalaganja naslova URL: %U

Te zahteve trenutno ni mogoče posredovati.

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

Težave so lahko med drugim:

  • 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.

Skrbnik vašega predpomnilnika je %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/sl/error-details.txt squid-3.2.0.14/errors/sl/error-details.txt --- squid-3.2.0.13/errors/sl/error-details.txt 2011-10-14 16:17:39.000000000 +1300 +++ squid-3.2.0.14/errors/sl/error-details.txt 2011-12-13 01:11:05.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/sr-cyrl/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/sr-cyrl/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/sr-cyrl/ERR_CANNOT_FORWARD 2011-10-14 16:17:55.000000000 +1300 +++ squid-3.2.0.14/errors/sr-cyrl/ERR_CANNOT_FORWARD 2011-12-13 01:11:21.000000000 +1300 @@ -1 +1 @@ - ERROR: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + ERROR: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

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

Some possible problems are:

  • 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/sr-cyrl/error-details.txt squid-3.2.0.14/errors/sr-cyrl/error-details.txt --- squid-3.2.0.13/errors/sr-cyrl/error-details.txt 2011-10-14 16:19:07.000000000 +1300 +++ squid-3.2.0.14/errors/sr-cyrl/error-details.txt 2011-12-13 01:12:42.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/sr-latn/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/sr-latn/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/sr-latn/ERR_CANNOT_FORWARD 2011-10-14 16:19:21.000000000 +1300 +++ squid-3.2.0.14/errors/sr-latn/ERR_CANNOT_FORWARD 2011-12-13 01:12:58.000000000 +1300 @@ -1 +1 @@ - GREŠKA: Tražena adresa (URL) ne može da se učita

ERROR

The requested URL could not be retrieved


Greška učitavanja podataka sa adrese (URL): %U

Vaš zahtev ne može da se prosledi u ovom trenutku.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Vaš keš/proksi administrator je: %w.



\ No newline at end of file + GREŠKA: Tražena adresa (URL) ne može da se učita

ERROR

The requested URL could not be retrieved


Greška učitavanja podataka sa adrese (URL): %U

Vaš zahtev ne može da se prosledi u ovom trenutku.

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

Mogući problemi su:

  • 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.

Vaš keš/proksi administrator je: %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/sr-latn/error-details.txt squid-3.2.0.14/errors/sr-latn/error-details.txt --- squid-3.2.0.13/errors/sr-latn/error-details.txt 2011-10-14 16:20:57.000000000 +1300 +++ squid-3.2.0.14/errors/sr-latn/error-details.txt 2011-12-13 01:14:31.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/sv/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/sv/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/sv/ERR_CANNOT_FORWARD 2011-10-14 16:21:29.000000000 +1300 +++ squid-3.2.0.14/errors/sv/ERR_CANNOT_FORWARD 2011-12-13 01:14:47.000000000 +1300 @@ -1 +1 @@ - FEL: Den begärda URL:en kunde inte hämtas

ERROR

The requested URL could not be retrieved


Följande fel påträffades vid hämtning av URL: %U

Kunde ej vidarebefodra förfrågan vid detta tillfälle.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Din cacheserver administratör är %w.



\ No newline at end of file + FEL: Den begärda URL:en kunde inte hämtas

ERROR

The requested URL could not be retrieved


Följande fel påträffades vid hämtning av URL: %U

Kunde ej vidarebefodra förfrågan vid detta tillfälle.

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

Några möjliga problem är:

  • 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.

Din cacheserver administratör är %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/sv/error-details.txt squid-3.2.0.14/errors/sv/error-details.txt --- squid-3.2.0.13/errors/sv/error-details.txt 2011-10-14 16:23:51.000000000 +1300 +++ squid-3.2.0.14/errors/sv/error-details.txt 2011-12-13 01:17:04.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/templates/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/templates/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/templates/ERR_CANNOT_FORWARD 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/errors/templates/ERR_CANNOT_FORWARD 2011-12-13 00:08:18.000000000 +1300 @@ -23,7 +23,14 @@

Unable to forward this request at this time.

-

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

+

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

+ +

Some possible problems are:

+
    +
  • 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.
  • +

Your cache administrator is %w.

diff -u -r -N squid-3.2.0.13/errors/templates/error-details.txt squid-3.2.0.14/errors/templates/error-details.txt --- squid-3.2.0.13/errors/templates/error-details.txt 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/errors/templates/error-details.txt 2011-12-13 00:08:18.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/th/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/th/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/th/ERR_CANNOT_FORWARD 2011-10-14 16:24:19.000000000 +1300 +++ squid-3.2.0.14/errors/th/ERR_CANNOT_FORWARD 2011-12-13 01:17:17.000000000 +1300 @@ -1 +1 @@ - ERROR: ไม่สามารถเรียกดู URL ที่ได้รับการร้องขอ

ERROR

ไม่สามารถเรียกดู URL ที่ได้รับการร้องขอ


พบความผิดพลาดดังต่อไปนี้ระหว่างที่พยายามเรียกดู URL: %U

ในขณะนี้ไม่สามารถส่งต่อ (forward) คำขอนี้

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

ผู้ดูแลระบบแคชของคุณคือ %w



\ No newline at end of file + ERROR: ไม่สามารถเรียกดู URL ที่ได้รับการร้องขอ

ERROR

ไม่สามารถเรียกดู URL ที่ได้รับการร้องขอ


พบความผิดพลาดดังต่อไปนี้ระหว่างที่พยายามเรียกดู URL: %U

ในขณะนี้ไม่สามารถส่งต่อ (forward) คำขอนี้

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 diff -u -r -N squid-3.2.0.13/errors/th/error-details.txt squid-3.2.0.14/errors/th/error-details.txt --- squid-3.2.0.13/errors/th/error-details.txt 2011-10-14 16:27:01.000000000 +1300 +++ squid-3.2.0.14/errors/th/error-details.txt 2011-12-13 01:18:35.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/tr/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/tr/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/tr/ERR_CANNOT_FORWARD 2011-10-14 16:27:28.000000000 +1300 +++ squid-3.2.0.14/errors/tr/ERR_CANNOT_FORWARD 2011-12-13 01:18:49.000000000 +1300 @@ -1 +1 @@ - HATA: İstenilen URL'e ulaşılamadı

ERROR

The requested URL could not be retrieved


URL adresine erişilmeye çalışıyorken hata meydana geldi: %U

Şu anda sizi yönlendiremem.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Önbellk yöneticiniz %w.



\ No newline at end of file + HATA: İstenilen URL'e ulaşılamadı

ERROR

The requested URL could not be retrieved


URL adresine erişilmeye çalışıyorken hata meydana geldi: %U

Şu anda sizi yönlendiremem.

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

Buna sebep aşağidakilerden herhangi biri olabilir:

  • 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.

Önbellk yöneticiniz %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/tr/error-details.txt squid-3.2.0.14/errors/tr/error-details.txt --- squid-3.2.0.13/errors/tr/error-details.txt 2011-10-14 16:30:11.000000000 +1300 +++ squid-3.2.0.14/errors/tr/error-details.txt 2011-12-13 01:20:14.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/uk/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/uk/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/uk/ERR_CANNOT_FORWARD 2011-10-14 16:30:39.000000000 +1300 +++ squid-3.2.0.14/errors/uk/ERR_CANNOT_FORWARD 2011-12-13 01:20:26.000000000 +1300 @@ -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. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Адміністратор даного кешу %w.



\ No newline at end of file + ПОМИЛКА: Запитаний 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 diff -u -r -N squid-3.2.0.13/errors/uk/error-details.txt squid-3.2.0.14/errors/uk/error-details.txt --- squid-3.2.0.13/errors/uk/error-details.txt 2011-10-14 16:33:33.000000000 +1300 +++ squid-3.2.0.14/errors/uk/error-details.txt 2011-12-13 01:22:01.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/uz/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/uz/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/uz/ERR_CANNOT_FORWARD 2011-10-14 16:33:58.000000000 +1300 +++ squid-3.2.0.14/errors/uz/ERR_CANNOT_FORWARD 2011-12-13 01:22:16.000000000 +1300 @@ -1 +1 @@ - ХАТО: Сўралган URL топилмади

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + ХАТО: Сўралган URL топилмади

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/uz/error-details.txt squid-3.2.0.14/errors/uz/error-details.txt --- squid-3.2.0.13/errors/uz/error-details.txt 2011-10-14 16:36:42.000000000 +1300 +++ squid-3.2.0.14/errors/uz/error-details.txt 2011-12-13 01:23:44.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/vi/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/vi/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/vi/ERR_CANNOT_FORWARD 2011-10-14 16:37:12.000000000 +1300 +++ squid-3.2.0.14/errors/vi/ERR_CANNOT_FORWARD 2011-12-13 01:23:59.000000000 +1300 @@ -1 +1 @@ - LỖI: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + LỖI: The requested URL could not be retrieved

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

Unable to forward this request at this time.

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

Một số vấn đề có thể gặp:

  • 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/vi/error-details.txt squid-3.2.0.14/errors/vi/error-details.txt --- squid-3.2.0.13/errors/vi/error-details.txt 2011-10-14 16:40:18.000000000 +1300 +++ squid-3.2.0.14/errors/vi/error-details.txt 2011-12-13 01:25:38.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/zh-cn/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/zh-cn/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/zh-cn/ERR_CANNOT_FORWARD 2011-10-14 16:40:47.000000000 +1300 +++ squid-3.2.0.14/errors/zh-cn/ERR_CANNOT_FORWARD 2011-12-13 01:25:56.000000000 +1300 @@ -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. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

缓存服务器的管理员 %w.



\ No newline at end of file + 错误: 您所请求的网址(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 diff -u -r -N squid-3.2.0.13/errors/zh-cn/error-details.txt squid-3.2.0.14/errors/zh-cn/error-details.txt --- squid-3.2.0.13/errors/zh-cn/error-details.txt 2011-10-14 16:43:58.000000000 +1300 +++ squid-3.2.0.14/errors/zh-cn/error-details.txt 2011-12-13 01:27:26.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/errors/zh-tw/ERR_CANNOT_FORWARD squid-3.2.0.14/errors/zh-tw/ERR_CANNOT_FORWARD --- squid-3.2.0.13/errors/zh-tw/ERR_CANNOT_FORWARD 2011-10-14 16:44:33.000000000 +1300 +++ squid-3.2.0.14/errors/zh-tw/ERR_CANNOT_FORWARD 2011-12-13 01:27:44.000000000 +1300 @@ -1 +1 @@ - 錯誤: 欲連結之網址(URL)無法正確的傳回

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

目前無法替您的網站連結要求進行轉向動作

This request could not be forwarded to the origin server or to any parent caches. The most likely cause for this error is that the cache administrator does not allow this cache to make direct connections to origin servers, and all configured parent caches are currently unreachable.

Your cache administrator is %w.



\ No newline at end of file + 錯誤: 欲連結之網址(URL)無法正確的傳回

ERROR

The requested URL could not be retrieved


The following error was encountered while trying to retrieve the URL: %U

目前無法替您的網站連結要求進行轉向動作

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

Some possible problems are:

  • 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.

Your cache administrator is %w.



\ No newline at end of file diff -u -r -N squid-3.2.0.13/errors/zh-tw/error-details.txt squid-3.2.0.14/errors/zh-tw/error-details.txt --- squid-3.2.0.13/errors/zh-tw/error-details.txt 2011-10-14 16:47:36.000000000 +1300 +++ squid-3.2.0.14/errors/zh-tw/error-details.txt 2011-12-13 01:28:54.000000000 +1300 @@ -1,3 +1,7 @@ +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + name: SQUID_X509_V_ERR_DOMAIN_MISMATCH detail: "%ssl_error_descr: %ssl_subject" descr: "Certificate does not match domainname" diff -u -r -N squid-3.2.0.13/helpers/basic_auth/DB/basic_db_auth.8 squid-3.2.0.14/helpers/basic_auth/DB/basic_db_auth.8 --- squid-3.2.0.13/helpers/basic_auth/DB/basic_db_auth.8 2011-10-14 16:47:52.000000000 +1300 +++ squid-3.2.0.14/helpers/basic_auth/DB/basic_db_auth.8 2011-12-13 01:28:59.000000000 +1300 @@ -124,7 +124,7 @@ .\" ======================================================================== .\" .IX Title "BASIC_DB_AUTH 1" -.TH BASIC_DB_AUTH 1 "2011-10-13" "perl v5.10.1" "User Contributed Perl Documentation" +.TH BASIC_DB_AUTH 1 "2011-12-12" "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.13/helpers/basic_auth/PAM/basic_pam_auth.cc squid-3.2.0.14/helpers/basic_auth/PAM/basic_pam_auth.cc --- squid-3.2.0.13/helpers/basic_auth/PAM/basic_pam_auth.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/helpers/basic_auth/PAM/basic_pam_auth.cc 2011-12-13 00:08:18.000000000 +1300 @@ -93,12 +93,12 @@ #endif /* The default PAM service name */ -#ifndef DEFAULT_SQUID_PAM_SERVICE +#if !defined(DEFAULT_SQUID_PAM_SERVICE) #define DEFAULT_SQUID_PAM_SERVICE "squid" #endif /* The default TTL */ -#ifndef DEFAULT_SQUID_PAM_TTL +#if !defined(DEFAULT_SQUID_PAM_TTL) #define DEFAULT_SQUID_PAM_TTL 0 #endif diff -u -r -N squid-3.2.0.13/helpers/basic_auth/SMB/Makefile.am squid-3.2.0.14/helpers/basic_auth/SMB/Makefile.am --- squid-3.2.0.13/helpers/basic_auth/SMB/Makefile.am 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/helpers/basic_auth/SMB/Makefile.am 2011-12-13 00:08:18.000000000 +1300 @@ -1,7 +1,9 @@ include $(top_srcdir)/src/Common.am +if !ENABLE_WIN32SPECIFIC libexec_SCRIPTS = basic_smb_auth.sh libexec_PROGRAMS = basic_smb_auth +endif basic_smb_auth_SOURCES= basic_smb_auth.cc basic_smb_auth_CXXFLAGS = -DHELPERSCRIPT=\"$(libexecdir)/basic_smb_auth.sh\" basic_smb_auth_LDADD = \ diff -u -r -N squid-3.2.0.13/helpers/basic_auth/SMB/Makefile.in squid-3.2.0.14/helpers/basic_auth/SMB/Makefile.in --- squid-3.2.0.13/helpers/basic_auth/SMB/Makefile.in 2011-10-14 14:46:55.000000000 +1300 +++ squid-3.2.0.14/helpers/basic_auth/SMB/Makefile.in 2011-12-13 00:10:17.000000000 +1300 @@ -40,7 +40,8 @@ check_PROGRAMS = TESTS = @USE_LOADABLE_MODULES_TRUE@am__append_1 = $(INCLTDL) -libexec_PROGRAMS = basic_smb_auth$(EXEEXT) +@ENABLE_WIN32SPECIFIC_FALSE@libexec_PROGRAMS = \ +@ENABLE_WIN32SPECIFIC_FALSE@ basic_smb_auth$(EXEEXT) subdir = helpers/basic_auth/SMB ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude/init.m4 \ @@ -331,7 +332,7 @@ @ENABLE_XPROF_STATS_TRUE@LIBPROFILER = $(top_builddir)/lib/profiler/libprofiler.la COMPAT_LIB = -L$(top_builddir)/compat -lcompat-squid $(LIBPROFILER) subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) -libexec_SCRIPTS = basic_smb_auth.sh +@ENABLE_WIN32SPECIFIC_FALSE@libexec_SCRIPTS = basic_smb_auth.sh basic_smb_auth_SOURCES = basic_smb_auth.cc basic_smb_auth_CXXFLAGS = -DHELPERSCRIPT=\"$(libexecdir)/basic_smb_auth.sh\" basic_smb_auth_LDADD = \ diff -u -r -N squid-3.2.0.13/helpers/basic_auth/SSPI/Makefile.am squid-3.2.0.14/helpers/basic_auth/SSPI/Makefile.am --- squid-3.2.0.13/helpers/basic_auth/SSPI/Makefile.am 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/helpers/basic_auth/SSPI/Makefile.am 2011-12-13 00:08:18.000000000 +1300 @@ -3,14 +3,21 @@ ## we need our local files too (but avoid -I. at all costs) INCLUDES += -I$(srcdir) +if ENABLE_WIN32SPECIFIC libexec_PROGRAMS = basic_sspi_auth +endif -basic_sspi_auth_SOURCES = basic_sspi_auth.cc valid.cc valid.h +basic_sspi_auth_SOURCES = \ + basic_sspi_auth.cc \ + valid.cc valid.h +basic_sspi_auth_CXXFLAGS = -Wl,--enable-auto-import basic_sspi_auth_LDADD = \ - -L$(top_builddir)/lib -lsspwin32 \ $(COMPAT_LIB) \ - -lnetapi32 -ladvapi32 + -L$(top_builddir)/lib \ + -lsspwin32 \ + -lmiscencoding \ + -lnetapi32 -ladvapi32 \ $(XTRA_LIBS) -man_MANS = basic_db_auth.8 +man_MANS = basic_sspi_auth.8 EXTRA_DIST = basic_sspi_auth.8 config.test diff -u -r -N squid-3.2.0.13/helpers/basic_auth/SSPI/Makefile.in squid-3.2.0.14/helpers/basic_auth/SSPI/Makefile.in --- squid-3.2.0.13/helpers/basic_auth/SSPI/Makefile.in 2011-10-14 14:46:56.000000000 +1300 +++ squid-3.2.0.14/helpers/basic_auth/SSPI/Makefile.in 2011-12-13 00:10:18.000000000 +1300 @@ -39,7 +39,8 @@ check_PROGRAMS = TESTS = @USE_LOADABLE_MODULES_TRUE@am__append_1 = $(INCLTDL) -libexec_PROGRAMS = basic_sspi_auth$(EXEEXT) +@ENABLE_WIN32SPECIFIC_TRUE@libexec_PROGRAMS = \ +@ENABLE_WIN32SPECIFIC_TRUE@ basic_sspi_auth$(EXEEXT) subdir = helpers/basic_auth/SSPI ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude/init.m4 \ @@ -58,11 +59,19 @@ CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(man8dir)" PROGRAMS = $(libexec_PROGRAMS) -am_basic_sspi_auth_OBJECTS = basic_sspi_auth.$(OBJEXT) valid.$(OBJEXT) +am_basic_sspi_auth_OBJECTS = \ + basic_sspi_auth-basic_sspi_auth.$(OBJEXT) \ + basic_sspi_auth-valid.$(OBJEXT) basic_sspi_auth_OBJECTS = $(am_basic_sspi_auth_OBJECTS) @ENABLE_XPROF_STATS_TRUE@am__DEPENDENCIES_1 = $(top_builddir)/lib/profiler/libprofiler.la am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) -basic_sspi_auth_DEPENDENCIES = $(am__DEPENDENCIES_2) +am__DEPENDENCIES_3 = +basic_sspi_auth_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_3) +basic_sspi_auth_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(basic_sspi_auth_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/cfgaux/depcomp am__depfiles_maybe = depfiles @@ -335,13 +344,20 @@ @ENABLE_XPROF_STATS_TRUE@LIBPROFILER = $(top_builddir)/lib/profiler/libprofiler.la COMPAT_LIB = -L$(top_builddir)/compat -lcompat-squid $(LIBPROFILER) subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) -basic_sspi_auth_SOURCES = basic_sspi_auth.cc valid.cc valid.h +basic_sspi_auth_SOURCES = \ + basic_sspi_auth.cc \ + valid.cc valid.h + +basic_sspi_auth_CXXFLAGS = -Wl,--enable-auto-import basic_sspi_auth_LDADD = \ - -L$(top_builddir)/lib -lsspwin32 \ $(COMPAT_LIB) \ - -lnetapi32 -ladvapi32 + -L$(top_builddir)/lib \ + -lsspwin32 \ + -lmiscencoding \ + -lnetapi32 -ladvapi32 \ + $(XTRA_LIBS) -man_MANS = basic_db_auth.8 +man_MANS = basic_sspi_auth.8 EXTRA_DIST = basic_sspi_auth.8 config.test all: all-am @@ -431,7 +447,7 @@ rm -f $$list basic_sspi_auth$(EXEEXT): $(basic_sspi_auth_OBJECTS) $(basic_sspi_auth_DEPENDENCIES) @rm -f basic_sspi_auth$(EXEEXT) - $(CXXLINK) $(basic_sspi_auth_OBJECTS) $(basic_sspi_auth_LDADD) $(LIBS) + $(basic_sspi_auth_LINK) $(basic_sspi_auth_OBJECTS) $(basic_sspi_auth_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -439,8 +455,8 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic_sspi_auth.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/valid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic_sspi_auth-basic_sspi_auth.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic_sspi_auth-valid.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -463,6 +479,34 @@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +basic_sspi_auth-basic_sspi_auth.o: basic_sspi_auth.cc +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(basic_sspi_auth_CXXFLAGS) $(CXXFLAGS) -MT basic_sspi_auth-basic_sspi_auth.o -MD -MP -MF $(DEPDIR)/basic_sspi_auth-basic_sspi_auth.Tpo -c -o basic_sspi_auth-basic_sspi_auth.o `test -f 'basic_sspi_auth.cc' || echo '$(srcdir)/'`basic_sspi_auth.cc +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/basic_sspi_auth-basic_sspi_auth.Tpo $(DEPDIR)/basic_sspi_auth-basic_sspi_auth.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='basic_sspi_auth.cc' object='basic_sspi_auth-basic_sspi_auth.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(basic_sspi_auth_CXXFLAGS) $(CXXFLAGS) -c -o basic_sspi_auth-basic_sspi_auth.o `test -f 'basic_sspi_auth.cc' || echo '$(srcdir)/'`basic_sspi_auth.cc + +basic_sspi_auth-basic_sspi_auth.obj: basic_sspi_auth.cc +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(basic_sspi_auth_CXXFLAGS) $(CXXFLAGS) -MT basic_sspi_auth-basic_sspi_auth.obj -MD -MP -MF $(DEPDIR)/basic_sspi_auth-basic_sspi_auth.Tpo -c -o basic_sspi_auth-basic_sspi_auth.obj `if test -f 'basic_sspi_auth.cc'; then $(CYGPATH_W) 'basic_sspi_auth.cc'; else $(CYGPATH_W) '$(srcdir)/basic_sspi_auth.cc'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/basic_sspi_auth-basic_sspi_auth.Tpo $(DEPDIR)/basic_sspi_auth-basic_sspi_auth.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='basic_sspi_auth.cc' object='basic_sspi_auth-basic_sspi_auth.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(basic_sspi_auth_CXXFLAGS) $(CXXFLAGS) -c -o basic_sspi_auth-basic_sspi_auth.obj `if test -f 'basic_sspi_auth.cc'; then $(CYGPATH_W) 'basic_sspi_auth.cc'; else $(CYGPATH_W) '$(srcdir)/basic_sspi_auth.cc'; fi` + +basic_sspi_auth-valid.o: valid.cc +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(basic_sspi_auth_CXXFLAGS) $(CXXFLAGS) -MT basic_sspi_auth-valid.o -MD -MP -MF $(DEPDIR)/basic_sspi_auth-valid.Tpo -c -o basic_sspi_auth-valid.o `test -f 'valid.cc' || echo '$(srcdir)/'`valid.cc +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/basic_sspi_auth-valid.Tpo $(DEPDIR)/basic_sspi_auth-valid.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='valid.cc' object='basic_sspi_auth-valid.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(basic_sspi_auth_CXXFLAGS) $(CXXFLAGS) -c -o basic_sspi_auth-valid.o `test -f 'valid.cc' || echo '$(srcdir)/'`valid.cc + +basic_sspi_auth-valid.obj: valid.cc +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(basic_sspi_auth_CXXFLAGS) $(CXXFLAGS) -MT basic_sspi_auth-valid.obj -MD -MP -MF $(DEPDIR)/basic_sspi_auth-valid.Tpo -c -o basic_sspi_auth-valid.obj `if test -f 'valid.cc'; then $(CYGPATH_W) 'valid.cc'; else $(CYGPATH_W) '$(srcdir)/valid.cc'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/basic_sspi_auth-valid.Tpo $(DEPDIR)/basic_sspi_auth-valid.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='valid.cc' object='basic_sspi_auth-valid.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(basic_sspi_auth_CXXFLAGS) $(CXXFLAGS) -c -o basic_sspi_auth-valid.obj `if test -f 'valid.cc'; then $(CYGPATH_W) 'valid.cc'; else $(CYGPATH_W) '$(srcdir)/valid.cc'; fi` + mostlyclean-libtool: -rm -f *.lo @@ -822,7 +866,6 @@ $(OBJS): $(top_srcdir)/include/version.h $(top_builddir)/include/autoconf.h - $(XTRA_LIBS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -u -r -N squid-3.2.0.13/helpers/digest_auth/eDirectory/digest_common.h squid-3.2.0.14/helpers/digest_auth/eDirectory/digest_common.h --- squid-3.2.0.13/helpers/digest_auth/eDirectory/digest_common.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/helpers/digest_auth/eDirectory/digest_common.h 2011-12-13 00:08:18.000000000 +1300 @@ -8,8 +8,8 @@ * Copyright (c) 2003 Robert Collins */ -#ifndef _SQUID_DIGEST_COMMON_H_ -#define _SQUID_DIGEST_COMMON_H_ +#ifndef SQUID_DIGEST_COMMON_H_ +#define SQUID_DIGEST_COMMON_H_ #if HAVE_STDIO_H #include @@ -59,4 +59,5 @@ */ typedef void HandleArguments(int, char **); typedef void HHA1Creator(RequestData *); -#endif /* _SQUID_DIGEST_COMMON_H_ */ + +#endif /* SQUID_DIGEST_COMMON_H_ */ diff -u -r -N squid-3.2.0.13/helpers/digest_auth/file/digest_common.h squid-3.2.0.14/helpers/digest_auth/file/digest_common.h --- squid-3.2.0.13/helpers/digest_auth/file/digest_common.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/helpers/digest_auth/file/digest_common.h 2011-12-13 00:08:18.000000000 +1300 @@ -8,8 +8,8 @@ * Copyright (c) 2003 Robert Collins */ -#ifndef _SQUID_DIGEST_COMMON_H_ -#define _SQUID_DIGEST_COMMON_H_ +#ifndef SQUID_DIGEST_COMMON_H_ +#define SQUID_DIGEST_COMMON_H_ #include "hash.h" #include "rfc2617.h" @@ -47,4 +47,5 @@ */ typedef void HandleArguments(int, char **); typedef void HHA1Creator(RequestData *); -#endif /* _SQUID_DIGEST_COMMON_H_ */ + +#endif /* SQUID_DIGEST_COMMON_H_ */ diff -u -r -N squid-3.2.0.13/helpers/digest_auth/LDAP/digest_common.h squid-3.2.0.14/helpers/digest_auth/LDAP/digest_common.h --- squid-3.2.0.13/helpers/digest_auth/LDAP/digest_common.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/helpers/digest_auth/LDAP/digest_common.h 2011-12-13 00:08:18.000000000 +1300 @@ -8,8 +8,8 @@ * Copyright (c) 2003 Robert Collins */ -#ifndef _SQUID_DIGEST_COMMON_H_ -#define _SQUID_DIGEST_COMMON_H_ +#ifndef SQUID_DIGEST_COMMON_H_ +#define SQUID_DIGEST_COMMON_H_ #if HAVE_STDIO_H #include @@ -56,4 +56,5 @@ */ typedef void HandleArguments(int, char **); typedef void HHA1Creator(RequestData *); -#endif /* _SQUID_DIGEST_COMMON_H_ */ + +#endif /* SQUID_DIGEST_COMMON_H_ */ diff -u -r -N squid-3.2.0.13/helpers/external_acl/session/config.test squid-3.2.0.14/helpers/external_acl/session/config.test --- squid-3.2.0.13/helpers/external_acl/session/config.test 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/helpers/external_acl/session/config.test 2011-12-13 00:08:18.000000000 +1300 @@ -1,10 +1,6 @@ #!/bin/sh -# Actual intended test -if [ -f /usr/include/db_185.h ]; then - exit 0 -fi -if [ -f /usr/include/db.h ] && grep dbopen /usr/include/db.h; then +if [ -f /usr/include/db.h ] && grep db_env_create /usr/include/db.h; then exit 0 fi exit 1 diff -u -r -N squid-3.2.0.13/helpers/external_acl/session/ext_session_acl.8 squid-3.2.0.14/helpers/external_acl/session/ext_session_acl.8 --- squid-3.2.0.13/helpers/external_acl/session/ext_session_acl.8 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/helpers/external_acl/session/ext_session_acl.8 2011-12-13 00:08:18.000000000 +1300 @@ -1,11 +1,11 @@ -.if !'po4a'hide' .TH ext_session_acl 8 "19 September 2011" +.if !'po4a'hide' .TH ext_session_acl 8 "9 October 2011" . .SH NAME .if !'po4a'hide' .B ext_session_acl .if !'po4a'hide' \- Squid session tracking external acl helper. .PP -Version 1.1 +Version 1.2 . .SH SYNOPSIS .if !'po4a'hide' .B ext_session_acl @@ -52,9 +52,15 @@ .if !'po4a'hide' .TP .if !'po4a'hide' .B "\-b path" .B Path -to persistent database. If not specified the session details -will be kept in memory only and all sessions will reset each time -Squid restarts its helpers (Squid restart or rotation of logs). +to persistent database. If a file is specified then that single file is +used as the database. If a path is specified, a Berkeley DB database +environment is created within the directory. The advantage of the latter +is better database support between multiple instances of the session +helper. Using multiple instances of the session helper with a single +database file will cause synchronisation problems between processes. +If this option is not specified the session details will be kept in +memory only and all sessions will reset each time Squid restarts its +helpers (Squid restart or rotation of logs). . .if !'po4a'hide' .TP .if !'po4a'hide' .B \-a @@ -91,6 +97,7 @@ .SH AUTHOR This program and documentation was written by .if !'po4a'hide' .I Henrik Nordstrom +.if !'po4a'hide' .I Andrew Beverley . .SH COPYRIGHT This program and documentation is copyright to the authors named above. diff -u -r -N squid-3.2.0.13/helpers/external_acl/session/ext_session_acl.cc squid-3.2.0.14/helpers/external_acl/session/ext_session_acl.cc --- squid-3.2.0.13/helpers/external_acl/session/ext_session_acl.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/helpers/external_acl/session/ext_session_acl.cc 2011-12-13 00:08:18.000000000 +1300 @@ -23,18 +23,21 @@ #endif #include "helpers/defines.h" -#include -#include +#if HAVE_DB_H +#include +#endif #include +#if HAVE_GETOPT_H +#include +#endif #include #include -#if HAVE_UNISTD_H -#include -#endif #include +#include +#include #include -#if HAVE_GETOPT_H -#include +#if HAVE_UNISTD_H +#include #endif /* At this point all Bit Types are already defined, so we must @@ -45,45 +48,71 @@ #define __BIT_TYPES_DEFINED__ #endif -#if HAVE_DB_185_H -#include -#elif HAVE_DB_H -#include -#endif - static int session_ttl = 3600; static int fixed_timeout = 0; char *db_path = NULL; const char *program_name; DB *db = NULL; +DB_ENV *db_env = NULL; static void init_db(void) { - db = dbopen(db_path, O_CREAT | O_RDWR, 0666, DB_BTREE, NULL); - if (!db) { - fprintf(stderr, "FATAL: %s: Failed to open session db '%s'\n", program_name, db_path); - exit(1); + struct stat st_buf; + + if (db_path) { + if (!stat(db_path, &st_buf)) { + if (S_ISDIR (st_buf.st_mode)) { + /* If directory then open database environment. This prevents sync problems + between different processes. Otherwise fallback to single file */ + db_env_create(&db_env, 0); + if (db_env->open(db_env, db_path, DB_CREATE | DB_INIT_MPOOL | DB_INIT_LOCK , 0666)) { + fprintf(stderr, "FATAL: %s: Failed to open database environment in '%s'\n", program_name, db_path); + db_env->close(db_env, 0); + exit(1); + } + db_create(&db, db_env, 0); + } + } + } + + if (db_env) { + if (db->open(db, NULL, "session", NULL, DB_BTREE, DB_CREATE, 0666)) { + fprintf(stderr, "FATAL: %s: Failed to open db file '%s' in dir '%s'\n", + program_name, "session", db_path); + db_env->close(db_env, 0); + exit(1); + } + } else { + db_create(&db, NULL, 0); + if (db->open(db, NULL, db_path, NULL, DB_BTREE, DB_CREATE, 0666)) { + fprintf(stderr, "FATAL: %s: Failed to open session db '%s'\n", program_name, db_path); + exit(1); + } } } static void shutdown_db(void) { - db->close(db); + db->close(db, 0); + if (db_env) { + db_env->close(db_env, 0); + } } int session_is_active = 0; static int session_active(const char *details, size_t len) { - DBT key, data; + DBT key = {0}; + DBT data = {0}; key.data = (void *)details; key.size = len; - if (db->get(db, &key, &data, 0) == 0) { + if (db->get(db, NULL, &key, &data, 0) == 0) { time_t timestamp; if (data.size != sizeof(timestamp)) { fprintf(stderr, "ERROR: %s: CORRUPTED DATABASE (%s)\n", program_name, details); - db->del(db, &key, 0); + db->del(db, NULL, &key, 0); return 0; } memcpy(×tamp, data.data, sizeof(timestamp)); @@ -95,22 +124,22 @@ static void session_login(const char *details, size_t len) { - DBT key, data; - time_t now = time(NULL); + DBT key = {0}; + DBT data = {0}; key.data = (void *)details; key.size = len; + time_t now = time(NULL); data.data = &now; data.size = sizeof(now); - db->put(db, &key, &data, 0); - db->sync(db, 0); + db->put(db, NULL, &key, &data, 0); } static void session_logout(const char *details, size_t len) { - DBT key; + DBT key = {0}; key.data = (void *)details; key.size = len; - db->del(db, &key, 0); + db->del(db, NULL, &key, 0); } static void usage(void) @@ -156,21 +185,24 @@ while (fgets(request, HELPER_INPUT_BUFFER, stdin)) { int action = 0; const char *channel_id = strtok(request, " "); - const char *detail = strtok(NULL, "\n"); + char *detail = strtok(NULL, "\n"); if (detail == NULL) { // Only 1 paramater supplied. We are expecting at least 2 (including the channel ID) fprintf(stderr, "FATAL: %s is concurrent and requires the concurrency option to be specified.\n", program_name); + shutdown_db(); exit(1); } - const char *lastdetail = strrchr(detail, ' '); + char *lastdetail = strrchr(detail, ' '); size_t detail_len = strlen(detail); if (lastdetail) { if (strcmp(lastdetail, " LOGIN") == 0) { action = 1; detail_len = (size_t)(lastdetail-detail); + *lastdetail = '\0'; } else if (strcmp(lastdetail, " LOGOUT") == 0) { action = -1; detail_len = (size_t)(lastdetail-detail); + *lastdetail = '\0'; } } if (action == -1) { diff -u -r -N squid-3.2.0.13/helpers/external_acl/wbinfo_group/ext_wbinfo_group_acl.8 squid-3.2.0.14/helpers/external_acl/wbinfo_group/ext_wbinfo_group_acl.8 --- squid-3.2.0.13/helpers/external_acl/wbinfo_group/ext_wbinfo_group_acl.8 2011-10-14 16:48:15.000000000 +1300 +++ squid-3.2.0.14/helpers/external_acl/wbinfo_group/ext_wbinfo_group_acl.8 2011-12-13 01:29:07.000000000 +1300 @@ -124,7 +124,7 @@ .\" ======================================================================== .\" .IX Title "EXT_WBINFO_GROUP_ACL.PL.IN 1" -.TH EXT_WBINFO_GROUP_ACL.PL.IN 1 "2011-10-13" "perl v5.10.1" "User Contributed Perl Documentation" +.TH EXT_WBINFO_GROUP_ACL.PL.IN 1 "2011-12-12" "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.13/helpers/log_daemon/file/Makefile.am squid-3.2.0.14/helpers/log_daemon/file/Makefile.am --- squid-3.2.0.13/helpers/log_daemon/file/Makefile.am 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/helpers/log_daemon/file/Makefile.am 2011-12-13 00:08:18.000000000 +1300 @@ -2,4 +2,7 @@ libexec_PROGRAMS = log_file_daemon log_file_daemon_SOURCES = log_file_daemon.cc +log_file_daemon_LDADD = \ + -L$(top_builddir)/lib $(COMPAT_LIB) \ + $(XTRA_LIBS) EXTRA_DIST = config.test diff -u -r -N squid-3.2.0.13/helpers/log_daemon/file/Makefile.in squid-3.2.0.14/helpers/log_daemon/file/Makefile.in --- squid-3.2.0.13/helpers/log_daemon/file/Makefile.in 2011-10-14 14:47:17.000000000 +1300 +++ squid-3.2.0.14/helpers/log_daemon/file/Makefile.in 2011-12-13 00:10:27.000000000 +1300 @@ -60,7 +60,11 @@ PROGRAMS = $(libexec_PROGRAMS) am_log_file_daemon_OBJECTS = log_file_daemon.$(OBJEXT) log_file_daemon_OBJECTS = $(am_log_file_daemon_OBJECTS) -log_file_daemon_LDADD = $(LDADD) +@ENABLE_XPROF_STATS_TRUE@am__DEPENDENCIES_1 = $(top_builddir)/lib/profiler/libprofiler.la +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) +am__DEPENDENCIES_3 = +log_file_daemon_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_3) DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/cfgaux/depcomp am__depfiles_maybe = depfiles @@ -301,6 +305,10 @@ COMPAT_LIB = -L$(top_builddir)/compat -lcompat-squid $(LIBPROFILER) subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) log_file_daemon_SOURCES = log_file_daemon.cc +log_file_daemon_LDADD = \ + -L$(top_builddir)/lib $(COMPAT_LIB) \ + $(XTRA_LIBS) + EXTRA_DIST = config.test all: all-am diff -u -r -N squid-3.2.0.13/include/autoconf.h.in squid-3.2.0.14/include/autoconf.h.in --- squid-3.2.0.13/include/autoconf.h.in 2011-10-14 14:46:18.000000000 +1300 +++ squid-3.2.0.14/include/autoconf.h.in 2011-12-13 00:09:57.000000000 +1300 @@ -145,6 +145,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_CRYPT_H +/* Define to 1 if you have the header file. */ +#undef HAVE_CSTDARG + /* Define to 1 if you have the header file. */ #undef HAVE_CSTDLIB diff -u -r -N squid-3.2.0.13/include/RefCount.h squid-3.2.0.14/include/RefCount.h --- squid-3.2.0.13/include/RefCount.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/include/RefCount.h 2011-12-13 00:08:18.000000000 +1300 @@ -32,8 +32,8 @@ * */ -#ifndef _SQUID_REFCOUNT_H_ -#define _SQUID_REFCOUNT_H_ +#ifndef SQUID_REFCOUNT_H_ +#define SQUID_REFCOUNT_H_ #if HAVE_IOSTREAM #include @@ -144,4 +144,4 @@ return os << "NULL"; } -#endif /* _SQUID_REFCOUNT_H_ */ +#endif /* SQUID_REFCOUNT_H_ */ diff -u -r -N squid-3.2.0.13/include/squid_endian.h squid-3.2.0.14/include/squid_endian.h --- squid-3.2.0.13/include/squid_endian.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/include/squid_endian.h 2011-12-13 00:08:18.000000000 +1300 @@ -127,7 +127,7 @@ * * Except OpenBSD - htole16 & 32 exist, but not le16toh etc */ -#if defined(_SQUID_OPENBSD_) +#if _SQUID_OPENBSD_ # define le16toh(x) htole16(x) # define le32toh(x) htole32(x) #endif diff -u -r -N squid-3.2.0.13/include/util.h squid-3.2.0.14/include/util.h --- squid-3.2.0.13/include/util.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/include/util.h 2011-12-13 00:08:18.000000000 +1300 @@ -48,7 +48,7 @@ SQUIDCEXTERN double tvSubDsec(struct timeval, struct timeval); SQUIDCEXTERN size_t xcountws(const char *str); SQUIDCEXTERN void Tolower(char *); -#ifdef __cplusplus +#if defined(__cplusplus) /* * Any code using libstdc++ must have externally resolvable overloads * for void * operator new - which means in the .o for the binary, @@ -56,8 +56,8 @@ * so, look in the translation unit containing main() in squid * for the extern version in squid */ -#ifndef _SQUID_EXTERNNEW_ -#ifdef __GNUC_STDC_INLINE__ +#if !defined(_SQUID_EXTERNNEW_) +#if defined(__GNUC_STDC_INLINE__) #define _SQUID_EXTERNNEW_ extern inline __attribute__((gnu_inline)) #else #define _SQUID_EXTERNNEW_ extern inline diff -u -r -N squid-3.2.0.13/include/version.h squid-3.2.0.14/include/version.h --- squid-3.2.0.13/include/version.h 2011-10-14 14:49:52.000000000 +1300 +++ squid-3.2.0.14/include/version.h 2011-12-13 00:11:47.000000000 +1300 @@ -9,7 +9,7 @@ */ #ifndef SQUID_RELEASE_TIME -#define SQUID_RELEASE_TIME 1318556567 +#define SQUID_RELEASE_TIME 1323688094 #endif #ifndef APP_SHORTNAME diff -u -r -N squid-3.2.0.13/lib/dirent.c squid-3.2.0.14/lib/dirent.c --- squid-3.2.0.13/lib/dirent.c 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/lib/dirent.c 2011-12-13 00:08:18.000000000 +1300 @@ -51,7 +51,7 @@ #include "config.h" /* The following code section is part of the native Windows Squid port */ -#if defined(_SQUID_MSWIN_) +#if _SQUID_MSWIN_ #include "util.h" #include diff -u -r -N squid-3.2.0.13/lib/libTrie/acinclude.m4 squid-3.2.0.14/lib/libTrie/acinclude.m4 --- squid-3.2.0.13/lib/libTrie/acinclude.m4 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/lib/libTrie/acinclude.m4 2011-12-13 00:08:18.000000000 +1300 @@ -1,33 +1 @@ dnl -dnl thanks to autogen, for the template.. -dnl -dnl @synopsis AC_TEST_CHECKFORHUGEOBJECTS -dnl -dnl Test whether -fhuge-objects is available with this c++ compiler. gcc-29.5 series compilers need this on some platform with large objects. -dnl -HUGE_OBJECT_FLAG="" -AC_DEFUN([AC_TEST_CHECKFORHUGEOBJECTS],[ - if test "$GCC" = "yes"; then - AC_MSG_CHECKING([whether compiler accepts -fhuge-objects]) - AC_CACHE_VAL([ac_cv_test_checkforhugeobjects],[ - ac_cv_test_checkforhugeobjects=`echo "int main(int argc, char **argv) { int foo; }" > conftest.cc -${CXX} -Werror -fhuge-objects -o conftest.bin conftest.cc 2>/dev/null -res=$? -rm -f conftest.* -echo yes -exit $res` - if [[ $? -ne 0 ]] - then ac_cv_test_checkforhugeobjects=no - else if [[ -z "$ac_cv_test_checkforhugeobjects" ]] - then ac_cv_test_checkforhugeobjects=yes - fi ; fi - ]) # end of CACHE_VAL - AC_MSG_RESULT([${ac_cv_test_checkforhugeobjects}]) - - if test "X${ac_cv_test_checkforhugeobjects}" != Xno - then - HUGE_OBJECT_FLAG="-fhuge-objects" - fi - fi #gcc -]) # end of AC_DEFUN of AC_TEST_CHECKFORHUGEOBJECTS - diff -u -r -N squid-3.2.0.13/lib/libTrie/configure squid-3.2.0.14/lib/libTrie/configure --- squid-3.2.0.13/lib/libTrie/configure 2011-10-14 14:49:51.000000000 +1300 +++ squid-3.2.0.14/lib/libTrie/configure 2011-12-13 00:11:46.000000000 +1300 @@ -14763,38 +14763,6 @@ TRIE_CXXFLAGS="-Werror $TRIE_CXXFLAGS" fi - - if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler accepts -fhuge-objects" >&5 -$as_echo_n "checking whether compiler accepts -fhuge-objects... " >&6; } - if ${ac_cv_test_checkforhugeobjects+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ac_cv_test_checkforhugeobjects=`echo "int main(int argc, char **argv) { int foo; }" > conftest.cc -${CXX} -Werror -fhuge-objects -o conftest.bin conftest.cc 2>/dev/null -res=$? -rm -f conftest.* -echo yes -exit $res` - if [ $? -ne 0 ] - then ac_cv_test_checkforhugeobjects=no - else if [ -z "$ac_cv_test_checkforhugeobjects" ] - then ac_cv_test_checkforhugeobjects=yes - fi ; fi - -fi - # end of CACHE_VAL - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_test_checkforhugeobjects}" >&5 -$as_echo "${ac_cv_test_checkforhugeobjects}" >&6; } - - if test "X${ac_cv_test_checkforhugeobjects}" != Xno - then - HUGE_OBJECT_FLAG="-fhuge-objects" - fi - fi #gcc - - TRIE_CXXFLAGS="$TRIE_CXXFLAGS $HUGE_OBJECT_FLAG" fi diff -u -r -N squid-3.2.0.13/lib/libTrie/configure.ac squid-3.2.0.14/lib/libTrie/configure.ac --- squid-3.2.0.13/lib/libTrie/configure.ac 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/lib/libTrie/configure.ac 2011-12-13 00:08:18.000000000 +1300 @@ -89,8 +89,6 @@ TRIE_CXXFLAGS="-Werror $TRIE_CXXFLAGS" fi - AC_TEST_CHECKFORHUGEOBJECTS - TRIE_CXXFLAGS="$TRIE_CXXFLAGS $HUGE_OBJECT_FLAG" fi AC_SUBST(TRIE_CFLAGS) diff -u -r -N squid-3.2.0.13/lib/ntlmauth/support_bits.cci squid-3.2.0.14/lib/ntlmauth/support_bits.cci --- squid-3.2.0.13/lib/ntlmauth/support_bits.cci 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/lib/ntlmauth/support_bits.cci 2011-12-13 00:08:18.000000000 +1300 @@ -1,5 +1,5 @@ -#ifndef _SQUID_LIBNTLMAUTH_SUPPORT_BITS_CCI -#define _SQUID_LIBNTLMAUTH_SUPPORT_BITS_CCI +#ifndef SQUID_LIBNTLMAUTH_SUPPORT_BITS_CCI +#define SQUID_LIBNTLMAUTH_SUPPORT_BITS_CCI #if HAVE_STRING_H #include @@ -97,4 +97,4 @@ } -#endif /* _SQUID_LIBNTLMAUTH_SUPPORT_BITS_CCI */ +#endif /* SQUID_LIBNTLMAUTH_SUPPORT_BITS_CCI */ diff -u -r -N squid-3.2.0.13/lib/radix.c squid-3.2.0.14/lib/radix.c --- squid-3.2.0.13/lib/radix.c 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/lib/radix.c 2011-12-13 00:08:18.000000000 +1300 @@ -65,6 +65,8 @@ */ #include "config.h" +#include "radix.h" +#include "util.h" #if HAVE_UNISTD_H #include @@ -105,10 +107,6 @@ #include #endif -#include "util.h" - -#include "radix.h" - int squid_max_keylen; struct squid_radix_mask *squid_rn_mkfreelist; struct squid_radix_node_head *squid_mask_rnhead; diff -u -r -N squid-3.2.0.13/po4a.conf squid-3.2.0.14/po4a.conf --- squid-3.2.0.13/po4a.conf 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/po4a.conf 2011-12-13 00:08:18.000000000 +1300 @@ -2,6 +2,8 @@ [po4a_paths] doc/manuals/manuals.pot $lang:doc/manuals/$lang.po +[type: man] helpers/basic_auth/DB/basic_db_auth.pl.8 $lang:doc/manuals/$lang/basic_db_auth.pl.8 + [type: man] helpers/basic_auth/getpwnam/basic_getpwnam_auth.8 $lang:doc/manuals/$lang/basic_getpwnam_auth.8 [type: man] helpers/basic_auth/LDAP/basic_ldap_auth.8 $lang:doc/manuals/$lang/basic_ldap_auth.8 diff -u -r -N squid-3.2.0.13/RELEASENOTES.html squid-3.2.0.14/RELEASENOTES.html --- squid-3.2.0.13/RELEASENOTES.html 2011-10-14 16:49:16.000000000 +1300 +++ squid-3.2.0.14/RELEASENOTES.html 2011-12-13 01:29:38.000000000 +1300 @@ -2,10 +2,10 @@ - Squid 3.2.0.13 release notes + Squid 3.2.0.14 release notes -

Squid 3.2.0.13 release notes

+

Squid 3.2.0.14 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.13 for testing.

+

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

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

@@ -101,7 +100,6 @@

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
  • @@ -134,27 +132,7 @@ error status page.

    -

    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 +176,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 +224,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 +260,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 @@ -328,7 +306,8 @@

  • squid_kerb_ldap - ext_kerberos_ldap_group_acl - Check logged in Kerberos or NTLM users Group membership using LDAP.
  • squid_ldap_group - ext_ldap_group_acl - Check logged in users Group membership using LDAP.
  • mswin_check_lm_group - ext_lm_group_acl - Check logged in users Group membership using LanManager.
  • -
  • squid_session - ext_session_acl - Maintain a session cache of client identifiers (usually IP address).
  • +
  • squid_session - ext_session_acl - Maintain a session cache of client identifiers (usually IP address). +This helper has also gone through a version update and now uses more current BerkeleyDB 4.1+ APIs.
  • squid_unix_group - ext_unix_group_acl - Check logged in users Group membership using local UNIX groups.
  • wbinfo_group.pl - ext_wbinfo_group_acl - Check logged in users Group membership using wbinfo.
@@ -364,7 +343,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 @@ -377,7 +356,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

@@ -389,7 +368,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 @@ -414,7 +393,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.

@@ -441,7 +420,7 @@ These logs are now created using an access_log line with the format "referrer" or "useragent".

-

2.11 Client Bandwidth Limits +

2.10 Client Bandwidth Limits

In mobile environments, Squid may need to limit Squid-to-client bandwidth @@ -473,14 +452,14 @@ 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.

-

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:// @@ -522,6 +501,10 @@

+
adaptation_meta
+

This option allows Squid administrator to add custom ICAP request +headers or eCAP options to Squid ICAP requests or eCAP transactions.

+
adaptation_send_client_ip

Same as depricated icap_send_client_ip but applies to both ICAP and eCAP.

@@ -558,6 +541,9 @@ destination IP to another source indicated by Host: domain DNS or cache_peer configuration. It does not affect Host: validation.

+
client_idle_pconn_timeout
+

Renamed from persistent_request_timeout.

+
cpu_affinity_map

New setting for SMP support to map Squid processes onto specific CPU cores.

@@ -588,6 +574,9 @@

The else part is optional. The keywords if, else and endif must be typed on their own lines, as if they were regular configuration directives.

+
logfile_daemon
+

Ported from 2.7. Specify the file I/O daemon helper to run for logging.

+
max_stale

Places an upper limit on how stale content Squid will serve from the cache if cache validation fails

@@ -605,8 +594,8 @@

-
logfile_daemon
-

Ported from 2.7. Specify the file I/O daemon helper to run for logging.

+
server_idle_pconn_timeout
+

Renamed from pconn_timeout.

tproxy_uses_indirect_client

Controls whether the indirect client address found in the X-Forwarded-For @@ -764,9 +753,6 @@

tcp_outgoing_tos

This parameter is now compatible with persistent server connections.

-
windows_ipaddrchangemonitor
-

Now only available to be set in Windows builds.

-
url_rewrite_children

New options startup=N, idle=N, concurrency=N

    @@ -776,6 +762,9 @@

+
windows_ipaddrchangemonitor
+

Now only available to be set in Windows builds.

+

@@ -807,6 +796,12 @@

The behaviour controlled by this directive is no longer possible. It has been replaced by connect_retries option which operates a little differently.

+
pconn_timeout
+

Renamed to server_idle_pconn_timeout

+ +
persistent_request_timeout
+

Renamed to client_idle_pconn_timeout

+
referer_log

Replaced by the referrer format option on an access_log directive.

@@ -896,7 +891,7 @@

--enable-auth
-

No longer takes a list of arguments. This option now is restricted to building with or without for authentication.

+

No longer takes a list of arguments. This option now is restricted to building Squid with or without authentication support.

The new --enable-auth-X/--disable-auth-X parameters determine which authentication protocols and helpers are built.

diff -u -r -N squid-3.2.0.13/src/acl/Checklist.cc squid-3.2.0.14/src/acl/Checklist.cc --- squid-3.2.0.13/src/acl/Checklist.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/acl/Checklist.cc 2011-12-13 00:08:18.000000000 +1300 @@ -216,7 +216,6 @@ } if (!nodeMatched || state_ != NullState::Instance()) { - debugs(28, 3, "aclmatchAclList: " << this << " returning false (AND list entry failed to match)"); bool async = state_ != NullState::Instance(); @@ -230,6 +229,7 @@ " finished() = " << finished()); if (finished()) { + debugs(28, 3, "aclmatchAclList: " << this << " returning (AND list entry failed to match)"); PROF_stop(aclMatchAclList); return; } @@ -240,8 +240,8 @@ continue; } + debugs(28, 3, "aclmatchAclList: " << this << " returning (AND list entry awaiting an async lookup)"); PROF_stop(aclMatchAclList); - return; } @@ -350,9 +350,9 @@ debugs(28, 5, "aclCheckFast: list: " << accessList); const acl_access *acl = cbdataReference(accessList); while (acl != NULL && cbdataReferenceValid(acl)) { - currentAnswer(acl->allow); matchAclList(acl->aclList, true); if (finished()) { + currentAnswer(acl->allow); PROF_stop(aclCheckFast); cbdataReferenceDone(acl); return currentAnswer(); diff -u -r -N squid-3.2.0.13/src/acl/DestinationDomain.h squid-3.2.0.14/src/acl/DestinationDomain.h --- squid-3.2.0.13/src/acl/DestinationDomain.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/acl/DestinationDomain.h 2011-12-13 00:08:18.000000000 +1300 @@ -47,6 +47,7 @@ public: virtual int match (ACLData * &, ACLFilledChecklist *); static ACLDestinationDomainStrategy *Instance(); + virtual bool requiresRequest() const {return true;} /** * Not implemented to prevent copies of the instance. diff -u -r -N squid-3.2.0.13/src/acl/Gadgets.h squid-3.2.0.14/src/acl/Gadgets.h --- squid-3.2.0.13/src/acl/Gadgets.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/acl/Gadgets.h 2011-12-13 00:08:18.000000000 +1300 @@ -36,5 +36,7 @@ extern void aclCacheMatchFlush(dlink_list * cache); /// \ingroup ACLAPI extern void dump_acl_access(StoreEntry * entry, const char *name, acl_access * head); +/// \ingroup ACLAPI +extern void dump_acl_list(StoreEntry * entry, ACLList * head); #endif /* SQUID_ACL_GADGETS_H */ diff -u -r -N squid-3.2.0.13/src/adaptation/AccessCheck.cc squid-3.2.0.14/src/adaptation/AccessCheck.cc --- squid-3.2.0.13/src/adaptation/AccessCheck.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/adaptation/AccessCheck.cc 2011-12-13 00:08:18.000000000 +1300 @@ -5,6 +5,7 @@ #include "HttpRequest.h" #include "HttpReply.h" #include "acl/FilledChecklist.h" +#include "adaptation/Initiator.h" #include "adaptation/Service.h" #include "adaptation/ServiceGroups.h" #include "adaptation/AccessRule.h" @@ -18,13 +19,13 @@ bool Adaptation::AccessCheck::Start(Method method, VectPoint vp, - HttpRequest *req, HttpReply *rep, AccessCheckCallback *cb, void *cbdata) + HttpRequest *req, HttpReply *rep, Adaptation::Initiator *initiator) { if (Config::Enabled) { // the new check will call the callback and delete self, eventually AsyncJob::Start(new AccessCheck( // we do not store so not a CbcPointer - ServiceFilter(method, vp, req, rep), cb, cbdata)); + ServiceFilter(method, vp, req, rep), initiator)); return true; } @@ -33,11 +34,9 @@ } Adaptation::AccessCheck::AccessCheck(const ServiceFilter &aFilter, - AccessCheckCallback *aCallback, - void *aCallbackData): + Adaptation::Initiator *initiator): AsyncJob("AccessCheck"), filter(aFilter), - callback(aCallback), - callback_data(cbdataReference(aCallbackData)), + theInitiator(initiator), acl_checklist(NULL) { #if ICAP_CLIENT @@ -57,8 +56,6 @@ if (h != NULL) h->stop("ACL"); #endif - if (callback_data) - cbdataReferenceDone(callback_data); } void @@ -185,11 +182,8 @@ Adaptation::AccessCheck::callBack(const ServiceGroupPointer &g) { debugs(93,3, HERE << g); - - void *validated_cbdata; - if (cbdataReferenceValidDone(callback_data, &validated_cbdata)) { - callback(g, validated_cbdata); - } + CallJobHere1(93, 5, theInitiator, Adaptation::Initiator, + noteAdaptationAclCheckDone, g); mustStop("done"); // called back or will never be able to call back } diff -u -r -N squid-3.2.0.13/src/adaptation/AccessCheck.h squid-3.2.0.14/src/adaptation/AccessCheck.h --- squid-3.2.0.13/src/adaptation/AccessCheck.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/adaptation/AccessCheck.h 2011-12-13 00:08:18.000000000 +1300 @@ -5,6 +5,7 @@ #include "base/AsyncJob.h" #include "adaptation/Elements.h" #include "adaptation/forward.h" +#include "adaptation/Initiator.h" #include "adaptation/ServiceFilter.h" class HttpRequest; @@ -24,17 +25,16 @@ // use this to start async ACL checks; returns true if started static bool Start(Method method, VectPoint vp, HttpRequest *req, - HttpReply *rep, AccessCheckCallback *cb, void *cbdata); + HttpReply *rep, Adaptation::Initiator *initiator); protected: // use Start to start adaptation checks - AccessCheck(const ServiceFilter &aFilter, AccessCheckCallback *, void *); + AccessCheck(const ServiceFilter &aFilter, Adaptation::Initiator *); ~AccessCheck(); private: const ServiceFilter filter; - AccessCheckCallback *callback; - void *callback_data; + CbcPointer theInitiator; ///< the job which ordered this access check ACLFilledChecklist *acl_checklist; typedef int Candidate; diff -u -r -N squid-3.2.0.13/src/adaptation/Config.cc squid-3.2.0.14/src/adaptation/Config.cc --- squid-3.2.0.13/src/adaptation/Config.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/adaptation/Config.cc 2011-12-13 00:08:18.000000000 +1300 @@ -37,11 +37,13 @@ #include "acl/Gadgets.h" #include "Store.h" #include "Array.h" // really Vector +#include "acl/FilledChecklist.h" #include "adaptation/Config.h" #include "adaptation/Service.h" #include "adaptation/AccessRule.h" #include "adaptation/ServiceGroups.h" #include "adaptation/History.h" +#include "HttpRequest.h" bool Adaptation::Config::Enabled = false; @@ -50,6 +52,54 @@ int Adaptation::Config::send_client_ip = false; int Adaptation::Config::send_username = false; int Adaptation::Config::use_indirect_client = true; +Adaptation::Config::MetaHeaders Adaptation::Config::metaHeaders; + + +Adaptation::Config::MetaHeader::Value::~Value() +{ + aclDestroyAclList(&aclList); +} + +Adaptation::Config::MetaHeader::Value::Pointer +Adaptation::Config::MetaHeader::addValue(const String &value) +{ + Value::Pointer v = new Value(value); + values.push_back(v); + return v; +} + +const char * +Adaptation::Config::MetaHeader::match(HttpRequest *request, HttpReply *reply) +{ + + typedef Values::iterator VLI; + ACLFilledChecklist ch(NULL, request, NULL); + if (reply) + ch.reply = HTTPMSGLOCK(reply); + + for (VLI i = values.begin(); i != values.end(); ++i ) { + const int ret= ch.fastCheck((*i)->aclList); + debugs(93, 5, HERE << "Check for header name: " << name << ": " << (*i)->value + <<", HttpRequest: " << request << " HttpReply: " << reply << " matched: " << ret); + if (ret == ACCESS_ALLOWED) + return (*i)->value.termedBuf(); + } + return NULL; +} + +Adaptation::Config::MetaHeader::Pointer +Adaptation::Config::addMetaHeader(const String &headerName) +{ + typedef MetaHeaders::iterator AMLI; + for (AMLI i = metaHeaders.begin(); i != metaHeaders.end(); ++i) { + if ((*i)->name == headerName) + return (*i); + } + + MetaHeader::Pointer meta = new MetaHeader(headerName); + metaHeaders.push_back(meta); + return meta; +} Adaptation::ServiceConfig* @@ -135,6 +185,8 @@ DetachServices(); serviceConfigs.clean(); + + FreeMetaHeader(); } void @@ -209,6 +261,64 @@ } void +Adaptation::Config::ParseMetaHeader(ConfigParser &parser) +{ + String name, value; + const char *warnFor[] = { + "Methods", + "Service", + "ISTag", + "Encapsulated", + "Opt-body-type", + "Max-Connections", + "Options-TTL", + "Date", + "Service-ID", + "Allow", + "Preview", + "Transfer-Preview", + "Transfer-Ignore", + "Transfer-Complete", + NULL + }; + ConfigParser::ParseString(&name); + ConfigParser::ParseQuotedString(&value); + + // TODO: Find a way to move this check to ICAP + for (int i = 0; warnFor[i] != NULL; i++) { + if (name.caseCmp(warnFor[i]) == 0) { + fatalf("%s:%d: meta name \"%s\" is a reserved ICAP header name", + cfg_filename, config_lineno, name.termedBuf()); + } + } + + MetaHeader::Pointer meta = addMetaHeader(name); + MetaHeader::Value::Pointer headValue = meta->addValue(value); + aclParseAclList(parser, &headValue->aclList); +} + +void +Adaptation::Config::DumpMetaHeader(StoreEntry *entry, const char *name) +{ + typedef MetaHeaders::iterator AMLI; + for (AMLI m = metaHeaders.begin(); m != metaHeaders.end(); ++m) { + typedef MetaHeader::Values::iterator VLI; + for (VLI v =(*m)->values.begin(); v != (*m)->values.end(); ++v ) { + storeAppendPrintf(entry, "%s " SQUIDSTRINGPH " %s", + name, SQUIDSTRINGPRINT((*m)->name), ConfigParser::QuoteString((*v)->value)); + dump_acl_list(entry, (*v)->aclList); + storeAppendPrintf(entry, "\n"); + } + } +} + +void +Adaptation::Config::FreeMetaHeader() +{ + metaHeaders.clean(); +} + +void Adaptation::Config::ParseServiceSet() { Adaptation::Config::ParseServiceGroup(new ServiceSet); diff -u -r -N squid-3.2.0.13/src/adaptation/Config.h squid-3.2.0.14/src/adaptation/Config.h --- squid-3.2.0.13/src/adaptation/Config.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/adaptation/Config.h 2011-12-13 00:08:18.000000000 +1300 @@ -2,6 +2,7 @@ #define SQUID_ADAPTATION__CONFIG_H #include "event.h" +#include "acl/Gadgets.h" #include "base/AsyncCall.h" #include "adaptation/forward.h" #include "adaptation/Elements.h" @@ -19,6 +20,9 @@ static void ParseServiceSet(void); static void ParseServiceChain(void); + static void ParseMetaHeader(ConfigParser &parser); + static void FreeMetaHeader(); + static void DumpMetaHeader(StoreEntry *, const char *); static void ParseAccess(ConfigParser &parser); static void FreeAccess(void); @@ -43,6 +47,54 @@ time_t oldest_service_failure; int service_revival_delay; + /** + * Used to store meta headers. The meta headers are custom + * ICAP request headers or ECAP options used to pass custom + * transaction-state related meta information to a service. + */ + class MetaHeader: public RefCountable + { + public: + typedef RefCount Pointer; + /// Stores a value for the meta header. + class Value: public RefCountable + { + public: + typedef RefCount Pointer; + String value; ///< a header value + ACLList *aclList; ///< The access list used to determine if this value is valid for a request + explicit Value(const String &aVal) : value(aVal), aclList(NULL) {} + ~Value(); + }; + typedef Vector Values; + + explicit MetaHeader(const String &aName): name(aName) {} + + /** + * Adds a value to the meta header and returns a pointer to the + * related Value object. + */ + Value::Pointer addValue(const String &value); + + /** + * Walks through the possible values list of the meta and selects + * the first value which matches the given HttpRequest and HttpReply + * or NULL if none matches. + */ + const char *match(HttpRequest *request, HttpReply *reply); + String name; ///< The meta header name + Values values; ///< The possible values list for the meta header + }; + typedef Vector MetaHeaders; + static MetaHeaders metaHeaders; ///< The list of configured meta headers + + /** + * Adds a header to the meta headers list and returns a pointer to the + * related metaHeaders object. If the header name already exists in list, + * returns a pointer to the existing object. + */ + static MetaHeader::Pointer addMetaHeader(const String &header); + typedef Vector ServiceConfigs; ServiceConfigs serviceConfigs; diff -u -r -N squid-3.2.0.13/src/adaptation/ecap/XactionRep.cc squid-3.2.0.14/src/adaptation/ecap/XactionRep.cc --- squid-3.2.0.13/src/adaptation/ecap/XactionRep.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/adaptation/ecap/XactionRep.cc 2011-12-13 00:08:18.000000000 +1300 @@ -81,11 +81,13 @@ return clientIpValue(); if (name == libecap::metaUserName) return usernameValue(); - if (name == Adaptation::Config::masterx_shared_name) + if (Adaptation::Config::masterx_shared_name && name == Adaptation::Config::masterx_shared_name) return masterxSharedValue(name); // TODO: metaServerIp, metaAuthenticatedUser, and metaAuthenticatedGroups - return libecap::Area(); + + // If the name is unknown, metaValue returns an emtpy area + return metaValue(name); } void @@ -102,6 +104,8 @@ visitor.visit(name, value); } + visitEachMetaHeader(visitor); + // TODO: metaServerIp, metaAuthenticatedUser, and metaAuthenticatedGroups } @@ -162,6 +166,48 @@ return libecap::Area(); } +const libecap::Area +Adaptation::Ecap::XactionRep::metaValue(const libecap::Name &name) const +{ + HttpRequest *request = dynamic_cast(theCauseRep ? + theCauseRep->raw().header : theVirginRep.raw().header); + Must(request); + HttpReply *reply = dynamic_cast(theVirginRep.raw().header); + + if (name.known()) { // must check to avoid empty names matching unset cfg + typedef Adaptation::Config::MetaHeaders::iterator ACAMLI; + for (ACAMLI i = Adaptation::Config::metaHeaders.begin(); i != Adaptation::Config::metaHeaders.end(); ++i) { + if (name == (*i)->name.termedBuf()) { + if (const char *value = (*i)->match(request, reply)) + return libecap::Area::FromTempString(value); + else + return libecap::Area(); + } + } + } + + return libecap::Area(); +} + +void +Adaptation::Ecap::XactionRep::visitEachMetaHeader(libecap::NamedValueVisitor &visitor) const +{ + HttpRequest *request = dynamic_cast(theCauseRep ? + theCauseRep->raw().header : theVirginRep.raw().header); + Must(request); + HttpReply *reply = dynamic_cast(theVirginRep.raw().header); + + typedef Adaptation::Config::MetaHeaders::iterator ACAMLI; + for (ACAMLI i = Adaptation::Config::metaHeaders.begin(); i != Adaptation::Config::metaHeaders.end(); ++i) { + const char *v; + if (v = (*i)->match(request, reply)) { + const libecap::Name name((*i)->name.termedBuf()); + const libecap::Area value = libecap::Area::FromTempString(v); + visitor.visit(name, value); + } + } +} + void Adaptation::Ecap::XactionRep::start() { diff -u -r -N squid-3.2.0.13/src/adaptation/ecap/XactionRep.h squid-3.2.0.14/src/adaptation/ecap/XactionRep.h --- squid-3.2.0.13/src/adaptation/ecap/XactionRep.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/adaptation/ecap/XactionRep.h 2011-12-13 00:08:18.000000000 +1300 @@ -93,6 +93,10 @@ const libecap::Area clientIpValue() const; const libecap::Area usernameValue() const; const libecap::Area masterxSharedValue(const libecap::Name &name) const; + /// Return the adaptation meta header value for the given header "name" + const libecap::Area metaValue(const libecap::Name &name) const; + /// Return the adaptation meta headers and their values + void visitEachMetaHeader(libecap::NamedValueVisitor &visitor) const; private: AdapterXaction theMaster; // the actual adaptation xaction we represent diff -u -r -N squid-3.2.0.13/src/adaptation/icap/ModXact.cc squid-3.2.0.14/src/adaptation/icap/ModXact.cc --- squid-3.2.0.13/src/adaptation/icap/ModXact.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/adaptation/icap/ModXact.cc 2011-12-13 00:08:18.000000000 +1300 @@ -1414,6 +1414,19 @@ if (TheConfig.send_username && request) makeUsernameHeader(request, buf); + // Adaptation::Config::metaHeaders + typedef Adaptation::Config::MetaHeaders::iterator ACAMLI; + for (ACAMLI i = Adaptation::Config::metaHeaders.begin(); i != Adaptation::Config::metaHeaders.end(); ++i) { + HttpRequest *r = virgin.cause ? + virgin.cause : dynamic_cast(virgin.header); + Must(r); + + HttpReply *reply = dynamic_cast(virgin.header); + + if (const char *value = (*i)->match(r, reply)) + buf.Printf("%s: %s\r\n", (*i)->name.termedBuf(), value); + } + // fprintf(stderr, "%s\n", buf.content()); buf.append(ICAP::crlf, 2); // terminate ICAP header diff -u -r -N squid-3.2.0.13/src/adaptation/Initiator.cc squid-3.2.0.14/src/adaptation/Initiator.cc --- squid-3.2.0.13/src/adaptation/Initiator.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/adaptation/Initiator.cc 2011-12-13 00:08:18.000000000 +1300 @@ -7,6 +7,12 @@ #include "adaptation/Initiator.h" #include "base/AsyncJobCalls.h" +void +Adaptation::Initiator::noteAdaptationAclCheckDone(Adaptation::ServiceGroupPointer group) +{ + Must(false); +} + CbcPointer Adaptation::Initiator::initiateAdaptation(Initiate *x) { diff -u -r -N squid-3.2.0.13/src/adaptation/Initiator.h squid-3.2.0.14/src/adaptation/Initiator.h --- squid-3.2.0.13/src/adaptation/Initiator.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/adaptation/Initiator.h 2011-12-13 00:08:18.000000000 +1300 @@ -23,6 +23,9 @@ Initiator(): AsyncJob("Initiator") {} virtual ~Initiator() {} + /// AccessCheck calls this back with a possibly nil service group + /// to signal whether adaptation is needed and where it should start. + virtual void noteAdaptationAclCheckDone(Adaptation::ServiceGroupPointer group); /// called with the initial adaptation decision (adapt, block, error); /// virgin and/or adapted body transmission may continue after this virtual void noteAdaptationAnswer(const Answer &answer) = 0; diff -u -r -N squid-3.2.0.13/src/base/AsyncCbdataCalls.h squid-3.2.0.14/src/base/AsyncCbdataCalls.h --- squid-3.2.0.13/src/base/AsyncCbdataCalls.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/base/AsyncCbdataCalls.h 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,36 @@ +#ifndef SQUID_BASE_ASYNCCBDATACALLS_H +#define SQUID_BASE_ASYNCCBDATACALLS_H + +#include "base/AsyncCall.h" +#include "base/CbcPointer.h" + +// dialer to run cbdata callback functions as Async Calls +// to ease the transition of these cbdata objects to full Jobs +template +class UnaryCbdataDialer : public CallDialer +{ +public: + typedef void Handler(Argument1 *); + + UnaryCbdataDialer(Handler *aHandler, Argument1 *aArg) : + arg1(aArg), + handler(aHandler) {} + + virtual bool canDial(AsyncCall &call) { return arg1.valid(); } + void dial(AsyncCall &call) { handler(arg1.get()); } + virtual void print(std::ostream &os) const { os << '(' << arg1 << ')'; } + +public: + CbcPointer arg1; + Handler *handler; +}; + +// helper function to simplify Dialer creation. +template +UnaryCbdataDialer +cbdataDialer(typename UnaryCbdataDialer::Handler *handler, Argument1 *arg1) +{ + return UnaryCbdataDialer(handler, arg1); +} + +#endif diff -u -r -N squid-3.2.0.13/src/base/Makefile.am squid-3.2.0.14/src/base/Makefile.am --- squid-3.2.0.13/src/base/Makefile.am 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/base/Makefile.am 2011-12-13 00:08:18.000000000 +1300 @@ -7,6 +7,7 @@ libbase_la_SOURCES = \ AsyncCall.cc \ AsyncCall.h \ + AsyncCbdataCalls.h \ AsyncJob.h \ AsyncJob.cc \ AsyncJobCalls.h \ diff -u -r -N squid-3.2.0.13/src/base/Makefile.in squid-3.2.0.14/src/base/Makefile.in --- squid-3.2.0.13/src/base/Makefile.in 2011-10-14 14:48:00.000000000 +1300 +++ squid-3.2.0.14/src/base/Makefile.in 2011-12-13 00:10:47.000000000 +1300 @@ -312,6 +312,7 @@ libbase_la_SOURCES = \ AsyncCall.cc \ AsyncCall.h \ + AsyncCbdataCalls.h \ AsyncJob.h \ AsyncJob.cc \ AsyncJobCalls.h \ diff -u -r -N squid-3.2.0.13/src/base/RunnersRegistry.h squid-3.2.0.14/src/base/RunnersRegistry.h --- squid-3.2.0.13/src/base/RunnersRegistry.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/base/RunnersRegistry.h 2011-12-13 00:08:18.000000000 +1300 @@ -21,6 +21,11 @@ /// well-known registries typedef enum { + /// managed by main.cc; activated after parsing squid.conf but + /// before rrAfterConfig, deactivated after rrAfterConfig but + /// before freeing configuration-related memory or exit()-ing + rrClaimMemoryNeeds, + /// managed by main.cc; activated after parsing squid.conf and /// deactivated before freeing configuration-related memory or exit()-ing rrAfterConfig, diff -u -r -N squid-3.2.0.13/src/BodyPipe.h squid-3.2.0.14/src/BodyPipe.h --- squid-3.2.0.13/src/BodyPipe.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/BodyPipe.h 2011-12-13 00:08:18.000000000 +1300 @@ -87,7 +87,7 @@ typedef BodyConsumer Consumer; typedef BodyPipeCheckout Checkout; - enum { MaxCapacity = SQUID_TCP_SO_RCVBUF }; + enum { MaxCapacity = 64*1024 }; friend class BodyPipeCheckout; diff -u -r -N squid-3.2.0.13/src/cache_cf.cc squid-3.2.0.14/src/cache_cf.cc --- squid-3.2.0.13/src/cache_cf.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/cache_cf.cc 2011-12-13 00:08:18.000000000 +1300 @@ -98,6 +98,9 @@ static void parse_adaptation_service_set_type(); static void parse_adaptation_service_chain_type(); static void parse_adaptation_access_type(); +static void parse_adaptation_meta_type(Adaptation::Config::MetaHeaders *); +static void dump_adaptation_meta_type(StoreEntry *, const char *, Adaptation::Config::MetaHeaders &); +static void free_adaptation_meta_type(Adaptation::Config::MetaHeaders *); #endif #if ICAP_CLIENT @@ -909,7 +912,7 @@ s->cafile, s->capath, s->crlfile, s->dhfile, s->sslContextSessionId)); - Ssl::readCertAndPrivateKeyFromFiles(s->signingCert, s->signPkey, s->cert, s->key); + Ssl::readCertChainAndPrivateKeyFromFiles(s->signingCert, s->signPkey, s->certsToChain, s->cert, s->key); } } @@ -4373,6 +4376,23 @@ Adaptation::Config::ParseAccess(LegacyParser); } +static void +parse_adaptation_meta_type(Adaptation::Config::MetaHeaders *) +{ + Adaptation::Config::ParseMetaHeader(LegacyParser); +} + +static void +dump_adaptation_meta_type(StoreEntry *entry, const char *name, Adaptation::Config::MetaHeaders &) +{ + Adaptation::Config::DumpMetaHeader(entry, name); +} + +static void +free_adaptation_meta_type(Adaptation::Config::MetaHeaders *) +{ + // Nothing to do, it is released inside Adaptation::Config::freeService() +} #endif /* USE_ADAPTATION */ diff -u -r -N squid-3.2.0.13/src/cache_manager.cc squid-3.2.0.14/src/cache_manager.cc --- squid-3.2.0.13/src/cache_manager.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/cache_manager.cc 2011-12-13 00:08:18.000000000 +1300 @@ -320,12 +320,11 @@ void CacheManager::Start(const Comm::ConnectionPointer &client, HttpRequest * request, StoreEntry * entry) { - ErrorState *err = NULL; debugs(16, 3, "CacheManager::Start: '" << entry->url() << "'" ); Mgr::Command::Pointer cmd = ParseUrl(entry->url()); if (!cmd) { - err = errorCon(ERR_INVALID_URL, HTTP_NOT_FOUND, request); + ErrorState *err = new ErrorState(ERR_INVALID_URL, HTTP_NOT_FOUND, request); err->url = xstrdup(entry->url()); errorAppendEntry(entry, err); entry->expires = squid_curtime; @@ -348,9 +347,7 @@ if (CheckPassword(*cmd) != 0) { /* build error message */ - ErrorState *errState; - HttpReply *rep; - errState = errorCon(ERR_CACHE_MGR_ACCESS_DENIED, HTTP_UNAUTHORIZED, request); + ErrorState errState(ERR_CACHE_MGR_ACCESS_DENIED, HTTP_UNAUTHORIZED, request); /* warn if user specified incorrect password */ if (cmd->params.password.size()) { @@ -365,9 +362,7 @@ actionName << "'" ); } - rep = errState->BuildHttpReply(); - - errorStateFree(errState); + HttpReply *rep = errState.BuildHttpReply(); #if HAVE_AUTH_MODULE_BASIC /* diff -u -r -N squid-3.2.0.13/src/cf.data.depend squid-3.2.0.14/src/cf.data.depend --- squid-3.2.0.13/src/cf.data.depend 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/cf.data.depend 2011-12-13 00:08:18.000000000 +1300 @@ -36,6 +36,7 @@ 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 +adaptation_meta_type acl icap_access_type icap_class acl icap_class_type icap_service icap_service_type diff -u -r -N squid-3.2.0.13/src/cf.data.pre squid-3.2.0.14/src/cf.data.pre --- squid-3.2.0.13/src/cf.data.pre 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/cf.data.pre 2011-12-13 00:08:18.000000000 +1300 @@ -29,24 +29,30 @@ COMMENT_START WELCOME TO @SQUID@ ---------------------------- - - This is the default Squid configuration file. You may wish - to look at the Squid home page (http://www.squid-cache.org/) - for the FAQ and other documentation. - - The default Squid config file shows what the defaults for - various options happen to be. If you don't need to change the - default, you shouldn't uncomment the line. Doing so may cause - run-time problems. In some cases "none" refers to no default - setting at all, while in other cases it refers to a valid - option - the comments for that keyword indicate if this is the - case. + + This is the documentation for the Squid configuration file. + This documentation can also be found online at: + http://www.squid-cache.org/Doc/config/ + + You may wish to look at the Squid home page and wiki for the + FAQ and other documentation: + http://www.squid-cache.org/ + http://wiki.squid-cache.org/SquidFaq + http://wiki.squid-cache.org/ConfigExamples + + This documentation shows what the defaults for various directives + happen to be. If you don't need to change the default, you should + leave the line out of your squid.conf in most cases. + + In some cases "none" refers to no default setting at all, + while in other cases it refers to the value of the option + - the comments for that keyword indicate if this is the case. COMMENT_END COMMENT_START Configuration options can be included using the "include" directive. - Include takes a list of files to include. Quoting and wildcards is + Include takes a list of files to include. Quoting and wildcards are supported. For example, @@ -74,6 +80,8 @@ must be typed on their own lines, as if they were regular configuration directives. + NOTE: An else-if condition is not supported. + These individual conditions types are supported: true @@ -592,6 +600,9 @@ list separator. ; can be any non-alphanumeric character. + %% The percent sign. Useful for helpers which need + an unchanging input format. + In addition to the above, any string specified in the referencing acl will also be included in the helper request line, after the specified formats (see the "acl external" directive) @@ -995,7 +1006,7 @@ SECURITY WARNING: Usage of this option is dangerous and should not be used trivially. Correct configuration - of folow_x_forewarded_for with a limited set of trusted + of follow_x_forewarded_for with a limited set of trusted sources is required to prevent abuse of your proxy. DOC_END @@ -1365,6 +1376,10 @@ 4 TLSv1 only cipher= Colon separated list of supported ciphers. + NOTE: some ciphers such as EDH ciphers depend on + additional settings. If those settings are + omitted the ciphers may be silently ignored + by the OpenSSL library. options= Various SSL engine options. The most important being: @@ -1373,8 +1388,8 @@ NO_TLSv1 Disallow the use of TLSv1 SINGLE_DH_USE Always create a new key when using temporary/ephemeral DH key exchanges - See src/ssl_support.c or OpenSSL SSL_CTX_set_options - documentation for a complete list of options. + See OpenSSL SSL_CTX_set_options documentation for a + complete list of options. clientca= File containing the list of CAs to use when requesting a client certificate. @@ -1391,7 +1406,10 @@ the capath. Implies VERIFY_CRL flag below. dhparams= File containing DH parameters for temporary/ephemeral - DH key exchanges. + DH key exchanges. See OpenSSL documentation for details + on how to create this file. + WARNING: EDH ciphers will be silently disabled if this + option is not set. sslflags= Various flags modifying the use of SSL: DELAYED_AUTH @@ -1697,8 +1715,10 @@ parent-hit=0xFF Value to mark hits from parent peers. - miss=0xFF Value to mark cache misses. Takes precedence - over the preserve-miss feature (see below). + miss=0xFF[/mask] Value to mark cache misses. Takes precedence + over the preserve-miss feature (see below), unless + mask is specified, in which case only the bits + specified in the mask are written. The TOS variant of the following features are only possible on Linux and require your kernel to be patched with the TOS preserving ZPH @@ -2097,7 +2117,7 @@ cache_peer parent.foo.net parent 3128 3130 default cache_peer sib1.foo.net sibling 3128 3130 proxy-only cache_peer sib2.foo.net sibling 3128 3130 proxy-only - cache_peer example.com parent 80 0 no-query default + cache_peer example.com parent 80 0 default cache_peer cdn.example.com sibling 3128 0 type: either 'parent', 'sibling', or 'multicast'. @@ -2193,7 +2213,7 @@ multicast-siblings To be used only for cache peers of type "multicast". ALL members of this multicast group have "sibling" - relationship with it, not "parent". This is to a mulicast + relationship with it, not "parent". This is to a multicast group when the requested object would be fetched only from a "parent" cache, anyway. It's useful, e.g., when configuring a pool of redundant Squid proxies, being @@ -2804,9 +2824,13 @@ expected swap wait time. max-swap-rate=swaps/sec: Artificially limits disk access using - the specified I/O rate limit. Swap in and swap out requests that + the specified I/O rate limit. Swap out requests that would cause the average I/O rate to exceed the limit are - delayed. This is necessary on file systems that buffer "too + delayed. Individual swap in requests (i.e., hits or reads) are + not delayed, but they do contribute to measured swap rate and + since they are placed in the same FIFO queue as swap out + requests, they may wait longer if max-swap-rate is smaller. + This is necessary on file systems that buffer "too many" writes and then start blocking Squid and other processes while committing those writes to disk. Usually used together with swap-timeout to avoid excessive delays and queue overflows @@ -3167,11 +3191,11 @@ udp To send each log line as text data to a UDP receiver. Place: The destination host name or IP and port. - Place Format: \\host:port + Place Format: //host:port tcp To send each log line as text data to a TCP receiver. Place: The destination host name or IP and port. - Place Format: \\host:port + Place Format: //host:port Default: access_log daemon:@DEFAULT_ACCESS_LOG@ squid @@ -4647,13 +4671,13 @@ connection establishment. DOC_END -NAME: persistent_request_timeout +NAME: client_idle_pconn_timeout persistent_request_timeout TYPE: time_t -LOC: Config.Timeout.persistent_request +LOC: Config.Timeout.clientIdlePconn DEFAULT: 2 minutes DOC_START How long to wait for the next HTTP request on a persistent - connection after the previous request completes. + client connection after the previous request completes. DOC_END NAME: client_lifetime @@ -4697,9 +4721,9 @@ it is recommended to leave OFF. DOC_END -NAME: pconn_timeout +NAME: server_idle_pconn_timeout pconn_timeout TYPE: time_t -LOC: Config.Timeout.pconn +LOC: Config.Timeout.serverIdlePconn DEFAULT: 1 minute DOC_START Timeout for idle persistent connections to servers and other @@ -7010,6 +7034,41 @@ adaptation_masterx_shared_names X-Subscriber-ID DOC_END +NAME: adaptation_meta +TYPE: adaptation_meta_type +IFDEF: USE_ADAPTATION +LOC: Adaptation::Config::metaHeaders +DEFAULT: none +DOC_START + This option allows Squid administrator to add custom ICAP request + headers or eCAP options to Squid ICAP requests or eCAP transactions. + Use it to pass custom authentication tokens and other + transaction-state related meta information to an ICAP/eCAP service. + + The addition of a meta header is ACL-driven: + adaptation_meta name value [!]aclname ... + + Processing for a given header name stops after the first ACL list match. + Thus, it is impossible to add two headers with the same name. If no ACL + lists match for a given header name, no such header is added. For + example: + + # do not debug transactions except for those that need debugging + adaptation_meta X-Debug 1 needs_debugging + + # log all transactions except for those that must remain secret + adaptation_meta X-Log 1 !keep_secret + + # mark transactions from users in the "G 1" group + adaptation_meta X-Authenticated-Groups "G 1" authed_as_G1 + + The "value" parameter may be a regular squid.conf token or a "double + quoted string". Within the quoted string, use backslash (\) to escape + any character, which is currently only useful for escaping backslashes + and double quotes. For example, + "this string has one backslash (\\) and two \"quotes\"" +DOC_END + NAME: icap_retry TYPE: acl_access IFDEF: ICAP_CLIENT diff -u -r -N squid-3.2.0.13/src/client_db.cc squid-3.2.0.14/src/client_db.cc --- squid-3.2.0.13/src/client_db.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/client_db.cc 2011-12-13 00:08:18.000000000 +1300 @@ -34,7 +34,7 @@ #include "squid.h" #include "event.h" -#include "format/Tokens.h" +#include "format/Token.h" #include "ClientInfo.h" #include "ip/Address.h" #include "mgr/Registration.h" diff -u -r -N squid-3.2.0.13/src/ClientRequestContext.h squid-3.2.0.14/src/ClientRequestContext.h --- squid-3.2.0.13/src/ClientRequestContext.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ClientRequestContext.h 2011-12-13 00:08:18.000000000 +1300 @@ -38,7 +38,6 @@ #if USE_ADAPTATION void adaptationAccessCheck(); - void adaptationAclCheckDone(Adaptation::ServiceGroupPointer g); #endif #if USE_SSL /** diff -u -r -N squid-3.2.0.13/src/client_side.cc squid-3.2.0.14/src/client_side.cc --- squid-3.2.0.13/src/client_side.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/client_side.cc 2011-12-13 00:08:18.000000000 +1300 @@ -1485,14 +1485,14 @@ { debugs(33, 5, HERE << clientConnection << " reading next req"); - fd_note(clientConnection->fd, "Waiting for next request"); + fd_note(clientConnection->fd, "Idle client: Waiting for next request"); /** * Set the timeout BEFORE calling clientReadRequest(). */ typedef CommCbMemFunT TimeoutDialer; AsyncCall::Pointer timeoutCall = JobCallback(33, 5, TimeoutDialer, this, ConnStateData::requestTimeout); - commSetConnTimeout(clientConnection, Config.Timeout.persistent_request, timeoutCall); + commSetConnTimeout(clientConnection, Config.Timeout.clientIdlePconn, timeoutCall); readSomeData(); /** Please don't do anything with the FD past here! */ @@ -1520,6 +1520,7 @@ */ } +/// called when we have successfully finished writing the response void ClientSocketContext::keepaliveNextRequest() { @@ -1535,6 +1536,26 @@ } /** \par + * We are done with the response, and we are either still receiving request + * body (early response!) or have already stopped receiving anything. + * + * If we are still receiving, then clientParseRequest() below will fail. + * (XXX: but then we will call readNextRequest() which may succeed and + * execute a smuggled request as we are not done with the current request). + * + * If we stopped because we got everything, then try the next request. + * + * If we stopped receiving because of an error, then close now to avoid + * getting stuck and to prevent accidental request smuggling. + */ + + if (const char *reason = conn->stoppedReceiving()) { + debugs(33, 3, HERE << "closing for earlier request error: " << reason); + conn->clientConnection->close(); + return; + } + + /** \par * Attempt to parse a request from the request buffer. * If we've been fed a pipelined request it may already * be in our read buffer. @@ -1778,44 +1799,35 @@ clientConnection->close(); } -/** Called to initiate (and possibly complete) closing of the context. - * The underlying socket may be already closed */ +/// called when we encounter a response-related error void ClientSocketContext::initiateClose(const char *reason) { - debugs(33, 5, HERE << "initiateClose: closing for " << reason); - - if (http != NULL) { - ConnStateData * conn = http->getConn(); + http->getConn()->stopSending(reason); // closes ASAP +} - if (conn != NULL) { - if (const int64_t expecting = conn->mayNeedToReadMoreBody()) { - debugs(33, 5, HERE << "ClientSocketContext::initiateClose: " << - "closing, but first " << conn << " needs to read " << - expecting << " request body bytes with " << - conn->in.notYetUsed << " notYetUsed"); - - if (conn->closing()) { - debugs(33, 2, HERE << "avoiding double-closing " << conn); - return; - } +void +ConnStateData::stopSending(const char *error) +{ + debugs(33, 4, HERE << "sending error (" << clientConnection << "): " << error << + "; old receiving error: " << + (stoppedReceiving() ? stoppedReceiving_ : "none")); - /* - * XXX We assume the reply fits in the TCP transmit - * window. If not the connection may stall while sending - * the reply (before reaching here) if the client does not - * try to read the response while sending the request body. - * As of yet we have not received any complaints indicating - * this may be an issue. - */ - conn->startClosing(reason); + if (const char *oldError = stoppedSending()) { + debugs(33, 3, HERE << "already stopped sending: " << oldError); + return; // nothing has changed as far as this connection is concerned + } + stoppedSending_ = error; - return; - } + if (!stoppedReceiving()) { + if (const int64_t expecting = mayNeedToReadMoreBody()) { + debugs(33, 5, HERE << "must still read " << expecting << + " request body bytes with " << in.notYetUsed << " unused"); + return; // wait for the request receiver to finish reading } } - doClose(); + clientConnection->close(); } void @@ -2541,8 +2553,8 @@ * from the port settings to the request. */ if (http->clientConnection != NULL) { - request->flags.intercepted = (http->clientConnection->flags & COMM_INTERCEPTION); - request->flags.spoof_client_ip = (http->clientConnection->flags & COMM_TRANSPARENT); + request->flags.intercepted = ((http->clientConnection->flags & COMM_INTERCEPTION) != 0); + request->flags.spoof_client_ip = ((http->clientConnection->flags & COMM_TRANSPARENT) != 0 ) ; } if (internalCheck(request->urlpath.termedBuf())) { @@ -2936,10 +2948,11 @@ if (!bodyPipe) { debugs(33,5, HERE << "produced entire request body for " << clientConnection); - if (closing()) { + if (const char *reason = stoppedSending()) { /* we've finished reading like good clients, * now do the close that initiateClose initiated. */ + debugs(33, 3, HERE << "closing for earlier sending error: " << reason); clientConnection->close(); return false; } @@ -3036,7 +3049,7 @@ return; // too late to read more body - if (!isOpen() || closing()) + if (!isOpen() || stoppedReceiving()) return; readSomeData(); @@ -3045,8 +3058,11 @@ void ConnStateData::noteBodyConsumerAborted(BodyPipe::Pointer ) { - if (!closing()) - startClosing("body consumer aborted"); + // request reader may get stuck waiting for space if nobody consumes body + if (bodyPipe != NULL) + bodyPipe->enableAutoConsumption(); + + stopReceiving("virgin request body consumer aborted"); // closes ASAP } /** general lifetime handler for HTTP requests */ @@ -3192,37 +3208,37 @@ /** Handle a new connection on HTTP socket. */ void -httpAccept(int, const Comm::ConnectionPointer &details, comm_err_t flag, int xerrno, void *data) +httpAccept(const CommAcceptCbParams ¶ms) { - http_port_list *s = (http_port_list *)data; + http_port_list *s = (http_port_list *)params.data; - if (flag != COMM_OK) { + if (params.flag != COMM_OK) { // Its possible the call was still queued when the client disconnected - debugs(33, 2, "httpAccept: " << s->listenConn << ": accept failure: " << xstrerr(xerrno)); + debugs(33, 2, "httpAccept: " << s->listenConn << ": accept failure: " << xstrerr(params.xerrno)); return; } - debugs(33, 4, HERE << details << ": accepted"); - fd_note(details->fd, "client http connect"); + debugs(33, 4, HERE << params.conn << ": accepted"); + fd_note(params.conn->fd, "client http connect"); if (s->tcp_keepalive.enabled) { - commSetTcpKeepalive(details->fd, s->tcp_keepalive.idle, s->tcp_keepalive.interval, s->tcp_keepalive.timeout); + commSetTcpKeepalive(params.conn->fd, s->tcp_keepalive.idle, s->tcp_keepalive.interval, s->tcp_keepalive.timeout); } incoming_sockets_accepted++; // Socket is ready, setup the connection manager to start using it - ConnStateData *connState = connStateCreate(details, s); + ConnStateData *connState = connStateCreate(params.conn, s); typedef CommCbMemFunT TimeoutDialer; AsyncCall::Pointer timeoutCall = JobCallback(33, 5, TimeoutDialer, connState, ConnStateData::requestTimeout); - commSetConnTimeout(details, Config.Timeout.read, timeoutCall); + commSetConnTimeout(params.conn, Config.Timeout.read, timeoutCall); connState->readSomeData(); #if USE_DELAY_POOLS - fd_table[details->fd].clientInfo = NULL; + fd_table[params.conn->fd].clientInfo = NULL; if (Config.onoff.client_db) { /* it was said several times that client write limiter does not work if client_db is disabled */ @@ -3233,8 +3249,8 @@ // TODO: we check early to limit error response bandwith but we // should recheck when we can honor delay_pool_uses_indirect // TODO: we should also pass the port details for myportname here. - ch.src_addr = details->remote; - ch.my_addr = details->local; + ch.src_addr = params.conn->remote; + ch.my_addr = params.conn->local; for (unsigned int pool = 0; pool < pools.size(); pool++) { @@ -3246,11 +3262,11 @@ /* request client information from db after we did all checks this will save hash lookup if client failed checks */ - ClientInfo * cli = clientdbGetInfo(details->remote); + ClientInfo * cli = clientdbGetInfo(params.conn->remote); assert(cli); /* put client info in FDE */ - fd_table[details->fd].clientInfo = cli; + fd_table[params.conn->fd].clientInfo = cli; /* setup write limiter for this request */ const double burst = floor(0.5 + @@ -3270,24 +3286,24 @@ /** Create SSL connection structure and update fd_table */ static SSL * -httpsCreate(const Comm::ConnectionPointer &details, SSL_CTX *sslContext) +httpsCreate(const Comm::ConnectionPointer &conn, SSL_CTX *sslContext) { SSL *ssl = SSL_new(sslContext); if (!ssl) { const int ssl_error = ERR_get_error(); - debugs(83, 1, "httpsAccept: Error allocating handle: " << ERR_error_string(ssl_error, NULL) ); - details->close(); + debugs(83, DBG_IMPORTANT, "ERROR: httpsAccept: Error allocating handle: " << ERR_error_string(ssl_error, NULL) ); + conn->close(); return NULL; } - SSL_set_fd(ssl, details->fd); - fd_table[details->fd].ssl = ssl; - fd_table[details->fd].read_method = &ssl_read_method; - fd_table[details->fd].write_method = &ssl_write_method; + SSL_set_fd(ssl, conn->fd); + fd_table[conn->fd].ssl = ssl; + fd_table[conn->fd].read_method = &ssl_read_method; + fd_table[conn->fd].write_method = &ssl_write_method; - debugs(33, 5, "httpsCreate: will negotate SSL on " << details); - fd_note(details->fd, "client https start"); + debugs(33, 5, "httpsCreate: will negotate SSL on " << conn); + fd_note(conn->fd, "client https start"); return ssl; } @@ -3413,39 +3429,39 @@ /** handle a new HTTPS connection */ static void -httpsAccept(int, const Comm::ConnectionPointer& details, comm_err_t flag, int xerrno, void *data) +httpsAccept(const CommAcceptCbParams ¶ms) { - https_port_list *s = (https_port_list *)data; + https_port_list *s = (https_port_list *)params.data; - if (flag != COMM_OK) { + if (params.flag != COMM_OK) { // Its possible the call was still queued when the client disconnected - debugs(33, 2, "httpsAccept: " << s->listenConn << ": accept failure: " << xstrerr(xerrno)); + debugs(33, 2, "httpsAccept: " << s->listenConn << ": accept failure: " << xstrerr(params.xerrno)); return; } SSL_CTX *sslContext = s->staticSslContext.get(); SSL *ssl = NULL; - if (!(ssl = httpsCreate(details, sslContext))) + if (!(ssl = httpsCreate(params.conn, sslContext))) return; - debugs(33, 4, HERE << details << " accepted, starting SSL negotiation."); - fd_note(details->fd, "client https connect"); + debugs(33, 4, HERE << params.conn << " accepted, starting SSL negotiation."); + fd_note(params.conn->fd, "client https connect"); if (s->http.tcp_keepalive.enabled) { - commSetTcpKeepalive(details->fd, s->http.tcp_keepalive.idle, s->http.tcp_keepalive.interval, s->http.tcp_keepalive.timeout); + commSetTcpKeepalive(params.conn->fd, s->http.tcp_keepalive.idle, s->http.tcp_keepalive.interval, s->http.tcp_keepalive.timeout); } incoming_sockets_accepted++; // Socket is ready, setup the connection manager to start using it - ConnStateData *connState = connStateCreate(details, &s->http); + ConnStateData *connState = connStateCreate(params.conn, &s->http); typedef CommCbMemFunT TimeoutDialer; AsyncCall::Pointer timeoutCall = JobCallback(33, 5, TimeoutDialer, connState, ConnStateData::requestTimeout); - commSetConnTimeout(details, Config.Timeout.request, timeoutCall); + commSetConnTimeout(params.conn, Config.Timeout.request, timeoutCall); - Comm::SetSelect(details->fd, COMM_SELECT_READ, clientNegotiateSSL, connState, 0); + Comm::SetSelect(params.conn->fd, COMM_SELECT_READ, clientNegotiateSSL, connState, 0); } void @@ -3469,7 +3485,8 @@ debugs(33, 5, HERE << "Certificate for " << sslHostName << " cannot be generated. ssl_crtd response: " << reply_message.getBody()); } else { debugs(33, 5, HERE << "Certificate for " << sslHostName << " was successfully recieved from ssl_crtd"); - getSslContextDone(Ssl::generateSslContextUsingPkeyAndCertFromMemory(reply_message.getBody().c_str()), true); + SSL_CTX *ctx = Ssl::generateSslContextUsingPkeyAndCertFromMemory(reply_message.getBody().c_str()); + getSslContextDone(ctx, true); return; } } @@ -3523,6 +3540,9 @@ { // Try to add generated ssl context to storage. if (port->generateHostCertificates && isNew) { + + Ssl::addChainToSslContext(sslContext, port->certsToChain.get()); + Ssl::LocalContextStorage & ssl_ctx_cache(Ssl::TheGlobalContextStorage.getLocalStorage(port->s)); if (sslContext && sslHostName != "") { if (!ssl_ctx_cache.add(sslHostName.termedBuf(), sslContext)) { @@ -3852,8 +3872,9 @@ ConnStateData::ConnStateData() : AsyncJob("ConnStateData"), - closing_(false), - switchedToHttps_(false) + switchedToHttps_(false), + stoppedSending_(NULL), + stoppedReceiving_(NULL) { pinning.pinned = false; pinning.auth = false; @@ -3910,32 +3931,24 @@ return needToProduce - haveAvailable; } -bool -ConnStateData::closing() const -{ - return closing_; -} - -/** - * Called by ClientSocketContext to give the connection a chance to read - * the entire body before closing the socket. - */ void -ConnStateData::startClosing(const char *reason) +ConnStateData::stopReceiving(const char *error) { - debugs(33, 5, HERE << "startClosing " << this << " for " << reason); - assert(!closing()); - closing_ = true; + debugs(33, 4, HERE << "receiving error (" << clientConnection << "): " << error << + "; old sending error: " << + (stoppedSending() ? stoppedSending_ : "none")); - assert(bodyPipe != NULL); + if (const char *oldError = stoppedReceiving()) { + debugs(33, 3, HERE << "already stopped receiving: " << oldError); + return; // nothing has changed as far as this connection is concerned + } + + stoppedReceiving_ = error; - // We do not have to abort the body pipeline because we are going to - // read the entire body anyway. - // Perhaps an ICAP server wants to log the complete request. - - // If a consumer abort have caused this closing, we may get stuck - // as nobody is consuming our data. Allow auto-consumption. - bodyPipe->enableAutoConsumption(); + if (const char *sendError = stoppedSending()) { + debugs(33, 3, HERE << "closing because also stopped sending: " << sendError); + clientConnection->close(); + } } void diff -u -r -N squid-3.2.0.13/src/client_side.h squid-3.2.0.14/src/client_side.h --- squid-3.2.0.13/src/client_side.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/client_side.h 2011-12-13 00:08:18.000000000 +1300 @@ -260,8 +260,15 @@ bool reading() const; void stopReading(); ///< cancels comm_read if it is scheduled - bool closing() const; - void startClosing(const char *reason); + /// true if we stopped receiving the request + const char *stoppedReceiving() const { return stoppedReceiving_; } + /// true if we stopped sending the response + const char *stoppedSending() const { return stoppedSending_; } + /// note request receiving error and close as soon as we write the response + void stopReceiving(const char *error); + /// note response sending error and close as soon as we read the request + void stopSending(const char *error); + void expectNoForwarding(); ///< cleans up virgin request [body] forwarding state BodyPipe::Pointer expectRequestBody(int64_t size); @@ -341,9 +348,14 @@ // XXX: CBDATA plays with public/private and leaves the following 'private' fields all public... :( CBDATA_CLASS2(ConnStateData); - bool closing_; bool switchedToHttps_; + + /// the reason why we no longer write the response or nil + const char *stoppedSending_; + /// the reason why we no longer read the request or nil + const char *stoppedReceiving_; + String sslHostName; ///< Host name for SSL certificate generation AsyncCall::Pointer reader; ///< set when we are reading BodyPipe::Pointer bodyPipe; // set when we are reading request body diff -u -r -N squid-3.2.0.13/src/client_side_reply.cc squid-3.2.0.14/src/client_side_reply.cc --- squid-3.2.0.13/src/client_side_reply.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/client_side_reply.cc 2011-12-13 00:08:18.000000000 +1300 @@ -55,7 +55,7 @@ #endif #include "fde.h" #include "forward.h" -#include "format/Tokens.h" +#include "format/Token.h" #include "HttpReply.h" #include "HttpRequest.h" #include "ip/QosConfig.h" @@ -2193,7 +2193,7 @@ clientBuildError(err_type page_id, http_status status, char const *url, Ip::Address &src_addr, HttpRequest * request) { - ErrorState *err = errorCon(page_id, status, request); + ErrorState *err = new ErrorState(page_id, status, request); err->src_addr = src_addr; if (url) diff -u -r -N squid-3.2.0.13/src/client_side_request.cc squid-3.2.0.14/src/client_side_request.cc --- squid-3.2.0.13/src/client_side_request.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/client_side_request.cc 2011-12-13 00:08:18.000000000 +1300 @@ -66,7 +66,7 @@ #include "comm/Write.h" #include "compat/inet_pton.h" #include "fde.h" -#include "format/Tokens.h" +#include "format/Token.h" #include "HttpHdrCc.h" #include "HttpReply.h" #include "HttpRequest.h" @@ -634,7 +634,7 @@ // verify the destination DNS is one of the Host: headers IPs ipcache_nbgethostbyname(host, hostHeaderIpVerifyWrapper, this); } - } else if (Config.onoff.hostStrictVerify) { + } else if (!Config.onoff.hostStrictVerify) { debugs(85, 3, HERE << "validate skipped."); http->doCallouts(); } else if (strlen(host) != strlen(http->request->GetHost())) { @@ -815,45 +815,33 @@ } #if USE_ADAPTATION -static void -adaptationAclCheckDoneWrapper(Adaptation::ServiceGroupPointer g, void *data) -{ - ClientRequestContext *calloutContext = (ClientRequestContext *)data; - - if (!calloutContext->httpStateIsValid()) - return; - - calloutContext->adaptationAclCheckDone(g); -} - void -ClientRequestContext::adaptationAclCheckDone(Adaptation::ServiceGroupPointer g) +ClientHttpRequest::noteAdaptationAclCheckDone(Adaptation::ServiceGroupPointer g) { debugs(93,3,HERE << this << " adaptationAclCheckDone called"); - assert(http); #if ICAP_CLIENT - Adaptation::Icap::History::Pointer ih = http->request->icapHistory(); + Adaptation::Icap::History::Pointer ih = request->icapHistory(); if (ih != NULL) { - if (http->getConn() != NULL) { - ih->rfc931 = http->getConn()->clientConnection->rfc931; + if (getConn() != NULL) { + ih->rfc931 = getConn()->clientConnection->rfc931; #if USE_SSL - assert(http->getConn()->clientConnection != NULL); - ih->ssluser = sslGetUserEmail(fd_table[http->getConn()->clientConnection->fd].ssl); + assert(getConn()->clientConnection != NULL); + ih->ssluser = sslGetUserEmail(fd_table[getConn()->clientConnection->fd].ssl); #endif } - ih->log_uri = http->log_uri; - ih->req_sz = http->req_sz; + ih->log_uri = log_uri; + ih->req_sz = req_sz; } #endif if (!g) { debugs(85,3, HERE << "no adaptation needed"); - http->doCallouts(); + doCallouts(); return; } - http->startAdaptation(g); + startAdaptation(g); } #endif @@ -1496,7 +1484,7 @@ calloutContext->adaptation_acl_check_done = true; if (Adaptation::AccessCheck::Start( Adaptation::methodReqmod, Adaptation::pointPreCache, - request, NULL, adaptationAclCheckDoneWrapper, calloutContext)) + request, NULL, this)) return; // will call callback } #endif @@ -1690,17 +1678,46 @@ } void +ClientHttpRequest::resumeBodyStorage() +{ + if (!adaptedBodySource) + return; + + noteMoreBodyDataAvailable(adaptedBodySource); +} + +void ClientHttpRequest::noteMoreBodyDataAvailable(BodyPipe::Pointer) { assert(request_satisfaction_mode); assert(adaptedBodySource != NULL); - if (const size_t contentSize = adaptedBodySource->buf().contentSize()) { + 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; + + if (spaceAvailable < contentSize ) { + // No or partial body data consuming + typedef NullaryMemFunT Dialer; + AsyncCall::Pointer call = asyncCall(93, 5, "ClientHttpRequest::resumeBodyStorage", + Dialer(this, &ClientHttpRequest::resumeBodyStorage)); + storeEntry()->deferProducer(call); + } + + // XXX: bytesWanted API does not allow us to write just one byte! + if (!spaceAvailable && contentSize > 1) + return; + + if (spaceAvailable < contentSize ) + contentSize = spaceAvailable; + BodyPipeCheckout bpc(*adaptedBodySource); - const StoreIOBuffer ioBuf(&bpc.buf, request_satisfaction_offset); + const StoreIOBuffer ioBuf(&bpc.buf, request_satisfaction_offset, contentSize); storeEntry()->write(ioBuf); - // assume can write everything - request_satisfaction_offset += contentSize; + // assume StoreEntry::write() writes the entire ioBuf + request_satisfaction_offset += ioBuf.length; bpc.buf.consume(contentSize); bpc.checkIn(); } @@ -1714,13 +1731,9 @@ ClientHttpRequest::noteBodyProductionEnded(BodyPipe::Pointer) { assert(!virginHeadSource); - if (adaptedBodySource != NULL) { // did not end request satisfaction yet - // We do not expect more because noteMoreBodyDataAvailable always - // consumes everything. We do not even have a mechanism to consume - // leftovers after noteMoreBodyDataAvailable notifications seize. - assert(adaptedBodySource->exhausted()); + // should we end request satisfaction now? + if (adaptedBodySource != NULL && adaptedBodySource->exhausted()) endRequestSatisfaction(); - } } void diff -u -r -N squid-3.2.0.13/src/client_side_request.h squid-3.2.0.14/src/client_side_request.h --- squid-3.2.0.13/src/client_side_request.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/client_side_request.h 2011-12-13 00:08:18.000000000 +1300 @@ -180,6 +180,7 @@ virtual void noteAdaptationAnswer(const Adaptation::Answer &answer); void handleAdaptedHeader(HttpMsg *msg); void handleAdaptationBlock(const Adaptation::Answer &answer); + virtual void noteAdaptationAclCheckDone(Adaptation::ServiceGroupPointer group); // BodyConsumer API, called by BodyPipe virtual void noteMoreBodyDataAvailable(BodyPipe::Pointer); @@ -187,6 +188,8 @@ virtual void noteBodyProducerAborted(BodyPipe::Pointer); void endRequestSatisfaction(); + /// called by StoreEntry when it has more buffer space available + void resumeBodyStorage(); private: CbcPointer virginHeadSource; diff -u -r -N squid-3.2.0.13/src/CommCalls.cc squid-3.2.0.14/src/CommCalls.cc --- squid-3.2.0.13/src/CommCalls.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/CommCalls.cc 2011-12-13 00:08:18.000000000 +1300 @@ -44,7 +44,6 @@ { } - /* CommConnectCbParams */ CommConnectCbParams::CommConnectCbParams(void *aData): @@ -109,6 +108,12 @@ { } +/* FdeCbParams */ + +FdeCbParams::FdeCbParams(void *aData): + CommCommonCbParams(aData) +{ +} /* CommAcceptCbPtrFun */ @@ -128,7 +133,7 @@ void CommAcceptCbPtrFun::dial() { - handler(params.fd, params.conn, params.flag, params.xerrno, params.data); + handler(params); } void @@ -189,7 +194,7 @@ /* CommCloseCbPtrFun */ -CommCloseCbPtrFun::CommCloseCbPtrFun(PF *aHandler, +CommCloseCbPtrFun::CommCloseCbPtrFun(CLCB *aHandler, const CommCloseCbParams &aParams): CommDialerParamsT(aParams), handler(aHandler) @@ -199,7 +204,7 @@ void CommCloseCbPtrFun::dial() { - handler(params.fd, params.data); + handler(params); } void @@ -230,5 +235,27 @@ { os << '('; params.print(os); + os << ')'; +} + +/* FdeCbPtrFun */ + +FdeCbPtrFun::FdeCbPtrFun(FDECB *aHandler, const FdeCbParams &aParams) : + CommDialerParamsT(aParams), + handler(aHandler) +{ +} + +void +FdeCbPtrFun::dial() +{ + handler(params); +} + +void +FdeCbPtrFun::print(std::ostream &os) const +{ + os << '('; + params.print(os); os << ')'; } diff -u -r -N squid-3.2.0.13/src/CommCalls.h squid-3.2.0.14/src/CommCalls.h --- squid-3.2.0.13/src/CommCalls.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/CommCalls.h 2011-12-13 00:08:18.000000000 +1300 @@ -20,15 +20,26 @@ * - connect (CNCB) * - I/O (IOCB) * - timeout (CTCB) + * - close (CLCB) + * and a special callback kind for passing pipe FD, disk FD or fd_table index 'FD' to the handler: + * - FD passing callback (FDECB) */ -typedef void IOACB(int fd, const Comm::ConnectionPointer &details, comm_err_t flag, int xerrno, void *data); +class CommAcceptCbParams; +typedef void IOACB(const CommAcceptCbParams ¶ms); + typedef void CNCB(const Comm::ConnectionPointer &conn, comm_err_t status, int xerrno, void *data); typedef void IOCB(const Comm::ConnectionPointer &conn, char *, size_t size, comm_err_t flag, int xerrno, void *data); class CommTimeoutCbParams; typedef void CTCB(const CommTimeoutCbParams ¶ms); +class CommCloseCbParams; +typedef void CLCB(const CommCloseCbParams ¶ms); + +class FdeCbParams; +typedef void FDECB(const FdeCbParams ¶ms); + /* * TODO: When there are no function-pointer-based callbacks left, all * this complexity can be removed. Jobs that need comm services will just @@ -73,7 +84,7 @@ comm_err_t flag; ///< comm layer result status. int xerrno; ///< The last errno to occur. non-zero if flag is COMM_ERR. - int fd; // raw FD which the call was about. use conn instead for new code. + int fd; ///< FD which the call was about. Set by the async call creator. private: // should not be needed and not yet implemented CommCommonCbParams &operator =(const CommCommonCbParams ¶ms); @@ -122,6 +133,16 @@ CommTimeoutCbParams(void *aData); }; +/// Special Calls parameter, for direct use of an FD without a controlling Comm::Connection +/// This is used for pipe() FD with helpers, and internally by Comm when handling some special FD actions. +class FdeCbParams: public CommCommonCbParams +{ +public: + FdeCbParams(void *aData); + // TODO make this a standalone object with FD value and pointer to fde table entry. + // that requires all the existing Comm handlers to be updated first though +}; + // Interface to expose comm callback parameters of all comm dialers. // GetCommParams() uses this interface to access comm parameters. template @@ -231,20 +252,20 @@ }; -// close (PF) dialer +// close (CLCB) dialer class CommCloseCbPtrFun: public CallDialer, public CommDialerParamsT { public: typedef CommCloseCbParams Params; - CommCloseCbPtrFun(PF *aHandler, const Params &aParams); + CommCloseCbPtrFun(CLCB *aHandler, const Params &aParams); void dial(); virtual void print(std::ostream &os) const; public: - PF *handler; + CLCB *handler; }; class CommTimeoutCbPtrFun:public CallDialer, @@ -262,6 +283,21 @@ CTCB *handler; }; +/// FD event (FDECB) dialer +class FdeCbPtrFun: public CallDialer, + public CommDialerParamsT +{ +public: + typedef FdeCbParams Params; + + FdeCbPtrFun(FDECB *aHandler, const Params &aParams); + void dial(); + virtual void print(std::ostream &os) const; + +public: + FDECB *handler; +}; + // AsyncCall to comm handlers implemented as global functions. // The dialer is one of the Comm*CbPtrFunT above // TODO: Get rid of this class by moving canFire() to canDial() method diff -u -r -N squid-3.2.0.13/src/comm.cc squid-3.2.0.14/src/comm.cc --- squid-3.2.0.13/src/comm.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/comm.cc 2011-12-13 00:08:18.000000000 +1300 @@ -870,7 +870,7 @@ debugs(14,9, "connecting to: " << address ); } } else { -#if defined(_SQUID_NEWSOS6_) +#if _SQUID_NEWSOS6_ /* Makoto MATSUSHITA */ connect(sock, AI->ai_addr, AI->ai_addrlen); @@ -891,7 +891,7 @@ if (x == 0) errno = err; -#if defined(_SQUID_SOLARIS_) +#if _SQUID_SOLARIS_ /* * Solaris 2.4's socket emulation doesn't allow you * to determine the error from a failed non-blocking @@ -962,6 +962,7 @@ // If call is not canceled schedule it for execution else ignore it if (!call->canceled()) { debugs(5, 5, "commCallCloseHandlers: ch->handler=" << call); + // XXX: this should not be needed. Params can be set by the call creator typedef CommCloseCbParams Params; Params ¶ms = GetCommParams(call); params.fd = fd; @@ -998,10 +999,8 @@ comm_lingering_close(int fd) { #if USE_SSL - if (fd_table[fd].ssl) - ssl_shutdown_method(fd); - + ssl_shutdown_method(fd_table[fd].ssl); #endif if (shutdown(fd, 1) < 0) { @@ -1047,23 +1046,20 @@ comm_close(fd); } +#if USE_SSL void -comm_close_start(int fd, void *data) +commStartSslClose(const FdeCbParams ¶ms) { -#if USE_SSL - fde *F = &fd_table[fd]; - if (F->ssl) - ssl_shutdown_method(fd); - -#endif - + assert(&fd_table[params.fd].ssl); + ssl_shutdown_method(fd_table[params.fd].ssl); } +#endif void -comm_close_complete(int fd, void *data) +comm_close_complete(const FdeCbParams ¶ms) { #if USE_SSL - fde *F = &fd_table[fd]; + fde *F = &fd_table[params.fd]; if (F->ssl) { SSL_free(F->ssl); @@ -1075,13 +1071,12 @@ F->dynamicSslContext = NULL; } #endif - fd_close(fd); /* update fdstat */ - - close(fd); + fd_close(params.fd); /* update fdstat */ + close(params.fd); statCounter.syscalls.sock.closes++; - /* When an fd closes, give accept() a chance, if need be */ + /* When one connection closes, give accept() a chance, if need be */ Comm::AcceptLimiter::Instance().kick(); } @@ -1122,12 +1117,15 @@ F->flags.close_request = 1; - AsyncCall::Pointer startCall=commCbCall(5,4, "comm_close_start", - CommCloseCbPtrFun(comm_close_start, NULL)); - typedef CommCloseCbParams Params; - Params &startParams = GetCommParams(startCall); - startParams.fd = fd; - ScheduleCallHere(startCall); +#if USE_SSL + if (F->ssl) { + AsyncCall::Pointer startCall=commCbCall(5,4, "commStartSslClose", + FdeCbPtrFun(commStartSslClose, NULL)); + FdeCbParams &startParams = GetCommParams(startCall); + startParams.fd = fd; + ScheduleCallHere(startCall); + } +#endif // a half-closed fd may lack a reader, so we stop monitoring explicitly if (commHasHalfClosedMonitor(fd)) @@ -1163,8 +1161,8 @@ AsyncCall::Pointer completeCall=commCbCall(5,4, "comm_close_complete", - CommCloseCbPtrFun(comm_close_complete, NULL)); - Params &completeParams = GetCommParams(completeCall); + FdeCbPtrFun(comm_close_complete, NULL)); + FdeCbParams &completeParams = GetCommParams(completeCall); completeParams.fd = fd; // must use async call to wait for all callbacks // scheduled before comm_close() to finish @@ -1215,7 +1213,7 @@ } void -comm_add_close_handler(int fd, PF * handler, void *data) +comm_add_close_handler(int fd, CLCB * handler, void *data) { debugs(5, 5, "comm_add_close_handler: FD " << fd << ", handler=" << handler << ", data=" << data); @@ -1242,7 +1240,7 @@ // remove function-based close handler void -comm_remove_close_handler(int fd, PF * handler, void *data) +comm_remove_close_handler(int fd, CLCB * handler, void *data) { assert (isOpen(fd)); /* Find handler in list */ @@ -2022,6 +2020,7 @@ // We have to use a global function as a closer and point to temp // instead of "this" because DeferredReadManager is not a job and // is not even cbdata protected + // XXX: and yet we use cbdata protection functions on it?? AsyncCall::Pointer closer = commCbCall(5,4, "DeferredReadManager::CloseHandler", CommCloseCbPtrFun(&CloseHandler, temp)); @@ -2030,12 +2029,12 @@ } void -DeferredReadManager::CloseHandler(int fd, void *thecbdata) +DeferredReadManager::CloseHandler(const CommCloseCbParams ¶ms) { - if (!cbdataReferenceValid (thecbdata)) + if (!cbdataReferenceValid(params.data)) return; - CbDataList *temp = (CbDataList *)thecbdata; + CbDataList *temp = (CbDataList *)params.data; temp->element.closer = NULL; temp->element.markCancelled(); @@ -2047,6 +2046,19 @@ assert (!deferredReads.empty()); DeferredRead &read = deferredReads.head->element; + + // NOTE: at this point the connection has been paused/stalled for an unknown + // amount of time. We must re-validate that it is active and usable. + + // If the connection has been closed already. Cancel this read. + if (!Comm::IsConnOpen(read.theRead.conn)) { + if (read.closer != NULL) { + read.closer->cancel("Connection closed before."); + read.closer = NULL; + } + read.markCancelled(); + } + if (!read.cancelled) { comm_remove_close_handler(read.theRead.conn->fd, read.closer); read.closer = NULL; diff -u -r -N squid-3.2.0.13/src/comm.h squid-3.2.0.14/src/comm.h --- squid-3.2.0.13/src/comm.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/comm.h 2011-12-13 00:08:18.000000000 +1300 @@ -72,9 +72,9 @@ //typedef void IOACB(int fd, int nfd, Comm::ConnectionPointer details, comm_err_t flag, int xerrno, void *data); -extern void comm_add_close_handler(int fd, PF *, void *); +extern void comm_add_close_handler(int fd, CLCB *, void *); extern void comm_add_close_handler(int fd, AsyncCall::Pointer &); -extern void comm_remove_close_handler(int fd, PF *, void *); +extern void comm_remove_close_handler(int fd, CLCB *, void *); extern void comm_remove_close_handler(int fd, AsyncCall::Pointer &); diff -u -r -N squid-3.2.0.13/src/CommRead.h squid-3.2.0.14/src/CommRead.h --- squid-3.2.0.13/src/CommRead.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/CommRead.h 2011-12-13 00:08:18.000000000 +1300 @@ -80,7 +80,7 @@ void kickReads(int const count); private: - static PF CloseHandler; + static CLCB CloseHandler; static DeferredRead popHead(CbDataListContainer &deferredReads); void kickARead(DeferredRead const &); void flushReads(); diff -u -r -N squid-3.2.0.13/src/ConfigParser.cc squid-3.2.0.14/src/ConfigParser.cc --- squid-3.2.0.13/src/ConfigParser.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ConfigParser.cc 2011-12-13 00:08:18.000000000 +1300 @@ -114,3 +114,69 @@ return t; } + +void +ConfigParser::ParseQuotedString(char **var) +{ + String sVar; + ParseQuotedString(&sVar); + *var = xstrdup(sVar.termedBuf()); +} + +void +ConfigParser::ParseQuotedString(String *var) +{ + // Get all of the remaining string + char *token = strtok(NULL, ""); + if (token == NULL) + self_destruct(); + + if (*token != '"') { + token = strtok(token, w_space); + var->reset(token); + return; + } + + char *s = token + 1; + /* scan until the end of the quoted string, unescaping " and \ */ + while (*s && *s != '"') { + if (*s == '\\') { + const char * next = s+1; // may point to 0 + memmove(s, next, strlen(next) + 1); + } + s++; + } + + if (*s != '"') { + debugs(3, DBG_CRITICAL, "ParseQuotedString: missing '\"' at the end of quoted string" ); + self_destruct(); + } + strtok(s-1, "\""); /*Reset the strtok to point after the " */ + *s = '\0'; + + var->reset(token+1); +} + +const char * +ConfigParser::QuoteString(String &var) +{ + static String quotedStr; + const char *s = var.termedBuf(); + bool needQuote = false; + + for (const char *l = s; !needQuote && *l != '\0'; l++ ) + needQuote = !isalnum(*l); + + if (!needQuote) + return s; + + quotedStr.clean(); + quotedStr.append('"'); + for (; *s != '\0'; s++) { + if (*s == '"' || *s == '\\') + quotedStr.append('\\'); + quotedStr.append(*s); + } + quotedStr.append('"'); + return quotedStr.termedBuf(); +} diff -u -r -N squid-3.2.0.13/src/ConfigParser.h squid-3.2.0.14/src/ConfigParser.h --- squid-3.2.0.13/src/ConfigParser.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ConfigParser.h 2011-12-13 00:08:18.000000000 +1300 @@ -67,6 +67,9 @@ static void ParseBool(bool *var); static void ParseString(char **var); static void ParseString(String *var); + static void ParseQuotedString(char **var); + static void ParseQuotedString(String *var); + static const char *QuoteString(String &var); static void ParseWordList(wordlist **list); static char * strtokFile(); }; diff -u -r -N squid-3.2.0.13/src/Debug.h squid-3.2.0.14/src/Debug.h --- squid-3.2.0.13/src/Debug.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/Debug.h 2011-12-13 00:08:18.000000000 +1300 @@ -137,8 +137,8 @@ } /* Legacy debug style. Still used in some places. needs to die... */ -#define do_debug(SECTION, LEVEL) ((Debug::level = (LEVEL)) > Debug::Levels[SECTION]) -#define old_debug(SECTION, LEVEL) if( (Debug::level=(LEVEL)) <= Debug::Levels[SECTION] ) _db_print +#define do_debug(SECTION, LEVEL) ((Debug::level = (LEVEL)) <= Debug::Levels[SECTION]) +#define old_debug(SECTION, LEVEL) if do_debug((SECTION), (LEVEL)) _db_print /* Legacy debug function definitions */ extern void _db_init(const char *logfile, const char *options); diff -u -r -N squid-3.2.0.13/src/DiskIO/AIO/AIODiskIOStrategy.cc squid-3.2.0.14/src/DiskIO/AIO/AIODiskIOStrategy.cc --- squid-3.2.0.13/src/DiskIO/AIO/AIODiskIOStrategy.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/AIO/AIODiskIOStrategy.cc 2011-12-13 00:08:18.000000000 +1300 @@ -100,6 +100,12 @@ callback(); } +bool +AIODiskIOStrategy::unlinkdUseful() const +{ + return false; +} + void AIODiskIOStrategy::unlinkFile (char const *) {} diff -u -r -N squid-3.2.0.13/src/DiskIO/AIO/AIODiskIOStrategy.h squid-3.2.0.14/src/DiskIO/AIO/AIODiskIOStrategy.h --- squid-3.2.0.13/src/DiskIO/AIO/AIODiskIOStrategy.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/AIO/AIODiskIOStrategy.h 2011-12-13 00:08:18.000000000 +1300 @@ -52,6 +52,8 @@ virtual RefCount newFile (char const *path); /* flush all IO operations */ virtual void sync(); + /** whether the IO Strategy can use unlinkd */ + virtual bool unlinkdUseful() const; /* unlink a file by path */ virtual void unlinkFile (char const *); diff -u -r -N squid-3.2.0.13/src/DiskIO/Blocking/BlockingIOStrategy.cc squid-3.2.0.14/src/DiskIO/Blocking/BlockingIOStrategy.cc --- squid-3.2.0.13/src/DiskIO/Blocking/BlockingIOStrategy.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/Blocking/BlockingIOStrategy.cc 2011-12-13 00:08:18.000000000 +1300 @@ -57,6 +57,12 @@ return new BlockingFile (path); } +bool +BlockingIOStrategy::unlinkdUseful() const +{ + return true; +} + void BlockingIOStrategy::unlinkFile(char const *path) { diff -u -r -N squid-3.2.0.13/src/DiskIO/Blocking/BlockingIOStrategy.h squid-3.2.0.14/src/DiskIO/Blocking/BlockingIOStrategy.h --- squid-3.2.0.13/src/DiskIO/Blocking/BlockingIOStrategy.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/Blocking/BlockingIOStrategy.h 2011-12-13 00:08:18.000000000 +1300 @@ -45,6 +45,7 @@ virtual bool shedLoad(); virtual int load(); virtual RefCount newFile(char const *path); + virtual bool unlinkdUseful() const; virtual void unlinkFile (char const *); }; diff -u -r -N squid-3.2.0.13/src/DiskIO/DiskDaemon/diomsg.h squid-3.2.0.14/src/DiskIO/DiskDaemon/diomsg.h --- squid-3.2.0.13/src/DiskIO/DiskDaemon/diomsg.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/DiskDaemon/diomsg.h 2011-12-13 00:08:18.000000000 +1300 @@ -4,8 +4,8 @@ * Internal declarations for the diskd routines */ -#ifndef __SQUID_DIOMSG_H__ -#define __SQUID_DIOMSG_H__ +#ifndef SQUID_DIOMSG_H__ +#define SQUID_DIOMSG_H__ enum { _MQD_NOP, @@ -33,4 +33,4 @@ static const int msg_snd_rcv_sz; }; -#endif /* __SQUID_DIOMSG_H__ */ +#endif /* SQUID_DIOMSG_H__ */ diff -u -r -N squid-3.2.0.13/src/DiskIO/DiskDaemon/DiskdIOStrategy.cc squid-3.2.0.14/src/DiskIO/DiskDaemon/DiskdIOStrategy.cc --- squid-3.2.0.13/src/DiskIO/DiskDaemon/DiskdIOStrategy.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/DiskDaemon/DiskdIOStrategy.cc 2011-12-13 00:08:18.000000000 +1300 @@ -103,6 +103,12 @@ DiskdIOStrategy::DiskdIOStrategy() : magic1(64), magic2(72), away(0) , smsgid(-1), rmsgid(-1), wfd(-1) , instanceID(newInstance()) {} +bool +DiskdIOStrategy::unlinkdUseful() const +{ + return true; +} + void DiskdIOStrategy::unlinkFile(char const *path) { diff -u -r -N squid-3.2.0.13/src/DiskIO/DiskDaemon/DiskdIOStrategy.h squid-3.2.0.14/src/DiskIO/DiskDaemon/DiskdIOStrategy.h --- squid-3.2.0.13/src/DiskIO/DiskDaemon/DiskdIOStrategy.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/DiskDaemon/DiskdIOStrategy.h 2011-12-13 00:08:18.000000000 +1300 @@ -76,6 +76,7 @@ virtual bool shedLoad(); virtual int load(); virtual RefCount newFile(char const *path); + virtual bool unlinkdUseful() const; virtual void unlinkFile (char const *); virtual ConfigOption *getOptionTree() const; virtual void init(); diff -u -r -N squid-3.2.0.13/src/DiskIO/DiskIOStrategy.h squid-3.2.0.14/src/DiskIO/DiskIOStrategy.h --- squid-3.2.0.13/src/DiskIO/DiskIOStrategy.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/DiskIOStrategy.h 2011-12-13 00:08:18.000000000 +1300 @@ -59,6 +59,9 @@ /** flush all IO operations */ virtual void sync() {} + /** whether the IO Strategy can use unlinkd */ + virtual bool unlinkdUseful() const = 0; + /** unlink a file by path */ virtual void unlinkFile(char const *) = 0; @@ -92,6 +95,8 @@ virtual void sync() { io->sync(); } + virtual bool unlinkdUseful() const { return io->unlinkdUseful(); } + virtual void unlinkFile (char const *path) { io->unlinkFile(path); } virtual int callback() { return io->callback(); } diff -u -r -N squid-3.2.0.13/src/DiskIO/DiskThreads/aiops.cc squid-3.2.0.14/src/DiskIO/DiskThreads/aiops.cc --- squid-3.2.0.13/src/DiskIO/DiskThreads/aiops.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/DiskThreads/aiops.cc 2011-12-13 00:08:18.000000000 +1300 @@ -376,7 +376,7 @@ sigemptyset(&newSig); sigaddset(&newSig, SIGPIPE); sigaddset(&newSig, SIGCHLD); -#ifdef _SQUID_LINUX_THREADS_ +#if defined(_SQUID_LINUX_THREADS_) sigaddset(&newSig, SIGQUIT); sigaddset(&newSig, SIGTRAP); diff -u -r -N squid-3.2.0.13/src/DiskIO/DiskThreads/DiskThreadsIOStrategy.cc squid-3.2.0.14/src/DiskIO/DiskThreads/DiskThreadsIOStrategy.cc --- squid-3.2.0.13/src/DiskIO/DiskThreads/DiskThreadsIOStrategy.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/DiskThreads/DiskThreadsIOStrategy.cc 2011-12-13 00:08:18.000000000 +1300 @@ -254,6 +254,12 @@ return new DiskThreadsDiskFile (path, this); } +bool +DiskThreadsIOStrategy::unlinkdUseful() const +{ + return false; +} + void DiskThreadsIOStrategy::unlinkFile(char const *path) { diff -u -r -N squid-3.2.0.13/src/DiskIO/DiskThreads/DiskThreadsIOStrategy.h squid-3.2.0.14/src/DiskIO/DiskThreads/DiskThreadsIOStrategy.h --- squid-3.2.0.13/src/DiskIO/DiskThreads/DiskThreadsIOStrategy.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/DiskThreads/DiskThreadsIOStrategy.h 2011-12-13 00:08:18.000000000 +1300 @@ -54,6 +54,7 @@ virtual bool shedLoad(); virtual int load(); virtual RefCount newFile(char const *path); + virtual bool unlinkdUseful() const; virtual void unlinkFile (char const *); virtual int callback(); virtual void sync(); diff -u -r -N squid-3.2.0.13/src/DiskIO/IpcIo/IpcIoFile.cc squid-3.2.0.14/src/DiskIO/IpcIo/IpcIoFile.cc --- squid-3.2.0.13/src/DiskIO/IpcIo/IpcIoFile.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/IpcIo/IpcIoFile.cc 2011-12-13 00:08:18.000000000 +1300 @@ -23,6 +23,11 @@ /// shared memory segment path to use for IpcIoFile maps static const char *const ShmLabel = "io_file"; +/// a single worker-to-disker or disker-to-worker queue capacity; up +/// to 2*QueueCapacity I/O requests queued between a single worker and +/// a single disker +// TODO: make configurable or compute from squid.conf settings if possible +static const int QueueCapacity = 1024; const double IpcIoFile::Timeout = 7; // seconds; XXX: ALL,9 may require more IpcIoFile::IpcIoFileList IpcIoFile::WaitingForOpen; @@ -357,10 +362,24 @@ return true; // no timeout specified IpcIoMsg oldestIo; - if (!queue->peek(diskId, oldestIo) || oldestIo.start.tv_sec <= 0) + if (!queue->findOldest(diskId, oldestIo) || oldestIo.start.tv_sec <= 0) return true; // we cannot estimate expected wait time; assume it is OK - const int expectedWait = tvSubMsec(oldestIo.start, current_time); + const int oldestWait = tvSubMsec(oldestIo.start, current_time); + + int rateWait = -1; // time in millisecons + const Ipc::QueueReader::Rate::Value ioRate = queue->rateLimit(diskId); + if (ioRate > 0) { + // if there are N requests pending, the new one will wait at + // least N/max-swap-rate seconds + rateWait = static_cast(1e3 * queue->outSize(diskId) / ioRate); + // adjust N/max-swap-rate value based on the queue "balance" + // member, in case we have been borrowing time against future + // I/O already + rateWait += queue->balance(diskId); + } + + const int expectedWait = max(oldestWait, rateWait); if (expectedWait < 0 || static_cast(expectedWait) < config.ioTimeout) return true; // expected wait time is acceptible @@ -671,8 +690,10 @@ return false; // is there an I/O request we could potentially delay? - if (!queue->popReady()) { - // unlike pop(), popReady() is not reliable and does not block reader + int processId; + IpcIoMsg ipcIo; + if (!queue->peek(processId, ipcIo)) { + // unlike pop(), peek() is not reliable and does not block reader // so we must proceed with pop() even if it is likely to fail return false; } @@ -692,9 +713,10 @@ debugs(47, 7, HERE << "rate limiting balance: " << balance << " after +" << credit << " -" << debit); - if (balance > maxImbalance) { - // if we accumulated too much time for future slow I/Os, - // then shed accumulated time to keep just half of the excess + if (ipcIo.command == IpcIo::cmdWrite && balance > maxImbalance) { + // if the next request is (likely) write and we accumulated + // too much time for future slow I/Os, then shed accumulated + // time to keep just half of the excess const int64_t toSpend = balance - maxImbalance/2; if (toSpend/1e3 > Timeout) @@ -829,6 +851,31 @@ } +/// reports our needs for shared memory pages to Ipc::Mem::Pages +class IpcIoClaimMemoryNeedsRr: public RegisteredRunner +{ +public: + /* RegisteredRunner API */ + virtual void run(const RunnerRegistry &r); +}; + +RunnerRegistrationEntry(rrClaimMemoryNeeds, IpcIoClaimMemoryNeedsRr); + + +void +IpcIoClaimMemoryNeedsRr::run(const RunnerRegistry &) +{ + const int itemsCount = Ipc::FewToFewBiQueue::MaxItemsCount( + ::Config.workers, ::Config.cacheSwap.n_strands, QueueCapacity); + // the maximum number of shared I/O pages is approximately the + // number of queue slots, we add a fudge factor to that to account + // for corner cases where I/O pages are created before queue + // limits are checked or destroyed long after the I/O is dequeued + Ipc::Mem::NotePageNeed(Ipc::Mem::PageId::ioPage, + static_cast(itemsCount * 1.1)); +} + + /// initializes shared memory segments used by IpcIoFile class IpcIoRr: public Ipc::Mem::RegisteredRunner { @@ -849,15 +896,14 @@ void IpcIoRr::create(const RunnerRegistry &) { - if (!UsingSmp()) + if (Config.cacheSwap.n_strands <= 0) return; Must(!owner); - // XXX: make capacity configurable owner = Ipc::FewToFewBiQueue::Init(ShmLabel, Config.workers, 1, Config.cacheSwap.n_strands, 1 + Config.workers, sizeof(IpcIoMsg), - 1024); + QueueCapacity); } IpcIoRr::~IpcIoRr() diff -u -r -N squid-3.2.0.13/src/DiskIO/IpcIo/IpcIoIOStrategy.cc squid-3.2.0.14/src/DiskIO/IpcIo/IpcIoIOStrategy.cc --- squid-3.2.0.13/src/DiskIO/IpcIo/IpcIoIOStrategy.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/IpcIo/IpcIoIOStrategy.cc 2011-12-13 00:08:18.000000000 +1300 @@ -28,6 +28,12 @@ return new IpcIoFile (path); } +bool +IpcIoIOStrategy::unlinkdUseful() const +{ + return true; +} + void IpcIoIOStrategy::unlinkFile(char const *path) { diff -u -r -N squid-3.2.0.13/src/DiskIO/IpcIo/IpcIoIOStrategy.h squid-3.2.0.14/src/DiskIO/IpcIo/IpcIoIOStrategy.h --- squid-3.2.0.13/src/DiskIO/IpcIo/IpcIoIOStrategy.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/IpcIo/IpcIoIOStrategy.h 2011-12-13 00:08:18.000000000 +1300 @@ -9,6 +9,7 @@ virtual bool shedLoad(); virtual int load(); virtual RefCount newFile(char const *path); + virtual bool unlinkdUseful() const; virtual void unlinkFile (char const *); }; diff -u -r -N squid-3.2.0.13/src/DiskIO/Mmapped/MmappedIOStrategy.cc squid-3.2.0.14/src/DiskIO/Mmapped/MmappedIOStrategy.cc --- squid-3.2.0.13/src/DiskIO/Mmapped/MmappedIOStrategy.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/Mmapped/MmappedIOStrategy.cc 2011-12-13 00:08:18.000000000 +1300 @@ -28,6 +28,12 @@ return new MmappedFile (path); } +bool +MmappedIOStrategy::unlinkdUseful() const +{ + return true; +} + void MmappedIOStrategy::unlinkFile(char const *path) { diff -u -r -N squid-3.2.0.13/src/DiskIO/Mmapped/MmappedIOStrategy.h squid-3.2.0.14/src/DiskIO/Mmapped/MmappedIOStrategy.h --- squid-3.2.0.13/src/DiskIO/Mmapped/MmappedIOStrategy.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/DiskIO/Mmapped/MmappedIOStrategy.h 2011-12-13 00:08:18.000000000 +1300 @@ -9,6 +9,7 @@ virtual bool shedLoad(); virtual int load(); virtual RefCount newFile(char const *path); + virtual bool unlinkdUseful() const; virtual void unlinkFile (char const *); }; diff -u -r -N squid-3.2.0.13/src/dns_internal.cc squid-3.2.0.14/src/dns_internal.cc --- squid-3.2.0.13/src/dns_internal.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/dns_internal.cc 2011-12-13 00:08:18.000000000 +1300 @@ -247,7 +247,7 @@ static EVH idnsCheckQueue; static void idnsTickleQueue(void); static void idnsRcodeCount(int, int); -static void idnsVCClosed(int fd, void *data); +static CLCB idnsVCClosed; static unsigned short idnsQueryID(void); static void @@ -767,6 +767,10 @@ if (vc->queue->contentSize() == 0) return; + // if retrying after a TC UDP response, our close handler cb may be pending + if (fd_table[vc->conn->fd].closing()) + return; + MemBuf *mb = vc->queue; vc->queue = new MemBuf; @@ -811,9 +815,9 @@ } static void -idnsVCClosed(int fd, void *data) +idnsVCClosed(const CommCloseCbParams ¶ms) { - nsvc * vc = (nsvc *)data; + nsvc * vc = (nsvc *)params.data; delete vc->queue; delete vc->msg; vc->conn = NULL; diff -u -r -N squid-3.2.0.13/src/dnsserver.cc squid-3.2.0.14/src/dnsserver.cc --- squid-3.2.0.13/src/dnsserver.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/dnsserver.cc 2011-12-13 00:08:18.000000000 +1300 @@ -31,11 +31,6 @@ */ #include "config.h" -//#include "compat/inet_ntop.h" -//#include "compat/getaddrinfo.h" -//#include "compat/getnameinfo.h" -#include "ip/Address.h" -//#include "util.h" #if HAVE_UNISTD_H #include @@ -177,8 +172,7 @@ int ttl = 0; int retry = 0; unsigned int i = 0; - Ip::Address ipa; - char ntoabuf[MAX_IPSTRLEN]; + char ntoabuf[256]; struct addrinfo hints; struct addrinfo *AI = NULL; struct addrinfo *aiptr = NULL; @@ -193,11 +187,20 @@ return; } - /* setup 'hints' for the system lookup */ + /* check if it's already an IP address in text form. */ memset(&hints, '\0', sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; - hints.ai_flags = AI_CANONNAME; + hints.ai_flags = AI_NUMERICHOST; // only succeed if its numeric. + const bool isDomain = (getaddrinfo(buf,NULL,&hints,&AI) != 0); + + // reset for real lookup + freeaddrinfo(AI); + AI = NULL; + // resolve the address/name + memset(&hints, '\0', sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; + hints.ai_flags = AI_CANONNAME; for (;;) { if (AI != NULL) { freeaddrinfo(AI); @@ -216,9 +219,7 @@ sleep(1); } - /* check if it's already an IP address in text form. */ - ipa = buf; - if ( ipa.IsAnyAddr() ) { + if (isDomain) { /* its a domain name. Use the forward-DNS lookup already done */ if (res == 0) { @@ -234,7 +235,7 @@ i = 0; aiptr = AI; while (NULL != aiptr && 32 >= i) { - memset(ntoabuf, 0, MAX_IPSTRLEN); + memset(ntoabuf, 0, sizeof(ntoabuf)); /* getaddrinfo given a host has a nasty tendency to return duplicate addr's */ /* BUT sorted fortunately, so we can drop most of them easily */ @@ -252,10 +253,10 @@ /* annoying inet_ntop breaks the nice code by requiring the in*_addr */ switch (aiptr->ai_family) { case AF_INET: - inet_ntop(aiptr->ai_family, &((struct sockaddr_in*)aiptr->ai_addr)->sin_addr, ntoabuf, MAX_IPSTRLEN); + inet_ntop(aiptr->ai_family, &((struct sockaddr_in*)aiptr->ai_addr)->sin_addr, ntoabuf, sizeof(ntoabuf)); break; case AF_INET6: - inet_ntop(aiptr->ai_family, &((struct sockaddr_in6*)aiptr->ai_addr)->sin6_addr, ntoabuf, MAX_IPSTRLEN); + inet_ntop(aiptr->ai_family, &((struct sockaddr_in6*)aiptr->ai_addr)->sin6_addr, ntoabuf, sizeof(ntoabuf)); break; default: aiptr = aiptr->ai_next; @@ -276,7 +277,7 @@ */ if (NULL != AI && NULL != AI->ai_addr) { for (;;) { - if ( 0 == (res = getnameinfo(AI->ai_addr, AI->ai_addrlen, ntoabuf, MAX_IPSTRLEN, NULL,0,0)) ) + if ( 0 == (res = getnameinfo(AI->ai_addr, AI->ai_addrlen, ntoabuf, sizeof(ntoabuf), NULL,0,0)) ) break; if (res != EAI_AGAIN) @@ -347,11 +348,11 @@ ); } -#ifdef _SQUID_RES_NSADDR6_LARRAY +#if defined(_SQUID_RES_NSADDR6_LARRAY) /// \ingroup dnsserver #define _SQUID_RES_NSADDR6_LIST(i) _SQUID_RES_NSADDR6_LARRAY[i].sin6_addr #endif -#ifdef _SQUID_RES_NSADDR6_LPTR +#if defined(_SQUID_RES_NSADDR6_LPTR) /// \ingroup dnsserver #define _SQUID_RES_NSADDR6_LIST(i) _SQUID_RES_NSADDR6_LPTR[i]->sin6_addr #endif @@ -366,17 +367,14 @@ void squid_res_setservers(int reset) { -#if defined(_SQUID_FREEBSD_) && defined(_SQUID_RES_NSADDR6_COUNT) +#if _SQUID_FREEBSD_ && defined(_SQUID_RES_NSADDR6_COUNT) /* Only seems to be valid on FreeBSD 5.5 where _res_ext was provided without an ns6addr counter! */ /* Gone again on FreeBSD 6.2 along with _res_ext itself in any form. */ int ns6count = 0; #endif -#if HAVE_RES_INIT - Ip::Address ipa; -#ifdef _SQUID_RES_NSADDR_LIST +#if HAVE_RES_INIT && defined(_SQUID_RES_NSADDR_LIST) extern char *optarg; #endif -#endif #if HAVE_RES_INIT && (defined(_SQUID_RES_NSADDR_LIST) || defined(_SQUID_RES_NSADDR6_LIST)) @@ -401,35 +399,40 @@ * * BUT, even if _res.nsaddrs is memset to NULL, it resolves IFF IPv6 set in _ext. * - * SO, am splittig the IPv4/v6 into the seperate _res fields + * SO, am splitting the IPv4/v6 into the seperate _res fields * and making nscount a total of IPv4+IPv6 /w nscount6 the IPv6 sub-counter * ie. nscount = count(NSv4)+count(NSv6) & nscount6 = count(NSv6) * * If ANYONE knows better please let us know. */ - if ( !(ipa = optarg) ) { + struct addrinfo hints; + memset(&hints, '\0', sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; + hints.ai_flags = AI_NUMERICHOST; // prevent repeated DNS lookups! + struct addrinfo *AI = NULL; + if ( getaddrinfo(optarg, NULL, &hints, &AI) != 0) { fprintf(stderr, "%s appears to be a bad nameserver FQDN/IP.\n",optarg); - } else if ( ipa.IsIPv4() ) { + } else if ( AI->ai_family == AF_INET ) { if (_SQUID_RES_NSADDR_COUNT == MAXNS) { fprintf(stderr, "Too many -s options, only %d are allowed\n", MAXNS); - return; + } else { + _SQUID_RES_NSADDR_LIST[_SQUID_RES_NSADDR_COUNT] = _SQUID_RES_NSADDR_LIST[0]; + memcpy(&_SQUID_RES_NSADDR_LIST[_SQUID_RES_NSADDR_COUNT++].sin_addr, &((struct sockaddr_in*)AI->ai_addr)->sin_addr, sizeof(struct in_addr)); } - _SQUID_RES_NSADDR_LIST[_SQUID_RES_NSADDR_COUNT] = _SQUID_RES_NSADDR_LIST[0]; - ipa.GetInAddr(_SQUID_RES_NSADDR_LIST[_SQUID_RES_NSADDR_COUNT++].sin_addr); - } else if ( ipa.IsIPv6() ) { + } else if ( AI->ai_family == AF_INET6 ) { #if USE_IPV6 && defined(_SQUID_RES_NSADDR6_LIST) /* because things NEVER seem to resolve in tests without _res.nscount being a total. */ if (_SQUID_RES_NSADDR_COUNT == MAXNS) { fprintf(stderr, "Too many -s options, only %d are allowed\n", MAXNS); - return; + } else { + _SQUID_RES_NSADDR_COUNT++; + memcpy(&_SQUID_RES_NSADDR6_LIST(_SQUID_RES_NSADDR6_COUNT++), &((struct sockaddr_in6*)AI->ai_addr)->sin6_addr, sizeof(struct in6_addr)); } - _SQUID_RES_NSADDR_COUNT++; - - ipa.GetInAddr(_SQUID_RES_NSADDR6_LIST(_SQUID_RES_NSADDR6_COUNT++)); #else fprintf(stderr, "IPv6 nameservers not supported on this resolver\n"); #endif } + freeaddrinfo(AI); #else /* !HAVE_RES_INIT || !defined(_SQUID_RES_NSADDR_LIST) */ diff -u -r -N squid-3.2.0.13/src/errorpage.cc squid-3.2.0.14/src/errorpage.cc --- squid-3.2.0.13/src/errorpage.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/errorpage.cc 2011-12-13 00:08:18.000000000 +1300 @@ -66,7 +66,7 @@ */ -#ifndef DEFAULT_SQUID_ERROR_DIR +#if !defined(DEFAULT_SQUID_ERROR_DIR) /** Where to look for errors if config path fails. \note Please use ./configure --datadir=/path instead of patching */ @@ -557,24 +557,41 @@ return "ERR_UNKNOWN"; /* should not happen */ } -ErrorState * -errorCon(err_type type, http_status status, HttpRequest * request) +ErrorState::ErrorState(err_type t, http_status status, HttpRequest * req) : + type(t), + page_id(t), + err_language(NULL), + httpStatus(status), +#if USE_AUTH + auth_user_request (NULL), +#endif + request(NULL), + url(NULL), + xerrno(0), + port(0), + dnsError(), + ttl(0), + src_addr(), + redirect_url(NULL), + callback(NULL), + callback_data(NULL), + request_hdrs(NULL), + err_msg(NULL) +#if USE_SSL + , detail(NULL) +#endif { - ErrorState *err = new ErrorState; - err->page_id = type; /* has to be reset manually if needed */ - err->err_language = NULL; - err->type = type; - err->httpStatus = status; - if (err->page_id >= ERR_MAX && ErrorDynamicPages.items[err->page_id - ERR_MAX]->page_redirect != HTTP_STATUS_NONE) - err->httpStatus = ErrorDynamicPages.items[err->page_id - ERR_MAX]->page_redirect; - - if (request != NULL) { - err->request = HTTPMSGLOCK(request); - err->src_addr = request->client_addr; + memset(&flags, 0, sizeof(flags)); + memset(&ftp, 0, sizeof(ftp)); + + if (page_id >= ERR_MAX && ErrorDynamicPages.items[page_id - ERR_MAX]->page_redirect != HTTP_STATUS_NONE) + httpStatus = ErrorDynamicPages.items[page_id - ERR_MAX]->page_redirect; + + if (req != NULL) { + request = HTTPMSGLOCK(req); + src_addr = req->client_addr; request->detailError(type, ERR_DETAIL_NONE); } - - return err; } void @@ -595,7 +612,7 @@ */ assert(EBIT_TEST(entry->flags, ENTRY_ABORTED)); assert(entry->mem_obj->nclients == 0); - errorStateFree(err); + delete err; return; } @@ -615,7 +632,7 @@ entry->negativeCache(); entry->releaseRequest(); entry->unlock(); - errorStateFree(err); + delete err; } void @@ -671,31 +688,29 @@ } } - errorStateFree(err); + delete err; } -void -errorStateFree(ErrorState * err) +ErrorState::~ErrorState() { - HTTPMSGUNLOCK(err->request); - safe_free(err->redirect_url); - safe_free(err->url); - safe_free(err->request_hdrs); - wordlistDestroy(&err->ftp.server_msg); - safe_free(err->ftp.request); - safe_free(err->ftp.reply); + HTTPMSGUNLOCK(request); + safe_free(redirect_url); + safe_free(url); + safe_free(request_hdrs); + wordlistDestroy(&ftp.server_msg); + safe_free(ftp.request); + safe_free(ftp.reply); #if USE_AUTH - err->auth_user_request = NULL; + auth_user_request = NULL; #endif - safe_free(err->err_msg); + safe_free(err_msg); #if USE_ERR_LOCALES - if (err->err_language != Config.errorDefaultLanguage) + if (err_language != Config.errorDefaultLanguage) #endif - safe_free(err->err_language); + safe_free(err_language); #if USE_SSL - delete err->detail; + delete detail; #endif - cbdataFree(err); } int @@ -764,7 +779,7 @@ if (ftp.request) { str.Printf("FTP Request: %s\r\n", ftp.request); - str.Printf("FTP Reply: %s\r\n", ftp.reply); + str.Printf("FTP Reply: %s\r\n", (ftp.reply? ftp.reply:"[none]")); str.Printf("FTP Msg: "); wordlistCat(ftp.server_msg, &str); str.Printf("\r\n"); @@ -858,7 +873,7 @@ case 'F': if (building_deny_info_url) break; /* FTP REPLY LINE */ - if (ftp.request) + if (ftp.reply) p = ftp.reply; else p = "nothing"; @@ -1198,7 +1213,7 @@ rep->header.putStr(HDR_CONTENT_LANGUAGE, "en"); } - httpBodySet(&rep->body, content); + rep->body.setMb(content); /* do not memBufClean() or delete the content, it was absorbed by httpBody */ } diff -u -r -N squid-3.2.0.13/src/errorpage.h squid-3.2.0.14/src/errorpage.h --- squid-3.2.0.13/src/errorpage.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/errorpage.h 2011-12-13 00:08:18.000000000 +1300 @@ -95,6 +95,10 @@ class ErrorState { public: + ErrorState(err_type type, http_status, HttpRequest * request); + ErrorState(); // not implemented. + ~ErrorState(); + /** * Allocates and initializes an error response */ @@ -237,17 +241,8 @@ SQUIDCEXTERN void errorAppendEntry(StoreEntry *entry, ErrorState *err); /// \ingroup ErrorPageAPI -SQUIDCEXTERN void errorStateFree(ErrorState * err); - -/// \ingroup ErrorPageAPI SQUIDCEXTERN err_type errorReservePageId(const char *page_name); -/** - \ingroup ErrorPageAPI - * - * This function creates a ErrorState object. - */ -SQUIDCEXTERN ErrorState *errorCon(err_type type, http_status, HttpRequest * request); SQUIDCEXTERN const char *errorPageName(int pageId); ///< error ID to string /** diff -u -r -N squid-3.2.0.13/src/esi/Esi.cc squid-3.2.0.14/src/esi/Esi.cc --- squid-3.2.0.13/src/esi/Esi.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/esi/Esi.cc 2011-12-13 00:08:18.000000000 +1300 @@ -1465,15 +1465,15 @@ err->err_msg = errormessage; errormessage = NULL; rep = err->BuildHttpReply(); - assert (rep->body.mb->contentSize() >= 0); - size_t errorprogress = rep->body.mb->contentSize(); + assert (rep->body.hasContent()); + size_t errorprogress = rep->body.contentSize(); /* Tell esiSend where to start sending from */ outbound_offset = 0; /* copy the membuf from the reply to outbound */ - while (errorprogress < (size_t)rep->body.mb->contentSize()) { + while (errorprogress < (size_t)rep->body.contentSize()) { appendOutboundData(new ESISegment); - errorprogress += outboundtail->append(rep->body.mb->content() + errorprogress, rep->body.mb->contentSize() - errorprogress); + errorprogress += outboundtail->append(rep->body.content() + errorprogress, rep->body.contentSize() - errorprogress); } /* the esiCode now thinks that the error is the outbound, @@ -2432,19 +2432,19 @@ int rv = 0; if (rep->surrogate_control) { - HttpHdrScTarget *sctusable = httpHdrScGetMergedTarget (rep->surrogate_control, - Config.Accel.surrogate_id); + HttpHdrScTarget *sctusable = + rep->surrogate_control->getMergedTarget(Config.Accel.surrogate_id); - if (!sctusable || sctusable->content.size() == 0) + if (!sctusable || !sctusable->hasContent()) /* Nothing generic or targeted at us, or no * content processing requested */ return 0; - if (sctusable->content.pos("ESI/1.0") != NULL) + if (sctusable->content().pos("ESI/1.0") != NULL) rv = 1; - httpHdrScTargetDestroy (sctusable); + delete sctusable; } return rv; diff -u -r -N squid-3.2.0.13/src/external_acl.cc squid-3.2.0.14/src/external_acl.cc --- squid-3.2.0.13/src/external_acl.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/external_acl.cc 2011-12-13 00:08:18.000000000 +1300 @@ -190,6 +190,7 @@ #endif EXT_ACL_EXT_LOG, EXT_ACL_TAG, + EXT_ACL_PERCENT, EXT_ACL_END } type; external_acl_format *next; @@ -471,6 +472,8 @@ format->type = _external_acl_format::EXT_ACL_EXT_LOG; else if (strcmp(token, "%TAG") == 0) format->type = _external_acl_format::EXT_ACL_TAG; + else if (strcmp(token, "%%") == 0) + format->type = _external_acl_format::EXT_ACL_PERCENT; else { debugs(0,0, "ERROR: Unknown Format token " << token); self_destruct(); @@ -755,7 +758,14 @@ if (entry) { if (cbdataReferenceValid(entry) && entry->def == acl->def) { - /* Ours, use it.. */ + /* Ours, use it.. if the key matches */ + key = makeExternalAclKey(ch, acl); + if (strcmp(key, (char*)entry->key) != 0) { + debugs(82, 9, HERE << "entry key='" << (char *)entry->key << "', our key='" << key << "' dont match. Discarded."); + // too bad. need a new lookup. + cbdataReferenceDone(ch->extacl_entry); + entry = NULL; + } } else { /* Not valid, or not ours.. get rid of it */ debugs(82, 9, HERE << "entry " << entry << " not valid or not ours. Discarded."); @@ -905,8 +915,13 @@ switch (format->type) { #if USE_AUTH case _external_acl_format::EXT_ACL_LOGIN: - assert (ch->auth_user_request != NULL); - str = ch->auth_user_request->username(); + // if this ACL line was the cause of credentials fetch + // they may not already be in the checklist + if (ch->auth_user_request == NULL && ch->request) + ch->auth_user_request = ch->request->auth_user_request; + + if (ch->auth_user_request != NULL) + str = ch->auth_user_request->username(); break; #endif #if USE_IDENT @@ -1082,6 +1097,9 @@ case _external_acl_format::EXT_ACL_TAG: str = request->tag.termedBuf(); break; + case _external_acl_format::EXT_ACL_PERCENT: + str = "%"; + break; case _external_acl_format::EXT_ACL_UNKNOWN: case _external_acl_format::EXT_ACL_END: diff -u -r -N squid-3.2.0.13/src/filemap.cc squid-3.2.0.14/src/filemap.cc --- squid-3.2.0.13/src/filemap.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/filemap.cc 2011-12-13 00:08:18.000000000 +1300 @@ -1,6 +1,4 @@ /* - * $Id$ - * * DEBUG: section 08 Swap File Bitmap * AUTHOR: Harvest Derived * @@ -32,7 +30,9 @@ * */ -#include "squid.h" +#include "config.h" +#include "Debug.h" +#include "FileMap.h" /* Number of bits in a long */ #if SIZEOF_LONG == 8 @@ -54,133 +54,107 @@ #define FM_INITIAL_NUMBER (1<<14) -fileMap * -file_map_create(void) +FileMap::FileMap() : + capacity_(FM_INITIAL_NUMBER), usedSlots_(0), + nwords(capacity_ >> LONG_BIT_SHIFT) +{ + debugs(8, 3, HERE << "creating space for " << capacity_ << " files"); + debugs(8, 5, "--> " << nwords << " words of " << sizeof(*bitmap) << " bytes each"); + bitmap = (unsigned long *)xcalloc(nwords, sizeof(*bitmap)); +} + +void +FileMap::grow() { - fileMap *fm = (fileMap *)xcalloc(1, sizeof(fileMap)); - fm->max_n_files = FM_INITIAL_NUMBER; - fm->nwords = fm->max_n_files >> LONG_BIT_SHIFT; - debugs(8, 3, "file_map_create: creating space for " << fm->max_n_files << " files"); - debugs(8, 5, "--> " << fm->nwords << " words of " << sizeof(*fm->file_map) << " bytes each"); - fm->file_map = (unsigned long *)xcalloc(fm->nwords, sizeof(*fm->file_map)); - /* XXX account fm->file_map */ - return fm; -} - -static void -file_map_grow(fileMap * fm) -{ - int old_sz = fm->nwords * sizeof(*fm->file_map); - void *old_map = fm->file_map; - fm->max_n_files <<= 1; - assert(fm->max_n_files <= (1 << 24)); /* swap_filen is 25 bits, signed */ - fm->nwords = fm->max_n_files >> LONG_BIT_SHIFT; - debugs(8, 3, "file_map_grow: creating space for " << fm->max_n_files << " files"); - debugs(8, 5, "--> " << fm->nwords << " words of " << sizeof(*fm->file_map) << " bytes each"); - fm->file_map = (unsigned long *)xcalloc(fm->nwords, sizeof(*fm->file_map)); + int old_sz = nwords * sizeof(*bitmap); + void *old_map = bitmap; + capacity_ <<= 1; + assert(capacity_ <= (1 << 24)); /* swap_filen is 25 bits, signed */ + nwords = capacity_ >> LONG_BIT_SHIFT; + debugs(8, 3, HERE << " creating space for " << capacity_ << " files"); + debugs(8, 5, "--> " << nwords << " words of " << sizeof(*bitmap) << " bytes each"); + bitmap = (unsigned long *)xcalloc(nwords, sizeof(*bitmap)); debugs(8, 3, "copying " << old_sz << " old bytes"); - memcpy(fm->file_map, old_map, old_sz); + memcpy(bitmap, old_map, old_sz); xfree(old_map); - /* XXX account fm->file_map */ + /* XXX account fm->bitmap */ } -int -file_map_bit_set(fileMap * fm, int file_number) +bool +FileMap::setBit(sfileno file_number) { unsigned long bitmask = (1L << (file_number & LONG_BIT_MASK)); - while (file_number >= fm->max_n_files) - file_map_grow(fm); + while (file_number >= capacity_) + grow(); - fm->file_map[file_number >> LONG_BIT_SHIFT] |= bitmask; + bitmap[file_number >> LONG_BIT_SHIFT] |= bitmask; - fm->n_files_in_map++; + usedSlots_++; return file_number; } /* - * WARNING: file_map_bit_reset does not perform array bounds + * WARNING: clearBit does not perform array bounds * checking! It assumes that 'file_number' is valid, and that the * bit is already set. The caller must verify both of those - * conditions by calling file_map_bit_test() first. + * conditions by calling testBit + * () first. */ void -file_map_bit_reset(fileMap * fm, int file_number) +FileMap::clearBit(sfileno file_number) { unsigned long bitmask = (1L << (file_number & LONG_BIT_MASK)); - fm->file_map[file_number >> LONG_BIT_SHIFT] &= ~bitmask; - fm->n_files_in_map--; + bitmap[file_number >> LONG_BIT_SHIFT] &= ~bitmask; + usedSlots_--; } -int -file_map_bit_test(fileMap * fm, int file_number) +bool +FileMap::testBit(sfileno file_number) const { unsigned long bitmask = (1L << (file_number & LONG_BIT_MASK)); - if (file_number >= fm->max_n_files) + if (file_number >= capacity_) return 0; /* be sure the return value is an int, not a u_long */ - return (fm->file_map[file_number >> LONG_BIT_SHIFT] & bitmask ? 1 : 0); + return (bitmap[file_number >> LONG_BIT_SHIFT] & bitmask ? 1 : 0); } -int -file_map_allocate(fileMap * fm, int suggestion) +sfileno +FileMap::allocate(sfileno suggestion) { int word; - int bit; - int count; - if (suggestion >= fm->max_n_files) + if (suggestion >= capacity_) suggestion = 0; - if (!file_map_bit_test(fm, suggestion)) + if (!testBit(suggestion)) return suggestion; word = suggestion >> LONG_BIT_SHIFT; - for (count = 0; count < fm->nwords; count++) { - if (fm->file_map[word] != ALL_ONES) + for (unsigned int count = 0; count < nwords; count++) { + if (bitmap[word] != ALL_ONES) break; - word = (word + 1) % fm->nwords; + word = (word + 1) % nwords; } - for (bit = 0; bit < BITS_IN_A_LONG; bit++) { + for (unsigned char bit = 0; bit < BITS_IN_A_LONG; bit++) { suggestion = ((unsigned long) word << LONG_BIT_SHIFT) | bit; - if (!file_map_bit_test(fm, suggestion)) { + if (!testBit(suggestion)) { return suggestion; } } - debugs(8, 3, "growing from file_map_allocate"); - file_map_grow(fm); - return file_map_allocate(fm, fm->max_n_files >> 1); -} - -void -filemapFreeMemory(fileMap * fm) -{ - safe_free(fm->file_map); - safe_free(fm); + grow(); + return allocate(capacity_ >> 1); } -#ifdef TEST - -#define TEST_SIZE 1<<16 -main(argc, argv) +FileMap::~FileMap() { - int i; - - fm = file_map_create(TEST_SIZE); - - for (i = 0; i < TEST_SIZE; ++i) { - file_map_bit_set(i); - assert(file_map_bit_test(i)); - file_map_bit_reset(i); - } + safe_free(bitmap); } - -#endif diff -u -r -N squid-3.2.0.13/src/FileMap.h squid-3.2.0.14/src/FileMap.h --- squid-3.2.0.13/src/FileMap.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/FileMap.h 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,102 @@ +/* + * FileMap.h + * + * DEBUG: section 08 Swap File Bitmap + * 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. + */ + +#ifndef FILEMAP_H_ +#define FILEMAP_H_ + +#include "typedefs.h" + +/** A bitmap used for managing UFS StoreEntry "file numbers". + * + * Nth bit represents whether file number N is used. + * The map automatically grows to hold up to 2^24 bits. + * New bit is "off" or zero by default, representing unused fileno. + * TODO: consider using std::bitset instead. + */ +class FileMap +{ +public: + FileMap(); + ~FileMap(); + + /** Set the num-th bit in the FileMap + * + * \warning FileMap's backing storage will be extended as needed to + * hold the representation, but if the bit is already set + * it will break the file number accounting, so the caller must + * ensure that setBit is only called if the bit is not already set, + * by using testBit on it before. + */ + bool setBit(sfileno num); + + /// Test whether the num-th bit in the FileMap is set + bool testBit(sfileno num) const; + + /** Clear the num-th bit in the FileMap + * + * \warning that clearBit doesn't do any bounds checking, nor it + * checks that the bit is set before clearing. The caller will have + * to ensure that both are true using testBit before clearing. + */ + void clearBit(sfileno num); + + /** locate an unused slot in the FileMap, possibly at or after position suggestion + * + * Obtain the location of an unused slot in the FileMap, + * growing it if needed. + * The suggestion is only an advice; there is no guarantee + * that it will be followed. + */ + sfileno allocate(sfileno suggestion); + + /// return the max number of slots in the FileMap + int capacity() const {return capacity_;} + + /// return the number of used slots in the FileMap + int numFilesInMap() const {return usedSlots_;} +private: + /// grow the FileMap (size is doubled each time, up to 2^24 bits) + void grow(); + FileMap(const FileMap &); //no copying + FileMap& operator=(const FileMap &); //no assignments + + /// max number of files which can be tracked in the current store + sfileno capacity_; + /// used slots in the map + unsigned int usedSlots_; + /// number of "long ints" making up the filemap + unsigned int nwords; + unsigned long *bitmap; +}; + +#endif /* FILEMAP_H_ */ diff -u -r -N squid-3.2.0.13/src/format/ByteCode.h squid-3.2.0.14/src/format/ByteCode.h --- squid-3.2.0.13/src/format/ByteCode.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/format/ByteCode.h 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,209 @@ +#ifndef _SQUID_FMT_BYTECODE_H +#define _SQUID_FMT_BYTECODE_H + +/* + * Squid configuration allows users to define custom formats in + * several components. + * - logging + * - external ACL input + * - deny page URL + * + * These enumerations and classes define the API for parsing of + * format directives to define these patterns. Along with output + * functionality to produce formatted buffers. + */ + +namespace Format +{ + +/* + * Bytecodes for the configureable format stuff + */ +typedef enum { + LFT_NONE, /* dummy */ + + /* arbitrary string between tokens */ + LFT_STRING, + + /* client TCP connection remote end details */ + LFT_CLIENT_IP_ADDRESS, + LFT_CLIENT_FQDN, + LFT_CLIENT_PORT, + LFT_CLIENT_EUI, + + /* client TCP connection local end details */ + LFT_CLIENT_LOCAL_IP, + LFT_CLIENT_LOCAL_PORT, + /*LFT_CLIENT_LOCAL_FQDN, (rDNS) */ + + /* client connection local squid.conf details */ + LFT_LOCAL_LISTENING_IP, + LFT_LOCAL_LISTENING_PORT, + /*LFT_LOCAL_LISTENING_NAME, (myportname) */ + + /* server TCP connection remote end details */ + LFT_SERVER_IP_ADDRESS, + LFT_SERVER_FQDN_OR_PEER_NAME, + LFT_SERVER_PORT, + + /* server TCP connection local end details */ + LFT_SERVER_LOCAL_IP, + LFT_SERVER_LOCAL_IP_OLD_27, + LFT_SERVER_LOCAL_PORT, + + /* original Request-Line details recieved from client */ + LFT_CLIENT_REQ_METHOD, + LFT_CLIENT_REQ_URI, + LFT_CLIENT_REQ_URLPATH, + /* LFT_CLIENT_REQ_QUERY, */ + LFT_CLIENT_REQ_VERSION, + + /* Request-Line details recieved from client (legacy, filtered) */ + LFT_REQUEST_METHOD, + LFT_REQUEST_URI, + LFT_REQUEST_URLPATH_OLD_31, + /*LFT_REQUEST_QUERY, */ + LFT_REQUEST_VERSION_OLD_2X, + LFT_REQUEST_VERSION, + + /* request header details pre-adaptation */ + LFT_REQUEST_HEADER, + LFT_REQUEST_HEADER_ELEM, + LFT_REQUEST_ALL_HEADERS, + + /* request header details post-adaptation */ + LFT_ADAPTED_REQUEST_HEADER, + LFT_ADAPTED_REQUEST_HEADER_ELEM, + LFT_ADAPTED_REQUEST_ALL_HEADERS, + + /* Request-Line details sent to the server/peer */ + LFT_SERVER_REQ_METHOD, + LFT_SERVER_REQ_URI, + LFT_SERVER_REQ_URLPATH, + /*LFT_SERVER_REQ_QUERY, */ + LFT_SERVER_REQ_VERSION, + + /* request meta details */ + LFT_REQUEST_SIZE_TOTAL, + /*LFT_REQUEST_SIZE_LINE, */ + LFT_REQUEST_SIZE_HEADERS, + /*LFT_REQUEST_SIZE_BODY, */ + /*LFT_REQUEST_SIZE_BODY_NO_TE, */ + + /* original Status-Line details recieved from server */ + // XXX: todo + + /* Status-Line details sent to the client */ + // XXX: todo + + /* response Status-Line details (legacy, filtered) */ + LFT_HTTP_SENT_STATUS_CODE_OLD_30, + LFT_HTTP_SENT_STATUS_CODE, + LFT_HTTP_RECEIVED_STATUS_CODE, + /*LFT_HTTP_STATUS, */ + LFT_HTTP_BODY_BYTES_READ, + + /* response header details pre-adaptation */ + LFT_REPLY_HEADER, + LFT_REPLY_HEADER_ELEM, + LFT_REPLY_ALL_HEADERS, + + /* response header details post-adaptation */ + /* LFT_ADAPTED_REPLY_HEADER, */ + /* LFT_ADAPTED_REPLY_HEADER_ELEM, */ + /* LFT_ADAPTED_REPLY_ALL_HEADERS, */ + + /* response meta details */ + LFT_REPLY_SIZE_TOTAL, + LFT_REPLY_HIGHOFFSET, + LFT_REPLY_OBJECTSIZE, + /*LFT_REPLY_SIZE_LINE, */ + LFT_REPLY_SIZE_HEADERS, + /*LFT_REPLY_SIZE_BODY, */ + /*LFT_REPLY_SIZE_BODY_NO_TE, */ + + /* client credentials */ + LFT_USER_NAME, /* any source will do */ + LFT_USER_LOGIN, + LFT_USER_IDENT, + /*LFT_USER_REALM, */ + /*LFT_USER_SCHEME, */ + LFT_USER_EXTERNAL, + /* LFT_USER_SSL_CERT, */ + + /* global time details */ + LFT_TIME_SECONDS_SINCE_EPOCH, + LFT_TIME_SUBSECOND, + LFT_TIME_LOCALTIME, + LFT_TIME_GMT, + + /* processing time details */ + LFT_TIME_TO_HANDLE_REQUEST, + LFT_PEER_RESPONSE_TIME, + LFT_TOTAL_SERVER_SIDE_RESPONSE_TIME, + LFT_DNS_WAIT_TIME, + + /* Squid internal processing details */ + LFT_SQUID_STATUS, + LFT_SQUID_ERROR, + LFT_SQUID_ERROR_DETAIL, + LFT_SQUID_HIERARCHY, + + LFT_MIME_TYPE, + LFT_TAG, + LFT_IO_SIZE_TOTAL, + LFT_EXT_LOG, + + LFT_SEQUENCE_NUMBER, + +#if USE_ADAPTATION + LFT_ADAPTATION_SUM_XACT_TIMES, + LFT_ADAPTATION_ALL_XACT_TIMES, + LFT_ADAPTATION_LAST_HEADER, + LFT_ADAPTATION_LAST_HEADER_ELEM, + LFT_ADAPTATION_LAST_ALL_HEADERS, +#endif + +#if ICAP_CLIENT + + LFT_ICAP_TOTAL_TIME, + + LFT_ICAP_ADDR, + LFT_ICAP_SERV_NAME, + LFT_ICAP_REQUEST_URI, + LFT_ICAP_REQUEST_METHOD, + LFT_ICAP_BYTES_SENT, + LFT_ICAP_BYTES_READ, + LFT_ICAP_BODY_BYTES_READ, + + LFT_ICAP_REQ_HEADER, + LFT_ICAP_REQ_HEADER_ELEM, + LFT_ICAP_REQ_ALL_HEADERS, + + LFT_ICAP_REP_HEADER, + LFT_ICAP_REP_HEADER_ELEM, + LFT_ICAP_REP_ALL_HEADERS, + + LFT_ICAP_TR_RESPONSE_TIME, + LFT_ICAP_IO_TIME, + LFT_ICAP_OUTCOME, + LFT_ICAP_STATUS_CODE, +#endif + + LFT_PERCENT /* special string cases for escaped chars */ +} ByteCode_t; + +/// Quoting style for a format output. +enum Quoting { + LOG_QUOTE_NONE = 0, + LOG_QUOTE_QUOTES, + LOG_QUOTE_MIMEBLOB, + LOG_QUOTE_URL, + LOG_QUOTE_RAW +}; + +extern const char *log_tags[]; + +} // namespace Format + +#endif /* _SQUID_FMT_BYTECODE_H */ diff -u -r -N squid-3.2.0.13/src/format/Config.cc squid-3.2.0.14/src/format/Config.cc --- squid-3.2.0.13/src/format/Config.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/format/Config.cc 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,43 @@ +#include "config.h" +#include "format/Config.h" +#include "protos.h" +#include + +Format::FmtConfig Format::TheConfig; + +void +Format::FmtConfig::parseFormats() +{ + char *name, *def; + + if ((name = strtok(NULL, w_space)) == NULL) + self_destruct(); + + if ((def = strtok(NULL, "\r\n")) == NULL) { + self_destruct(); + return; + } + + debugs(3, 2, "Custom Format for '" << name << "' is '" << def << "'"); + + Format *nlf = new Format(name); + + if (!nlf->parse(def)) { + self_destruct(); + return; + } + + // add to global config list + nlf->next = formats; + formats = nlf; +} + +void +Format::FmtConfig::registerTokens(const String &nsName, TokenTableEntry const *tokenArray) +{ + debugs(46, 2, HERE << " register format tokens for '" << nsName << "'"); + if (tokenArray != NULL) + tokens.push_back(TokenNamespace(nsName, tokenArray)); + else + debugs(0,0, "BUG: format tokens for '" << nsName << "' missing!"); +} diff -u -r -N squid-3.2.0.13/src/format/Config.h squid-3.2.0.14/src/format/Config.h --- squid-3.2.0.13/src/format/Config.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/format/Config.h 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,76 @@ +#ifndef SQUID_SRC_FORMAT_CONFIG_H +#define SQUID_SRC_FORMAT_CONFIG_H + +#include "format/Format.h" +//#include "format/TokenTableEntry.h" +#include "SquidString.h" +#include + +class StoreEntry; + +namespace Format +{ + +class TokenTableEntry; + +/// A namespace or 'set' of tokens +/// components register their namespace prefix and an array of tokens +/// which can then be embeded in any format. +class TokenNamespace +{ +public: + TokenNamespace(const String &nsName, TokenTableEntry const *tSet) : prefix(nsName), tokenSet(tSet) {} + + /// prefix namespace name (excluding '::') + String prefix; + + /// array of tokens inside this namespace + /// The set of tokens may change, but the location of it pointed to from here must not. + TokenTableEntry const *tokenSet; +}; + +/// The set of custom formats defined in squid.conf +/// +class FmtConfig +{ +public: + /// Parse a log format directive line (logfile_format) + void parseFormats(); + + /// Dump/display the formats currently known to the provided StoreEntry object + void dumpFormats(StoreEntry *e, const char *name) { + formats->dump(e, name); + } + + /* Register a namespace set of tokens to be accepted by the format parser. + * Multiple arrays can be registered, they will be scanned for + * in order registered. So care needs to be taken that arrays registered + * first do not overlap or consume tokens registered later for a namespace. + */ + void registerTokens(const String &nsName, TokenTableEntry const *tokenArray); + + /// Linked list of custom formats + Format *formats; + + /// list of token namespaces registered + std::list tokens; + +#if USE_ADAPTATION + bool hasAdaptToken; +#endif + +#if ICAP_CLIENT + bool hasIcapToken; +#endif +}; + +extern FmtConfig TheConfig; + +} // namespace Format + +// Legacy parsing wrappers +#define parse_format(X) (X)->parseFormats() +#define free_format(X) do{ delete (*(X)).formats; (*(X)).formats=NULL; }while(false) +#define dump_format(E,N,D) (D).dumpFormats((E),(N)) + +#endif diff -u -r -N squid-3.2.0.13/src/format/Format.cc squid-3.2.0.14/src/format/Format.cc --- squid-3.2.0.13/src/format/Format.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/format/Format.cc 2011-12-13 00:08:18.000000000 +1300 @@ -5,12 +5,16 @@ #include "errorpage.h" #include "format/Format.h" #include "format/Quoting.h" -#include "format/Tokens.h" +#include "format/Token.h" #include "HttpRequest.h" #include "MemBuf.h" #include "rfc1738.h" #include "SquidTime.h" #include "Store.h" +#if USE_SSL +#include "ssl/ErrorDetail.h" +#endif + /// Convert a string to NULL pointer if it is "" #define strOrNull(s) ((s)==NULL||(s)[0]=='\0'?NULL:(s)) @@ -219,11 +223,11 @@ if (t->zero) entry->append("0", 1); - if (t->width) - storeAppendPrintf(entry, "%d", (int) t->width); + if (t->widthMin >= 0) + storeAppendPrintf(entry, "%d", t->widthMin); - if (t->precision) - storeAppendPrintf(entry, ".%d", (int) t->precision); + if (t->widthMax >= 0) + storeAppendPrintf(entry, ".%d", t->widthMax); if (arg) storeAppendPrintf(entry, "{%s}", arg); @@ -516,7 +520,7 @@ break; #if USE_ADAPTATION - case LTF_ADAPTATION_SUM_XACT_TIMES: + case LFT_ADAPTATION_SUM_XACT_TIMES: if (al->request) { Adaptation::History::Pointer ah = al->request->adaptHistory(); if (ah != NULL) @@ -525,7 +529,7 @@ } break; - case LTF_ADAPTATION_ALL_XACT_TIMES: + case LFT_ADAPTATION_ALL_XACT_TIMES: if (al->request) { Adaptation::History::Pointer ah = al->request->adaptHistory(); if (ah != NULL) @@ -822,20 +826,28 @@ break; case LFT_SQUID_ERROR_DETAIL: - if (al->request && al->request->errDetail != ERR_DETAIL_NONE) { - if (al->request->errDetail > ERR_DETAIL_START && - al->request->errDetail < ERR_DETAIL_MAX) - out = errorDetailName(al->request->errDetail); - else { - if (al->request->errDetail >= ERR_DETAIL_EXCEPTION_START) - snprintf(tmp, sizeof(tmp), "%s=0x%X", - errorDetailName(al->request->errDetail), (uint32_t) al->request->errDetail); - else - snprintf(tmp, sizeof(tmp), "%s=%d", - errorDetailName(al->request->errDetail), al->request->errDetail); +#if USE_SSL + if (al->request && al->request->errType == ERR_SECURE_CONNECT_FAIL) { + if (! (out = Ssl::GetErrorName(al->request->errDetail))) { + snprintf(tmp, sizeof(tmp), "SSL_ERR=%d", al->request->errDetail); out = tmp; } - } + } else +#endif + if (al->request && al->request->errDetail != ERR_DETAIL_NONE) { + if (al->request->errDetail > ERR_DETAIL_START && + al->request->errDetail < ERR_DETAIL_MAX) + out = errorDetailName(al->request->errDetail); + else { + if (al->request->errDetail >= ERR_DETAIL_EXCEPTION_START) + snprintf(tmp, sizeof(tmp), "%s=0x%X", + errorDetailName(al->request->errDetail), (uint32_t) al->request->errDetail); + else + snprintf(tmp, sizeof(tmp), "%s=%d", + errorDetailName(al->request->errDetail), al->request->errDetail); + out = tmp; + } + } break; case LFT_SQUID_HIERARCHY: @@ -999,11 +1011,11 @@ } if (dooff) { - snprintf(tmp, sizeof(tmp), "%0*" PRId64, fmt->zero ? (int) fmt->width : 0, outoff); + snprintf(tmp, sizeof(tmp), "%0*" PRId64, fmt->zero && fmt->widthMin >= 0 ? fmt->widthMin : 0, outoff); out = tmp; } else if (doint) { - snprintf(tmp, sizeof(tmp), "%0*ld", fmt->zero ? (int) fmt->width : 0, outint); + snprintf(tmp, sizeof(tmp), "%0*ld", fmt->zero && fmt->widthMin >= 0 ? fmt->widthMin : 0, outint); out = tmp; } @@ -1053,12 +1065,12 @@ } // enforce width limits if configured - const bool haveMaxWidth = fmt->precision && !doint && !dooff; - if (haveMaxWidth || fmt->width) { - const int minWidth = fmt->width ? - static_cast(fmt->width) : 0; + const bool haveMaxWidth = fmt->widthMax >=0 && !doint && !dooff; + if (haveMaxWidth || fmt->widthMin) { + const int minWidth = fmt->widthMin >= 0 ? + fmt->widthMin :0; const int maxWidth = haveMaxWidth ? - static_cast(fmt->precision) : strlen(out); + fmt->widthMax : strlen(out); if (fmt->left) mb.Printf("%-*.*s", minWidth, maxWidth, out); diff -u -r -N squid-3.2.0.13/src/format/Makefile.am squid-3.2.0.14/src/format/Makefile.am --- squid-3.2.0.13/src/format/Makefile.am 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/format/Makefile.am 2011-12-13 00:08:18.000000000 +1300 @@ -4,10 +4,14 @@ noinst_LTLIBRARIES = libformat.la libformat_la_SOURCES = \ + ByteCode.h \ + Config.cc \ + Config.h \ Format.cc \ Format.h \ Quoting.cc \ Quoting.h \ - Tokens.cc \ - Tokens.h + Token.cc \ + Token.h \ + TokenTableEntry.h diff -u -r -N squid-3.2.0.13/src/format/Makefile.in squid-3.2.0.14/src/format/Makefile.in --- squid-3.2.0.13/src/format/Makefile.in 2011-10-14 14:48:05.000000000 +1300 +++ squid-3.2.0.14/src/format/Makefile.in 2011-12-13 00:10:49.000000000 +1300 @@ -56,7 +56,7 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libformat_la_LIBADD = -am_libformat_la_OBJECTS = Format.lo Quoting.lo Tokens.lo +am_libformat_la_OBJECTS = Config.lo Format.lo Quoting.lo Token.lo libformat_la_OBJECTS = $(am_libformat_la_OBJECTS) DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/cfgaux/depcomp @@ -309,12 +309,16 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libformat.la libformat_la_SOURCES = \ + ByteCode.h \ + Config.cc \ + Config.h \ Format.cc \ Format.h \ Quoting.cc \ Quoting.h \ - Tokens.cc \ - Tokens.h + Token.cc \ + Token.h \ + TokenTableEntry.h all: all-am @@ -377,9 +381,10 @@ distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Config.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Format.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Quoting.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Tokens.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Token.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< diff -u -r -N squid-3.2.0.13/src/format/Token.cc squid-3.2.0.14/src/format/Token.cc --- squid-3.2.0.13/src/format/Token.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/format/Token.cc 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,556 @@ +#include "config.h" +#include "format/Config.h" +#include "format/Token.h" +#include "format/TokenTableEntry.h" +#include "Store.h" + +const char *Format::log_tags[] = { + "NONE", + "TCP_HIT", + "TCP_MISS", + "TCP_REFRESH_UNMODIFIED", + "TCP_REFRESH_FAIL", // same tag logged for LOG_TCP_REFRESH_FAIL_OLD and + "TCP_REFRESH_FAIL", // LOG_TCP_REFRESH_FAIL_ERR for backward-compatibility + "TCP_REFRESH_MODIFIED", + "TCP_CLIENT_REFRESH_MISS", + "TCP_IMS_HIT", + "TCP_SWAPFAIL_MISS", + "TCP_NEGATIVE_HIT", + "TCP_MEM_HIT", + "TCP_DENIED", + "TCP_DENIED_REPLY", + "TCP_OFFLINE_HIT", +#if LOG_TCP_REDIRECTS + "TCP_REDIRECT", +#endif + "UDP_HIT", + "UDP_MISS", + "UDP_DENIED", + "UDP_INVALID", + "UDP_MISS_NOFETCH", + "ICP_QUERY", + "LOG_TYPE_MAX" +}; + +// Due to token overlaps between 1 and 2 letter tokens (Bug 3310) +// We split the token table into sets determined by the token length +namespace Format +{ + +/// 1-char tokens. +static TokenTableEntry TokenTable1C[] = { + + {">a", LFT_CLIENT_IP_ADDRESS}, + {">p", LFT_CLIENT_PORT}, + {">A", LFT_CLIENT_FQDN}, + + {"h", LFT_REQUEST_HEADER}, + {">h", LFT_REQUEST_ALL_HEADERS}, + {"v", LFT_REQUEST_VERSION_OLD_2X}, + + {"%", LFT_PERCENT}, + + {NULL, LFT_NONE} /* this must be last */ +}; + +/// 2-char tokens +static TokenTableEntry TokenTable2C[] = { + + {">la", LFT_CLIENT_LOCAL_IP}, + {"la", LFT_LOCAL_LISTENING_IP}, + {">lp", LFT_CLIENT_LOCAL_PORT}, + {"lp", LFT_LOCAL_LISTENING_PORT}, + /*{ "lA", LFT_LOCAL_NAME }, */ + + {"ha", LFT_ADAPTED_REQUEST_HEADER}, + {">ha", LFT_ADAPTED_REQUEST_ALL_HEADERS}, + + {"un", LFT_USER_NAME}, + {"ul", LFT_USER_LOGIN}, + /*{ "ur", LFT_USER_REALM }, */ + /*{ "us", LFT_USER_SCHEME }, */ + {"ui", LFT_USER_IDENT}, + {"ue", LFT_USER_EXTERNAL}, + + {"Hs", LFT_HTTP_SENT_STATUS_CODE_OLD_30}, + {">Hs", LFT_HTTP_SENT_STATUS_CODE}, + {"rm", LFT_CLIENT_REQ_METHOD}, + {">ru", LFT_CLIENT_REQ_URI}, + {">rp", LFT_CLIENT_REQ_URLPATH}, + /*{">rq", LFT_CLIENT_REQ_QUERY},*/ + {">rv", LFT_CLIENT_REQ_VERSION}, + + {"rm", LFT_REQUEST_METHOD}, + {"ru", LFT_REQUEST_URI}, /* doesn't include the query-string */ + {"rp", LFT_REQUEST_URLPATH_OLD_31}, + /* { "rq", LFT_REQUEST_QUERY }, * / / * the query-string, INCLUDING the leading ? */ + {"rv", LFT_REQUEST_VERSION}, + + {"st", LFT_REQUEST_SIZE_TOTAL }, + /*{ ">sl", LFT_REQUEST_SIZE_LINE }, * / / * the request line "GET ... " */ + {">sh", LFT_REQUEST_SIZE_HEADERS }, + /*{ ">sb", LFT_REQUEST_SIZE_BODY }, */ + /*{ ">sB", LFT_REQUEST_SIZE_BODY_NO_TE }, */ + + {"2 byte tokens +static TokenTableEntry TokenTableMisc[] = { + {">eui", LFT_CLIENT_EUI}, + {"err_code", LFT_SQUID_ERROR }, + {"err_detail", LFT_SQUID_ERROR_DETAIL }, + {NULL, LFT_NONE} /* this must be last */ +}; + +#if USE_ADAPTATION +static TokenTableEntry TokenTableAdapt[] = { + {"all_trs", LFT_ADAPTATION_ALL_XACT_TIMES}, + {"sum_trs", LFT_ADAPTATION_SUM_XACT_TIMES}, + {"st", LFT_ICAP_BYTES_SENT}, + {"h", LFT_ICAP_REQ_HEADER}, + {"configTag != NULL; lte++) { + debugs(46, 8, HERE << "compare tokens '" << lte->configTag << "' with '" << cur << "'"); + if (strncmp(lte->configTag, cur, strlen(lte->configTag)) == 0) { + type = lte->tokenType; + label = lte->configTag; + debugs(46, 7, HERE << "Found token '" << label << "'"); + return cur + strlen(lte->configTag); + } + } + return cur; +} + +/* parses a single token. Returns the token length in characters, + * and fills in the lt item with the token information. + * def is for sure null-terminated + */ +int +Format::Token::parse(char *def, Quoting *quoting) +{ + char *cur = def; + + int l; + + l = strcspn(cur, "%"); + + if (l > 0) { + char *cp; + /* it's a string for sure, until \0 or the next % */ + cp = (char *)xmalloc(l + 1); + xstrncpy(cp, cur, l + 1); + type = LFT_STRING; + data.string = cp; + + while (l > 0) { + switch (*cur) { + + case '"': + + if (*quoting == LOG_QUOTE_NONE) + *quoting = LOG_QUOTE_QUOTES; + else if (*quoting == LOG_QUOTE_QUOTES) + *quoting = LOG_QUOTE_NONE; + + break; + + case '[': + if (*quoting == LOG_QUOTE_NONE) + *quoting = LOG_QUOTE_MIMEBLOB; + + break; + + case ']': + if (*quoting == LOG_QUOTE_MIMEBLOB) + *quoting = LOG_QUOTE_NONE; + + break; + } + + cur++; + l--; + } + + goto done; + } + + if (!*cur) + goto done; + + cur++; + + // select quoting style for his particular token + switch (*cur) { + + case '"': + quote = LOG_QUOTE_QUOTES; + cur++; + break; + + case '\'': + quote = LOG_QUOTE_RAW; + cur++; + break; + + case '[': + quote = LOG_QUOTE_MIMEBLOB; + cur++; + break; + + case '#': + quote = LOG_QUOTE_URL; + cur++; + break; + + default: + quote = *quoting; + break; + } + + if (*cur == '-') { + left = 1; + cur++; + } + + if (*cur == '0') { + zero = 1; + cur++; + } + + if (xisdigit(*cur)) + widthMin = strtol(cur, &cur, 10); + + if (*cur == '.' && xisdigit(*(++cur))) + widthMax = strtol(cur, &cur, 10); + + if (*cur == '{') { + char *cp; + cur++; + l = strcspn(cur, "}"); + cp = (char *)xmalloc(l + 1); + xstrncpy(cp, cur, l + 1); + data.string = cp; + cur += l; + + if (*cur == '}') + cur++; + } + + type = LFT_NONE; + + // Scan each registered token namespace + debugs(46, 9, HERE << "check for token in " << TheConfig.tokens.size() << " namespaces."); + for (std::list::const_iterator itr = TheConfig.tokens.begin(); itr != TheConfig.tokens.end(); itr++) { + debugs(46, 7, HERE << "check for possible " << itr->prefix << ":: token"); + const size_t len = itr->prefix.size(); + if (itr->prefix.cmp(cur, len) == 0 && cur[len] == ':' && cur[len+1] == ':') { + debugs(46, 5, HERE << "check for " << itr->prefix << ":: token in '" << cur << "'"); + const char *old = cur; + cur = scanForToken(itr->tokenSet, cur+len+2); + if (old != cur) // found + break; + else // reset to start of namespace + cur = cur - len - 2; + } + } + + if (type == LFT_NONE) { + // For upward compatibility, assume "http::" prefix as default prefix + // for all log access formatting codes, except those starting with a + // "%" or a known namespace. (ie "icap::", "adapt::") + if (strncmp(cur,"http::", 6) == 0 && *(cur+6) != '%' ) + cur += 6; + + // NP: scan the sets of tokens in decreasing size to guarantee no + // mistakes made with overlapping names. (Bug 3310) + + // Scan for various long tokens + debugs(46, 5, HERE << "scan for possible Misc token"); + cur = scanForToken(TokenTableMisc, cur); + // scan for 2-char tokens + if (type == LFT_NONE) { + debugs(46, 5, HERE << "scan for possible 2C token"); + cur = scanForToken(TokenTable2C, cur); + } + // finally scan for 1-char tokens. + if (type == LFT_NONE) { + debugs(46, 5, HERE << "scan for possible 1C token"); + cur = scanForToken(TokenTable1C, cur); + } + } + + if (type == LFT_NONE) { + fatalf("Can't parse configuration token: '%s'\n", def); + } + + if (*cur == ' ') { + space = 1; + cur++; + } + +done: + + switch (type) { + +#if USE_ADAPTATION + case LFT_ADAPTATION_LAST_HEADER: +#endif + +#if ICAP_CLIENT + case LFT_ICAP_REQ_HEADER: + + case LFT_ICAP_REP_HEADER: +#endif + + case LFT_ADAPTED_REQUEST_HEADER: + + case LFT_REQUEST_HEADER: + + case LFT_REPLY_HEADER: + + if (data.string) { + char *header = data.string; + char *cp = strchr(header, ':'); + + if (cp) { + *cp++ = '\0'; + + if (*cp == ',' || *cp == ';' || *cp == ':') + data.header.separator = *cp++; + else + data.header.separator = ','; + + data.header.element = cp; + + switch (type) { + case LFT_REQUEST_HEADER: + type = LFT_REQUEST_HEADER_ELEM; + break; + + case LFT_ADAPTED_REQUEST_HEADER: + type = LFT_ADAPTED_REQUEST_HEADER_ELEM; + break; + + case LFT_REPLY_HEADER: + type = LFT_REPLY_HEADER_ELEM; + break; +#if USE_ADAPTATION + case LFT_ADAPTATION_LAST_HEADER: + type = LFT_ADAPTATION_LAST_HEADER_ELEM; + break; +#endif +#if ICAP_CLIENT + case LFT_ICAP_REQ_HEADER: + type = LFT_ICAP_REQ_HEADER_ELEM; + break; + case LFT_ICAP_REP_HEADER: + type = LFT_ICAP_REP_HEADER_ELEM; + break; +#endif + default: + break; + } + } + + data.header.header = header; + } else { + switch (type) { + case LFT_REQUEST_HEADER: + type = LFT_REQUEST_ALL_HEADERS; + break; + + case LFT_ADAPTED_REQUEST_HEADER: + type = LFT_ADAPTED_REQUEST_ALL_HEADERS; + break; + + case LFT_REPLY_HEADER: + type = LFT_REPLY_ALL_HEADERS; + break; +#if USE_ADAPTATION + case LFT_ADAPTATION_LAST_HEADER: + type = LFT_ADAPTATION_LAST_ALL_HEADERS; + break; +#endif +#if ICAP_CLIENT + case LFT_ICAP_REQ_HEADER: + type = LFT_ICAP_REQ_ALL_HEADERS; + break; + case LFT_ICAP_REP_HEADER: + type = LFT_ICAP_REP_ALL_HEADERS; + break; +#endif + default: + break; + } + Config.onoff.log_mime_hdrs = 1; + } + + break; + + case LFT_CLIENT_FQDN: + Config.onoff.log_fqdn = 1; + break; + + case LFT_TIME_SUBSECOND: + divisor = 1000; + + if (widthMax > 0) { + int i; + divisor = 1000000; + + for (i = widthMax; i > 1; i--) + divisor /= 10; + + if (!divisor) + divisor = 0; + } + break; + + case LFT_HTTP_SENT_STATUS_CODE_OLD_30: + debugs(46, 0, "WARNING: The \"Hs\" formatting code is deprecated. Use the \">Hs\" instead."); + type = LFT_HTTP_SENT_STATUS_CODE; + break; + + case LFT_SERVER_LOCAL_IP_OLD_27: + debugs(46, 0, "WARNING: The \"oa\" formatting code is deprecated. Use the \"rp\" instead."); + type = LFT_CLIENT_REQ_URLPATH; + break; + + case LFT_REQUEST_VERSION_OLD_2X: + debugs(46, 0, "WARNING: The \">v\" formatting code is deprecated. Use the \">rv\" instead."); + type = LFT_REQUEST_VERSION; + break; + +#if !USE_SQUID_EUI + case LFT_CLIENT_EUI: + debugs(46, 0, "WARNING: The \">eui\" formatting code requires EUI features which are disabled in this Squid."); + break; +#endif + + default: + break; + } + + return (cur - def); +} + +Format::Token::~Token() +{ + label = NULL; // drop reference to global static. + safe_free(data.string); + while (next) { + Token *tokens = next; + next = next->next; + tokens->next = NULL; + delete tokens; + } +} + diff -u -r -N squid-3.2.0.13/src/format/Token.h squid-3.2.0.14/src/format/Token.h --- squid-3.2.0.13/src/format/Token.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/format/Token.h 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,82 @@ +#ifndef _SQUID_FORMAT_TOKEN_H +#define _SQUID_FORMAT_TOKEN_H + +//#include "format/TokenTableEntry.h" +#include "format/ByteCode.h" + +/* + * Squid configuration allows users to define custom formats in + * several components. + * - logging + * - external ACL input + * - deny page URL + * + * These enumerations and classes define the API for parsing of + * format directives to define these patterns. Along with output + * functionality to produce formatted buffers. + */ + +namespace Format +{ + +class TokenTableEntry; + +#define LOG_BUF_SZ (MAX_URL<<2) + +// XXX: inherit from linked list +class Token +{ +public: + Token() : type(LFT_NONE), + label(NULL), + widthMin(-1), + widthMax(-1), + quote(LOG_QUOTE_NONE), + left(0), + space(0), + zero(0), + divisor(0), + next(NULL) + { data.string = NULL; } + + ~Token(); + + /// Initialize the format token registrations + static void Init(); + + /** parses a single token. Returns the token length in characters, + * and fills in this item with the token information. + * def is for sure null-terminated. + */ + int parse(char *def, enum Quoting *quote); + + ByteCode_t type; + const char *label; + union { + char *string; + + struct { + char *header; + char *element; + char separator; + } header; + char *timespec; + } data; + int widthMin; ///< minimum field width + int widthMax; ///< maximum field width + enum Quoting quote; + unsigned int left:1; + unsigned int space:1; + unsigned int zero:1; + int divisor; + Token *next; /* todo: move from linked list to array */ + +private: + char *scanForToken(TokenTableEntry const table[], char *cur); +}; + +extern const char *log_tags[]; + +} // namespace Format + +#endif /* _SQUID_FORMAT_TOKEN_H */ diff -u -r -N squid-3.2.0.13/src/format/Tokens.cc squid-3.2.0.14/src/format/Tokens.cc --- squid-3.2.0.13/src/format/Tokens.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/format/Tokens.cc 1970-01-01 12:00:00.000000000 +1200 @@ -1,538 +0,0 @@ -#include "config.h" -#include "format/Tokens.h" -#include "Store.h" - -const char *Format::log_tags[] = { - "NONE", - "TCP_HIT", - "TCP_MISS", - "TCP_REFRESH_UNMODIFIED", - "TCP_REFRESH_FAIL", // same tag logged for LOG_TCP_REFRESH_FAIL_OLD and - "TCP_REFRESH_FAIL", // LOG_TCP_REFRESH_FAIL_ERR for backward-compatibility - "TCP_REFRESH_MODIFIED", - "TCP_CLIENT_REFRESH_MISS", - "TCP_IMS_HIT", - "TCP_SWAPFAIL_MISS", - "TCP_NEGATIVE_HIT", - "TCP_MEM_HIT", - "TCP_DENIED", - "TCP_DENIED_REPLY", - "TCP_OFFLINE_HIT", -#if LOG_TCP_REDIRECTS - "TCP_REDIRECT", -#endif - "UDP_HIT", - "UDP_MISS", - "UDP_DENIED", - "UDP_INVALID", - "UDP_MISS_NOFETCH", - "ICP_QUERY", - "LOG_TYPE_MAX" -}; - -// Due to token overlaps between 1 and 2 letter tokens (Bug 3310) -// We split the token table into sets determined by the token length -namespace Format -{ - -/// 1-char tokens. -static struct TokenTableEntry TokenTable1C[] = { - - {">a", LFT_CLIENT_IP_ADDRESS}, - {">p", LFT_CLIENT_PORT}, - {">A", LFT_CLIENT_FQDN}, - - {"h", LFT_REQUEST_HEADER}, - {">h", LFT_REQUEST_ALL_HEADERS}, - {"v", LFT_REQUEST_VERSION_OLD_2X}, - - {"%", LFT_PERCENT}, - - {NULL, LFT_NONE} /* this must be last */ -}; - -/// 2-char tokens -static struct TokenTableEntry TokenTable2C[] = { - - {">la", LFT_CLIENT_LOCAL_IP}, - {"la", LFT_LOCAL_LISTENING_IP}, - {">lp", LFT_CLIENT_LOCAL_PORT}, - {"lp", LFT_LOCAL_LISTENING_PORT}, - /*{ "lA", LFT_LOCAL_NAME }, */ - - {"ha", LFT_ADAPTED_REQUEST_HEADER}, - {">ha", LFT_ADAPTED_REQUEST_ALL_HEADERS}, - - {"un", LFT_USER_NAME}, - {"ul", LFT_USER_LOGIN}, - /*{ "ur", LFT_USER_REALM }, */ - /*{ "us", LFT_USER_SCHEME }, */ - {"ui", LFT_USER_IDENT}, - {"ue", LFT_USER_EXTERNAL}, - - {"Hs", LFT_HTTP_SENT_STATUS_CODE_OLD_30}, - {">Hs", LFT_HTTP_SENT_STATUS_CODE}, - {"rm", LFT_CLIENT_REQ_METHOD}, - {">ru", LFT_CLIENT_REQ_URI}, - {">rp", LFT_CLIENT_REQ_URLPATH}, - /*{">rq", LFT_CLIENT_REQ_QUERY},*/ - {">rv", LFT_CLIENT_REQ_VERSION}, - - {"rm", LFT_REQUEST_METHOD}, - {"ru", LFT_REQUEST_URI}, /* doesn't include the query-string */ - {"rp", LFT_REQUEST_URLPATH_OLD_31}, - /* { "rq", LFT_REQUEST_QUERY }, * / / * the query-string, INCLUDING the leading ? */ - {"rv", LFT_REQUEST_VERSION}, - - {"st", LFT_REQUEST_SIZE_TOTAL }, - /*{ ">sl", LFT_REQUEST_SIZE_LINE }, * / / * the request line "GET ... " */ - {">sh", LFT_REQUEST_SIZE_HEADERS }, - /*{ ">sb", LFT_REQUEST_SIZE_BODY }, */ - /*{ ">sB", LFT_REQUEST_SIZE_BODY_NO_TE }, */ - - {"st", LFT_ICAP_BYTES_SENT}, - {"h", LFT_ICAP_REQ_HEADER}, - {"2 byte tokens -static struct TokenTableEntry TokenTableMisc[] = { - {">eui", LFT_CLIENT_EUI}, - {"err_code", LFT_SQUID_ERROR }, - {"err_detail", LFT_SQUID_ERROR_DETAIL }, - {NULL, LFT_NONE} /* this must be last */ -}; - -} // namespace Format - -/// Scans a token table to see if the next token exists there -/// returns a pointer to next unparsed byte and updates type member if found -char * -Format::Token::scanForToken(const struct TokenTableEntry *table, char *cur) -{ - for (const struct TokenTableEntry *lte = table; lte->config != NULL; lte++) { - if (strncmp(lte->config, cur, strlen(lte->config)) == 0) { - type = lte->token_type; - label = lte->config; - debugs(46, 7, HERE << "Found token '" << label << "'"); - return cur + strlen(lte->config); - } - } - return cur; -} - -/* parses a single token. Returns the token length in characters, - * and fills in the lt item with the token information. - * def is for sure null-terminated - */ -int -Format::Token::parse(char *def, Quoting *quoting) -{ - char *cur = def; - - int l; - - l = strcspn(cur, "%"); - - if (l > 0) { - char *cp; - /* it's a string for sure, until \0 or the next % */ - cp = (char *)xmalloc(l + 1); - xstrncpy(cp, cur, l + 1); - type = LFT_STRING; - data.string = cp; - - while (l > 0) { - switch (*cur) { - - case '"': - - if (*quoting == LOG_QUOTE_NONE) - *quoting = LOG_QUOTE_QUOTES; - else if (*quoting == LOG_QUOTE_QUOTES) - *quoting = LOG_QUOTE_NONE; - - break; - - case '[': - if (*quoting == LOG_QUOTE_NONE) - *quoting = LOG_QUOTE_MIMEBLOB; - - break; - - case ']': - if (*quoting == LOG_QUOTE_MIMEBLOB) - *quoting = LOG_QUOTE_NONE; - - break; - } - - cur++; - l--; - } - - goto done; - } - - if (!*cur) - goto done; - - cur++; - - // select quoting style for his particular token - switch (*cur) { - - case '"': - quote = LOG_QUOTE_QUOTES; - cur++; - break; - - case '\'': - quote = LOG_QUOTE_RAW; - cur++; - break; - - case '[': - quote = LOG_QUOTE_MIMEBLOB; - cur++; - break; - - case '#': - quote = LOG_QUOTE_URL; - cur++; - break; - - default: - quote = *quoting; - break; - } - - if (*cur == '-') { - left = 1; - cur++; - } - - if (*cur == '0') { - zero = 1; - cur++; - } - - if (xisdigit(*cur)) - width = strtol(cur, &cur, 10); - - if (*cur == '.') - precision = strtol(cur + 1, &cur, 10); - - if (*cur == '{') { - char *cp; - cur++; - l = strcspn(cur, "}"); - cp = (char *)xmalloc(l + 1); - xstrncpy(cp, cur, l + 1); - data.string = cp; - cur += l; - - if (*cur == '}') - cur++; - } - - type = LFT_NONE; - - // Scan each token namespace - if (strncmp(cur, "icap::", 6) == 0) { -#if ICAP_CLIENT - cur += 6; - debugs(46, 5, HERE << "scan for icap:: token"); - cur = scanForToken(TokenTableIcap, cur); -#else - debugs(46, DBG_IMPORTANT, "ERROR: Format uses icap:: token. ICAP disabled!"); -#endif - } else if (strncmp(cur, "adapt::", 7) == 0) { -#if USE_ADAPTATION - cur += 7; - debugs(46, 5, HERE << "scan for adapt:: token"); - cur = scanForToken(TokenTableAdapt, cur); -#else - debugs(46, DBG_IMPORTANT, "ERROR: Format uses adapt:: token. Adaptation disabled!"); -#endif - } else { - // For upward compatibility, assume "http::" prefix as default prefix - // for all log access formating codes, except those starting with a - // "%" or a known namespace. (ie "icap::", "adapt::") - if (strncmp(cur,"http::", 6) == 0 && *(cur+6) != '%' ) - cur += 6; - - // NP: scan the sets of tokens in decreasing size to guarantee no - // mistakes made with overlapping names. (Bug 3310) - - // Scan for various long tokens - debugs(46, 5, HERE << "scan for possible Misc token"); - cur = scanForToken(TokenTableMisc, cur); - // scan for 2-char tokens - if (type == LFT_NONE) { - debugs(46, 5, HERE << "scan for possible 2C token"); - cur = scanForToken(TokenTable2C, cur); - } - // finally scan for 1-char tokens. - if (type == LFT_NONE) { - debugs(46, 5, HERE << "scan for possible 1C token"); - cur = scanForToken(TokenTable1C, cur); - } - } - - if (type == LFT_NONE) { - fatalf("Can't parse configuration token: '%s'\n", def); - } - - if (*cur == ' ') { - space = 1; - cur++; - } - -done: - - switch (type) { - -#if USE_ADAPTATION - case LFT_ADAPTATION_LAST_HEADER: -#endif - -#if ICAP_CLIENT - case LFT_ICAP_REQ_HEADER: - - case LFT_ICAP_REP_HEADER: -#endif - - case LFT_ADAPTED_REQUEST_HEADER: - - case LFT_REQUEST_HEADER: - - case LFT_REPLY_HEADER: - - if (data.string) { - char *header = data.string; - char *cp = strchr(header, ':'); - - if (cp) { - *cp++ = '\0'; - - if (*cp == ',' || *cp == ';' || *cp == ':') - data.header.separator = *cp++; - else - data.header.separator = ','; - - data.header.element = cp; - - switch (type) { - case LFT_REQUEST_HEADER: - type = LFT_REQUEST_HEADER_ELEM; - break; - - case LFT_ADAPTED_REQUEST_HEADER: - type = LFT_ADAPTED_REQUEST_HEADER_ELEM; - break; - - case LFT_REPLY_HEADER: - type = LFT_REPLY_HEADER_ELEM; - break; -#if USE_ADAPTATION - case LFT_ADAPTATION_LAST_HEADER: - type = LFT_ADAPTATION_LAST_HEADER_ELEM; - break; -#endif -#if ICAP_CLIENT - case LFT_ICAP_REQ_HEADER: - type = LFT_ICAP_REQ_HEADER_ELEM; - break; - case LFT_ICAP_REP_HEADER: - type = LFT_ICAP_REP_HEADER_ELEM; - break; -#endif - default: - break; - } - } - - data.header.header = header; - } else { - switch (type) { - case LFT_REQUEST_HEADER: - type = LFT_REQUEST_ALL_HEADERS; - break; - - case LFT_ADAPTED_REQUEST_HEADER: - type = LFT_ADAPTED_REQUEST_ALL_HEADERS; - break; - - case LFT_REPLY_HEADER: - type = LFT_REPLY_ALL_HEADERS; - break; -#if USE_ADAPTATION - case LFT_ADAPTATION_LAST_HEADER: - type = LFT_ADAPTATION_LAST_ALL_HEADERS; - break; -#endif -#if ICAP_CLIENT - case LFT_ICAP_REQ_HEADER: - type = LFT_ICAP_REQ_ALL_HEADERS; - break; - case LFT_ICAP_REP_HEADER: - type = LFT_ICAP_REP_ALL_HEADERS; - break; -#endif - default: - break; - } - Config.onoff.log_mime_hdrs = 1; - } - - break; - - case LFT_CLIENT_FQDN: - Config.onoff.log_fqdn = 1; - break; - - case LFT_TIME_SUBSECOND: - divisor = 1000; - - if (precision) { - int i; - divisor = 1000000; - - for (i = precision; i > 1; i--) - divisor /= 10; - - if (!divisor) - divisor = 0; - } - break; - - case LFT_HTTP_SENT_STATUS_CODE_OLD_30: - debugs(46, 0, "WARNING: The \"Hs\" formatting code is deprecated. Use the \">Hs\" instead."); - type = LFT_HTTP_SENT_STATUS_CODE; - break; - - case LFT_SERVER_LOCAL_IP_OLD_27: - debugs(46, 0, "WARNING: The \"oa\" formatting code is deprecated. Use the \"rp\" instead."); - type = LFT_CLIENT_REQ_URLPATH; - break; - - case LFT_REQUEST_VERSION_OLD_2X: - debugs(46, 0, "WARNING: The \">v\" formatting code is deprecated. Use the \">rv\" instead."); - type = LFT_REQUEST_VERSION; - break; - -#if !USE_SQUID_EUI - case LFT_CLIENT_EUI: - debugs(46, 0, "WARNING: The \">eui\" formatting code requires EUI features which are disabled in this Squid."); - break; -#endif - - default: - break; - } - - return (cur - def); -} - -Format::Token::~Token() -{ - label = NULL; // drop reference to global static. - safe_free(data.string); - while (next) { - Token *tokens = next; - next = next->next; - tokens->next = NULL; - delete tokens; - } -} - diff -u -r -N squid-3.2.0.13/src/format/Tokens.h squid-3.2.0.14/src/format/Tokens.h --- squid-3.2.0.13/src/format/Tokens.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/format/Tokens.h 1970-01-01 12:00:00.000000000 +1200 @@ -1,235 +0,0 @@ -#ifndef _SQUID_FMT_TOKENS_H -#define _SQUID_FMT_TOKENS_H - -/* - * Squid configuration allows users to define custom formats in - * several components. - * - logging - * - external ACL input - * - deny page URL - * - * These enumerations and classes define the API for parsing of - * format directives to define these patterns. Along with output - * functionality to produce formatted buffers. - */ - -namespace Format -{ - -#define LOG_BUF_SZ (MAX_URL<<2) - -/* - * Bytecodes for the configureable format stuff - */ -typedef enum { - LFT_NONE, /* dummy */ - LFT_STRING, - - LFT_CLIENT_IP_ADDRESS, - LFT_CLIENT_FQDN, - LFT_CLIENT_PORT, - LFT_CLIENT_EUI, - - LFT_SERVER_IP_ADDRESS, - LFT_SERVER_FQDN_OR_PEER_NAME, - LFT_SERVER_PORT, - - LFT_CLIENT_LOCAL_IP, - LFT_LOCAL_LISTENING_IP, - LFT_CLIENT_LOCAL_PORT, - LFT_LOCAL_LISTENING_PORT, - /*LFT_LOCAL_NAME, */ - - LFT_SERVER_LOCAL_IP, - LFT_SERVER_LOCAL_IP_OLD_27, - LFT_SERVER_LOCAL_PORT, - - LFT_TIME_SECONDS_SINCE_EPOCH, - LFT_TIME_SUBSECOND, - LFT_TIME_LOCALTIME, - LFT_TIME_GMT, - LFT_TIME_TO_HANDLE_REQUEST, - - LFT_PEER_RESPONSE_TIME, - LFT_TOTAL_SERVER_SIDE_RESPONSE_TIME, - LFT_DNS_WAIT_TIME, - - LFT_REQUEST_HEADER, - LFT_REQUEST_HEADER_ELEM, - LFT_REQUEST_ALL_HEADERS, - - LFT_ADAPTED_REQUEST_HEADER, - LFT_ADAPTED_REQUEST_HEADER_ELEM, - LFT_ADAPTED_REQUEST_ALL_HEADERS, - - LFT_REPLY_HEADER, - LFT_REPLY_HEADER_ELEM, - LFT_REPLY_ALL_HEADERS, - - LFT_USER_NAME, - LFT_USER_LOGIN, - LFT_USER_IDENT, - /*LFT_USER_REALM, */ - /*LFT_USER_SCHEME, */ - LFT_USER_EXTERNAL, - - LFT_HTTP_SENT_STATUS_CODE_OLD_30, - LFT_HTTP_SENT_STATUS_CODE, - LFT_HTTP_RECEIVED_STATUS_CODE, - /*LFT_HTTP_STATUS, */ - LFT_HTTP_BODY_BYTES_READ, - - LFT_SQUID_STATUS, - LFT_SQUID_ERROR, - LFT_SQUID_ERROR_DETAIL, - LFT_SQUID_HIERARCHY, - - LFT_MIME_TYPE, - - /* original Request-Line details receved from client */ - LFT_CLIENT_REQ_METHOD, - LFT_CLIENT_REQ_URI, - LFT_CLIENT_REQ_URLPATH, - /* LFT_CLIENT_REQ_QUERY, */ - LFT_CLIENT_REQ_VERSION, - - /* Request-Line details receved from client (legacy, filtered) */ - LFT_REQUEST_METHOD, - LFT_REQUEST_URI, - LFT_REQUEST_URLPATH_OLD_31, - /*LFT_REQUEST_QUERY, */ - LFT_REQUEST_VERSION_OLD_2X, - LFT_REQUEST_VERSION, - - /* Request-Line details sent to the server/peer */ - LFT_SERVER_REQ_METHOD, - LFT_SERVER_REQ_URI, - LFT_SERVER_REQ_URLPATH, - /*LFT_SERVER_REQ_QUERY, */ - LFT_SERVER_REQ_VERSION, - - LFT_REQUEST_SIZE_TOTAL, - /*LFT_REQUEST_SIZE_LINE, */ - LFT_REQUEST_SIZE_HEADERS, - /*LFT_REQUEST_SIZE_BODY, */ - /*LFT_REQUEST_SIZE_BODY_NO_TE, */ - - LFT_REPLY_SIZE_TOTAL, - LFT_REPLY_HIGHOFFSET, - LFT_REPLY_OBJECTSIZE, - /*LFT_REPLY_SIZE_LINE, */ - LFT_REPLY_SIZE_HEADERS, - /*LFT_REPLY_SIZE_BODY, */ - /*LFT_REPLY_SIZE_BODY_NO_TE, */ - - LFT_TAG, - LFT_IO_SIZE_TOTAL, - LFT_EXT_LOG, - - LFT_SEQUENCE_NUMBER, - -#if USE_ADAPTATION - LTF_ADAPTATION_SUM_XACT_TIMES, - LTF_ADAPTATION_ALL_XACT_TIMES, - LFT_ADAPTATION_LAST_HEADER, - LFT_ADAPTATION_LAST_HEADER_ELEM, - LFT_ADAPTATION_LAST_ALL_HEADERS, -#endif - -#if ICAP_CLIENT - - LFT_ICAP_TOTAL_TIME, - - LFT_ICAP_ADDR, - LFT_ICAP_SERV_NAME, - LFT_ICAP_REQUEST_URI, - LFT_ICAP_REQUEST_METHOD, - LFT_ICAP_BYTES_SENT, - LFT_ICAP_BYTES_READ, - LFT_ICAP_BODY_BYTES_READ, - - LFT_ICAP_REQ_HEADER, - LFT_ICAP_REQ_HEADER_ELEM, - LFT_ICAP_REQ_ALL_HEADERS, - - LFT_ICAP_REP_HEADER, - LFT_ICAP_REP_HEADER_ELEM, - LFT_ICAP_REP_ALL_HEADERS, - - LFT_ICAP_TR_RESPONSE_TIME, - LFT_ICAP_IO_TIME, - LFT_ICAP_OUTCOME, - LFT_ICAP_STATUS_CODE, -#endif - - LFT_PERCENT /* special string cases for escaped chars */ -} ByteCode_t; - -/// Quoting style for a format output. -enum Quoting { - LOG_QUOTE_NONE = 0, - LOG_QUOTE_QUOTES, - LOG_QUOTE_MIMEBLOB, - LOG_QUOTE_URL, - LOG_QUOTE_RAW -}; - -struct TokenTableEntry { - const char *config; - ByteCode_t token_type; - int options; -}; - -// XXX: inherit from linked list -class Token -{ -public: - Token() : type(LFT_NONE), - label(NULL), - width(0), - precision(0), - quote(LOG_QUOTE_NONE), - left(0), - space(0), - zero(0), - divisor(0), - next(NULL) - { data.string = NULL; }; - ~Token(); - - /** parses a single token. Returns the token length in characters, - * and fills in this item with the token information. - * def is for sure null-terminated. - */ - int parse(char *def, enum Quoting *quote); - - ByteCode_t type; - const char *label; - union { - char *string; - - struct { - char *header; - char *element; - char separator; - } header; - char *timespec; - } data; - unsigned int width; - unsigned int precision; - enum Quoting quote; - unsigned int left:1; - unsigned int space:1; - unsigned int zero:1; - int divisor; - Token *next; /* todo: move from linked list to array */ - -private: - char *scanForToken(const struct TokenTableEntry *table, char *cur); -}; - -extern const char *log_tags[]; - -} // namespace Format - -#endif /* _SQUID_FMT_TOKENS_H */ diff -u -r -N squid-3.2.0.13/src/format/TokenTableEntry.h squid-3.2.0.14/src/format/TokenTableEntry.h --- squid-3.2.0.13/src/format/TokenTableEntry.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/format/TokenTableEntry.h 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,38 @@ +#ifndef _SQUID_FORMAT_TOKENTABLEENTRY_H +#define _SQUID_FORMAT_TOKENTABLEENTRY_H + +#include "format/ByteCode.h" + +/* + * Squid configuration allows users to define custom formats in + * several components. + * - logging + * - external ACL input + * - deny page URL + * + * These enumerations and classes define the API for parsing of + * format directives to define these patterns. Along with output + * functionality to produce formatted buffers. + */ + +namespace Format +{ + +/// One entry in a table of format tokens. +class TokenTableEntry +{ +public: + /// the config file ASCII representation for this token + /// just the base tag bytes, excluding any option syntax bytes + const char *configTag; + + /// the internal byte code representatio of this token + ByteCode_t tokenType; + + /// 32-bit mask? of options affecting the output display of this token + uint32_t options; +}; + +} // namespace Format + +#endif /* _SQUID_FORMAT_TOKENTABLEENTRY_H */ diff -u -r -N squid-3.2.0.13/src/forward.cc squid-3.2.0.14/src/forward.cc --- squid-3.2.0.13/src/forward.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/forward.cc 2011-12-13 00:08:18.000000000 +1300 @@ -62,7 +62,7 @@ #endif static PSC fwdPeerSelectionCompleteWrapper; -static PF fwdServerClosedWrapper; +static CLCB fwdServerClosedWrapper; #if USE_SSL static PF fwdNegotiateSSLWrapper; #endif @@ -184,8 +184,7 @@ HTTPMSGUNLOCK(request); - if (err) - errorStateFree(err); + delete err; entry->unregisterAbort(); @@ -238,10 +237,8 @@ if (page_id == ERR_NONE) page_id = ERR_FORWARDING_DENIED; - ErrorState *anErr = errorCon(page_id, HTTP_FORBIDDEN, request); - + ErrorState *anErr = new ErrorState(page_id, HTTP_FORBIDDEN, request); errorAppendEntry(entry, anErr); // frees anErr - return; } } @@ -259,7 +256,7 @@ if (shutting_down) { /* more yuck */ - ErrorState *anErr = errorCon(ERR_SHUTTING_DOWN, HTTP_SERVICE_UNAVAILABLE, request); + ErrorState *anErr = new ErrorState(ERR_SHUTTING_DOWN, HTTP_SERVICE_UNAVAILABLE, request); errorAppendEntry(entry, anErr); // frees anErr return; } @@ -295,10 +292,8 @@ if (serverDestinations.size() > 0) { // Ditch error page if it was created before. // A new one will be created if there's another problem - if (err) { - errorStateFree(err); - err = NULL; - } + delete err; + err = NULL; // Update the logging information about this new server connection. // Done here before anything else so the errors get logged for @@ -310,8 +305,7 @@ } else { debugs(17, 3, HERE << "Connection failed: " << entry->url()); if (!err) { - ErrorState *anErr = NULL; - anErr = errorCon(ERR_CANNOT_FORWARD, HTTP_INTERNAL_SERVER_ERROR, request); + ErrorState *anErr = new ErrorState(ERR_CANNOT_FORWARD, HTTP_INTERNAL_SERVER_ERROR, request); anErr->xerrno = errno; fail(anErr); } // else use actual error from last connection attempt @@ -324,15 +318,18 @@ { debugs(17, 3, HERE << err_type_str[errorState->type] << " \"" << httpStatusString(errorState->httpStatus) << "\"\n\t" << entry->url() ); - if (err) - errorStateFree(err); - + delete err; err = errorState; if (!errorState->request) errorState->request = HTTPMSGLOCK(request); - request->detailError(errorState->type, errorState->xerrno); +#if USE_SSL + if (errorState->type == ERR_SECURE_CONNECT_FAIL && errorState->detail) + request->detailError(errorState->type, errorState->detail->errorNo()); + else +#endif + request->detailError(errorState->type, errorState->xerrno); } /** @@ -405,17 +402,19 @@ /**** CALLBACK WRAPPERS ************************************************************/ static void -fwdPeerSelectionCompleteWrapper(Comm::ConnectionList * unused, void *data) +fwdPeerSelectionCompleteWrapper(Comm::ConnectionList * unused, ErrorState *err, void *data) { FwdState *fwd = (FwdState *) data; + if (err) + fwd->fail(err); fwd->startConnectionOrFail(); } static void -fwdServerClosedWrapper(int fd, void *data) +fwdServerClosedWrapper(const CommCloseCbParams ¶ms) { - FwdState *fwd = (FwdState *) data; - fwd->serverClosed(fd); + FwdState *fwd = (FwdState *)params.data; + fwd->serverClosed(params.fd); } #if USE_SSL @@ -498,13 +497,6 @@ bool FwdState::checkRetriable() { - /* If there is a request body then Squid can only try once - * even if the method is indempotent - */ - - if (request->body_pipe != NULL) - return false; - /* RFC2616 9.1 Safe and Idempotent Methods */ switch (request->method.id()) { /* 9.1.1 Safe Methods */ @@ -551,7 +543,7 @@ doneWithRetries(); if (self != NULL && !err && shutting_down) { - ErrorState *anErr = errorCon(ERR_SHUTTING_DOWN, HTTP_SERVICE_UNAVAILABLE, request); + ErrorState *anErr = new ErrorState(ERR_SHUTTING_DOWN, HTTP_SERVICE_UNAVAILABLE, request); errorAppendEntry(entry, anErr); } @@ -581,11 +573,17 @@ void FwdState::negotiateSSL(int fd) { + unsigned long ssl_lib_error = SSL_ERROR_NONE; SSL *ssl = fd_table[fd].ssl; int ret; if ((ret = SSL_connect(ssl)) <= 0) { int ssl_error = SSL_get_error(ssl, ret); +#ifdef EPROTO + int sysErrNo = EPROTO; +#else + int sysErrNo = EACCES; +#endif switch (ssl_error) { @@ -597,18 +595,22 @@ Comm::SetSelect(fd, COMM_SELECT_WRITE, fwdNegotiateSSLWrapper, this, 0); return; - default: + case SSL_ERROR_SSL: + case SSL_ERROR_SYSCALL: + ssl_lib_error = ERR_get_error(); debugs(81, 1, "fwdNegotiateSSL: Error negotiating SSL connection on FD " << fd << - ": " << ERR_error_string(ERR_get_error(), NULL) << " (" << ssl_error << + ": " << ERR_error_string(ssl_lib_error, NULL) << " (" << ssl_error << "/" << ret << "/" << errno << ")"); - ErrorState *const anErr = makeConnectingError(ERR_SECURE_CONNECT_FAIL); -#ifdef EPROTO - anErr->xerrno = EPROTO; -#else + // store/report errno when ssl_error is SSL_ERROR_SYSCALL, ssl_lib_error is 0, and ret is -1 + if (ssl_error == SSL_ERROR_SYSCALL && ret == -1 && ssl_lib_error == 0) + sysErrNo = errno; - anErr->xerrno = EACCES; -#endif + // falling through to complete error handling + + default: + ErrorState *const anErr = makeConnectingError(ERR_SECURE_CONNECT_FAIL); + anErr->xerrno = sysErrNo; Ssl::ErrorDetail *errFromFailure = (Ssl::ErrorDetail *)SSL_get_ex_data(ssl, ssl_ex_index_ssl_error_detail); if (errFromFailure != NULL) { @@ -616,8 +618,17 @@ // and will be released when ssl object destroyed. // Copy errFromFailure to a new Ssl::ErrorDetail object anErr->detail = new Ssl::ErrorDetail(*errFromFailure); + } else { + // clientCert can be be NULL + X509 *client_cert = SSL_get_peer_certificate(ssl); + anErr->detail = new Ssl::ErrorDetail(SQUID_ERR_SSL_HANDSHAKE, client_cert); + if (client_cert) + X509_free(client_cert); } + if (ssl_lib_error != SSL_ERROR_NONE) + anErr->detail->setLibError(ssl_lib_error); + fail(anErr); if (serverConnection()->getPeer()) { @@ -658,7 +669,7 @@ if ((ssl = SSL_new(sslContext)) == NULL) { debugs(83, 1, "fwdInitiateSSL: Error allocating handle: " << ERR_error_string(ERR_get_error(), NULL) ); - ErrorState *anErr = errorCon(ERR_SOCKET_FAILURE, HTTP_INTERNAL_SERVER_ERROR, request); + ErrorState *anErr = new ErrorState(ERR_SOCKET_FAILURE, HTTP_INTERNAL_SERVER_ERROR, request); anErr->xerrno = errno; fail(anErr); self = NULL; // refcounted @@ -756,7 +767,7 @@ assert(fd == serverDestinations[0]->fd); if (entry->isEmpty()) { - ErrorState *anErr = errorCon(ERR_CONNECT_FAIL, HTTP_GATEWAY_TIMEOUT, request); + ErrorState *anErr = new ErrorState(ERR_CONNECT_FAIL, HTTP_GATEWAY_TIMEOUT, request); anErr->xerrno = ETIMEDOUT; fail(anErr); @@ -804,7 +815,7 @@ if (serverDestinations[0]->getPeer() && request->flags.sslBumped == true) { debugs(50, 4, "fwdConnectStart: Ssl bumped connections through parrent proxy are not allowed"); - ErrorState *anErr = errorCon(ERR_CANNOT_FORWARD, HTTP_SERVICE_UNAVAILABLE, request); + ErrorState *anErr = new ErrorState(ERR_CANNOT_FORWARD, HTTP_SERVICE_UNAVAILABLE, request); fail(anErr); self = NULL; // refcounted return; @@ -846,7 +857,7 @@ Comm::ConnectionPointer temp = fwdPconnPool->pop(serverDestinations[0], host, checkRetriable()); // if we found an open persistent connection to use. use it. - if (temp != NULL && Comm::IsConnOpen(temp)) { + if (Comm::IsConnOpen(temp)) { serverConn = temp; debugs(17, 3, HERE << "reusing pconn " << serverConnection()); n_tries++; @@ -987,7 +998,7 @@ default: debugs(17, 1, "fwdDispatch: Cannot retrieve '" << entry->url() << "'" ); - ErrorState *anErr = errorCon(ERR_UNSUP_REQ, HTTP_BAD_REQUEST, request); + ErrorState *anErr = new ErrorState(ERR_UNSUP_REQ, HTTP_BAD_REQUEST, request); fail(anErr); /* * Force a persistent connection to be closed because @@ -1070,8 +1081,8 @@ ErrorState * FwdState::makeConnectingError(const err_type type) const { - return errorCon(type, request->flags.need_validation ? - HTTP_GATEWAY_TIMEOUT : HTTP_SERVICE_UNAVAILABLE, request); + return new ErrorState(type, request->flags.need_validation ? + HTTP_GATEWAY_TIMEOUT : HTTP_SERVICE_UNAVAILABLE, request); } static void diff -u -r -N squid-3.2.0.13/src/fs/coss/CossSwapDir.h squid-3.2.0.14/src/fs/coss/CossSwapDir.h --- squid-3.2.0.13/src/fs/coss/CossSwapDir.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/fs/coss/CossSwapDir.h 2011-12-13 00:08:18.000000000 +1300 @@ -35,6 +35,7 @@ virtual void dump(StoreEntry &)const; ~CossSwapDir(); virtual StoreSearch *search(String const url, HttpRequest *); + virtual bool unlinkdUseful() const; virtual void unlink (StoreEntry &); virtual void statfs (StoreEntry &)const; virtual bool canStore(const StoreEntry &e, int64_t diskSpaceNeeded, int &load) const; diff -u -r -N squid-3.2.0.13/src/fs/coss/store_dir_coss.cc squid-3.2.0.14/src/fs/coss/store_dir_coss.cc --- squid-3.2.0.13/src/fs/coss/store_dir_coss.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/fs/coss/store_dir_coss.cc 2011-12-13 00:08:18.000000000 +1300 @@ -981,8 +981,8 @@ #if 0 /* is this applicable? I Hope not .. */ storeAppendPrintf(sentry, "Filemap bits in use: %d of %d (%d%%)\n", - SD->map->n_files_in_map, SD->map->max_n_files, - Math::intPercent(SD->map->n_files_in_map, SD->map->max_n_files)); + SD->map->numFilesInMap(), SD->map->capacity(), + Math::intPercent(SD->map->numFilesInMap(), SD->map->capacity())); #endif // storeAppendPrintf(&sentry, "Pending operations: %d out of %d\n", io->aq.aq_numpending, MAX_ASYNCOP); diff -u -r -N squid-3.2.0.13/src/fs/coss/store_io_coss.cc squid-3.2.0.14/src/fs/coss/store_io_coss.cc --- squid-3.2.0.13/src/fs/coss/store_io_coss.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/fs/coss/store_io_coss.cc 2011-12-13 00:08:18.000000000 +1300 @@ -129,6 +129,13 @@ } } +bool +CossSwapDir::unlinkdUseful() const +{ + // no entry-specific files to unlink + return false; +} + void CossSwapDir::unlink(StoreEntry & e) { diff -u -r -N squid-3.2.0.13/src/fs/rock/RockSwapDir.cc squid-3.2.0.14/src/fs/rock/RockSwapDir.cc --- squid-3.2.0.13/src/fs/rock/RockSwapDir.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/fs/rock/RockSwapDir.cc 2011-12-13 00:08:18.000000000 +1300 @@ -5,7 +5,6 @@ */ #include "config.h" -#include "base/RunnersRegistry.h" #include "ConfigOption.h" #include "DiskIO/DiskIOModule.h" #include "DiskIO/DiskIOStrategy.h" @@ -336,10 +335,13 @@ const time_msec_t newTime = static_cast(parsedValue); - if (reconfiguring && *storedTime != newTime) - debugs(3, DBG_IMPORTANT, "cache_dir " << path << ' ' << option << " is now " << newTime); - - *storedTime = newTime; + if (!reconfiguring) + *storedTime = newTime; + else if (*storedTime != newTime) { + debugs(3, DBG_IMPORTANT, "WARNING: cache_dir " << path << ' ' << option + << " cannot be changed dynamically, value left unchanged: " << + *storedTime); + } return true; } @@ -380,10 +382,13 @@ self_destruct(); } - if (isaReconfig && *storedRate != newRate) - debugs(3, DBG_IMPORTANT, "cache_dir " << path << ' ' << option << " is now " << newRate); - - *storedRate = newRate; + if (!isaReconfig) + *storedRate = newRate; + else if (*storedRate != newRate) { + debugs(3, DBG_IMPORTANT, "WARNING: cache_dir " << path << ' ' << option + << " cannot be changed dynamically, value left unchanged: " << + *storedRate); + } return true; } @@ -744,6 +749,13 @@ return false; } +bool +Rock::SwapDir::unlinkdUseful() const +{ + // no entry-specific files to unlink + return false; +} + void Rock::SwapDir::unlink(StoreEntry &e) { @@ -811,24 +823,12 @@ } -/// initializes shared memory segments used by Rock::SwapDir -class RockSwapDirRr: public Ipc::Mem::RegisteredRunner +namespace Rock { -public: - /* RegisteredRunner API */ - virtual ~RockSwapDirRr(); - -protected: - virtual void create(const RunnerRegistry &); - -private: - Vector owners; -}; - -RunnerRegistrationEntry(rrAfterConfig, RockSwapDirRr); - +RunnerRegistrationEntry(rrAfterConfig, SwapDirRr); +} -void RockSwapDirRr::create(const RunnerRegistry &) +void Rock::SwapDirRr::create(const RunnerRegistry &) { Must(owners.empty()); for (int i = 0; i < Config.cacheSwap.n_configured; ++i) { @@ -840,7 +840,7 @@ } } -RockSwapDirRr::~RockSwapDirRr() +Rock::SwapDirRr::~SwapDirRr() { for (size_t i = 0; i < owners.size(); ++i) delete owners[i]; diff -u -r -N squid-3.2.0.13/src/fs/rock/RockSwapDir.h squid-3.2.0.14/src/fs/rock/RockSwapDir.h --- squid-3.2.0.13/src/fs/rock/RockSwapDir.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/fs/rock/RockSwapDir.h 2011-12-13 00:08:18.000000000 +1300 @@ -33,6 +33,8 @@ virtual uint64_t currentCount() const; virtual bool doReportStat() const; virtual void swappedOut(const StoreEntry &e); + virtual void create(); + virtual void parse(int index, char *path); int64_t entryLimitHigh() const { return SwapFilenMax; } ///< Core limit int64_t entryLimitAllowed() const; @@ -42,7 +44,6 @@ protected: /* protected ::SwapDir API */ virtual bool needsDiskStrand() const; - virtual void create(); virtual void init(); virtual ConfigOption *getOptionTree() const; virtual bool allowOptionReconfigure(const char *const option) const; @@ -53,6 +54,7 @@ virtual void diskFull(); virtual void reference(StoreEntry &e); virtual bool dereference(StoreEntry &e); + virtual bool unlinkdUseful() const; virtual void unlink(StoreEntry &e); virtual void statfs(StoreEntry &e) const; @@ -62,7 +64,6 @@ virtual void readCompleted(const char *buf, int len, int errflag, RefCount< ::ReadRequest>); virtual void writeCompleted(int errflag, size_t len, RefCount< ::WriteRequest>); - virtual void parse(int index, char *path); void parseSize(const bool reconfiguring); ///< parses anonymous cache_dir size option void validateOptions(); ///< warns of configuration problems; may quit bool parseTimeOption(char const *option, const char *value, int reconfiguring); @@ -96,6 +97,22 @@ static const int64_t HeaderSize; ///< on-disk db header size }; +/// initializes shared memory segments used by Rock::SwapDir +class SwapDirRr: public Ipc::Mem::RegisteredRunner +{ +public: + /* ::RegisteredRunner API */ + virtual ~SwapDirRr(); + +protected: + /* Ipc::Mem::RegisteredRunner API */ + virtual void create(const RunnerRegistry &); + +private: + Vector owners; +}; + + } // namespace Rock #endif /* SQUID_FS_ROCK_SWAP_DIR_H */ diff -u -r -N squid-3.2.0.13/src/fs/ufs/store_dir_ufs.cc squid-3.2.0.14/src/fs/ufs/store_dir_ufs.cc --- squid-3.2.0.13/src/fs/ufs/store_dir_ufs.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/fs/ufs/store_dir_ufs.cc 2011-12-13 00:08:18.000000000 +1300 @@ -41,6 +41,7 @@ #include "ConfigOption.h" #include "DiskIO/DiskIOStrategy.h" #include "DiskIO/DiskIOModule.h" +#include "FileMap.h" #include "Parsing.h" #include "SquidMath.h" #include "SquidTime.h" @@ -246,7 +247,7 @@ createSwapSubDirs(); } -UFSSwapDir::UFSSwapDir(char const *aType, const char *anIOType) : SwapDir(aType), IO(NULL), map(file_map_create()), suggest(0), swaplog_fd (-1), currentIOOptions(new ConfigOptionVector()), ioType(xstrdup(anIOType)), cur_size(0), n_disk_objects(0) +UFSSwapDir::UFSSwapDir(char const *aType, const char *anIOType) : SwapDir(aType), IO(NULL), map(new FileMap()), suggest(0), swaplog_fd (-1), currentIOOptions(new ConfigOptionVector()), ioType(xstrdup(anIOType)), cur_size(0), n_disk_objects(0) { /* modulename is only set to disk modules that are built, by configure, * so the Find call should never return NULL here. @@ -261,7 +262,7 @@ swaplog_fd = -1; } - filemapFreeMemory(map); + delete map; if (IO) delete IO; @@ -321,8 +322,8 @@ storeAppendPrintf(&sentry, "Percent Used: %0.2f%%\n", Math::doublePercent(currentSize(), maxSize())); storeAppendPrintf(&sentry, "Filemap bits in use: %d of %d (%d%%)\n", - map->n_files_in_map, map->max_n_files, - Math::intPercent(map->n_files_in_map, map->max_n_files)); + map->numFilesInMap(), map->capacity(), + Math::intPercent(map->numFilesInMap(), map->capacity())); x = storeDirGetUFSStats(path, &totl_kb, &free_kb, &totl_in, &free_in); if (0 == x) { @@ -450,36 +451,36 @@ int UFSSwapDir::mapBitTest(sfileno filn) { - return file_map_bit_test(map, filn); + return map->testBit(filn); } void UFSSwapDir::mapBitSet(sfileno filn) { - file_map_bit_set(map, filn); + map->setBit(filn); } void UFSSwapDir::mapBitReset(sfileno filn) { /* - * We have to test the bit before calling file_map_bit_reset. - * file_map_bit_reset doesn't do bounds checking. It assumes + * We have to test the bit before calling clearBit as + * it doesn't do bounds checking and blindly assumes * filn is a valid file number, but it might not be because * the map is dynamic in size. Also clearing an already clear * bit puts the map counter of-of-whack. */ - if (file_map_bit_test(map, filn)) - file_map_bit_reset(map, filn); + if (map->testBit(filn)) + map->clearBit(filn); } int UFSSwapDir::mapBitAllocate() { int fn; - fn = file_map_allocate(map, suggest); - file_map_bit_set(map, fn); + fn = map->allocate(suggest); + map->setBit(fn); suggest = fn + 1; return fn; } @@ -742,14 +743,15 @@ file_close(swaplog_fd); if (xrename(new_path, swaplog_path) < 0) { - fatal("commonUfsDirCloseTmpSwapLog: rename failed"); + debugs(50, DBG_IMPORTANT, "ERROR: " << swaplog_path << ": " << xstrerror()); + fatalf("Failed to rename log file %s to %s.new", swaplog_path, swaplog_path); } fd = file_open(swaplog_path, O_WRONLY | O_CREAT | O_BINARY); if (fd < 0) { - debugs(50, 1, "" << swaplog_path << ": " << xstrerror()); - fatal("commonUfsDirCloseTmpSwapLog: Failed to open swap log."); + debugs(50, DBG_IMPORTANT, "ERROR: " << swaplog_path << ": " << xstrerror()); + fatalf("Failed to open swap log %s", swaplog_path); } safe_free(swaplog_path); @@ -777,7 +779,6 @@ struct stat clean_sb; FILE *fp; int fd; - StoreSwapLogHeader *head; if (::stat(swaplog_path, &log_sb) < 0) { debugs(47, 1, "Cache Dir #" << index << ": No log file"); @@ -803,10 +804,11 @@ swaplog_fd = fd; - head = new StoreSwapLogHeader; - - file_write(swaplog_fd, -1, head, head->record_size, - NULL, NULL, FreeHeader); + { + StoreSwapLogHeader *header = new StoreSwapLogHeader; + file_write(swaplog_fd, -1, header, sizeof(*header), + NULL, NULL, FreeHeader); + } /* open a read-only stream of the old log */ fp = fopen(swaplog_path, "rb"); @@ -1262,7 +1264,7 @@ * be considered invalid. */ if (flag) - if (filn > map->max_n_files) + if (filn > map->capacity()) return 0; return 1; @@ -1287,6 +1289,13 @@ IO->unlinkFile(fullPath(f,NULL)); } +bool +UFSSwapDir::unlinkdUseful() const +{ + // unlinkd may be useful only in workers + return IamWorkerProcess() && IO->io->unlinkdUseful(); +} + void UFSSwapDir::unlink(StoreEntry & e) { diff -u -r -N squid-3.2.0.13/src/fs/ufs/ufscommon.h squid-3.2.0.14/src/fs/ufs/ufscommon.h --- squid-3.2.0.13/src/fs/ufs/ufscommon.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/fs/ufs/ufscommon.h 2011-12-13 00:08:18.000000000 +1300 @@ -40,6 +40,7 @@ class ConfigOptionVector; class DiskIOModule; class StoreSearch; +class FileMap; #include "SwapDir.h" @@ -59,6 +60,7 @@ ~UFSSwapDir(); virtual StoreSearch *search(String const url, HttpRequest *); virtual bool doubleCheck(StoreEntry &); + virtual bool unlinkdUseful() const; virtual void unlink(StoreEntry &); virtual void statfs(StoreEntry &)const; virtual void maintain(); @@ -115,7 +117,7 @@ void replacementRemove(StoreEntry *e); protected: - fileMap *map; + FileMap *map; int suggest; int l1; int l2; diff -u -r -N squid-3.2.0.13/src/ftp.cc squid-3.2.0.14/src/ftp.cc --- squid-3.2.0.13/src/ftp.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ftp.cc 2011-12-13 00:08:18.000000000 +1300 @@ -234,7 +234,7 @@ public: // these should all be private - void start(); + virtual void start(); void loginParser(const char *, int escaped); int restartable(); void appendSuccessHeader(); @@ -457,7 +457,7 @@ { debugs(9, 4, HERE); ctrl.clear(); - deleteThis("FtpStateData::ctrlClosed"); + mustStop("FtpStateData::ctrlClosed"); } /// handler called by Comm when FTP data channel is closed unexpectedly @@ -1517,8 +1517,7 @@ void ftpStart(FwdState * fwd) { - FtpStateData *ftpState = new FtpStateData(fwd, fwd->serverConnection()); - ftpState->start(); + AsyncJob::Start(new FtpStateData(fwd, fwd->serverConnection())); } void @@ -1898,16 +1897,16 @@ if ((state == SENT_USER || state == SENT_PASS) && ctrl.replycode >= 400) { if (ctrl.replycode == 421 || ctrl.replycode == 426) { // 421/426 - Service Overload - retry permitted. - err = errorCon(ERR_FTP_UNAVAILABLE, HTTP_SERVICE_UNAVAILABLE, fwd->request); + err = new ErrorState(ERR_FTP_UNAVAILABLE, HTTP_SERVICE_UNAVAILABLE, fwd->request); } else if (ctrl.replycode >= 430 && ctrl.replycode <= 439) { // 43x - Invalid or Credential Error - retry challenge required. - err = errorCon(ERR_FTP_FORBIDDEN, HTTP_UNAUTHORIZED, fwd->request); + err = new ErrorState(ERR_FTP_FORBIDDEN, HTTP_UNAUTHORIZED, fwd->request); } else if (ctrl.replycode >= 530 && ctrl.replycode <= 539) { // 53x - Credentials Missing - retry challenge required if (password_url) // but they were in the URI! major fail. - err = errorCon(ERR_FTP_FORBIDDEN, HTTP_FORBIDDEN, fwd->request); + err = new ErrorState(ERR_FTP_FORBIDDEN, HTTP_FORBIDDEN, fwd->request); else - err = errorCon(ERR_FTP_FORBIDDEN, HTTP_UNAUTHORIZED, fwd->request); + err = new ErrorState(ERR_FTP_FORBIDDEN, HTTP_UNAUTHORIZED, fwd->request); } } @@ -1942,7 +1941,7 @@ HttpReply *newrep = err->BuildHttpReply(); - errorStateFree(err); + delete err; #if HAVE_AUTH_MODULE_BASIC /* add Authenticate header */ @@ -2468,6 +2467,7 @@ ftpState->data.port = port; + safe_free(ftpState->data.host); ftpState->data.host = xstrdup(fd_table[ftpState->ctrl.conn->fd].ipaddr); safe_free(ftpState->ctrl.last_command); @@ -2713,6 +2713,7 @@ ftpState->data.port = port; + safe_free(ftpState->data.host); if (Config.Ftp.sanitycheck) ftpState->data.host = xstrdup(fd_table[ftpState->ctrl.conn->fd].ipaddr); else @@ -2771,7 +2772,7 @@ ftpState->data.clear(); else ftpState->data.close(); - ftpState->data.host = NULL; + safe_free(ftpState->data.host); /* * Set up a listen socket on the same local address as the @@ -2981,7 +2982,9 @@ /** On COMM_OK start using the accepted data socket and discard the temporary listen socket. */ data.close(); data.opened(io.conn, dataCloser()); - io.conn->remote.NtoA(data.host,SQUIDHOSTNAMELEN); + static char ntoapeer[MAX_IPSTRLEN]; + io.conn->remote.NtoA(ntoapeer,sizeof(ntoapeer)); + data.host = xstrdup(ntoapeer); debugs(9, 3, HERE << "Connected data socket on " << io.conn << ". FD table says: " << @@ -3264,13 +3267,12 @@ { assert(entry); entry->lock(); - ErrorState *ferr = errorCon(ERR_DIR_LISTING, HTTP_OK, request); - ferr->ftp.listing = &listing; - ferr->ftp.cwd_msg = xstrdup(cwd_message.size()? cwd_message.termedBuf() : ""); - ferr->ftp.server_msg = ctrl.message; + ErrorState ferr(ERR_DIR_LISTING, HTTP_OK, request); + ferr.ftp.listing = &listing; + ferr.ftp.cwd_msg = xstrdup(cwd_message.size()? cwd_message.termedBuf() : ""); + ferr.ftp.server_msg = ctrl.message; ctrl.message = NULL; - entry->replaceHttpReply( ferr->BuildHttpReply() ); - errorStateFree(ferr); + entry->replaceHttpReply( ferr.BuildHttpReply() ); EBIT_CLR(entry->flags, ENTRY_FWD_HDR_WAIT); entry->flush(); entry->unlock(); @@ -3472,12 +3474,10 @@ void FtpStateData::failedErrorMessage(err_type error, int xerrno) { - ErrorState *ftperr; + ErrorState *ftperr = NULL; const char *command, *reply; /* Translate FTP errors into HTTP errors */ - ftperr = NULL; - switch (error) { case ERR_NONE: @@ -3490,12 +3490,12 @@ if (ctrl.replycode > 500) if (password_url) - ftperr = errorCon(ERR_FTP_FORBIDDEN, HTTP_FORBIDDEN, fwd->request); + ftperr = new ErrorState(ERR_FTP_FORBIDDEN, HTTP_FORBIDDEN, fwd->request); else - ftperr = errorCon(ERR_FTP_FORBIDDEN, HTTP_UNAUTHORIZED, fwd->request); + ftperr = new ErrorState(ERR_FTP_FORBIDDEN, HTTP_UNAUTHORIZED, fwd->request); else if (ctrl.replycode == 421) - ftperr = errorCon(ERR_FTP_UNAVAILABLE, HTTP_SERVICE_UNAVAILABLE, fwd->request); + ftperr = new ErrorState(ERR_FTP_UNAVAILABLE, HTTP_SERVICE_UNAVAILABLE, fwd->request); break; @@ -3503,7 +3503,7 @@ case SENT_RETR: if (ctrl.replycode == 550) - ftperr = errorCon(ERR_FTP_NOT_FOUND, HTTP_NOT_FOUND, fwd->request); + ftperr = new ErrorState(ERR_FTP_NOT_FOUND, HTTP_NOT_FOUND, fwd->request); break; @@ -3514,16 +3514,16 @@ break; case ERR_READ_TIMEOUT: - ftperr = errorCon(error, HTTP_GATEWAY_TIMEOUT, fwd->request); + ftperr = new ErrorState(error, HTTP_GATEWAY_TIMEOUT, fwd->request); break; default: - ftperr = errorCon(error, HTTP_BAD_GATEWAY, fwd->request); + ftperr = new ErrorState(error, HTTP_BAD_GATEWAY, fwd->request); break; } if (ftperr == NULL) - ftperr = errorCon(ERR_FTP_FAILURE, HTTP_BAD_GATEWAY, fwd->request); + ftperr = new ErrorState(ERR_FTP_FAILURE, HTTP_BAD_GATEWAY, fwd->request); ftperr->xerrno = xerrno; @@ -3550,14 +3550,13 @@ ftperr->ftp.reply = xstrdup(reply); entry->replaceHttpReply( ftperr->BuildHttpReply() ); - errorStateFree(ftperr); + delete ftperr; } /// \ingroup ServerProtocolFTPInternal static void ftpSendReply(FtpStateData * ftpState) { - ErrorState *err; int code = ftpState->ctrl.replycode; http_status http_code; err_type err_code = ERR_NONE; @@ -3581,22 +3580,21 @@ if (ftpState->request) ftpState->request->detailError(err_code, code); - err = errorCon(err_code, http_code, ftpState->request); + ErrorState err(err_code, http_code, ftpState->request); if (ftpState->old_request) - err->ftp.request = xstrdup(ftpState->old_request); + err.ftp.request = xstrdup(ftpState->old_request); else - err->ftp.request = xstrdup(ftpState->ctrl.last_command); + err.ftp.request = xstrdup(ftpState->ctrl.last_command); if (ftpState->old_reply) - err->ftp.reply = xstrdup(ftpState->old_reply); + err.ftp.reply = xstrdup(ftpState->old_reply); else if (ftpState->ctrl.last_reply) - err->ftp.reply = xstrdup(ftpState->ctrl.last_reply); + err.ftp.reply = xstrdup(ftpState->ctrl.last_reply); else - err->ftp.reply = xstrdup(""); + err.ftp.reply = xstrdup(""); - ftpState->entry->replaceHttpReply( err->BuildHttpReply() ); - errorStateFree(err); + ftpState->entry->replaceHttpReply( err.BuildHttpReply() ); ftpSendQuit(ftpState); } @@ -3706,9 +3704,8 @@ HttpReply * FtpStateData::ftpAuthRequired(HttpRequest * request, const char *realm) { - ErrorState *err = errorCon(ERR_CACHE_ACCESS_DENIED, HTTP_UNAUTHORIZED, request); - HttpReply *newrep = err->BuildHttpReply(); - errorStateFree(err); + ErrorState err(ERR_CACHE_ACCESS_DENIED, HTTP_UNAUTHORIZED, request); + HttpReply *newrep = err.BuildHttpReply(); #if HAVE_AUTH_MODULE_BASIC /* add Authenticate header */ newrep->header.putAuth("Basic", realm); @@ -3877,7 +3874,7 @@ } fwd->handleUnregisteredServerEnd(); - deleteThis("FtpStateData::abortTransaction"); + mustStop("FtpStateData::abortTransaction"); } /// creates a data channel Comm close callback diff -u -r -N squid-3.2.0.13/src/gopher.cc squid-3.2.0.14/src/gopher.cc --- squid-3.2.0.13/src/gopher.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/gopher.cc 2011-12-13 00:08:18.000000000 +1300 @@ -141,7 +141,7 @@ char replybuf[BUFSIZ]; } GopherStateData; -static PF gopherStateFree; +static CLCB gopherStateFree; static void gopherMimeCreate(GopherStateData *); static void gopher_request_parse(const HttpRequest * req, char *type_id, @@ -161,9 +161,9 @@ /// \ingroup ServerProtocolGopherInternal static void -gopherStateFree(int, void *data) +gopherStateFree(const CommCloseCbParams ¶ms) { - GopherStateData *gopherState = (GopherStateData *)data; + GopherStateData *gopherState = (GopherStateData *)params.data; if (gopherState == NULL) return; @@ -721,7 +721,7 @@ GopherStateData *gopherState = static_cast(io.data); debugs(10, 4, HERE << io.conn << ": '" << gopherState->entry->url() << "'" ); - gopherState->fwd->fail(errorCon(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT, gopherState->fwd->request)); + gopherState->fwd->fail(new ErrorState(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT, gopherState->fwd->request)); if (Comm::IsConnOpen(io.conn)) io.conn->close(); @@ -800,14 +800,13 @@ CommIoCbPtrFun(gopherReadReply, gopherState)); comm_read(conn, buf, read_sz, call); } else { - ErrorState *err; - err = errorCon(ERR_READ_ERROR, HTTP_INTERNAL_SERVER_ERROR, gopherState->fwd->request); + ErrorState *err = new ErrorState(ERR_READ_ERROR, HTTP_INTERNAL_SERVER_ERROR, gopherState->fwd->request); err->xerrno = errno; gopherState->fwd->fail(err); gopherState->serverConn->close(); } } else if (len == 0 && entry->isEmpty()) { - gopherState->fwd->fail(errorCon(ERR_ZERO_SIZE_OBJECT, HTTP_SERVICE_UNAVAILABLE, gopherState->fwd->request)); + gopherState->fwd->fail(new ErrorState(ERR_ZERO_SIZE_OBJECT, HTTP_SERVICE_UNAVAILABLE, gopherState->fwd->request)); gopherState->serverConn->close(); } else if (len == 0) { /* Connection closed; retrieval done. */ @@ -851,7 +850,7 @@ if (errflag) { ErrorState *err; - err = errorCon(ERR_WRITE_ERROR, HTTP_SERVICE_UNAVAILABLE, gopherState->fwd->request); + err = new ErrorState(ERR_WRITE_ERROR, HTTP_SERVICE_UNAVAILABLE, gopherState->fwd->request); err->xerrno = errno; err->port = gopherState->fwd->request->port; err->url = xstrdup(entry->url()); diff -u -r -N squid-3.2.0.13/src/helper.cc squid-3.2.0.14/src/helper.cc --- squid-3.2.0.13/src/helper.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/helper.cc 2011-12-13 00:08:18.000000000 +1300 @@ -33,6 +33,7 @@ */ #include "squid.h" +#include "base/AsyncCbdataCalls.h" #include "comm.h" #include "comm/Connection.h" #include "comm/Write.h" @@ -53,8 +54,8 @@ static IOCB helperHandleRead; static IOCB helperStatefulHandleRead; -static PF helperServerFree; -static PF helperStatefulServerFree; +static void helperServerFree(helper_server *srv); +static void helperStatefulServerFree(helper_stateful_server *srv); static void Enqueue(helper * hlp, helper_request *); static helper_request *Dequeue(helper * hlp); static helper_stateful_request *StatefulDequeue(statefulhelper * hlp); @@ -233,7 +234,8 @@ if (wfd != rfd) commSetNonBlocking(wfd); - comm_add_close_handler(rfd, helperServerFree, srv); + AsyncCall::Pointer closeCall = asyncCall(5,4, "helperServerFree", cbdataDialer(helperServerFree, srv)); + comm_add_close_handler(rfd, closeCall); AsyncCall::Pointer call = commCbCall(5,4, "helperHandleRead", CommIoCbPtrFun(helperHandleRead, srv)); @@ -353,7 +355,8 @@ if (wfd != rfd) commSetNonBlocking(wfd); - comm_add_close_handler(rfd, helperStatefulServerFree, srv); + AsyncCall::Pointer closeCall = asyncCall(5,4, "helperStatefulServerFree", cbdataDialer(helperStatefulServerFree, srv)); + comm_add_close_handler(rfd, closeCall); AsyncCall::Pointer call = commCbCall(5,4, "helperStatefulHandleRead", CommIoCbPtrFun(helperStatefulHandleRead, srv)); @@ -669,9 +672,8 @@ /* ====================================================================== */ static void -helperServerFree(int fd, void *data) +helperServerFree(helper_server *srv) { - helper_server *srv = (helper_server *)data; helper *hlp = srv->parent; helper_request *r; int i, concurrency = hlp->childs.concurrency; @@ -704,7 +706,7 @@ if (!srv->flags.shutdown) { assert(hlp->childs.n_active > 0); hlp->childs.n_active--; - debugs(84, DBG_CRITICAL, "WARNING: " << hlp->id_name << " #" << srv->index + 1 << " (FD " << fd << ") exited"); + debugs(84, DBG_CRITICAL, "WARNING: " << hlp->id_name << " #" << srv->index + 1 << " exited"); if (hlp->childs.needNew() > 0) { debugs(80, 1, "Too few " << hlp->id_name << " processes are running (need " << hlp->childs.needNew() << "/" << hlp->childs.n_max << ")"); @@ -736,9 +738,8 @@ } static void -helperStatefulServerFree(int fd, void *data) +helperStatefulServerFree(helper_stateful_server *srv) { - helper_stateful_server *srv = (helper_stateful_server *)data; statefulhelper *hlp = srv->parent; helper_stateful_request *r; @@ -766,7 +767,7 @@ if (!srv->flags.shutdown) { assert( hlp->childs.n_active > 0); hlp->childs.n_active--; - debugs(84, 0, "WARNING: " << hlp->id_name << " #" << srv->index + 1 << " (FD " << fd << ") exited"); + debugs(84, 0, "WARNING: " << hlp->id_name << " #" << srv->index + 1 << " exited"); if (hlp->childs.needNew() > 0) { debugs(80, 1, "Too few " << hlp->id_name << " processes are running (need " << hlp->childs.needNew() << "/" << hlp->childs.n_max << ")"); diff -u -r -N squid-3.2.0.13/src/helper.h squid-3.2.0.14/src/helper.h --- squid-3.2.0.13/src/helper.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/helper.h 2011-12-13 00:08:18.000000000 +1300 @@ -34,6 +34,7 @@ #define SQUID_HELPER_H #include "squid.h" +#include "base/AsyncCall.h" #include "cbdata.h" #include "comm/forward.h" #include "ip/Address.h" @@ -144,6 +145,9 @@ int uses; unsigned int pending; } stats; + +private: + CBDATA_CLASS2(helper_server); }; class helper_stateful_request; @@ -163,6 +167,9 @@ int releases; } stats; void *data; /* State data used by the calling routines */ + +private: + CBDATA_CLASS2(helper_stateful_server); }; class helper_request diff -u -r -N squid-3.2.0.13/src/htcp.cc squid-3.2.0.14/src/htcp.cc --- squid-3.2.0.13/src/htcp.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/htcp.cc 2011-12-13 00:08:18.000000000 +1300 @@ -49,6 +49,7 @@ #include "SquidTime.h" #include "Store.h" #include "StoreClient.h" +#include "compat/xalloc.h" /// dials htcpIncomingConnectionOpened call class HtcpListeningStartedDialer: public CallDialer, diff -u -r -N squid-3.2.0.13/src/HttpBody.cc squid-3.2.0.14/src/HttpBody.cc --- squid-3.2.0.13/src/HttpBody.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/HttpBody.cc 2011-12-13 00:08:18.000000000 +1300 @@ -34,43 +34,41 @@ */ #include "squid.h" +#include "HttpBody.h" #include "MemBuf.h" -void -httpBodyInit(HttpBody * body) +HttpBody::HttpBody() : mb(new MemBuf) +{} + +HttpBody::~HttpBody() { - body->mb = new MemBuf; + delete mb; } void -httpBodyClean(HttpBody * body) +HttpBody::clear() { - assert(body); - - if (!body->mb->isNull()) - body->mb->clean(); - - delete body->mb; - - body->mb = NULL; + mb->clean(); } /* set body by absorbing mb */ void -httpBodySet(HttpBody * body, MemBuf * mb) +HttpBody::setMb(MemBuf * mb_) { - assert(body); - assert(body->mb->isNull()); - delete body->mb; - body->mb = mb; /* absorb */ + delete mb; + /* note: protection against assign-to-self is not needed + * as MemBuf doesn't have a copy-constructor. If such a constructor + * is ever added, add such protection here. + */ + mb = mb_; /* absorb */ } void -httpBodyPackInto(const HttpBody * body, Packer * p) +HttpBody::packInto(Packer * p) const { - assert(body && p); + assert(p); - if (body->mb->contentSize()) - packerAppend(p, body->mb->content(), body->mb->contentSize()); + if (mb->contentSize()) + packerAppend(p, mb->content(), mb->contentSize()); } diff -u -r -N squid-3.2.0.13/src/HttpBody.h squid-3.2.0.14/src/HttpBody.h --- squid-3.2.0.13/src/HttpBody.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/HttpBody.h 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,78 @@ +/* + * 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. + * + * Author: kinkie + * + */ + +#ifndef HTTPBODY_H_ +#define HTTPBODY_H_ + +#include "MemBuf.h" +class Packer; + +/** Representation of a short predetermined message + * + * This class is useful to represent short HTTP messages, whose + * contents are known in advance, e.g. error messages + */ +class HttpBody +{ +public: + HttpBody(); + ~HttpBody(); + /** absorb the MemBuf, discarding anything currently stored + * + * After this call the lifetime of the passed MemBuf is managed + * by the HttpBody. + */ + void setMb(MemBuf *); + /** output the HttpBody contents into the supplied packer + * + * \note content is not cleared by the output operation + */ + void packInto(Packer *) const; + + /// clear the HttpBody content + void clear(); + + /// \return true if there is any content in the HttpBody + bool hasContent() const { return (mb->contentSize()>0); } + + /// \return size of the HttpBody's message content + mb_size_t contentSize() const { return mb->contentSize(); } + + /// \return pointer to the storage of the HttpBody + char *content() const { return mb->content(); } +private: + HttpBody& operator=(const HttpBody&); //not implemented + HttpBody(const HttpBody&); // not implemented + MemBuf *mb; +}; + + +#endif /* HTTPBODY_H_ */ diff -u -r -N squid-3.2.0.13/src/http.cc squid-3.2.0.14/src/http.cc --- squid-3.2.0.13/src/http.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/http.cc 2011-12-13 00:08:18.000000000 +1300 @@ -154,20 +154,11 @@ return serverConnection; } -/* -static void -httpStateFree(int fd, void *data) -{ - HttpStateData *httpState = static_cast(data); - debugs(11, 5, "httpStateFree: FD " << fd << ", httpState=" << data); - delete httpState; -}*/ - void HttpStateData::httpStateConnClosed(const CommCloseCbParams ¶ms) { debugs(11, 5, "httpStateFree: FD " << params.fd << ", httpState=" << params.data); - deleteThis("HttpStateData::httpStateConnClosed"); + mustStop("HttpStateData::httpStateConnClosed"); } int @@ -189,7 +180,7 @@ debugs(11, 4, HERE << serverConnection << ": '" << entry->url() << "'" ); if (entry->store_status == STORE_PENDING) { - fwd->fail(errorCon(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT, fwd->request)); + fwd->fail(new ErrorState(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT, fwd->request)); } serverConnection->close(); @@ -294,12 +285,12 @@ HttpStateData::processSurrogateControl(HttpReply *reply) { if (request->flags.accelerated && reply->surrogate_control) { - HttpHdrScTarget *sctusable = httpHdrScGetMergedTarget(reply->surrogate_control, Config.Accel.surrogate_id); + HttpHdrScTarget *sctusable = reply->surrogate_control->getMergedTarget(Config.Accel.surrogate_id); if (sctusable) { - if (EBIT_TEST(sctusable->mask, SC_NO_STORE) || + if (sctusable->noStore() || (Config.onoff.surrogate_is_remote - && EBIT_TEST(sctusable->mask, SC_NO_STORE_REMOTE))) { + && sctusable->noStoreRemote())) { surrogateNoStore = true; entry->makePrivate(); } @@ -308,11 +299,11 @@ * accelerated request or not... * Still, this is an abstraction breach. - RC */ - if (sctusable->max_age != -1) { - if (sctusable->max_age < sctusable->max_stale) - reply->expires = reply->date + sctusable->max_age; + if (sctusable->hasMaxAge()) { + if (sctusable->maxAge() < sctusable->maxStale()) + reply->expires = reply->date + sctusable->maxAge(); else - reply->expires = reply->date + sctusable->max_stale; + reply->expires = reply->date + sctusable->maxStale(); /* And update the timestamps */ entry->timestampsSet(); @@ -321,7 +312,7 @@ /* We ignore cache-control directives as per the Surrogate specification */ ignoreCacheControl = true; - httpHdrScTargetDestroy(sctusable); + delete sctusable; } } } @@ -382,7 +373,7 @@ * RFC 2068, sec 14.9.4 */ - if (!request->cache_control->Public()) { + if (!request->cache_control || !request->cache_control->Public()) { if (!REFRESH_OVERRIDE(ignore_auth)) return 0; } @@ -1085,8 +1076,7 @@ if (ignoreErrno(io.xerrno)) { flags.do_next_read = 1; } else { - ErrorState *err; - err = errorCon(ERR_READ_ERROR, HTTP_BAD_GATEWAY, fwd->request); + ErrorState *err = new ErrorState(ERR_READ_ERROR, HTTP_BAD_GATEWAY, fwd->request); err->xerrno = io.xerrno; fwd->fail(err); flags.do_next_read = 0; @@ -1255,7 +1245,7 @@ assert(error != ERR_NONE); entry->reset(); - fwd->fail(errorCon(error, HTTP_BAD_GATEWAY, fwd->request)); + fwd->fail(new ErrorState(error, HTTP_BAD_GATEWAY, fwd->request)); flags.do_next_read = 0; serverConnection->close(); return false; // quit on error @@ -1483,8 +1473,7 @@ return; if (io.flag) { - ErrorState *err; - err = errorCon(ERR_WRITE_ERROR, HTTP_BAD_GATEWAY, fwd->request); + ErrorState *err = new ErrorState(ERR_WRITE_ERROR, HTTP_BAD_GATEWAY, fwd->request); err->xerrno = io.xerrno; fwd->fail(err); serverConnection->close(); @@ -2181,11 +2170,15 @@ httpStart(FwdState *fwd) { debugs(11, 3, "httpStart: \"" << RequestMethodStr(fwd->request->method) << " " << fwd->entry->url() << "\"" ); - HttpStateData *httpState = new HttpStateData(fwd); + AsyncJob::Start(new HttpStateData(fwd)); +} - if (!httpState->sendRequest()) { +void +HttpStateData::start() +{ + if (!sendRequest()) { debugs(11, 3, "httpStart: aborted"); - delete httpState; + mustStop("HttpStateData::start failed"); return; } @@ -2303,12 +2296,11 @@ ServerStateData::handleRequestBodyProducerAborted(); if (entry->isEmpty()) { debugs(11, 3, "request body aborted: " << serverConnection); - ErrorState *err; // We usually get here when ICAP REQMOD aborts during body processing. // We might also get here if client-side aborts, but then our response // should not matter because either client-side will provide its own or // there will be no response at all (e.g., if the the client has left). - err = errorCon(ERR_ICAP_FAILURE, HTTP_INTERNAL_SERVER_ERROR, fwd->request); + ErrorState *err = new ErrorState(ERR_ICAP_FAILURE, HTTP_INTERNAL_SERVER_ERROR, fwd->request); err->xerrno = ERR_DETAIL_SRV_REQMOD_REQ_BODY; fwd->fail(err); } @@ -2341,5 +2333,5 @@ } fwd->handleUnregisteredServerEnd(); - deleteThis("HttpStateData::abortTransaction"); + mustStop("HttpStateData::abortTransaction"); } diff -u -r -N squid-3.2.0.13/src/http.h squid-3.2.0.14/src/http.h --- squid-3.2.0.13/src/http.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/http.h 2011-12-13 00:08:18.000000000 +1300 @@ -102,6 +102,7 @@ bool continueAfterParsingHeader(); void truncateVirginBody(); + virtual void start(); virtual void haveParsedReplyHeaders(); virtual bool getMoreRequestBody(MemBuf &buf); virtual void closeServer(); // end communication with the server diff -u -r -N squid-3.2.0.13/src/HttpHdrCc.h squid-3.2.0.14/src/HttpHdrCc.h --- squid-3.2.0.13/src/HttpHdrCc.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/HttpHdrCc.h 2011-12-13 00:08:18.000000000 +1300 @@ -32,7 +32,6 @@ #ifndef SQUID_HTTPHDRCC_H #define SQUID_HTTPHDRCC_H -#include "config.h" #include "MemPool.h" #include "SquidString.h" diff -u -r -N squid-3.2.0.13/src/HttpHdrSc.cc squid-3.2.0.14/src/HttpHdrSc.cc --- squid-3.2.0.13/src/HttpHdrSc.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/HttpHdrSc.cc 2011-12-13 00:08:18.000000000 +1300 @@ -6,6 +6,7 @@ * AUTHOR: Alex Rousskov * Robert Collins (Surrogate-Control is derived from * Cache-Control). + * Francesco Chemolli (c++ refactoring) * * SQUID Web Proxy Cache http://www.squid-cache.org/ * ---------------------------------------------------------- @@ -40,10 +41,22 @@ #include "HttpHeader.h" #include "HttpHdrSc.h" +#if HAVE_MAP +#include +#endif + +/* a row in the table used for parsing surrogate-control header and statistics */ +typedef struct { + const char *name; + http_hdr_sc_type id; + HttpHeaderFieldStat stat; +} HttpHeaderScFields; + /* this table is used for parsing surrogate control header */ +/* order must match that of enum http_hdr_sc_type. The constraint is verified at initialization time */ +//todo: implement constraint static const HttpHeaderFieldAttrs ScAttrs[SC_ENUM_END] = { {"no-store", (http_hdr_type)SC_NO_STORE}, - {"no-store-remote", (http_hdr_type)SC_NO_STORE_REMOTE}, {"max-age", (http_hdr_type)SC_MAX_AGE}, {"content", (http_hdr_type)SC_CONTENT}, @@ -65,9 +78,6 @@ } -/* local prototypes */ -static int httpHdrScParseInit(HttpHdrSc * sc, const String * str); - /* module initialization */ void @@ -85,20 +95,14 @@ /* implementation */ -HttpHdrSc * -httpHdrScCreate(void) -{ - return new HttpHdrSc(); -} - /* creates an sc object from a 0-terminating string */ HttpHdrSc * -httpHdrScParseCreate(const String * str) +httpHdrScParseCreate(const String & str) { - HttpHdrSc *sc = httpHdrScCreate(); + HttpHdrSc *sc = new HttpHdrSc(); - if (!httpHdrScParseInit(sc, str)) { - httpHdrScDestroy(sc); + if (!sc->parse(&str)) { + delete sc; sc = NULL; } @@ -106,9 +110,10 @@ } /* parses a 0-terminating string and inits sc */ -static int -httpHdrScParseInit(HttpHdrSc * sc, const String * str) +bool +HttpHdrSc::parse(const String * str) { + HttpHdrSc * sc=this; const char *item; const char *p; /* '=' parameter */ const char *pos = NULL; @@ -118,7 +123,7 @@ int ilen, vlen; int initiallen; HttpHdrScTarget *sct; - assert(sc && str); + assert(str); /* iterate through comma separated list */ @@ -138,6 +143,7 @@ ilen = p++ - item; /* find type */ + /* TODO: use a type-safe map-based lookup */ type = httpHeaderIdByName(item, ilen, ScFieldsInfo, SC_ENUM_END); @@ -147,7 +153,7 @@ } /* Is this a targeted directive? */ - /* TODO sometime: implement a strnrchr that looks at a substring */ + /* TODO: remove the temporary useage and use memrchr and the information we have instead */ temp = xstrndup (item, initiallen + 1); if (!((target = strrchr (temp, ';')) && !strchr (target, '"') && *(target + 1) != '\0')) @@ -155,16 +161,16 @@ else ++target; - sct = httpHdrScFindTarget (sc, target); + sct = sc->findTarget(target); if (!sct) { - sct = httpHdrScTargetCreate (target); - dlinkAdd(sct, &sct->node, &sc->targets); + sct = new HttpHdrScTarget(target); + addTarget(sct); } safe_free (temp); - if (EBIT_TEST(sct->mask, type)) { + if (sct->isSet(static_cast(type))) { if (type != SC_OTHER) debugs(90, 2, "hdr sc: ignoring duplicate control-directive: near '" << item << "' in '" << str << "'"); @@ -173,37 +179,50 @@ continue; } - /* update mask */ - EBIT_SET(sct->mask, type); - - /* post-processing special cases */ + /* process directives */ switch (type) { + case SC_NO_STORE: + sct->noStore(true); + break; - case SC_MAX_AGE: + case SC_NO_STORE_REMOTE: + sct->noStoreRemote(true); + break; - if (!p || !httpHeaderParseInt(p, &sct->max_age)) { + case SC_MAX_AGE: { + int ma; + if (p && httpHeaderParseInt(p, &ma)) { + sct->maxAge(ma); + } else { debugs(90, 2, "sc: invalid max-age specs near '" << item << "'"); - sct->max_age = -1; - EBIT_CLR(sct->mask, type); + sct->clearMaxAge(); } - if ((p = strchr (p, '+'))) - if (!httpHeaderParseInt(++p, &sct->max_stale)) { + if ((p = strchr (p, '+'))) { + int ms; + ++p; //skip the + char + if (httpHeaderParseInt(p, &ms)) { + sct->maxStale(ms); + } else { debugs(90, 2, "sc: invalid max-stale specs near '" << item << "'"); - sct->max_stale = 0; + sct->clearMaxStale(); /* leave the max-age alone */ } - + } break; + } case SC_CONTENT: - if (!p || !httpHeaderParseQuotedString(p, vlen, &sct->content)) { + if ( p && httpHeaderParseQuotedString(p, vlen, &sct->content_)) { + sct->setMask(SC_CONTENT,true); // ugly but saves a copy + } else { debugs(90, 2, "sc: invalid content= quoted string near '" << item << "'"); - sct->content.clean(); - EBIT_CLR(sct->mask, type); + sct->clearContent(); } + break; + case SC_OTHER: default: break; } @@ -212,53 +231,41 @@ return sc->targets.head != NULL; } -void -httpHdrScDestroy(HttpHdrSc * sc) +HttpHdrSc::~HttpHdrSc() { - assert(sc); - - if (sc->targets.head) { - dlink_node *sct = sc->targets.head; + if (targets.head) { + dlink_node *sct = targets.head; while (sct) { - HttpHdrScTarget *t = (HttpHdrScTarget *)sct->data; + HttpHdrScTarget *t = static_cast(sct->data); sct = sct->next; - dlinkDelete (&t->node, &sc->targets); - httpHdrScTargetDestroy (t); + dlinkDelete (&t->node, &targets); + delete t; } } - - delete sc; } -HttpHdrSc * -httpHdrScDup(const HttpHdrSc * sc) + +HttpHdrSc::HttpHdrSc(const HttpHdrSc &sc) { - HttpHdrSc *dup; - dlink_node *node; - assert(sc); - node = sc->targets.head; - dup = httpHdrScCreate(); + dlink_node *node = sc.targets.head; while (node) { - HttpHdrScTarget *dupsct; - dupsct = httpHdrScTargetDup ((HttpHdrScTarget *)node->data); - dlinkAddTail (dupsct, &dupsct->node, &dup->targets); + HttpHdrScTarget *dupsct = new HttpHdrScTarget(*static_cast(node->data)); + addTargetAtTail(dupsct); node = node->next; } - - return dup; } void -httpHdrScTargetPackInto(const HttpHdrScTarget * sc, Packer * p) +HttpHdrScTarget::packInto(Packer * p) const { http_hdr_sc_type flag; int pcount = 0; - assert(sc && p); + assert (p); for (flag = SC_NO_STORE; flag < SC_ENUM_END; ++flag) { - if (EBIT_TEST(sc->mask, flag) && flag != SC_OTHER) { + if (isSet(flag) && flag != SC_OTHER) { /* print option name */ packerPrintf(p, (pcount ? ", " SQUIDSTRINGPH : SQUIDSTRINGPH), @@ -267,73 +274,53 @@ /* handle options with values */ if (flag == SC_MAX_AGE) - packerPrintf(p, "=%d", (int) sc->max_age); + packerPrintf(p, "=%d", (int) max_age); if (flag == SC_CONTENT) - packerPrintf(p, "=\"" SQUIDSTRINGPH "\"", SQUIDSTRINGPRINT(sc->content)); + packerPrintf(p, "=\"" SQUIDSTRINGPH "\"", SQUIDSTRINGPRINT(content_)); pcount++; } } - if (sc->target.size()) - packerPrintf (p, ";" SQUIDSTRINGPH, SQUIDSTRINGPRINT(sc->target)); + if (hasTarget()) + packerPrintf (p, ";" SQUIDSTRINGPH, SQUIDSTRINGPRINT(target)); } void -httpHdrScPackInto(const HttpHdrSc * sc, Packer * p) +HttpHdrSc::packInto(Packer * p) const { dlink_node *node; - assert(sc && p); - node = sc->targets.head; + assert(p); + node = targets.head; while (node) { - httpHdrScTargetPackInto((HttpHdrScTarget *)node->data, p); + static_cast(node->data)->packInto(p); node = node->next; } } -void -httpHdrScJoinWith(HttpHdrSc * sc, const HttpHdrSc * new_sc) -{ - assert(sc && new_sc); -#if 0 - /* RC TODO: check that both have the same target */ - - if (sc->max_age < 0) - sc->max_age = new_sc->max_age; - - /* RC TODO: copy unique missing stringlist entries */ - cc->mask |= new_cc->mask; - -#endif -} - /* negative max_age will clean old max_Age setting */ void -httpHdrScSetMaxAge(HttpHdrSc * sc, char const *target, int max_age) +HttpHdrSc::setMaxAge(char const *target, int max_age) { - HttpHdrScTarget *sct; - assert(sc); - sct = httpHdrScFindTarget (sc, target); + HttpHdrScTarget *sct = findTarget(target); if (!sct) { - sct = httpHdrScTargetCreate (target); - dlinkAddTail (sct, &sct->node, &sc->targets); + sct = new HttpHdrScTarget(target); + dlinkAddTail (sct, &sct->node, &targets); } - httpHdrScTargetSetMaxAge(sct, max_age); + sct->maxAge(max_age); } void -httpHdrScUpdateStats(const HttpHdrSc * sc, StatHist * hist) +HttpHdrSc::updateStats(StatHist * hist) const { - dlink_node *sct; - assert(sc); - sct = sc->targets.head; + dlink_node *sct = targets.head; while (sct) { - httpHdrScTargetUpdateStats((HttpHdrScTarget *)sct->data, hist); + static_cast(sct->data)->updateStats(hist); sct = sct->next; } } @@ -365,11 +352,10 @@ } HttpHdrScTarget * -httpHdrScFindTarget (HttpHdrSc *sc, const char *target) +HttpHdrSc::findTarget(const char *target) { dlink_node *node; - assert (sc); - node = sc->targets.head; + node = targets.head; while (node) { HttpHdrScTarget *sct = (HttpHdrScTarget *)node->data; @@ -386,19 +372,19 @@ } HttpHdrScTarget * -httpHdrScGetMergedTarget (HttpHdrSc *sc, const char *ourtarget) +HttpHdrSc::getMergedTarget(const char *ourtarget) { - HttpHdrScTarget *sctus = httpHdrScFindTarget (sc, ourtarget); - HttpHdrScTarget *sctgeneric = httpHdrScFindTarget (sc, NULL); + HttpHdrScTarget *sctus = findTarget(ourtarget); + HttpHdrScTarget *sctgeneric = findTarget(NULL); if (sctgeneric || sctus) { - HttpHdrScTarget *sctusable = httpHdrScTargetCreate (NULL); + HttpHdrScTarget *sctusable = new HttpHdrScTarget(NULL); if (sctgeneric) - httpHdrScTargetMergeWith (sctusable, sctgeneric); + sctusable->mergeWith(sctgeneric); if (sctus) - httpHdrScTargetMergeWith (sctusable, sctus); + sctusable->mergeWith(sctus); return sctusable; } diff -u -r -N squid-3.2.0.13/src/HttpHdrSc.h squid-3.2.0.14/src/HttpHdrSc.h --- squid-3.2.0.13/src/HttpHdrSc.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/HttpHdrSc.h 2011-12-13 00:08:18.000000000 +1300 @@ -43,8 +43,27 @@ { public: + HttpHdrSc(const HttpHdrSc &); + HttpHdrSc() {} + ~HttpHdrSc(); + + bool parse(const String *str); + void packInto(Packer * p) const; + void updateStats(StatHist *) const; + HttpHdrScTarget * getMergedTarget (const char *ourtarget); //todo: make const? + void setMaxAge(char const *target, int max_age); + void addTarget(HttpHdrScTarget *t) { + dlinkAdd(t, &t->node, &targets); + } + void addTargetAtTail(HttpHdrScTarget *t) { + dlinkAddTail (t, &t->node, &targets); + } + MEMPROXY_CLASS(HttpHdrSc); dlink_list targets; +private: + HttpHdrScTarget * findTarget (const char *target); + }; MEMPROXY_CLASS_INLINE(HttpHdrSc); @@ -53,18 +72,7 @@ extern void httpHdrScStatDumper(StoreEntry * sentry, int idx, double val, double size, int count); extern void httpHdrScInitModule (void); extern void httpHdrScCleanModule (void); -extern HttpHdrSc *httpHdrScCreate(void); -extern HttpHdrSc *httpHdrScParseCreate(String const *); -extern void httpHdrScDestroy(HttpHdrSc * sc); -extern HttpHdrSc *httpHdrScDup(const HttpHdrSc * sc); -extern void httpHdrScPackInto(const HttpHdrSc * sc, Packer * p); -extern void httpHdrScJoinWith(HttpHdrSc *, const HttpHdrSc *); +extern HttpHdrSc *httpHdrScParseCreate(String const &); extern void httpHdrScSetMaxAge(HttpHdrSc *, char const *, int); -extern void httpHdrScUpdateStats(const HttpHdrSc *, StatHist *); -extern HttpHdrScTarget * httpHdrScFindTarget (HttpHdrSc *sc, const char *target); -extern HttpHdrScTarget * httpHdrScGetMergedTarget (HttpHdrSc *sc, const char *ourtarget); - -extern void httpHeaderPutSc(HttpHeader *hdr, const HttpHdrSc *sc); -extern HttpHdrSc *httpHeaderGetSc(const HttpHeader *hdr); #endif /* SQUID_HTTPHDRSURROGATECONTROL_H */ diff -u -r -N squid-3.2.0.13/src/HttpHdrScTarget.cc squid-3.2.0.14/src/HttpHdrScTarget.cc --- squid-3.2.0.13/src/HttpHdrScTarget.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/HttpHdrScTarget.cc 2011-12-13 00:08:18.000000000 +1300 @@ -38,114 +38,38 @@ #include "squid.h" #include "HttpHdrSc.h" -/* local prototypes */ - -/* module initialization */ - -/* implementation */ - -HttpHdrScTarget * -httpHdrScTargetCreate(char const *target) -{ - HttpHdrScTarget *sc = new HttpHdrScTarget(); - sc->max_age = -1; - /* max_stale is specified as 0 if not specified in the header */ - sc->target = target; - return sc; -} - -void -httpHdrScTargetDestroy(HttpHdrScTarget * sc) -{ - assert(sc); - sc->target.clean(); - sc->content.clean(); - delete sc; -} - -HttpHdrScTarget * -httpHdrScTargetDup(const HttpHdrScTarget * sc) -{ - HttpHdrScTarget *dup; - assert(sc); - dup = httpHdrScTargetCreate(sc->target.termedBuf()); - dup->mask = sc->mask; - dup->max_age = sc->max_age; - dup->content = sc->content; - return dup; -} - -/* union of two targets */ -void -httpHdrScTargetJoinWith(HttpHdrScTarget * sc, const HttpHdrScTarget * new_sc) -{ - assert(sc && new_sc); - /* TODO: check both targets are the same */ - - if (sc->max_age < 0) - sc->max_age = new_sc->max_age; - - if (sc->max_stale < new_sc->max_stale) - sc->max_stale = new_sc->max_stale; - - /* RC TODO: copy unique missing content stringlist entries */ - sc->mask |= new_sc->mask; -} - extern http_hdr_sc_type &operator++ (http_hdr_sc_type &aHeader); -extern int operator - (http_hdr_sc_type const &anSc, http_hdr_sc_type const &anSc2); /* copies non-extant fields from new_sc to this sc */ void -httpHdrScTargetMergeWith(HttpHdrScTarget * sc, const HttpHdrScTarget * new_sc) +HttpHdrScTarget::mergeWith(const HttpHdrScTarget * new_sc) { - http_hdr_sc_type c; - assert(sc && new_sc); + assert(new_sc); /* Don't touch the target - this is used to get the operations for a * single surrogate */ - for (c = SC_NO_STORE; c < SC_ENUM_END; ++c) - if (!EBIT_TEST(sc->mask, c) && EBIT_TEST(new_sc->mask,c)) { - EBIT_SET(sc->mask, c); + if (new_sc->hasNoStore()) + noStore(true); - switch (c) { + if (new_sc->hasNoStoreRemote()) + noStoreRemote(true); - case SC_MAX_AGE: - sc->max_age = new_sc->max_age; - sc->max_stale = new_sc->max_stale; - break; - - case SC_CONTENT: - assert (sc->content.size() == 0); - sc->content = new_sc->content; - break; - - default: - break; - } - } -} + if (new_sc->hasMaxAge() && !hasMaxAge()) { + maxAge(new_sc->maxAge()); + maxStale(new_sc->maxStale()); + } -/* negative max_age will clean old max_Age setting */ -void -httpHdrScTargetSetMaxAge(HttpHdrScTarget * sc, int max_age) -{ - assert(sc); - sc->max_age = max_age; + if (new_sc->hasContent() && !hasContent()) + Content(new_sc->content()); - if (max_age >= 0) - EBIT_SET(sc->mask, SC_MAX_AGE); - else - EBIT_CLR(sc->mask, SC_MAX_AGE); } void -httpHdrScTargetUpdateStats(const HttpHdrScTarget * sc, StatHist * hist) +HttpHdrScTarget::updateStats(StatHist * hist) const { http_hdr_sc_type c; - assert(sc); for (c = SC_NO_STORE; c < SC_ENUM_END; ++c) - if (EBIT_TEST(sc->mask, c)) + if (isSet(c)) statHistCount(hist, c); } diff -u -r -N squid-3.2.0.13/src/HttpHdrScTarget.h squid-3.2.0.14/src/HttpHdrScTarget.h --- squid-3.2.0.13/src/HttpHdrScTarget.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/HttpHdrScTarget.h 2011-12-13 00:08:18.000000000 +1300 @@ -35,42 +35,99 @@ class Packer; class StoreEntry; -/* for MEMPROXY_CLASS() macros */ #include "MemPool.h" -/* for dlink_node */ #include "dlink.h" -/* for String */ #include "SquidString.h" +#include "typedefs.h" -/** HTTP Surogate-Control: header field */ +/** Representation of HTTP Surogate-Control header field targeted directive + * + * \see HttpHdrSc + */ class HttpHdrScTarget { + // parsing is done in HttpHdrSc, need to grant them access. + friend class HttpHdrSc; public: + static const int MAX_AGE_UNSET=-1; //max-age is unset + static const int MAX_STALE_UNSET=0; //max-stale is unset + + HttpHdrScTarget(const char *target_): + mask(0), max_age(MAX_AGE_UNSET), max_stale(MAX_STALE_UNSET),target(target_) {} + HttpHdrScTarget(const String &target_): + mask(0), max_age(MAX_AGE_UNSET), max_stale(MAX_STALE_UNSET),target(target_) {} + HttpHdrScTarget(const HttpHdrScTarget &t): + mask(t.mask), max_age(t.max_age), max_stale(t.max_stale), + content_(t.content_), target(t.target) {} + + bool hasNoStore() const {return isSet(SC_NO_STORE); } + void noStore(bool v) { setMask(SC_NO_STORE,v); } + bool noStore() const { return isSet(SC_NO_STORE); } + void clearNoStore() { setMask(SC_NO_STORE, false); } + + bool hasNoStoreRemote() const {return isSet(SC_NO_STORE_REMOTE); } + void noStoreRemote(bool v) { setMask(SC_NO_STORE_REMOTE,v); } + bool noStoreRemote() const { return isSet(SC_NO_STORE_REMOTE); } + void clearNoStoreRemote() { setMask(SC_NO_STORE_REMOTE, false); } + + bool hasMaxAge() const { return isSet(SC_MAX_AGE); } + void maxAge(int v) { + if (v >= 0) { //setting + setMask(SC_MAX_AGE,true); + max_age=v; + } else { + setMask(SC_MAX_AGE,false); + max_age=MAX_AGE_UNSET; + } + } + int maxAge() const { return max_age; } + void clearMaxAge() { setMask(SC_MAX_AGE,false); max_age=MAX_AGE_UNSET; } + + //max_stale has no associated status-bit + bool hasMaxStale() const { return max_stale != MAX_STALE_UNSET; } + void maxStale(int v) { max_stale=v; } + int maxStale() const { return max_stale; } + void clearMaxStale() { max_stale=MAX_STALE_UNSET; } + + bool hasContent() const { return isSet(SC_CONTENT); } + void Content(const String &v) { + setMask(SC_CONTENT,true); + content_=v; + } + String content() const { return content_; } + void clearContent() { setMask(SC_CONTENT,false); content_.clean(); } + + bool hasTarget() const { return target.size() != 0; } + String Target() const { return target; } + + void mergeWith(const HttpHdrScTarget * new_sc); + void packInto (Packer *p) const; + void updateStats(StatHist *) const; + MEMPROXY_CLASS(HttpHdrScTarget); - dlink_node node; +private: + bool isSet(http_hdr_sc_type id) const { + assert (id >= SC_NO_STORE && id < SC_ENUM_END); + return EBIT_TEST(mask,id); + } + + void setMask(http_hdr_sc_type id, bool newval) { + if (newval) EBIT_SET(mask,id); + else EBIT_CLR(mask,id); + } + int mask; int max_age; int max_stale; - String content; + String content_; String target; + dlink_node node; }; MEMPROXY_CLASS_INLINE(HttpHdrScTarget); -/* Http Surrogate control header field 'targets' */ -extern HttpHdrScTarget * httpHdrScTargetCreate (const char *); -extern void httpHdrScTargetDestroy(HttpHdrScTarget *); -extern HttpHdrScTarget *httpHdrScTargetDup(const HttpHdrScTarget *); -extern void httpHdrScTargetPackInto(const HttpHdrScTarget *, Packer *); -extern void httpHdrScTargetSetMaxAge(HttpHdrScTarget *, int); -extern void httpHdrScTargetJoinWith(HttpHdrScTarget *, const HttpHdrScTarget *); -extern void httpHdrScTargetMergeWith(HttpHdrScTarget *, const HttpHdrScTarget *); extern void httpHdrScTargetStatDumper(StoreEntry * sentry, int idx, double val, double size, int count); -/* for StatHist */ -#include "typedefs.h" - -extern void httpHdrScTargetUpdateStats(const HttpHdrScTarget *, StatHist *); #endif /* SQUID_HTTPHDRSURROGATECONTROLTARGET_H */ diff -u -r -N squid-3.2.0.13/src/HttpHeader.cc squid-3.2.0.14/src/HttpHeader.cc --- squid-3.2.0.13/src/HttpHeader.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/HttpHeader.cc 2011-12-13 00:08:18.000000000 +1300 @@ -99,8 +99,8 @@ {"Cookie2", HDR_COOKIE2, ftStr}, {"Date", HDR_DATE, ftDate_1123}, {"ETag", HDR_ETAG, ftETag}, - {"Expires", HDR_EXPIRES, ftDate_1123}, {"Expect", HDR_EXPECT, ftStr}, + {"Expires", HDR_EXPIRES, ftDate_1123}, {"From", HDR_FROM, ftStr}, {"Host", HDR_HOST, ftStr}, {"If-Match", HDR_IF_MATCH, ftStr}, /* for now */ @@ -113,6 +113,7 @@ {"Location", HDR_LOCATION, ftStr}, {"Max-Forwards", HDR_MAX_FORWARDS, ftInt64}, {"Mime-Version", HDR_MIME_VERSION, ftStr}, /* for now */ + {"Negotiate", HDR_NEGOTIATE, ftStr}, {"Pragma", HDR_PRAGMA, ftStr}, {"Proxy-Authenticate", HDR_PROXY_AUTHENTICATE, ftStr}, {"Proxy-Authentication-Info", HDR_PROXY_AUTHENTICATION_INFO, ftStr}, @@ -145,7 +146,6 @@ {"X-Forwarded-For", HDR_X_FORWARDED_FOR, ftStr}, {"X-Request-URI", HDR_X_REQUEST_URI, ftStr}, {"X-Squid-Error", HDR_X_SQUID_ERROR, ftStr}, - {"Negotiate", HDR_NEGOTIATE, ftStr}, #if X_ACCELERATOR_VARY {"X-Accelerator-Vary", HDR_X_ACCELERATOR_VARY, ftStr}, #endif @@ -1209,7 +1209,7 @@ /* pack into mb */ mb.init(); packerToMemInit(&p, &mb); - httpHdrScPackInto(sc, &p); + sc->packInto(&p); /* put */ addEntry(new HttpHeaderEntry(HDR_SURROGATE_CONTROL, NULL, mb.buf)); /* cleanup */ @@ -1366,12 +1366,12 @@ (void) getList(HDR_SURROGATE_CONTROL, &s); - HttpHdrSc *sc = httpHdrScParseCreate(&s); + HttpHdrSc *sc = httpHdrScParseCreate(s); - HttpHeaderStats[owner].ccParsedCount++; + ++HttpHeaderStats[owner].ccParsedCount; if (sc) - httpHdrScUpdateStats(sc, &HttpHeaderStats[owner].scTypeDistr); + sc->updateStats(&HttpHeaderStats[owner].scTypeDistr); httpHeaderNoteParsedEntry(HDR_SURROGATE_CONTROL, s, !sc); diff -u -r -N squid-3.2.0.13/src/HttpHeader.h squid-3.2.0.14/src/HttpHeader.h --- squid-3.2.0.13/src/HttpHeader.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/HttpHeader.h 2011-12-13 00:08:18.000000000 +1300 @@ -49,89 +49,105 @@ /* constant attributes of http header fields */ -/** recognized or "known" header fields; @?@ add more! */ +/// recognized or "known" header fields; and the RFC which defines them (or not) typedef enum { HDR_BAD_HDR = -1, - HDR_ACCEPT = 0, - HDR_ACCEPT_CHARSET, - HDR_ACCEPT_ENCODING, - HDR_ACCEPT_LANGUAGE, - HDR_ACCEPT_RANGES, - HDR_AGE, - HDR_ALLOW, - HDR_AUTHORIZATION, - HDR_CACHE_CONTROL, - HDR_CONNECTION, - HDR_CONTENT_BASE, - HDR_CONTENT_DISPOSITION, - HDR_CONTENT_ENCODING, - HDR_CONTENT_LANGUAGE, - HDR_CONTENT_LENGTH, - HDR_CONTENT_LOCATION, - HDR_CONTENT_MD5, - HDR_CONTENT_RANGE, - HDR_CONTENT_TYPE, - HDR_COOKIE, - HDR_COOKIE2, - HDR_DATE, - HDR_ETAG, - HDR_EXPIRES, - HDR_EXPECT, - HDR_FROM, - HDR_HOST, - HDR_IF_MATCH, - HDR_IF_MODIFIED_SINCE, - HDR_IF_NONE_MATCH, - HDR_IF_RANGE, - HDR_KEEP_ALIVE, - HDR_LAST_MODIFIED, - HDR_LINK, - HDR_LOCATION, - HDR_MAX_FORWARDS, - HDR_MIME_VERSION, - HDR_PRAGMA, - HDR_PROXY_AUTHENTICATE, - HDR_PROXY_AUTHENTICATION_INFO, - HDR_PROXY_AUTHORIZATION, - HDR_PROXY_CONNECTION, - HDR_PROXY_SUPPORT, - HDR_PUBLIC, - HDR_RANGE, - HDR_REQUEST_RANGE, /**< some clients use this, sigh */ - HDR_REFERER, - HDR_RETRY_AFTER, - HDR_SERVER, - HDR_SET_COOKIE, - HDR_SET_COOKIE2, - HDR_TE, - HDR_TITLE, - HDR_TRAILER, - HDR_TRANSFER_ENCODING, - HDR_TRANSLATE, /* IIS custom header we may need to cut off */ - HDR_UNLESS_MODIFIED_SINCE, /* IIS custom header we may need to cut off */ - HDR_UPGRADE, - HDR_USER_AGENT, - HDR_VARY, - HDR_VIA, - HDR_WARNING, - HDR_WWW_AUTHENTICATE, - HDR_AUTHENTICATION_INFO, - HDR_X_CACHE, - HDR_X_CACHE_LOOKUP, /**< tmp hack, remove later */ - HDR_X_FORWARDED_FOR, - HDR_X_REQUEST_URI, /**< appended if ADD_X_REQUEST_URI is #defined */ - HDR_X_SQUID_ERROR, - HDR_NEGOTIATE, + HDR_ACCEPT = 0, /**< RFC 2608, 2616 */ + HDR_ACCEPT_CHARSET, /**< RFC 2608, 2616 */ + HDR_ACCEPT_ENCODING, /**< RFC 2608, 2616 */ + /*HDR_ACCEPT_FEATURES,*/ /* experimental RFC 2295 */ + HDR_ACCEPT_LANGUAGE, /**< RFC 2608, 2616 */ + HDR_ACCEPT_RANGES, /**< RFC 2608, 2616 */ + HDR_AGE, /**< RFC 2608, 2616 */ + HDR_ALLOW, /**< RFC 2608, 2616 */ + /*HDR_ALTERNATES,*/ /* deprecated RFC 2068, 2295 */ + HDR_AUTHORIZATION, /**< RFC 2608, 2616, 4559 */ + HDR_CACHE_CONTROL, /**< RFC 2608, 2616 */ + HDR_CONNECTION, /**< RFC 2608, 2616 */ + HDR_CONTENT_BASE, /**< RFC 2608 */ + HDR_CONTENT_DISPOSITION, /**< RFC 2183, 2616 */ + HDR_CONTENT_ENCODING, /**< RFC 2608, 2616 */ + HDR_CONTENT_LANGUAGE, /**< RFC 2608, 2616 */ + HDR_CONTENT_LENGTH, /**< RFC 2608, 2616 */ + HDR_CONTENT_LOCATION, /**< RFC 2608, 2616 */ + HDR_CONTENT_MD5, /**< RFC 2608, 2616 */ + HDR_CONTENT_RANGE, /**< RFC 2608, 2616 */ + HDR_CONTENT_TYPE, /**< RFC 2608, 2616 */ + /*HDR_CONTENT_VERSION,*/ /* deprecated RFC 2608 header. */ + HDR_COOKIE, /**< de-facto and RFC 2965 header we may need to erase */ + HDR_COOKIE2, /**< obsolete RFC 2965 header we may need to erase */ + HDR_DATE, /**< RFC 2608, 2616 */ + /*HDR_DAV,*/ /* RFC 2518 */ + /*HDR_DEPTH,*/ /* RFC 2518 */ + /*HDR_DERIVED_FROM,*/ /* deprecated RFC 2608 */ + /*HDR_DESTINATION,*/ /* RFC 2518 */ + HDR_ETAG, /**< RFC 2608, 2616 */ + HDR_EXPECT, /**< RFC 2616, 2616 */ + HDR_EXPIRES, /**< RFC 2608, 2616 */ + HDR_FROM, /**< RFC 2608, 2616 */ + HDR_HOST, /**< RFC 2608, 2616 */ + /*HDR_IF,*/ /* RFC 2518 */ + HDR_IF_MATCH, /**< RFC 2608, 2616 */ + HDR_IF_MODIFIED_SINCE, /**< RFC 2608, 2616 */ + HDR_IF_NONE_MATCH, /**< RFC 2608, 2616 */ + HDR_IF_RANGE, /**< RFC 2608, 2616 */ + /*HDR_IF_UNMODIFIED_SINCE,*/ /**< RFC 2608, 2616 */ + HDR_KEEP_ALIVE, /**< obsolete HTTP/1.0 header we may need to erase */ + HDR_LAST_MODIFIED, /**< RFC 2608, 2616 */ + HDR_LINK, /**< RFC 2068 */ + HDR_LOCATION, /**< RFC 2608, 2616 */ + /*HDR_LOCK_TOKEN,*/ /* RFC 2518 */ + HDR_MAX_FORWARDS, /**< RFC 2608, 2616 */ + HDR_MIME_VERSION, /**< RFC 2626 */ + HDR_NEGOTIATE, /**< experimental RFC 2295. Why only this one from 2295? */ + /*HDR_OVERWRITE,*/ /* RFC 2518 */ + HDR_PRAGMA, /**< deprecated RFC 2068,2616 header we may need to erase */ + HDR_PROXY_AUTHENTICATE, /**< RFC 2608, 2616, 2617 */ + HDR_PROXY_AUTHENTICATION_INFO, /**< RFC 2617 */ + HDR_PROXY_AUTHORIZATION, /**< RFC 2608, 2616, 2617 */ + HDR_PROXY_CONNECTION, /**< obsolete Netscape header we may need to erase. */ + HDR_PROXY_SUPPORT, /**< RFC 4559 */ + HDR_PUBLIC, /**< RFC 2608 */ + HDR_RANGE, /**< RFC 2608, 2616 */ + HDR_REFERER, /**< RFC 2608, 2616 */ + HDR_REQUEST_RANGE, /**< some clients use this, sigh */ + HDR_RETRY_AFTER, /**< RFC 2608, 2616 */ + HDR_SERVER, /**< RFC 2608, 2616 */ + HDR_SET_COOKIE, /**< de-facto standard header we may need to erase */ + HDR_SET_COOKIE2, /**< obsolete RFC 2965 header we may need to erase */ + /*HDR_STATUS_URI,*/ /* RFC 2518 */ + /*HDR_TCN,*/ /* experimental RFC 2295 */ + HDR_TE, /**< RFC 2616 */ + /*HDR_TIMEOUT,*/ /* RFC 2518 */ + HDR_TITLE, /* obsolete draft suggested header */ + HDR_TRAILER, /**< RFC 2616 */ + HDR_TRANSFER_ENCODING, /**< RFC 2608, 2616 */ + HDR_TRANSLATE, /**< IIS custom header we may need to erase */ + HDR_UNLESS_MODIFIED_SINCE, /**< IIS custom header we may need to erase */ + HDR_UPGRADE, /**< RFC 2608, 2616 */ + /*HDR_URI,*/ /* obsolete RFC 2068 header */ + HDR_USER_AGENT, /**< RFC 2608, 2616 */ + /*HDR_VARIANT_VARY,*/ /* experimental RFC 2295 */ + HDR_VARY, /**< RFC 2608, 2616 */ + HDR_VIA, /**< RFC 2608, 2616 */ + HDR_WARNING, /**< RFC 2608, 2616 */ + HDR_WWW_AUTHENTICATE, /**< RFC 2608, 2616, 2617, 4559 */ + HDR_AUTHENTICATION_INFO, /**< RFC 2617 */ + HDR_X_CACHE, /**< Squid custom header */ + HDR_X_CACHE_LOOKUP, /**< Squid custom header. temporary hack that became de-facto. TODO remove */ + HDR_X_FORWARDED_FOR, /**< Squid custom header */ + HDR_X_REQUEST_URI, /**< Squid custom header appended if ADD_X_REQUEST_URI is defined */ + HDR_X_SQUID_ERROR, /**< Squid custom header on generated error responses */ #if X_ACCELERATOR_VARY - HDR_X_ACCELERATOR_VARY, + HDR_X_ACCELERATOR_VARY, /**< obsolete Squid custom header. */ #endif #if USE_ADAPTATION - HDR_X_NEXT_SERVICES, + HDR_X_NEXT_SERVICES, /**< Squid custom ICAP header */ #endif - HDR_SURROGATE_CAPABILITY, - HDR_SURROGATE_CONTROL, - HDR_FRONT_END_HTTPS, - HDR_OTHER, + HDR_SURROGATE_CAPABILITY, /**< Edge Side Includes (ESI) header */ + HDR_SURROGATE_CONTROL, /**< Edge Side Includes (ESI) header */ + HDR_FRONT_END_HTTPS, /**< MS Exchange custom header we may have to add */ + HDR_OTHER, /**< internal tag value for "unknown" headers */ HDR_ENUM_END } http_hdr_type; diff -u -r -N squid-3.2.0.13/src/HttpReply.cc squid-3.2.0.14/src/HttpReply.cc --- squid-3.2.0.13/src/HttpReply.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/HttpReply.cc 2011-12-13 00:08:18.000000000 +1300 @@ -36,6 +36,7 @@ #include "squid.h" #include "SquidTime.h" #include "Store.h" +#include "HttpBody.h" #include "HttpReply.h" #include "HttpHdrContRange.h" #include "HttpHdrCc.h" @@ -94,7 +95,6 @@ void HttpReply::init() { - httpBodyInit(&body); hdrCacheInit(); httpStatusLineInit(&sline); pstate = psReadyToParseStartLine; @@ -121,7 +121,7 @@ // points to a pipe that is owned and initiated by another object. body_pipe = NULL; - httpBodyClean(&body); + body.clear(); hdrCacheClean(); header.clean(); httpStatusLineClean(&sline); @@ -140,7 +140,7 @@ HttpReply::packInto(Packer * p) { packHeadersInto(p); - httpBodyPackInto(&body, p); + body.packInto(p); } /* create memBuf, create mem-based packer, pack, destroy packer, return MemBuf */ @@ -408,7 +408,7 @@ } if (surrogate_control) { - httpHdrScDestroy(surrogate_control); + delete surrogate_control; surrogate_control = NULL; } diff -u -r -N squid-3.2.0.13/src/HttpReply.h squid-3.2.0.14/src/HttpReply.h --- squid-3.2.0.13/src/HttpReply.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/HttpReply.h 2011-12-13 00:08:18.000000000 +1300 @@ -32,6 +32,7 @@ #ifndef SQUID_HTTPREPLY_H #define SQUID_HTTPREPLY_H +#include "HttpBody.h" #include "HttpMsg.h" #include "HttpStatusLine.h" diff -u -r -N squid-3.2.0.13/src/ident/Ident.cc squid-3.2.0.14/src/ident/Ident.cc --- squid-3.2.0.13/src/ident/Ident.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ident/Ident.cc 2011-12-13 00:08:18.000000000 +1300 @@ -68,7 +68,7 @@ // TODO: make these all a series of Async job calls. They are self-contained callbacks now. static IOCB ReadReply; -static PF Close; +static CLCB Close; static CTCB Timeout; static CNCB ConnectDone; static hash_table *ident_hash = NULL; @@ -101,9 +101,9 @@ } void -Ident::Close(int fdnotused, void *data) +Ident::Close(const CommCloseCbParams ¶ms) { - IdentStateData *state = (IdentStateData *)data; + IdentStateData *state = (IdentStateData *)params.data; identCallback(state, NULL); state->conn->close(); hash_remove_link(ident_hash, (hash_link *) state); diff -u -r -N squid-3.2.0.13/src/internal.cc squid-3.2.0.14/src/internal.cc --- squid-3.2.0.13/src/internal.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/internal.cc 2011-12-13 00:08:18.000000000 +1300 @@ -76,7 +76,7 @@ } else { debugObj(76, 1, "internalStart: unknown request:\n", request, (ObjPackMethod) & httpRequestPack); - err = errorCon(ERR_INVALID_REQ, HTTP_NOT_FOUND, request); + err = new ErrorState(ERR_INVALID_REQ, HTTP_NOT_FOUND, request); errorAppendEntry(entry, err); } } diff -u -r -N squid-3.2.0.13/src/ip/QosConfig.cc squid-3.2.0.14/src/ip/QosConfig.cc --- squid-3.2.0.13/src/ip/QosConfig.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ip/QosConfig.cc 2011-12-13 00:08:18.000000000 +1300 @@ -128,12 +128,13 @@ } else if (Ip::Qos::TheConfig.tosParentHit && hierCode==PARENT_HIT) { tos = Ip::Qos::TheConfig.tosParentHit; debugs(33, 2, "QOS: Parent Peer hit with hier code=" << hierCode << ", TOS=" << int(tos)); - } else if (Ip::Qos::TheConfig.tosMiss) { - tos = Ip::Qos::TheConfig.tosMiss; - debugs(33, 2, "QOS: Cache miss, setting TOS=" << int(tos)); - } else if (Ip::Qos::TheConfig.preserveMissTos && Ip::Qos::TheConfig.preserveMissTosMask) { + } else if (Ip::Qos::TheConfig.preserveMissTos) { tos = fd_table[conn->fd].tosFromServer & Ip::Qos::TheConfig.preserveMissTosMask; + tos = (tos & ~Ip::Qos::TheConfig.tosMissMask) | (Ip::Qos::TheConfig.tosMiss & Ip::Qos::TheConfig.tosMissMask); debugs(33, 2, "QOS: Preserving TOS on miss, TOS=" << int(tos)); + } else if (Ip::Qos::TheConfig.tosMiss) { + tos = Ip::Qos::TheConfig.tosMiss & Ip::Qos::TheConfig.tosMissMask; + debugs(33, 2, "QOS: Cache miss, setting TOS=" << int(tos)); } return setSockTos(conn, tos); } @@ -148,12 +149,13 @@ } else if (Ip::Qos::TheConfig.markParentHit && hierCode==PARENT_HIT) { mark = Ip::Qos::TheConfig.markParentHit; debugs(33, 2, "QOS: Parent Peer hit with hier code=" << hierCode << ", Mark=" << mark); - } else if (Ip::Qos::TheConfig.markMiss) { - mark = Ip::Qos::TheConfig.markMiss; - debugs(33, 2, "QOS: Cache miss, setting Mark=" << mark); } else if (Ip::Qos::TheConfig.preserveMissMark) { mark = fd_table[conn->fd].nfmarkFromServer & Ip::Qos::TheConfig.preserveMissMarkMask; + mark = (mark & ~Ip::Qos::TheConfig.markMissMask) | (Ip::Qos::TheConfig.markMiss & Ip::Qos::TheConfig.markMissMask); debugs(33, 2, "QOS: Preserving mark on miss, Mark=" << mark); + } else if (Ip::Qos::TheConfig.markMiss) { + mark = Ip::Qos::TheConfig.markMiss & Ip::Qos::TheConfig.markMissMask; + debugs(33, 2, "QOS: Cache miss, setting Mark=" << mark); } return setSockNfmark(conn, mark); } @@ -182,12 +184,14 @@ tosSiblingHit = 0; tosParentHit = 0; tosMiss = 0; + tosMissMask = 0; preserveMissTos = false; preserveMissTosMask = 0xFF; markLocalHit = 0; markSiblingHit = 0; markParentHit = 0; markMiss = 0; + markMissMask = 0; preserveMissMark = false; preserveMissMarkMask = 0xFFFFFFFF; } @@ -290,18 +294,36 @@ } else if (strncmp(token, "miss=",5) == 0) { + char *end; if (mark) { - if (!xstrtoui(&token[5], NULL, &markMiss, 0, std::numeric_limits::max())) { + if (!xstrtoui(&token[5], &end, &markMiss, 0, std::numeric_limits::max())) { debugs(3, DBG_CRITICAL, "ERROR: Bad mark miss value " << &token[5]); self_destruct(); } + if (*end == '/') { + if (!xstrtoui(end + 1, NULL, &markMissMask, 0, std::numeric_limits::max())) { + debugs(3, DBG_CRITICAL, "ERROR: Bad mark miss mask value " << (end + 1) << ". Using 0xFFFFFFFF instead."); + markMissMask = 0xFFFFFFFF; + } + } else { + markMissMask = 0xFFFFFFFF; + } } else { unsigned int v = 0; - if (!xstrtoui(&token[5], NULL, &v, 0, std::numeric_limits::max())) { + if (!xstrtoui(&token[5], &end, &v, 0, std::numeric_limits::max())) { debugs(3, DBG_CRITICAL, "ERROR: Bad TOS miss value " << &token[5]); self_destruct(); } tosMiss = (tos_t)v; + if (*end == '/') { + if (!xstrtoui(end + 1, NULL, &v, 0, std::numeric_limits::max())) { + debugs(3, DBG_CRITICAL, "ERROR: Bad TOS miss mask value " << (end + 1) << ". Using 0xFF instead."); + tosMissMask = 0xFF; + } else + tosMissMask = (tos_t)v; + } else { + tosMissMask = 0xFF; + } } } else if (strcmp(token, "disable-preserve-miss") == 0) { @@ -366,6 +388,9 @@ } if (tosMiss > 0) { p += snprintf(p, 11, " miss=0x%02X", tosMiss); + if (tosMissMask!=0xFFU) { + p += snprintf(p, 6, "/0x%02X", markMissMask); + } } if (preserveMissTos == 0) { p += snprintf(p, 23, " disable-preserve-miss"); @@ -391,6 +416,9 @@ } if (markMiss > 0) { p += snprintf(p, 17, " miss=0x%02X", markMiss); + if (markMissMask!=0xFFFFFFFFU) { + p += snprintf(p, 12, "/0x%02X", markMissMask); + } } if (preserveMissMark == false) { p += snprintf(p, 23, " disable-preserve-miss"); diff -u -r -N squid-3.2.0.13/src/ip/QosConfig.h squid-3.2.0.14/src/ip/QosConfig.h --- squid-3.2.0.13/src/ip/QosConfig.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ip/QosConfig.h 2011-12-13 00:08:18.000000000 +1300 @@ -158,15 +158,17 @@ tos_t tosSiblingHit; ///< TOS value to apply to hits from siblings tos_t tosParentHit; ///< TOS value to apply to hits from parent tos_t tosMiss; ///< TOS value to apply to cache misses + tos_t tosMissMask; ///< Mask for TOS value to apply to cache misses. Applied to the tosMiss value. bool preserveMissTos; ///< Whether to preserve the TOS value of the inbound packet for misses - tos_t preserveMissTosMask; ///< The mask to apply when preserving the TOS of misses + tos_t preserveMissTosMask; ///< The mask to apply when preserving the TOS of misses. Applies to preserved value from upstream. nfmark_t markLocalHit; ///< Netfilter mark value to apply to local cache hits nfmark_t markSiblingHit; ///< Netfilter mark value to apply to hits from siblings nfmark_t markParentHit; ///< Netfilter mark value to apply to hits from parent nfmark_t markMiss; ///< Netfilter mark value to apply to cache misses + nfmark_t markMissMask; ///< Mask for netfilter mark value to apply to cache misses. Applied to the markMiss value. bool preserveMissMark; ///< Whether to preserve netfilter mark value of inbound connection - nfmark_t preserveMissMarkMask; ///< The mask to apply when preserving the netfilter mark of misses + nfmark_t preserveMissMarkMask; ///< The mask to apply when preserving the netfilter mark of misses. Applied to preserved value from upstream. acl_tos *tosToServer; ///< The TOS that packets to the web server should be marked with, based on ACL acl_tos *tosToClient; ///< The TOS that packets to the client should be marked with, based on ACL diff -u -r -N squid-3.2.0.13/src/ipc/AtomicWord.cc squid-3.2.0.14/src/ipc/AtomicWord.cc --- squid-3.2.0.13/src/ipc/AtomicWord.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/ipc/AtomicWord.cc 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,19 @@ +/* + * $Id$ + * + * DEBUG: section 54 Interprocess Communication + * + */ + +#include "config.h" +#include "ipc/AtomicWord.h" +#include "protos.h" + +bool Ipc::Atomic::Enabled() +{ +#if HAVE_ATOMIC_OPS + return true; +#else + return !UsingSmp(); +#endif +} diff -u -r -N squid-3.2.0.13/src/ipc/AtomicWord.h squid-3.2.0.14/src/ipc/AtomicWord.h --- squid-3.2.0.13/src/ipc/AtomicWord.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc/AtomicWord.h 2011-12-13 00:08:18.000000000 +1300 @@ -6,17 +6,27 @@ #ifndef SQUID_IPC_ATOMIC_WORD_H #define SQUID_IPC_ATOMIC_WORD_H +namespace Ipc +{ + +namespace Atomic +{ + +/// Whether atomic operations support is available +bool Enabled(); + #if HAVE_ATOMIC_OPS + /// Supplies atomic operations for an integral Value in memory shared by kids. /// Used to implement non-blocking shared locks, queues, tables, and pools. template -class AtomicWordT +class WordT { public: typedef ValueType Value; - AtomicWordT() {} // leave value unchanged - AtomicWordT(Value aValue): value(aValue) {} // XXX: unsafe + WordT() {} // leave value unchanged + WordT(Value aValue): value(aValue) {} // XXX: unsafe Value operator +=(int delta) { return __sync_add_and_fetch(&value, delta); } Value operator -=(int delta) { return __sync_sub_and_fetch(&value, delta); } @@ -25,64 +35,67 @@ Value operator ++(int) { return __sync_fetch_and_add(&value, 1); } Value operator --(int) { return __sync_fetch_and_sub(&value, 1); } - bool swap_if(const int comparand, const int replacement) { return __sync_bool_compare_and_swap(&value, comparand, replacement); } + bool swap_if(const Value comparand, const Value replacement) { return __sync_bool_compare_and_swap(&value, comparand, replacement); } /// v1 = value; value &= v2; return v1; Value fetchAndAnd(const Value v2) { return __sync_fetch_and_and(&value, v2); } // TODO: no need for __sync_bool_compare_and_swap here? - bool operator ==(int v2) { return __sync_bool_compare_and_swap(&value, v2, value); } + bool operator ==(const Value v2) { return __sync_bool_compare_and_swap(&value, v2, value); } // TODO: no need for __sync_fetch_and_add here? Value get() const { return __sync_fetch_and_add(const_cast(&value), 0); } operator Value () const { return get(); } private: + Value value; }; -enum { AtomicOperationsSupported = 1 }; - #else -/// A wrapper to provide AtomicWordT API (and asserting implementation) + +/// A wrapper to provide AtomicWordT API (and implementation asserting in SMP mode) /// where we do not support atomic operations. This avoids ifdefs in core code. template -class AtomicWordT +class WordT { public: typedef ValueType Value; - AtomicWordT() {} // leave value unchanged - AtomicWordT(Value aValue): value(aValue) {} // XXX: unsafe + WordT() {} // leave value unchanged + WordT(Value aValue): value(aValue) {} // XXX: unsafe - Value operator +=(int) { assert(false); return *this; } + Value operator +=(int delta) { assert(Enabled()); return value += delta; } Value operator ++() { return *this += 1; } Value operator --() { return *this += -1; } - Value operator ++(int) { assert(false); return *this; } - Value operator --(int) { assert(false); return *this; } + Value operator ++(int) { assert(Enabled()); return value++; } + Value operator --(int) { assert(Enabled()); return value--; } - bool swap_if(const int comparand, const int replacement) - { assert(false); return false; } + bool swap_if(const Value comparand, const Value replacement) + { assert(Enabled()); return value == comparand ? value = replacement, true : false; } /// v1 = value; value &= v2; return v1; Value fetchAndAnd(const Value v2) - { assert(false); return value; } + { assert(Enabled()); const Value v1 = value; value &= v2; return v1; } // TODO: no need for __sync_bool_compare_and_swap here? - bool operator ==(int v2) { assert(false); return false; } + bool operator ==(const Value v2) { assert(Enabled()); return value == v2; } // TODO: no need for __sync_fetch_and_add here? - Value get() const { assert(false); return value; } + Value get() const { assert(Enabled()); return value; } operator Value () const { return get(); } private: + Value value; }; -enum { AtomicOperationsSupported = 0 }; - #endif /* HAVE_ATOMIC_OPS */ -typedef AtomicWordT AtomicWord; +typedef WordT Word; + +} // namespace Atomic + +} // namespace Ipc #endif // SQUID_IPC_ATOMIC_WORD_H diff -u -r -N squid-3.2.0.13/src/ipc/Makefile.am squid-3.2.0.14/src/ipc/Makefile.am --- squid-3.2.0.13/src/ipc/Makefile.am 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc/Makefile.am 2011-12-13 00:08:18.000000000 +1300 @@ -4,6 +4,7 @@ noinst_LTLIBRARIES = libipc.la libipc_la_SOURCES = \ + AtomicWord.cc \ AtomicWord.h \ FdNotes.cc \ FdNotes.h \ diff -u -r -N squid-3.2.0.13/src/ipc/Makefile.in squid-3.2.0.14/src/ipc/Makefile.in --- squid-3.2.0.13/src/ipc/Makefile.in 2011-10-14 14:48:14.000000000 +1300 +++ squid-3.2.0.14/src/ipc/Makefile.in 2011-12-13 00:10:53.000000000 +1300 @@ -56,11 +56,12 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libipc_la_LIBADD = -am_libipc_la_OBJECTS = FdNotes.lo Kid.lo Kids.lo Queue.lo \ - ReadWriteLock.lo StartListening.lo StoreMap.lo StrandCoord.lo \ - StrandSearch.lo SharedListen.lo TypedMsgHdr.lo Coordinator.lo \ - UdsOp.lo Port.lo Strand.lo Forwarder.lo Inquirer.lo Page.lo \ - PagePool.lo Pages.lo PageStack.lo Segment.lo +am_libipc_la_OBJECTS = AtomicWord.lo FdNotes.lo Kid.lo Kids.lo \ + Queue.lo ReadWriteLock.lo StartListening.lo StoreMap.lo \ + StrandCoord.lo StrandSearch.lo SharedListen.lo TypedMsgHdr.lo \ + Coordinator.lo UdsOp.lo Port.lo Strand.lo Forwarder.lo \ + Inquirer.lo Page.lo PagePool.lo Pages.lo PageStack.lo \ + Segment.lo libipc_la_OBJECTS = $(am_libipc_la_OBJECTS) DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/cfgaux/depcomp @@ -313,6 +314,7 @@ subst_perlshell = sed -e 's,[@]PERL[@],$(PERL),g' <$(srcdir)/$@.pl.in >$@ || ($(RM) -f $@ ; exit 1) noinst_LTLIBRARIES = libipc.la libipc_la_SOURCES = \ + AtomicWord.cc \ AtomicWord.h \ FdNotes.cc \ FdNotes.h \ @@ -427,6 +429,7 @@ distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AtomicWord.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Coordinator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FdNotes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Forwarder.Plo@am__quote@ diff -u -r -N squid-3.2.0.13/src/ipc/mem/PagePool.cc squid-3.2.0.14/src/ipc/mem/PagePool.cc --- squid-3.2.0.13/src/ipc/mem/PagePool.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc/mem/PagePool.cc 2011-12-13 00:08:18.000000000 +1300 @@ -24,7 +24,7 @@ Ipc::Mem::PagePool::PagePool(const char *const id): pageIndex(shm_old(PageStack)(id)), - theLevels(reinterpret_cast( + theLevels(reinterpret_cast( reinterpret_cast(pageIndex.getRaw()) + pageIndex->stackSize())), theBuf(reinterpret_cast(theLevels + PageId::maxPurpose)) diff -u -r -N squid-3.2.0.13/src/ipc/mem/PagePool.h squid-3.2.0.14/src/ipc/mem/PagePool.h --- squid-3.2.0.13/src/ipc/mem/PagePool.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc/mem/PagePool.h 2011-12-13 00:08:18.000000000 +1300 @@ -47,7 +47,7 @@ private: Ipc::Mem::Pointer pageIndex; ///< free pages index /// number of shared memory pages used now for each purpose - AtomicWord *const theLevels; + Atomic::Word *const theLevels; char *const theBuf; ///< pages storage }; diff -u -r -N squid-3.2.0.13/src/ipc/mem/Pages.cc squid-3.2.0.14/src/ipc/mem/Pages.cc --- squid-3.2.0.13/src/ipc/mem/Pages.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc/mem/Pages.cc 2011-12-13 00:08:18.000000000 +1300 @@ -19,6 +19,7 @@ // TODO: make pool id more unique so it does not conflict with other Squids? static const char *PagePoolId = "squid-page-pool"; static Ipc::Mem::PagePool *ThePagePool = 0; +static int TheLimits[Ipc::Mem::PageId::maxPurpose]; // TODO: make configurable to avoid waste when mem-cached objects are small/big size_t @@ -60,16 +61,17 @@ size_t Ipc::Mem::PageLimit(const int purpose) { - switch (purpose) { - case PageId::cachePage: - return Config.memMaxSize > 0 ? Config.memMaxSize / PageSize() : 0; - case PageId::ioPage: - // XXX: this should be independent from memory cache pages - return PageLimit(PageId::cachePage)/2; - default: - Must(false); - } - return 0; + Must(0 <= purpose && purpose <= PageId::maxPurpose); + return TheLimits[purpose]; +} + +// note: adjust this if we start recording needs during reconfigure +void +Ipc::Mem::NotePageNeed(const int purpose, const int count) +{ + Must(0 <= purpose && purpose <= PageId::maxPurpose); + Must(count >= 0); + TheLimits[purpose] += count; } size_t @@ -105,22 +107,8 @@ void SharedMemPagesRr::run(const RunnerRegistry &r) { - if (!UsingSmp()) - return; - - // When cache_dirs start using shared memory pages, they would - // need to communicate their needs to us somehow. - if (Config.memMaxSize <= 0) - return; - - if (Ipc::Mem::PageLimit() <= 0) { - if (IamMasterProcess()) { - debugs(54, DBG_IMPORTANT, "WARNING: mem-cache size is too small (" - << (Config.memMaxSize / 1024.0) << " KB), should be >= " << - (Ipc::Mem::PageSize() / 1024.0) << " KB"); - } + if (Ipc::Mem::PageLimit() <= 0) return; - } Ipc::Mem::RegisteredRunner::run(r); } diff -u -r -N squid-3.2.0.13/src/ipc/mem/Pages.h squid-3.2.0.14/src/ipc/mem/Pages.h --- squid-3.2.0.13/src/ipc/mem/Pages.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc/mem/Pages.h 2011-12-13 00:08:18.000000000 +1300 @@ -51,6 +51,9 @@ /// returns page size in bytes; all pages are assumed to be the same size size_t PageSize(); +/// claim the need for a number of pages for a given purpose +void NotePageNeed(const int purpose, const int count); + } // namespace Mem } // namespace Ipc diff -u -r -N squid-3.2.0.13/src/ipc/mem/PageStack.cc squid-3.2.0.14/src/ipc/mem/PageStack.cc --- squid-3.2.0.13/src/ipc/mem/PageStack.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc/mem/PageStack.cc 2011-12-13 00:08:18.000000000 +1300 @@ -113,7 +113,7 @@ size_t Ipc::Mem::PageStack::SharedMemorySize(const uint32_t, const unsigned int capacity, const size_t pageSize) { - const size_t levelsSize = PageId::maxPurpose * sizeof(AtomicWord); + const size_t levelsSize = PageId::maxPurpose * sizeof(Atomic::Word); const size_t pagesDataSize = capacity * pageSize; return StackSize(capacity) + pagesDataSize + levelsSize; } diff -u -r -N squid-3.2.0.13/src/ipc/mem/PageStack.h squid-3.2.0.14/src/ipc/mem/PageStack.h --- squid-3.2.0.13/src/ipc/mem/PageStack.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc/mem/PageStack.h 2011-12-13 00:08:18.000000000 +1300 @@ -59,14 +59,14 @@ const Offset theCapacity; ///< stack capacity, i.e. theItems size const size_t thePageSize; ///< page size, used to calculate shared memory size /// lower bound for the number of free pages (may get negative!) - AtomicWordT theSize; + Atomic::WordT theSize; /// last readable item index; just a hint, not a guarantee - AtomicWordT theLastReadable; + Atomic::WordT theLastReadable; /// first writable item index; just a hint, not a guarantee - AtomicWordT theFirstWritable; + Atomic::WordT theFirstWritable; - typedef AtomicWordT Item; + typedef Atomic::WordT Item; Item theItems[]; ///< page number storage }; diff -u -r -N squid-3.2.0.13/src/ipc/mem/Segment.cc squid-3.2.0.14/src/ipc/mem/Segment.cc --- squid-3.2.0.13/src/ipc/mem/Segment.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc/mem/Segment.cc 2011-12-13 00:08:18.000000000 +1300 @@ -16,6 +16,10 @@ #include #include + +// test cases change this +const char *Ipc::Mem::Segment::BasePath = DEFAULT_STATEDIR; + void * Ipc::Mem::Segment::reserve(size_t chunkSize) { @@ -66,12 +70,14 @@ S_IRUSR | S_IWUSR); if (theFD < 0) { debugs(54, 5, HERE << "shm_open " << theName << ": " << xstrerror()); - fatal("Ipc::Mem::Segment::create failed to shm_open"); + fatalf("Ipc::Mem::Segment::create failed to shm_open(%s): %s\n", + theName.termedBuf(), xstrerror()); } if (ftruncate(theFD, aSize)) { debugs(54, 5, HERE << "ftruncate " << theName << ": " << xstrerror()); - fatal("Ipc::Mem::Segment::create failed to ftruncate"); + fatalf("Ipc::Mem::Segment::create failed to ftruncate(%s): %s\n", + theName.termedBuf(), xstrerror()); } assert(statSize("Ipc::Mem::Segment::create") == aSize); // paranoid @@ -93,9 +99,8 @@ theFD = shm_open(theName.termedBuf(), O_RDWR, 0); if (theFD < 0) { debugs(54, 5, HERE << "shm_open " << theName << ": " << xstrerror()); - String s = "Ipc::Mem::Segment::open failed to shm_open "; - s.append(theName); - fatal(s.termedBuf()); + fatalf("Ipc::Mem::Segment::open failed to shm_open(%s): %s\n", + theName.termedBuf(), xstrerror()); } theSize = statSize("Ipc::Mem::Segment::open"); @@ -120,7 +125,8 @@ mmap(NULL, theSize, PROT_READ | PROT_WRITE, MAP_SHARED, theFD, 0); if (p == MAP_FAILED) { debugs(54, 5, HERE << "mmap " << theName << ": " << xstrerror()); - fatal("Ipc::Mem::Segment::attach failed to mmap"); + fatalf("Ipc::Mem::Segment::attach failed to mmap(%s): %s\n", + theName.termedBuf(), xstrerror()); } theMem = p; } @@ -134,7 +140,8 @@ if (munmap(theMem, theSize)) { debugs(54, 5, HERE << "munmap " << theName << ": " << xstrerror()); - fatal("Ipc::Mem::Segment::detach failed to munmap"); + fatalf("Ipc::Mem::Segment::detach failed to munmap(%s): %s\n", + theName.termedBuf(), xstrerror()); } theMem = 0; } @@ -158,21 +165,24 @@ memset(&s, 0, sizeof(s)); if (fstat(theFD, &s) != 0) { - debugs(54, 5, HERE << "fstat " << theName << ": " << xstrerror()); - String s = context; - s.append("failed to fstat(2) "); - s.append(theName); - fatal(s.termedBuf()); + debugs(54, 5, HERE << context << " fstat " << theName << ": " << xstrerror()); + fatalf("Ipc::Mem::Segment::statSize: %s failed to fstat(%s): %s\n", + context, theName.termedBuf(), xstrerror()); } return s.st_size; } -/// Generate name for shared memory segment. Replaces all slashes with dots. +/// Generate name for shared memory segment. Starts with a prefix required +/// for cross-platform portability and replaces all slashes in ID with dots. String Ipc::Mem::Segment::GenerateName(const char *id) { - String name("/squid-"); + assert(BasePath); + static const bool nameIsPath = shm_portable_segment_name_is_path(); + String name(nameIsPath ? BasePath : "/squid-"); + + // append id, replacing slashes with dots for (const char *slash = strchr(id, '/'); slash; slash = strchr(id, '/')) { if (id != slash) { name.append(id, slash - id); @@ -181,6 +191,8 @@ id = slash + 1; } name.append(id); + + name.append(".shm"); // to distinguish from non-segments when nameIsPath return name; } @@ -200,14 +212,16 @@ { if (doUnlink) { delete [] static_cast(theMem); - debugs(54, 3, HERE << "deleted " << theName << " segment"); + theMem = NULL; + Segments.erase(theName); + debugs(54, 3, HERE << "unlinked " << theName << " fake segment"); } } bool Ipc::Mem::Segment::Enabled() { - return !InDaemonMode() || (!UsingSmp() && IamWorkerProcess()); + return !UsingSmp() && IamWorkerProcess(); } void @@ -249,9 +263,11 @@ Ipc::Mem::Segment::checkSupport(const char *const context) { if (!Enabled()) { - debugs(54, 5, HERE << "True shared memory segments are not supported. " + debugs(54, 5, HERE << context << + ": True shared memory segments are not supported. " "Cannot fake shared segments in SMP config."); - fatalf("%s failed", context); + fatalf("Ipc::Mem::Segment: Cannot fake shared segments in SMP config (%s)\n", + context); } } diff -u -r -N squid-3.2.0.13/src/ipc/mem/Segment.h squid-3.2.0.14/src/ipc/mem/Segment.h --- squid-3.2.0.13/src/ipc/mem/Segment.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc/mem/Segment.h 2011-12-13 00:08:18.000000000 +1300 @@ -35,6 +35,8 @@ void *mem() { return reserve(0); } ///< pointer to the next chunk void *reserve(size_t chunkSize); ///< reserve and return the next chunk + /// common path of all segment names in path-based environments + static const char *BasePath; private: diff -u -r -N squid-3.2.0.13/src/ipc/Queue.cc squid-3.2.0.14/src/ipc/Queue.cc --- squid-3.2.0.13/src/ipc/Queue.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc/Queue.cc 2011-12-13 00:08:18.000000000 +1300 @@ -149,6 +149,12 @@ debugs(54, 7, HERE << "queue " << id << " reader: " << localReader.id); } +int +Ipc::FewToFewBiQueue::MaxItemsCount(const int groupASize, const int groupBSize, const int capacity) +{ + return capacity * groupASize * groupBSize * 2; +} + bool Ipc::FewToFewBiQueue::validProcessId(const Group group, const int processId) const { @@ -197,6 +203,22 @@ return (*queues)[oneToOneQueueIndex(fromGroup, fromProcessId, toGroup, toProcessId)]; } +/// incoming queue from a given remote process +const Ipc::OneToOneUniQueue & +Ipc::FewToFewBiQueue::inQueue(const int remoteProcessId) const +{ + return oneToOneQueue(remoteGroup(), remoteProcessId, + theLocalGroup, theLocalProcessId); +} + +/// outgoing queue to a given remote process +const Ipc::OneToOneUniQueue & +Ipc::FewToFewBiQueue::outQueue(const int remoteProcessId) const +{ + return oneToOneQueue(theLocalGroup, theLocalProcessId, + remoteGroup(), remoteProcessId); +} + int Ipc::FewToFewBiQueue::readerIndex(const Group group, const int processId) const { @@ -233,21 +255,6 @@ // theLastPopProcessId = remoteProcessId; } -bool -Ipc::FewToFewBiQueue::popReady() const -{ - // mimic FewToFewBiQueue::pop() but quit just before popping - int popProcessId = theLastPopProcessId; // preserve for future pop() - for (int i = 0; i < remoteGroupSize(); ++i) { - if (++popProcessId >= remoteGroupIdOffset() + remoteGroupSize()) - popProcessId = remoteGroupIdOffset(); - const OneToOneUniQueue &queue = oneToOneQueue(remoteGroup(), popProcessId, theLocalGroup, theLocalProcessId); - if (!queue.empty()) - return true; - } - return false; // most likely, no process had anything to pop -} - Ipc::QueueReader::Balance & Ipc::FewToFewBiQueue::localBalance() { @@ -255,6 +262,13 @@ return r.balance; } +const Ipc::QueueReader::Balance & +Ipc::FewToFewBiQueue::balance(const int remoteProcessId) const +{ + const QueueReader &r = reader(remoteGroup(), remoteProcessId); + return r.balance; +} + Ipc::QueueReader::Rate & Ipc::FewToFewBiQueue::localRateLimit() { @@ -262,6 +276,13 @@ return r.rateLimit; } +const Ipc::QueueReader::Rate & +Ipc::FewToFewBiQueue::rateLimit(const int remoteProcessId) const +{ + const QueueReader &r = reader(remoteGroup(), remoteProcessId); + return r.rateLimit; +} + Ipc::FewToFewBiQueue::Metadata::Metadata(const int aGroupASize, const int aGroupAIdOffset, const int aGroupBSize, const int aGroupBIdOffset): theGroupASize(aGroupASize), theGroupAIdOffset(aGroupAIdOffset), theGroupBSize(aGroupBSize), theGroupBIdOffset(aGroupBIdOffset) diff -u -r -N squid-3.2.0.13/src/ipc/Queue.h squid-3.2.0.14/src/ipc/Queue.h --- squid-3.2.0.13/src/ipc/Queue.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc/Queue.h 2011-12-13 00:08:18.000000000 +1300 @@ -42,15 +42,15 @@ void clearSignal() { unblock(); popSignal.swap_if(1,0); } private: - AtomicWord popBlocked; ///< whether the reader is blocked on pop() - AtomicWord popSignal; ///< whether writer has sent and reader has not received notification + Atomic::Word popBlocked; ///< whether the reader is blocked on pop() + Atomic::Word popSignal; ///< whether writer has sent and reader has not received notification public: - typedef AtomicWord Rate; ///< pop()s per second + typedef Atomic::Word Rate; ///< pop()s per second Rate rateLimit; ///< pop()s per second limit if positive // we need a signed atomic type because balance may get negative - typedef AtomicWordT AtomicSignedMsec; + typedef Atomic::WordT AtomicSignedMsec; typedef AtomicSignedMsec Balance; /// how far ahead the reader is compared to a perfect read/sec event rate Balance balance; @@ -115,7 +115,7 @@ unsigned int theIn; ///< input index, used only in push() unsigned int theOut; ///< output index, used only in pop() - AtomicWord theSize; ///< number of items in the queue + Atomic::Word theSize; ///< number of items in the queue const unsigned int theMaxItemSize; ///< maximum item size const int theCapacity; ///< maximum number of items, i.e. theBuffer size @@ -186,6 +186,9 @@ enum Group { groupA = 0, groupB = 1 }; FewToFewBiQueue(const String &id, const Group aLocalGroup, const int aLocalProcessId); + /// maximum number of items in the queue + static int MaxItemsCount(const int groupASize, const int groupBSize, const int capacity); + Group localGroup() const { return theLocalGroup; } Group remoteGroup() const { return theLocalGroup == groupA ? groupB : groupA; } @@ -198,24 +201,38 @@ /// calls OneToOneUniQueue::push() using the given process queue template bool push(const int remoteProcessId, const Value &value); - // TODO: rename to findOldest() or some such - /// calls OneToOneUniQueue::peek() using the given process queue - template bool peek(const int remoteProcessId, Value &value) const; + /// finds the oldest item in incoming and outgoing queues between + /// us and the given remote process + template bool findOldest(const int remoteProcessId, Value &value) const; - /// returns true if pop() would have probably succeeded but does not pop() - bool popReady() const; + /// peeks at the item likely to be pop()ed next + template bool peek(int &remoteProcessId, Value &value) const; /// returns local reader's balance QueueReader::Balance &localBalance(); + /// returns reader's balance for a given remote process + const QueueReader::Balance &balance(const int remoteProcessId) const; + /// returns local reader's rate limit QueueReader::Rate &localRateLimit(); + /// returns reader's rate limit for a given remote process + const QueueReader::Rate &rateLimit(const int remoteProcessId) const; + + /// number of items in incoming queue from a given remote process + int inSize(const int remoteProcessId) const { return inQueue(remoteProcessId).size(); } + + /// number of items in outgoing queue to a given remote process + int outSize(const int remoteProcessId) const { return outQueue(remoteProcessId).size(); } + private: bool validProcessId(const Group group, const int processId) const; int oneToOneQueueIndex(const Group fromGroup, const int fromProcessId, const Group toGroup, const int toProcessId) const; const OneToOneUniQueue &oneToOneQueue(const Group fromGroup, const int fromProcessId, const Group toGroup, const int toProcessId) const; OneToOneUniQueue &oneToOneQueue(const Group fromGroup, const int fromProcessId, const Group toGroup, const int toProcessId); + const OneToOneUniQueue &inQueue(const int remoteProcessId) const; + const OneToOneUniQueue &outQueue(const int remoteProcessId) const; QueueReader &reader(const Group group, const int processId); const QueueReader &reader(const Group group, const int processId) const; int readerIndex(const Group group, const int processId) const; @@ -350,22 +367,44 @@ template bool -FewToFewBiQueue::peek(const int remoteProcessId, Value &value) const +FewToFewBiQueue::findOldest(const int remoteProcessId, Value &value) const { // we may be called before remote process configured its queue end if (!validProcessId(remoteGroup(), remoteProcessId)) return false; // we need the oldest value, so start with the incoming, them-to-us queue: - const OneToOneUniQueue &inQueue = oneToOneQueue(remoteGroup(), remoteProcessId, theLocalGroup, theLocalProcessId); - debugs(54, 2, HERE << "peeking from " << remoteProcessId << " to " << theLocalProcessId << " at " << inQueue.size()); - if (inQueue.peek(value)) + const OneToOneUniQueue &in = inQueue(remoteProcessId); + debugs(54, 2, HERE << "peeking from " << remoteProcessId << " to " << + theLocalProcessId << " at " << in.size()); + if (in.peek(value)) return true; // if the incoming queue is empty, check the outgoing, us-to-them queue: - const OneToOneUniQueue &outQueue = oneToOneQueue(theLocalGroup, theLocalProcessId, remoteGroup(), remoteProcessId); - debugs(54, 2, HERE << "peeking from " << theLocalProcessId << " to " << remoteProcessId << " at " << outQueue.size()); - return outQueue.peek(value); + const OneToOneUniQueue &out = outQueue(remoteProcessId); + debugs(54, 2, HERE << "peeking from " << theLocalProcessId << " to " << + remoteProcessId << " at " << out.size()); + return out.peek(value); +} + +template +bool +FewToFewBiQueue::peek(int &remoteProcessId, Value &value) const +{ + // mimic FewToFewBiQueue::pop() but quit just before popping + int popProcessId = theLastPopProcessId; // preserve for future pop() + for (int i = 0; i < remoteGroupSize(); ++i) { + if (++popProcessId >= remoteGroupIdOffset() + remoteGroupSize()) + popProcessId = remoteGroupIdOffset(); + const OneToOneUniQueue &queue = + oneToOneQueue(remoteGroup(), popProcessId, + theLocalGroup, theLocalProcessId); + if (queue.peek(value)) { + remoteProcessId = popProcessId; + return true; + } + } + return false; // most likely, no process had anything to pop } } // namespace Ipc diff -u -r -N squid-3.2.0.13/src/ipc/ReadWriteLock.h squid-3.2.0.14/src/ipc/ReadWriteLock.h --- squid-3.2.0.13/src/ipc/ReadWriteLock.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc/ReadWriteLock.h 2011-12-13 00:08:18.000000000 +1300 @@ -26,8 +26,8 @@ void updateStats(ReadWriteLockStats &stats) const; public: - mutable AtomicWord readers; ///< number of users trying to read - AtomicWord writers; ///< number of writers trying to modify protected data + mutable Atomic::Word readers; ///< number of users trying to read + Atomic::Word writers; ///< number of writers trying to modify protected data }; diff -u -r -N squid-3.2.0.13/src/ipc/StoreMap.cc squid-3.2.0.14/src/ipc/StoreMap.cc --- squid-3.2.0.13/src/ipc/StoreMap.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc/StoreMap.cc 2011-12-13 00:08:18.000000000 +1300 @@ -46,7 +46,7 @@ assert(s.state != Slot::Writeable); // until we start breaking locks // free if the entry was used, keeping the entry locked - if (s.waitingToBeFreed == true || s.state == Slot::Readable) + if (s.waitingToBeFreed || s.state == Slot::Readable) freeLocked(s, true); assert(s.state == Slot::Empty); diff -u -r -N squid-3.2.0.13/src/ipc/StoreMap.h squid-3.2.0.14/src/ipc/StoreMap.h --- squid-3.2.0.13/src/ipc/StoreMap.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc/StoreMap.h 2011-12-13 00:08:18.000000000 +1300 @@ -22,7 +22,7 @@ public: mutable ReadWriteLock lock; ///< protects slot data below - AtomicWordT waitingToBeFreed; ///< may be accessed w/o a lock + Atomic::WordT waitingToBeFreed; ///< may be accessed w/o a lock uint64_t key[2]; ///< StoreEntry key @@ -65,7 +65,7 @@ const int limit; ///< maximum number of map slots const size_t extrasSize; ///< size of slot extra data - AtomicWord count; ///< current number of map slots + Atomic::Word count; ///< current number of map slots Slot slots[]; ///< slots storage }; @@ -195,7 +195,7 @@ } // namespace Ipc -// We do not reuse struct _fileMap because we cannot control its size, +// We do not reuse FileMap because we cannot control its size, // resulting in sfilenos that are pointing beyond the database. #endif /* SQUID_IPC_STORE_MAP_H */ diff -u -r -N squid-3.2.0.13/src/ipc.cc squid-3.2.0.14/src/ipc.cc --- squid-3.2.0.13/src/ipc.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ipc.cc 2011-12-13 00:08:18.000000000 +1300 @@ -87,8 +87,7 @@ int t1, t2, t3; int x; -#if USE_POLL && defined(_SQUID_OSF_) - +#if USE_POLL && _SQUID_OSF_ assert(type != IPC_FIFO); #endif diff -u -r -N squid-3.2.0.13/src/log/access_log.cc squid-3.2.0.14/src/log/access_log.cc --- squid-3.2.0.13/src/log/access_log.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/log/access_log.cc 2011-12-13 00:08:18.000000000 +1300 @@ -47,7 +47,7 @@ #include "eui/Eui48.h" #include "eui/Eui64.h" #endif -#include "format/Tokens.h" +#include "format/Token.h" #include "hier_code.h" #include "HttpReply.h" #include "HttpRequest.h" @@ -322,8 +322,8 @@ #if USE_ADAPTATION for (Format::Token * curr_token = (log->logFormat?log->logFormat->format:NULL); curr_token; curr_token = curr_token->next) { - if (curr_token->type == Format::LTF_ADAPTATION_SUM_XACT_TIMES || - curr_token->type == Format::LTF_ADAPTATION_ALL_XACT_TIMES || + if (curr_token->type == Format::LFT_ADAPTATION_SUM_XACT_TIMES || + curr_token->type == Format::LFT_ADAPTATION_ALL_XACT_TIMES || curr_token->type == Format::LFT_ADAPTATION_LAST_HEADER || curr_token->type == Format::LFT_ADAPTATION_LAST_HEADER_ELEM || curr_token->type == Format::LFT_ADAPTATION_LAST_ALL_HEADERS) { diff -u -r -N squid-3.2.0.13/src/log/FormatHttpdCombined.cc squid-3.2.0.14/src/log/FormatHttpdCombined.cc --- squid-3.2.0.13/src/log/FormatHttpdCombined.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/log/FormatHttpdCombined.cc 2011-12-13 00:08:18.000000000 +1300 @@ -34,7 +34,7 @@ #include "config.h" #include "AccessLogEntry.h" -#include "format/Tokens.h" +#include "format/Token.h" #include "format/Quoting.h" #include "HttpRequest.h" #include "log/File.h" diff -u -r -N squid-3.2.0.13/src/log/FormatHttpdCommon.cc squid-3.2.0.14/src/log/FormatHttpdCommon.cc --- squid-3.2.0.13/src/log/FormatHttpdCommon.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/log/FormatHttpdCommon.cc 2011-12-13 00:08:18.000000000 +1300 @@ -35,7 +35,7 @@ #include "config.h" #include "AccessLogEntry.h" #include "format/Quoting.h" -#include "format/Tokens.h" +#include "format/Token.h" #include "log/File.h" #include "log/Formats.h" #include "SquidTime.h" diff -u -r -N squid-3.2.0.13/src/log/FormatSquidCustom.cc squid-3.2.0.14/src/log/FormatSquidCustom.cc --- squid-3.2.0.13/src/log/FormatSquidCustom.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/log/FormatSquidCustom.cc 2011-12-13 00:08:18.000000000 +1300 @@ -34,7 +34,6 @@ #include "config.h" #include "AccessLogEntry.h" -#include "format/Tokens.h" #include "log/File.h" #include "log/Formats.h" #include "MemBuf.h" diff -u -r -N squid-3.2.0.13/src/log/FormatSquidNative.cc squid-3.2.0.14/src/log/FormatSquidNative.cc --- squid-3.2.0.13/src/log/FormatSquidNative.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/log/FormatSquidNative.cc 2011-12-13 00:08:18.000000000 +1300 @@ -35,7 +35,7 @@ #include "config.h" #include "AccessLogEntry.h" #include "format/Quoting.h" -#include "format/Tokens.h" +#include "format/Token.h" #include "log/File.h" #include "log/Formats.h" #include "SquidTime.h" diff -u -r -N squid-3.2.0.13/src/main.cc squid-3.2.0.14/src/main.cc --- squid-3.2.0.13/src/main.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/main.cc 2011-12-13 00:08:18.000000000 +1300 @@ -63,6 +63,7 @@ #include "event.h" #include "EventLoop.h" #include "ExternalACL.h" +#include "format/Token.h" #include "fs/Module.h" #include "PeerSelectState.h" #include "Store.h" @@ -419,26 +420,18 @@ opt_send_signal = SIGHUP; else if (!strncmp(optarg, "rotate", strlen(optarg))) /** \li On rotate send SIGQUIT or SIGUSR1. */ -#ifdef _SQUID_LINUX_THREADS_ - +#if defined(_SQUID_LINUX_THREADS_) opt_send_signal = SIGQUIT; - #else - opt_send_signal = SIGUSR1; - #endif else if (!strncmp(optarg, "debug", strlen(optarg))) /** \li On debug send SIGTRAP or SIGUSR2. */ -#ifdef _SQUID_LINUX_THREADS_ - +#if defined(_SQUID_LINUX_THREADS_) opt_send_signal = SIGTRAP; - #else - opt_send_signal = SIGUSR2; - #endif else if (!strncmp(optarg, "shutdown", strlen(optarg))) @@ -678,7 +671,6 @@ htcpInit(); #endif #if SQUID_SNMP - snmpConnectionOpen(); #endif @@ -722,8 +714,7 @@ icmpEngine.Close(); #if SQUID_SNMP - - snmpConnectionShutdown(); + snmpConnectionClose(); #endif asnFreeMemory(); @@ -743,10 +734,6 @@ htcpSocketClose(); #endif -#if SQUID_SNMP - - snmpConnectionClose(); -#endif #if USE_DNSSERVERS dnsShutdown(); @@ -872,6 +859,11 @@ mimeInit(Config.mimeTablePathname); +#if USE_UNLINKD + if (unlinkdNeeded()) + unlinkdInit(); +#endif + #if USE_DELAY_POOLS Config.ClientDelay.finalize(); #endif @@ -1085,7 +1077,8 @@ if (!configured_once) { #if USE_UNLINKD - unlinkdInit(); + if (unlinkdNeeded()) + unlinkdInit(); #endif urlInitialize(); @@ -1139,7 +1132,7 @@ if (!configured_once) writePidFile(); /* write PID file */ -#ifdef _SQUID_LINUX_THREADS_ +#if defined(_SQUID_LINUX_THREADS_) squid_signal(SIGQUIT, rotate_logs, SA_RESTART); @@ -1399,6 +1392,8 @@ #endif Ip::ProbeTransport(); // determine IPv4 or IPv6 capabilities before parsing. + Format::Token::Init(); // XXX: temporary. Use a runners registry of pre-parse runners instead. + parse_err = parseConfigFile(ConfigFile); Mem::Report(); @@ -1442,6 +1437,7 @@ debugs(1,2, HERE << "Doing post-config initialization\n"); leave_suid(); + ActivateRegistered(rrClaimMemoryNeeds); ActivateRegistered(rrAfterConfig); enter_suid(); @@ -1811,6 +1807,7 @@ if (!TheKids.someRunning() && !TheKids.shouldRestartSome()) { leave_suid(); DeactivateRegistered(rrAfterConfig); + DeactivateRegistered(rrClaimMemoryNeeds); enter_suid(); if (TheKids.someSignaled(SIGINT) || TheKids.someSignaled(SIGTERM)) { @@ -1867,7 +1864,6 @@ htcpSocketClose(); #endif #if SQUID_SNMP - snmpConnectionClose(); #endif #if USE_WCCP @@ -1913,6 +1909,7 @@ StoreFileSystem::FreeAllFs(); DiskIOModule::FreeAllModules(); DeactivateRegistered(rrAfterConfig); + DeactivateRegistered(rrClaimMemoryNeeds); #if LEAK_CHECK_MODE && 0 /* doesn't work at the moment */ configFreeMemory(); diff -u -r -N squid-3.2.0.13/src/Makefile.am squid-3.2.0.14/src/Makefile.am --- squid-3.2.0.13/src/Makefile.am 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/Makefile.am 2011-12-13 00:08:18.000000000 +1300 @@ -186,6 +186,7 @@ recv-announce \ tests/testUfs \ tests/testCoss \ + tests/testRock \ tests/testNull \ ufsdump @@ -322,6 +323,7 @@ fd.cc \ fde.cc \ fde.h \ + FileMap.h \ filemap.cc \ forward.cc \ forward.h \ @@ -357,6 +359,7 @@ HttpHeaderMask.h \ HttpHeaderRange.h \ HttpHeaderTools.cc \ + HttpBody.h \ HttpBody.cc \ HttpControlMsg.h \ HttpMsg.cc \ @@ -461,6 +464,8 @@ StoreMetaVary.cc \ StoreMetaVary.h \ StoreSearch.h \ + StoreStats.cc \ + StoreStats.h \ StoreSwapLogData.cc \ StoreSwapLogData.h \ Server.cc \ @@ -626,7 +631,11 @@ $(COMPAT_LIB) \ $(XTRA_LIBS) -dnsserver_SOURCES = dnsserver.cc SquidNew.cc tests/stub_debug.cc test_tools.cc time.cc +## dnsserver is a standalone helper. Do not link to any internal libraries +dnsserver_SOURCES = dnsserver.cc +## SquidNew.cc tests/stub_debug.cc test_tools.cc time.cc +dnsserver_LDADD = $(COMPAT_LIB) + recv_announce_SOURCES = recv-announce.cc ## What requires what.. @@ -901,7 +910,7 @@ true cf_parser.cci: cf.data cf_gen$(EXEEXT) - ./cf_gen cf.data $(srcdir)/cf.data.depend + ./cf_gen$(EXEEXT) cf.data $(srcdir)/cf.data.depend cf_gen_defines.cci: $(srcdir)/cf_gen_defines $(srcdir)/cf.data.pre $(AWK) -f $(srcdir)/cf_gen_defines <$(srcdir)/cf.data.pre >$@ || ($(RM) -f $@ && exit 1) @@ -1001,6 +1010,7 @@ tests/testStore \ tests/testString \ tests/testURL \ + tests/testConfigParser \ $(STORE_TESTS) ## NP: required to run the above list. check_PROGRAMS only builds the binaries... @@ -1034,6 +1044,7 @@ cbdata.cc \ cbdata.h \ ETag.cc \ + HttpBody.h \ HttpBody.cc \ HttpHdrCc.h \ HttpHdrCc.cc \ @@ -1072,6 +1083,7 @@ tests/stub_HelperChildConfig.cc \ tests/stub_StatHist.cc \ tests/stub_store.cc \ + tests/stub_store_stats.cc \ tests/testHttpReply.cc \ tests/testHttpReply.h \ tests/testMain.cc \ @@ -1125,6 +1137,7 @@ DiskIO/WriteRequest.cc \ ETag.cc \ event.cc \ + FileMap.h \ filemap.cc \ HelperChildConfig.h \ HelperChildConfig.cc \ @@ -1176,6 +1189,7 @@ tests/stub_mime.cc \ tests/stub_store.cc \ tests/stub_store_rebuild.cc \ + tests/stub_store_stats.cc \ tests/stub_store_swapout.cc \ tests/stub_tools.cc \ tests/stub_cache_manager.cc \ @@ -1250,6 +1264,7 @@ 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 \ @@ -1285,6 +1300,7 @@ ExternalACLEntry.cc \ fd.cc \ fde.cc \ + FileMap.h \ filemap.cc \ forward.cc \ fqdncache.cc \ @@ -1296,6 +1312,7 @@ HelperChildConfig.cc \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHeader.cc \ HttpHeaderTools.cc \ @@ -1435,7 +1452,9 @@ EventLoop.cc \ event.cc \ fd.cc \ + FileMap.h \ filemap.cc \ + HttpBody.h \ HttpBody.cc \ HttpHdrCc.h \ HttpHdrCc.cc \ @@ -1502,6 +1521,7 @@ tests/stub_pconn.cc \ tests/stub_Port.cc \ tests/stub_store_client.cc \ + tests/stub_store_stats.cc \ tests/stub_store_rebuild.cc \ tests/stub_tools.cc \ tests/stub_UdsOp.cc \ @@ -1600,6 +1620,7 @@ FadingCounter.cc \ fd.cc \ fde.cc \ + FileMap.h \ filemap.cc \ forward.cc \ fqdncache.cc \ @@ -1611,6 +1632,7 @@ hier_code.h \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHeader.cc \ HttpHeaderTools.cc \ @@ -1692,6 +1714,7 @@ tests/testMain.cc \ tests/stub_main_cc.cc \ tests/stub_ipc_Forwarder.cc \ + tests/stub_store_stats.cc \ time.cc \ tools.cc \ tunnel.cc \ @@ -1787,6 +1810,7 @@ FadingCounter.cc \ fd.cc \ fde.cc \ + FileMap.h \ filemap.cc \ forward.cc \ fqdncache.cc \ @@ -1798,6 +1822,7 @@ hier_code.h \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHeader.cc \ HttpHeaderTools.cc \ @@ -1878,6 +1903,7 @@ tests/testMain.cc \ tests/stub_main_cc.cc \ tests/stub_ipc_Forwarder.cc \ + tests/stub_store_stats.cc \ time.cc \ tools.cc \ tunnel.cc \ @@ -1972,6 +1998,7 @@ FadingCounter.cc \ fd.cc \ fde.cc \ + FileMap.h \ filemap.cc \ forward.cc \ fqdncache.cc \ @@ -1983,6 +2010,7 @@ hier_code.h \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHdrCc.h \ HttpHdrCc.cc \ @@ -2060,6 +2088,7 @@ tests/stub_ipc_Forwarder.cc \ tests/stub_main_cc.cc \ tests/stub_MemStore.cc \ + tests/stub_store_stats.cc \ time.cc \ tools.cc \ tunnel.cc \ @@ -2165,6 +2194,7 @@ 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 \ @@ -2209,6 +2239,7 @@ hier_code.h \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHeader.cc \ HttpHeaderTools.cc \ @@ -2345,6 +2376,7 @@ ETag.cc \ event.cc \ EventLoop.cc \ + FileMap.h \ filemap.cc \ HttpHdrCc.h \ HttpHdrCc.cc \ @@ -2398,6 +2430,8 @@ tests/stub_helper.cc \ tests/stub_HelperChildConfig.cc \ tests/stub_http.cc \ + HttpBody.h \ + HttpBody.cc \ tests/stub_HttpReply.cc \ tests/stub_HttpRequest.cc \ tests/stub_libcomm.cc \ @@ -2406,6 +2440,7 @@ tests/stub_mime.cc \ tests/stub_Port.cc \ tests/stub_store_client.cc \ + tests/stub_store_stats.cc \ tests/stub_store_rebuild.cc \ tests/stub_store_swapout.cc \ tests/stub_tools.cc \ @@ -2530,9 +2565,12 @@ tests/stub_UdsOp.cc \ tests/stub_internal.cc \ tests/stub_store_rebuild.cc \ + tests/stub_store_stats.cc \ fd.cc \ disk.cc \ + FileMap.h \ filemap.cc \ + HttpBody.h \ HttpBody.cc \ HttpReply.cc \ HttpStatusLine.cc \ @@ -2651,6 +2689,132 @@ tests_testUfs_DEPENDENCIES = \ $(SWAP_TEST_DS) +tests_testRock_SOURCES = \ + cbdata.cc \ + CacheDigest.cc \ + ConfigOption.cc \ + ConfigParser.cc \ + disk.cc \ + ETag.cc \ + EventLoop.cc \ + event.cc \ + fd.cc \ + FileMap.h \ + filemap.cc \ + HttpBody.h \ + HttpBody.cc \ + HttpHdrCc.cc \ + HttpHdrContRange.cc \ + HttpHdrRange.cc \ + HttpHdrSc.cc \ + HttpHdrScTarget.cc \ + HttpHeader.cc \ + HttpHeaderTools.cc \ + HttpMsg.cc \ + HttpReply.cc \ + HttpRequestMethod.cc \ + HttpStatusLine.cc \ + int.cc \ + list.cc \ + mem.cc \ + MemBuf.cc \ + MemObject.cc \ + mem_node.cc \ + Packer.cc \ + Parsing.cc \ + RemovalPolicy.cc \ + StatHist.cc \ + stmem.cc \ + store.cc \ + StoreFileSystem.cc \ + StoreIOState.cc \ + StoreMeta.cc \ + StoreMetaMD5.cc \ + StoreMetaSTD.cc \ + StoreMetaSTDLFS.cc \ + StoreMetaURL.cc \ + StoreMetaUnpacker.cc \ + StoreMetaVary.cc \ + StoreSwapLogData.cc \ + store_dir.cc \ + store_io.cc \ + store_key_md5.cc \ + store_swapmeta.cc \ + store_swapout.cc \ + String.cc \ + SwapDir.cc \ + tests/testRock.cc \ + tests/testMain.cc \ + tests/testRock.h \ + tests/testStoreSupport.cc \ + tests/testStoreSupport.h \ + tests/stub_access_log.cc \ + tests/stub_cache_cf.cc \ + tests/stub_cache_manager.cc \ + tests/stub_client_db.cc \ + tests/stub_client_side_request.cc \ + tests/stub_debug.cc \ + tests/stub_errorpage.cc \ + tests/stub_HelperChildConfig.cc \ + tests/stub_http.cc \ + tests/stub_HttpRequest.cc \ + tests/stub_icp.cc \ + tests/stub_ipc.cc \ + tests/stub_ipcache.cc \ + tests/stub_libicmp.cc \ + tests/stub_MemStore.cc \ + tests/stub_mime.cc \ + tests/stub_Port.cc \ + tests/stub_pconn.cc \ + tests/stub_store_client.cc \ + tests/stub_store_rebuild.cc \ + tests/stub_store_stats.cc \ + tests/stub_tools.cc \ + tests/stub_UdsOp.cc \ + time.cc \ + url.cc \ + URLScheme.cc \ + wordlist.cc \ + $(DELAY_POOL_SOURCE) \ + $(DISKIO_SOURCE) \ + $(UNLINKDSOURCE) +nodist_tests_testRock_SOURCES = \ + $(DISKIO_GEN_SOURCE) \ + swap_log_op.cc \ + SquidMath.cc \ + SquidMath.h \ + $(TESTSOURCES) +tests_testRock_LDADD = \ + anyp/libanyp.la \ + libsquid.la \ + comm/libcomm.la \ + ip/libip.la \ + fs/libfs.la \ + $(AUTH_LIBS) \ + $(COMMON_LIBS) \ + $(REPL_OBJS) \ + $(DISK_LIBS) \ + $(DISK_OS_LIBS) \ + acl/libacls.la \ + acl/libapi.la \ + acl/libstate.la \ + eui/libeui.la \ + ipc/libipc.la \ + mgr/libmgr.la \ + base/libbase.la \ + $(SSL_LIBS) \ + $(top_builddir)/lib/libmisccontainers.la \ + $(top_builddir)/lib/libmiscencoding.la \ + $(top_builddir)/lib/libmiscutil.la \ + $(REGEXLIB) \ + $(SQUID_CPPUNIT_LIBS) \ + $(SSLLIB) \ + $(COMPAT_LIB) \ + $(XTRA_LIBS) +tests_testRock_LDFLAGS = $(LIBADD_DL) +tests_testRock_DEPENDENCIES = \ + $(SWAP_TEST_DS) + tests_testCoss_SOURCES = \ tests/testCoss.cc \ tests/testMain.cc \ @@ -2663,9 +2827,12 @@ tests/stub_ipc.cc \ tests/stub_pconn.cc \ tests/stub_store_rebuild.cc \ + tests/stub_store_stats.cc \ fd.cc \ disk.cc \ + FileMap.h \ filemap.cc \ + HttpBody.h \ HttpBody.cc \ HttpReply.cc \ HttpStatusLine.cc \ @@ -2734,6 +2901,7 @@ tests/stub_MemStore.cc \ tests/stub_Port.cc \ tests/stub_store_client.cc \ + tests/stub_store_stats.cc \ tests/stub_tools.cc \ tests/stub_UdsOp.cc \ tests/testStoreSupport.cc \ @@ -2792,9 +2960,12 @@ tests/stub_internal.cc \ tests/stub_CommIO.cc \ tests/stub_store_rebuild.cc \ + tests/stub_store_stats.cc \ fd.cc \ disk.cc \ + FileMap.h \ filemap.cc \ + HttpBody.h \ HttpBody.cc \ HttpReply.cc \ HttpStatusLine.cc \ @@ -2863,6 +3034,7 @@ tests/stub_access_log.cc \ refresh.cc \ tests/stub_store_client.cc \ + tests/stub_store_stats.cc \ tests/stub_tools.cc \ tests/testStoreSupport.cc \ tests/testStoreSupport.h \ @@ -2941,6 +3113,7 @@ ExternalACLEntry.cc \ fd.cc \ fde.cc \ + FileMap.h \ filemap.cc \ forward.cc \ fqdncache.cc \ @@ -2952,6 +3125,7 @@ hier_code.h \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHdrCc.h \ HttpHdrCc.cc \ @@ -3032,6 +3206,7 @@ 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 \ @@ -3091,6 +3266,36 @@ $(REPL_OBJS) \ $(SQUID_CPPUNIT_LA) +tests_testConfigParser_SOURCES = \ + ClientInfo.h \ + mem.cc \ + MemBuf.cc \ + String.cc \ + ConfigParser.cc \ + tests/testMain.cc \ + tests/testConfigParser.cc \ + tests/testConfigParser.h \ + tests/stub_cache_cf.cc \ + tests/stub_cache_manager.cc \ + tests/stub_debug.cc \ + tests/stub_HelperChildConfig.cc \ + time.cc \ + wordlist.cc +nodist_tests_testConfigParser_SOURCES = \ + $(TESTSOURCES) +tests_testConfigParser_LDADD = \ + base/libbase.la \ + libsquid.la \ + ip/libip.la \ + $(top_builddir)/lib/libmiscutil.la \ + $(REGEXLIB) \ + $(SQUID_CPPUNIT_LIBS) \ + $(SSLLIB) \ + $(COMPAT_LIB) \ + $(XTRA_LIBS) +tests_testConfigParser_LDFLAGS = $(LIBADD_DL) +tests_testConfigParser_DEPENDENCIES = \ + $(SQUID_CPPUNIT_LA) TESTS += testHeaders diff -u -r -N squid-3.2.0.13/src/Makefile.in squid-3.2.0.14/src/Makefile.in --- squid-3.2.0.13/src/Makefile.in 2011-10-14 14:47:47.000000000 +1300 +++ squid-3.2.0.14/src/Makefile.in 2011-12-13 00:10:40.000000000 +1300 @@ -53,7 +53,8 @@ tests/test_http_range$(EXEEXT) tests/testHttpParser$(EXEEXT) \ tests/testHttpReply$(EXEEXT) tests/testHttpRequest$(EXEEXT) \ tests/testStore$(EXEEXT) tests/testString$(EXEEXT) \ - tests/testURL$(EXEEXT) $(STORE_TESTS) + tests/testURL$(EXEEXT) tests/testConfigParser$(EXEEXT) \ + $(STORE_TESTS) @USE_LOADABLE_MODULES_TRUE@am__append_1 = $(INCLTDL) @ENABLE_AUTH_TRUE@am__append_2 = auth @ENABLE_AUTH_TRUE@am__append_3 = tests/testACLMaxUserIP @@ -64,7 +65,8 @@ EXTRA_PROGRAMS = DiskIO/DiskDaemon/diskd$(EXEEXT) unlinkd$(EXEEXT) \ dnsserver$(EXEEXT) recv-announce$(EXEEXT) \ tests/testUfs$(EXEEXT) tests/testCoss$(EXEEXT) \ - tests/testNull$(EXEEXT) ufsdump$(EXEEXT) + tests/testRock$(EXEEXT) tests/testNull$(EXEEXT) \ + ufsdump$(EXEEXT) noinst_PROGRAMS = cf_gen$(EXEEXT) sbin_PROGRAMS = squid$(EXEEXT) bin_PROGRAMS = @@ -181,16 +183,9 @@ am_cf_gen_OBJECTS = cf_gen.$(OBJEXT) cf_gen_OBJECTS = $(am_cf_gen_OBJECTS) cf_gen_DEPENDENCIES = -am_dnsserver_OBJECTS = dnsserver.$(OBJEXT) SquidNew.$(OBJEXT) \ - tests/stub_debug.$(OBJEXT) test_tools.$(OBJEXT) time.$(OBJEXT) +am_dnsserver_OBJECTS = dnsserver.$(OBJEXT) dnsserver_OBJECTS = $(am_dnsserver_OBJECTS) -dnsserver_LDADD = $(LDADD) -dnsserver_DEPENDENCIES = $(AUTH_ACL_LIBS) ident/libident.la \ - acl/libacls.la eui/libeui.la acl/libstate.la $(AUTH_LIBS) \ - acl/libapi.la base/libbase.la libsquid.la ip/libip.la \ - fs/libfs.la ipc/libipc.la mgr/libmgr.la $(am__DEPENDENCIES_3) \ - $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_3) +dnsserver_DEPENDENCIES = $(am__DEPENDENCIES_2) am_recv_announce_OBJECTS = recv-announce.$(OBJEXT) recv_announce_OBJECTS = $(am_recv_announce_OBJECTS) recv_announce_LDADD = $(LDADD) @@ -229,18 +224,18 @@ 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.cc forward.cc forward.h fqdncache.cc \ - ftp.cc Generic.h globals.h gopher.cc helper.cc helper.h \ - HelperChildConfig.h HelperChildConfig.cc hier_code.h \ + fde.cc fde.h FileMap.h filemap.cc forward.cc forward.h \ + fqdncache.cc ftp.cc Generic.h globals.h gopher.cc helper.cc \ + helper.h HelperChildConfig.h HelperChildConfig.cc hier_code.h \ HierarchyLogEntry.h htcp.cc htcp.h http.cc http.h \ HttpStatusCode.h HttpStatusLine.cc HttpStatusLine.h \ HttpHdrCc.h HttpHdrCc.cc HttpHdrCc.cci HttpHdrRange.cc \ HttpHdrSc.cc HttpHdrSc.h HttpHdrScTarget.cc HttpHdrScTarget.h \ HttpHdrContRange.cc HttpHdrContRange.h HttpHeader.cc \ HttpHeader.h HttpHeaderMask.h HttpHeaderRange.h \ - HttpHeaderTools.cc HttpBody.cc HttpControlMsg.h HttpMsg.cc \ - HttpMsg.h HttpParser.cc HttpParser.h HttpReply.cc HttpReply.h \ - HttpRequest.cc HttpRequest.h HttpRequestMethod.cc \ + HttpHeaderTools.cc HttpBody.h HttpBody.cc HttpControlMsg.h \ + HttpMsg.cc HttpMsg.h HttpParser.cc HttpParser.h HttpReply.cc \ + HttpReply.h HttpRequest.cc HttpRequest.h HttpRequestMethod.cc \ HttpRequestMethod.h HttpVersion.h ICP.h icp_opcode.h icp_v2.cc \ icp_v3.cc int.cc internal.cc ipc.cc ipc_win32.cc ipcache.cc \ ipcache.h LeakFinder.cc list.cc lookup_t.h main.cc mem.cc \ @@ -264,12 +259,13 @@ StoreMetaSTDLFS.cc StoreMetaSTDLFS.h StoreMetaObjSize.h \ StoreMetaUnpacker.cc StoreMetaUnpacker.h StoreMetaURL.cc \ StoreMetaURL.h StoreMetaVary.cc StoreMetaVary.h StoreSearch.h \ - StoreSwapLogData.cc StoreSwapLogData.h Server.cc Server.h \ - structs.h swap_log_op.h SwapDir.cc SwapDir.h MemStore.cc \ - MemStore.h time.cc TimeOrTag.h tools.cc tunnel.cc typedefs.h \ - unlinkd.cc url.cc URL.h URLScheme.cc URLScheme.h urn.cc \ - wccp.cc wccp2.cc whois.cc wordlist.cc wordlist.h win32.cc \ - WinSvc.cc LoadableModule.h LoadableModule.cc LoadableModules.h \ + StoreStats.cc StoreStats.h StoreSwapLogData.cc \ + StoreSwapLogData.h Server.cc Server.h structs.h swap_log_op.h \ + SwapDir.cc SwapDir.h MemStore.cc MemStore.h time.cc \ + TimeOrTag.h tools.cc tunnel.cc typedefs.h unlinkd.cc url.cc \ + URL.h URLScheme.cc URLScheme.h urn.cc wccp.cc wccp2.cc \ + whois.cc wordlist.cc wordlist.h win32.cc WinSvc.cc \ + LoadableModule.h LoadableModule.cc LoadableModules.h \ LoadableModules.cc am__objects_4 = AclRegs.$(OBJEXT) AuthReg.$(OBJEXT) am__objects_5 = delay_pools.$(OBJEXT) DelayId.$(OBJEXT) \ @@ -343,13 +339,13 @@ StoreMeta.$(OBJEXT) StoreMetaMD5.$(OBJEXT) \ StoreMetaSTD.$(OBJEXT) StoreMetaSTDLFS.$(OBJEXT) \ StoreMetaUnpacker.$(OBJEXT) StoreMetaURL.$(OBJEXT) \ - StoreMetaVary.$(OBJEXT) StoreSwapLogData.$(OBJEXT) \ - Server.$(OBJEXT) SwapDir.$(OBJEXT) MemStore.$(OBJEXT) \ - time.$(OBJEXT) tools.$(OBJEXT) tunnel.$(OBJEXT) \ - $(am__objects_16) url.$(OBJEXT) URLScheme.$(OBJEXT) \ - urn.$(OBJEXT) wccp.$(OBJEXT) wccp2.$(OBJEXT) whois.$(OBJEXT) \ - wordlist.$(OBJEXT) $(am__objects_17) $(am__objects_18) \ - $(am__objects_20) + StoreMetaVary.$(OBJEXT) StoreStats.$(OBJEXT) \ + StoreSwapLogData.$(OBJEXT) Server.$(OBJEXT) SwapDir.$(OBJEXT) \ + MemStore.$(OBJEXT) time.$(OBJEXT) tools.$(OBJEXT) \ + tunnel.$(OBJEXT) $(am__objects_16) url.$(OBJEXT) \ + URLScheme.$(OBJEXT) urn.$(OBJEXT) wccp.$(OBJEXT) \ + wccp2.$(OBJEXT) whois.$(OBJEXT) wordlist.$(OBJEXT) \ + $(am__objects_17) $(am__objects_18) $(am__objects_20) am__EXTRA_squid_SOURCES_DIST = DiskIO/AIO/aio_win32.cc \ DiskIO/AIO/aio_win32.h ConfigOption.h CommonPool.h \ CompositePoolNode.h delay_pools.cc DelayId.cc DelayId.h \ @@ -405,6 +401,7 @@ tests/stub_MemObject.$(OBJEXT) tests/stub_MemStore.$(OBJEXT) \ tests/stub_mime.$(OBJEXT) tests/stub_store.$(OBJEXT) \ tests/stub_store_rebuild.$(OBJEXT) \ + tests/stub_store_stats.$(OBJEXT) \ tests/stub_store_swapout.$(OBJEXT) tests/stub_tools.$(OBJEXT) \ tests/stub_cache_manager.$(OBJEXT) \ tests/testACLMaxUserIP.$(OBJEXT) tests/testMain.$(OBJEXT) \ @@ -430,19 +427,19 @@ HttpRequestMethod.cc mem.cc String.cc \ tests/testCacheManager.cc tests/testCacheManager.h \ tests/testMain.cc tests/stub_main_cc.cc \ - tests/stub_ipc_Forwarder.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 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 \ + 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 \ + 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 \ DiskIO/DiskIOModule.cc DiskIO/ReadRequest.cc \ DiskIO/ReadRequest.h DiskIO/WriteRequest.cc \ @@ -451,16 +448,16 @@ DiskIO/DiskIOModule.h disk.cc dlink.h dlink.cc dns_internal.cc \ DnsLookupDetails.h DnsLookupDetails.cc dns.cc errorpage.cc \ ETag.cc event.cc external_acl.cc ExternalACLEntry.cc fd.cc \ - fde.cc filemap.cc forward.cc fqdncache.cc ftp.cc gopher.cc \ - hier_code.h helper.cc HelperChildConfig.h HelperChildConfig.cc \ - htcp.cc htcp.h http.cc HttpBody.cc HttpHeader.cc \ - HttpHeaderTools.cc HttpHdrCc.h HttpHdrCc.cc HttpHdrCc.cci \ - HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ - HttpHdrScTarget.cc HttpMsg.cc HttpReply.cc HttpStatusLine.cc \ - icp_v2.cc icp_v3.cc ipc.cc ipc_win32.cc ipcache.cc int.cc \ - internal.cc list.cc multicast.cc mem_node.cc MemBuf.cc \ - MemObject.cc mime.cc mime_header.cc neighbors.cc Packer.cc \ - Parsing.cc pconn.cc peer_digest.cc \ + fde.cc FileMap.h filemap.cc forward.cc fqdncache.cc ftp.cc \ + gopher.cc hier_code.h helper.cc HelperChildConfig.h \ + HelperChildConfig.cc htcp.cc htcp.h http.cc HttpBody.h \ + HttpBody.cc HttpHeader.cc HttpHeaderTools.cc HttpHdrCc.h \ + HttpHdrCc.cc HttpHdrCc.cci HttpHdrContRange.cc HttpHdrRange.cc \ + HttpHdrSc.cc HttpHdrScTarget.cc HttpMsg.cc HttpReply.cc \ + HttpStatusLine.cc icp_v2.cc icp_v3.cc ipc.cc ipc_win32.cc \ + ipcache.cc int.cc internal.cc list.cc multicast.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 redirect.cc refresh.cc RemovalPolicy.cc \ Server.cc snmp_core.h snmp_core.cc snmp_agent.cc SquidMath.h \ @@ -478,7 +475,8 @@ HttpRequestMethod.$(OBJEXT) mem.$(OBJEXT) String.$(OBJEXT) \ tests/testCacheManager.$(OBJEXT) tests/testMain.$(OBJEXT) \ tests/stub_main_cc.$(OBJEXT) \ - tests/stub_ipc_Forwarder.$(OBJEXT) time.$(OBJEXT) \ + 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) \ @@ -530,14 +528,28 @@ tests_testCacheManager_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(tests_testCacheManager_LDFLAGS) $(LDFLAGS) -o $@ +am_tests_testConfigParser_OBJECTS = mem.$(OBJEXT) MemBuf.$(OBJEXT) \ + String.$(OBJEXT) ConfigParser.$(OBJEXT) \ + tests/testMain.$(OBJEXT) tests/testConfigParser.$(OBJEXT) \ + tests/stub_cache_cf.$(OBJEXT) \ + tests/stub_cache_manager.$(OBJEXT) tests/stub_debug.$(OBJEXT) \ + tests/stub_HelperChildConfig.$(OBJEXT) time.$(OBJEXT) \ + wordlist.$(OBJEXT) +nodist_tests_testConfigParser_OBJECTS = $(am__objects_23) +tests_testConfigParser_OBJECTS = $(am_tests_testConfigParser_OBJECTS) \ + $(nodist_tests_testConfigParser_OBJECTS) +tests_testConfigParser_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(tests_testConfigParser_LDFLAGS) $(LDFLAGS) -o $@ am__tests_testCoss_SOURCES_DIST = tests/testCoss.cc tests/testMain.cc \ tests/testCoss.h tests/stub_cache_manager.cc \ tests/stub_client_db.cc tests/stub_debug.cc \ tests/stub_HelperChildConfig.cc tests/stub_internal.cc \ tests/stub_ipc.cc tests/stub_pconn.cc \ - tests/stub_store_rebuild.cc fd.cc disk.cc filemap.cc \ - HttpBody.cc HttpReply.cc HttpStatusLine.cc int.cc list.cc \ - MemObject.cc StoreSwapLogData.cc StoreIOState.cc StoreMeta.cc \ + tests/stub_store_rebuild.cc tests/stub_store_stats.cc fd.cc \ + disk.cc FileMap.h filemap.cc HttpBody.h HttpBody.cc \ + HttpReply.cc HttpStatusLine.cc int.cc list.cc MemObject.cc \ + StoreSwapLogData.cc StoreIOState.cc StoreMeta.cc \ StoreMetaMD5.cc StoreMetaSTD.cc StoreMetaSTDLFS.cc \ StoreMetaUnpacker.cc StoreMetaURL.cc StoreMetaVary.cc \ StoreFileSystem.cc store_io.cc store_swapout.cc \ @@ -575,8 +587,8 @@ tests/stub_HelperChildConfig.$(OBJEXT) \ tests/stub_internal.$(OBJEXT) tests/stub_ipc.$(OBJEXT) \ tests/stub_pconn.$(OBJEXT) tests/stub_store_rebuild.$(OBJEXT) \ - fd.$(OBJEXT) disk.$(OBJEXT) filemap.$(OBJEXT) \ - HttpBody.$(OBJEXT) HttpReply.$(OBJEXT) \ + tests/stub_store_stats.$(OBJEXT) fd.$(OBJEXT) disk.$(OBJEXT) \ + filemap.$(OBJEXT) HttpBody.$(OBJEXT) HttpReply.$(OBJEXT) \ HttpStatusLine.$(OBJEXT) int.$(OBJEXT) list.$(OBJEXT) \ MemObject.$(OBJEXT) StoreSwapLogData.$(OBJEXT) \ StoreIOState.$(OBJEXT) StoreMeta.$(OBJEXT) \ @@ -605,7 +617,8 @@ tests/stub_HttpRequest.$(OBJEXT) \ tests/stub_access_log.$(OBJEXT) refresh.$(OBJEXT) \ tests/stub_MemStore.$(OBJEXT) tests/stub_Port.$(OBJEXT) \ - tests/stub_store_client.$(OBJEXT) tests/stub_tools.$(OBJEXT) \ + tests/stub_store_client.$(OBJEXT) \ + tests/stub_store_stats.$(OBJEXT) tests/stub_tools.$(OBJEXT) \ tests/stub_UdsOp.$(OBJEXT) tests/testStoreSupport.$(OBJEXT) \ time.$(OBJEXT) URLScheme.$(OBJEXT) wordlist.$(OBJEXT) \ $(am__objects_7) @@ -629,8 +642,8 @@ DiskIO/WriteRequest.cc DiskIO/WriteRequest.h DiskIO/DiskFile.h \ DiskIO/DiskIOStrategy.h DiskIO/IORequestor.h \ DiskIO/DiskIOModule.h disk.cc ETag.cc EventLoop.cc event.cc \ - fd.cc filemap.cc HttpBody.cc HttpHdrCc.h HttpHdrCc.cc \ - HttpHdrCc.cci HttpHdrContRange.cc HttpHdrSc.cc \ + fd.cc FileMap.h filemap.cc HttpBody.h HttpBody.cc HttpHdrCc.h \ + HttpHdrCc.cc HttpHdrCc.cci HttpHdrContRange.cc HttpHdrSc.cc \ HttpHdrScTarget.cc HttpHdrRange.cc HttpHeaderTools.cc \ HttpHeader.cc HttpMsg.cc HttpReply.cc HttpRequestMethod.cc \ HttpStatusLine.cc int.cc list.cc MemBuf.cc MemObject.cc \ @@ -650,9 +663,9 @@ tests/stub_ipc.cc tests/stub_ipcache.cc tests/stub_libicmp.cc \ tests/stub_MemStore.cc tests/stub_mime.cc tests/stub_pconn.cc \ tests/stub_Port.cc tests/stub_store_client.cc \ - tests/stub_store_rebuild.cc tests/stub_tools.cc \ - tests/stub_UdsOp.cc tests/testDiskIO.cc tests/testDiskIO.h \ - tests/testMain.cc tests/testStoreSupport.cc \ + tests/stub_store_stats.cc tests/stub_store_rebuild.cc \ + tests/stub_tools.cc tests/stub_UdsOp.cc tests/testDiskIO.cc \ + tests/testDiskIO.h tests/testMain.cc tests/testStoreSupport.cc \ tests/testStoreSupport.h time.cc unlinkd.cc url.cc \ URLScheme.cc win32.cc wordlist.cc am_tests_testDiskIO_OBJECTS = CacheDigest.$(OBJEXT) cbdata.$(OBJEXT) \ @@ -691,6 +704,7 @@ tests/stub_libicmp.$(OBJEXT) tests/stub_MemStore.$(OBJEXT) \ tests/stub_mime.$(OBJEXT) tests/stub_pconn.$(OBJEXT) \ tests/stub_Port.$(OBJEXT) tests/stub_store_client.$(OBJEXT) \ + tests/stub_store_stats.$(OBJEXT) \ tests/stub_store_rebuild.$(OBJEXT) tests/stub_tools.$(OBJEXT) \ tests/stub_UdsOp.$(OBJEXT) tests/testDiskIO.$(OBJEXT) \ tests/testMain.$(OBJEXT) tests/testStoreSupport.$(OBJEXT) \ @@ -723,21 +737,21 @@ DiskIO/DiskIOModule.h disk.cc dlink.h dlink.cc dns_internal.cc \ DnsLookupDetails.h DnsLookupDetails.cc dns.cc errorpage.cc \ ETag.cc event.cc EventLoop.h EventLoop.cc external_acl.cc \ - ExternalACLEntry.cc FadingCounter.cc fd.cc fde.cc filemap.cc \ - forward.cc fqdncache.cc ftp.cc gopher.cc helper.cc \ + ExternalACLEntry.cc FadingCounter.cc fd.cc fde.cc FileMap.h \ + filemap.cc forward.cc fqdncache.cc ftp.cc gopher.cc helper.cc \ HelperChildConfig.h HelperChildConfig.cc hier_code.h htcp.cc \ - htcp.h http.cc HttpBody.cc HttpHeader.cc HttpHeaderTools.cc \ - HttpHdrCc.h HttpHdrCc.cc HttpHdrCc.cci HttpHdrContRange.cc \ - HttpHdrRange.cc HttpHdrSc.cc HttpHdrScTarget.cc HttpMsg.cc \ - HttpParser.cc HttpParser.h HttpReply.cc HttpRequest.cc \ - HttpRequestMethod.cc HttpStatusLine.cc icp_v2.cc icp_v3.cc \ - ipc.cc ipc_win32.cc ipcache.cc int.cc internal.cc list.cc \ - mem.cc mem_node.cc 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 \ + htcp.h http.cc HttpBody.h HttpBody.cc HttpHeader.cc \ + HttpHeaderTools.cc HttpHdrCc.h HttpHdrCc.cc HttpHdrCc.cci \ + HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ + HttpHdrScTarget.cc HttpMsg.cc HttpParser.cc HttpParser.h \ + HttpReply.cc HttpRequest.cc HttpRequestMethod.cc \ + HttpStatusLine.cc icp_v2.cc icp_v3.cc ipc.cc ipc_win32.cc \ + ipcache.cc int.cc internal.cc list.cc mem.cc mem_node.cc \ + 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 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 \ @@ -748,9 +762,9 @@ StoreSwapLogData.cc String.cc SwapDir.cc \ tests/CapturingStoreEntry.h tests/testEvent.cc \ tests/testEvent.h tests/testMain.cc tests/stub_main_cc.cc \ - tests/stub_ipc_Forwarder.cc time.cc tools.cc tunnel.cc \ - MemStore.cc unlinkd.cc url.cc URLScheme.cc urn.cc wccp2.cc \ - whois.cc win32.cc wordlist.cc + tests/stub_ipc_Forwarder.cc tests/stub_store_stats.cc time.cc \ + tools.cc tunnel.cc MemStore.cc unlinkd.cc url.cc URLScheme.cc \ + urn.cc wccp2.cc whois.cc win32.cc wordlist.cc am_tests_testEvent_OBJECTS = $(am__objects_4) BodyPipe.$(OBJEXT) \ CacheDigest.$(OBJEXT) cache_cf.$(OBJEXT) \ cache_manager.$(OBJEXT) carp.$(OBJEXT) cbdata.$(OBJEXT) \ @@ -797,7 +811,8 @@ StoreMetaVary.$(OBJEXT) StoreSwapLogData.$(OBJEXT) \ String.$(OBJEXT) SwapDir.$(OBJEXT) tests/testEvent.$(OBJEXT) \ tests/testMain.$(OBJEXT) tests/stub_main_cc.$(OBJEXT) \ - tests/stub_ipc_Forwarder.$(OBJEXT) time.$(OBJEXT) \ + tests/stub_ipc_Forwarder.$(OBJEXT) \ + tests/stub_store_stats.$(OBJEXT) time.$(OBJEXT) \ tools.$(OBJEXT) tunnel.$(OBJEXT) MemStore.$(OBJEXT) \ $(am__objects_16) url.$(OBJEXT) URLScheme.$(OBJEXT) \ urn.$(OBJEXT) wccp2.$(OBJEXT) whois.$(OBJEXT) \ @@ -828,32 +843,34 @@ DiskIO/DiskIOModule.h disk.cc dlink.h dlink.cc dns_internal.cc \ DnsLookupDetails.h DnsLookupDetails.cc dns.cc errorpage.cc \ ETag.cc EventLoop.h EventLoop.cc event.cc external_acl.cc \ - ExternalACLEntry.cc FadingCounter.cc fd.cc fde.cc filemap.cc \ - forward.cc fqdncache.cc ftp.cc gopher.cc helper.cc \ + ExternalACLEntry.cc FadingCounter.cc fd.cc fde.cc FileMap.h \ + filemap.cc forward.cc fqdncache.cc ftp.cc gopher.cc helper.cc \ HelperChildConfig.h HelperChildConfig.cc hier_code.h htcp.cc \ - htcp.h http.cc HttpBody.cc HttpHeader.cc HttpHeaderTools.cc \ - HttpHdrCc.h HttpHdrCc.cc HttpHdrCc.cci HttpHdrContRange.cc \ - HttpHdrRange.cc HttpHdrSc.cc HttpHdrScTarget.cc HttpMsg.cc \ - HttpParser.cc HttpParser.h HttpReply.cc HttpRequest.cc \ - HttpRequestMethod.cc HttpStatusLine.cc icp_v2.cc icp_v3.cc \ - ipc.cc ipc_win32.cc ipcache.cc int.cc internal.cc list.cc \ - MemBuf.cc MemObject.cc 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 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 \ + htcp.h http.cc HttpBody.h HttpBody.cc HttpHeader.cc \ + HttpHeaderTools.cc HttpHdrCc.h HttpHdrCc.cc HttpHdrCc.cci \ + HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ + HttpHdrScTarget.cc HttpMsg.cc HttpParser.cc HttpParser.h \ + HttpReply.cc HttpRequest.cc HttpRequestMethod.cc \ + HttpStatusLine.cc icp_v2.cc icp_v3.cc ipc.cc ipc_win32.cc \ + ipcache.cc int.cc internal.cc list.cc MemBuf.cc MemObject.cc \ + 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 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 \ - tests/stub_main_cc.cc tests/stub_ipc_Forwarder.cc time.cc \ - tools.cc tunnel.cc MemStore.cc unlinkd.cc url.cc URLScheme.cc \ - urn.cc wccp2.cc whois.cc win32.cc wordlist.cc + tests/stub_main_cc.cc tests/stub_ipc_Forwarder.cc \ + tests/stub_store_stats.cc time.cc tools.cc tunnel.cc \ + MemStore.cc unlinkd.cc url.cc URLScheme.cc urn.cc wccp2.cc \ + whois.cc win32.cc wordlist.cc am_tests_testEventLoop_OBJECTS = $(am__objects_4) BodyPipe.$(OBJEXT) \ CacheDigest.$(OBJEXT) cache_manager.$(OBJEXT) \ cache_cf.$(OBJEXT) carp.$(OBJEXT) cbdata.$(OBJEXT) \ @@ -901,7 +918,8 @@ String.$(OBJEXT) SwapDir.$(OBJEXT) \ tests/testEventLoop.$(OBJEXT) tests/testMain.$(OBJEXT) \ tests/stub_main_cc.$(OBJEXT) \ - tests/stub_ipc_Forwarder.$(OBJEXT) time.$(OBJEXT) \ + tests/stub_ipc_Forwarder.$(OBJEXT) \ + tests/stub_store_stats.$(OBJEXT) time.$(OBJEXT) \ tools.$(OBJEXT) tunnel.$(OBJEXT) MemStore.$(OBJEXT) \ $(am__objects_16) url.$(OBJEXT) URLScheme.$(OBJEXT) \ urn.$(OBJEXT) wccp2.$(OBJEXT) whois.$(OBJEXT) \ @@ -939,8 +957,8 @@ tests/stub_cache_manager.$(OBJEXT) tests/stub_debug.$(OBJEXT) \ tests/stub_HelperChildConfig.$(OBJEXT) \ tests/stub_StatHist.$(OBJEXT) tests/stub_store.$(OBJEXT) \ - tests/testHttpReply.$(OBJEXT) tests/testMain.$(OBJEXT) \ - time.$(OBJEXT) wordlist.$(OBJEXT) + tests/stub_store_stats.$(OBJEXT) tests/testHttpReply.$(OBJEXT) \ + tests/testMain.$(OBJEXT) time.$(OBJEXT) wordlist.$(OBJEXT) nodist_tests_testHttpReply_OBJECTS = $(am__objects_23) tests_testHttpReply_OBJECTS = $(am_tests_testHttpReply_OBJECTS) \ $(nodist_tests_testHttpReply_OBJECTS) @@ -953,51 +971,53 @@ tests/testHttpRequest.cc tests/testHttpRequestMethod.h \ tests/testHttpRequestMethod.cc tests/testMain.cc \ tests/stub_DiskIOModule.cc tests/stub_main_cc.cc \ - tests/stub_ipc_Forwarder.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 \ + 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 \ ClientDelayConfig.cc ClientDelayConfig.h disk.cc dlink.h \ dlink.cc dns_internal.cc DnsLookupDetails.h \ DnsLookupDetails.cc dns.cc errorpage.cc ETag.cc \ external_acl.cc ExternalACLEntry.cc fd.cc fde.cc forward.cc \ fqdncache.cc ftp.cc gopher.cc helper.cc HelperChildConfig.h \ HelperChildConfig.cc hier_code.h htcp.cc htcp.h http.cc \ - HttpBody.cc HttpHeader.cc HttpHeaderTools.cc HttpHdrCc.h \ - HttpHdrCc.cc HttpHdrCc.cci HttpHdrContRange.cc HttpHdrRange.cc \ - HttpHdrSc.cc HttpHdrScTarget.cc HttpMsg.cc HttpReply.cc \ - HttpStatusLine.cc icp_v2.cc icp_v3.cc ipc.cc ipc_win32.cc \ - ipcache.cc int.cc internal.cc list.cc multicast.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 redirect.cc refresh.cc RemovalPolicy.cc \ - Server.cc snmp_core.h snmp_core.cc snmp_agent.cc SquidMath.h \ - SquidMath.cc stat.cc 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 event.cc tools.cc \ - tunnel.cc SwapDir.cc MemStore.cc url.cc URLScheme.cc urn.cc \ - wccp2.cc whois.cc FadingCounter.cc win32.cc wordlist.cc + HttpBody.h HttpBody.cc HttpHeader.cc HttpHeaderTools.cc \ + HttpHdrCc.h HttpHdrCc.cc HttpHdrCc.cci HttpHdrContRange.cc \ + HttpHdrRange.cc HttpHdrSc.cc HttpHdrScTarget.cc HttpMsg.cc \ + HttpReply.cc HttpStatusLine.cc icp_v2.cc icp_v3.cc ipc.cc \ + ipc_win32.cc ipcache.cc int.cc internal.cc list.cc \ + multicast.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 redirect.cc refresh.cc \ + RemovalPolicy.cc Server.cc snmp_core.h snmp_core.cc \ + snmp_agent.cc SquidMath.h SquidMath.cc stat.cc 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 event.cc tools.cc tunnel.cc SwapDir.cc \ + MemStore.cc url.cc URLScheme.cc urn.cc wccp2.cc whois.cc \ + FadingCounter.cc win32.cc wordlist.cc am_tests_testHttpRequest_OBJECTS = $(am__objects_4) \ HttpParser.$(OBJEXT) HttpRequest.$(OBJEXT) \ HttpRequestMethod.$(OBJEXT) mem.$(OBJEXT) String.$(OBJEXT) \ tests/testHttpRequest.$(OBJEXT) \ tests/testHttpRequestMethod.$(OBJEXT) tests/testMain.$(OBJEXT) \ tests/stub_DiskIOModule.$(OBJEXT) tests/stub_main_cc.$(OBJEXT) \ - tests/stub_ipc_Forwarder.$(OBJEXT) time.$(OBJEXT) \ + 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) \ @@ -1050,9 +1070,10 @@ $(CXXFLAGS) $(tests_testHttpRequest_LDFLAGS) $(LDFLAGS) -o $@ am__tests_testNull_SOURCES_DIST = tests/testNull.cc tests/testMain.cc \ tests/testNull.h tests/stub_internal.cc tests/stub_CommIO.cc \ - tests/stub_store_rebuild.cc fd.cc disk.cc filemap.cc \ - HttpBody.cc HttpReply.cc HttpStatusLine.cc int.cc list.cc \ - MemObject.cc StoreSwapLogData.cc StoreIOState.cc StoreMeta.cc \ + tests/stub_store_rebuild.cc tests/stub_store_stats.cc fd.cc \ + disk.cc FileMap.h filemap.cc HttpBody.h HttpBody.cc \ + HttpReply.cc HttpStatusLine.cc int.cc list.cc MemObject.cc \ + StoreSwapLogData.cc StoreIOState.cc StoreMeta.cc \ StoreMetaMD5.cc StoreMetaSTD.cc StoreMetaSTDLFS.cc \ StoreMetaUnpacker.cc StoreMetaURL.cc StoreMetaVary.cc \ StoreFileSystem.cc store_io.cc store_swapout.cc \ @@ -1086,8 +1107,8 @@ am_tests_testNull_OBJECTS = tests/testNull.$(OBJEXT) \ tests/testMain.$(OBJEXT) tests/stub_internal.$(OBJEXT) \ tests/stub_CommIO.$(OBJEXT) tests/stub_store_rebuild.$(OBJEXT) \ - fd.$(OBJEXT) disk.$(OBJEXT) filemap.$(OBJEXT) \ - HttpBody.$(OBJEXT) HttpReply.$(OBJEXT) \ + tests/stub_store_stats.$(OBJEXT) fd.$(OBJEXT) disk.$(OBJEXT) \ + filemap.$(OBJEXT) HttpBody.$(OBJEXT) HttpReply.$(OBJEXT) \ HttpStatusLine.$(OBJEXT) int.$(OBJEXT) list.$(OBJEXT) \ MemObject.$(OBJEXT) StoreSwapLogData.$(OBJEXT) \ StoreIOState.$(OBJEXT) StoreMeta.$(OBJEXT) \ @@ -1116,7 +1137,8 @@ tests/stub_errorpage.$(OBJEXT) \ tests/stub_HttpRequest.$(OBJEXT) \ tests/stub_access_log.$(OBJEXT) refresh.$(OBJEXT) \ - tests/stub_store_client.$(OBJEXT) tests/stub_tools.$(OBJEXT) \ + tests/stub_store_client.$(OBJEXT) \ + tests/stub_store_stats.$(OBJEXT) tests/stub_tools.$(OBJEXT) \ tests/testStoreSupport.$(OBJEXT) time.$(OBJEXT) \ URLScheme.$(OBJEXT) wordlist.$(OBJEXT) $(am__objects_7) nodist_tests_testNull_OBJECTS = $(am__objects_23) $(am__objects_21) @@ -1125,6 +1147,90 @@ tests_testNull_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(tests_testNull_LDFLAGS) $(LDFLAGS) -o $@ +am__tests_testRock_SOURCES_DIST = cbdata.cc CacheDigest.cc \ + ConfigOption.cc ConfigParser.cc disk.cc ETag.cc EventLoop.cc \ + event.cc fd.cc FileMap.h filemap.cc HttpBody.h HttpBody.cc \ + HttpHdrCc.cc HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ + HttpHdrScTarget.cc HttpHeader.cc HttpHeaderTools.cc HttpMsg.cc \ + HttpReply.cc HttpRequestMethod.cc HttpStatusLine.cc int.cc \ + list.cc mem.cc MemBuf.cc MemObject.cc mem_node.cc Packer.cc \ + Parsing.cc RemovalPolicy.cc StatHist.cc stmem.cc store.cc \ + StoreFileSystem.cc StoreIOState.cc StoreMeta.cc \ + StoreMetaMD5.cc StoreMetaSTD.cc StoreMetaSTDLFS.cc \ + StoreMetaURL.cc StoreMetaUnpacker.cc StoreMetaVary.cc \ + StoreSwapLogData.cc store_dir.cc store_io.cc store_key_md5.cc \ + store_swapmeta.cc store_swapout.cc String.cc SwapDir.cc \ + tests/testRock.cc tests/testMain.cc tests/testRock.h \ + tests/testStoreSupport.cc tests/testStoreSupport.h \ + tests/stub_access_log.cc tests/stub_cache_cf.cc \ + tests/stub_cache_manager.cc tests/stub_client_db.cc \ + tests/stub_client_side_request.cc tests/stub_debug.cc \ + tests/stub_errorpage.cc tests/stub_HelperChildConfig.cc \ + tests/stub_http.cc tests/stub_HttpRequest.cc tests/stub_icp.cc \ + tests/stub_ipc.cc tests/stub_ipcache.cc tests/stub_libicmp.cc \ + tests/stub_MemStore.cc tests/stub_mime.cc tests/stub_Port.cc \ + tests/stub_pconn.cc tests/stub_store_client.cc \ + tests/stub_store_rebuild.cc tests/stub_store_stats.cc \ + tests/stub_tools.cc tests/stub_UdsOp.cc time.cc url.cc \ + URLScheme.cc wordlist.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 \ + DiskIO/WriteRequest.h DiskIO/DiskFile.h \ + DiskIO/DiskIOStrategy.h DiskIO/IORequestor.h \ + DiskIO/DiskIOModule.h unlinkd.cc +am_tests_testRock_OBJECTS = cbdata.$(OBJEXT) CacheDigest.$(OBJEXT) \ + ConfigOption.$(OBJEXT) ConfigParser.$(OBJEXT) disk.$(OBJEXT) \ + ETag.$(OBJEXT) EventLoop.$(OBJEXT) event.$(OBJEXT) \ + fd.$(OBJEXT) filemap.$(OBJEXT) HttpBody.$(OBJEXT) \ + HttpHdrCc.$(OBJEXT) HttpHdrContRange.$(OBJEXT) \ + HttpHdrRange.$(OBJEXT) HttpHdrSc.$(OBJEXT) \ + HttpHdrScTarget.$(OBJEXT) HttpHeader.$(OBJEXT) \ + HttpHeaderTools.$(OBJEXT) HttpMsg.$(OBJEXT) \ + HttpReply.$(OBJEXT) HttpRequestMethod.$(OBJEXT) \ + HttpStatusLine.$(OBJEXT) int.$(OBJEXT) list.$(OBJEXT) \ + mem.$(OBJEXT) MemBuf.$(OBJEXT) MemObject.$(OBJEXT) \ + mem_node.$(OBJEXT) Packer.$(OBJEXT) Parsing.$(OBJEXT) \ + RemovalPolicy.$(OBJEXT) StatHist.$(OBJEXT) stmem.$(OBJEXT) \ + store.$(OBJEXT) StoreFileSystem.$(OBJEXT) \ + StoreIOState.$(OBJEXT) StoreMeta.$(OBJEXT) \ + StoreMetaMD5.$(OBJEXT) StoreMetaSTD.$(OBJEXT) \ + StoreMetaSTDLFS.$(OBJEXT) StoreMetaURL.$(OBJEXT) \ + StoreMetaUnpacker.$(OBJEXT) StoreMetaVary.$(OBJEXT) \ + StoreSwapLogData.$(OBJEXT) store_dir.$(OBJEXT) \ + store_io.$(OBJEXT) store_key_md5.$(OBJEXT) \ + store_swapmeta.$(OBJEXT) store_swapout.$(OBJEXT) \ + String.$(OBJEXT) SwapDir.$(OBJEXT) tests/testRock.$(OBJEXT) \ + tests/testMain.$(OBJEXT) tests/testStoreSupport.$(OBJEXT) \ + tests/stub_access_log.$(OBJEXT) tests/stub_cache_cf.$(OBJEXT) \ + tests/stub_cache_manager.$(OBJEXT) \ + tests/stub_client_db.$(OBJEXT) \ + tests/stub_client_side_request.$(OBJEXT) \ + tests/stub_debug.$(OBJEXT) tests/stub_errorpage.$(OBJEXT) \ + tests/stub_HelperChildConfig.$(OBJEXT) \ + tests/stub_http.$(OBJEXT) tests/stub_HttpRequest.$(OBJEXT) \ + tests/stub_icp.$(OBJEXT) tests/stub_ipc.$(OBJEXT) \ + tests/stub_ipcache.$(OBJEXT) tests/stub_libicmp.$(OBJEXT) \ + tests/stub_MemStore.$(OBJEXT) tests/stub_mime.$(OBJEXT) \ + tests/stub_Port.$(OBJEXT) tests/stub_pconn.$(OBJEXT) \ + tests/stub_store_client.$(OBJEXT) \ + tests/stub_store_rebuild.$(OBJEXT) \ + tests/stub_store_stats.$(OBJEXT) tests/stub_tools.$(OBJEXT) \ + tests/stub_UdsOp.$(OBJEXT) time.$(OBJEXT) url.$(OBJEXT) \ + URLScheme.$(OBJEXT) wordlist.$(OBJEXT) $(am__objects_6) \ + $(am__objects_7) $(am__objects_16) +nodist_tests_testRock_OBJECTS = $(am__objects_21) \ + swap_log_op.$(OBJEXT) SquidMath.$(OBJEXT) $(am__objects_23) +tests_testRock_OBJECTS = $(am_tests_testRock_OBJECTS) \ + $(nodist_tests_testRock_OBJECTS) +tests_testRock_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(tests_testRock_LDFLAGS) $(LDFLAGS) -o $@ am__tests_testStore_SOURCES_DIST = CacheDigest.cc cbdata.cc \ ClientInfo.h ConfigOption.cc ConfigParser.cc CommonPool.h \ CompositePoolNode.h delay_pools.cc DelayId.cc DelayId.h \ @@ -1134,7 +1240,7 @@ DelayUser.cc DelayUser.h DelayVector.cc DelayVector.h \ NullDelayId.cc NullDelayId.h ClientDelayConfig.cc \ ClientDelayConfig.h disk.cc DiskIO/ReadRequest.cc \ - DiskIO/WriteRequest.cc ETag.cc event.cc EventLoop.cc \ + DiskIO/WriteRequest.cc ETag.cc event.cc EventLoop.cc FileMap.h \ filemap.cc HttpHdrCc.h HttpHdrCc.cc HttpHdrCc.cci \ HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ HttpHdrScTarget.cc HttpHeaderTools.cc HttpHeader.cc HttpMsg.cc \ @@ -1151,19 +1257,20 @@ tests/stub_comm.cc tests/stub_debug.cc \ tests/stub_DiskIOModule.cc tests/stub_errorpage.cc \ tests/stub_fd.cc tests/stub_helper.cc \ - tests/stub_HelperChildConfig.cc tests/stub_http.cc \ - tests/stub_HttpReply.cc tests/stub_HttpRequest.cc \ + tests/stub_HelperChildConfig.cc tests/stub_http.cc HttpBody.h \ + HttpBody.cc tests/stub_HttpReply.cc tests/stub_HttpRequest.cc \ tests/stub_libcomm.cc tests/stub_MemObject.cc \ tests/stub_MemStore.cc tests/stub_mime.cc tests/stub_Port.cc \ - tests/stub_store_client.cc tests/stub_store_rebuild.cc \ - tests/stub_store_swapout.cc tests/stub_tools.cc \ - tests/stub_UdsOp.cc tests/testMain.cc tests/testStore.cc \ - tests/testStore.h tests/testStoreEntryStream.cc \ - tests/testStoreEntryStream.h tests/testStoreController.cc \ - tests/testStoreController.h tests/testStoreHashIndex.cc \ - tests/testStoreHashIndex.h tests/testStoreSupport.cc \ - tests/testStoreSupport.h tests/TestSwapDir.cc \ - tests/TestSwapDir.h time.cc url.cc URLScheme.cc wordlist.cc + tests/stub_store_client.cc tests/stub_store_stats.cc \ + tests/stub_store_rebuild.cc tests/stub_store_swapout.cc \ + tests/stub_tools.cc tests/stub_UdsOp.cc tests/testMain.cc \ + tests/testStore.cc tests/testStore.h \ + tests/testStoreEntryStream.cc tests/testStoreEntryStream.h \ + tests/testStoreController.cc tests/testStoreController.h \ + tests/testStoreHashIndex.cc tests/testStoreHashIndex.h \ + tests/testStoreSupport.cc tests/testStoreSupport.h \ + tests/TestSwapDir.cc tests/TestSwapDir.h time.cc url.cc \ + URLScheme.cc wordlist.cc am_tests_testStore_OBJECTS = CacheDigest.$(OBJEXT) cbdata.$(OBJEXT) \ ConfigOption.$(OBJEXT) ConfigParser.$(OBJEXT) $(am__objects_6) \ disk.$(OBJEXT) DiskIO/ReadRequest.$(OBJEXT) \ @@ -1193,11 +1300,13 @@ tests/stub_errorpage.$(OBJEXT) tests/stub_fd.$(OBJEXT) \ tests/stub_helper.$(OBJEXT) \ tests/stub_HelperChildConfig.$(OBJEXT) \ - tests/stub_http.$(OBJEXT) tests/stub_HttpReply.$(OBJEXT) \ + tests/stub_http.$(OBJEXT) HttpBody.$(OBJEXT) \ + tests/stub_HttpReply.$(OBJEXT) \ tests/stub_HttpRequest.$(OBJEXT) tests/stub_libcomm.$(OBJEXT) \ tests/stub_MemObject.$(OBJEXT) tests/stub_MemStore.$(OBJEXT) \ tests/stub_mime.$(OBJEXT) tests/stub_Port.$(OBJEXT) \ tests/stub_store_client.$(OBJEXT) \ + tests/stub_store_stats.$(OBJEXT) \ tests/stub_store_rebuild.$(OBJEXT) \ tests/stub_store_swapout.$(OBJEXT) tests/stub_tools.$(OBJEXT) \ tests/stub_UdsOp.$(OBJEXT) tests/testMain.$(OBJEXT) \ @@ -1242,11 +1351,11 @@ DiskIO/ReadRequest.cc DiskIO/WriteRequest.cc dlink.h dlink.cc \ dns_internal.cc DnsLookupDetails.h DnsLookupDetails.cc dns.cc \ errorpage.cc ETag.cc event.cc external_acl.cc \ - ExternalACLEntry.cc fd.cc fde.cc filemap.cc forward.cc \ - fqdncache.cc ftp.cc gopher.cc helper.cc HelperChildConfig.h \ - HelperChildConfig.cc hier_code.h htcp.cc htcp.h http.cc \ - HttpBody.cc HttpHdrCc.h HttpHdrCc.cc HttpHdrCc.cci \ - HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ + ExternalACLEntry.cc fd.cc fde.cc FileMap.h filemap.cc \ + forward.cc fqdncache.cc ftp.cc gopher.cc helper.cc \ + HelperChildConfig.h HelperChildConfig.cc hier_code.h htcp.cc \ + htcp.h http.cc HttpBody.h HttpBody.cc HttpHdrCc.h HttpHdrCc.cc \ + HttpHdrCc.cci HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ HttpHdrScTarget.cc HttpHeader.cc HttpHeaderTools.cc HttpMsg.cc \ HttpParser.cc HttpParser.h HttpReply.cc HttpRequest.cc \ HttpRequestMethod.cc HttpStatusLine.cc icp_v2.cc icp_v3.cc \ @@ -1266,10 +1375,10 @@ 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/testURL.cc tests/testURL.h tests/testURLScheme.cc \ - tests/testURLScheme.h tests/testMain.cc time.cc tools.cc \ - tunnel.cc url.cc URLScheme.cc urn.cc wccp2.cc whois.cc \ - FadingCounter.cc win32.cc wordlist.cc + tests/stub_store_stats.cc tests/testURL.cc tests/testURL.h \ + tests/testURLScheme.cc tests/testURLScheme.h tests/testMain.cc \ + time.cc tools.cc tunnel.cc url.cc URLScheme.cc urn.cc wccp2.cc \ + whois.cc FadingCounter.cc win32.cc wordlist.cc am_tests_testURL_OBJECTS = $(am__objects_4) BodyPipe.$(OBJEXT) \ cache_cf.$(OBJEXT) cache_manager.$(OBJEXT) \ CacheDigest.$(OBJEXT) carp.$(OBJEXT) cbdata.$(OBJEXT) \ @@ -1316,7 +1425,8 @@ String.$(OBJEXT) SwapDir.$(OBJEXT) MemStore.$(OBJEXT) \ tests/stub_debug.$(OBJEXT) tests/stub_DiskIOModule.$(OBJEXT) \ tests/stub_main_cc.$(OBJEXT) \ - tests/stub_ipc_Forwarder.$(OBJEXT) tests/testURL.$(OBJEXT) \ + tests/stub_ipc_Forwarder.$(OBJEXT) \ + tests/stub_store_stats.$(OBJEXT) tests/testURL.$(OBJEXT) \ tests/testURLScheme.$(OBJEXT) tests/testMain.$(OBJEXT) \ time.$(OBJEXT) tools.$(OBJEXT) tunnel.$(OBJEXT) url.$(OBJEXT) \ URLScheme.$(OBJEXT) urn.$(OBJEXT) wccp2.$(OBJEXT) \ @@ -1333,10 +1443,11 @@ tests/stub_client_db.cc tests/stub_HelperChildConfig.cc \ tests/stub_icp.cc tests/stub_ipc.cc tests/stub_MemStore.cc \ tests/stub_pconn.cc tests/stub_Port.cc tests/stub_UdsOp.cc \ - tests/stub_internal.cc tests/stub_store_rebuild.cc fd.cc \ - disk.cc filemap.cc HttpBody.cc HttpReply.cc HttpStatusLine.cc \ - int.cc list.cc MemObject.cc StoreSwapLogData.cc \ - StoreIOState.cc StoreMeta.cc StoreMetaMD5.cc StoreMetaSTD.cc \ + tests/stub_internal.cc tests/stub_store_rebuild.cc \ + tests/stub_store_stats.cc fd.cc disk.cc FileMap.h filemap.cc \ + HttpBody.h HttpBody.cc HttpReply.cc HttpStatusLine.cc int.cc \ + list.cc MemObject.cc StoreSwapLogData.cc StoreIOState.cc \ + StoreMeta.cc StoreMetaMD5.cc StoreMetaSTD.cc \ StoreMetaSTDLFS.cc StoreMetaUnpacker.cc StoreMetaURL.cc \ StoreMetaVary.cc StoreFileSystem.cc store_io.cc \ store_swapout.cc store_swapmeta.cc unlinkd.cc win32.cc \ @@ -1374,7 +1485,8 @@ tests/stub_MemStore.$(OBJEXT) tests/stub_pconn.$(OBJEXT) \ tests/stub_Port.$(OBJEXT) tests/stub_UdsOp.$(OBJEXT) \ tests/stub_internal.$(OBJEXT) \ - tests/stub_store_rebuild.$(OBJEXT) fd.$(OBJEXT) disk.$(OBJEXT) \ + tests/stub_store_rebuild.$(OBJEXT) \ + tests/stub_store_stats.$(OBJEXT) fd.$(OBJEXT) disk.$(OBJEXT) \ filemap.$(OBJEXT) HttpBody.$(OBJEXT) HttpReply.$(OBJEXT) \ HttpStatusLine.$(OBJEXT) int.$(OBJEXT) list.$(OBJEXT) \ MemObject.$(OBJEXT) StoreSwapLogData.$(OBJEXT) \ @@ -1435,10 +1547,10 @@ DiskIO/DiskIOModule.h disk.cc dlink.h dlink.cc dns_internal.cc \ DnsLookupDetails.h DnsLookupDetails.cc dns.cc errorpage.cc \ ETag.cc event.cc external_acl.cc ExternalACLEntry.cc \ - FadingCounter.cc fd.cc fde.cc filemap.cc forward.cc \ + FadingCounter.cc fd.cc fde.cc FileMap.h filemap.cc forward.cc \ fqdncache.cc ftp.cc gopher.cc helper.cc HelperChildConfig.h \ HelperChildConfig.cc hier_code.h htcp.cc htcp.h http.cc \ - HttpBody.cc HttpHdrCc.h HttpHdrCc.cc HttpHdrCc.cci \ + HttpBody.h HttpBody.cc HttpHdrCc.h HttpHdrCc.cc HttpHdrCc.cci \ HttpHdrContRange.cc HttpHdrRange.cc HttpHdrSc.cc \ HttpHdrScTarget.cc HttpHeader.cc HttpHeaderTools.cc HttpMsg.cc \ HttpParser.cc HttpParser.h HttpReply.cc HttpRequest.cc \ @@ -1458,9 +1570,10 @@ StoreMetaUnpacker.cc StoreMetaURL.cc StoreMetaVary.cc \ StoreSwapLogData.cc String.cc SwapDir.cc \ tests/test_http_range.cc tests/stub_ipc_Forwarder.cc \ - tests/stub_main_cc.cc tests/stub_MemStore.cc time.cc tools.cc \ - tunnel.cc unlinkd.cc url.cc URLScheme.cc urn.cc wccp2.cc \ - whois.cc win32.cc wordlist.cc + tests/stub_main_cc.cc tests/stub_MemStore.cc \ + tests/stub_store_stats.cc time.cc tools.cc tunnel.cc \ + unlinkd.cc url.cc URLScheme.cc urn.cc wccp2.cc whois.cc \ + win32.cc wordlist.cc am_tests_test_http_range_OBJECTS = $(am__objects_4) BodyPipe.$(OBJEXT) \ cache_cf.$(OBJEXT) ProtoPort.$(OBJEXT) cache_manager.$(OBJEXT) \ CacheDigest.$(OBJEXT) carp.$(OBJEXT) cbdata.$(OBJEXT) \ @@ -1508,10 +1621,11 @@ tests/test_http_range.$(OBJEXT) \ tests/stub_ipc_Forwarder.$(OBJEXT) \ tests/stub_main_cc.$(OBJEXT) tests/stub_MemStore.$(OBJEXT) \ - time.$(OBJEXT) tools.$(OBJEXT) tunnel.$(OBJEXT) \ - $(am__objects_16) url.$(OBJEXT) URLScheme.$(OBJEXT) \ - urn.$(OBJEXT) wccp2.$(OBJEXT) whois.$(OBJEXT) \ - $(am__objects_17) wordlist.$(OBJEXT) + tests/stub_store_stats.$(OBJEXT) time.$(OBJEXT) \ + tools.$(OBJEXT) tunnel.$(OBJEXT) $(am__objects_16) \ + url.$(OBJEXT) URLScheme.$(OBJEXT) urn.$(OBJEXT) \ + wccp2.$(OBJEXT) whois.$(OBJEXT) $(am__objects_17) \ + wordlist.$(OBJEXT) nodist_tests_test_http_range_OBJECTS = $(am__objects_22) \ $(am__objects_21) tests_test_http_range_OBJECTS = $(am_tests_test_http_range_OBJECTS) \ @@ -1578,6 +1692,8 @@ $(nodist_tests_testBoilerplate_SOURCES) \ $(tests_testCacheManager_SOURCES) \ $(nodist_tests_testCacheManager_SOURCES) \ + $(tests_testConfigParser_SOURCES) \ + $(nodist_tests_testConfigParser_SOURCES) \ $(tests_testCoss_SOURCES) $(nodist_tests_testCoss_SOURCES) \ $(tests_testDiskIO_SOURCES) $(nodist_tests_testDiskIO_SOURCES) \ $(tests_testEvent_SOURCES) $(nodist_tests_testEvent_SOURCES) \ @@ -1590,6 +1706,7 @@ $(tests_testHttpRequest_SOURCES) \ $(nodist_tests_testHttpRequest_SOURCES) \ $(tests_testNull_SOURCES) $(nodist_tests_testNull_SOURCES) \ + $(tests_testRock_SOURCES) $(nodist_tests_testRock_SOURCES) \ $(tests_testStore_SOURCES) $(nodist_tests_testStore_SOURCES) \ $(tests_testString_SOURCES) $(nodist_tests_testString_SOURCES) \ $(tests_testURL_SOURCES) $(nodist_tests_testURL_SOURCES) \ @@ -1607,6 +1724,7 @@ $(tests_testACLMaxUserIP_SOURCES) \ $(tests_testBoilerplate_SOURCES) \ $(am__tests_testCacheManager_SOURCES_DIST) \ + $(tests_testConfigParser_SOURCES) \ $(am__tests_testCoss_SOURCES_DIST) \ $(am__tests_testDiskIO_SOURCES_DIST) \ $(am__tests_testEvent_SOURCES_DIST) \ @@ -1614,6 +1732,7 @@ $(tests_testHttpParser_SOURCES) $(tests_testHttpReply_SOURCES) \ $(am__tests_testHttpRequest_SOURCES_DIST) \ $(am__tests_testNull_SOURCES_DIST) \ + $(am__tests_testRock_SOURCES_DIST) \ $(am__tests_testStore_SOURCES_DIST) \ $(tests_testString_SOURCES) $(am__tests_testURL_SOURCES_DIST) \ $(am__tests_testUfs_SOURCES_DIST) \ @@ -2073,18 +2192,18 @@ 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.cc forward.cc forward.h fqdncache.cc \ - ftp.cc Generic.h globals.h gopher.cc helper.cc helper.h \ - HelperChildConfig.h HelperChildConfig.cc hier_code.h \ + fde.cc fde.h FileMap.h filemap.cc forward.cc forward.h \ + fqdncache.cc ftp.cc Generic.h globals.h gopher.cc helper.cc \ + helper.h HelperChildConfig.h HelperChildConfig.cc hier_code.h \ HierarchyLogEntry.h $(HTCPSOURCE) http.cc http.h \ HttpStatusCode.h HttpStatusLine.cc HttpStatusLine.h \ HttpHdrCc.h HttpHdrCc.cc HttpHdrCc.cci HttpHdrRange.cc \ HttpHdrSc.cc HttpHdrSc.h HttpHdrScTarget.cc HttpHdrScTarget.h \ HttpHdrContRange.cc HttpHdrContRange.h HttpHeader.cc \ HttpHeader.h HttpHeaderMask.h HttpHeaderRange.h \ - HttpHeaderTools.cc HttpBody.cc HttpControlMsg.h HttpMsg.cc \ - HttpMsg.h HttpParser.cc HttpParser.h HttpReply.cc HttpReply.h \ - HttpRequest.cc HttpRequest.h HttpRequestMethod.cc \ + HttpHeaderTools.cc HttpBody.h HttpBody.cc HttpControlMsg.h \ + HttpMsg.cc HttpMsg.h HttpParser.cc HttpParser.h HttpReply.cc \ + HttpReply.h HttpRequest.cc HttpRequest.h HttpRequestMethod.cc \ HttpRequestMethod.h HttpVersion.h ICP.h icp_opcode.h icp_v2.cc \ icp_v3.cc int.cc internal.cc $(IPC_SOURCE) ipcache.cc \ ipcache.h $(LEAKFINDERSOURCE) list.cc lookup_t.h main.cc \ @@ -2107,12 +2226,13 @@ StoreMetaSTDLFS.cc StoreMetaSTDLFS.h StoreMetaObjSize.h \ StoreMetaUnpacker.cc StoreMetaUnpacker.h StoreMetaURL.cc \ StoreMetaURL.h StoreMetaVary.cc StoreMetaVary.h StoreSearch.h \ - StoreSwapLogData.cc StoreSwapLogData.h Server.cc Server.h \ - structs.h swap_log_op.h SwapDir.cc SwapDir.h MemStore.cc \ - MemStore.h time.cc TimeOrTag.h tools.cc tunnel.cc typedefs.h \ - $(UNLINKDSOURCE) url.cc URL.h URLScheme.cc URLScheme.h urn.cc \ - wccp.cc wccp2.cc whois.cc wordlist.cc wordlist.h \ - $(WIN32_SOURCE) $(WINSVC_SOURCE) $(am__append_8) + StoreStats.cc StoreStats.h StoreSwapLogData.cc \ + StoreSwapLogData.h Server.cc Server.h structs.h swap_log_op.h \ + SwapDir.cc SwapDir.h MemStore.cc MemStore.h time.cc \ + TimeOrTag.h tools.cc tunnel.cc typedefs.h $(UNLINKDSOURCE) \ + url.cc URL.h URLScheme.cc URLScheme.h urn.cc wccp.cc wccp2.cc \ + whois.cc wordlist.cc wordlist.h $(WIN32_SOURCE) \ + $(WINSVC_SOURCE) $(am__append_8) EXTRA_squid_SOURCES = \ $(AIO_WIN32_ALL_SOURCES) \ $(all_AUTHMODULES) \ @@ -2207,7 +2327,8 @@ $(COMPAT_LIB) \ $(XTRA_LIBS) -dnsserver_SOURCES = dnsserver.cc SquidNew.cc tests/stub_debug.cc test_tools.cc time.cc +dnsserver_SOURCES = dnsserver.cc +dnsserver_LDADD = $(COMPAT_LIB) recv_announce_SOURCES = recv-announce.cc ufsdump_SOURCES = \ ClientInfo.h \ @@ -2443,6 +2564,7 @@ cbdata.cc \ cbdata.h \ ETag.cc \ + HttpBody.h \ HttpBody.cc \ HttpHdrCc.h \ HttpHdrCc.cc \ @@ -2481,6 +2603,7 @@ tests/stub_HelperChildConfig.cc \ tests/stub_StatHist.cc \ tests/stub_store.cc \ + tests/stub_store_stats.cc \ tests/testHttpReply.cc \ tests/testHttpReply.h \ tests/testMain.cc \ @@ -2515,6 +2638,7 @@ DiskIO/WriteRequest.cc \ ETag.cc \ event.cc \ + FileMap.h \ filemap.cc \ HelperChildConfig.h \ HelperChildConfig.cc \ @@ -2566,6 +2690,7 @@ tests/stub_mime.cc \ tests/stub_store.cc \ tests/stub_store_rebuild.cc \ + tests/stub_store_stats.cc \ tests/stub_store_swapout.cc \ tests/stub_tools.cc \ tests/stub_cache_manager.cc \ @@ -2643,6 +2768,7 @@ 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 \ @@ -2678,6 +2804,7 @@ ExternalACLEntry.cc \ fd.cc \ fde.cc \ + FileMap.h \ filemap.cc \ forward.cc \ fqdncache.cc \ @@ -2689,6 +2816,7 @@ HelperChildConfig.cc \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHeader.cc \ HttpHeaderTools.cc \ @@ -2832,7 +2960,9 @@ EventLoop.cc \ event.cc \ fd.cc \ + FileMap.h \ filemap.cc \ + HttpBody.h \ HttpBody.cc \ HttpHdrCc.h \ HttpHdrCc.cc \ @@ -2899,6 +3029,7 @@ tests/stub_pconn.cc \ tests/stub_Port.cc \ tests/stub_store_client.cc \ + tests/stub_store_stats.cc \ tests/stub_store_rebuild.cc \ tests/stub_tools.cc \ tests/stub_UdsOp.cc \ @@ -2998,6 +3129,7 @@ FadingCounter.cc \ fd.cc \ fde.cc \ + FileMap.h \ filemap.cc \ forward.cc \ fqdncache.cc \ @@ -3009,6 +3141,7 @@ hier_code.h \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHeader.cc \ HttpHeaderTools.cc \ @@ -3090,6 +3223,7 @@ tests/testMain.cc \ tests/stub_main_cc.cc \ tests/stub_ipc_Forwarder.cc \ + tests/stub_store_stats.cc \ time.cc \ tools.cc \ tunnel.cc \ @@ -3187,6 +3321,7 @@ FadingCounter.cc \ fd.cc \ fde.cc \ + FileMap.h \ filemap.cc \ forward.cc \ fqdncache.cc \ @@ -3198,6 +3333,7 @@ hier_code.h \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHeader.cc \ HttpHeaderTools.cc \ @@ -3278,6 +3414,7 @@ tests/testMain.cc \ tests/stub_main_cc.cc \ tests/stub_ipc_Forwarder.cc \ + tests/stub_store_stats.cc \ time.cc \ tools.cc \ tunnel.cc \ @@ -3375,6 +3512,7 @@ FadingCounter.cc \ fd.cc \ fde.cc \ + FileMap.h \ filemap.cc \ forward.cc \ fqdncache.cc \ @@ -3386,6 +3524,7 @@ hier_code.h \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHdrCc.h \ HttpHdrCc.cc \ @@ -3463,6 +3602,7 @@ tests/stub_ipc_Forwarder.cc \ tests/stub_main_cc.cc \ tests/stub_MemStore.cc \ + tests/stub_store_stats.cc \ time.cc \ tools.cc \ tunnel.cc \ @@ -3572,6 +3712,7 @@ 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 \ @@ -3616,6 +3757,7 @@ hier_code.h \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHeader.cc \ HttpHeaderTools.cc \ @@ -3753,6 +3895,7 @@ ETag.cc \ event.cc \ EventLoop.cc \ + FileMap.h \ filemap.cc \ HttpHdrCc.h \ HttpHdrCc.cc \ @@ -3806,6 +3949,8 @@ tests/stub_helper.cc \ tests/stub_HelperChildConfig.cc \ tests/stub_http.cc \ + HttpBody.h \ + HttpBody.cc \ tests/stub_HttpReply.cc \ tests/stub_HttpRequest.cc \ tests/stub_libcomm.cc \ @@ -3814,6 +3959,7 @@ tests/stub_mime.cc \ tests/stub_Port.cc \ tests/stub_store_client.cc \ + tests/stub_store_stats.cc \ tests/stub_store_rebuild.cc \ tests/stub_store_swapout.cc \ tests/stub_tools.cc \ @@ -3939,9 +4085,12 @@ tests/stub_UdsOp.cc \ tests/stub_internal.cc \ tests/stub_store_rebuild.cc \ + tests/stub_store_stats.cc \ fd.cc \ disk.cc \ + FileMap.h \ filemap.cc \ + HttpBody.h \ HttpBody.cc \ HttpReply.cc \ HttpStatusLine.cc \ @@ -4062,6 +4211,135 @@ tests_testUfs_DEPENDENCIES = \ $(SWAP_TEST_DS) +tests_testRock_SOURCES = \ + cbdata.cc \ + CacheDigest.cc \ + ConfigOption.cc \ + ConfigParser.cc \ + disk.cc \ + ETag.cc \ + EventLoop.cc \ + event.cc \ + fd.cc \ + FileMap.h \ + filemap.cc \ + HttpBody.h \ + HttpBody.cc \ + HttpHdrCc.cc \ + HttpHdrContRange.cc \ + HttpHdrRange.cc \ + HttpHdrSc.cc \ + HttpHdrScTarget.cc \ + HttpHeader.cc \ + HttpHeaderTools.cc \ + HttpMsg.cc \ + HttpReply.cc \ + HttpRequestMethod.cc \ + HttpStatusLine.cc \ + int.cc \ + list.cc \ + mem.cc \ + MemBuf.cc \ + MemObject.cc \ + mem_node.cc \ + Packer.cc \ + Parsing.cc \ + RemovalPolicy.cc \ + StatHist.cc \ + stmem.cc \ + store.cc \ + StoreFileSystem.cc \ + StoreIOState.cc \ + StoreMeta.cc \ + StoreMetaMD5.cc \ + StoreMetaSTD.cc \ + StoreMetaSTDLFS.cc \ + StoreMetaURL.cc \ + StoreMetaUnpacker.cc \ + StoreMetaVary.cc \ + StoreSwapLogData.cc \ + store_dir.cc \ + store_io.cc \ + store_key_md5.cc \ + store_swapmeta.cc \ + store_swapout.cc \ + String.cc \ + SwapDir.cc \ + tests/testRock.cc \ + tests/testMain.cc \ + tests/testRock.h \ + tests/testStoreSupport.cc \ + tests/testStoreSupport.h \ + tests/stub_access_log.cc \ + tests/stub_cache_cf.cc \ + tests/stub_cache_manager.cc \ + tests/stub_client_db.cc \ + tests/stub_client_side_request.cc \ + tests/stub_debug.cc \ + tests/stub_errorpage.cc \ + tests/stub_HelperChildConfig.cc \ + tests/stub_http.cc \ + tests/stub_HttpRequest.cc \ + tests/stub_icp.cc \ + tests/stub_ipc.cc \ + tests/stub_ipcache.cc \ + tests/stub_libicmp.cc \ + tests/stub_MemStore.cc \ + tests/stub_mime.cc \ + tests/stub_Port.cc \ + tests/stub_pconn.cc \ + tests/stub_store_client.cc \ + tests/stub_store_rebuild.cc \ + tests/stub_store_stats.cc \ + tests/stub_tools.cc \ + tests/stub_UdsOp.cc \ + time.cc \ + url.cc \ + URLScheme.cc \ + wordlist.cc \ + $(DELAY_POOL_SOURCE) \ + $(DISKIO_SOURCE) \ + $(UNLINKDSOURCE) + +nodist_tests_testRock_SOURCES = \ + $(DISKIO_GEN_SOURCE) \ + swap_log_op.cc \ + SquidMath.cc \ + SquidMath.h \ + $(TESTSOURCES) + +tests_testRock_LDADD = \ + anyp/libanyp.la \ + libsquid.la \ + comm/libcomm.la \ + ip/libip.la \ + fs/libfs.la \ + $(AUTH_LIBS) \ + $(COMMON_LIBS) \ + $(REPL_OBJS) \ + $(DISK_LIBS) \ + $(DISK_OS_LIBS) \ + acl/libacls.la \ + acl/libapi.la \ + acl/libstate.la \ + eui/libeui.la \ + ipc/libipc.la \ + mgr/libmgr.la \ + base/libbase.la \ + $(SSL_LIBS) \ + $(top_builddir)/lib/libmisccontainers.la \ + $(top_builddir)/lib/libmiscencoding.la \ + $(top_builddir)/lib/libmiscutil.la \ + $(REGEXLIB) \ + $(SQUID_CPPUNIT_LIBS) \ + $(SSLLIB) \ + $(COMPAT_LIB) \ + $(XTRA_LIBS) + +tests_testRock_LDFLAGS = $(LIBADD_DL) +tests_testRock_DEPENDENCIES = \ + $(SWAP_TEST_DS) + tests_testCoss_SOURCES = \ tests/testCoss.cc \ tests/testMain.cc \ @@ -4074,9 +4352,12 @@ tests/stub_ipc.cc \ tests/stub_pconn.cc \ tests/stub_store_rebuild.cc \ + tests/stub_store_stats.cc \ fd.cc \ disk.cc \ + FileMap.h \ filemap.cc \ + HttpBody.h \ HttpBody.cc \ HttpReply.cc \ HttpStatusLine.cc \ @@ -4145,6 +4426,7 @@ tests/stub_MemStore.cc \ tests/stub_Port.cc \ tests/stub_store_client.cc \ + tests/stub_store_stats.cc \ tests/stub_tools.cc \ tests/stub_UdsOp.cc \ tests/testStoreSupport.cc \ @@ -4205,9 +4487,12 @@ tests/stub_internal.cc \ tests/stub_CommIO.cc \ tests/stub_store_rebuild.cc \ + tests/stub_store_stats.cc \ fd.cc \ disk.cc \ + FileMap.h \ filemap.cc \ + HttpBody.h \ HttpBody.cc \ HttpReply.cc \ HttpStatusLine.cc \ @@ -4276,6 +4561,7 @@ tests/stub_access_log.cc \ refresh.cc \ tests/stub_store_client.cc \ + tests/stub_store_stats.cc \ tests/stub_tools.cc \ tests/testStoreSupport.cc \ tests/testStoreSupport.h \ @@ -4354,6 +4640,7 @@ ExternalACLEntry.cc \ fd.cc \ fde.cc \ + FileMap.h \ filemap.cc \ forward.cc \ fqdncache.cc \ @@ -4365,6 +4652,7 @@ hier_code.h \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHdrCc.h \ HttpHdrCc.cc \ @@ -4445,6 +4733,7 @@ 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 \ @@ -4507,6 +4796,40 @@ $(REPL_OBJS) \ $(SQUID_CPPUNIT_LA) +tests_testConfigParser_SOURCES = \ + ClientInfo.h \ + mem.cc \ + MemBuf.cc \ + String.cc \ + ConfigParser.cc \ + tests/testMain.cc \ + tests/testConfigParser.cc \ + tests/testConfigParser.h \ + tests/stub_cache_cf.cc \ + tests/stub_cache_manager.cc \ + tests/stub_debug.cc \ + tests/stub_HelperChildConfig.cc \ + time.cc \ + wordlist.cc + +nodist_tests_testConfigParser_SOURCES = \ + $(TESTSOURCES) + +tests_testConfigParser_LDADD = \ + base/libbase.la \ + libsquid.la \ + ip/libip.la \ + $(top_builddir)/lib/libmiscutil.la \ + $(REGEXLIB) \ + $(SQUID_CPPUNIT_LIBS) \ + $(SSLLIB) \ + $(COMPAT_LIB) \ + $(XTRA_LIBS) + +tests_testConfigParser_LDFLAGS = $(LIBADD_DL) +tests_testConfigParser_DEPENDENCIES = \ + $(SQUID_CPPUNIT_LA) + all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive @@ -4830,14 +5153,6 @@ DiskIO/DiskDaemon/diskd$(EXEEXT): $(DiskIO_DiskDaemon_diskd_OBJECTS) $(DiskIO_DiskDaemon_diskd_DEPENDENCIES) DiskIO/DiskDaemon/$(am__dirstamp) @rm -f DiskIO/DiskDaemon/diskd$(EXEEXT) $(CXXLINK) $(DiskIO_DiskDaemon_diskd_OBJECTS) $(DiskIO_DiskDaemon_diskd_LDADD) $(LIBS) -tests/$(am__dirstamp): - @$(MKDIR_P) tests - @: > tests/$(am__dirstamp) -tests/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) tests/$(DEPDIR) - @: > tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_debug.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) dnsserver$(EXEEXT): $(dnsserver_OBJECTS) $(dnsserver_DEPENDENCIES) @rm -f dnsserver$(EXEEXT) $(CXXLINK) $(dnsserver_OBJECTS) $(dnsserver_LDADD) $(LIBS) @@ -4861,12 +5176,20 @@ squid$(EXEEXT): $(squid_OBJECTS) $(squid_DEPENDENCIES) @rm -f squid$(EXEEXT) $(squid_LINK) $(squid_OBJECTS) $(squid_LDADD) $(LIBS) +tests/$(am__dirstamp): + @$(MKDIR_P) tests + @: > tests/$(am__dirstamp) +tests/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) tests/$(DEPDIR) + @: > tests/$(DEPDIR)/$(am__dirstamp) tests/stub_access_log.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_cache_cf.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_comm.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_debug.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) tests/stub_DelayId.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_DiskIOModule.$(OBJEXT): tests/$(am__dirstamp) \ @@ -4885,6 +5208,8 @@ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_store_rebuild.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_store_stats.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) tests/stub_store_swapout.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_tools.$(OBJEXT): tests/$(am__dirstamp) \ @@ -4912,12 +5237,17 @@ tests/testCacheManager$(EXEEXT): $(tests_testCacheManager_OBJECTS) $(tests_testCacheManager_DEPENDENCIES) tests/$(am__dirstamp) @rm -f tests/testCacheManager$(EXEEXT) $(tests_testCacheManager_LINK) $(tests_testCacheManager_OBJECTS) $(tests_testCacheManager_LDADD) $(LIBS) +tests/testConfigParser.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/stub_HelperChildConfig.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/testConfigParser$(EXEEXT): $(tests_testConfigParser_OBJECTS) $(tests_testConfigParser_DEPENDENCIES) tests/$(am__dirstamp) + @rm -f tests/testConfigParser$(EXEEXT) + $(tests_testConfigParser_LINK) $(tests_testConfigParser_OBJECTS) $(tests_testConfigParser_LDADD) $(LIBS) tests/testCoss.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_client_db.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) -tests/stub_HelperChildConfig.$(OBJEXT): tests/$(am__dirstamp) \ - tests/$(DEPDIR)/$(am__dirstamp) tests/stub_internal.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_ipc.$(OBJEXT): tests/$(am__dirstamp) \ @@ -4994,6 +5324,11 @@ tests/testNull$(EXEEXT): $(tests_testNull_OBJECTS) $(tests_testNull_DEPENDENCIES) tests/$(am__dirstamp) @rm -f tests/testNull$(EXEEXT) $(tests_testNull_LINK) $(tests_testNull_OBJECTS) $(tests_testNull_LDADD) $(LIBS) +tests/testRock.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/testRock$(EXEEXT): $(tests_testRock_OBJECTS) $(tests_testRock_DEPENDENCIES) tests/$(am__dirstamp) + @rm -f tests/testRock$(EXEEXT) + $(tests_testRock_LINK) $(tests_testRock_OBJECTS) $(tests_testRock_LDADD) $(LIBS) tests/stub_HttpReply.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) tests/stub_libcomm.$(OBJEXT): tests/$(am__dirstamp) \ @@ -5108,11 +5443,13 @@ -rm -f tests/stub_store.$(OBJEXT) -rm -f tests/stub_store_client.$(OBJEXT) -rm -f tests/stub_store_rebuild.$(OBJEXT) + -rm -f tests/stub_store_stats.$(OBJEXT) -rm -f tests/stub_store_swapout.$(OBJEXT) -rm -f tests/stub_tools.$(OBJEXT) -rm -f tests/testACLMaxUserIP.$(OBJEXT) -rm -f tests/testBoilerplate.$(OBJEXT) -rm -f tests/testCacheManager.$(OBJEXT) + -rm -f tests/testConfigParser.$(OBJEXT) -rm -f tests/testCoss.$(OBJEXT) -rm -f tests/testDiskIO.$(OBJEXT) -rm -f tests/testEvent.$(OBJEXT) @@ -5123,6 +5460,7 @@ -rm -f tests/testHttpRequestMethod.$(OBJEXT) -rm -f tests/testMain.$(OBJEXT) -rm -f tests/testNull.$(OBJEXT) + -rm -f tests/testRock.$(OBJEXT) -rm -f tests/testStore.$(OBJEXT) -rm -f tests/testStoreController.$(OBJEXT) -rm -f tests/testStoreEntryStream.$(OBJEXT) @@ -5207,6 +5545,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StoreMetaURL.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StoreMetaUnpacker.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StoreMetaVary.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StoreStats.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StoreSwapLogData.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/String.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SwapDir.Po@am__quote@ @@ -5371,11 +5710,13 @@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/stub_store.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/stub_store_client.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/stub_store_rebuild.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/stub_store_stats.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/stub_store_swapout.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/stub_tools.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testACLMaxUserIP.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testBoilerplate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testCacheManager.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testConfigParser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testCoss.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testDiskIO.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testEvent.Po@am__quote@ @@ -5386,6 +5727,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testHttpRequestMethod.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testMain.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testNull.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testRock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testStore.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testStoreController.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testStoreEntryStream.Po@am__quote@ @@ -6013,7 +6355,7 @@ true cf_parser.cci: cf.data cf_gen$(EXEEXT) - ./cf_gen cf.data $(srcdir)/cf.data.depend + ./cf_gen$(EXEEXT) cf.data $(srcdir)/cf.data.depend cf_gen_defines.cci: $(srcdir)/cf_gen_defines $(srcdir)/cf.data.pre $(AWK) -f $(srcdir)/cf_gen_defines <$(srcdir)/cf.data.pre >$@ || ($(RM) -f $@ && exit 1) diff -u -r -N squid-3.2.0.13/src/MemStore.cc squid-3.2.0.14/src/MemStore.cc --- squid-3.2.0.13/src/MemStore.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/MemStore.cc 2011-12-13 00:08:18.000000000 +1300 @@ -11,6 +11,7 @@ #include "ipc/mem/Pages.h" #include "MemObject.h" #include "MemStore.h" +#include "StoreStats.h" #include "HttpReply.h" /// shared memory segment path to use for MemStore maps @@ -52,6 +53,19 @@ } void +MemStore::getStats(StoreInfoStats &stats) const +{ + const size_t pageSize = Ipc::Mem::PageSize(); + + stats.mem.shared = true; + stats.mem.capacity = + Ipc::Mem::PageLimit(Ipc::Mem::PageId::cachePage) * pageSize; + stats.mem.size = + Ipc::Mem::PageLevel(Ipc::Mem::PageId::cachePage) * pageSize; + stats.mem.count = currentCount(); +} + +void MemStore::stat(StoreEntry &e) const { storeAppendPrintf(&e, "\n\nShared Memory Cache\n"); @@ -342,6 +356,24 @@ } +/// reports our needs for shared memory pages to Ipc::Mem::Pages +class MemStoreClaimMemoryNeedsRr: public RegisteredRunner +{ +public: + /* RegisteredRunner API */ + virtual void run(const RunnerRegistry &r); +}; + +RunnerRegistrationEntry(rrClaimMemoryNeeds, MemStoreClaimMemoryNeedsRr); + + +void +MemStoreClaimMemoryNeedsRr::run(const RunnerRegistry &) +{ + Ipc::Mem::NotePageNeed(Ipc::Mem::PageId::cachePage, MemStore::EntryLimit()); +} + + /// initializes shared memory segments used by MemStore class MemStoreRr: public Ipc::Mem::RegisteredRunner { @@ -365,10 +397,10 @@ { // decide whether to use a shared memory cache if the user did not specify if (!Config.memShared.configured()) { - Config.memShared.configure(AtomicOperationsSupported && + Config.memShared.configure(Ipc::Atomic::Enabled() && Ipc::Mem::Segment::Enabled() && UsingSmp() && Config.memMaxSize > 0); - } else if (Config.memShared && !AtomicOperationsSupported) { + } else if (Config.memShared && !Ipc::Atomic::Enabled()) { // bail if the user wants shared memory cache but we cannot support it fatal("memory_cache_shared is on, but no support for atomic operations detected"); } else if (Config.memShared && !Ipc::Mem::Segment::Enabled()) { @@ -388,8 +420,14 @@ Must(!owner); const int64_t entryLimit = MemStore::EntryLimit(); - if (entryLimit <= 0) + if (entryLimit <= 0) { + if (Config.memMaxSize > 0) { + debugs(20, DBG_IMPORTANT, "WARNING: mem-cache size is too small (" + << (Config.memMaxSize / 1024.0) << " KB), should be >= " << + (Ipc::Mem::PageSize() / 1024.0) << " KB"); + } return; // no memory cache configured or a misconfiguration + } owner = MemStoreMap::Init(ShmLabel, entryLimit); } diff -u -r -N squid-3.2.0.13/src/MemStore.h squid-3.2.0.14/src/MemStore.h --- squid-3.2.0.13/src/MemStore.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/MemStore.h 2011-12-13 00:08:18.000000000 +1300 @@ -37,6 +37,7 @@ virtual uint64_t currentSize() const; virtual uint64_t currentCount() const; virtual int64_t maxObjectSize() const; + virtual void getStats(StoreInfoStats &stats) const; virtual void stat(StoreEntry &) const; virtual StoreSearch *search(String const url, HttpRequest *); virtual void reference(StoreEntry &); diff -u -r -N squid-3.2.0.13/src/mgr/BasicActions.cc squid-3.2.0.14/src/mgr/BasicActions.cc --- squid-3.2.0.13/src/mgr/BasicActions.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/mgr/BasicActions.cc 2011-12-13 00:08:18.000000000 +1300 @@ -96,7 +96,7 @@ { debugs(16, DBG_IMPORTANT, "Rotate Logs by Cache Manager command."); storeAppendPrintf(entry, "Rotating Squid Process Logs ...."); -#ifdef _SQUID_LINUX_THREADS_ +#if defined(_SQUID_LINUX_THREADS_) rotate_logs(SIGQUIT); #else rotate_logs(SIGUSR1); diff -u -r -N squid-3.2.0.13/src/mgr/Forwarder.cc squid-3.2.0.14/src/mgr/Forwarder.cc --- squid-3.2.0.13/src/mgr/Forwarder.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/mgr/Forwarder.cc 2011-12-13 00:08:18.000000000 +1300 @@ -72,14 +72,14 @@ Mgr::Forwarder::handleError() { debugs(16, DBG_CRITICAL, "ERROR: uri " << entry->url() << " exceeds buffer size"); - sendError(errorCon(ERR_INVALID_URL, HTTP_REQUEST_URI_TOO_LARGE, httpRequest)); + sendError(new ErrorState(ERR_INVALID_URL, HTTP_REQUEST_URI_TOO_LARGE, httpRequest)); mustStop("long URI"); } void Mgr::Forwarder::handleTimeout() { - sendError(errorCon(ERR_LIFETIME_EXP, HTTP_REQUEST_TIMEOUT, httpRequest)); + sendError(new ErrorState(ERR_LIFETIME_EXP, HTTP_REQUEST_TIMEOUT, httpRequest)); Ipc::Forwarder::handleTimeout(); } @@ -87,7 +87,7 @@ Mgr::Forwarder::handleException(const std::exception& e) { if (entry != NULL && httpRequest != NULL && Comm::IsConnOpen(conn)) - sendError(errorCon(ERR_INVALID_RESP, HTTP_INTERNAL_SERVER_ERROR, httpRequest)); + sendError(new ErrorState(ERR_INVALID_RESP, HTTP_INTERNAL_SERVER_ERROR, httpRequest)); Ipc::Forwarder::handleException(e); } @@ -124,7 +124,7 @@ entry->buffer(); entry->replaceHttpReply(error->BuildHttpReply()); entry->expires = squid_curtime; - errorStateFree(error); + delete error; entry->flush(); entry->complete(); } diff -u -r -N squid-3.2.0.13/src/mgr/InfoAction.cc squid-3.2.0.14/src/mgr/InfoAction.cc --- squid-3.2.0.13/src/mgr/InfoAction.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/mgr/InfoAction.cc 2011-12-13 00:08:18.000000000 +1300 @@ -58,12 +58,9 @@ request_hit_mem_ratio60 += stats.request_hit_mem_ratio60; request_hit_disk_ratio5 += stats.request_hit_disk_ratio5; request_hit_disk_ratio60 += stats.request_hit_disk_ratio60; - store_swap_size += stats.store_swap_size; - store_swap_max_size += stats.store_swap_max_size; - store_mem_size += stats.store_mem_size; - store_pages_max += stats.store_pages_max; - store_mem_used += stats.store_mem_used; - objects_size += stats.objects_size; + + store += stats.store; + unlink_requests += stats.unlink_requests; http_requests5 += stats.http_requests5; http_requests60 += stats.http_requests60; @@ -124,11 +121,6 @@ opening_fd += stats.opening_fd; num_fd_free += stats.num_fd_free; reserved_fd += stats.reserved_fd; - store_open_disk_fd += stats.store_open_disk_fd; - store_entries += stats.store_entries; - store_mem_entries += stats.store_mem_entries; - hot_obj_count += stats.hot_obj_count; - n_disk_objects += stats.n_disk_objects; ++count; return *this; diff -u -r -N squid-3.2.0.13/src/mgr/InfoAction.h squid-3.2.0.14/src/mgr/InfoAction.h --- squid-3.2.0.13/src/mgr/InfoAction.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/mgr/InfoAction.h 2011-12-13 00:08:18.000000000 +1300 @@ -9,6 +9,7 @@ #define SQUID_MGR_INFO_ACTION_H #include "mgr/Action.h" +#include "StoreStats.h" #include @@ -48,12 +49,9 @@ double request_hit_mem_ratio60; double request_hit_disk_ratio5; double request_hit_disk_ratio60; - double store_swap_size; - double store_swap_max_size; - double store_mem_size; - double store_pages_max; - double store_mem_used; - double objects_size; + + StoreInfoStats store; ///< disk and memory cache statistics + double unlink_requests; double http_requests5; double http_requests60; @@ -113,11 +111,6 @@ double opening_fd; double num_fd_free; double reserved_fd; - double store_open_disk_fd; - double store_entries; - double store_mem_entries; - double hot_obj_count; - double n_disk_objects; unsigned int count; }; diff -u -r -N squid-3.2.0.13/src/mgr/Inquirer.cc squid-3.2.0.14/src/mgr/Inquirer.cc --- squid-3.2.0.13/src/mgr/Inquirer.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/mgr/Inquirer.cc 2011-12-13 00:08:18.000000000 +1300 @@ -75,10 +75,9 @@ LOCAL_ARRAY(char, url, MAX_URL); snprintf(url, MAX_URL, "%s", aggrAction->command().params.httpUri.termedBuf()); HttpRequest *req = HttpRequest::CreateFromUrl(url); - ErrorState *err = errorCon(ERR_INVALID_URL, HTTP_NOT_FOUND, req); - std::auto_ptr reply(err->BuildHttpReply()); + ErrorState err(ERR_INVALID_URL, HTTP_NOT_FOUND, req); + std::auto_ptr reply(err.BuildHttpReply()); replyBuf.reset(reply->pack()); - errorStateFree(err); } else { std::auto_ptr reply(new HttpReply); reply->setHeaders(HTTP_OK, NULL, "text/plain", -1, squid_curtime, squid_curtime); diff -u -r -N squid-3.2.0.13/src/pconn.cc squid-3.2.0.14/src/pconn.cc --- squid-3.2.0.13/src/pconn.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/pconn.cc 2011-12-13 00:08:18.000000000 +1300 @@ -192,7 +192,7 @@ comm_read(conn, fakeReadBuf_, sizeof(fakeReadBuf_), readCall); AsyncCall::Pointer timeoutCall = commCbCall(5,4, "IdleConnList::Timeout", CommTimeoutCbPtrFun(IdleConnList::Timeout, this)); - commSetConnTimeout(conn, Config.Timeout.pconn, timeoutCall); + commSetConnTimeout(conn, Config.Timeout.serverIdlePconn, timeoutCall); } /// Determine whether an entry in the idle list is available for use. @@ -417,7 +417,7 @@ assert(!comm_has_incomplete_write(conn->fd)); LOCAL_ARRAY(char, desc, FD_DESC_SZ); - snprintf(desc, FD_DESC_SZ, "Idle: %s", aKey); + snprintf(desc, FD_DESC_SZ, "Idle server: %s", aKey); fd_note(conn->fd, desc); debugs(48, 3, HERE << "pushed " << conn << " for " << aKey); } diff -u -r -N squid-3.2.0.13/src/peer_select.cc squid-3.2.0.14/src/peer_select.cc --- squid-3.2.0.13/src/peer_select.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/peer_select.cc 2011-12-13 00:08:18.000000000 +1300 @@ -34,6 +34,7 @@ #include "squid.h" #include "DnsLookupDetails.h" +#include "errorpage.h" #include "event.h" #include "PeerSelectState.h" #include "Store.h" @@ -104,6 +105,8 @@ psstate->entry = NULL; } + delete psstate->lastError; + cbdataFree(psstate); } @@ -265,7 +268,8 @@ void *cbdata; if (cbdataReferenceValidDone(psstate->callback_data, &cbdata)) { - callback(psstate->paths, cbdata); + callback(psstate->paths, psstate->lastError, cbdata); + psstate->lastError = NULL; // FwdState has taken control over the ErrorState object. } peerSelectStateFree(psstate); @@ -317,6 +321,13 @@ } } else { debugs(44, 3, HERE << "Unknown host: " << fs->_peer ? fs->_peer->host : psstate->request->GetHost()); + // discard any previous error. + delete psstate->lastError; + psstate->lastError = NULL; + if (fs->code == HIER_DIRECT) { + psstate->lastError = new ErrorState(ERR_DNS_FAIL, HTTP_SERVICE_UNAVAILABLE, psstate->request); + psstate->lastError->dnsError = details.error; + } } psstate->servers = fs->next; @@ -441,8 +452,10 @@ if (Config.onoff.prefer_direct) peerGetSomeDirect(ps); - if (request->flags.hierarchical || !Config.onoff.nonhierarchical_direct) + if (request->flags.hierarchical || !Config.onoff.nonhierarchical_direct) { peerGetSomeParent(ps); + peerGetAllParents(ps); + } if (!Config.onoff.prefer_direct) peerGetSomeDirect(ps); @@ -897,6 +910,7 @@ direct(DIRECT_UNKNOWN), callback (NULL), callback_data (NULL), + lastError(NULL), servers (NULL), first_parent_miss(), closest_parent_miss(), diff -u -r -N squid-3.2.0.13/src/PeerSelectState.h squid-3.2.0.14/src/PeerSelectState.h --- squid-3.2.0.13/src/PeerSelectState.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/PeerSelectState.h 2011-12-13 00:08:18.000000000 +1300 @@ -43,8 +43,9 @@ class HttpRequest; class StoreEntry; +class ErrorState; -typedef void PSC(Comm::ConnectionList *, void *); +typedef void PSC(Comm::ConnectionList *, ErrorState *, void *); SQUIDCEXTERN void peerSelect(Comm::ConnectionList *, HttpRequest *, StoreEntry *, PSC *, void *data); SQUIDCEXTERN void peerSelectInit(void); @@ -79,6 +80,7 @@ int direct; // TODO: fold always_direct/never_direct/prefer_direct into this now that ACL can do a multi-state result. PSC *callback; void *callback_data; + ErrorState *lastError; Comm::ConnectionList *paths; ///< the callers paths array. to be filled with our final results. FwdServer *servers; ///< temporary linked list of peers we will pass back. diff -u -r -N squid-3.2.0.13/src/ProtoPort.h squid-3.2.0.14/src/ProtoPort.h --- squid-3.2.0.13/src/ProtoPort.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ProtoPort.h 2011-12-13 00:08:18.000000000 +1300 @@ -72,6 +72,7 @@ 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); diff -u -r -N squid-3.2.0.13/src/protos.h squid-3.2.0.14/src/protos.h --- squid-3.2.0.13/src/protos.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/protos.h 2011-12-13 00:08:18.000000000 +1300 @@ -144,14 +144,6 @@ SQUIDCEXTERN int fdUsageHigh(void); SQUIDCEXTERN void fdAdjustReserved(void); -SQUIDCEXTERN fileMap *file_map_create(void); -SQUIDCEXTERN int file_map_allocate(fileMap *, int); -SQUIDCEXTERN int file_map_bit_set(fileMap *, int); -SQUIDCEXTERN int file_map_bit_test(fileMap *, int); -SQUIDCEXTERN void file_map_bit_reset(fileMap *, int); -SQUIDCEXTERN void filemapFreeMemory(fileMap *); - - SQUIDCEXTERN void fqdncache_nbgethostbyaddr(const Ip::Address &, FQDNH *, void *); SQUIDCEXTERN const char *fqdncache_gethostbyaddr(const Ip::Address &, int flags); @@ -214,26 +206,11 @@ StoreEntry * entry, MemBuf * mb, http_state_flags); -SQUIDCEXTERN void httpAnonInitModule(void); -SQUIDCEXTERN int httpAnonHdrAllowed(http_hdr_type hdr_id); -SQUIDCEXTERN int httpAnonHdrDenied(http_hdr_type hdr_id); SQUIDCEXTERN const char *httpMakeVaryMark(HttpRequest * request, HttpReply const * reply); #include "HttpStatusCode.h" SQUIDCEXTERN const char *httpStatusString(http_status status); -/* Http Body */ -/* init/clean */ -SQUIDCEXTERN void httpBodyInit(HttpBody * body); -SQUIDCEXTERN void httpBodyClean(HttpBody * body); -/* get body ptr (always use this) */ -SQUIDCEXTERN const char *httpBodyPtr(const HttpBody * body); -/* set body, does not clone mb so you should not reuse it */ -SQUIDCEXTERN void httpBodySet(HttpBody * body, MemBuf * mb); - -/* pack */ -SQUIDCEXTERN void httpBodyPackInto(const HttpBody * body, Packer * p); - /* Http Cache Control Header Field */ SQUIDCEXTERN void httpHdrCcInitModule(void); SQUIDCEXTERN void httpHdrCcCleanModule(void); @@ -272,7 +249,6 @@ SQUIDCEXTERN PF snmpHandleUdp; SQUIDCEXTERN void snmpInit(void); SQUIDCEXTERN void snmpConnectionOpen(void); -SQUIDCEXTERN void snmpConnectionShutdown(void); SQUIDCEXTERN void snmpConnectionClose(void); SQUIDCEXTERN const char * snmpDebugOid(oid * Name, snint Len, MemBuf &outbuf); @@ -591,6 +567,7 @@ SQUIDCEXTERN void dumpMallocStats(void); #if USE_UNLINKD +SQUIDCEXTERN bool unlinkdNeeded(void); SQUIDCEXTERN void unlinkdInit(void); SQUIDCEXTERN void unlinkdClose(void); SQUIDCEXTERN void unlinkdUnlink(const char *); diff -u -r -N squid-3.2.0.13/src/recv-announce.cc squid-3.2.0.14/src/recv-announce.cc --- squid-3.2.0.13/src/recv-announce.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/recv-announce.cc 2011-12-13 00:08:18.000000000 +1300 @@ -86,7 +86,7 @@ socklen_t len; struct hostent *hp = NULL; - char logfile[BUFSIZ]; + const char *logfile; char ip[4]; for (len = 0; len < 32; len++) { @@ -95,9 +95,9 @@ if (argc > 1) - strcpy(logfile, argv[1]); + logfile = argv[1]; else - strcpy(logfile, "/tmp/recv-announce.log"); + logfile = "/tmp/recv-announce.log"; close(1); diff -u -r -N squid-3.2.0.13/src/Server.cc squid-3.2.0.14/src/Server.cc --- squid-3.2.0.13/src/Server.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/Server.cc 2011-12-13 00:08:18.000000000 +1300 @@ -50,6 +50,7 @@ #include "adaptation/AccessCheck.h" #include "adaptation/Answer.h" #include "adaptation/Iterator.h" +#include "base/AsyncCall.h" #endif // implemented in client_side_reply.cc until sides have a common parent @@ -63,7 +64,9 @@ adaptationAccessCheckPending(false), startedAdaptation(false), #endif - receivedWholeRequestBody(false) + receivedWholeRequestBody(false), + theVirginReply(NULL), + theFinalReply(NULL) { fwd = theFwdState; entry = fwd->entry; @@ -211,29 +214,17 @@ #endif completeForwarding(); - quitIfAllDone(); } -// When we are done talking to the primary server, we may be still talking -// to the ICAP service. And vice versa. Here, we quit only if we are done -// talking to both. -void ServerStateData::quitIfAllDone() +bool ServerStateData::doneAll() const { + return doneWithServer() && #if USE_ADAPTATION - if (!doneWithAdaptation()) { - debugs(11,5, HERE << "transaction not done: still talking to ICAP"); - return; - } + doneWithAdaptation() && + Adaptation::Initiator::doneAll() && + BodyProducer::doneAll() && #endif - - if (!doneWithServer()) { - debugs(11,5, HERE << "transaction not done: still talking to server"); - return; - } - - debugs(11,3, HERE << "transaction done"); - - deleteThis("ServerStateData::quitIfAllDone"); + BodyConsumer::doneAll(); } // FTP side overloads this to work around multiple calls to fwd->complete @@ -285,7 +276,8 @@ return; } #endif - handleMoreRequestBodyAvailable(); + if (requestBodySource == bp) + handleMoreRequestBodyAvailable(); } // the entire request or adapted response body was provided, successfully @@ -298,7 +290,8 @@ return; } #endif - handleRequestBodyProductionEnded(); + if (requestBodySource == bp) + handleRequestBodyProductionEnded(); } // premature end of the request or adapted response body production @@ -311,7 +304,8 @@ return; } #endif - handleRequestBodyProducerAborted(); + if (requestBodySource == bp) + handleRequestBodyProducerAborted(); } @@ -386,7 +380,7 @@ if (io.flag) { debugs(11, 1, "sentRequestBody error: FD " << io.fd << ": " << xstrerr(io.xerrno)); ErrorState *err; - err = errorCon(ERR_WRITE_ERROR, HTTP_BAD_GATEWAY, fwd->request); + err = new ErrorState(ERR_WRITE_ERROR, HTTP_BAD_GATEWAY, fwd->request); err->xerrno = io.xerrno; fwd->fail(err); abortTransaction("I/O error while sending request body"); @@ -710,22 +704,67 @@ } } -// more adapted response body is available void -ServerStateData::handleMoreAdaptedBodyAvailable() +ServerStateData::resumeBodyStorage() { - const size_t contentSize = adaptedBodySource->buf().contentSize(); + if (abortOnBadEntry("store entry aborted while kick producer callback")) + return; - debugs(11,5, HERE << "consuming " << contentSize << " bytes of adapted " << - "response body at offset " << adaptedBodySource->consumedSize()); + if (!adaptedBodySource) + return; + + handleMoreAdaptedBodyAvailable(); + if (adaptedBodySource != NULL && adaptedBodySource->exhausted()) + endAdaptedBodyConsumption(); +} + +// more adapted response body is available +void +ServerStateData::handleMoreAdaptedBodyAvailable() +{ if (abortOnBadEntry("entry refuses adapted body")) return; assert(entry); + + size_t contentSize = adaptedBodySource->buf().contentSize(); + + 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; + + if (spaceAvailable < contentSize ) { + // No or partial body data consuming + typedef NullaryMemFunT Dialer; + AsyncCall::Pointer call = asyncCall(93, 5, "ServerStateData::resumeBodyStorage", + Dialer(this, &ServerStateData::resumeBodyStorage)); + entry->deferProducer(call); + } + + // XXX: bytesWanted API does not allow us to write just one byte! + if (!spaceAvailable && contentSize > 1) { + debugs(11, 5, HERE << "NOT storing " << contentSize << " bytes of adapted " << + "response body at offset " << adaptedBodySource->consumedSize()); + return; + } + + if (spaceAvailable < contentSize ) { + debugs(11, 5, HERE << "postponing storage of " << + (contentSize - spaceAvailable) << " body bytes"); + contentSize = spaceAvailable; + } + + debugs(11,5, HERE << "storing " << contentSize << " bytes of adapted " << + "response body at offset " << adaptedBodySource->consumedSize()); + BodyPipeCheckout bpc(*adaptedBodySource); - const StoreIOBuffer ioBuf(&bpc.buf, currentOffset); - currentOffset += bpc.buf.size; + const StoreIOBuffer ioBuf(&bpc.buf, currentOffset, contentSize); + currentOffset += ioBuf.length; entry->write(ioBuf); bpc.buf.consume(contentSize); bpc.checkIn(); @@ -735,11 +774,19 @@ void ServerStateData::handleAdaptedBodyProductionEnded() { - stopConsumingFrom(adaptedBodySource); - if (abortOnBadEntry("entry went bad while waiting for adapted body eof")) return; + // end consumption if we consumed everything + if (adaptedBodySource != NULL && adaptedBodySource->exhausted()) + endAdaptedBodyConsumption(); + // else resumeBodyStorage() will eventually consume the rest +} + +void +ServerStateData::endAdaptedBodyConsumption() +{ + stopConsumingFrom(adaptedBodySource); handleAdaptationCompleted(); } @@ -766,7 +813,6 @@ } completeForwarding(); - quitIfAllDone(); } @@ -784,7 +830,7 @@ if (entry->isEmpty()) { debugs(11,9, HERE << "creating ICAP error entry after ICAP failure"); - ErrorState *err = errorCon(ERR_ICAP_FAILURE, HTTP_INTERNAL_SERVER_ERROR, request); + ErrorState *err = new ErrorState(ERR_ICAP_FAILURE, HTTP_INTERNAL_SERVER_ERROR, request); err->xerrno = ERR_DETAIL_ICAP_RESPMOD_EARLY; fwd->fail(err); fwd->dontRetry(true); @@ -818,7 +864,7 @@ if (page_id == ERR_NONE) page_id = ERR_ACCESS_DENIED; - ErrorState *err = errorCon(page_id, HTTP_FORBIDDEN, request); + ErrorState *err = new ErrorState(page_id, HTTP_FORBIDDEN, request); err->xerrno = ERR_DETAIL_RESPMOD_BLOCK_EARLY; fwd->fail(err); fwd->dontRetry(true); @@ -827,7 +873,7 @@ } void -ServerStateData::adaptationAclCheckDone(Adaptation::ServiceGroupPointer group) +ServerStateData::noteAdaptationAclCheckDone(Adaptation::ServiceGroupPointer group) { adaptationAccessCheckPending = false; @@ -852,19 +898,12 @@ startAdaptation(group, originalRequest()); processReplyBody(); } - -void -ServerStateData::adaptationAclCheckDoneWrapper(Adaptation::ServiceGroupPointer group, void *data) -{ - ServerStateData *state = (ServerStateData *)data; - state->adaptationAclCheckDone(group); -} #endif void ServerStateData::sendBodyIsTooLargeError() { - ErrorState *err = errorCon(ERR_TOO_BIG, HTTP_FORBIDDEN, request); + ErrorState *err = new ErrorState(ERR_TOO_BIG, HTTP_FORBIDDEN, request); err->xerrno = errno; fwd->fail(err); fwd->dontRetry(true); @@ -881,7 +920,7 @@ // The callback can be called with a NULL service if adaptation is off. adaptationAccessCheckPending = Adaptation::AccessCheck::Start( Adaptation::methodRespmod, Adaptation::pointPreCache, - originalRequest(), virginReply(), adaptationAclCheckDoneWrapper, this); + originalRequest(), virginReply(), this); debugs(11,5, HERE << "adaptationAccessCheckPending=" << adaptationAccessCheckPending); if (adaptationAccessCheckPending) return; diff -u -r -N squid-3.2.0.13/src/Server.h squid-3.2.0.14/src/Server.h --- squid-3.2.0.13/src/Server.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/Server.h 2011-12-13 00:08:18.000000000 +1300 @@ -87,11 +87,9 @@ virtual HttpRequest *originalRequest(); #if USE_ADAPTATION - void adaptationAclCheckDone(Adaptation::ServiceGroupPointer group); - static void adaptationAclCheckDoneWrapper(Adaptation::ServiceGroupPointer group, void *data); - - // ICAPInitiator: start an ICAP transaction and receive adapted headers. + // Adaptation::Initiator API: start an ICAP transaction and receive adapted headers. virtual void noteAdaptationAnswer(const Adaptation::Answer &answer); + virtual void noteAdaptationAclCheckDone(Adaptation::ServiceGroupPointer group); // BodyProducer: provide virgin response body to ICAP. virtual void noteMoreBodySpaceAvailable(BodyPipe::Pointer ); @@ -102,14 +100,7 @@ //AsyncJob virtual methods virtual void swanSong(); - virtual bool doneAll() const { - return -#if USE_ADAPTATION - Adaptation::Initiator::doneAll() && - BodyProducer::doneAll() && -#endif - BodyConsumer::doneAll() && false; - } + virtual bool doneAll() const; public: // should be protected void serverComplete(); /**< call when no server communication is expected */ @@ -156,6 +147,11 @@ void handleAdaptationCompleted(); void handleAdaptationBlocked(const Adaptation::Answer &answer); void handleAdaptationAborted(bool bypassable = false); + + /// called by StoreEntry when it has more buffer space available + void resumeBodyStorage(); + /// called when the entire adapted response body is consumed + void endAdaptedBodyConsumption(); #endif protected: @@ -198,7 +194,6 @@ bool receivedWholeRequestBody; ///< handleRequestBodyProductionEnded called private: - void quitIfAllDone(); /**< successful termination */ void sendBodyIsTooLargeError(); void maybePurgeOthers(); diff -u -r -N squid-3.2.0.13/src/snmp_core.cc squid-3.2.0.14/src/snmp_core.cc --- squid-3.2.0.13/src/snmp_core.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/snmp_core.cc 2011-12-13 00:08:18.000000000 +1300 @@ -92,7 +92,6 @@ * The functions used during startup: * snmpInit * snmpConnectionOpen - * snmpConnectionShutdown * snmpConnectionClose */ @@ -357,35 +356,19 @@ } void -snmpConnectionShutdown(void) -{ - if (!Comm::IsConnOpen(snmpIncomingConn)) - return; - - // Perform lazy closure. So as not to step on outgoing connection when sharing. - debugs(49, DBG_IMPORTANT, "Closing SNMP receiving port " << snmpIncomingConn->local); - snmpIncomingConn = NULL; - - /* - * Normally we only write to the outgoing SNMP socket, but we - * also have a read handler there to catch messages sent to that - * specific interface. During shutdown, we must disable reading - * on the outgoing socket. - */ - assert(Comm::IsConnOpen(snmpOutgoingConn)); - - Comm::SetSelect(snmpOutgoingConn->fd, COMM_SELECT_READ, NULL, NULL, 0); -} - -void snmpConnectionClose(void) { - snmpConnectionShutdown(); - - if (!Comm::IsConnOpen(snmpOutgoingConn)) - return; + if (Comm::IsConnOpen(snmpIncomingConn)) { + debugs(49, DBG_IMPORTANT, "Closing SNMP receiving port " << snmpIncomingConn->local); + snmpIncomingConn->close(); + } + snmpIncomingConn = NULL; - debugs(49, DBG_IMPORTANT, "Closing SNMP sending port " << snmpOutgoingConn->local); + if (Comm::IsConnOpen(snmpOutgoingConn) && snmpIncomingConn != snmpOutgoingConn) { + // Perform OUT port closure so as not to step on IN port when sharing a conn. + debugs(49, DBG_IMPORTANT, "Closing SNMP sending port " << snmpOutgoingConn->local); + snmpOutgoingConn->close(); + } snmpOutgoingConn = NULL; } diff -u -r -N squid-3.2.0.13/src/squid.8.in squid-3.2.0.14/src/squid.8.in --- squid-3.2.0.13/src/squid.8.in 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/squid.8.in 2011-12-13 00:08:18.000000000 +1300 @@ -265,7 +265,7 @@ .if !'po4a'hide' .B pam_auth "(8), " .if !'po4a'hide' .B squid_ldap_auth "(8), " .if !'po4a'hide' .B squid_ldap_group "(8), " -.if !'po4a'hide' .B squid_session "(8), " +.if !'po4a'hide' .B ext_session_acl "(8), " .if !'po4a'hide' .B squid_unix_group "(8), " .br The Squid FAQ wiki diff -u -r -N squid-3.2.0.13/src/squid.h squid-3.2.0.14/src/squid.h --- squid-3.2.0.13/src/squid.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/squid.h 2011-12-13 00:08:18.000000000 +1300 @@ -149,7 +149,7 @@ #define LOCAL_ARRAY(type,name,size) static type name[size] #endif -#if defined(_SQUID_NEXT_) && !defined(S_ISDIR) +#if _SQUID_NEXT_ && !defined(S_ISDIR) #define S_ISDIR(mode) (((mode) & (_S_IFMT)) == (_S_IFDIR)) #endif diff -u -r -N squid-3.2.0.13/src/ssl/ErrorDetail.cc squid-3.2.0.14/src/ssl/ErrorDetail.cc --- squid-3.2.0.13/src/ssl/ErrorDetail.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ssl/ErrorDetail.cc 2011-12-13 00:08:18.000000000 +1300 @@ -10,14 +10,16 @@ const char *name; }; -static const char *SslErrorDetailDefaultStr = "SSL certificate validation error (%err_name): %ssl_subject"; +static const char *SslErrorDetailDefaultStr = "SSL handshake error (%err_name)"; //Use std::map to optimize search typedef std::map SslErrors; SslErrors TheSslErrors; static SslErrorEntry TheSslErrorArray[] = { + {SQUID_ERR_SSL_HANDSHAKE, + "SQUID_ERR_SSL_HANDSHAKE"}, {SQUID_X509_V_ERR_DOMAIN_MISMATCH, - "SQUID_X509_V_ERR_DOMAIN_MISMATCH"}, + "SQUID_X509_V_ERR_DOMAIN_MISMATCH"}, {X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT, "X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT"}, {X509_V_ERR_UNABLE_TO_GET_CRL, @@ -149,6 +151,7 @@ {"ssl_notafter", &Ssl::ErrorDetail::notafter}, {"err_name", &Ssl::ErrorDetail::err_code}, {"ssl_error_descr", &Ssl::ErrorDetail::err_descr}, + {"ssl_lib_error", &Ssl::ErrorDetail::err_lib_error}, {NULL,NULL} }; @@ -267,16 +270,25 @@ return "[Not available]"; } +const char *Ssl::ErrorDetail::err_lib_error() const +{ + if (lib_error_no != SSL_ERROR_NONE) + return ERR_error_string(lib_error_no, NULL); + else + return "[No Error]"; +} + /** * It converts the code to a string value. Currently the following * formating codes are supported: - * %err_name: The name of the SSL error + * %err_name: The name of a high-level SSL error (e.g., X509_V_ERR_*) * %ssl_error_descr: A short description of the SSL error * %ssl_cn: The comma-separated list of common and alternate names * %ssl_subject: The certificate subject * %ssl_ca_name: The certificate issuer name * %ssl_notbefore: The certificate "not before" field * %ssl_notafter: The certificate "not after" field + * %ssl_lib_error: human-readable low-level error string by ERR_error_string(3SSL) \retval the length of the code (the number of characters will be replaced by value) */ int Ssl::ErrorDetail::convert(const char *code, const char **value) const @@ -337,9 +349,11 @@ CRYPTO_add(&(cert->references),1,CRYPTO_LOCK_X509); peer_cert.reset(cert); */ -Ssl::ErrorDetail::ErrorDetail( Ssl::ssl_error_t err_no, X509 *cert): error_no (err_no) +Ssl::ErrorDetail::ErrorDetail( Ssl::ssl_error_t err_no, X509 *cert): error_no (err_no), lib_error_no(SSL_ERROR_NONE) { - peer_cert.reset(X509_dup(cert)); + if (cert) + peer_cert.reset(X509_dup(cert)); + detailEntry.error_no = SSL_ERROR_NONE; } @@ -353,4 +367,6 @@ } detailEntry = anErrDetail.detailEntry; + + lib_error_no = anErrDetail.lib_error_no; } diff -u -r -N squid-3.2.0.13/src/ssl/ErrorDetail.h squid-3.2.0.14/src/ssl/ErrorDetail.h --- squid-3.2.0.13/src/ssl/ErrorDetail.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ssl/ErrorDetail.h 2011-12-13 00:08:18.000000000 +1300 @@ -49,9 +49,13 @@ ErrorDetail(ssl_error_t err_no, X509 *cert); ErrorDetail(ErrorDetail const &); const String &toString() const; ///< An error detail string to embed in squid error pages - void useRequest(HttpRequest *aRequest) { if (request != NULL) request = aRequest;} + void useRequest(HttpRequest *aRequest) { if (aRequest != NULL) request = aRequest;} /// The error name to embed in squid error pages const char *errorName() const {return err_code();} + /// The error no + ssl_error_t errorNo() const {return error_no;} + ///Sets the low-level error returned by OpenSSL ERR_get_error() + void setLibError(unsigned long lib_err_no) {lib_error_no = lib_err_no;} private: typedef const char * (ErrorDetail::*fmt_action_t)() const; @@ -73,12 +77,14 @@ const char *notafter() const; const char *err_code() const; const char *err_descr() const; + const char *err_lib_error() const; int convert(const char *code, const char **value) const; void buildDetail() const; mutable String errDetailStr; ///< Caches the error detail message ssl_error_t error_no; ///< The error code + unsigned long lib_error_no; ///< low-level error returned by OpenSSL ERR_get_error(3SSL) X509_Pointer peer_cert; ///< A pointer to the peer certificate mutable ErrorDetailEntry detailEntry; HttpRequest::Pointer request; diff -u -r -N squid-3.2.0.13/src/ssl/gadgets.cc squid-3.2.0.14/src/ssl/gadgets.cc --- squid-3.2.0.13/src/ssl/gadgets.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ssl/gadgets.cc 2011-12-13 00:08:18.000000000 +1300 @@ -4,6 +4,9 @@ #include "config.h" #include "ssl/gadgets.h" +#if HAVE_OPENSSL_X509V3_H +#include +#endif /** \ingroup ServerProtocolSSLInternal @@ -11,16 +14,18 @@ */ static bool addCnToRequest(Ssl::X509_REQ_Pointer & request, char const * cn) { - Ssl::X509_NAME_Pointer name(X509_REQ_get_subject_name(request.get())); + // not an Ssl::X509_NAME_Pointer because X509_REQ_get_subject_name() + // returns a pointer to the existing subject name. Nothing to clean here. + X509_NAME *name = X509_REQ_get_subject_name(request.get()); if (!name) return false; // The second argument of the X509_NAME_add_entry_by_txt declared as // "char *" on some OS. Use cn_name to avoid compile warnings. static char cn_name[3] = "CN"; - if (!X509_NAME_add_entry_by_txt(name.get(), cn_name, MBSTRING_ASC, (unsigned char *)cn, -1, -1, 0)) + if (!X509_NAME_add_entry_by_txt(name, cn_name, MBSTRING_ASC, (unsigned char *)cn, -1, -1, 0)) return false; - name.release(); + return true; } @@ -231,11 +236,7 @@ return certificate; } -/** - \ingroup ServerProtocolSSLInternal - * Read private key from file. Make sure that this is not encrypted file. - */ -static EVP_PKEY * readSslPrivateKey(char const * keyFilename) +EVP_PKEY * Ssl::readSslPrivateKey(char const * keyFilename) { if (!keyFilename) return NULL; diff -u -r -N squid-3.2.0.13/src/ssl/gadgets.h squid-3.2.0.14/src/ssl/gadgets.h --- squid-3.2.0.13/src/ssl/gadgets.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ssl/gadgets.h 2011-12-13 00:08:18.000000000 +1300 @@ -39,6 +39,9 @@ CtoCpp1(X509_free, X509 *) typedef TidyPointer X509_Pointer; +CtoCpp1(sk_X509_free, STACK_OF(X509) *) +typedef TidyPointer X509_STACK_Pointer; + CtoCpp1(EVP_PKEY_free, EVP_PKEY *) typedef TidyPointer EVP_PKEY_Pointer; @@ -118,6 +121,12 @@ /** \ingroup SslCrtdSslAPI + * Read private key from file. Make sure that this is not encrypted file. + */ +EVP_PKEY * readSslPrivateKey(char const * keyFilename); + +/** + \ingroup SslCrtdSslAPI * Read certificate and private key from files. * \param certFilename name of file with certificate. * \param keyFilename name of file with private key. diff -u -r -N squid-3.2.0.13/src/ssl/ssl_crtd.8 squid-3.2.0.14/src/ssl/ssl_crtd.8 --- squid-3.2.0.13/src/ssl/ssl_crtd.8 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ssl/ssl_crtd.8 2011-12-13 00:08:18.000000000 +1300 @@ -88,6 +88,16 @@ . .SH KNOWN ISSUES .PP +.B SSL errors after changing the CA +. +.PP +Certificates are stored in this database in signed form. +After any change to the signing CA in squid.conf be sure to erase and re-initialize the certificate database. +. +.PP +.B Certificate chaining +. +.PP The version 1.0 of this helper will not add chained intermediate CA certificates. The client must have a full chain of trust from the root CA all the way down to the end certificate generated by this program. @@ -109,6 +119,10 @@ .if !'po4a'hide' .RE . .PP +Certificates are stored in this database in signed form. +After any change to the signing CA in squid.conf be sure to erase and re-initialize the certificate database. +. +.PP For simple configuration the helper defaults can be used. Only HTTP listening port options are required to enable generation and set the signign CA certificate. For Example: diff -u -r -N squid-3.2.0.13/src/ssl/support.cc squid-3.2.0.14/src/ssl/support.cc --- squid-3.2.0.13/src/ssl/support.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ssl/support.cc 2011-12-13 00:08:18.000000000 +1300 @@ -252,7 +252,18 @@ if (!dont_verify_domain && server) {} if (!ok && !SSL_get_ex_data(ssl, ssl_ex_index_ssl_error_detail) ) { - Ssl::ErrorDetail *errDetail = new Ssl::ErrorDetail(error_no, peer_cert); + + // Find the broken certificate. It may be intermediate. + X509 *broken_cert = peer_cert; // reasonable default if search fails + // Our SQUID_X509_V_ERR_DOMAIN_MISMATCH implies peer_cert is at fault. + if (error_no != SQUID_X509_V_ERR_DOMAIN_MISMATCH) { + if (X509 *last_used_cert = X509_STORE_CTX_get_current_cert(ctx)) + broken_cert = last_used_cert; + } + + Ssl::ErrorDetail *errDetail = + new Ssl::ErrorDetail(error_no, broken_cert); + if (!SSL_set_ex_data(ssl, ssl_ex_index_ssl_error_detail, errDetail)) { debugs(83, 2, "Failed to set Ssl::ErrorDetail in ssl_verify_cb: Certificate " << buffer); delete errDetail; @@ -1008,10 +1019,8 @@ } void -ssl_shutdown_method(int fd) +ssl_shutdown_method(SSL *ssl) { - SSL *ssl = fd_table[fd].ssl; - SSL_shutdown(ssl); } @@ -1248,4 +1257,73 @@ #endif } +void Ssl::addChainToSslContext(SSL_CTX *sslContext, STACK_OF(X509) *chain) +{ + if (!chain) + return; + + for (int i = 0; i < sk_X509_num(chain); i++) { + X509 *cert = sk_X509_value(chain, i); + if (SSL_CTX_add_extra_chain_cert(sslContext, cert)) { + // increase the certificate lock + CRYPTO_add(&(cert->references),1,CRYPTO_LOCK_X509); + } else { + const int ssl_error = ERR_get_error(); + debugs(83, DBG_IMPORTANT, "WARNING: can not add certificate to SSL context chain: " << ERR_error_string(ssl_error, NULL)); + } + } +} + +/** + \ingroup ServerProtocolSSLInternal + * Read certificate from file. + * See also: static readSslX509Certificate function, gadgets.cc file + */ +static X509 * readSslX509CertificatesChain(char const * certFilename, STACK_OF(X509)* chain) +{ + if (!certFilename) + return NULL; + Ssl::BIO_Pointer bio(BIO_new(BIO_s_file_internal())); + if (!bio) + return NULL; + if (!BIO_read_filename(bio.get(), certFilename)) + return NULL; + X509 *certificate = PEM_read_bio_X509(bio.get(), NULL, NULL, NULL); + + if (certificate && chain) { + + if (X509_check_issued(certificate, certificate) == X509_V_OK) + debugs(83, 5, "Certificate is self-signed, will not be chained"); + else { + if (sk_X509_push(chain, certificate)) + CRYPTO_add(&(certificate->references), 1, CRYPTO_LOCK_X509); + else + debugs(83, DBG_IMPORTANT, "WARNING: unable to add signing certificate to cert chain"); + // and add to the chain any certificate loaded from the file + while (X509 *ca = PEM_read_bio_X509(bio.get(), NULL, NULL, NULL)) { + if (!sk_X509_push(chain, ca)) + debugs(83, DBG_IMPORTANT, "WARNING: unable to add CA certificate to cert chain"); + } + } + } + + return certificate; +} + +void Ssl::readCertChainAndPrivateKeyFromFiles(X509_Pointer & cert, EVP_PKEY_Pointer & pkey, X509_STACK_Pointer & chain, char const * certFilename, char const * keyFilename) +{ + if (keyFilename == NULL) + keyFilename = certFilename; + if (!chain) + chain.reset(sk_X509_new_null()); + if (!chain) + debugs(83, DBG_IMPORTANT, "WARNING: unable to allocate memory for cert chain"); + pkey.reset(readSslPrivateKey(keyFilename)); + cert.reset(readSslX509CertificatesChain(certFilename, chain.get())); + if (!pkey || !cert || !X509_check_private_key(cert.get(), pkey.get())) { + pkey.reset(NULL); + cert.reset(NULL); + } +} + #endif /* USE_SSL */ diff -u -r -N squid-3.2.0.13/src/ssl/support.h squid-3.2.0.14/src/ssl/support.h --- squid-3.2.0.13/src/ssl/support.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/ssl/support.h 2011-12-13 00:08:18.000000000 +1300 @@ -56,9 +56,10 @@ */ // Custom SSL errors; assumes all official errors are positive +#define SQUID_ERR_SSL_HANDSHAKE -2 #define SQUID_X509_V_ERR_DOMAIN_MISMATCH -1 // All SSL errors range: from smallest (negative) custom to largest SSL error -#define SQUID_SSL_ERROR_MIN SQUID_X509_V_ERR_DOMAIN_MISMATCH +#define SQUID_SSL_ERROR_MIN SQUID_ERR_SSL_HANDSHAKE #define SQUID_SSL_ERROR_MAX INT_MAX namespace Ssl @@ -80,7 +81,7 @@ int ssl_write_method(int, const char *, int); /// \ingroup ServerProtocolSSLAPI -void ssl_shutdown_method(int); +void ssl_shutdown_method(SSL *ssl); /// \ingroup ServerProtocolSSLAPI @@ -124,6 +125,21 @@ SSL_CTX * generateSslContextUsingPkeyAndCertFromMemory(const char * data); /** + \ingroup ServerProtocolSSLAPI + * Adds the certificates in certList to the certificate chain of the SSL context + */ +void addChainToSslContext(SSL_CTX *sslContext, STACK_OF(X509) *certList); + +/** + \ingroup ServerProtocolSSLAPI + * Read certificate, private key and any certificates which must be chained from files. + * See also: Ssl::readCertAndPrivateKeyFromFiles function, defined in gadgets.h + * \param certFilename name of file with certificate and certificates which must be chainned. + * \param keyFilename name of file with private key. + */ +void readCertChainAndPrivateKeyFromFiles(X509_Pointer & cert, EVP_PKEY_Pointer & pkey, X509_STACK_Pointer & chain, char const * certFilename, char const * keyFilename); + +/** \ingroup ServerProtocolSSLAPI * Iterates over the X509 common and alternate names and to see if matches with given data * using the check_func. diff -u -r -N squid-3.2.0.13/src/stat.cc squid-3.2.0.14/src/stat.cc --- squid-3.2.0.13/src/stat.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/stat.cc 2011-12-13 00:08:18.000000000 +1300 @@ -34,7 +34,7 @@ #include "squid.h" #include "event.h" -#include "format/Tokens.h" +#include "format/Token.h" #include "StoreClient.h" #if USE_AUTH #include "auth/UserRequest.h" @@ -548,16 +548,7 @@ stats.request_hit_disk_ratio5 = statRequestHitDiskRatio(5); stats.request_hit_disk_ratio60 = statRequestHitDiskRatio(60); - stats.store_swap_size = Store::Root().currentSize() / 1024.0; - stats.store_swap_max_size = Store::Root().maxSize(); - - stats.store_mem_size = mem_node::StoreMemSize(); - stats.store_pages_max = store_pages_max; - stats.store_mem_used = mem_node::InUseCount(); - - stats.n_disk_objects = Store::Root().currentCount(); - stats.objects_size = stats.n_disk_objects > 0 ? - stats.store_swap_size / stats.n_disk_objects : 0.0; + Store::Root().getStats(stats.store); stats.unlink_requests = statCounter.unlink.requests; @@ -665,11 +656,6 @@ stats.opening_fd = Opening_FD; stats.num_fd_free = fdNFree(); stats.reserved_fd = RESERVED_FD; - stats.store_open_disk_fd = store_open_disk_fd; - - stats.store_entries = StoreEntry::inUseCount(); - stats.store_mem_entries = MemObject::inUseCount(); - stats.hot_obj_count = hot_obj_count; } void @@ -752,22 +738,21 @@ stats.request_hit_disk_ratio60 / fct); storeAppendPrintf(sentry, "\tStorage Swap size:\t%.0f KB\n", - stats.store_swap_size); + stats.store.swap.size / 1024); storeAppendPrintf(sentry, "\tStorage Swap capacity:\t%4.1f%% used, %4.1f%% free\n", - Math::doublePercent(stats.store_swap_size, stats.store_swap_max_size), - Math::doublePercent(stats.store_swap_max_size - stats.store_swap_size, stats.store_swap_max_size)); + Math::doublePercent(stats.store.swap.size, stats.store.swap.capacity), + Math::doublePercent(stats.store.swap.available(), stats.store.swap.capacity)); storeAppendPrintf(sentry, "\tStorage Mem size:\t%.0f KB\n", - stats.store_mem_size / 1024); + stats.store.mem.size / 1024); - const double mFree = max(0.0, stats.store_pages_max-stats.store_mem_used); storeAppendPrintf(sentry, "\tStorage Mem capacity:\t%4.1f%% used, %4.1f%% free\n", - Math::doublePercent(stats.store_mem_used, stats.store_pages_max), - Math::doublePercent(mFree, stats.store_pages_max)); + Math::doublePercent(stats.store.mem.size, stats.store.mem.capacity), + Math::doublePercent(stats.store.mem.available(), stats.store.mem.capacity)); storeAppendPrintf(sentry, "\tMean Object Size:\t%0.2f KB\n", - stats.objects_size / fct); + stats.store.swap.meanObjectSize() / 1024); storeAppendPrintf(sentry, "\tRequests given to unlinkd:\t%.0f\n", stats.unlink_requests); @@ -949,17 +934,17 @@ storeAppendPrintf(sentry, "\tReserved number of file descriptors: %4.0f\n", stats.reserved_fd); storeAppendPrintf(sentry, "\tStore Disk files open: %4.0f\n", - stats.store_open_disk_fd); + stats.store.swap.open_disk_fd); storeAppendPrintf(sentry, "Internal Data Structures:\n"); storeAppendPrintf(sentry, "\t%6.0f StoreEntries\n", - stats.store_entries); + stats.store.store_entry_count); storeAppendPrintf(sentry, "\t%6.0f StoreEntries with MemObjects\n", - stats.store_mem_entries); + stats.store.mem_object_count); storeAppendPrintf(sentry, "\t%6.0f Hot Object Cache Items\n", - stats.hot_obj_count); + stats.store.mem.count); storeAppendPrintf(sentry, "\t%6.0f on-disk objects\n", - stats.n_disk_objects); + stats.store.swap.count); } void diff -u -r -N squid-3.2.0.13/src/store.cc squid-3.2.0.14/src/store.cc --- squid-3.2.0.13/src/store.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/store.cc 2011-12-13 00:08:18.000000000 +1300 @@ -316,7 +316,7 @@ * offset 0 in the memory object is the HTTP headers. */ - if (mem_status == IN_MEMORY && UsingSmp()) { + if (mem_status == IN_MEMORY && Config.memShared && IamWorkerProcess()) { // clients of an object cached in shared memory are memory clients return STORE_MEM_CLIENT; } @@ -410,6 +410,27 @@ delete hidden_mem_obj; } +#if USE_ADAPTATION +void +StoreEntry::deferProducer(const AsyncCall::Pointer &producer) +{ + if (!deferredProducer) + deferredProducer = producer; + else + debugs(20, 5, HERE << "Deferred producer call is allready set to: " << + *deferredProducer << ", requested call: " << *producer); +} + +void +StoreEntry::kickProducer() +{ + if (deferredProducer != NULL) { + ScheduleCallHere(deferredProducer); + deferredProducer = NULL; + } +} +#endif + void StoreEntry::destroyMemObject() { @@ -856,20 +877,6 @@ PROF_start(StoreEntry_write); assert(store_status == STORE_PENDING); - if (!writeBuffer.length) { - /* the headers are received already, but we have not received - * any body data. There are BROKEN abuses of HTTP which require - * the headers to be passed along before any body data - see - * http://developer.apple.com/documentation/QuickTime/QTSS/Concepts/chapter_2_section_14.html - * for an example of such bad behaviour. To accomodate this, if - * we have a empty write arrive, we flush to our clients. - * -RBC 20060903 - */ - PROF_stop(StoreEntry_write); - invokeHandlers(); - return; - } - debugs(20, 5, "storeWrite: writing " << writeBuffer.length << " bytes for '" << getMD5Text() << "'"); PROF_stop(StoreEntry_write); storeGetMemSpace(writeBuffer.length); @@ -1170,7 +1177,7 @@ last_check = squid_curtime; - pages_needed = (size / SM_PAGE_SIZE) + 1; + pages_needed = (size + SM_PAGE_SIZE-1) / SM_PAGE_SIZE; if (mem_node::InUseCount() + pages_needed < store_pages_max) { PROF_stop(storeGetMemSpace); @@ -1444,7 +1451,7 @@ if (!Config.onoff.memory_cache_first && swap_status == SWAPOUT_DONE && refcount == 1) return 0; - if (UsingSmp()) { + if (Config.memShared && IamWorkerProcess()) { const int64_t expectedSize = mem_obj->expectedReplySize(); // objects of unknown size are not allowed into memory cache, for now if (expectedSize < 0 || @@ -1627,7 +1634,8 @@ if (new_status == mem_status) return; - if (UsingSmp()) { + // are we using a shared memory cache? + if (Config.memShared && IamWorkerProcess()) { assert(new_status != IN_MEMORY); // we do not call this otherwise // This method was designed to update replacement policy, not to // actually purge something from the memory cache (TODO: rename?). @@ -1864,7 +1872,7 @@ rep->packHeadersInto(&p); mem_obj->markEndOfReplyHeaders(); - httpBodyPackInto(&rep->body, &p); + rep->body.packInto(&p); packerClean(&p); } diff -u -r -N squid-3.2.0.13/src/store_client.cc squid-3.2.0.14/src/store_client.cc --- squid-3.2.0.13/src/store_client.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/store_client.cc 2011-12-13 00:08:18.000000000 +1300 @@ -262,6 +262,11 @@ copying = false; storeClientCopy2(entry, this); + +#if USE_ADAPTATION + if (entry) + entry->kickProducer(); +#endif } /* @@ -726,6 +731,10 @@ else mem->kickReads(); +#if USE_ADAPTATION + e->kickProducer(); +#endif + return 1; } diff -u -r -N squid-3.2.0.13/src/store_dir.cc squid-3.2.0.14/src/store_dir.cc --- squid-3.2.0.13/src/store_dir.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/store_dir.cc 2011-12-13 00:08:18.000000000 +1300 @@ -327,6 +327,26 @@ } void +StoreController::getStats(StoreInfoStats &stats) const +{ + if (memStore) + memStore->getStats(stats); + else { + // move this code to a non-shared memory cache class when we have it + stats.mem.shared = false; + stats.mem.capacity = Config.memMaxSize; + stats.mem.size = mem_node::StoreMemSize(); + stats.mem.count = hot_obj_count; + } + + swapDir->getStats(stats); + + // low-level info not specific to memory or disk cache + stats.store_entry_count = StoreEntry::inUseCount(); + stats.mem_object_count = MemObject::inUseCount(); +} + +void StoreController::stat(StoreEntry &output) const { storeAppendPrintf(&output, "Store Directory Statistics:\n"); @@ -966,6 +986,22 @@ } void +StoreHashIndex::getStats(StoreInfoStats &stats) const +{ + // accumulate per-disk cache stats + for (int i = 0; i < Config.cacheSwap.n_configured; i++) { + StoreInfoStats dirStats; + store(i)->getStats(dirStats); + stats += dirStats; + } + + // common to all disks + stats.swap.open_disk_fd = store_open_disk_fd; + + // memory cache stats are collected in StoreController::getStats(), for now +} + +void StoreHashIndex::stat(StoreEntry & output) const { int i; diff -u -r -N squid-3.2.0.13/src/Store.h squid-3.2.0.14/src/Store.h --- squid-3.2.0.13/src/Store.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/Store.h 2011-12-13 00:08:18.000000000 +1300 @@ -45,6 +45,7 @@ #include "comm/forward.h" #include "Packer.h" #include "RemovalPolicy.h" +#include "StoreStats.h" #if USE_SQUID_ESI #include "esi/Element.h" @@ -61,16 +62,6 @@ class StoreSearch; class SwapDir; -typedef struct { - - struct { - int calls; - int select_fail; - int create_fail; - int success; - } create; -} StoreIoStats; - extern StoreIoStats store_io_stats; /// maximum number of entries per cache_dir @@ -210,9 +201,21 @@ virtual void lock(); virtual void release(); +#if USE_ADAPTATION + /// call back producer when more buffer space is available + void deferProducer(const AsyncCall::Pointer &producer); + /// calls back producer registered with deferProducer + void kickProducer(); +#endif + private: static MemAllocator *pool; +#if USE_ADAPTATION + /// producer callback registered with deferProducer + AsyncCall::Pointer deferredProducer; +#endif + bool validLength() const; bool hasOneOfEtags(const String &reqETags, const bool allowWeakMatch) const; }; @@ -315,6 +318,9 @@ /** the maximum object size that can be stored, -1 if unlimited */ virtual int64_t maxObjectSize() const = 0; + /// collect cache storage-related statistics + virtual void getStats(StoreInfoStats &stats) const = 0; + /** * Output stats to the provided store entry. \todo make these calls asynchronous diff -u -r -N squid-3.2.0.13/src/StoreHashIndex.h squid-3.2.0.14/src/StoreHashIndex.h --- squid-3.2.0.13/src/StoreHashIndex.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/StoreHashIndex.h 2011-12-13 00:08:18.000000000 +1300 @@ -73,6 +73,7 @@ virtual int64_t maxObjectSize() const; + virtual void getStats(StoreInfoStats &stats) const; virtual void stat(StoreEntry&) const; virtual void reference(StoreEntry&); diff -u -r -N squid-3.2.0.13/src/StoreIOBuffer.h squid-3.2.0.14/src/StoreIOBuffer.h --- squid-3.2.0.13/src/StoreIOBuffer.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/StoreIOBuffer.h 2011-12-13 00:08:18.000000000 +1300 @@ -59,6 +59,13 @@ flags.error = 0; } + StoreIOBuffer(MemBuf *aMemBuf, int64_t anOffset, size_t anLength) : + length(anLength), + offset (anOffset), + data(aMemBuf->content()) { + flags.error = 0; + } + Range range() const { return Range(offset, offset + length); } diff -u -r -N squid-3.2.0.13/src/store_log.cc squid-3.2.0.14/src/store_log.cc --- squid-3.2.0.13/src/store_log.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/store_log.cc 2011-12-13 00:08:18.000000000 +1300 @@ -33,7 +33,7 @@ */ #include "squid.h" -#include "format/Tokens.h" +#include "format/Token.h" #include "HttpReply.h" #include "log/File.h" #include "MemObject.h" diff -u -r -N squid-3.2.0.13/src/StoreStats.cc squid-3.2.0.14/src/StoreStats.cc --- squid-3.2.0.13/src/StoreStats.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/StoreStats.cc 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,62 @@ +/* + * $Id$ + * + * DEBUG: section 20 Storage Manager Statistics + * + */ + +#include "config.h" +#include "protos.h" /* for xmemset only */ +#include "StoreStats.h" + + +/* StoreInfoStats */ + +StoreInfoStats::StoreInfoStats() +{ + xmemset(this, 0, sizeof(*this)); +} + +StoreInfoStats & +StoreInfoStats::operator +=(const StoreInfoStats &stats) +{ + swap.size += stats.swap.size; + swap.capacity += stats.swap.capacity; + swap.count += stats.swap.count; + swap.open_disk_fd += stats.swap.open_disk_fd; + + // Assume that either all workers use shared memory cache or none do. + // It is possible but difficult to report correct stats for an arbitrary + // mix, and only rather unusual deployments can benefit from mixing. + + // If workers share memory, we will get shared stats from those workers + // and non-shared stats from other processes. Ignore order and also + // ignore other processes stats because they are zero in most setups. + if (stats.mem.shared) { // workers share memory + // use the latest reported stats, they all should be about the same + mem.shared = true; + mem.size = stats.mem.size; + mem.capacity = stats.mem.capacity; + mem.count = stats.mem.count; + } else if (!mem.shared) { // do not corrupt shared stats, if any + // workers do not share so we must add everything up + mem.size += stats.mem.size; + mem.capacity += stats.mem.capacity; + mem.count += stats.mem.count; + } + + store_entry_count += stats.store_entry_count; + mem_object_count += stats.mem_object_count; + + return *this; +} + + + +/* StoreIoStats */ + +StoreIoStats::StoreIoStats() +{ + xmemset(this, 0, sizeof(*this)); +} + diff -u -r -N squid-3.2.0.13/src/StoreStats.h squid-3.2.0.14/src/StoreStats.h --- squid-3.2.0.13/src/StoreStats.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/StoreStats.h 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,65 @@ +#ifndef SQUID_STORE_STATS_H +#define SQUID_STORE_STATS_H + +/// High-level store statistics used by mgr:info action. Used inside PODs! +class StoreInfoStats +{ +public: + /// Info common to memory and disk parts of the storage. Used inside PODs! + class Part + { + public: + double size; ///< bytes currently in use + double count; ///< number of cached objects + double capacity; ///< the size limit + + /// mean size of a cached object + double meanObjectSize() const { return count > 0 ? size/count : 0.0; } + + /// number of unused bytes + double available() const { return capacity - size; } + }; + + /// disk cache (all cache_dirs) storage stats + class Swap: public Part + { + public: + double open_disk_fd; ///< number of opened disk files + }; + + /// memory cache (cache_mem) storage stats + class Mem: public Part + { + public: + bool shared; ///< whether memory cache is shared among workers + }; + + + StoreInfoStats(); + StoreInfoStats &operator +=(const StoreInfoStats &stats); + + + Swap swap; ///< cache_mem stats + Mem mem; ///< all cache_dirs stats + + /* stats that could be shared by memory and disk storage */ + double store_entry_count; ///< number of StoreEntry objects in existence + double mem_object_count; ///< number of MemObject objects in existence +}; + +// TODO: this should be adjusted for use in StoreIoActionData, DiskdActionData +/// Store statistics related to low-level I/O. +class StoreIoStats +{ +public: + StoreIoStats(); + + struct { + int calls; + int select_fail; + int create_fail; + int success; + } create; ///< cache_dir selection and disk entry creation stats +}; + +#endif /* SQUID_STORE_STATS_H */ diff -u -r -N squid-3.2.0.13/src/structs.h squid-3.2.0.14/src/structs.h --- squid-3.2.0.13/src/structs.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/structs.h 2011-12-13 00:08:18.000000000 +1300 @@ -207,8 +207,8 @@ time_t forward; time_t peer_connect; time_t request; - time_t persistent_request; - time_t pconn; + time_t clientIdlePconn; + time_t serverIdlePconn; time_t siteSelect; time_t deadPeer; int icp_query; /* msec */ @@ -696,34 +696,6 @@ off_t offset; }; -struct _fileMap { - int max_n_files; - int n_files_in_map; - int toggle; - int nwords; - unsigned long *file_map; -}; - -/* - * Note: HttpBody is used only for messages with a small content that is - * known a priory (e.g., error messages). - */ - -class MemBuf; - -struct _HttpBody { - /* private */ - MemBuf *mb; -}; - -#include "SquidString.h" -/* http header extention field */ - -class HttpHdrExtField -{ - String name; /* field-name from HTTP/1.1 (no column after name) */ - String value; /* field-value from HTTP/1.1 */ -}; /* per field statistics */ @@ -741,6 +713,7 @@ }; /* compiled version of HttpHeaderFieldAttrs plus stats */ +#include "SquidString.h" class HttpHeaderFieldInfo { diff -u -r -N squid-3.2.0.13/src/SwapDir.cc squid-3.2.0.14/src/SwapDir.cc --- squid-3.2.0.13/src/SwapDir.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/SwapDir.cc 2011-12-13 00:08:18.000000000 +1300 @@ -69,6 +69,17 @@ SwapDir::unlink(StoreEntry &) {} void +SwapDir::getStats(StoreInfoStats &stats) const +{ + if (!doReportStat()) + return; + + stats.swap.size = currentSize(); + stats.swap.capacity = maxSize(); + stats.swap.count = currentCount(); +} + +void SwapDir::stat(StoreEntry &output) const { if (!doReportStat()) diff -u -r -N squid-3.2.0.13/src/SwapDir.h squid-3.2.0.14/src/SwapDir.h --- squid-3.2.0.13/src/SwapDir.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/SwapDir.h 2011-12-13 00:08:18.000000000 +1300 @@ -75,6 +75,7 @@ virtual int64_t maxObjectSize() const; + virtual void getStats(StoreInfoStats &stats) const; virtual void stat(StoreEntry &) const; virtual void sync(); /* Sync the store prior to shutdown */ @@ -132,6 +133,8 @@ virtual bool active() const; ///< may be used in this strand /// whether stat should be reported by this SwapDir virtual bool doReportStat() const { return active(); } + /// whether SwapDir may benefit from unlinkd + virtual bool unlinkdUseful() const = 0; /* official Store interface functions */ virtual void diskFull(); @@ -146,6 +149,7 @@ virtual int64_t maxObjectSize() const { return max_objsize; } + virtual void getStats(StoreInfoStats &stats) const; virtual void stat (StoreEntry &anEntry) const; virtual StoreSearch *search(String const url, HttpRequest *) = 0; diff -u -r -N squid-3.2.0.13/src/tests/stub_MemObject.cc squid-3.2.0.14/src/tests/stub_MemObject.cc --- squid-3.2.0.13/src/tests/stub_MemObject.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/tests/stub_MemObject.cc 2011-12-13 00:08:18.000000000 +1300 @@ -199,3 +199,10 @@ { fatal ("MemObject.cc required."); } + +size_t +MemObject::inUseCount() +{ + fatal ("MemObject.cc required."); + return 0; +} diff -u -r -N squid-3.2.0.13/src/tests/stub_MemStore.cc squid-3.2.0.14/src/tests/stub_MemStore.cc --- squid-3.2.0.13/src/tests/stub_MemStore.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/tests/stub_MemStore.cc 2011-12-13 00:08:18.000000000 +1300 @@ -19,6 +19,7 @@ void MemStore::cleanReadable(const sfileno) STUB void MemStore::get(String const, STOREGETCLIENT, void *) STUB void MemStore::init() STUB +void MemStore::getStats(StoreInfoStats&) const STUB void MemStore::stat(StoreEntry &) const STUB int MemStore::callback() STUB_RETVAL(0) StoreEntry *MemStore::get(const cache_key *) STUB_RETVAL(NULL) diff -u -r -N squid-3.2.0.13/src/tests/stub_store_rebuild.cc squid-3.2.0.14/src/tests/stub_store_rebuild.cc --- squid-3.2.0.13/src/tests/stub_store_rebuild.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/tests/stub_store_rebuild.cc 2011-12-13 00:08:18.000000000 +1300 @@ -36,9 +36,7 @@ void storeRebuildProgress(int sd_index, int total, int sofar) -{ - fatal ("Not implemented"); -} +{} void diff -u -r -N squid-3.2.0.13/src/tests/stub_store_stats.cc squid-3.2.0.14/src/tests/stub_store_stats.cc --- squid-3.2.0.13/src/tests/stub_store_stats.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/tests/stub_store_stats.cc 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,19 @@ +#include "squid.h" + +#define STUB_API "StoreStats.cc" +#include "tests/STUB.h" + +#include "StoreStats.h" +#include + +StoreInfoStats::StoreInfoStats() STUB + +StoreInfoStats & +StoreInfoStats::operator +=(const StoreInfoStats &stats) STUB_RETVAL(*this) + +StoreIoStats::StoreIoStats() +{ + // we have to implement this one because tests/stub_store.cc + // has a StoreIoStats global + memset(this, 0, sizeof(*this)); +} diff -u -r -N squid-3.2.0.13/src/tests/stub_tools.cc squid-3.2.0.14/src/tests/stub_tools.cc --- squid-3.2.0.13/src/tests/stub_tools.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/tests/stub_tools.cc 2011-12-13 00:08:18.000000000 +1300 @@ -72,7 +72,10 @@ IamMasterProcess() { fprintf(stderr, "Not implemented"); - return false; + // Since most tests run as a single process, this is the best default. + // TODO: If some test case uses multiple processes and cares about + // its role, we may need to parameterize or remove this stub. + return true; } bool diff -u -r -N squid-3.2.0.13/src/tests/testConfigParser.cc squid-3.2.0.14/src/tests/testConfigParser.cc --- squid-3.2.0.13/src/tests/testConfigParser.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/tests/testConfigParser.cc 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,85 @@ +#define SQUID_UNIT_TEST 1 +#include "config.h" + +#include "testConfigParser.h" +#include "SquidString.h" +#include "Mem.h" +#include "event.h" +#include "ConfigParser.h" + +CPPUNIT_TEST_SUITE_REGISTRATION( testConfigParser); + +/* let this test link sanely */ +void +eventAdd(const char *name, EVH * func, void *arg, double when, int, bool cbdata) +{} + +void testConfigParser::setUp() +{ +} + +bool testConfigParser::doParseQuotedTest(const char *s, const char *expectInterp) +{ + char cfgline[2048]; + char cfgparam[2048]; + snprintf(cfgline, 2048, "Config %s", s); + + // Points to the start of quoted string + const char *tmp = strchr(cfgline, ' '); + + if (tmp == NULL) { + fprintf(stderr, "Invalid config line: %s\n", s); + return false; + } + // Keep the initial value on cfgparam. The ConfigParser methods will write on cfgline + strcpy(cfgparam, tmp+1); + + // Initialize parser to point to the start of quoted string + strtok(cfgline, w_space); + String unEscaped; + ConfigParser::ParseQuotedString(&unEscaped); + + const bool interpOk = (unEscaped.cmp(expectInterp) == 0); + if (!interpOk) { + printf("%25s: %s\n%25s: %s\n%25s: %s\n", + "Raw configuration", cfgparam, + "Expected interpretation", expectInterp, + "Actual interpretation", unEscaped.termedBuf()); + } + + const char *quoted = ConfigParser::QuoteString(unEscaped); + bool quotedOk = (strcmp(cfgparam, quoted)==0); + if (!quotedOk) { + printf("%25s: %s\n%25s: %s\n%25s: %s\n", + "Raw configuration", cfgparam, + "Parsed and quoted", quoted, + "parsed value was", unEscaped.termedBuf()); + } + + return quotedOk && interpOk ; +} + +void testConfigParser::testParseQuoted() +{ + // SingleToken + CPPUNIT_ASSERT(doParseQuotedTest("SingleToken", "SingleToken")); + + // This is a quoted "string" by me + CPPUNIT_ASSERT(doParseQuotedTest("\"This is a quoted \\\"string\\\" by me\"", + "This is a quoted \"string\" by me")); + + // escape sequence test: \\"\"\\" + CPPUNIT_ASSERT(doParseQuotedTest("\"escape sequence test: \\\\\\\\\\\"\\\\\\\"\\\\\\\\\\\"\"", + "escape sequence test: \\\\\"\\\"\\\\\"")); + + // \beginning and end test" + CPPUNIT_ASSERT(doParseQuotedTest("\"\\\\beginning and end test\\\"\"", + "\\beginning and end test\"")); + + // " + CPPUNIT_ASSERT(doParseQuotedTest("\"\\\"\"", "\"")); + + /* \ */ + CPPUNIT_ASSERT(doParseQuotedTest("\"\\\\\"", "\\")); +} + diff -u -r -N squid-3.2.0.13/src/tests/testConfigParser.h squid-3.2.0.14/src/tests/testConfigParser.h --- squid-3.2.0.13/src/tests/testConfigParser.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/tests/testConfigParser.h 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,24 @@ +#ifndef SQUID_SRC_TEST_CONFIG_PARSER_H +#define SQUID_SRC_TEST_CONFIG_PARSER_H + +#include + +/* + * test the ConfigParser framework + */ + +class testConfigParser : public CPPUNIT_NS::TestFixture +{ + CPPUNIT_TEST_SUITE( testConfigParser ); + CPPUNIT_TEST( testParseQuoted ); + CPPUNIT_TEST_SUITE_END(); + +public: + void setUp(); + +protected: + bool doParseQuotedTest(const char *, const char *); + void testParseQuoted(); +}; + +#endif diff -u -r -N squid-3.2.0.13/src/tests/testRock.cc squid-3.2.0.14/src/tests/testRock.cc --- squid-3.2.0.13/src/tests/testRock.cc 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/tests/testRock.cc 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,291 @@ +#define SQUID_UNIT_TEST 1 +#include "config.h" + +#include "DiskIO/DiskIOModule.h" +#include "HttpHeader.h" +#include "HttpReply.h" +#include "Mem.h" +#include "MemObject.h" +#include "Store.h" +#include "StoreFileSystem.h" +#include "StoreSearch.h" +#include "SwapDir.h" +#include "fs/rock/RockSwapDir.h" +#include "testRock.h" +#include "testStoreSupport.h" + +#if HAVE_STDEXCEPT +#include +#endif + +#define TESTDIR "testRock__testRockSearch" + +CPPUNIT_TEST_SUITE_REGISTRATION( testRock ); + +extern REMOVALPOLICYCREATE createRemovalPolicy_lru; + +static void +addSwapDir(testRock::SwapDirPointer aStore) +{ + allocate_new_swapdir(&Config.cacheSwap); + Config.cacheSwap.swapDirs[Config.cacheSwap.n_configured] = aStore.getRaw(); + ++Config.cacheSwap.n_configured; +} + +void +testRock::setUp() +{ + CPPUNIT_NS::TestFixture::setUp(); + + if (0 > system ("rm -rf " TESTDIR)) + throw std::runtime_error("Failed to clean test work directory"); + + // use current directory for shared segments (on path-based OSes) + Ipc::Mem::Segment::BasePath = ""; + + Store::Root(new StoreController); + + store = new Rock::SwapDir(); + + addSwapDir(store); + + commonInit(); + + char *path=xstrdup(TESTDIR); + + char *config_line=xstrdup("foo 10 max-size=16384"); + + strtok(config_line, w_space); + + store->parse(0, path); + + safe_free(path); + + safe_free(config_line); + + /* ok, ready to create */ + store->create(); + + rr = new Rock::SwapDirRr; + rr->run(rrAfterConfig); +} + +void +testRock::tearDown() +{ + CPPUNIT_NS::TestFixture::tearDown(); + + Store::Root(NULL); + + store = NULL; + + free_cachedir(&Config.cacheSwap); + + delete rr; + + // TODO: do this once, or each time. + // safe_free(Config.replPolicy->type); + // delete Config.replPolicy; + + if (0 > system ("rm -rf " TESTDIR)) + throw std::runtime_error("Failed to clean test work directory"); +} + +void +testRock::commonInit() +{ + static bool inited = false; + + if (inited) + return; + + StoreFileSystem::SetupAllFs(); + + Config.Store.avgObjectSize = 1024; + + Config.Store.objectsPerBucket = 20; + + Config.Store.maxObjectSize = 2048; + + Config.store_dir_select_algorithm = xstrdup("round-robin"); + + Config.replPolicy = new RemovalPolicySettings; + + Config.replPolicy->type = xstrdup ("lru"); + + Config.replPolicy->args = NULL; + + /* garh garh */ + storeReplAdd("lru", createRemovalPolicy_lru); + + visible_appname_string = xstrdup(APP_FULLNAME); + + Mem::Init(); + + comm_init(); + + httpHeaderInitModule(); /* must go before any header processing (e.g. the one in errorInitialize) */ + + httpReplyInitModule(); /* must go before accepting replies */ + + mem_policy = createRemovalPolicy(Config.replPolicy); + + inited = true; +} + +void +testRock::storeInit() +{ + /* ok, ready to use */ + Store::Root().init(); + + /* rebuild is a scheduled event */ + StockEventLoop loop; + + /* our swapdir must be scheduled to rebuild */ + CPPUNIT_ASSERT_EQUAL(2, StoreController::store_dirs_rebuilding); + + loop.run(); + + /* cannot use loop.run(); as the loop will never idle: the store-dir + * clean() scheduled event prevents it + */ + + /* nothing left to rebuild */ + CPPUNIT_ASSERT_EQUAL(1, StoreController::store_dirs_rebuilding); +} + +StoreEntry * +testRock::createEntry(const int i) +{ + request_flags flags; + flags.cachable = 1; + char url[64]; + snprintf(url, sizeof(url), "dummy url %i", i); + url[sizeof(url) - 1] = '\0'; + StoreEntry *const pe = + storeCreateEntry(url, "dummy log url", flags, METHOD_GET); + HttpReply *const rep = const_cast(pe->getReply()); + rep->setHeaders(HTTP_OK, "dummy test object", "x-squid-internal/test", + -1, -1, squid_curtime + 100000); + + pe->setPublicKey(); + + return pe; +} + +StoreEntry * +testRock::addEntry(const int i) +{ + StoreEntry *const pe = createEntry(i); + + pe->buffer(); + /* TODO: remove this when the metadata is separated */ + { + Packer p; + packerToStoreInit(&p, pe); + pe->getReply()->packHeadersInto(&p); + packerClean(&p); + } + + pe->flush(); + pe->timestampsSet(); + pe->complete(); + pe->swapOut(); + + return pe; +} + +StoreEntry * +testRock::getEntry(const int i) +{ + StoreEntry *const pe = createEntry(i); + return store->get(reinterpret_cast(pe->key)); +} + +void +testRock::testRockCreate() +{ + struct stat sb; + + CPPUNIT_ASSERT(::stat(TESTDIR, &sb) == 0); + + /* TODO: check the size */ + + /* TODO: test rebuild */ +} + +void +testRock::testRockSwapOut() +{ + storeInit(); + + // add few entries to prime the database + for (int i = 0; i < 5; ++i) { + CPPUNIT_ASSERT_EQUAL((uint64_t)i, store->currentCount()); + + StoreEntry *const pe = addEntry(i); + + CPPUNIT_ASSERT(pe->swap_status == SWAPOUT_WRITING); + CPPUNIT_ASSERT(pe->swap_dirn == 0); + CPPUNIT_ASSERT(pe->swap_filen >= 0); + + // Rock::IoState::finishedWriting() schedules an AsyncCall + // storeSwapOutFileClosed(). Let it fire. + StockEventLoop loop; + loop.run(); + + CPPUNIT_ASSERT(pe->swap_status == SWAPOUT_DONE); + + pe->unlock(); + } + + CPPUNIT_ASSERT_EQUAL((uint64_t)5, store->currentCount()); + + // try to swap out entry to a used unlocked slot + { + StoreEntry *const pe = addEntry(4); + + CPPUNIT_ASSERT(pe->swap_status == SWAPOUT_WRITING); + CPPUNIT_ASSERT(pe->swap_dirn == 0); + CPPUNIT_ASSERT(pe->swap_filen >= 0); + + StockEventLoop loop; + loop.run(); + + CPPUNIT_ASSERT(pe->swap_status == SWAPOUT_DONE); + } + + // try to swap out entry to a used locked slot + { + StoreEntry *const pe = addEntry(5); + + CPPUNIT_ASSERT(pe->swap_status == SWAPOUT_WRITING); + CPPUNIT_ASSERT(pe->swap_dirn == 0); + CPPUNIT_ASSERT(pe->swap_filen >= 0); + + // the slot is locked here because the async calls have not run yet + StoreEntry *const pe2 = addEntry(5); + CPPUNIT_ASSERT(pe2->swap_status == SWAPOUT_NONE); + CPPUNIT_ASSERT(pe2->mem_obj->swapout.decision == + MemObject::SwapOut::swImpossible); + CPPUNIT_ASSERT(pe2->swap_dirn == -1); + CPPUNIT_ASSERT(pe2->swap_filen == -1); + + StockEventLoop loop; + loop.run(); + } + + CPPUNIT_ASSERT_EQUAL((uint64_t)6, store->currentCount()); + + // try to get and unlink entries + for (int i = 0; i < 6; ++i) { + StoreEntry *const pe = getEntry(i); + CPPUNIT_ASSERT(pe != NULL); + + pe->unlink(); + + StoreEntry *const pe2 = getEntry(i); + CPPUNIT_ASSERT(pe2 == NULL); + } +} diff -u -r -N squid-3.2.0.13/src/tests/testRock.h squid-3.2.0.14/src/tests/testRock.h --- squid-3.2.0.13/src/tests/testRock.h 1970-01-01 12:00:00.000000000 +1200 +++ squid-3.2.0.14/src/tests/testRock.h 2011-12-13 00:08:18.000000000 +1300 @@ -0,0 +1,37 @@ +#ifndef SQUID_SRC_TEST_TESTROCK_H +#define SQUID_SRC_TEST_TESTROCK_H + +#include + +/* + * test the store framework + */ + +class testRock : public CPPUNIT_NS::TestFixture +{ + CPPUNIT_TEST_SUITE( testRock ); + CPPUNIT_TEST( testRockCreate ); + CPPUNIT_TEST( testRockSwapOut ); + CPPUNIT_TEST_SUITE_END(); + +public: + virtual void setUp(); + virtual void tearDown(); + + typedef RefCount SwapDirPointer; + +protected: + void commonInit(); + void storeInit(); + StoreEntry *createEntry(const int i); + StoreEntry *addEntry(const int i); + StoreEntry *getEntry(const int i); + void testRockCreate(); + void testRockSwapOut(); + +private: + SwapDirPointer store; + Rock::SwapDirRr *rr; +}; + +#endif /* SQUID_SRC_TEST_TESTROCK_H */ diff -u -r -N squid-3.2.0.13/src/tests/testStore.cc squid-3.2.0.14/src/tests/testStore.cc --- squid-3.2.0.13/src/tests/testStore.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/tests/testStore.cc 2011-12-13 00:08:18.000000000 +1300 @@ -58,6 +58,11 @@ } void +TestStore::getStats(StoreInfoStats &) const +{ +} + +void TestStore::stat(StoreEntry &) const { const_cast(this)->statsCalled = true; diff -u -r -N squid-3.2.0.13/src/tests/testStore.h squid-3.2.0.14/src/tests/testStore.h --- squid-3.2.0.13/src/tests/testStore.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/tests/testStore.h 2011-12-13 00:08:18.000000000 +1300 @@ -65,6 +65,8 @@ virtual int64_t maxObjectSize() const; + virtual void getStats(StoreInfoStats &) const; + virtual void stat(StoreEntry &) const; /* output stats to the provided store entry */ virtual void reference(StoreEntry &) {} /* Reference this object */ diff -u -r -N squid-3.2.0.13/src/tests/TestSwapDir.cc squid-3.2.0.14/src/tests/TestSwapDir.cc --- squid-3.2.0.13/src/tests/TestSwapDir.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/tests/TestSwapDir.cc 2011-12-13 00:08:18.000000000 +1300 @@ -36,6 +36,12 @@ {} bool +TestSwapDir::unlinkdUseful() const +{ + return false; +} + +bool TestSwapDir::canStore(const StoreEntry &, int64_t, int &load) const { load = 0; diff -u -r -N squid-3.2.0.13/src/tests/TestSwapDir.h squid-3.2.0.14/src/tests/TestSwapDir.h --- squid-3.2.0.13/src/tests/TestSwapDir.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/tests/TestSwapDir.h 2011-12-13 00:08:18.000000000 +1300 @@ -20,6 +20,7 @@ virtual void reconfigure(); virtual void init(); + virtual bool unlinkdUseful() const; virtual bool canStore(const StoreEntry &e, int64_t diskSpaceNeeded, int &load) const; virtual StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *); virtual StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *); diff -u -r -N squid-3.2.0.13/src/test_tools.cc squid-3.2.0.14/src/test_tools.cc --- squid-3.2.0.13/src/test_tools.cc 2011-10-14 16:48:25.000000000 +1300 +++ squid-3.2.0.14/src/test_tools.cc 1970-01-01 12:00:00.000000000 +1200 @@ -1,137 +0,0 @@ -/* - * $Id$ - */ - -// XXX: This file is made of large pieces of src/tools.cc -// with only a few minor modifications. TODO: redesign or delete. - -#include "squid.h" - -void -xassert(const char *msg, const char *file, int line) -{ - std::cout << "Assertion failed: (" << msg << ") at " << file << ":" << line << std::endl; - exit (1); -} - -void -fatal_dump(const char *message) -{ - fprintf(stderr, "Fatal: %s",message); - exit (1); -} - -void -fatal(const char *message) -{ - fprintf(stderr, "Fatal: %s", message); - exit (1); -} - -/* used by fatalf */ -static void -fatalvf(const char *fmt, va_list args) -{ - static char fatal_str[BUFSIZ]; - vsnprintf(fatal_str, sizeof(fatal_str), fmt, args); - fatal(fatal_str); -} - -/* printf-style interface for fatal */ -void -fatalf(const char *fmt,...) -{ - va_list args; - va_start(args, fmt); - fatalvf(fmt, args); - va_end(args); -} - -void -debug_trap(const char *message) -{ - fatal(message); -} - -dlink_node * -dlinkNodeNew() -{ - return new dlink_node; -} - -/* the node needs to be unlinked FIRST */ -void -dlinkNodeDelete(dlink_node * m) -{ - if (m == NULL) - return; - - delete m; -} - -void -dlinkAdd(void *data, dlink_node * m, dlink_list * list) -{ - m->data = data; - m->prev = NULL; - m->next = list->head; - - if (list->head) - list->head->prev = m; - - list->head = m; - - if (list->tail == NULL) - list->tail = m; -} - -void -dlinkAddAfter(void *data, dlink_node * m, dlink_node * n, dlink_list * list) -{ - m->data = data; - m->prev = n; - m->next = n->next; - - if (n->next) - n->next->prev = m; - else { - assert(list->tail == n); - list->tail = m; - } - - n->next = m; -} - -void -dlinkAddTail(void *data, dlink_node * m, dlink_list * list) -{ - m->data = data; - m->next = NULL; - m->prev = list->tail; - - if (list->tail) - list->tail->next = m; - - list->tail = m; - - if (list->head == NULL) - list->head = m; -} - -void -dlinkDelete(dlink_node * m, dlink_list * list) -{ - if (m->next) - m->next->prev = m->prev; - - if (m->prev) - m->prev->next = m->next; - - if (m == list->head) - list->head = m->next; - - if (m == list->tail) - list->tail = m->prev; - - m->next = m->prev = NULL; -} diff -u -r -N squid-3.2.0.13/src/tools.cc squid-3.2.0.14/src/tools.cc --- squid-3.2.0.13/src/tools.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/tools.cc 2011-12-13 00:08:18.000000000 +1300 @@ -271,18 +271,9 @@ rusage_maxrss(struct rusage *r) { -#if defined(_SQUID_SGI_) && _ABIAPI +#if _SQUID_SGI_ && _ABIAPI return r->ru_pad[0]; -#elif defined(_SQUID_SGI_) - - return r->ru_maxrss; -#elif defined(_SQUID_OSF_) - - return r->ru_maxrss; -#elif defined(_SQUID_AIX_) - - return r->ru_maxrss; -#elif defined(BSD4_4) +#elif _SQUID_SGI_|| _SQUID_OSF_ || _SQUID_AIX_ || defined(BSD4_4) return r->ru_maxrss; #elif defined(HAVE_GETPAGESIZE) && HAVE_GETPAGESIZE != 0 @@ -301,7 +292,7 @@ rusage_pagefaults(struct rusage *r) { -#if defined(_SQUID_SGI_) && _ABIAPI +#if _SQUID_SGI_ && _ABIAPI return r->ru_pad[5]; #else @@ -347,7 +338,7 @@ } #endif /* _SQUID_HPUX_ */ -#if defined(_SQUID_SOLARIS_) && HAVE_LIBOPCOM_STACK +#if _SQUID_SOLARIS_ && HAVE_LIBOPCOM_STACK { /* get ftp://opcom.sun.ca/pub/tars/opcom_stack.tar.gz and */ extern void opcom_stack_trace(void); /* link with -lopcom_stack */ fflush(debug_log); @@ -368,7 +359,7 @@ #endif #endif /* PRINT_STACK_TRACE */ -#if SA_RESETHAND == 0 && !defined(_SQUID_MSWIN_) +#if SA_RESETHAND == 0 && !_SQUID_MSWIN_ signal(SIGSEGV, SIG_DFL); signal(SIGBUS, SIG_DFL); @@ -1383,7 +1374,7 @@ } cap_free(caps); } -#elif defined(_SQUID_LINUX_) +#elif _SQUID_LINUX_ Ip::Interceptor.StopTransparency("Missing needed capability support."); #endif /* HAVE_SYS_CAPABILITY_H */ } diff -u -r -N squid-3.2.0.13/src/tunnel.cc squid-3.2.0.14/src/tunnel.cc --- squid-3.2.0.13/src/tunnel.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/tunnel.cc 2011-12-13 00:08:18.000000000 +1300 @@ -124,8 +124,8 @@ static CNCB tunnelConnectDone; static ERCB tunnelErrorComplete; -static PF tunnelServerClosed; -static PF tunnelClientClosed; +static CLCB tunnelServerClosed; +static CLCB tunnelClientClosed; static CTCB tunnelTimeout; static PSC tunnelPeerSelectComplete; static void tunnelStateFree(TunnelStateData * tunnelState); @@ -133,10 +133,10 @@ static void tunnelRelayConnectRequest(const Comm::ConnectionPointer &server, void *); static void -tunnelServerClosed(int fd, void *data) +tunnelServerClosed(const CommCloseCbParams ¶ms) { - TunnelStateData *tunnelState = (TunnelStateData *)data; - debugs(26, 3, HERE << "FD " << fd); + TunnelStateData *tunnelState = (TunnelStateData *)params.data; + debugs(26, 3, HERE << tunnelState->server.conn); tunnelState->server.conn = NULL; if (tunnelState->noConnections()) { @@ -151,10 +151,10 @@ } static void -tunnelClientClosed(int fd, void *data) +tunnelClientClosed(const CommCloseCbParams ¶ms) { - TunnelStateData *tunnelState = (TunnelStateData *)data; - debugs(26, 3, HERE << "FD " << fd); + TunnelStateData *tunnelState = (TunnelStateData *)params.data; + debugs(26, 3, HERE << tunnelState->client.conn); tunnelState->client.conn = NULL; if (tunnelState->noConnections()) { @@ -556,7 +556,7 @@ AsyncJob::Start(cs); } else { debugs(26, 4, HERE << "terminate with error."); - ErrorState *err = errorCon(ERR_CONNECT_FAIL, HTTP_SERVICE_UNAVAILABLE, tunnelState->request); + ErrorState *err = new ErrorState(ERR_CONNECT_FAIL, HTTP_SERVICE_UNAVAILABLE, tunnelState->request); *tunnelState->status_ptr = HTTP_SERVICE_UNAVAILABLE; err->xerrno = xerrno; // on timeout is this still: err->xerrno = ETIMEDOUT; @@ -629,7 +629,7 @@ ch.my_addr = request->my_addr; if (ch.fastCheck() == ACCESS_DENIED) { debugs(26, 4, HERE << "MISS access forbidden."); - err = errorCon(ERR_FORWARDING_DENIED, HTTP_FORBIDDEN, request); + err = new ErrorState(ERR_FORWARDING_DENIED, HTTP_FORBIDDEN, request); *status_ptr = HTTP_FORBIDDEN; errorSend(http->getConn()->clientConnection, err); return; @@ -697,20 +697,23 @@ } static void -tunnelPeerSelectComplete(Comm::ConnectionList *peer_paths, void *data) +tunnelPeerSelectComplete(Comm::ConnectionList *peer_paths, ErrorState *err, void *data) { TunnelStateData *tunnelState = (TunnelStateData *)data; if (peer_paths == NULL || peer_paths->size() < 1) { debugs(26, 3, HERE << "No paths found. Aborting CONNECT"); - ErrorState *err; - err = errorCon(ERR_CANNOT_FORWARD, HTTP_SERVICE_UNAVAILABLE, tunnelState->request); - *tunnelState->status_ptr = HTTP_SERVICE_UNAVAILABLE; + if (!err) { + err = new ErrorState(ERR_CANNOT_FORWARD, HTTP_SERVICE_UNAVAILABLE, tunnelState->request); + } + *tunnelState->status_ptr = err->httpStatus; err->callback = tunnelErrorComplete; err->callback_data = tunnelState; errorSend(tunnelState->client.conn, err); return; } + delete err; + debugs(26, 3, HERE << "paths=" << peer_paths->size() << ", p[0]={" << (*peer_paths)[0] << "}, serverDest[0]={" << tunnelState->serverDestinations[0] << "}"); diff -u -r -N squid-3.2.0.13/src/typedefs.h squid-3.2.0.14/src/typedefs.h --- squid-3.2.0.13/src/typedefs.h 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/typedefs.h 2011-12-13 00:08:18.000000000 +1300 @@ -56,22 +56,14 @@ typedef struct _dwrite_q dwrite_q; -typedef struct _fileMap fileMap; - typedef struct _HttpHeaderFieldAttrs HttpHeaderFieldAttrs; typedef struct _HttpHeaderStat HttpHeaderStat; -typedef struct _HttpBody HttpBody; - -typedef struct _ConnCloseHelperData ConnCloseHelperData; - typedef struct _domain_ping domain_ping; typedef struct _domain_type domain_type; -typedef struct _DynPool DynPool; - typedef struct _DigestFetchState DigestFetchState; typedef struct _net_db_name net_db_name; @@ -82,16 +74,12 @@ typedef struct _icp_common_t icp_common_t; -typedef struct _Meta_data Meta_data; - typedef struct _iostats iostats; typedef struct _http_state_flags http_state_flags; typedef struct _header_mangler header_mangler; -typedef struct _body_size body_size; - typedef struct _cachemgr_passwd cachemgr_passwd; typedef struct _refresh_t refresh_t; diff -u -r -N squid-3.2.0.13/src/unlinkd.cc squid-3.2.0.14/src/unlinkd.cc --- squid-3.2.0.13/src/unlinkd.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/unlinkd.cc 2011-12-13 00:08:18.000000000 +1300 @@ -35,6 +35,7 @@ #include "squid.h" #include "SquidTime.h" +#include "SwapDir.h" #include "fde.h" #include "xusleep.h" @@ -156,8 +157,7 @@ unlinkd_wfd = -1; unlinkd_rfd = -1; - } else - debugs(2, 0, "unlinkdClose: WARNING: unlinkd_wfd is " << unlinkd_wfd); + } if (hIpc) { if (WaitForSingleObject(hIpc, 5000) != WAIT_OBJECT_0) { @@ -188,9 +188,25 @@ #endif +bool +unlinkdNeeded(void) +{ + // we should start unlinkd if there are any cache_dirs using it + for (int i = 0; i < Config.cacheSwap.n_configured; ++i) { + const RefCount sd = Config.cacheSwap.swapDirs[i]; + if (sd->unlinkdUseful()) + return true; + } + + return false; +} + void unlinkdInit(void) { + if (unlinkd_wfd >= 0) + return; // unlinkd already started + const char *args[2]; Ip::Address localhost; @@ -199,10 +215,10 @@ localhost.SetLocalhost(); pid = ipcCreate( -#if USE_POLL && defined(_SQUID_OSF_) +#if USE_POLL && _SQUID_OSF_ /* pipes and poll() don't get along on DUNIX -DW */ IPC_STREAM, -#elif defined(_SQUID_MSWIN_) +#elif _SQUID_MSWIN_ /* select() will fail on a pipe */ IPC_TCP_SOCKET, #else diff -u -r -N squid-3.2.0.13/src/url.cc squid-3.2.0.14/src/url.cc --- squid-3.2.0.13/src/url.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/url.cc 2011-12-13 00:08:18.000000000 +1300 @@ -250,8 +250,7 @@ *dst = '\0'; /* Then its :// */ - /* (XXX yah, I'm not checking we've got enough data left before checking the array..) */ - if (*src != ':' || *(src + 1) != '/' || *(src + 2) != '/') + if ((i+3) > l || *src != ':' || *(src + 1) != '/' || *(src + 2) != '/') return NULL; i += 3; src += 3; @@ -328,7 +327,7 @@ // Bug 3183 sanity check: If scheme is present, host must be too. if (protocol != AnyP::PROTO_NONE && (host == NULL || *host == '\0')) { - debugs(23, DBG_IMPORTANT, "SECURITY WARNING: Missing hostname in URL '" << url << "'. see access.log for details."); + debugs(23, DBG_IMPORTANT, "SECURITY ALERT: Missing hostname in URL '" << url << "'. see access.log for details."); return NULL; } diff -u -r -N squid-3.2.0.13/src/urn.cc squid-3.2.0.14/src/urn.cc --- squid-3.2.0.13/src/urn.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/urn.cc 2011-12-13 00:08:18.000000000 +1300 @@ -221,7 +221,7 @@ if (urlres_r == NULL) { debugs(52, 3, "urnStart: Bad uri-res URL " << urlres); - ErrorState *err = errorCon(ERR_URN_RESOLVE, HTTP_NOT_FOUND, r); + ErrorState *err = new ErrorState(ERR_URN_RESOLVE, HTTP_NOT_FOUND, r); err->url = urlres; urlres = NULL; errorAppendEntry(entry, err); @@ -373,7 +373,7 @@ if (rep->sline.status != HTTP_OK) { debugs(52, 3, "urnHandleReply: failed."); - err = errorCon(ERR_URN_RESOLVE, HTTP_NOT_FOUND, urnState->request); + err = new ErrorState(ERR_URN_RESOLVE, HTTP_NOT_FOUND, urnState->request); err->url = xstrdup(e->url()); errorAppendEntry(e, err); delete rep; @@ -395,7 +395,7 @@ if (urls == NULL) { /* unkown URN error */ debugs(52, 3, "urnTranslateDone: unknown URN " << e->url() ); - err = errorCon(ERR_URN_RESOLVE, HTTP_NOT_FOUND, urnState->request); + err = new ErrorState(ERR_URN_RESOLVE, HTTP_NOT_FOUND, urnState->request); err->url = xstrdup(e->url()); errorAppendEntry(e, err); urnHandleReplyError(urnState, urlres_e); @@ -444,7 +444,7 @@ rep->header.putStr(HDR_LOCATION, min_u->url); } - httpBodySet(&rep->body, mb); + rep->body.setMb(mb); /* don't clean or delete mb; rep->body owns it now */ e->replaceHttpReply(rep); e->complete(); diff -u -r -N squid-3.2.0.13/src/whois.cc squid-3.2.0.14/src/whois.cc --- squid-3.2.0.13/src/whois.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/whois.cc 2011-12-13 00:08:18.000000000 +1300 @@ -59,7 +59,7 @@ bool dataWritten; }; -static PF whoisClose; +static CLCB whoisClose; static CTCB whoisTimeout; static IOCB whoisReadReply; @@ -157,8 +157,7 @@ CommIoCbPtrFun(whoisReadReply, this)); comm_read(conn, aBuffer, BUFSIZ, call); } else { - ErrorState *err; - err = errorCon(ERR_READ_ERROR, HTTP_INTERNAL_SERVER_ERROR, fwd->request); + ErrorState *err = new ErrorState(ERR_READ_ERROR, HTTP_INTERNAL_SERVER_ERROR, fwd->request); err->xerrno = errno; fwd->fail(err); conn->close(); @@ -197,10 +196,10 @@ } static void -whoisClose(int fd, void *data) +whoisClose(const CommCloseCbParams ¶ms) { - WhoisState *p = (WhoisState *)data; - debugs(75, 3, "whoisClose: FD " << fd); + WhoisState *p = (WhoisState *)params.data; + debugs(75, 3, "whoisClose: FD " << params.fd); p->entry->unlock(); cbdataFree(p); } diff -u -r -N squid-3.2.0.13/src/WinSvc.cc squid-3.2.0.14/src/WinSvc.cc --- squid-3.2.0.13/src/WinSvc.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/src/WinSvc.cc 2011-12-13 00:08:18.000000000 +1300 @@ -57,7 +57,7 @@ #endif extern "C" void WINAPI SquidWinSvcMain(DWORD, char **); -#if defined(_SQUID_MSWIN_) +#if _SQUID_MSWIN_ #if defined(_MSC_VER) /* Microsoft C Compiler ONLY */ void Squid_Win32InvalidParameterHandler(const wchar_t*, const wchar_t*, const wchar_t*, unsigned int, uintptr_t); #endif @@ -978,7 +978,7 @@ #endif /* USE_WIN32_SERVICE */ -#if defined(_SQUID_MSWIN_) +#if _SQUID_MSWIN_ static int Win32SockInit(void) { int iVersionRequested; diff -u -r -N squid-3.2.0.13/test-suite/mem_hdr_test.cc squid-3.2.0.14/test-suite/mem_hdr_test.cc --- squid-3.2.0.13/test-suite/mem_hdr_test.cc 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/test-suite/mem_hdr_test.cc 2011-12-13 00:08:18.000000000 +1300 @@ -57,7 +57,7 @@ assert (aHeader.lowestOffset() == 0); assert (aHeader.write (StoreIOBuffer())); assert (aHeader.lowestOffset() == 0); - assert (aHeader.write (StoreIOBuffer(0, 1, NULL))); + assert (aHeader.write (StoreIOBuffer(0, 1, (char *)NULL))); assert (aHeader.lowestOffset() == 0); char * sampleData = xstrdup ("A"); assert (aHeader.write (StoreIOBuffer(1, 100, sampleData))); diff -u -r -N squid-3.2.0.13/test-suite/tcp-banger2.c squid-3.2.0.14/test-suite/tcp-banger2.c --- squid-3.2.0.13/test-suite/tcp-banger2.c 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/test-suite/tcp-banger2.c 2011-12-13 00:08:18.000000000 +1300 @@ -11,7 +11,7 @@ #define CHANGE_FD_SETSIZE 1 /* Cannot increase FD_SETSIZE on Linux */ -#if defined(_SQUID_LINUX_) +#if _SQUID_LINUX_ #undef CHANGE_FD_SETSIZE #define CHANGE_FD_SETSIZE 0 #endif @@ -20,7 +20,7 @@ * to return EINVAL. */ /* Marian Durkovic */ /* Peter Wemm */ -#if defined(_SQUID_FREEBSD_) +#if _SQUID_FREEBSD_ #include #if __FreeBSD_version < 220000 #undef CHANGE_FD_SETSIZE diff -u -r -N squid-3.2.0.13/tools/purge/conffile.hh squid-3.2.0.14/tools/purge/conffile.hh --- squid-3.2.0.13/tools/purge/conffile.hh 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/tools/purge/conffile.hh 2011-12-13 00:08:18.000000000 +1300 @@ -55,9 +55,9 @@ #endif /* __cplusplus */ -#ifndef DEFAULT_SQUID_CONF +#if !defined(DEFAULT_SQUID_CONF) #define DEFAULT_SQUID_CONF "/usr/local/squid/etc/squid.conf" -#endif // DEFAULT_SQUID_CONF +#endif #include // FILE* #include // minimum STL container diff -u -r -N squid-3.2.0.13/tools/purge/squid-tlv.hh squid-3.2.0.14/tools/purge/squid-tlv.hh --- squid-3.2.0.13/tools/purge/squid-tlv.hh 2011-10-14 14:42:56.000000000 +1300 +++ squid-3.2.0.14/tools/purge/squid-tlv.hh 2011-12-13 00:08:18.000000000 +1300 @@ -34,8 +34,8 @@ // Revision 1.1 1999/06/15 21:10:16 voeckler // Initial revision // -#ifndef _SQUID_TLV_HH -#define _SQUID_TLV_HH +#ifndef SQUID_TLV_HH +#define SQUID_TLV_HH #if !defined(__cplusplus) #if defined(__GNUC__) || defined(__GNUG__) @@ -117,4 +117,4 @@ SquidTLV* tail; }; -#endif // _SQUID_TLV_HH +#endif // SQUID_TLV_HH