diff -ruN squid-2.7.STABLE3/ChangeLog squid-2.7.STABLE4/ChangeLog --- squid-2.7.STABLE3/ChangeLog 2008-06-25 01:17:19.000000000 +0200 +++ squid-2.7.STABLE4/ChangeLog 2008-08-08 21:17:40.000000000 +0200 @@ -1,3 +1,57 @@ +Changes to squid-2.7.SATBLE4 (8 August 2008) + + - Bug #2387: The calculation of the number of hash buckets need to + account for the memory size, not only disk size + - Bug #2393: DNS requests retried indefinitely at full speed on failed + TCP connection + - Bug #2393: DNS retransmit queue could get hold up + - Correct socket syscalls statistics in commResetFD() + - Plug a small "squid -k reconfigure" race in the new round-robin + counter management + - Windows port: fix typo in handling of notification of IP + address changes + - Document the "zph_mode option" setting, got left out when merging + the zph patches + - Bug #2396: Correct the opening of the PF device file. + - Make --with-large-files and --with-build-envirnment=default play + nice together + - Bug #2407: Spelling error in http_port tcpkeepalive option + - Bug #2408: assertion failed: forward.c:529: "fs" + - Bug #2414: assertion failed: forward.c:110: "!EBIT_TEST(e->flags, + ENTRY_FWD_HDR_WAIT)" + - Workaround for Linux-2.6.24 & 2.6.25 netfiler_ipv4.h include header + __u32 problem + - Make dns_nameserver work when using --disable-internal-dns on glibc + based systems + - Make clientCacheHit bail out gracefuly if hitting an aborted object + - Bug #2406: access.log logs rewritten URL and strip_query_terms + ineffective + - More changes to deal properly with aborted requests + +Changes to squid-2.6.STABLE21 (27 June 2008) + + - Bug #2350: Bugs in Linux kernel capabilities code + - Bug #2241: weights not applied properly in round-robin peer + selection + - Off by one error in DNS label decompression could cause valid DNS + messages to be rejected + - logformat docs contain extra whitespace + - Reject ridiculously large ASN.1 lengths + - Fix SNMP reporting of counters with a value > 0xFF80000 + - Correct spelling of WCCPv2 dst_port_hash to match the source + - Plug some "squid -k reconfigure" memory leaks. Mostly SSL related. + - Bug #1993: Memory leak in http_reply_access deny processing + - Bug #2122: In some situations collapsed_forwarding could leak + private information + - Bug #2376: Round-Robin becomes unbalanced when a peer dies and comes + back + - Bug #2387: The calculation of the number of hash buckets need to + account for the memory size, not only disk size + - Bug #2393: DNS requests retried indefinitely at full speed on failed + TCP connection + - Bug #2393: DNS retransmit queue could get hold up + - Correct socket syscalls statistics in commResetFD() + Changes to squid-2.7.STABLE3 (25 June 2008) - Byg #2376: Round-Robin peer selection becomes unbalanced when a diff -ruN squid-2.7.STABLE3/configure squid-2.7.STABLE4/configure --- squid-2.7.STABLE3/configure 2008-06-26 00:18:55.000000000 +0200 +++ squid-2.7.STABLE4/configure 2008-08-08 21:21:03.000000000 +0200 @@ -1,7 +1,7 @@ #! /bin/sh -# From configure.in Revision: 1.430.2.11 . +# From configure.in Revision: 1.430.2.14 . # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61 for Squid Web Proxy 2.7.STABLE3. +# Generated by GNU Autoconf 2.61 for Squid Web Proxy 2.7.STABLE4. # # Report bugs to . # @@ -575,8 +575,8 @@ # Identity of this package. PACKAGE_NAME='Squid Web Proxy' PACKAGE_TARNAME='squid' -PACKAGE_VERSION='2.7.STABLE3' -PACKAGE_STRING='Squid Web Proxy 2.7.STABLE3' +PACKAGE_VERSION='2.7.STABLE4' +PACKAGE_STRING='Squid Web Proxy 2.7.STABLE4' PACKAGE_BUGREPORT='http://www.squid-cache.org/bugs/' ac_default_prefix=/usr/local/squid @@ -1312,7 +1312,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 2.7.STABLE3 to adapt to many kinds of systems. +\`configure' configures Squid Web Proxy 2.7.STABLE4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1382,7 +1382,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Squid Web Proxy 2.7.STABLE3:";; + short | recursive ) echo "Configuration of Squid Web Proxy 2.7.STABLE4:";; esac cat <<\_ACEOF @@ -1663,7 +1663,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Squid Web Proxy configure 2.7.STABLE3 +Squid Web Proxy configure 2.7.STABLE4 generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -1677,7 +1677,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 2.7.STABLE3, which was +It was created by Squid Web Proxy $as_me 2.7.STABLE4, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ @@ -2350,7 +2350,7 @@ # Define the identity of the package. PACKAGE='squid' - VERSION='2.7.STABLE3' + VERSION='2.7.STABLE4' cat >>confdefs.h <<_ACEOF @@ -5228,10 +5228,16 @@ if test -z "$buildmodel"; then echo "WARNING: No suitable build environment found for large files. Trying to use _FILE_OFFSET_BITS=64" sleep 1 - CFLAGS="-D_FILE_OFFSET_BITS=64 $CFLAGS" fi fi -if test -n "$buildmodel" && test "$buildmodel" != "default"; then +case "$buildmodel" in +"default"|"") + if test $needlargefiles; then + echo "Enabling -D_FILE_OFFSET_BITS=64 for large file support" + CFLAGS="-D_FILE_OFFSET_BITS=64 $CFLAGS" + fi + ;; +*) echo "Using $buildmodel build environment" if test "`getconf _$buildmodel 2>/dev/null || true`" = 1 || test "`getconf $buildmodel 2>/dev/null || true`" ; then : # All fine @@ -5265,7 +5271,8 @@ *) ;; esac -fi + ;; +esac # Check whether --enable-linux-tproxy was given. if test "${enable_linux_tproxy+set}" = set; then @@ -24909,6 +24916,7 @@ + for ac_func in \ bcopy \ backtrace_symbols_fd \ @@ -24944,6 +24952,7 @@ regexec \ regfree \ res_init \ + __res_init \ rint \ sbrk \ select \ @@ -27789,7 +27798,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 2.7.STABLE3, which was +This file was extended by Squid Web Proxy $as_me 2.7.STABLE4, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -27842,7 +27851,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -Squid Web Proxy config.status 2.7.STABLE3 +Squid Web Proxy config.status 2.7.STABLE4 configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff -ruN squid-2.7.STABLE3/configure.in squid-2.7.STABLE4/configure.in --- squid-2.7.STABLE3/configure.in 2008-06-26 00:18:55.000000000 +0200 +++ squid-2.7.STABLE4/configure.in 2008-08-08 21:21:03.000000000 +0200 @@ -1,16 +1,16 @@ dnl dnl Configuration input file for Squid dnl -dnl $Id: configure.in,v 1.430.2.11 2008/06/24 23:17:19 hno Exp $ +dnl $Id: configure.in,v 1.430.2.14 2008/08/03 22:27:01 hno Exp $ dnl dnl dnl -AC_INIT(Squid Web Proxy, 2.7.STABLE3, http://www.squid-cache.org/bugs/, squid) +AC_INIT(Squid Web Proxy, 2.7.STABLE4, http://www.squid-cache.org/bugs/, squid) AC_PREREQ(2.52) AM_CONFIG_HEADER(include/autoconf.h) AC_CONFIG_AUX_DIR(cfgaux) AM_INIT_AUTOMAKE -AC_REVISION($Revision: 1.430.2.11 $)dnl +AC_REVISION($Revision: 1.430.2.14 $)dnl AC_PREFIX_DEFAULT(/usr/local/squid) AM_MAINTAINER_MODE @@ -1077,10 +1077,16 @@ if test -z "$buildmodel"; then echo "WARNING: No suitable build environment found for large files. Trying to use _FILE_OFFSET_BITS=64" sleep 1 - CFLAGS="-D_FILE_OFFSET_BITS=64 $CFLAGS" fi fi -if test -n "$buildmodel" && test "$buildmodel" != "default"; then +case "$buildmodel" in +"default"|"") + if test $needlargefiles; then + echo "Enabling -D_FILE_OFFSET_BITS=64 for large file support" + CFLAGS="-D_FILE_OFFSET_BITS=64 $CFLAGS" + fi + ;; +*) echo "Using $buildmodel build environment" if test "`getconf _$buildmodel 2>/dev/null || true`" = 1 || test "`getconf $buildmodel 2>/dev/null || true`" ; then : # All fine @@ -1127,7 +1133,8 @@ *) ;; esac -fi + ;; +esac dnl Enable Linux transparent proxy support AC_ARG_ENABLE(linux-tproxy, @@ -2391,6 +2398,7 @@ regexec \ regfree \ res_init \ + __res_init \ rint \ sbrk \ select \ diff -ruN squid-2.7.STABLE3/helpers/external_acl/ldap_group/squid_ldap_group.c squid-2.7.STABLE4/helpers/external_acl/ldap_group/squid_ldap_group.c --- squid-2.7.STABLE3/helpers/external_acl/ldap_group/squid_ldap_group.c 2008-03-18 03:49:58.000000000 +0100 +++ squid-2.7.STABLE4/helpers/external_acl/ldap_group/squid_ldap_group.c 2008-08-04 00:11:37.000000000 +0200 @@ -404,7 +404,7 @@ fprintf(stderr, "\n" PROGRAM_NAME " version " PROGRAM_VERSION "\n\n"); fprintf(stderr, "Usage: " PROGRAM_NAME " -b basedn -f filter [options] ldap_server_name\n\n"); fprintf(stderr, "\t-b basedn (REQUIRED)\tbase dn under where to search for groups\n"); - fprintf(stderr, "\t-f filter (REQUIRED)\tgroup search filter pattern. %%v = user,\n\t\t\t\t%%a = group\n"); + fprintf(stderr, "\t-f filter (REQUIRED)\tgroup search filter pattern. %%u = user,\n\t\t\t\t%%g = group\n"); fprintf(stderr, "\t-B basedn (REQUIRED)\tbase dn under where to search for users\n"); fprintf(stderr, "\t-F filter (REQUIRED)\tuser search filter pattern. %%s = login\n"); fprintf(stderr, "\t-s base|one|sub\t\tsearch scope\n"); diff -ruN squid-2.7.STABLE3/include/autoconf.h.in squid-2.7.STABLE4/include/autoconf.h.in --- squid-2.7.STABLE3/include/autoconf.h.in 2008-06-05 02:18:07.000000000 +0200 +++ squid-2.7.STABLE4/include/autoconf.h.in 2008-07-19 02:18:58.000000000 +0200 @@ -624,6 +624,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_WINSOCK_H +/* Define to 1 if you have the `__res_init' function. */ +#undef HAVE___RES_INIT + /* Some systems support __va_copy */ #undef HAVE___VA_COPY diff -ruN squid-2.7.STABLE3/include/version.h squid-2.7.STABLE4/include/version.h --- squid-2.7.STABLE3/include/version.h 2008-06-26 00:18:55.000000000 +0200 +++ squid-2.7.STABLE4/include/version.h 2008-08-08 21:21:03.000000000 +0200 @@ -9,5 +9,5 @@ */ #ifndef SQUID_RELEASE_TIME -#define SQUID_RELEASE_TIME 1214432332 +#define SQUID_RELEASE_TIME 1218223259 #endif diff -ruN squid-2.7.STABLE3/RELEASENOTES.html squid-2.7.STABLE4/RELEASENOTES.html --- squid-2.7.STABLE3/RELEASENOTES.html 2008-06-26 00:19:27.000000000 +0200 +++ squid-2.7.STABLE4/RELEASENOTES.html 2008-08-08 21:21:35.000000000 +0200 @@ -2,12 +2,12 @@ - Squid 2.7.STABLE3 release notes + Squid 2.7.STABLE4 release notes -

Squid 2.7.STABLE3 release notes

+

Squid 2.7.STABLE4 release notes

-

Squid Developers

$Id: release.html,v 1.1.2.7 2008/06/24 23:17:59 hno Exp $ +

Squid Developers

$Id: release.html,v 1.1.2.9 2008/08/08 19:19:32 hno Exp $
This document contains the release notes for version 2.7 of Squid. Squid is a WWW Cache application developed by the Web Caching community. @@ -47,6 +47,9 @@

6. Key changes in squid-2.7.STABLE3

+

+

7. Key changes in squid-2.7.STABLE4

+

1. Key changes from squid 2.6

@@ -432,5 +435,19 @@

+

7. Key changes in squid-2.7.STABLE4

+ +

+

+

+ diff -ruN squid-2.7.STABLE3/src/cache_cf.c squid-2.7.STABLE4/src/cache_cf.c --- squid-2.7.STABLE3/src/cache_cf.c 2008-06-25 01:14:18.000000000 +0200 +++ squid-2.7.STABLE4/src/cache_cf.c 2008-06-27 23:52:56.000000000 +0200 @@ -1,6 +1,6 @@ /* - * $Id: cache_cf.c,v 1.480.2.11 2008/06/24 23:14:18 hno Exp $ + * $Id: cache_cf.c,v 1.480.2.12 2008/06/27 21:52:56 hno Exp $ * * DEBUG: section 3 Configuration File Parsing * AUTHOR: Harvest Derived @@ -1716,7 +1716,6 @@ parse_peer(peer ** head) { char *token = NULL; - void *arg = NULL; /* throwaway arg to make eventAdd happy */ peer *p; p = cbdataAlloc(peer); p->http_port = CACHE_HTTP_PORT; @@ -1916,9 +1915,7 @@ head = &(*head)->next; *head = p; Config.npeers++; - if (!reconfiguring && Config.npeers == 1) { - peerClearRRLoop(arg); - } + peerClearRRStart(); } static void diff -ruN squid-2.7.STABLE3/src/cf.data.pre squid-2.7.STABLE4/src/cf.data.pre --- squid-2.7.STABLE3/src/cf.data.pre 2008-06-25 00:54:18.000000000 +0200 +++ squid-2.7.STABLE4/src/cf.data.pre 2008-07-10 11:47:28.000000000 +0200 @@ -1,6 +1,6 @@ # -# $Id: cf.data.pre,v 1.450.2.24 2008/06/24 22:54:18 hno Exp $ +# $Id: cf.data.pre,v 1.450.2.26 2008/07/10 09:47:28 hno Exp $ # # SQUID Web Proxy Cache http://www.squid-cache.org/ # ---------------------------------------------------------- @@ -1209,7 +1209,7 @@ name= Specifies a internal name for the port. Defaults to the port specification (port or addr:port) - keepalive[=idle,interval,timeout] + tcpkeepalive[=idle,interval,timeout] Enable TCP keepalive probes of idle connections idle is the initial time before TCP starts probing the connection, interval how often to probe, and @@ -1389,9 +1389,11 @@ This option enables packet level marking of HIT/MISS responses, either using IP TOS or socket priority. off Feature disabled - tos Set the IP TOS field + tos Set the IP TOS/Diffserv field priority Set the socket priority (may get mapped to TOS by OS, otherwise only usable in local rulesets) + option Embed the mark in an IP option field. See also + zph_option. See also tcp_outgoing_tos for details/requirements about TOS usage. DOC_END diff -ruN squid-2.7.STABLE3/src/client_side.c squid-2.7.STABLE4/src/client_side.c --- squid-2.7.STABLE3/src/client_side.c 2008-06-25 00:54:47.000000000 +0200 +++ squid-2.7.STABLE4/src/client_side.c 2008-07-21 22:43:27.000000000 +0200 @@ -1,6 +1,6 @@ /* - * $Id: client_side.c,v 1.754.2.16 2008/06/24 22:54:47 hno Exp $ + * $Id: client_side.c,v 1.754.2.21 2008/07/21 20:43:27 hno Exp $ * * DEBUG: section 33 Client-side Routines * AUTHOR: Duane Wessels @@ -92,6 +92,7 @@ #endif #if LINUX_NETFILTER +#include #include #endif @@ -949,7 +950,10 @@ clientProcessMiss(http); return; } - assert(!EBIT_TEST(entry->flags, ENTRY_ABORTED)); + if (EBIT_TEST(entry->flags, ENTRY_ABORTED)) { + /* Old object got aborted, not good */ + clientProcessMiss(http); + } if (recopy) { storeClientCopyHeaders(http->sc, entry, clientSendHeaders, @@ -1185,7 +1189,9 @@ mem = http->entry->mem_obj; if (http->out.size || http->log_type) { http->al.icp.opcode = ICP_INVALID; - http->al.url = http->uri; + http->al.url = http->log_uri; + if (!http->al.url) + http->al.url = urlCanonicalClean(request); debug(33, 9) ("httpRequestFree: al.url='%s'\n", http->al.url); http->al.cache.out_ip = request->out_ip; if (http->reply && http->log_type != LOG_TCP_DENIED) { @@ -1245,6 +1251,7 @@ if (request) checkFailureRatio(request->err_type, http->al.hier.code); safe_free(http->uri); + safe_free(http->log_uri); safe_free(http->al.headers.request); safe_free(http->al.headers.reply); safe_free(http->al.cache.authuser); @@ -2225,10 +2232,15 @@ http->log_type = LOG_TCP_SWAPFAIL_MISS; clientProcessMiss(http); return; + } else if (EBIT_TEST(e->flags, ENTRY_ABORTED)) { + /* aborted object */ + debug(33, 3) ("clientCacheHit: hit an aborted object %s\n", http->uri); + http->log_type = LOG_TCP_SWAPFAIL_MISS; + clientProcessMiss(http); + return; } mem = e->mem_obj; debug(33, 3) ("clientCacheHit: %s = %d\n", http->uri, rep->sline.status); - assert(!EBIT_TEST(e->flags, ENTRY_ABORTED)); /* * This particular logic is a bit hairy. @@ -3073,11 +3085,6 @@ debug(33, 1) ("clientSendMoreData: Deferring %s\n", storeUrl(entry)); memFree(buf, MEM_STORE_CLIENT_BUF); return; - } else if (entry && EBIT_TEST(entry->flags, ENTRY_ABORTED)) { - /* call clientWriteComplete so the client socket gets closed */ - clientWriteComplete(fd, NULL, 0, COMM_OK, http); - memFree(buf, MEM_STORE_CLIENT_BUF); - return; } else if (size < 0) { /* call clientWriteComplete so the client socket gets closed */ clientWriteComplete(fd, NULL, 0, COMM_OK, http); @@ -3225,7 +3232,7 @@ debug(33, 1) ("WARNING: closing FD %d to prevent counter overflow\n", fd); debug(33, 1) ("\tclient %s\n", inet_ntoa(http->conn->peer.sin_addr)); debug(33, 1) ("\treceived %d bytes\n", (int) http->out.size); - debug(33, 1) ("\tURI %s\n", http->log_uri); + debug(33, 1) ("\tURI %s\n", http->uri); comm_close(fd); } else #endif @@ -3235,7 +3242,7 @@ debug(33, 1) ("\tclient %s\n", inet_ntoa(http->conn->peer.sin_addr)); debug(33, 1) ("\treceived %d bytes (offset %d)\n", (int) http->out.size, (int) http->out.offset); - debug(33, 1) ("\tURI %s\n", http->log_uri); + debug(33, 1) ("\tURI %s\n", http->uri); comm_close(fd); } else #endif @@ -3246,17 +3253,21 @@ comm_close(fd); } else if (NULL == entry) { comm_close(fd); /* yuk */ - } else if (EBIT_TEST(entry->flags, ENTRY_ABORTED)) { - comm_close(fd); } else if ((done = clientCheckTransferDone(http)) != 0 || size == 0) { debug(33, 5) ("clientWriteComplete: FD %d transfer is DONE\n", fd); /* We're finished case */ if (!done) { debug(33, 5) ("clientWriteComplete: closing, !done\n"); comm_close(fd); + } else if (EBIT_TEST(entry->flags, ENTRY_ABORTED)) { + debug(33, 2) ("clientWriteComplete: Object aborted\n"); + comm_close(fd); } else if (clientGotNotEnough(http)) { debug(33, 5) ("clientWriteComplete: client didn't get all it expected\n"); comm_close(fd); + } else if (EBIT_TEST(http->entry->flags, ENTRY_ABORTED)) { + debug(33, 5) ("clientWriteComplete: aborted object\n"); + comm_close(fd); } else if (http->request->flags.chunked_response) { /* Finish chunked transfer encoding */ http->request->flags.chunked_response = 0; /* no longer chunking */ @@ -3282,8 +3293,6 @@ } else { /* More data will be coming from primary server; register with * storage manager. */ - if (EBIT_TEST(entry->flags, ENTRY_ABORTED)) - debug(33, 0) ("clientWriteComplete 2: ENTRY_ABORTED\n"); storeClientCopy(http->sc, entry, http->out.offset, http->out.offset, @@ -4519,7 +4528,7 @@ static int pffd = -1; static time_t last_reported = 0; if (pffd < 0) { - pffd = open("/dev/pf", O_RDWR); + pffd = open("/dev/pf", O_RDONLY); if (pffd >= 0) commSetCloseOnExec(pffd); } diff -ruN squid-2.7.STABLE3/src/client_side_rewrite.c squid-2.7.STABLE4/src/client_side_rewrite.c --- squid-2.7.STABLE3/src/client_side_rewrite.c 2008-01-05 08:33:18.000000000 +0100 +++ squid-2.7.STABLE4/src/client_side_rewrite.c 2008-07-21 22:18:50.000000000 +0200 @@ -1,6 +1,6 @@ /* - * $Id: client_side_rewrite.c,v 1.2.2.1 2008/01/05 07:33:18 adrian Exp $ + * $Id: client_side_rewrite.c,v 1.2.2.2 2008/07/21 20:18:50 hno Exp $ * * DEBUG: section 33 Client-side Routines - URL Rewriter * AUTHOR: Duane Wessels; Adrian Chadd @@ -108,6 +108,7 @@ if (new_request) { safe_free(http->uri); http->uri = xstrdup(urlCanonical(new_request)); + http->log_uri = xstrdup(urlCanonicalClean(old_request)); new_request->http_ver = old_request->http_ver; httpHeaderAppend(&new_request->header, &old_request->header); new_request->client_addr = old_request->client_addr; diff -ruN squid-2.7.STABLE3/src/comm.c squid-2.7.STABLE4/src/comm.c --- squid-2.7.STABLE3/src/comm.c 2008-05-05 01:23:13.000000000 +0200 +++ squid-2.7.STABLE4/src/comm.c 2008-06-27 22:56:56.000000000 +0200 @@ -1,6 +1,6 @@ /* - * $Id: comm.c,v 1.366.2.4 2008/05/04 23:23:13 hno Exp $ + * $Id: comm.c,v 1.366.2.5 2008/06/27 20:56:56 hno Exp $ * * DEBUG: section 5 Socket Functions * AUTHOR: Harvest Derived @@ -388,7 +388,6 @@ return 0; statCounter.syscalls.sock.sockets++; fd2 = socket(AF_INET, SOCK_STREAM, 0); - statCounter.syscalls.sock.sockets++; if (fd2 < 0) { debug(5, 0) ("commResetFD: socket: %s\n", xstrerror()); if (ENFILE == errno || EMFILE == errno) diff -ruN squid-2.7.STABLE3/src/dns_internal.c squid-2.7.STABLE4/src/dns_internal.c --- squid-2.7.STABLE3/src/dns_internal.c 2008-05-05 01:26:36.000000000 +0200 +++ squid-2.7.STABLE4/src/dns_internal.c 2008-06-27 22:56:26.000000000 +0200 @@ -1,6 +1,6 @@ /* - * $Id: dns_internal.c,v 1.63.2.5 2008/05/04 23:26:36 hno Exp $ + * $Id: dns_internal.c,v 1.63.2.7 2008/06/27 20:56:26 hno Exp $ * * DEBUG: section 78 DNS lookups; interacts with lib/rfc1035.c * AUTHOR: Duane Wessels @@ -98,6 +98,7 @@ int nsends; struct timeval start_t; struct timeval sent_t; + struct timeval queue_t; dlink_node lru; IDNSCB *callback; void *callback_data; @@ -605,7 +606,7 @@ q->buf, q->sz); q->nsends++; - q->sent_t = current_time; + q->queue_t = q->sent_t = current_time; if (x < 0) { debug(50, 1) ("idnsSendQuery: FD %d: sendto: %s\n", DnsSocket, xstrerror()); @@ -704,9 +705,8 @@ return; } if (n <= 0) { - debug(78, 2) ("idnsReadTcp: Short response for %s.\n", q->name); - dlinkDelete(&q->lru, &lru_list); - idnsSendQuery(q); + debug(78, 1) ("idnsReadTcp: Short response from nameserver %d for %s.\n", ns + 1, q->name); + idnsTcpCleanup(q); return; } fd_bytes(fd, n, FD_READ); @@ -733,8 +733,7 @@ if (errflag == COMM_ERR_CLOSING) return; if (errflag) { - dlinkDelete(&q->lru, &lru_list); - idnsSendQuery(q); + idnsTcpCleanup(q); return; } commSetSelect(q->tcp_socket, COMM_SELECT_READ, idnsReadTcp, q, 0); @@ -747,8 +746,9 @@ idns_query *q = data; short nsz; if (status != COMM_OK) { - dlinkDelete(&q->lru, &lru_list); - idnsSendQuery(q); + int ns = (q->nsends - 1) % nns; + debug(78, 1) ("idnsSendTcpQuery: Failed to connect to DNS server %d using TCP\n", ns + 1); + idnsTcpCleanup(q); return; } memBufInit(&buf, q->sz + 2, q->sz + 2); @@ -774,6 +774,7 @@ 0, COMM_NONBLOCKING, "DNS TCP Socket"); + q->queue_t = q->sent_t = current_time; dlinkAdd(q, &q->lru, &lru_list); commConnectStart(q->tcp_socket, inet_ntoa(nameservers[ns].S.sin_addr), @@ -837,7 +838,6 @@ return; } if (q->rcode == 3 && q->do_searchpath && q->attempt < MAX_ATTEMPT) { - assert(NULL == message->answer); strcpy(q->name, q->orig); if (q->domain < npc) { strcat(q->name, "."); @@ -934,16 +934,24 @@ dlink_node *p = NULL; idns_query *q; event_queued = 0; + if (0 == nns) + /* name servers went away; reconfiguring or shutting down */ + return; for (n = lru_list.tail; n; n = p) { - if (0 == nns) - /* name servers went away; reconfiguring or shutting down */ - break; + p = n->prev; q = n->data; - if (tvSubDsec(q->sent_t, current_time) < Config.Timeout.idns_retransmit * 1 << ((q->nsends - 1) / nns)) + /* Anything to process in the queue? */ + if (tvSubDsec(q->queue_t, current_time) < Config.Timeout.idns_retransmit) break; + /* Query timer expired? */ + if (tvSubDsec(q->sent_t, current_time) < Config.Timeout.idns_retransmit * 1 << ((q->nsends - 1) / nns)) { + dlinkDelete(&q->lru, &lru_list); + q->queue_t = current_time; + dlinkAdd(q, &q->lru, &lru_list); + continue; + } debug(78, 3) ("idnsCheckQueue: ID %#04x timeout\n", q->id); - p = n->prev; dlinkDelete(&q->lru, &lru_list); if (tvSubDsec(q->start_t, current_time) < Config.Timeout.idns_query) { idnsSendQuery(q); diff -ruN squid-2.7.STABLE3/src/dnsserver.c squid-2.7.STABLE4/src/dnsserver.c --- squid-2.7.STABLE3/src/dnsserver.c 2008-06-04 22:32:48.000000000 +0200 +++ squid-2.7.STABLE4/src/dnsserver.c 2008-07-18 02:48:23.000000000 +0200 @@ -1,6 +1,6 @@ /* - * $Id: dnsserver.c,v 1.62.6.1 2008/06/04 20:32:48 hno Exp $ + * $Id: dnsserver.c,v 1.62.6.2 2008/07/18 00:48:23 hno Exp $ * * DEBUG: section 0 DNS Resolver * AUTHOR: Harvest Derived @@ -142,7 +142,7 @@ #include "util.h" #include "snprintf.h" -#if !defined(_SQUID_AIX_) && !defined(_SQUID_MSWIN_) +#if !defined(_SQUID_AIX_) && !defined(_SQUID_MSWIN_) && !defined(h_errno) extern int h_errno; #endif @@ -150,6 +150,16 @@ extern int _dns_ttl_; /* this is a really *dirty* hack - bne */ #endif +/* + * res_init() is a macro re-definition of __res_init on: Debian + */ +#if !defined(HAVE_RES_INIT) && defined(HAVE___RES_INIT) +#ifndef res_init +#define res_init __res_init +#endif +#define HAVE_RES_INIT HAVE___RES_INIT +#endif + #ifdef _SQUID_NEXT_ /* This is a really bloody hack. frank@langen.bull.de * Workaround bug in gethostbyname which sets h_errno wrong @@ -167,7 +177,7 @@ #endif /* error messages from gethostbyname() */ -static char * +static const char * my_h_msgs(int x) { if (x == HOST_NOT_FOUND) diff -ruN squid-2.7.STABLE3/src/forward.c squid-2.7.STABLE4/src/forward.c --- squid-2.7.STABLE3/src/forward.c 2008-06-19 03:08:29.000000000 +0200 +++ squid-2.7.STABLE4/src/forward.c 2008-07-18 02:47:48.000000000 +0200 @@ -1,6 +1,6 @@ /* - * $Id: forward.c,v 1.131.2.3 2008/06/19 01:08:29 hno Exp $ + * $Id: forward.c,v 1.131.2.5 2008/07/18 00:47:48 hno Exp $ * * DEBUG: section 17 Request Forwarding * AUTHOR: Duane Wessels @@ -37,6 +37,7 @@ #include "squid.h" #if LINUX_NETFILTER +#include #include #endif #if LINUX_TPROXY @@ -53,6 +54,7 @@ static CNCB fwdConnectDone; static int fwdCheckRetry(FwdState * fwdState); static int fwdReforward(FwdState *); +static void fwdRestart(void *); static void fwdStartFail(FwdState *); static void fwdLogReplyStatus(int tries, http_status status); static OBJH fwdStats; @@ -207,7 +209,7 @@ } } /* use eventAdd to break potential call sequence loops and to slow things down a little */ - eventAdd("fwdConnectStart", fwdConnectStart, fwdState, originserver ? 0.05 : 0.005, 0); + eventAdd("fwdRestart", fwdRestart, fwdState, originserver ? 0.05 : 0.005, 0); return; } if (!fwdState->err && shutting_down) @@ -571,7 +573,7 @@ fwdState->request->pinned_connection = NULL; fwdState->servers = fs->next; fwdServerFree(fs); - fwdConnectStart(fwdState); + fwdRestart(fwdState); return; } #if LINUX_TPROXY @@ -697,6 +699,16 @@ } static void +fwdRestart(void *data) +{ + FwdState *fwdState = data; + if (fwdState->servers) + fwdConnectStart(fwdState); + else + fwdStartFail(fwdState); +} + +static void fwdStartComplete(FwdServer * servers, void *data) { FwdState *fwdState = data; diff -ruN squid-2.7.STABLE3/src/neighbors.c squid-2.7.STABLE4/src/neighbors.c --- squid-2.7.STABLE3/src/neighbors.c 2008-06-25 01:14:18.000000000 +0200 +++ squid-2.7.STABLE4/src/neighbors.c 2008-06-27 23:52:56.000000000 +0200 @@ -1,6 +1,6 @@ /* - * $Id: neighbors.c,v 1.319.2.7 2008/06/24 23:14:18 hno Exp $ + * $Id: neighbors.c,v 1.319.2.8 2008/06/27 21:52:56 hno Exp $ * * DEBUG: section 15 Neighbor Routines * AUTHOR: Harvest Derived @@ -281,13 +281,22 @@ } /* This gets called every 5 minutes to clear the round-robin counter. */ -void +static void peerClearRRLoop(void *data) { peerClearRR(); eventAdd("peerClearRR", peerClearRRLoop, data, 5 * 60.0, 0); } +void +peerClearRRStart(void) +{ + static int event_added = 0; + if (!event_added) { + peerClearRRLoop(NULL); + } +} + /* Actually clear the round-robin counter. */ void peerClearRR(void) diff -ruN squid-2.7.STABLE3/src/peer_select.c squid-2.7.STABLE4/src/peer_select.c --- squid-2.7.STABLE3/src/peer_select.c 2008-06-25 00:53:49.000000000 +0200 +++ squid-2.7.STABLE4/src/peer_select.c 2008-07-10 11:48:41.000000000 +0200 @@ -1,6 +1,6 @@ /* - * $Id: peer_select.c,v 1.134.2.3 2008/06/24 22:53:49 hno Exp $ + * $Id: peer_select.c,v 1.134.2.4 2008/07/10 09:48:41 hno Exp $ * * DEBUG: section 44 Peer Selection Algorithm * AUTHOR: Duane Wessels @@ -685,7 +685,7 @@ p ? p->name : "DIRECT", hier_strings[code]); while (*FS) { - if ((*FS)->peer == p) { + if ((*FS)->peer == p && (*FS)->code != PINNED) { debug(44, 5) ("peerAddFwdServer: Skipping duplicate registration of %s\n", p ? p->name : "DIRECT"); return; } diff -ruN squid-2.7.STABLE3/src/protos.h squid-2.7.STABLE4/src/protos.h --- squid-2.7.STABLE3/src/protos.h 2008-06-25 01:14:18.000000000 +0200 +++ squid-2.7.STABLE4/src/protos.h 2008-06-27 23:52:56.000000000 +0200 @@ -1,6 +1,6 @@ /* - * $Id: protos.h,v 1.547.2.9 2008/06/24 23:14:18 hno Exp $ + * $Id: protos.h,v 1.547.2.10 2008/06/27 21:52:56 hno Exp $ * * * SQUID Web Proxy Cache http://www.squid-cache.org/ @@ -688,7 +688,7 @@ extern peer *peerFindByNameAndPort(const char *, unsigned short); extern peer *getDefaultParent(request_t * request); extern peer *getRoundRobinParent(request_t * request); -EVH peerClearRRLoop; +extern void peerClearRRStart(void); extern void peerClearRR(void); extern peer *getAnyParent(request_t * request); extern lookup_t peerDigestLookup(peer * p, request_t * request); diff -ruN squid-2.7.STABLE3/src/store.c squid-2.7.STABLE4/src/store.c --- squid-2.7.STABLE3/src/store.c 2008-06-19 03:08:30.000000000 +0200 +++ squid-2.7.STABLE4/src/store.c 2008-07-18 02:44:02.000000000 +0200 @@ -1,6 +1,6 @@ /* - * $Id: store.c,v 1.584.2.4 2008/06/19 01:08:30 hno Exp $ + * $Id: store.c,v 1.584.2.6 2008/07/18 00:44:02 hno Exp $ * * DEBUG: section 20 Storage Manager * AUTHOR: Harvest Derived @@ -1362,6 +1362,7 @@ errorAppendEntry(e, err); } else { EBIT_SET(e->flags, ENTRY_ABORTED); + EBIT_CLR(e->flags, ENTRY_FWD_HDR_WAIT); } e->store_status = STORE_OK; mem->object_sz = mem->inmem_hi; @@ -1612,9 +1613,9 @@ { long int i; /* Calculate size of hash table (maximum currently 64k buckets). */ - i = Config.Swap.maxSize / Config.Store.avgObjectSize; - debug(20, 1) ("Swap maxSize %lu KB, estimated %ld objects\n", - (unsigned long int) Config.Swap.maxSize, i); + i = (Config.Swap.maxSize + (Config.memMaxSize >> 10)) / Config.Store.avgObjectSize; + debug(20, 1) ("Swap maxSize %lu + %lu KB, estimated %ld objects\n", + (unsigned long int) Config.Swap.maxSize, (Config.memMaxSize >> 10), i); i /= Config.Store.objectsPerBucket; debug(20, 1) ("Target number of buckets: %ld\n", i); /* ideally the full scan period should be configurable, for the diff -ruN squid-2.7.STABLE3/src/store_client.c squid-2.7.STABLE4/src/store_client.c --- squid-2.7.STABLE3/src/store_client.c 2008-05-27 14:49:39.000000000 +0200 +++ squid-2.7.STABLE4/src/store_client.c 2008-07-21 22:43:27.000000000 +0200 @@ -1,6 +1,6 @@ /* - * $Id: store_client.c,v 1.127.2.3 2008/05/27 12:49:39 hno Exp $ + * $Id: store_client.c,v 1.127.2.4 2008/07/21 20:43:27 hno Exp $ * * DEBUG: section 20 Storage Manager Client-Side Interface * AUTHOR: Duane Wessels @@ -169,7 +169,6 @@ STCB * callback, void *data) { - assert(!EBIT_TEST(e->flags, ENTRY_ABORTED)); debug(20, 3) ("storeClientCopy: %s, seen %" PRINTF_OFF_T ", want %" PRINTF_OFF_T ", size %d, cb %p, cbdata %p\n", storeKeyText(e->hash.key), seen_offset, diff -ruN squid-2.7.STABLE3/src/structs.h squid-2.7.STABLE4/src/structs.h --- squid-2.7.STABLE3/src/structs.h 2008-06-25 01:14:18.000000000 +0200 +++ squid-2.7.STABLE4/src/structs.h 2008-07-21 22:18:50.000000000 +0200 @@ -1,6 +1,6 @@ /* - * $Id: structs.h,v 1.538.2.14 2008/06/24 23:14:18 hno Exp $ + * $Id: structs.h,v 1.538.2.15 2008/07/21 20:18:50 hno Exp $ * * * SQUID Web Proxy Cache http://www.squid-cache.org/ @@ -1233,6 +1233,7 @@ store_client *sc; /* The store_client we're using */ store_client *old_sc; /* ... for entry to be validated */ char *uri; + char *log_uri; struct { squid_off_t offset; squid_off_t size; diff -ruN squid-2.7.STABLE3/src/win32.c squid-2.7.STABLE4/src/win32.c --- squid-2.7.STABLE3/src/win32.c 2008-06-04 22:35:37.000000000 +0200 +++ squid-2.7.STABLE4/src/win32.c 2008-06-30 18:20:06.000000000 +0200 @@ -1,6 +1,6 @@ /* - * $Id: win32.c,v 1.18.2.4 2008/06/04 20:35:37 hno Exp $ + * $Id: win32.c,v 1.18.2.5 2008/06/30 16:20:06 serassio Exp $ * * Windows support * AUTHOR: Guido Serassio @@ -368,7 +368,7 @@ { DWORD status = ERROR_SUCCESS; - if (NotifyAddrChange_thread = !INVALID_HANDLE_VALUE) { + if (NotifyAddrChange_thread != INVALID_HANDLE_VALUE) { TerminateThread(NotifyAddrChange_thread, status); CloseHandle(NotifyAddrChange_thread); }