diff -u -r -N squid-3.0.STABLE13/ChangeLog squid-3.0.STABLE14/ChangeLog --- squid-3.0.STABLE13/ChangeLog 2009-02-03 14:36:11.000000000 +1300 +++ squid-3.0.STABLE14/ChangeLog 2009-04-11 20:35:26.000000000 +1200 @@ -1,3 +1,23 @@ +Changes to squid-3.0.STABLE14 (11 Apr 2009): + + - Regression Fix: HTTP/0.9 in accelerator mode + - Bug 1232: cache_dir parameter limited to only 63 entries + - Bug 1868: support HTTP 207 status + - Bug 2518: assertion failure on restart/reconfigure + - Bug 2588: coredump in rDNS lookup + - Bug 2595: Out of bounds memory write in squid_kerb_auth + - Bug 2599: Idempotent start + - Bug 2605: Prevent setsid() on helpers in daemon mode + - Fix external_acl_type option parsing + - Fix delay pools counters on FTP + - Fix several issues with ident (some remain) + - Fix performance issues with persistent connections + - Fix performance issues with delay pools + - Fix forwarding of OPTIONS requests + - Add support for HTTP 1.1 Content-Disposition header + - Add support for Windows 7, Windows Server 2008 R2 and later + - ... and many small documentation updates + Changes to squid-3.0.STABLE13 (03 Feb 2009): - Fix several issues in request parsing diff -u -r -N squid-3.0.STABLE13/configure squid-3.0.STABLE14/configure --- squid-3.0.STABLE13/configure 2009-02-03 14:36:23.000000000 +1300 +++ squid-3.0.STABLE14/configure 2009-04-11 20:35:42.000000000 +1200 @@ -1,7 +1,7 @@ #! /bin/sh # From configure.in Revision: 1.488.2.3 . # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.62 for Squid Web Proxy 3.0.STABLE13. +# Generated by GNU Autoconf 2.62 for Squid Web Proxy 3.0.STABLE14. # # Report bugs to . # @@ -751,8 +751,8 @@ # Identity of this package. PACKAGE_NAME='Squid Web Proxy' PACKAGE_TARNAME='squid' -PACKAGE_VERSION='3.0.STABLE13' -PACKAGE_STRING='Squid Web Proxy 3.0.STABLE13' +PACKAGE_VERSION='3.0.STABLE14' +PACKAGE_STRING='Squid Web Proxy 3.0.STABLE14' PACKAGE_BUGREPORT='http://www.squid-cache.org/bugs/' ac_unique_file="src/main.cc" @@ -1661,7 +1661,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.0.STABLE13 to adapt to many kinds of systems. +\`configure' configures Squid Web Proxy 3.0.STABLE14 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1731,7 +1731,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Squid Web Proxy 3.0.STABLE13:";; + short | recursive ) echo "Configuration of Squid Web Proxy 3.0.STABLE14:";; esac cat <<\_ACEOF @@ -2043,7 +2043,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Squid Web Proxy configure 3.0.STABLE13 +Squid Web Proxy configure 3.0.STABLE14 generated by GNU Autoconf 2.62 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -2057,7 +2057,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.0.STABLE13, which was +It was created by Squid Web Proxy $as_me 3.0.STABLE14, which was generated by GNU Autoconf 2.62. Invocation command line was $ $0 $@ @@ -2755,7 +2755,7 @@ # Define the identity of the package. PACKAGE='squid' - VERSION='3.0.STABLE13' + VERSION='3.0.STABLE14' cat >>confdefs.h <<_ACEOF @@ -25024,8 +25024,6 @@ - - for ac_header in \ arpa/inet.h \ arpa/nameser.h \ @@ -25104,8 +25102,6 @@ stdint.h \ inttypes.h \ grp.h \ - nss_common.h \ - nss.h \ db.h \ db_185.h \ sys/capability.h @@ -47866,7 +47862,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.0.STABLE13, which was +This file was extended by Squid Web Proxy $as_me 3.0.STABLE14, which was generated by GNU Autoconf 2.62. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -47919,7 +47915,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ -Squid Web Proxy config.status 3.0.STABLE13 +Squid Web Proxy config.status 3.0.STABLE14 configured by $0, generated by GNU Autoconf 2.62, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff -u -r -N squid-3.0.STABLE13/configure.in squid-3.0.STABLE14/configure.in --- squid-3.0.STABLE13/configure.in 2009-02-03 14:36:23.000000000 +1300 +++ squid-3.0.STABLE14/configure.in 2009-04-11 20:35:42.000000000 +1200 @@ -1,8 +1,7 @@ - dnl Configuration input file for Squid dnl dnl -AC_INIT(Squid Web Proxy, 3.0.STABLE13, http://www.squid-cache.org/bugs/, squid) +AC_INIT(Squid Web Proxy, 3.0.STABLE14, http://www.squid-cache.org/bugs/, squid) AC_PREREQ(2.52) AM_CONFIG_HEADER(include/autoconf.h) AC_CONFIG_AUX_DIR(cfgaux) @@ -1940,8 +1939,6 @@ stdint.h \ inttypes.h \ grp.h \ - nss_common.h \ - nss.h \ db.h \ db_185.h \ sys/capability.h diff -u -r -N squid-3.0.STABLE13/helpers/basic_auth/LDAP/squid_ldap_auth.c squid-3.0.STABLE14/helpers/basic_auth/LDAP/squid_ldap_auth.c --- squid-3.0.STABLE13/helpers/basic_auth/LDAP/squid_ldap_auth.c 2009-02-03 14:36:16.000000000 +1300 +++ squid-3.0.STABLE14/helpers/basic_auth/LDAP/squid_ldap_auth.c 2009-04-11 20:35:32.000000000 +1200 @@ -544,6 +544,7 @@ fprintf(stderr, "\t-v 2|3\t\t\tLDAP version\n"); fprintf(stderr, "\t-Z\t\t\tTLS encrypt the LDAP connection, requires LDAP version 3\n"); #endif + fprintf(stderr, "\t-d\t\t\tenable debug mode\n"); fprintf(stderr, "\n"); fprintf(stderr, "\tIf no search filter is specified, then the dn =user,basedn\n\twill be used (same as specifying a search filter of '=',\n\tbut quicker as as there is no need to search for the user DN)\n\n"); fprintf(stderr, "\tIf you need to bind as a user to perform searches then use the\n\t-D binddn -w bindpasswd or -D binddn -W secretfile options\n\n"); diff -u -r -N squid-3.0.STABLE13/helpers/external_acl/ldap_group/squid_ldap_group.c squid-3.0.STABLE14/helpers/external_acl/ldap_group/squid_ldap_group.c --- squid-3.0.STABLE13/helpers/external_acl/ldap_group/squid_ldap_group.c 2009-02-03 14:36:16.000000000 +1300 +++ squid-3.0.STABLE14/helpers/external_acl/ldap_group/squid_ldap_group.c 2009-04-11 20:35:34.000000000 +1200 @@ -431,6 +431,7 @@ fprintf(stderr, "\t-g\t\t\tfirst query parameter is base DN extension\n\t\t\t\tfor this query\n"); fprintf(stderr, "\t-S\t\t\tStrip NT domain from usernames\n"); fprintf(stderr, "\t-K\t\t\tStrip Kerberos realm from usernames\n"); + fprintf(stderr, "\t-d\t\t\tenable debug mode\n"); fprintf(stderr, "\n"); fprintf(stderr, "\tIf you need to bind as a user to perform searches then use the\n\t-D binddn -w bindpasswd or -D binddn -W secretfile options\n\n"); exit(1); diff -u -r -N squid-3.0.STABLE13/helpers/negotiate_auth/squid_kerb_auth/squid_kerb_auth.c squid-3.0.STABLE14/helpers/negotiate_auth/squid_kerb_auth/squid_kerb_auth.c --- squid-3.0.STABLE13/helpers/negotiate_auth/squid_kerb_auth/squid_kerb_auth.c 2009-02-03 14:36:19.000000000 +1300 +++ squid-3.0.STABLE14/helpers/negotiate_auth/squid_kerb_auth/squid_kerb_auth.c 2009-04-11 20:35:37.000000000 +1200 @@ -115,7 +115,7 @@ } freeaddrinfo(hres); - hostname[MAXHOSTNAMELEN]='\0'; + hostname[MAXHOSTNAMELEN-1]='\0'; return(strdup(hostname)); } diff -u -r -N squid-3.0.STABLE13/include/autoconf.h.in squid-3.0.STABLE14/include/autoconf.h.in --- squid-3.0.STABLE13/include/autoconf.h.in 2009-02-03 14:36:20.000000000 +1300 +++ squid-3.0.STABLE14/include/autoconf.h.in 2009-04-11 20:35:37.000000000 +1200 @@ -393,12 +393,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_NET_PFVAR_H -/* Define to 1 if you have the header file. */ -#undef HAVE_NSS_COMMON_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_NSS_H - /* off_t is defined by the system headers */ #undef HAVE_OFF_T diff -u -r -N squid-3.0.STABLE13/include/snmp_error.h squid-3.0.STABLE14/include/snmp_error.h --- squid-3.0.STABLE13/include/snmp_error.h 2009-02-03 14:36:20.000000000 +1300 +++ squid-3.0.STABLE14/include/snmp_error.h 2009-04-11 20:35:37.000000000 +1200 @@ -44,6 +44,7 @@ #define SNMP_ERR_WRONGTYPE (0x7) #define SNMP_ERR_WRONGLENGTH (0x8) #define SNMP_ERR_WRONGENCODING (0x9) +/* 0x0A - 0x0F undefined */ #define SNMP_ERR_WRONGVALUE (0x10) #define SNMP_ERR_NOCREATION (0x11) #define SNMP_ERR_INCONSISTENTVALUE (0x12) diff -u -r -N squid-3.0.STABLE13/include/version.h squid-3.0.STABLE14/include/version.h --- squid-3.0.STABLE13/include/version.h 2009-02-03 14:36:23.000000000 +1300 +++ squid-3.0.STABLE14/include/version.h 2009-04-11 20:35:42.000000000 +1200 @@ -9,5 +9,5 @@ */ #ifndef SQUID_RELEASE_TIME -#define SQUID_RELEASE_TIME 1233624970 +#define SQUID_RELEASE_TIME 1239438925 #endif diff -u -r -N squid-3.0.STABLE13/lib/rfc2617.c squid-3.0.STABLE14/lib/rfc2617.c --- squid-3.0.STABLE13/lib/rfc2617.c 2009-02-03 14:36:21.000000000 +1300 +++ squid-3.0.STABLE14/lib/rfc2617.c 2009-04-11 20:35:38.000000000 +1200 @@ -94,6 +94,11 @@ else Bin[i / 2] |= n; } +/* FIXME: Coverity detects the below as dead code. + Why? :: right here i == 32 + which means the first step of the for loop makes i==16 + and cannot be < HASHLEN (which is also 16) +*/ for (i = i / 2; i < HASHLEN; i++) { Bin[i] = '\0'; } diff -u -r -N squid-3.0.STABLE13/RELEASENOTES.html squid-3.0.STABLE14/RELEASENOTES.html --- squid-3.0.STABLE13/RELEASENOTES.html 2009-02-03 14:37:18.000000000 +1300 +++ squid-3.0.STABLE14/RELEASENOTES.html 2009-04-11 20:36:35.000000000 +1200 @@ -1,11 +1,11 @@ - - Squid 3.0.STABLE13 release notes + + Squid 3.0.STABLE14 release notes -

Squid 3.0.STABLE13 release notes

+

Squid 3.0.STABLE14 release notes

Squid Developers


@@ -15,7 +15,7 @@

1. Notice

-

The Squid Team are pleased to announce the release of Squid-3.0.STABLE13.

+

The Squid Team are pleased to announce the release of Squid-3.0.STABLE14.

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

@@ -227,6 +227,7 @@
  • When Squid runs in command line mode, the launching user account must have administrative privilege on the system
  • "Start parameters" in the Windows 2000/XP/2003 Service applet cannot be used
  • Building with MinGW, when the configure option --enable-truncate is used, Squid cannot run on Windows NT, only Windows 2000 and later are supported
  • +
  • On Windows Vista and later, User Account Control (UAC) must be disabled before running service installation
  • @@ -713,10 +714,9 @@

    Common options no-store, replaces the older read-only option

    auth_param
    -

    Removed Basic auth option +

    Removed Basic auth options:

         blankpasswor, not yet ported to squid-3.
    -    auth_param basic concurrency 0
             
     

    @@ -847,7 +847,7 @@ This is useful for class 4 Delay Pools in Squid 3.x

    half_closed_clients
    -

    New defaut vaue of OFF

    +

    New default value of OFF

    diff -u -r -N squid-3.0.STABLE13/snmplib/snmp_error.c squid-3.0.STABLE14/snmplib/snmp_error.c --- squid-3.0.STABLE13/snmplib/snmp_error.c 2009-02-03 14:36:21.000000000 +1300 +++ squid-3.0.STABLE14/snmplib/snmp_error.c 2009-04-11 20:35:39.000000000 +1200 @@ -33,8 +33,8 @@ #include "snmp_error.h" -static const char *error_string[19] = -{ +static const char *error_string[25] = { + /* 0x00 - 0x05 */ "No Error", "Response message would have been too large.", "There is no such variable name in this MIB.", @@ -42,11 +42,21 @@ "This variable is read only", "A general failure occured", - /* SNMPv2 Errors */ + /* 0x06 - 0x09 */ "NOACCESS", "WRONGTYPE", "WRONGLENGTH", "WRONGENCODING", + + /* 0x0A - 0x0F */ + "UNDEFINED", + "UNDEFINED", + "UNDEFINED", + "UNDEFINED", + "UNDEFINED", + "UNDEFINED", + + /* 0x10 - 0x18 */ "WRONGVALUE", "NOCREATION", "INCONSISTENTVALUE", diff -u -r -N squid-3.0.STABLE13/src/ACLExtUser.h squid-3.0.STABLE14/src/ACLExtUser.h --- squid-3.0.STABLE13/src/ACLExtUser.h 2009-02-03 14:36:21.000000000 +1300 +++ squid-3.0.STABLE14/src/ACLExtUser.h 2009-04-11 20:35:39.000000000 +1200 @@ -33,8 +33,9 @@ * Copyright (c) 2003, Robert Collins */ -#ifndef SQUID_ACLIDENT_H -#define SQUID_ACLIDENT_H +#ifndef SQUID_EXTUSER_H +#define SQUID_EXTUSER_H + #include "ACL.h" #include "ACLChecklist.h" #include "ACLData.h" @@ -69,4 +70,4 @@ MEMPROXY_CLASS_INLINE(ACLExtUser) -#endif /* SQUID_ACLIDENT_H */ +#endif /* SQUID_EXTUSER_H */ diff -u -r -N squid-3.0.STABLE13/src/AsyncEngine.h squid-3.0.STABLE14/src/AsyncEngine.h --- squid-3.0.STABLE13/src/AsyncEngine.h 2009-02-03 14:36:21.000000000 +1300 +++ squid-3.0.STABLE14/src/AsyncEngine.h 2009-04-11 20:35:39.000000000 +1200 @@ -57,7 +57,7 @@ */ EVENT_IDLE = -1, /* some error has occured in this engine */ - EVENT_ERROR = -2, + EVENT_ERROR = -2 }; virtual ~AsyncEngine() {} diff -u -r -N squid-3.0.STABLE13/src/auth/basic/auth_basic.cc squid-3.0.STABLE14/src/auth/basic/auth_basic.cc --- squid-3.0.STABLE13/src/auth/basic/auth_basic.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/auth/basic/auth_basic.cc 2009-04-11 20:35:40.000000000 +1200 @@ -143,9 +143,8 @@ AuthBasicUserRequest::authenticated() const { BasicUser const *basic_auth = dynamic_cast(user()); - assert (basic_auth != NULL); - if (basic_auth->authenticated()) + if (basic_auth && basic_auth->authenticated()) return 1; return 0; @@ -334,7 +333,7 @@ parse_wordlist(&authenticate); - requirePathnameExists("authparam basic program", authenticate->key); + requirePathnameExists("auth_param basic program", authenticate->key); } else if (strcasecmp(param_str, "children") == 0) { parse_int(&authenticateChildren); } else if (strcasecmp(param_str, "concurrency") == 0) { diff -u -r -N squid-3.0.STABLE13/src/auth/digest/auth_digest.cc squid-3.0.STABLE14/src/auth/digest/auth_digest.cc --- squid-3.0.STABLE13/src/auth/digest/auth_digest.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/auth/digest/auth_digest.cc 2009-04-11 20:35:40.000000000 +1200 @@ -933,7 +933,7 @@ parse_wordlist(&authenticate); - requirePathnameExists("authparam digest program", authenticate->key); + requirePathnameExists("auth_param digest program", authenticate->key); } else if (strcasecmp(param_str, "children") == 0) { parse_int(&authenticateChildren); } else if (strcasecmp(param_str, "realm") == 0) { diff -u -r -N squid-3.0.STABLE13/src/auth/negotiate/auth_negotiate.cc squid-3.0.STABLE14/src/auth/negotiate/auth_negotiate.cc --- squid-3.0.STABLE13/src/auth/negotiate/auth_negotiate.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/auth/negotiate/auth_negotiate.cc 2009-04-11 20:35:40.000000000 +1200 @@ -147,7 +147,7 @@ parse_wordlist(&authenticate); - requirePathnameExists("authparam negotiate program", authenticate->key); + requirePathnameExists("auth_param negotiate program", authenticate->key); } else if (strcasecmp(param_str, "children") == 0) { parse_int(&authenticateChildren); } else if (strcasecmp(param_str, "keep_alive") == 0) { diff -u -r -N squid-3.0.STABLE13/src/auth/ntlm/auth_ntlm.cc squid-3.0.STABLE14/src/auth/ntlm/auth_ntlm.cc --- squid-3.0.STABLE13/src/auth/ntlm/auth_ntlm.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/auth/ntlm/auth_ntlm.cc 2009-04-11 20:35:40.000000000 +1200 @@ -141,7 +141,7 @@ parse_wordlist(&authenticate); - requirePathnameExists("authparam ntlm program", authenticate->key); + requirePathnameExists("auth_param ntlm program", authenticate->key); } else if (strcasecmp(param_str, "children") == 0) { parse_int(&authenticateChildren); } else if (strcasecmp(param_str, "keep_alive") == 0) { diff -u -r -N squid-3.0.STABLE13/src/cache_cf.cc squid-3.0.STABLE14/src/cache_cf.cc --- squid-3.0.STABLE13/src/cache_cf.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/cache_cf.cc 2009-04-11 20:35:40.000000000 +1200 @@ -873,7 +873,7 @@ if (!strncasecmp(unit, B_GBYTES_STR, strlen(B_GBYTES_STR))) return 1 << 30; - debugs(3, 1, "parseBytesUnits: unknown bytes unit '" << unit << "'"); + debugs(3, DBG_CRITICAL, "WARNING: Unknown bytes unit '" << unit << "'"); return 0; } @@ -1483,8 +1483,7 @@ for (i = 0; i < swap->n_configured; i++) { assert (swap->swapDirs[i].getRaw()); - if ((strcasecmp(path_str, dynamic_cast(swap->swapDirs[i].getRaw())->path) - ) == 0) { + if ((strcasecmp(path_str, dynamic_cast(swap->swapDirs[i].getRaw())->path)) == 0) { /* this is specific to on-fs Stores. The right * way to handle this is probably to have a mapping * from paths to stores, and have on-fs stores @@ -1509,7 +1508,13 @@ } /* new cache_dir */ - assert(swap->n_configured < 63); /* 7 bits, signed */ + if(swap->n_configured > 63) { + /* 7 bits, signed */ + debugs(3, DBG_CRITICAL, "WARNING: There is a fixed maximum of 63 cache_dir entries Squid can handle."); + debugs(3, DBG_CRITICAL, "WARNING: '" << path_str << "' is one to many."); + self_destruct(); + return; + } allocate_new_swapdir(swap); diff -u -r -N squid-3.0.STABLE13/src/cbdata.h squid-3.0.STABLE14/src/cbdata.h --- squid-3.0.STABLE13/src/cbdata.h 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/cbdata.h 2009-04-11 20:35:40.000000000 +1200 @@ -44,7 +44,7 @@ * are added runtime */ typedef enum { - CBDATA_UNKNOWN = 0, + CBDATA_UNKNOWN = 0 } cbdata_type; extern void cbdataRegisterWithCacheManager(CacheManager & manager); diff -u -r -N squid-3.0.STABLE13/src/cf.data.pre squid-3.0.STABLE14/src/cf.data.pre --- squid-3.0.STABLE13/src/cf.data.pre 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/cf.data.pre 2009-04-11 20:35:40.000000000 +1200 @@ -405,8 +405,8 @@ %USER_CERTCHAIN SSL User certificate chain in PEM format %USER_CERT_xx SSL User certificate subject attribute xx %USER_CA_xx SSL User certificate issuer attribute xx - %{Header} HTTP request header - %{Hdr:member} HTTP request header list member + %{Header} HTTP request header "Header" + %{Hdr:member} HTTP request header "Hdr" list member "member" %{Hdr:;member} HTTP request header list member using ; as list separator. ; can be any non-alphanumeric @@ -2895,8 +2895,9 @@ when requested by a HTTP/1.0 client. This option enables Squid to ignore such expiry times until HTTP/1.1 is fully implemented. - WARNING: This may eventually cause some varying - objects not intended for caching to get cached. + + WARNING: If turned on this may eventually cause some + varying objects not intended for caching to get cached. DOC_END NAME: extension_methods diff -u -r -N squid-3.0.STABLE13/src/client_side.cc squid-3.0.STABLE14/src/client_side.cc --- squid-3.0.STABLE13/src/client_side.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/client_side.cc 2009-04-11 20:35:41.000000000 +1200 @@ -2190,13 +2190,13 @@ /* compile headers */ /* we should skip request line! */ /* XXX should actually know the damned buffer size here */ - if (!request->parseHeader(HttpParserHdrBuf(hp), HttpParserHdrSz(hp))) { + if (http_ver.major >= 1 && !request->parseHeader(HttpParserHdrBuf(hp), HttpParserHdrSz(hp))) { clientStreamNode *node = context->getClientReplyContext(); debugs(33, 5, "Failed to parse request headers:\n" << HttpParserHdrBuf(hp)); clientReplyContext *repContext = dynamic_cast(node->data.getRaw()); assert (repContext); repContext->setReplyToError( - ERR_INVALID_URL, HTTP_BAD_REQUEST, method, http->uri, + ERR_INVALID_REQ, HTTP_BAD_REQUEST, method, http->uri, &conn->peer.sin_addr, NULL, NULL, NULL); assert(context->http->out.offset == 0); context->pullData(); diff -u -r -N squid-3.0.STABLE13/src/client_side_reply.cc squid-3.0.STABLE14/src/client_side_reply.cc --- squid-3.0.STABLE13/src/client_side_reply.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/client_side_reply.cc 2009-04-11 20:35:41.000000000 +1200 @@ -1498,6 +1498,8 @@ return; } + /* TODO: handle OPTIONS request on max_forwards == 0 as well */ + if (context->http->request->method == METHOD_TRACE) { if (context->http->request->max_forwards == 0) { context->traceReply(aNode); diff -u -r -N squid-3.0.STABLE13/src/client_side_request.cc squid-3.0.STABLE14/src/client_side_request.cc --- squid-3.0.STABLE13/src/client_side_request.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/client_side_request.cc 2009-04-11 20:35:41.000000000 +1200 @@ -745,8 +745,8 @@ } #endif - if (request->method == METHOD_TRACE) { - request->max_forwards = req_hdr->getInt(HDR_MAX_FORWARDS); + if (request->method == METHOD_TRACE || request->method == METHOD_OPTIONS) { + request->max_forwards = req_hdr->getInt64(HDR_MAX_FORWARDS); } request->flags.cachable = http->request->cacheable(); diff -u -r -N squid-3.0.STABLE13/src/comm.cc squid-3.0.STABLE14/src/comm.cc --- squid-3.0.STABLE13/src/comm.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/comm.cc 2009-04-11 20:35:41.000000000 +1200 @@ -1513,7 +1513,8 @@ if (F->flags.closing) return; - if (shutting_down && (!F->flags.open || F->type == FD_FILE)) + /* XXX: is this obsolete behind F->closing() ? */ + if ( (shutting_down || reconfiguring) && (!F->flags.open || F->type == FD_FILE)) return; assert(F->flags.open); @@ -2495,6 +2496,7 @@ reads = deferredReads; deferredReads = ListContainer(); + // XXX: For fairness this SHOULD randomize the order while (!reads.empty()) { DeferredRead aRead = popHead(reads); kickARead(aRead); diff -u -r -N squid-3.0.STABLE13/src/DelayPool.cc squid-3.0.STABLE14/src/DelayPool.cc --- squid-3.0.STABLE13/src/DelayPool.cc 2009-02-03 14:36:21.000000000 +1300 +++ squid-3.0.STABLE14/src/DelayPool.cc 2009-04-11 20:35:39.000000000 +1200 @@ -115,11 +115,7 @@ void CompositePoolNode::kickReads() { - /* we only start one, because delay pools may have **many** attached connections, - * and kicking them all off would be chaotic. - * This may need to be reviewed. - */ - deferredReads.kickReads(1); + deferredReads.kickReads(-1); } #endif diff -u -r -N squid-3.0.STABLE13/src/dns_internal.cc squid-3.0.STABLE14/src/dns_internal.cc --- squid-3.0.STABLE13/src/dns_internal.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/dns_internal.cc 2009-04-11 20:35:41.000000000 +1200 @@ -485,6 +485,8 @@ case _WIN_OS_WINNET: case _WIN_OS_WINLON: + + case _WIN_OS_WIN7: /* get nameservers from the Windows 2000 registry */ /* search all interfaces for DNS server addresses */ diff -u -r -N squid-3.0.STABLE13/src/enums.h squid-3.0.STABLE14/src/enums.h --- squid-3.0.STABLE13/src/enums.h 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/enums.h 2009-04-11 20:35:41.000000000 +1200 @@ -545,7 +545,8 @@ _WIN_OS_WIN2K, _WIN_OS_WINXP, _WIN_OS_WINNET, - _WIN_OS_WINLON + _WIN_OS_WINLON, + _WIN_OS_WIN7 }; #endif diff -u -r -N squid-3.0.STABLE13/src/external_acl.cc squid-3.0.STABLE14/src/external_acl.cc --- squid-3.0.STABLE13/src/external_acl.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/external_acl.cc 2009-04-11 20:35:41.000000000 +1200 @@ -357,10 +357,10 @@ format->type = _external_acl_format::EXT_ACL_USER_CERT_RAW; else if (strcmp(token, "%USER_CERTCHAIN") == 0) format->type = _external_acl_format::EXT_ACL_USER_CERTCHAIN_RAW; - else if (strncmp(token, "%USER_CERT_", 11)) { + else if (strncmp(token, "%USER_CERT_", 11) == 0) { format->type = _external_acl_format::EXT_ACL_USER_CERT; format->header = xstrdup(token + 11); - } else if (strncmp(token, "%CA_CERT_", 11)) { + } else if (strncmp(token, "%CA_CERT_", 11) == 0) { format->type = _external_acl_format::EXT_ACL_USER_CERT; format->header = xstrdup(token + 11); } diff -u -r -N squid-3.0.STABLE13/src/forward.cc squid-3.0.STABLE14/src/forward.cc --- squid-3.0.STABLE13/src/forward.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/forward.cc 2009-04-11 20:35:41.000000000 +1200 @@ -767,7 +767,6 @@ FwdServer *fs = servers; const char *host; unsigned short port; - const char *domain = NULL; int ctimeout; int ftimeout = Config.Timeout.forward - (squid_curtime - start_t); #if LINUX_TPROXY @@ -784,16 +783,9 @@ debugs(17, 3, "fwdConnectStart: " << url); if (fs->_peer) { - host = fs->_peer->host; - port = fs->_peer->http_port; ctimeout = fs->_peer->connect_timeout > 0 ? fs->_peer->connect_timeout : Config.Timeout.peer_connect; - - if (fs->_peer->options.originserver) - domain = request->host; } else { - host = request->host; - port = request->port; ctimeout = Config.Timeout.connect; } @@ -809,7 +801,16 @@ if (ftimeout < ctimeout) ctimeout = ftimeout; - fd = fwdPconnPool->pop(host, port, domain, client_addr, checkRetriable()); + if(fs->_peer) { + host = fs->_peer->host; + port = fs->_peer->http_port; + fd = fwdPconnPool->pop(fs->_peer->name, fs->_peer->http_port, request->host, client_addr, checkRetriable()); + } + else { + host = request->host; + port = request->port; + fd = fwdPconnPool->pop(host, port, NULL, client_addr, checkRetriable()); + } if (fd >= 0) { debugs(17, 3, "fwdConnectStart: reusing pconn FD " << fd); server_fd = fd; @@ -1137,11 +1138,24 @@ /* NOTREACHED */ } +/** + * Decide where details need to be gathered to correctly describe a persistent connection. + * What is needed: + * \item host name of server at other end of this link (either peer or requested host) + * \item port to which we connected the other end of this link (for peer or request) + * \item domain for which the connection is supposed to be used + * \item address of the client for which we made the connection + */ void - -FwdState::pconnPush(int fd, const char *host, int port, const char *domain, struct IN_ADDR *client_addr) +FwdState::pconnPush(int fd, const peer *_peer, const HttpRequest *req, const char *domain, struct in_addr *client_addr) { - fwdPconnPool->push(fd, host, port, domain, client_addr); + if (_peer) { + fwdPconnPool->push(fd, _peer->name, _peer->http_port, domain, client_addr); + } else { + /* small performance improvement, using NULL for domain instead of listing it twice */ + /* although this will leave a gap open for url-rewritten domains to share a link */ + fwdPconnPool->push(fd, req->host, req->port, NULL, client_addr); + } } void diff -u -r -N squid-3.0.STABLE13/src/forward.h squid-3.0.STABLE14/src/forward.h --- squid-3.0.STABLE13/src/forward.h 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/forward.h 2009-04-11 20:35:41.000000000 +1200 @@ -5,6 +5,7 @@ class CacheManager; class ErrorState; +class HttpRequest; #include "comm.h" @@ -44,7 +45,7 @@ bool checkRetry(); bool checkRetriable(); void dispatch(); - void pconnPush(int fd, const char *host, int port, const char *domain, struct IN_ADDR *client_addr); + void pconnPush(int fd, const peer *_peer, const HttpRequest *req, const char *domain, struct in_addr *client_addr); bool dontRetry() { return flags.dont_retry; } diff -u -r -N squid-3.0.STABLE13/src/fqdncache.cc squid-3.0.STABLE14/src/fqdncache.cc --- squid-3.0.STABLE13/src/fqdncache.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/fqdncache.cc 2009-04-11 20:35:41.000000000 +1200 @@ -548,9 +548,12 @@ { char *name = inet_ntoa(addr); fqdncache_entry *f = NULL; + struct in_addr ip; + + if(!name) { + return NULL; + } - struct IN_ADDR ip; - assert(name); FqdncacheStats.requests++; f = fqdncache_get(name); diff -u -r -N squid-3.0.STABLE13/src/ftp.cc squid-3.0.STABLE14/src/ftp.cc --- squid-3.0.STABLE13/src/ftp.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/ftp.cc 2009-04-11 20:35:41.000000000 +1200 @@ -1237,34 +1237,18 @@ assert(fd == data.fd); -#if DELAY_POOLS - - DelayId delayId = entry->mem_obj->mostBytesAllowed(); - -#endif - if (EBIT_TEST(entry->flags, ENTRY_ABORTED)) { abortTransaction("entry aborted during dataRead"); return; } if (errflag == COMM_OK && len > 0) { -#if DELAY_POOLS - delayId.bytesIn(len); -#endif - - } - - - if (errflag == COMM_OK && len > 0) { debugs(9,5,HERE << "appended " << len << " bytes to readBuf"); data.readBuf->appended(len); #if DELAY_POOLS - DelayId delayId = entry->mem_obj->mostBytesAllowed(); delayId.bytesIn(len); #endif - IOStats.Ftp.reads++; for (j = len - 1, bin = 0; j; bin++) diff -u -r -N squid-3.0.STABLE13/src/htcp.cc squid-3.0.STABLE14/src/htcp.cc --- squid-3.0.STABLE13/src/htcp.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/htcp.cc 2009-04-11 20:35:41.000000000 +1200 @@ -902,19 +902,20 @@ stuff.S.uri = spec->uri; stuff.S.version = spec->version; stuff.S.req_hdrs = spec->req_hdrs; - hdr.putInt(HDR_AGE, - e->timestamp <= squid_curtime ? - squid_curtime - e->timestamp : 0); + if(e) + hdr.putInt(HDR_AGE, (e->timestamp <= squid_curtime ? (squid_curtime - e->timestamp) : 0) ); + else + hdr.putInt(HDR_AGE, 0); hdr.packInto(&p); stuff.D.resp_hdrs = xstrdup(mb.buf); debugs(31, 3, "htcpTstReply: resp_hdrs = {" << stuff.D.resp_hdrs << "}"); mb.reset(); hdr.reset(); - if (e->expires > -1) + if (e && e->expires > -1) hdr.putTime(HDR_EXPIRES, e->expires); - if (e->lastmod > -1) + if (e && e->lastmod > -1) hdr.putTime(HDR_LAST_MODIFIED, e->lastmod); hdr.packInto(&p); diff -u -r -N squid-3.0.STABLE13/src/http.cc squid-3.0.STABLE14/src/http.cc --- squid-3.0.STABLE13/src/http.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/http.cc 2009-04-11 20:35:41.000000000 +1200 @@ -1167,6 +1167,7 @@ comm_remove_close_handler(fd, httpStateFree, this); fwd->unregister(fd); + #if LINUX_TPROXY if (orig_request->flags.tproxy) @@ -1174,14 +1175,7 @@ #endif - if (_peer) { - if (_peer->options.originserver) - fwd->pconnPush(fd, _peer->name, orig_request->port, orig_request->host, client_addr); - else - fwd->pconnPush(fd, _peer->name, _peer->http_port, NULL, client_addr); - } else { - fwd->pconnPush(fd, request->host, request->port, NULL, client_addr); - } + fwd->pconnPush(fd, _peer, request, orig_request->host, client_addr); fd = -1; @@ -1590,11 +1584,12 @@ break; case HDR_MAX_FORWARDS: - if (orig_request->method == METHOD_TRACE) { - const int hops = e->getInt(); + /* pass only on TRACE or OPTIONS requests */ + if (orig_request->method == METHOD_TRACE || orig_request->method == METHOD_OPTIONS) { + const int64_t hops = e->getInt64(); if (hops > 0) - hdr_out->putInt(HDR_MAX_FORWARDS, hops - 1); + hdr_out->putInt64(HDR_MAX_FORWARDS, hops - 1); } break; diff -u -r -N squid-3.0.STABLE13/src/HttpHeader.cc squid-3.0.STABLE14/src/HttpHeader.cc --- squid-3.0.STABLE13/src/HttpHeader.cc 2009-02-03 14:36:21.000000000 +1300 +++ squid-3.0.STABLE14/src/HttpHeader.cc 2009-04-11 20:35:40.000000000 +1200 @@ -84,6 +84,7 @@ {"Cache-Control", HDR_CACHE_CONTROL, ftPCc}, {"Connection", HDR_CONNECTION, ftStr}, {"Content-Base", HDR_CONTENT_BASE, ftStr}, + {"Content-Disposition", HDR_CONTENT_DISPOSITION, ftStr}, /* for now */ {"Content-Encoding", HDR_CONTENT_ENCODING, ftStr}, {"Content-Language", HDR_CONTENT_LANGUAGE, ftStr}, {"Content-Length", HDR_CONTENT_LENGTH, ftInt64}, diff -u -r -N squid-3.0.STABLE13/src/HttpHeader.h squid-3.0.STABLE14/src/HttpHeader.h --- squid-3.0.STABLE13/src/HttpHeader.h 2009-02-03 14:36:21.000000000 +1300 +++ squid-3.0.STABLE14/src/HttpHeader.h 2009-04-11 20:35:40.000000000 +1200 @@ -58,6 +58,7 @@ HDR_CACHE_CONTROL, HDR_CONNECTION, HDR_CONTENT_BASE, + HDR_CONTENT_DISPOSITION, HDR_CONTENT_ENCODING, HDR_CONTENT_LANGUAGE, HDR_CONTENT_LENGTH, diff -u -r -N squid-3.0.STABLE13/src/HttpRequest.cc squid-3.0.STABLE14/src/HttpRequest.cc --- squid-3.0.STABLE13/src/HttpRequest.cc 2009-02-03 14:36:21.000000000 +1300 +++ squid-3.0.STABLE14/src/HttpRequest.cc 2009-04-11 20:35:40.000000000 +1200 @@ -267,7 +267,7 @@ header.len + 2; } -/* +/** * Returns true if HTTP allows us to pass this header on. Does not * check anonymizer (aka header_access) configuration. */ diff -u -r -N squid-3.0.STABLE13/src/HttpRequest.h squid-3.0.STABLE14/src/HttpRequest.h --- squid-3.0.STABLE13/src/HttpRequest.h 2009-02-03 14:36:21.000000000 +1300 +++ squid-3.0.STABLE14/src/HttpRequest.h 2009-04-11 20:35:40.000000000 +1200 @@ -96,7 +96,7 @@ int imslen; - int max_forwards; + int64_t max_forwards; /* these in_addr's could probably be sockaddr_in's */ diff -u -r -N squid-3.0.STABLE13/src/HttpStatusLine.cc squid-3.0.STABLE14/src/HttpStatusLine.cc --- squid-3.0.STABLE13/src/HttpStatusLine.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/HttpStatusLine.cc 2009-04-11 20:35:40.000000000 +1200 @@ -167,6 +167,10 @@ p = "Partial Content"; break; + case HTTP_MULTI_STATUS: + p = "Multi-Status"; + break; + case HTTP_MULTIPLE_CHOICES: p = "Multiple Choices"; break; diff -u -r -N squid-3.0.STABLE13/src/ipc.cc squid-3.0.STABLE14/src/ipc.cc --- squid-3.0.STABLE13/src/ipc.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/ipc.cc 2009-04-11 20:35:41.000000000 +1200 @@ -381,13 +381,9 @@ for (x = 3; x < SQUID_MAXFD; x++) close(x); - if (opt_no_daemon) { - squid_signal(SIGINT, SIG_IGN, SA_RESETHAND); - squid_signal(SIGHUP, SIG_IGN, SA_RESETHAND); - } - #if HAVE_SETSID - setsid(); + if (opt_no_daemon) + setsid(); #endif execvp(prog, (char *const *) args); diff -u -r -N squid-3.0.STABLE13/src/logfile.cc squid-3.0.STABLE14/src/logfile.cc --- squid-3.0.STABLE13/src/logfile.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/logfile.cc 2009-04-11 20:35:41.000000000 +1200 @@ -102,19 +102,16 @@ if (path[6] != '\0') { path += 7; - char* delim = strchr(path, '.'); - - if (!delim) - delim = strchr(path, '|'); - - if (delim != NULL) - *delim = '\0'; - - lf->syslog_priority = syslog_ntoa(path); - - if (delim != NULL) - lf->syslog_priority |= syslog_ntoa(delim+1); - + char *priority = xstrdup(path); + char *facility = (char *) strchr(priority, '.'); + if (!facility) + facility = (char *) strchr(priority, '|'); + if (facility) { + *facility++ = '\0'; + lf->syslog_priority |= syslog_ntoa(facility); + } + lf->syslog_priority |= syslog_ntoa(priority); + xfree(priority); if (0 == (lf->syslog_priority & PRIORITY_MASK)) lf->syslog_priority |= LOG_INFO; } diff -u -r -N squid-3.0.STABLE13/src/main.cc squid-3.0.STABLE14/src/main.cc --- squid-3.0.STABLE13/src/main.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/main.cc 2009-04-11 20:35:41.000000000 +1200 @@ -1218,7 +1218,7 @@ setUmask(Config.umask); if (-1 == opt_send_signal) if (checkRunningPid()) - exit(1); + exit(0); #if TEST_ACCESS @@ -1384,8 +1384,13 @@ exit(1); } } else { - fprintf(stderr, "%s: ERROR: No running copy\n", appname); - exit(1); + if (opt_send_signal != SIGTERM) { + fprintf(stderr, "%s: ERROR: No running copy\n", appname); + exit(1); + } else { + fprintf(stderr, "%s: No running copy\n", appname); + exit(0); + } } /* signal successfully sent */ diff -u -r -N squid-3.0.STABLE13/src/pconn.cc squid-3.0.STABLE14/src/pconn.cc --- squid-3.0.STABLE13/src/pconn.cc 2009-02-03 14:36:23.000000000 +1300 +++ squid-3.0.STABLE14/src/pconn.cc 2009-04-11 20:35:41.000000000 +1200 @@ -1,6 +1,5 @@ - /* - * $Id: pconn.cc,v 1.53.4.1 2008/02/24 12:06:41 amosjeffries Exp $ + * $Id$ * * DEBUG: section 48 Persistent Connections * AUTHOR: Duane Wessels @@ -178,17 +177,18 @@ PconnPool::key(const char *host, u_short port, const char *domain, struct IN_ADDR *client_address) { - LOCAL_ARRAY(char, buf, SQUIDHOSTNAMELEN * 2 + 10); + LOCAL_ARRAY(char, buf, SQUIDHOSTNAMELEN * 3 + 10); if (domain && client_address) - snprintf(buf, SQUIDHOSTNAMELEN * 2 + 10, "%s:%d-%s/%s", host, (int) port, inet_ntoa(*client_address), domain); + snprintf(buf, SQUIDHOSTNAMELEN * 3 + 10, "%s:%d-%s/%s", host, (int) port, inet_ntoa(*client_address), domain); else if (domain && (!client_address)) - snprintf(buf, SQUIDHOSTNAMELEN * 2 + 10, "%s:%d/%s", host, (int) port, domain); + snprintf(buf, SQUIDHOSTNAMELEN * 3 + 10, "%s:%d/%s", host, (int) port, domain); else if ((!domain) && client_address) - snprintf(buf, SQUIDHOSTNAMELEN * 2 + 10, "%s:%d-%s", host, (int) port, inet_ntoa(*client_address)); + snprintf(buf, SQUIDHOSTNAMELEN * 3 + 10, "%s:%d-%s", host, (int) port, inet_ntoa(*client_address)); else - snprintf(buf, SQUIDHOSTNAMELEN * 2 + 10, "%s:%d", host, (int) port); + snprintf(buf, SQUIDHOSTNAMELEN * 3 + 10, "%s:%d", host, (int) port); + debugs(48,6,"PconnPool::key(" << host << "," << port << "," << domain << "," << inet_ntoa(*client_address) << "is {" << buf << "}" ); return buf; } @@ -212,6 +212,19 @@ } } +void +PconnPool::dumpHash(StoreEntry *e) +{ + int i; + hash_link *walker = NULL; + hash_table *hid = table; + hash_first(hid); + + for (i = 0, walker = hid->next; walker; walker = hash_next(hid)) { + storeAppendPrintf(e, "\t item %5d: %s\n", i++, (char *)(walker->key)); + } +} + /* ========== PconnPool PUBLIC FUNCTIONS ============================================ */ PconnPool::PconnPool(const char *aDescr) : table(NULL), descr(aDescr) @@ -222,15 +235,19 @@ for (i = 0; i < PCONN_HIST_SZ; i++) hist[i] = 0; - PconnModule::GetInstance()->add - (this); + PconnModule::GetInstance()->add(this); +} + +PconnPool::~PconnPool() +{ + descr = NULL; + hashFreeMemory(table); } void PconnPool::push(int fd, const char *host, u_short port, const char *domain, struct IN_ADDR *client_address) { - IdleConnList *list; const char *aKey; LOCAL_ARRAY(char, desc, FD_DESC_SZ); @@ -243,6 +260,7 @@ } else if (shutting_down) { comm_close(fd); + debugs(48, 3, "PconnPool::push: Squid is shutting down. Refusing to do anything"); return; } @@ -253,8 +271,10 @@ if (list == NULL) { list = new IdleConnList(aKey, this); - debugs(48, 3, "pconnNew: adding " << hashKeyStr(&list->hash)); + debugs(48, 3, "PconnPool::push: new IdleConnList for {" << hashKeyStr(&list->hash) << "}" ); hash_join(table, &list->hash); + } else { + debugs(48, 3, "PconnPool::push: found IdleConnList for {" << hashKeyStr(&list->hash) << "}" ); } list->push(fd); @@ -265,7 +285,7 @@ debugs(48, 3, "PconnPool::push: pushed FD " << fd << " for " << aKey); } -/* +/** * Return a pconn fd for host:port if available and retriable. * Otherwise, return -1. * @@ -274,15 +294,17 @@ * transactions create persistent connections but are not retriable. */ int - -PconnPool::pop(const char *host, u_short port, const char *domain, struct IN_ADDR *client_address, bool isRetriable) +PconnPool::pop(const char *host, u_short port, const char *domain, struct in_addr *client_address, bool isRetriable) { - IdleConnList *list; const char * aKey = key(host, port, domain, client_address); - list = (IdleConnList *)hash_lookup(table, aKey); - if (list == NULL) + IdleConnList *list = (IdleConnList *)hash_lookup(table, aKey); + if (list == NULL) { + debugs(48, 3, "PconnPool::pop: lookup for key {" << aKey << "} failed."); return -1; + } else { + debugs(48, 3, "PconnPool::pop: found " << hashKeyStr(&list->hash) << (isRetriable?"(to use)":"(to kill)") ); + } int fd = list->findUseableFD(); // search from the end. skip pending reads. @@ -361,7 +383,10 @@ int i; for (i = 0; i < poolCount; i++) { + storeAppendPrintf(e, "\n Pool %d Stats\n", i); (*(pools+i))->dumpHist(e); + storeAppendPrintf(e, "\n Pool %d Hash Table\n",i); + (*(pools+i))->dumpHash(e); } } diff -u -r -N squid-3.0.STABLE13/src/pconn.h squid-3.0.STABLE14/src/pconn.h --- squid-3.0.STABLE13/src/pconn.h 2009-02-03 14:36:23.000000000 +1300 +++ squid-3.0.STABLE14/src/pconn.h 2009-04-11 20:35:41.000000000 +1200 @@ -46,12 +46,14 @@ public: PconnPool(const char *); + ~PconnPool(); void moduleInit(); void push(int fd, const char *host, u_short port, const char *domain, struct IN_ADDR *client_address); int pop(const char *host, u_short port, const char *domain, struct IN_ADDR *client_address, bool retriable); void count(int uses); void dumpHist(StoreEntry *e); + void dumpHash(StoreEntry *e); void unlinkList(IdleConnList *list) const; private: diff -u -r -N squid-3.0.STABLE13/src/Store.h squid-3.0.STABLE14/src/Store.h --- squid-3.0.STABLE13/src/Store.h 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/Store.h 2009-04-11 20:35:40.000000000 +1200 @@ -253,12 +253,10 @@ virtual void diskFull(); /* Retrieve a store entry from the store */ - virtual StoreEntry * get - (const cache_key *) = 0; + virtual StoreEntry * get(const cache_key *) = 0; - /* TODO: imeplement the async version */ - virtual void get - (String const key , STOREGETCLIENT callback, void *cbdata) = 0; + /* TODO: implement the async version */ + virtual void get(String const key , STOREGETCLIENT callback, void *cbdata) = 0; /* prepare the store for use. The store need not be usable immediately, * it should respond to readable() and writable() with true as soon diff -u -r -N squid-3.0.STABLE13/src/win32.cc squid-3.0.STABLE14/src/win32.cc --- squid-3.0.STABLE13/src/win32.cc 2009-02-03 14:36:23.000000000 +1300 +++ squid-3.0.STABLE14/src/win32.cc 2009-04-11 20:35:42.000000000 +1200 @@ -110,10 +110,8 @@ { #if HAVE_WIN32_PSAPI - if ((WIN32_OS_version == _WIN_OS_WINNT) || (WIN32_OS_version == _WIN_OS_WIN2K) - || (WIN32_OS_version == _WIN_OS_WINXP) || (WIN32_OS_version == _WIN_OS_WINNET)) - { - /* On Windows NT/2000 call PSAPI.DLL for process Memory */ + if (WIN32_OS_version >= _WIN_OS_WINNT) { + /* On Windows NT and later call PSAPI.DLL for process Memory */ /* informations -- Guido Serassio */ HANDLE hProcess; PROCESS_MEMORY_COUNTERS pmc; diff -u -r -N squid-3.0.STABLE13/src/WinSvc.cc squid-3.0.STABLE14/src/WinSvc.cc --- squid-3.0.STABLE13/src/WinSvc.cc 2009-02-03 14:36:22.000000000 +1300 +++ squid-3.0.STABLE14/src/WinSvc.cc 2009-04-11 20:35:40.000000000 +1200 @@ -347,7 +347,21 @@ WIN32_OS_string = xstrdup("Windows Server 2008"); return _WIN_OS_WINLON; } - break; + if ((osvi.dwMajorVersion == 6) && (osvi.dwMinorVersion == 1)) { + if (osvi.wProductType == VER_NT_WORKSTATION) + WIN32_OS_string = xstrdup("Windows 7"); + else + WIN32_OS_string = xstrdup("Windows Server 2008 R2"); + return _WIN_OS_WIN7; + } + if (((osvi.dwMajorVersion > 6)) || ((osvi.dwMajorVersion == 6) && (osvi.dwMinorVersion > 1))) { + if (osvi.wProductType == VER_NT_WORKSTATION) + WIN32_OS_string = xstrdup("Unknown Windows version, assuming Windows 7 capabilities"); + else + WIN32_OS_string = xstrdup("Unknown Windows version, assuming Windows Server 2008 R2 capabilities"); + return _WIN_OS_WIN7; + } + break; case VER_PLATFORM_WIN32_WINDOWS: if ((osvi.dwMajorVersion == 4) && (osvi.dwMinorVersion == 0)) { WIN32_OS_string = xstrdup("Windows 95");