diff -ruN squid-2.5.STABLE6/CONTRIBUTORS squid-2.5.STABLE7/CONTRIBUTORS
--- squid-2.5.STABLE6/CONTRIBUTORS	Sat Jun  5 13:32:49 2004
+++ squid-2.5.STABLE7/CONTRIBUTORS	Sat Sep 25 05:56:15 2004
@@ -89,5 +89,6 @@
 	Brad Smith <brad@comstyle.com>
 	Jerry Murdock <jmurdock@itraktech.com>
 	Glen Gibb <grg@ridley.unimelb.edu.au>
+	Michael Pomraning <mjp-squidbz@securepipe.com>
 
 	Duane Wessels <wessels@squid-cache.org>
diff -ruN squid-2.5.STABLE6/ChangeLog squid-2.5.STABLE7/ChangeLog
--- squid-2.5.STABLE6/ChangeLog	Thu Jul  8 17:21:40 2004
+++ squid-2.5.STABLE7/ChangeLog	Mon Oct 11 14:11:48 2004
@@ -1,3 +1,67 @@
+Changes to squid-2.5.STABLE7 (11 Oct 2004)
+
+	- [Medium] No objects cached in ufs cache_dir type in some
+	  configurations. Issue introduced in 2.5.STABLE6 by the patch for
+	  Bug #676. (Bug #1011)
+	- [Minor] LDAP helpers update to correct LDAP connection management
+	  and add support for literal password compare instead of binding
+	- [Minor] A large number of queued DNS lookups for the same domain
+	  (Bug #852)
+	- [Cosmetic] request_header_max_size configuration partly ignored
+	  (Bug #899)
+       	- [Minor] Partial hit results in TCP_HIT, not TCP_MISS. (Bug #1001)
+        - Bug #1012: [Cosmetic] HEAD requests may return stale information
+          (Bug #1012)
+       	- [Cosmetic] Warn if cache_dir ufs can not create files. (Bug #918)
+	- [Minor] case insensitive authentication (Bug #431)
+	- [Cosmetic] Add delay pools information to active_requests. (Bug
+          #882)
+	- [Minor] Apparent memory leak in client_db (Bug #833)
+	- [Minor] NTLM authentication truncated causing failures. (Bug
+	  #1016)
+	- [Cosmetic] Grammatical corrections in squid.conf.default
+	- [Cosmetic] Unknown %X errorpage codes incorrectly quoted. (Bug
+	  #1030)
+	- [Medium] Segfaults and other strange crashes when using heap
+	  policies. (Bug #1009)
+	- [Minor] Supplementary group memberships not set (Bug #1021)
+	- [Cosmetic] ERR_TOO_BIG Portugese translation
+	- [Minor] external_acl does not handle newlines (Bug #1038)
+	- [Major] NTLM authentication denial of service when using msnt_auth
+	  or fake_auth (Bug #1045)
+	- [Medium] Memory leaks when using NTLM authentication without
+	  challenge reuse. (Bug #994)
+	- [Minor] Temporary NTLM memory leak with challenge reuse enabled
+	  (Bug #910)
+	- [Minor] assertion failed: "n_ufs_dirs <=
+	  Config.cacheSwap.n_configured". (Bug #1053)
+	- [Minor] Segfault in authenticateDigestHandleReply. (Bug #1031)
+	- [Minor] acl time fails to parse multiple time specifications
+	  (Bug #1060)
+	- [Minor] cachemgr config dumps mixed up Range and Request-Range 
+	  headers in http_header_access & replace directives. (Bug #1056)
+	- [Minor] Content-Disposition added as a well known header (Bug #961)
+	- [Cosmetic] Don't warn about arp acls not being supported on FreeBSD
+	  (Bug #1074)
+	- [Cosmetic] Limit internal send/receive buffer sizes (Bug #1075)
+	- [Medium] New acl types to match arbitrary HTTP headers. In addition
+	  the http_header_access & replace directivess now support arbitrary
+	  headers and not only the well known ones. (Bug #961)
+	- [Cosmetic] ncsa_auth now accepts Window formatted password files
+	  (Bug #1078)
+	- [Cosmetic] Support the --program-prefix/suffix options or other
+	  configure program name transforms (Bug #1019)
+	- [Minor] Fix race condition in CONNECT and also handle aborts of
+	  CONNECT requests in a more graceful manner. (Bug #859)
+	- [Minor] New balance_on_multiple_ip directive to work around certain
+	  broken load balancers and optimized ipcache on reload requests
+	  (Bug #1058)
+	- [Medium] New reply_header_max_size directive
+	  (Bug #874)
+	- [Minor] Suspected instability on aborted PUT/POST requests
+	  (Bug #1089)
+	- [Security] SNMP Denial of Service fix (CAN-2004-0918)
+
 Changes to squid-2.5.STABLE6 (9 Jul 2004)
 
 	- Bug #937: NTLM assertion error "srv->flags.reserved"
diff -ruN squid-2.5.STABLE6/Makefile.am squid-2.5.STABLE7/Makefile.am
--- squid-2.5.STABLE6/Makefile.am	Tue Feb 11 19:02:00 2003
+++ squid-2.5.STABLE7/Makefile.am	Sat Sep 25 15:37:35 2004
@@ -1,6 +1,6 @@
 ## Process this file with automake to produce Makefile.in
 #
-# $Id: Makefile.am,v 1.3.2.14 2003/02/12 02:02:00 hno Exp $
+# $Id: Makefile.am,v 1.3.2.15 2004/09/25 21:37:35 hno Exp $
 #
 
 AUTOMAKE_OPTIONS = dist-bzip2 subdir-objects 1.5
@@ -8,7 +8,7 @@
 SUBDIRS		= lib @makesnmplib@ scripts src icons errors doc helpers
 
 DISTCLEANFILES = include/stamp-h include/stamp-h[0-9]*
-DEFAULT_PINGER		= $(libexecdir)/pinger$(EXEEXT)
+DEFAULT_PINGER		= $(libexecdir)/`echo pinger | sed '$(transform);s/$$/$(EXEEXT)/'`
 
 dist-hook:
 	@ for subdir in include include/samba/nsswitch; do \
diff -ruN squid-2.5.STABLE6/Makefile.in squid-2.5.STABLE7/Makefile.in
--- squid-2.5.STABLE6/Makefile.in	Tue Jun  8 05:37:09 2004
+++ squid-2.5.STABLE7/Makefile.in	Sat Sep 25 15:37:58 2004
@@ -14,7 +14,7 @@
 @SET_MAKE@
 
 #
-# $Id: Makefile.in,v 1.6.2.20 2004/06/08 11:37:09 hno Exp $
+# $Id: Makefile.in,v 1.6.2.23 2004/09/25 21:37:58 hno Exp $
 #
 
 SHELL = @SHELL@
@@ -123,7 +123,7 @@
 SUBDIRS = lib @makesnmplib@ scripts src icons errors doc helpers
 
 DISTCLEANFILES = include/stamp-h include/stamp-h[0-9]*
-DEFAULT_PINGER = $(libexecdir)/pinger$(EXEEXT)
+DEFAULT_PINGER = $(libexecdir)/`echo pinger | sed '$(transform);s/$$/$(EXEEXT)/'`
 
 EXTRA_DIST = \
 	ChangeLog \
diff -ruN squid-2.5.STABLE6/RELEASENOTES.html squid-2.5.STABLE7/RELEASENOTES.html
--- squid-2.5.STABLE6/RELEASENOTES.html	Thu Jul  8 17:44:48 2004
+++ squid-2.5.STABLE7/RELEASENOTES.html	Mon Oct 11 14:27:12 2004
@@ -7,7 +7,7 @@
 <BODY>
 <H1>Squid 2.5 release notes</H1>
 
-<H2>Squid Developers</H2>$Id: release-2.5.html,v 1.1.2.32 2004/07/08 23:31:28 hno Exp $
+<H2>Squid Developers</H2>$Id: release-2.5.html,v 1.1.2.39 2004/10/11 20:13:43 hno Exp $
 <HR>
 <EM>This document contains the release notes for version 2.5 of Squid.
 Squid is a WWW Cache application developed by the National Laboratory
@@ -132,6 +132,8 @@
 <DT><B>minimum_retry_timeout</B><DD><P>This has been removed - it is not referenced anywhere in the source code.</P>
 <DT><B>short_icon_urls</B><DD><P>New directive to enable an alternative way of referring to icons in FTP directory listings etc.</P>
 <DT><B>acl urllogin</B><DD><P>New acl type to match the login component of Internet style URLs (protocol://user:password@host/path/to/file)</P>
+<DT><B>balance_on_multiple_ip</B><DD><P>New directive to make it possible to disable the automatic round-robin load balancing on multiple IP addresses normally done by Squid.</P>
+<DT><B>reply_header_max_size</B><DD><P>New directive limiting the size of HTTP reply headers, similar to request_header_max_size but in the reply direction (from servers to clients). Default is 20KB.</P>
 </DL>
 </P>
 
@@ -143,11 +145,12 @@
 <DT><B>Bug 
 <A HREF="http://www.squid-cache.org/bugs/show_bug.cgi?id=761">#761</A></B><DD><P>assertion failed: cbdata.c:249: "c-&gt;locks &gt; 0" when using diskd</P>
 <DT><B>Bug 
-<A HREF="http://www.squid-cache.org/bugs/show_bug.cgi?id=910">#910</A></B><DD><P>ntlm auth_user_hash_pointer memory leak if challenge reuses are enabled</P>
-
-<DT><B>Bug 
 <A HREF="http://www.squid-cache.org/bugs/show_bug.cgi?id=779">#779</A></B><DD><P>users going above their allowed IP count no longer logged in cache.log</P>
 <DT><B>Bug 
+<A HREF="http://www.squid-cache.org/bugs/show_bug.cgi?id=1059">#1059</A></B><DD><P>mime.conf and referenced icons must be within chroot</P>
+<DT><B>Bug 
+<A HREF="http://www.squid-cache.org/bugs/show_bug.cgi?id=1033">#1033</A></B><DD><P>CARP ignores cache_peer_access and cache_peer_domain</P>
+<DT><B>Bug 
 <A HREF="http://www.squid-cache.org/bugs/show_bug.cgi?id=692">#692</A></B><DD><P>tcp_outgoing_address using an ident ACL does not work</P>
 <DT><B>Bug 
 <A HREF="http://www.squid-cache.org/bugs/show_bug.cgi?id=581">#581</A></B><DD><P>acl max_user_ip and multiple authentication schemes</P>
@@ -288,6 +291,34 @@
 <LI>Processing of Vary: * and Vary on error messages corrected</LI>
 <LI>a large number of minor and cosmetic bugfixes. See the list of 
 <A HREF="http://www.squid-cache.org/Versions/v2/2.5/bugs/#STABLE5">squid-2.5.STABLE5 patches</A> and the 
+<A HREF="ChangeLog">ChangeLog</A> file for details.</LI>
+</UL>
+</P>
+
+<H2><A NAME="s9">9. Key changes squid-2.5.STABLE6 to 2.5.STABLE7:</A></H2>
+
+<P>
+<UL>
+<LI>SNMP related Denial of Service issue corrected (CAN-2004-0918)</LI>
+<LI>NTLM related bugfix noticed by the Samba group</LI>
+<LI>UFS cache_dir bugfix to issue introduced in STABLE6 causing
+no objects to get cached in some configurations.</LI>
+<LI>cache_effective_user now sets supplementary group list
+if cache_effective_group not set</LI>
+<LI>cache_effective_group now used if specified even if not started
+as root. If you do not start Squid as root you may need to remove this
+directive from your squid.conf if not set correctly.</LI>
+<LI>request_header_max_size directive corrected. You may need to increase
+this value after upgrading if set very low. The default have been increased
+from 10 KB to 20 KB which should be sufficient for most uses.</LI>
+<LI>reply_header_max_size directive added</LI>
+<LI>http_header_access &amp; replace now support arbitrary headers,
+not only the well known headers known by Squid</LI>
+<LI>new acl types req_hdr and resp_hdr to match arbitrary HTTP headers,
+useful to block certain malware/spyware etc.</LI>
+<LI>new balance_on_multiple_ip squid.conf directive</LI>
+<LI>a number of other minor and cosmetic bugfixes. See the list of 
+<A HREF="http://www.squid-cache.org/Versions/v2/2.5/bugs/#STABLE6">squid-2.5.STABLE6 patches</A> and the 
 <A HREF="ChangeLog">ChangeLog</A> file for details.</LI>
 </UL>
 </P>
diff -ruN squid-2.5.STABLE6/configure squid-2.5.STABLE7/configure
--- squid-2.5.STABLE6/configure	Thu Jul  8 17:44:39 2004
+++ squid-2.5.STABLE7/configure	Mon Oct 11 14:27:03 2004
@@ -1000,7 +1000,7 @@
 
 # Define the identity of the package.
 PACKAGE=squid
-VERSION=2.5.STABLE6
+VERSION=2.5.STABLE7
 cat >> confdefs.h <<EOF
 #define PACKAGE "$PACKAGE"
 EOF
@@ -1051,7 +1051,7 @@
 
   
 
-# From configure.in Revision: 1.251.2.59 
+# From configure.in Revision: 1.251.2.73 
 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
 echo "configure:1057: checking whether to enable maintainer-specific portions of Makefiles" >&5
     # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
@@ -1535,7 +1535,7 @@
     fi
   done
   IFS="$ac_save_ifs"
-  test -z "$ac_cv_path_PKGCONFIG" && ac_cv_path_PKGCONFIG="/usr/bin/false"
+  test -z "$ac_cv_path_PKGCONFIG" && ac_cv_path_PKGCONFIG="false"
   ;;
 esac
 fi
@@ -2275,6 +2275,8 @@
 	    ;;
 	*-solaris-*)
 	    ;;
+	*-freebsd*)
+	    ;;
 	*)
 	    echo "WARNING: ARP ACL support probably won't work on $host."
 	    sleep 10
@@ -2938,7 +2940,7 @@
 
 if test "$require_sasl" = "yes"; then
 	echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2942: checking how to run the C preprocessor" >&5
+echo "configure:2944: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -2953,13 +2955,13 @@
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 2957 "configure"
+#line 2959 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2963: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2965: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2970,13 +2972,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 2974 "configure"
+#line 2976 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2980: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2982: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2987,13 +2989,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 2991 "configure"
+#line 2993 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2997: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2999: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -3021,17 +3023,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3025: checking for $ac_hdr" >&5
+echo "configure:3027: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3030 "configure"
+#line 3032 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3035: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3037: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3165,7 +3167,7 @@
 esac
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:3169: checking how to run the C preprocessor" >&5
+echo "configure:3171: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -3180,13 +3182,13 @@
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 3184 "configure"
+#line 3186 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3190: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3192: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -3197,13 +3199,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 3201 "configure"
+#line 3203 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3207: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3209: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -3214,13 +3216,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 3218 "configure"
+#line 3220 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3224: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3226: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -3256,7 +3258,7 @@
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:3260: checking for a BSD compatible install" >&5
+echo "configure:3262: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3311,7 +3313,7 @@
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3315: checking for $ac_word" >&5
+echo "configure:3317: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3339,7 +3341,7 @@
 fi
 
 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:3343: checking whether ln -s works" >&5
+echo "configure:3345: checking whether ln -s works" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3362,7 +3364,7 @@
 # Extract the first word of "sh", so it can be a program name with args.
 set dummy sh; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3366: checking for $ac_word" >&5
+echo "configure:3368: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_SH'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3398,7 +3400,7 @@
 # Extract the first word of "false", so it can be a program name with args.
 set dummy false; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3402: checking for $ac_word" >&5
+echo "configure:3404: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_FALSE'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3434,7 +3436,7 @@
 # Extract the first word of "true", so it can be a program name with args.
 set dummy true; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3438: checking for $ac_word" >&5
+echo "configure:3440: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_TRUE'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3470,7 +3472,7 @@
 # Extract the first word of "rm", so it can be a program name with args.
 set dummy rm; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3474: checking for $ac_word" >&5
+echo "configure:3476: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_RM'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3506,7 +3508,7 @@
 # Extract the first word of "mv", so it can be a program name with args.
 set dummy mv; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3510: checking for $ac_word" >&5
+echo "configure:3512: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MV'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3542,7 +3544,7 @@
 # Extract the first word of "mkdir", so it can be a program name with args.
 set dummy mkdir; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3546: checking for $ac_word" >&5
+echo "configure:3548: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MKDIR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3578,7 +3580,7 @@
 # Extract the first word of "ln", so it can be a program name with args.
 set dummy ln; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3582: checking for $ac_word" >&5
+echo "configure:3584: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_LN'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3614,7 +3616,7 @@
 # Extract the first word of "perl", so it can be a program name with args.
 set dummy perl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3618: checking for $ac_word" >&5
+echo "configure:3620: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3650,7 +3652,7 @@
 # Extract the first word of "ar", so it can be a program name with args.
 set dummy ar; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3654: checking for $ac_word" >&5
+echo "configure:3656: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3710,12 +3712,12 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:3714: checking for $ac_hdr that defines DIR" >&5
+echo "configure:3716: checking for $ac_hdr that defines DIR" >&5
 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3719 "configure"
+#line 3721 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
@@ -3723,7 +3725,7 @@
 DIR *dirp = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:3727: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3729: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=yes"
 else
@@ -3748,7 +3750,7 @@
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
 echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:3752: checking for opendir in -ldir" >&5
+echo "configure:3754: checking for opendir in -ldir" >&5
 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3756,7 +3758,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldir  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3760 "configure"
+#line 3762 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3767,7 +3769,7 @@
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:3771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3789,7 +3791,7 @@
 
 else
 echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:3793: checking for opendir in -lx" >&5
+echo "configure:3795: checking for opendir in -lx" >&5
 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3797,7 +3799,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lx  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3801 "configure"
+#line 3803 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3808,7 +3810,7 @@
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:3812: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3831,12 +3833,12 @@
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:3835: checking for ANSI C header files" >&5
+echo "configure:3837: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3840 "configure"
+#line 3842 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -3844,7 +3846,7 @@
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3848: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3850: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3861,7 +3863,7 @@
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 3865 "configure"
+#line 3867 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -3879,7 +3881,7 @@
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 3883 "configure"
+#line 3885 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -3900,7 +3902,7 @@
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 3904 "configure"
+#line 3906 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -3911,7 +3913,7 @@
 exit (0); }
 
 EOF
-if { (eval echo configure:3915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3917: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -4018,17 +4020,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4022: checking for $ac_hdr" >&5
+echo "configure:4024: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4027 "configure"
+#line 4029 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4032: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4034: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4056,12 +4058,12 @@
 
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:4060: checking for working const" >&5
+echo "configure:4062: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4065 "configure"
+#line 4067 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -4110,7 +4112,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:4114: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4116: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -4131,14 +4133,14 @@
 fi
 
 echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:4135: checking whether byte ordering is bigendian" >&5
+echo "configure:4137: checking whether byte ordering is bigendian" >&5
 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_bigendian=unknown
 # See if sys/param.h defines the BYTE_ORDER macro.
 cat > conftest.$ac_ext <<EOF
-#line 4142 "configure"
+#line 4144 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -4149,11 +4151,11 @@
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:4153: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4155: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   # It does; now see whether it defined to BIG_ENDIAN or not.
 cat > conftest.$ac_ext <<EOF
-#line 4157 "configure"
+#line 4159 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -4164,7 +4166,7 @@
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:4168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4170: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_bigendian=yes
 else
@@ -4184,7 +4186,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 4188 "configure"
+#line 4190 "configure"
 #include "confdefs.h"
 main () {
   /* Are we little or big endian?  From Harbison&Steele.  */
@@ -4197,7 +4199,7 @@
   exit (u.c[sizeof (long) - 1] == 1);
 }
 EOF
-if { (eval echo configure:4201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4203: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_bigendian=no
 else
@@ -4222,20 +4224,20 @@
 
 
 echo $ac_n "checking if ANSI prototypes work""... $ac_c" 1>&6
-echo "configure:4226: checking if ANSI prototypes work" >&5
+echo "configure:4228: checking if ANSI prototypes work" >&5
 if eval "test \"`echo '$''{'ac_cv_have_ansi_prototypes'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 4232 "configure"
+#line 4234 "configure"
 #include "confdefs.h"
 int foo(char *); int foo (char *bar) {return 1;}
 int main() {
 foo("bar")
 ; return 0; }
 EOF
-if { (eval echo configure:4239: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4241: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_ansi_prototypes="yes"
 else
@@ -4257,13 +4259,13 @@
 fi
 
 echo $ac_n "checking for tm->tm_gmtoff""... $ac_c" 1>&6
-echo "configure:4261: checking for tm->tm_gmtoff" >&5
+echo "configure:4263: checking for tm->tm_gmtoff" >&5
 if eval "test \"`echo '$''{'ac_cv_have_tm_gmoff'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 4267 "configure"
+#line 4269 "configure"
 #include "confdefs.h"
 #include <time.h>
 #include <sys/time.h>
@@ -4272,7 +4274,7 @@
       foo.tm_gmtoff = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:4276: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4278: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_tm_gmoff="yes"
 else
@@ -4294,13 +4296,13 @@
 fi
 
 echo $ac_n "checking for struct mallinfo""... $ac_c" 1>&6
-echo "configure:4298: checking for struct mallinfo" >&5
+echo "configure:4300: checking for struct mallinfo" >&5
 if eval "test \"`echo '$''{'ac_cv_have_struct_mallinfo'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 4304 "configure"
+#line 4306 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if HAVE_MALLOC_H
@@ -4318,7 +4320,7 @@
     foo.keepcost = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:4322: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4324: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_struct_mallinfo="yes"
 else
@@ -4340,13 +4342,13 @@
 fi
 
 echo $ac_n "checking for extended mallinfo""... $ac_c" 1>&6
-echo "configure:4344: checking for extended mallinfo" >&5
+echo "configure:4346: checking for extended mallinfo" >&5
 if eval "test \"`echo '$''{'ac_cv_have_ext_mallinfo'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 4350 "configure"
+#line 4352 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <malloc.h>
@@ -4355,7 +4357,7 @@
       foo.mxfast = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:4359: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4361: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_ext_mallinfo="yes"
 else
@@ -4377,13 +4379,13 @@
 fi
 
 echo $ac_n "checking for struct rusage""... $ac_c" 1>&6
-echo "configure:4381: checking for struct rusage" >&5
+echo "configure:4383: checking for struct rusage" >&5
 if eval "test \"`echo '$''{'ac_cv_have_struct_rusage'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 4387 "configure"
+#line 4389 "configure"
 #include "confdefs.h"
 
 #if HAVE_SYS_TIME_H
@@ -4396,7 +4398,7 @@
 struct rusage R;
 ; return 0; }
 EOF
-if { (eval echo configure:4400: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4402: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_struct_rusage="yes"
 else
@@ -4418,13 +4420,13 @@
 fi
 
 echo $ac_n "checking for ip->ip_hl""... $ac_c" 1>&6
-echo "configure:4422: checking for ip->ip_hl" >&5
+echo "configure:4424: checking for ip->ip_hl" >&5
 if eval "test \"`echo '$''{'ac_cv_have_ip_hl'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 4428 "configure"
+#line 4430 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <netinet/in.h>
@@ -4443,7 +4445,7 @@
       ip.ip_hl= 0;
 ; return 0; }
 EOF
-if { (eval echo configure:4447: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4449: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_ip_hl="yes"
 else
@@ -4465,7 +4467,7 @@
 fi
 
 echo $ac_n "checking size of void *""... $ac_c" 1>&6
-echo "configure:4469: checking size of void *" >&5
+echo "configure:4471: checking size of void *" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_void_p'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4473,7 +4475,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 4477 "configure"
+#line 4479 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4484,7 +4486,7 @@
   exit(0);
 }
 EOF
-if { (eval echo configure:4488: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4490: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_void_p=`cat conftestval`
 else
@@ -4504,7 +4506,7 @@
 
 
 echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:4508: checking size of short" >&5
+echo "configure:4510: checking size of short" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4512,7 +4514,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 4516 "configure"
+#line 4518 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4523,7 +4525,7 @@
   exit(0);
 }
 EOF
-if { (eval echo configure:4527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4529: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_short=`cat conftestval`
 else
@@ -4543,7 +4545,7 @@
 
 
 echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:4547: checking size of int" >&5
+echo "configure:4549: checking size of int" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4551,7 +4553,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 4555 "configure"
+#line 4557 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4562,7 +4564,7 @@
   exit(0);
 }
 EOF
-if { (eval echo configure:4566: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4568: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_int=`cat conftestval`
 else
@@ -4582,7 +4584,7 @@
 
 
 echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:4586: checking size of long" >&5
+echo "configure:4588: checking size of long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4590,7 +4592,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 4594 "configure"
+#line 4596 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4601,7 +4603,7 @@
   exit(0);
 }
 EOF
-if { (eval echo configure:4605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4607: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -4621,7 +4623,7 @@
 
 
 echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:4625: checking size of long long" >&5
+echo "configure:4627: checking size of long long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4629,7 +4631,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 4633 "configure"
+#line 4635 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4640,7 +4642,7 @@
   exit(0);
 }
 EOF
-if { (eval echo configure:4644: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4646: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long_long=`cat conftestval`
 else
@@ -4660,7 +4662,7 @@
 
 
 echo $ac_n "checking size of __int64""... $ac_c" 1>&6
-echo "configure:4664: checking size of __int64" >&5
+echo "configure:4666: checking size of __int64" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof___int64'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4668,7 +4670,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 4672 "configure"
+#line 4674 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4694,7 +4696,7 @@
 }
 
 EOF
-if { (eval echo configure:4698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4700: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof___int64=`cat conftestval`
 else
@@ -4714,7 +4716,7 @@
 
 
 echo $ac_n "checking size of int16_t""... $ac_c" 1>&6
-echo "configure:4718: checking size of int16_t" >&5
+echo "configure:4720: checking size of int16_t" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_int16_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4722,7 +4724,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 4726 "configure"
+#line 4728 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4748,7 +4750,7 @@
 }
 
 EOF
-if { (eval echo configure:4752: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4754: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_int16_t=`cat conftestval`
 else
@@ -4768,7 +4770,7 @@
 
 
 echo $ac_n "checking size of uint16_t""... $ac_c" 1>&6
-echo "configure:4772: checking size of uint16_t" >&5
+echo "configure:4774: checking size of uint16_t" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_uint16_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4776,7 +4778,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 4780 "configure"
+#line 4782 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4802,7 +4804,7 @@
 }
 
 EOF
-if { (eval echo configure:4806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_uint16_t=`cat conftestval`
 else
@@ -4822,7 +4824,7 @@
 
 
 echo $ac_n "checking size of u_int16_t""... $ac_c" 1>&6
-echo "configure:4826: checking size of u_int16_t" >&5
+echo "configure:4828: checking size of u_int16_t" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_u_int16_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4830,7 +4832,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 4834 "configure"
+#line 4836 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4856,7 +4858,7 @@
 }
 
 EOF
-if { (eval echo configure:4860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4862: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_u_int16_t=`cat conftestval`
 else
@@ -4876,7 +4878,7 @@
 
 
 echo $ac_n "checking size of int32_t""... $ac_c" 1>&6
-echo "configure:4880: checking size of int32_t" >&5
+echo "configure:4882: checking size of int32_t" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_int32_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4884,7 +4886,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 4888 "configure"
+#line 4890 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4910,7 +4912,7 @@
 }
 
 EOF
-if { (eval echo configure:4914: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4916: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_int32_t=`cat conftestval`
 else
@@ -4930,7 +4932,7 @@
 
 
 echo $ac_n "checking size of uint32_t""... $ac_c" 1>&6
-echo "configure:4934: checking size of uint32_t" >&5
+echo "configure:4936: checking size of uint32_t" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_uint32_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4938,7 +4940,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 4942 "configure"
+#line 4944 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4964,7 +4966,7 @@
 }
 
 EOF
-if { (eval echo configure:4968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4970: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_uint32_t=`cat conftestval`
 else
@@ -4984,7 +4986,7 @@
 
 
 echo $ac_n "checking size of u_int32_t""... $ac_c" 1>&6
-echo "configure:4988: checking size of u_int32_t" >&5
+echo "configure:4990: checking size of u_int32_t" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_u_int32_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4992,7 +4994,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 4996 "configure"
+#line 4998 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -5018,7 +5020,7 @@
 }
 
 EOF
-if { (eval echo configure:5022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_u_int32_t=`cat conftestval`
 else
@@ -5038,7 +5040,7 @@
 
 
 echo $ac_n "checking size of int64_t""... $ac_c" 1>&6
-echo "configure:5042: checking size of int64_t" >&5
+echo "configure:5044: checking size of int64_t" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_int64_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5046,7 +5048,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 5050 "configure"
+#line 5052 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -5072,7 +5074,7 @@
 }
 
 EOF
-if { (eval echo configure:5076: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5078: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_int64_t=`cat conftestval`
 else
@@ -5092,7 +5094,7 @@
 
 
 echo $ac_n "checking size of uint64_t""... $ac_c" 1>&6
-echo "configure:5096: checking size of uint64_t" >&5
+echo "configure:5098: checking size of uint64_t" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_uint64_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5100,7 +5102,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 5104 "configure"
+#line 5106 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -5126,7 +5128,7 @@
 }
 
 EOF
-if { (eval echo configure:5130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_uint64_t=`cat conftestval`
 else
@@ -5146,7 +5148,7 @@
 
 
 echo $ac_n "checking size of u_int64_t""... $ac_c" 1>&6
-echo "configure:5150: checking size of u_int64_t" >&5
+echo "configure:5152: checking size of u_int64_t" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_u_int64_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5154,7 +5156,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 5158 "configure"
+#line 5160 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -5180,7 +5182,7 @@
 }
 
 EOF
-if { (eval echo configure:5184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_u_int64_t=`cat conftestval`
 else
@@ -5202,12 +5204,12 @@
 
 if test "x$ac_cv_sizeof_short" = "x2"; then
 	echo $ac_n "checking for int16_t""... $ac_c" 1>&6
-echo "configure:5206: checking for int16_t" >&5
+echo "configure:5208: checking for int16_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_int16_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5211 "configure"
+#line 5213 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5251,12 +5253,12 @@
 
 elif test "x$ac_cv_sizeof_int" = "x2"; then
 	echo $ac_n "checking for int16_t""... $ac_c" 1>&6
-echo "configure:5255: checking for int16_t" >&5
+echo "configure:5257: checking for int16_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_int16_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5260 "configure"
+#line 5262 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5301,12 +5303,12 @@
 fi
 if test "x$ac_cv_sizeof_uint16_t" = "x2"; then
 	echo $ac_n "checking for u_int16_t""... $ac_c" 1>&6
-echo "configure:5305: checking for u_int16_t" >&5
+echo "configure:5307: checking for u_int16_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_u_int16_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5310 "configure"
+#line 5312 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5350,12 +5352,12 @@
 
 elif test "x$ac_cv_sizeof_short" = "x2"; then
 	echo $ac_n "checking for u_int16_t""... $ac_c" 1>&6
-echo "configure:5354: checking for u_int16_t" >&5
+echo "configure:5356: checking for u_int16_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_u_int16_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5359 "configure"
+#line 5361 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5399,12 +5401,12 @@
 
 elif test "x$ac_cv_sizeof_int" = "x2"; then
 	echo $ac_n "checking for u_int16_t""... $ac_c" 1>&6
-echo "configure:5403: checking for u_int16_t" >&5
+echo "configure:5405: checking for u_int16_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_u_int16_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5408 "configure"
+#line 5410 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5449,12 +5451,12 @@
 fi
 if test "x$ac_cv_sizeof_int" = "x4"; then
 	echo $ac_n "checking for int32_t""... $ac_c" 1>&6
-echo "configure:5453: checking for int32_t" >&5
+echo "configure:5455: checking for int32_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_int32_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5458 "configure"
+#line 5460 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5498,12 +5500,12 @@
 
 elif "x$ac_cv_sizeof_long" = "x4"; then
 	echo $ac_n "checking for int32_t""... $ac_c" 1>&6
-echo "configure:5502: checking for int32_t" >&5
+echo "configure:5504: checking for int32_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_int32_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5507 "configure"
+#line 5509 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5548,12 +5550,12 @@
 fi
 if test "x$ac_cv_sizeof_uint32_t" = "x4"; then
 	echo $ac_n "checking for u_int32_t""... $ac_c" 1>&6
-echo "configure:5552: checking for u_int32_t" >&5
+echo "configure:5554: checking for u_int32_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_u_int32_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5557 "configure"
+#line 5559 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5597,12 +5599,12 @@
 
 elif test "x$ac_cv_sizeof_int" = "x4"; then
 	echo $ac_n "checking for u_int32_t""... $ac_c" 1>&6
-echo "configure:5601: checking for u_int32_t" >&5
+echo "configure:5603: checking for u_int32_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_u_int32_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5606 "configure"
+#line 5608 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5646,12 +5648,12 @@
 
 elif test "x$ac_cv_sizeof_long" = "x4"; then
 	echo $ac_n "checking for u_int32_t""... $ac_c" 1>&6
-echo "configure:5650: checking for u_int32_t" >&5
+echo "configure:5652: checking for u_int32_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_u_int32_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5655 "configure"
+#line 5657 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5696,12 +5698,12 @@
 fi
 if test "x$ac_cv_sizeof_long" = "x8"; then
 	echo $ac_n "checking for int64_t""... $ac_c" 1>&6
-echo "configure:5700: checking for int64_t" >&5
+echo "configure:5702: checking for int64_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_int64_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5705 "configure"
+#line 5707 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5745,12 +5747,12 @@
 
 elif test "x$ac_cv_sizeof_long_long" = "x8"; then
 	echo $ac_n "checking for int64_t""... $ac_c" 1>&6
-echo "configure:5749: checking for int64_t" >&5
+echo "configure:5751: checking for int64_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_int64_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5754 "configure"
+#line 5756 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5794,12 +5796,12 @@
 
 elif test "x$ac_cv_sizeof___int64" = "x8"; then
 	echo $ac_n "checking for int64_t""... $ac_c" 1>&6
-echo "configure:5798: checking for int64_t" >&5
+echo "configure:5800: checking for int64_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_int64_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5803 "configure"
+#line 5805 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5844,12 +5846,12 @@
 fi
 if test "x$ac_cv_sizeof_uint64_t" = "x8"; then
 	echo $ac_n "checking for u_int64_t""... $ac_c" 1>&6
-echo "configure:5848: checking for u_int64_t" >&5
+echo "configure:5850: checking for u_int64_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_u_int64_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5853 "configure"
+#line 5855 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5893,12 +5895,12 @@
 
 elif test "x$ac_cv_sizeof_long" = "x8"; then
 	echo $ac_n "checking for u_int64_t""... $ac_c" 1>&6
-echo "configure:5897: checking for u_int64_t" >&5
+echo "configure:5899: checking for u_int64_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_u_int64_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5902 "configure"
+#line 5904 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5942,12 +5944,12 @@
 
 elif test "x$ac_cv_sizeof_long_long" = "x8"; then
 	echo $ac_n "checking for u_int64_t""... $ac_c" 1>&6
-echo "configure:5946: checking for u_int64_t" >&5
+echo "configure:5948: checking for u_int64_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_u_int64_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5951 "configure"
+#line 5953 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -5991,12 +5993,12 @@
 
 elif test "x$ac_cv_sizeof___int64" = "x8"; then
 	echo $ac_n "checking for int64_t""... $ac_c" 1>&6
-echo "configure:5995: checking for int64_t" >&5
+echo "configure:5997: checking for int64_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_int64_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6000 "configure"
+#line 6002 "configure"
 #include "confdefs.h"
 
 /* What a mess.. many systems have added the (now standard) bit types
@@ -6041,12 +6043,12 @@
 fi
 
 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:6045: checking for pid_t" >&5
+echo "configure:6047: checking for pid_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6050 "configure"
+#line 6052 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -6074,12 +6076,12 @@
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:6078: checking for size_t" >&5
+echo "configure:6080: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6083 "configure"
+#line 6085 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -6107,12 +6109,12 @@
 fi
 
 echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:6111: checking for ssize_t" >&5
+echo "configure:6113: checking for ssize_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6116 "configure"
+#line 6118 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -6140,12 +6142,12 @@
 fi
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:6144: checking for off_t" >&5
+echo "configure:6146: checking for off_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6149 "configure"
+#line 6151 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -6173,12 +6175,12 @@
 fi
 
 echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:6177: checking for mode_t" >&5
+echo "configure:6179: checking for mode_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6182 "configure"
+#line 6184 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -6206,12 +6208,12 @@
 fi
 
 echo $ac_n "checking for fd_mask""... $ac_c" 1>&6
-echo "configure:6210: checking for fd_mask" >&5
+echo "configure:6212: checking for fd_mask" >&5
 if eval "test \"`echo '$''{'ac_cv_type_fd_mask'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6215 "configure"
+#line 6217 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -6240,7 +6242,7 @@
 
 
 echo $ac_n "checking size of off_t""... $ac_c" 1>&6
-echo "configure:6244: checking size of off_t" >&5
+echo "configure:6246: checking size of off_t" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_off_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6248,7 +6250,7 @@
   ac_cv_sizeof_off_t=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 6252 "configure"
+#line 6254 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -6274,7 +6276,7 @@
 }
 
 EOF
-if { (eval echo configure:6278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_off_t=`cat conftestval`
 else
@@ -6294,7 +6296,7 @@
 
 
 echo $ac_n "checking size of size_t""... $ac_c" 1>&6
-echo "configure:6298: checking size of size_t" >&5
+echo "configure:6300: checking size of size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6302,7 +6304,7 @@
   ac_cv_sizeof_size_t=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 6306 "configure"
+#line 6308 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -6328,7 +6330,7 @@
 }
 
 EOF
-if { (eval echo configure:6332: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_size_t=`cat conftestval`
 else
@@ -6351,19 +6353,19 @@
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:6355: checking for working alloca.h" >&5
+echo "configure:6357: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6360 "configure"
+#line 6362 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:6367: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -6384,12 +6386,12 @@
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:6388: checking for alloca" >&5
+echo "configure:6390: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6393 "configure"
+#line 6395 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -6417,7 +6419,7 @@
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:6421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -6449,12 +6451,12 @@
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:6453: checking whether alloca needs Cray hooks" >&5
+echo "configure:6455: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6458 "configure"
+#line 6460 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -6479,12 +6481,12 @@
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6483: checking for $ac_func" >&5
+echo "configure:6485: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6488 "configure"
+#line 6490 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -6507,7 +6509,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:6511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -6534,7 +6536,7 @@
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:6538: checking stack direction for C alloca" >&5
+echo "configure:6540: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6542,7 +6544,7 @@
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 6546 "configure"
+#line 6548 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -6561,7 +6563,7 @@
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:6565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -6585,13 +6587,13 @@
 
 
 echo $ac_n "checking for socklen_t""... $ac_c" 1>&6
-echo "configure:6589: checking for socklen_t" >&5
+echo "configure:6591: checking for socklen_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 6595 "configure"
+#line 6597 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -6622,13 +6624,13 @@
 fi
 
 echo $ac_n "checking for mtyp_t""... $ac_c" 1>&6
-echo "configure:6626: checking for mtyp_t" >&5
+echo "configure:6628: checking for mtyp_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_mtyp_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 6632 "configure"
+#line 6634 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/ipc.h>
@@ -6656,7 +6658,7 @@
  fi
 
 echo $ac_n "checking for main in -lnsl""... $ac_c" 1>&6
-echo "configure:6660: checking for main in -lnsl" >&5
+echo "configure:6662: checking for main in -lnsl" >&5
 ac_lib_var=`echo nsl'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6664,14 +6666,14 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6668 "configure"
+#line 6670 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6699,7 +6701,7 @@
 fi
 
 echo $ac_n "checking for main in -lsocket""... $ac_c" 1>&6
-echo "configure:6703: checking for main in -lsocket" >&5
+echo "configure:6705: checking for main in -lsocket" >&5
 ac_lib_var=`echo socket'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6707,14 +6709,14 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6711 "configure"
+#line 6713 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6718: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6743,13 +6745,13 @@
 
 
 echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6
-echo "configure:6747: checking for unix domain sockets" >&5
+echo "configure:6749: checking for unix domain sockets" >&5
 if eval "test \"`echo '$''{'squid_cv_unixsocket'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 6753 "configure"
+#line 6755 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -6764,7 +6766,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:6768: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6770: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   squid_cv_unixsocket=yes
 else
@@ -6788,7 +6790,7 @@
   echo "skipping libmalloc check (--enable-dlmalloc specified)"
 else
   echo $ac_n "checking for main in -lgnumalloc""... $ac_c" 1>&6
-echo "configure:6792: checking for main in -lgnumalloc" >&5
+echo "configure:6794: checking for main in -lgnumalloc" >&5
 ac_lib_var=`echo gnumalloc'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6796,14 +6798,14 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lgnumalloc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6800 "configure"
+#line 6802 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6807: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6846,7 +6848,7 @@
 			*)
   
 				echo $ac_n "checking for main in -lmalloc""... $ac_c" 1>&6
-echo "configure:6850: checking for main in -lmalloc" >&5
+echo "configure:6852: checking for main in -lmalloc" >&5
 ac_lib_var=`echo malloc'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6854,14 +6856,14 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lmalloc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6858 "configure"
+#line 6860 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6894,7 +6896,7 @@
 fi
 
 echo $ac_n "checking for main in -lbsd""... $ac_c" 1>&6
-echo "configure:6898: checking for main in -lbsd" >&5
+echo "configure:6900: checking for main in -lbsd" >&5
 ac_lib_var=`echo bsd'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6902,14 +6904,14 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lbsd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6906 "configure"
+#line 6908 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6937,7 +6939,7 @@
 fi
 
 echo $ac_n "checking for main in -lregex""... $ac_c" 1>&6
-echo "configure:6941: checking for main in -lregex" >&5
+echo "configure:6943: checking for main in -lregex" >&5
 ac_lib_var=`echo regex'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6945,14 +6947,14 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lregex  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6949 "configure"
+#line 6951 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6956: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6973,7 +6975,7 @@
 fi
 
 echo $ac_n "checking for gethostbyname in -lbind""... $ac_c" 1>&6
-echo "configure:6977: checking for gethostbyname in -lbind" >&5
+echo "configure:6979: checking for gethostbyname in -lbind" >&5
 ac_lib_var=`echo bind'_'gethostbyname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6981,7 +6983,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6985 "configure"
+#line 6987 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6992,7 +6994,7 @@
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:6996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7026,7 +7028,7 @@
 		;;
 	*)
 		echo $ac_n "checking for inet_aton in -lresolv""... $ac_c" 1>&6
-echo "configure:7030: checking for inet_aton in -lresolv" >&5
+echo "configure:7032: checking for inet_aton in -lresolv" >&5
 ac_lib_var=`echo resolv'_'inet_aton | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7034,7 +7036,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7038 "configure"
+#line 7040 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7045,7 +7047,7 @@
 inet_aton()
 ; return 0; }
 EOF
-if { (eval echo configure:7049: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7051: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7061,7 +7063,7 @@
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for inet_aton in -l44bsd""... $ac_c" 1>&6
-echo "configure:7065: checking for inet_aton in -l44bsd" >&5
+echo "configure:7067: checking for inet_aton in -l44bsd" >&5
 ac_lib_var=`echo 44bsd'_'inet_aton | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7069,7 +7071,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-l44bsd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7073 "configure"
+#line 7075 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7080,7 +7082,7 @@
 inet_aton()
 ; return 0; }
 EOF
-if { (eval echo configure:7084: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7086: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7112,7 +7114,7 @@
 fi
 
 		echo $ac_n "checking for main in -lresolv""... $ac_c" 1>&6
-echo "configure:7116: checking for main in -lresolv" >&5
+echo "configure:7118: checking for main in -lresolv" >&5
 ac_lib_var=`echo resolv'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7120,14 +7122,14 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7124 "configure"
+#line 7126 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:7131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7158,7 +7160,7 @@
     esac
 fi
 echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:7162: checking for main in -lm" >&5
+echo "configure:7164: checking for main in -lm" >&5
 ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7166,14 +7168,14 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7170 "configure"
+#line 7172 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:7177: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7202,7 +7204,7 @@
 
 
 echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:7206: checking for crypt in -lcrypt" >&5
+echo "configure:7208: checking for crypt in -lcrypt" >&5
 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7210,7 +7212,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lcrypt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7214 "configure"
+#line 7216 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7221,7 +7223,7 @@
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:7225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7227: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7245,7 +7247,7 @@
 
 if test "$with_dl" = "yes"; then
     echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:7249: checking for dlopen in -ldl" >&5
+echo "configure:7251: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7253,7 +7255,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7257 "configure"
+#line 7259 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7264,7 +7266,7 @@
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:7268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7312,7 +7314,7 @@
     ;;
     esac
     echo $ac_n "checking for main in -lpthread""... $ac_c" 1>&6
-echo "configure:7316: checking for main in -lpthread" >&5
+echo "configure:7318: checking for main in -lpthread" >&5
 ac_lib_var=`echo pthread'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7320,14 +7322,14 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lpthread  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7324 "configure"
+#line 7326 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:7331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7358,7 +7360,7 @@
 
 if test "$with_aio" = "yes"; then
     echo $ac_n "checking for aio_read in -lrt""... $ac_c" 1>&6
-echo "configure:7362: checking for aio_read in -lrt" >&5
+echo "configure:7364: checking for aio_read in -lrt" >&5
 ac_lib_var=`echo rt'_'aio_read | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7366,7 +7368,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lrt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7370 "configure"
+#line 7372 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7377,7 +7379,7 @@
 aio_read()
 ; return 0; }
 EOF
-if { (eval echo configure:7381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7383: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7409,7 +7411,7 @@
 case "$host" in
 	*-pc-sco3.2*)
 		echo $ac_n "checking for strftime in -lintl""... $ac_c" 1>&6
-echo "configure:7413: checking for strftime in -lintl" >&5
+echo "configure:7415: checking for strftime in -lintl" >&5
 ac_lib_var=`echo intl'_'strftime | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7417,7 +7419,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7421 "configure"
+#line 7423 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7428,7 +7430,7 @@
 strftime()
 ; return 0; }
 EOF
-if { (eval echo configure:7432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7622,12 +7624,12 @@
 
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7626: checking for $ac_func" >&5
+echo "configure:7628: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7631 "configure"
+#line 7633 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -7650,7 +7652,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:7654: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7656: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -7676,7 +7678,7 @@
 
 
 echo $ac_n "checking if setresuid is implemented""... $ac_c" 1>&6
-echo "configure:7680: checking if setresuid is implemented" >&5
+echo "configure:7682: checking if setresuid is implemented" >&5
 if eval "test \"`echo '$''{'ac_cv_func_setresuid'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7684,7 +7686,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 7688 "configure"
+#line 7690 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -7697,7 +7699,7 @@
   }
   
 EOF
-if { (eval echo configure:7701: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_setresuid="yes"
 else
@@ -7742,7 +7744,7 @@
 fi
 
 echo $ac_n "checking if va_copy is implemented""... $ac_c" 1>&6
-echo "configure:7746: checking if va_copy is implemented" >&5
+echo "configure:7748: checking if va_copy is implemented" >&5
 if eval "test \"`echo '$''{'ac_cv_func_va_copy'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7750,7 +7752,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 7754 "configure"
+#line 7756 "configure"
 #include "confdefs.h"
 
       #include <stdarg.h>
@@ -7768,7 +7770,7 @@
       }
       
 EOF
-if { (eval echo configure:7772: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_va_copy="yes"
 else
@@ -7792,7 +7794,7 @@
 fi
 
 echo $ac_n "checking if __va_copy is implemented""... $ac_c" 1>&6
-echo "configure:7796: checking if __va_copy is implemented" >&5
+echo "configure:7798: checking if __va_copy is implemented" >&5
 if eval "test \"`echo '$''{'ac_cv_func___va_copy'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7800,7 +7802,7 @@
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 7804 "configure"
+#line 7806 "configure"
 #include "confdefs.h"
 
       #include <stdarg.h>
@@ -7818,7 +7820,7 @@
       }
       
 EOF
-if { (eval echo configure:7822: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func___va_copy="yes"
 else
@@ -7843,7 +7845,7 @@
 
 if test "$IPF_TRANSPARENT" ; then
     echo $ac_n "checking if IP-Filter header files are installed""... $ac_c" 1>&6
-echo "configure:7847: checking if IP-Filter header files are installed" >&5
+echo "configure:7849: checking if IP-Filter header files are installed" >&5
     # hold on to your hats...
     if test "$ac_cv_header_ip_compat_h" = "yes" ||
         test "$ac_cv_header_ip_fil_compat_h" = "yes" ||
@@ -7884,7 +7886,7 @@
 
 if test "$PF_TRANSPARENT" ; then
     echo $ac_n "checking if PF header file is installed""... $ac_c" 1>&6
-echo "configure:7888: checking if PF header file is installed" >&5
+echo "configure:7890: checking if PF header file is installed" >&5
     # hold on to your hats...
     if test "$ac_cv_header_net_pfvar_h" = "yes"; then
         PF_TRANSPARENT="yes"
@@ -7909,7 +7911,7 @@
 
 if test "$LINUX_NETFILTER" ; then
     echo $ac_n "checking if Linux 2.4 kernel header files are installed""... $ac_c" 1>&6
-echo "configure:7913: checking if Linux 2.4 kernel header files are installed" >&5
+echo "configure:7915: checking if Linux 2.4 kernel header files are installed" >&5
     # hold on to your hats...
     if test "$ac_cv_header_linux_netfilter_ipv4_h" = "yes"; then
         LINUX_NETFILTER="yes"
@@ -7943,13 +7945,13 @@
     esac
 fi
 echo $ac_n "checking if GNUregex needs to be compiled""... $ac_c" 1>&6
-echo "configure:7947: checking if GNUregex needs to be compiled" >&5
+echo "configure:7949: checking if GNUregex needs to be compiled" >&5
 if test -z "$USE_GNUREGEX"; then
 if test "$ac_cv_func_regcomp" = "no" || test "$USE_GNUREGEX" = "yes" ; then
 	USE_GNUREGEX="yes"
 else
 	cat > conftest.$ac_ext <<EOF
-#line 7953 "configure"
+#line 7955 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <regex.h>
@@ -7957,7 +7959,7 @@
 regex_t t; regcomp(&t,"",0);
 ; return 0; }
 EOF
-if { (eval echo configure:7961: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7963: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   USE_GNUREGEX="no"
 else
@@ -7985,15 +7987,16 @@
 	drand48 \
 	tempnam \
 	strerror \
+	initgroups
 
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7992: checking for $ac_func" >&5
+echo "configure:7995: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7997 "configure"
+#line 8000 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -8016,7 +8019,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:8020: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8023: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -8044,12 +8047,12 @@
 
 
 echo $ac_n "checking Default FD_SETSIZE value""... $ac_c" 1>&6
-echo "configure:8048: checking Default FD_SETSIZE value" >&5
+echo "configure:8051: checking Default FD_SETSIZE value" >&5
 if test "$cross_compiling" = yes; then
   DEFAULT_FD_SETSIZE=256
 else
   cat > conftest.$ac_ext <<EOF
-#line 8053 "configure"
+#line 8056 "configure"
 #include "confdefs.h"
 
 #if HAVE_STDIO_H
@@ -8074,7 +8077,7 @@
 }
 
 EOF
-if { (eval echo configure:8078: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8081: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   DEFAULT_FD_SETSIZE=`cat conftestval`
 else
@@ -8093,7 +8096,7 @@
 
 
 echo $ac_n "checking Maximum number of filedescriptors we can open""... $ac_c" 1>&6
-echo "configure:8097: checking Maximum number of filedescriptors we can open" >&5
+echo "configure:8100: checking Maximum number of filedescriptors we can open" >&5
 TLDFLAGS="$LDFLAGS"
 case $host in
 i386-unknown-freebsd*)
@@ -8105,7 +8108,7 @@
   SQUID_MAXFD=256
 else
   cat > conftest.$ac_ext <<EOF
-#line 8109 "configure"
+#line 8112 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -8165,7 +8168,7 @@
 }
 
 EOF
-if { (eval echo configure:8169: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8172: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   SQUID_MAXFD=`cat conftestval`
 else
@@ -8192,12 +8195,12 @@
 LDFLAGS="$TLDFLAGS"
 
 echo $ac_n "checking Default UDP send buffer size""... $ac_c" 1>&6
-echo "configure:8196: checking Default UDP send buffer size" >&5
+echo "configure:8199: checking Default UDP send buffer size" >&5
 if test "$cross_compiling" = yes; then
   SQUID_UDP_SO_SNDBUF=16384
 else
   cat > conftest.$ac_ext <<EOF
-#line 8201 "configure"
+#line 8204 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -8218,7 +8221,7 @@
 }
 
 EOF
-if { (eval echo configure:8222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   SQUID_UDP_SO_SNDBUF=`cat conftestval`
 else
@@ -8237,12 +8240,12 @@
 
 
 echo $ac_n "checking Default UDP receive buffer size""... $ac_c" 1>&6
-echo "configure:8241: checking Default UDP receive buffer size" >&5
+echo "configure:8244: checking Default UDP receive buffer size" >&5
 if test "$cross_compiling" = yes; then
   SQUID_UDP_SO_RCVBUF=16384
 else
   cat > conftest.$ac_ext <<EOF
-#line 8246 "configure"
+#line 8249 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -8263,7 +8266,7 @@
 }
 
 EOF
-if { (eval echo configure:8267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   SQUID_UDP_SO_RCVBUF=`cat conftestval`
 else
@@ -8282,12 +8285,12 @@
 
 
 echo $ac_n "checking Default TCP send buffer size""... $ac_c" 1>&6
-echo "configure:8286: checking Default TCP send buffer size" >&5
+echo "configure:8289: checking Default TCP send buffer size" >&5
 if test "$cross_compiling" = yes; then
   SQUID_TCP_SO_SNDBUF=16384
 else
   cat > conftest.$ac_ext <<EOF
-#line 8291 "configure"
+#line 8294 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -8308,7 +8311,7 @@
 }
 
 EOF
-if { (eval echo configure:8312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   SQUID_TCP_SO_SNDBUF=`cat conftestval`
 else
@@ -8321,18 +8324,22 @@
 fi
 
 echo "$ac_t""$SQUID_TCP_SO_SNDBUF" 1>&6
+if test $SQUID_TCP_SO_SNDBUF -gt 32768; then
+    echo "Limiting send buffer size to 32K"
+    SQUID_TCP_SO_SNDBUF=32768
+fi
 cat >> confdefs.h <<EOF
 #define SQUID_TCP_SO_SNDBUF $SQUID_TCP_SO_SNDBUF
 EOF
 
 
 echo $ac_n "checking Default TCP receive buffer size""... $ac_c" 1>&6
-echo "configure:8331: checking Default TCP receive buffer size" >&5
+echo "configure:8338: checking Default TCP receive buffer size" >&5
 if test "$cross_compiling" = yes; then
   SQUID_TCP_SO_RCVBUF=16384
 else
   cat > conftest.$ac_ext <<EOF
-#line 8336 "configure"
+#line 8343 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -8353,7 +8360,7 @@
 }
 
 EOF
-if { (eval echo configure:8357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   SQUID_TCP_SO_RCVBUF=`cat conftestval`
 else
@@ -8366,25 +8373,28 @@
 fi
 
 echo "$ac_t""$SQUID_TCP_SO_RCVBUF" 1>&6
+if test $SQUID_TCP_SO_RCVBUF -gt 65535; then
+    echo "Limiting receive buffer size to 64K"
+    SQUID_TCP_SO_RCVBUF=65535
+fi
 cat >> confdefs.h <<EOF
 #define SQUID_TCP_SO_RCVBUF $SQUID_TCP_SO_RCVBUF
 EOF
 
-
 echo $ac_n "checking if sys_errlist is already defined""... $ac_c" 1>&6
-echo "configure:8376: checking if sys_errlist is already defined" >&5
+echo "configure:8386: checking if sys_errlist is already defined" >&5
 if eval "test \"`echo '$''{'ac_cv_needs_sys_errlist'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8381 "configure"
+#line 8391 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
 char *s = sys_errlist;
 ; return 0; }
 EOF
-if { (eval echo configure:8388: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8398: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_needs_sys_errlist="no"
 else
@@ -8406,16 +8416,16 @@
 fi
 
 echo $ac_n "checking for libresolv _dns_ttl_ hack""... $ac_c" 1>&6
-echo "configure:8410: checking for libresolv _dns_ttl_ hack" >&5
+echo "configure:8420: checking for libresolv _dns_ttl_ hack" >&5
 cat > conftest.$ac_ext <<EOF
-#line 8412 "configure"
+#line 8422 "configure"
 #include "confdefs.h"
 extern int _dns_ttl_;
 int main() {
 return _dns_ttl_;
 ; return 0; }
 EOF
-if { (eval echo configure:8419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8429: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 cat >> confdefs.h <<\EOF
@@ -8431,12 +8441,12 @@
 rm -f conftest*
 
 echo $ac_n "checking if inet_ntoa() actually works""... $ac_c" 1>&6
-echo "configure:8435: checking if inet_ntoa() actually works" >&5
+echo "configure:8445: checking if inet_ntoa() actually works" >&5
 if test "$cross_compiling" = yes; then
   INET_NTOA_RESULT="broken"
 else
   cat > conftest.$ac_ext <<EOF
-#line 8440 "configure"
+#line 8450 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -8455,7 +8465,7 @@
 }
 
 EOF
-if { (eval echo configure:8459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   INET_NTOA_RESULT=`cat conftestval`
 else
@@ -8481,9 +8491,9 @@
 
 if test "$ac_cv_header_sys_statvfs_h" = "yes" ; then
 echo $ac_n "checking for working statvfs() interface""... $ac_c" 1>&6
-echo "configure:8485: checking for working statvfs() interface" >&5
+echo "configure:8495: checking for working statvfs() interface" >&5
 cat > conftest.$ac_ext <<EOF
-#line 8487 "configure"
+#line 8497 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -8500,7 +8510,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:8504: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8514: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_func_statvfs=yes
 else
@@ -8520,12 +8530,12 @@
 fi
 
 echo $ac_n "checking for _res.nsaddr_list""... $ac_c" 1>&6
-echo "configure:8524: checking for _res.nsaddr_list" >&5
+echo "configure:8534: checking for _res.nsaddr_list" >&5
 if eval "test \"`echo '$''{'ac_cv_have_res_nsaddr_list'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8529 "configure"
+#line 8539 "configure"
 #include "confdefs.h"
 
 #if HAVE_SYS_TYPES_H
@@ -8548,7 +8558,7 @@
 _res.nsaddr_list[0];
 ; return 0; }
 EOF
-if { (eval echo configure:8552: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8562: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_res_nsaddr_list="yes"
 else
@@ -8570,12 +8580,12 @@
 
 if test $ac_cv_have_res_nsaddr_list = "no" ; then
 echo $ac_n "checking for _res.ns_list""... $ac_c" 1>&6
-echo "configure:8574: checking for _res.ns_list" >&5
+echo "configure:8584: checking for _res.ns_list" >&5
 if eval "test \"`echo '$''{'ac_cv_have_res_ns_list'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8579 "configure"
+#line 8589 "configure"
 #include "confdefs.h"
 
 #if HAVE_SYS_TYPES_H
@@ -8598,7 +8608,7 @@
 _res.ns_list[0].addr;
 ; return 0; }
 EOF
-if { (eval echo configure:8602: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8612: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_res_ns_list="yes"
 else
diff -ruN squid-2.5.STABLE6/configure.in squid-2.5.STABLE7/configure.in
--- squid-2.5.STABLE6/configure.in	Thu Jul  8 17:44:39 2004
+++ squid-2.5.STABLE7/configure.in	Mon Oct 11 14:27:03 2004
@@ -3,15 +3,15 @@
 dnl
 dnl  Duane Wessels, wessels@nlanr.net, February 1996 (autoconf v2.9)
 dnl
-dnl  $Id: configure.in,v 1.251.2.59 2004/07/08 23:31:56 hno Exp $
+dnl  $Id: configure.in,v 1.251.2.73 2004/10/11 20:13:43 hno Exp $
 dnl
 dnl
 dnl
 AC_INIT(src/main.c)
 AC_CONFIG_AUX_DIR(cfgaux)
-AM_INIT_AUTOMAKE(squid, 2.5.STABLE6)
+AM_INIT_AUTOMAKE(squid, 2.5.STABLE7)
 AM_CONFIG_HEADER(include/autoconf.h)
-AC_REVISION($Revision: 1.251.2.59 $)dnl
+AC_REVISION($Revision: 1.251.2.73 $)dnl
 AC_PREFIX_DEFAULT(/usr/local/squid)
 AM_MAINTAINER_MODE
 
@@ -33,7 +33,7 @@
 LIBREGEX=''	# libregex.a
 
 dnl Check for pkg-config
-AC_PATH_PROG(PKGCONFIG, pkg-config, /usr/bin/false)
+AC_PATH_PROG(PKGCONFIG, pkg-config, false)
 
 dnl find out the exe extension for this platform. If it's not empty, use it for CGI's as well.
 AC_EXEEXT
@@ -537,6 +537,8 @@
 	    ;;
 	*-solaris-*)
 	    ;;
+	*-freebsd*)
+	    ;;
 	*)
 	    echo "WARNING: ARP ACL support probably won't work on $host."
 	    sleep 10
@@ -1925,6 +1927,7 @@
 	drand48 \
 	tempnam \
 	strerror \
+	initgroups
 )
 
 dnl Not cached since people are likely to tune this
@@ -2114,6 +2117,10 @@
 SQUID_TCP_SO_SNDBUF=16384,
 SQUID_TCP_SO_SNDBUF=16384)
 AC_MSG_RESULT($SQUID_TCP_SO_SNDBUF)
+if test $SQUID_TCP_SO_SNDBUF -gt 32768; then
+    echo "Limiting send buffer size to 32K"
+    SQUID_TCP_SO_SNDBUF=32768
+fi
 AC_DEFINE_UNQUOTED(SQUID_TCP_SO_SNDBUF, $SQUID_TCP_SO_SNDBUF)
 
 dnl Not cached since people are likely to tune this
@@ -2140,8 +2147,11 @@
 SQUID_TCP_SO_RCVBUF=16384,
 SQUID_TCP_SO_RCVBUF=16384)
 AC_MSG_RESULT($SQUID_TCP_SO_RCVBUF)
+if test $SQUID_TCP_SO_RCVBUF -gt 65535; then
+    echo "Limiting receive buffer size to 64K"
+    SQUID_TCP_SO_RCVBUF=65535
+fi
 AC_DEFINE_UNQUOTED(SQUID_TCP_SO_RCVBUF, $SQUID_TCP_SO_RCVBUF)
-
 AC_CACHE_CHECK(if sys_errlist is already defined, ac_cv_needs_sys_errlist,
   AC_TRY_COMPILE([#include <stdio.h>],[char *s = sys_errlist;],
     ac_cv_needs_sys_errlist="no",
diff -ruN squid-2.5.STABLE6/doc/Makefile.in squid-2.5.STABLE7/doc/Makefile.in
--- squid-2.5.STABLE6/doc/Makefile.in	Tue Jun  8 05:37:11 2004
+++ squid-2.5.STABLE7/doc/Makefile.in	Sat Jul 10 06:11:40 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.1.2.11 2004/06/08 11:37:11 hno Exp $
+#  $Id: Makefile.in,v 1.1.2.13 2004/07/10 12:11:40 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/errors/Makefile.in squid-2.5.STABLE7/errors/Makefile.in
--- squid-2.5.STABLE6/errors/Makefile.in	Tue Jun  8 05:37:11 2004
+++ squid-2.5.STABLE7/errors/Makefile.in	Sat Jul 10 06:11:41 2004
@@ -14,7 +14,7 @@
 @SET_MAKE@
 
 #
-# $Id: Makefile.in,v 1.15.2.14 2004/06/08 11:37:11 hno Exp $
+# $Id: Makefile.in,v 1.15.2.16 2004/07/10 12:11:41 hno Exp $
 #
 
 SHELL = @SHELL@
diff -ruN squid-2.5.STABLE6/errors/Portuguese/ERR_TOO_BIG squid-2.5.STABLE7/errors/Portuguese/ERR_TOO_BIG
--- squid-2.5.STABLE6/errors/Portuguese/ERR_TOO_BIG	Wed Aug 28 15:08:08 2002
+++ squid-2.5.STABLE7/errors/Portuguese/ERR_TOO_BIG	Wed Aug 11 10:59:37 2004
@@ -1,28 +1,30 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
-<TITLE>ERROR: The requested URL could not be retrieved</TITLE>
+<TITLE>ERRO: A URL solicitada n&atilde;o pode ser recuperada</TITLE>
 <STYLE type="text/css"><!--BODY{background-color:#ffffff;font-family:verdana,sans-serif}PRE{font-family:sans-serif}--></STYLE>
 </HEAD><BODY>
-<H1>ERROR</H1>
-<H2>The requested URL could not be retrieved</H2>
+<H1>ERRO</H1>
+<H2>A URL solicitada n&atilde;o pode ser recuperada</H2>
 <HR noshade size="1px">
 <P>
-While trying to retrieve the URL:
+Na tentativa de recuperar a URL:
 <A HREF="%U">%U</A>
 <P>
-The following error was encountered:
+O seguinte erro foi encontrado:
 <UL>
 <LI>
 <STRONG>
-The request or reply is too large.
+A requisi&ccedil;&atilde;o ou resposta &eacute; muito grande.
 </STRONG>
 <P>
-If you are making a POST or PUT request, then your request body
-(the thing you are trying to upload) is too large.  If you are 
-making a GET request, then the reply body (what 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.
+Se voc&ecirc; estiver fazendo uma requisi&ccedil;&atilde;o POST
+ou PUT, ent&atilde;o o corpo de sua requisi&ccedil;&atilde;o (o
+que voc&ecirc; est&aacute; tentando enviar) &eacute; muito grande.
+Se voc&ecirc; estiver fazendo uma requisi&ccedil;&atilde;o GET,
+ent&atilde;o o corpo da resposta (o que voc&ecirc; est&aacute;
+tentando baixar) &eacute; muito grande. Os limites foram
+estabelecidos pelo administrador deste cache. Por favor, entre
+em contato caso acredite que este cache est&aacute; configurado
+incorretamente.
 </UL>
 <P>
-Your cache administrator is <A HREF="mailto:%w">%w</A>.
diff -ruN squid-2.5.STABLE6/helpers/basic_auth/LDAP/Makefile.in squid-2.5.STABLE7/helpers/basic_auth/LDAP/Makefile.in
--- squid-2.5.STABLE6/helpers/basic_auth/LDAP/Makefile.in	Tue Jun  8 05:37:11 2004
+++ squid-2.5.STABLE7/helpers/basic_auth/LDAP/Makefile.in	Sat Jul 10 06:11:41 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid LDAP authentication helper
 #
-#  $Id: Makefile.in,v 1.8.2.11 2004/06/08 11:37:11 hno Exp $
+#  $Id: Makefile.in,v 1.8.2.13 2004/07/10 12:11:41 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/helpers/basic_auth/LDAP/squid_ldap_auth.8 squid-2.5.STABLE7/helpers/basic_auth/LDAP/squid_ldap_auth.8
--- squid-2.5.STABLE6/helpers/basic_auth/LDAP/squid_ldap_auth.8	Tue Mar  2 02:13:29 2004
+++ squid-2.5.STABLE7/helpers/basic_auth/LDAP/squid_ldap_auth.8	Sat Jul 17 09:00:12 2004
@@ -1,14 +1,14 @@
-.TH squid_ldap_auth 8 "1 Mars 2003" "Squid LDAP Auth"
+.TH squid_ldap_auth 8 "17 July 2004" "Squid LDAP Auth"
 .
 .SH NAME
 squid_ldap_auth - Squid LDAP authentication helper
 .
 .SH SYNOPSIS
 .B squid_ldap_auth
--b "base DN" [-u attribute] [options] [ldap_server_name[:port]...]
+-b "base DN" [-u attribute] [options] [ldap_server_name[:port]|URI]...
 .br
 .B squid_ldap_auth
--b "base DN" -f "LDAP search filter" [options] [ldap_server_name[:port]...]
+-b "base DN" -f "LDAP search filter" [options] [ldap_server_name[:port]|URI]...
 .
 .SH DESCRIPTION
 This helper allows Squid to connect to a LDAP directory to
@@ -47,6 +47,11 @@
 to search for your users DN (-f option).
 .
 .TP
+.BI "-U " passwordattr
+Use ldap_compare instead of ldap_simple_bind to verify the users password.
+passwordattr is the LDAP attribute storing the users password.
+.
+.TP
 .BI "-s " base|one|sub
 search scope when performing user DN searches specified
 by the -f option. Defaults to 'sub'.
@@ -88,6 +93,16 @@
 validations. Recommended for larger installations.
 .
 .TP
+.BI -O
+Only bind once per LDAP connection. Some LDAP servers do not
+allow re-binding as another user after a successful ldap_bind.
+The use of this option always opens a new connection for each
+login attempt. If combined with the -P option for persistent
+LDAP connection then the connection used for searching for the
+user DN is kept persistent but a new connection is opened
+to verify each users password once the DN is found.
+.
+.TP
 .BI -R
 do not follow referrals
 .
@@ -106,15 +121,18 @@
 .
 .TP
 .BI -H " ldapuri"
-Specity the LDAP server to connect to by LDAP URI (requires OpenLDAP libraries)
+Specity the LDAP server to connect to by LDAP URI (requires OpenLDAP libraries).
+Servers can also be specified last on the command line.
 .
 .TP
 .BI -h " ldapserver"
-Specify the LDAP server to connect to
+Specify the LDAP server to connect to. Servers can also be specified last
+on the command line.
 .TP
 .BI -p " ldapport"
 Specify an alternate TCP port where the ldap server is listening if
-other than the default LDAP port 389.
+other than the default LDAP port 389. Can also be specified within the
+server specificiation by using servername:port syntax.
 .
 .TP
 .BI -Z
@@ -133,7 +151,7 @@
 Specify time limit on LDAP search operations
 .
 .TP
-.BU -d
+.BI -d
 Debug mode where each step taken will get reported in detail.
 Useful for understanding what goes wrong if the results is
 not what is expected.
diff -ruN squid-2.5.STABLE6/helpers/basic_auth/LDAP/squid_ldap_auth.c squid-2.5.STABLE7/helpers/basic_auth/LDAP/squid_ldap_auth.c
--- squid-2.5.STABLE6/helpers/basic_auth/LDAP/squid_ldap_auth.c	Thu Mar  4 02:37:38 2004
+++ squid-2.5.STABLE7/helpers/basic_auth/LDAP/squid_ldap_auth.c	Tue Aug 10 03:39:29 2004
@@ -30,17 +30,22 @@
  * or (at your option) any later version.
  *
  * Changes:
+ * 2004-07-17: Henrik Nordstrom <hno@squid-cache.org>
+ *             - Corrected non-persistent mode to only issue one
+ *             ldap_bind per connection.
+ *             - -U option to compare the users password rather
+ *             than binding.
  * 2004-03-01: Henrik Nordstrom <hno@squid-cache.org>
- *	       - corrected building of search filters to escape
- *		 unsafe input
- *	       - -d option for "debug" like squid_ldap_group
+ *             - corrected building of search filters to escape
+ *               unsafe input
+ *             - -d option for "debug" like squid_ldap_group
  * 2004-01-05: Henrik Nordstrom <hno@squid-cache.org>
- *	       - Corrected TLS mode
+ *             - Corrected TLS mode
  * 2003-03-01: David J N Begley
- * 	       - Support for Netscape API method of ldap over SSL
- * 	         connections
- * 	       - Timeout option for better recovery when using
- * 	         multiple LDAP servers
+ *             - Support for Netscape API method of ldap over SSL
+ *               connections
+ *             - Timeout option for better recovery when using
+ *               multiple LDAP servers
  * 2003-03-01: Christoph Lechleitner <lech@ibcl.at>
  *             - Added -W option to read bindpasswd from file
  * 2003-03-01: Juerg Michel
@@ -89,8 +94,10 @@
 static const char *binddn = NULL;
 static const char *bindpasswd = NULL;
 static const char *userattr = "uid";
+static const char *passwdattr = NULL;
 static int searchscope = LDAP_SCOPE_SUBTREE;
 static int persistent = 0;
+static int bind_once = 0;
 static int noreferrals = 0;
 static int aliasderef = LDAP_DEREF_NEVER;
 #if defined(NETSCAPE_SSL)
@@ -105,7 +112,7 @@
 static int use_tls = 0;
 static int version = -1;
 
-static int checkLDAP(LDAP * ld, const char *userid, const char *password);
+static int checkLDAP(LDAP * ld, const char *userid, const char *password, const char *server, int port);
 static int readSecret(const char *filename);
 
 /* Yuck.. we need to glue to different versions of the API */
@@ -130,12 +137,12 @@
     ldap_set_option(ld, LDAP_OPT_REFERRALS, value);
 }
 static void
-squid_ldap_set_timelimit(LDAP *ld, int timelimit)
+squid_ldap_set_timelimit(LDAP * ld, int timelimit)
 {
     ldap_set_option(ld, LDAP_OPT_TIMELIMIT, &timelimit);
 }
 static void
-squid_ldap_set_connect_timeout(LDAP *ld, int timelimit)
+squid_ldap_set_connect_timeout(LDAP * ld, int timelimit)
 {
 #if defined(LDAP_OPT_NETWORK_TIMEOUT)
     struct timeval tv;
@@ -152,6 +159,7 @@
 {
     ldap_memfree(p);
 }
+
 #else
 static int
 squid_ldap_errno(LDAP * ld)
@@ -171,12 +179,13 @@
     else
 	ld->ld_options &= ~LDAP_OPT_REFERRALS;
 }
-static void squid_ldap_set_timelimit(LDAP *ld, int timelimit)
+static void 
+squid_ldap_set_timelimit(LDAP * ld, int timelimit)
 {
     ld->ld_timelimit = timelimit;
 }
 static void
-squid_ldap_set_connect_timeout(LDAP *ld, int timelimit)
+squid_ldap_set_connect_timeout(LDAP * ld, int timelimit)
 {
     fprintf(stderr, "Connect timeouts not supported in your LDAP library\n");
 }
@@ -185,14 +194,73 @@
 {
     free(p);
 }
+
 #endif
 
 #ifdef LDAP_API_FEATURE_X_OPENLDAP
-  #if LDAP_VENDOR_VERSION > 194
-    #define HAS_URI_SUPPORT 1
-  #endif
+#if LDAP_VENDOR_VERSION > 194
+#define HAS_URI_SUPPORT 1
+#endif
 #endif
 
+static LDAP *
+open_ldap_connection(const char *ldapServer, int port)
+{
+    LDAP *ld = NULL;
+#if HAS_URI_SUPPORT
+    if (strstr(ldapServer, "://") != NULL) {
+	int rc = ldap_initialize(&ld, ldapServer);
+	if (rc != LDAP_SUCCESS) {
+	    fprintf(stderr, "\nUnable to connect to LDAPURI:%s\n", ldapServer);
+	    exit(1);
+	}
+    } else
+#endif
+#if NETSCAPE_SSL
+    if (sslpath) {
+	if (!sslinit && (ldapssl_client_init(sslpath, NULL) != LDAP_SUCCESS)) {
+	    fprintf(stderr, "\nUnable to initialise SSL with cert path %s\n",
+		sslpath);
+	    exit(1);
+	} else {
+	    sslinit++;
+	}
+	if ((ld = ldapssl_init(ldapServer, port, 1)) == NULL) {
+	    fprintf(stderr, "\nUnable to connect to SSL LDAP server: %s port:%d\n",
+		ldapServer, port);
+	    exit(1);
+	}
+    } else
+#endif
+    if ((ld = ldap_init(ldapServer, port)) == NULL) {
+	fprintf(stderr, "\nUnable to connect to LDAP server:%s port:%d\n",
+	    ldapServer, port);
+	exit(1);
+    }
+    if (connect_timeout)
+	squid_ldap_set_connect_timeout(ld, connect_timeout);
+
+#ifdef LDAP_VERSION3
+    if (version == -1) {
+	version = LDAP_VERSION2;
+    }
+    if (ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION, &version)
+	!= LDAP_OPT_SUCCESS) {
+	fprintf(stderr, "Could not set LDAP_OPT_PROTOCOL_VERSION %d\n",
+	    version);
+	exit(1);
+    }
+    if (use_tls && (version == LDAP_VERSION3) && (ldap_start_tls_s(ld, NULL, NULL) != LDAP_SUCCESS)) {
+	fprintf(stderr, "Could not Activate TLS connection\n");
+	exit(1);
+    }
+#endif
+    squid_ldap_set_timelimit(ld, timelimit);
+    squid_ldap_set_referrals(ld, !noreferrals);
+    squid_ldap_set_aliasderef(ld, aliasderef);
+    return ld;
+}
+
 int
 main(int argc, char **argv)
 {
@@ -214,6 +282,7 @@
 	case 'z':
 	case 'Z':
 	case 'd':
+	case 'O':
 	    break;
 	default:
 	    if (strlen(argv[1]) > 2) {
@@ -255,6 +324,9 @@
 	case 'u':
 	    userattr = value;
 	    break;
+	case 'U':
+	    passwdattr = value;
+	    break;
 	case 's':
 	    if (strcmp(value, "base") == 0)
 		searchscope = LDAP_SCOPE_BASE;
@@ -269,20 +341,20 @@
 	    break;
 	case 'E':
 #if defined(NETSCAPE_SSL)
-		sslpath = value;
-		if (port == LDAP_PORT)
-		    port = LDAPS_PORT;
+	    sslpath = value;
+	    if (port == LDAP_PORT)
+		port = LDAPS_PORT;
 #else
-		fprintf(stderr, PROGRAM_NAME " ERROR: -E unsupported with this LDAP library\n");
-		exit(1);
+	    fprintf(stderr, PROGRAM_NAME " ERROR: -E unsupported with this LDAP library\n");
+	    exit(1);
 #endif
-		break;
+	    break;
 	case 'c':
-		connect_timeout = atoi(value);
-		break;
+	    connect_timeout = atoi(value);
+	    break;
 	case 't':
-		timelimit = atoi(value);
-		break;
+	    timelimit = atoi(value);
+	    break;
 	case 'a':
 	    if (strcmp(value, "never") == 0)
 		aliasderef = LDAP_DEREF_NEVER;
@@ -304,11 +376,14 @@
 	    bindpasswd = value;
 	    break;
 	case 'W':
-	    readSecret (value);
+	    readSecret(value);
 	    break;
 	case 'P':
 	    persistent = !persistent;
 	    break;
+	case 'O':
+	    bind_once = !bind_once;
+	    break;
 	case 'p':
 	    port = atoi(value);
 	    break;
@@ -317,7 +392,7 @@
 	    break;
 #ifdef LDAP_VERSION3
 	case 'v':
-	    switch( atoi(value) ) {
+	    switch (atoi(value)) {
 	    case 2:
 		version = LDAP_VERSION2;
 		break;
@@ -325,14 +400,14 @@
 		version = LDAP_VERSION3;
 		break;
 	    default:
-		fprintf( stderr, "Protocol version should be 2 or 3\n");
+		fprintf(stderr, "Protocol version should be 2 or 3\n");
 		exit(1);
 	    }
 	    break;
 	case 'Z':
-	    if ( version == LDAP_VERSION2 ) {
-		fprintf( stderr, "TLS (-Z) is incompatible with version %d\n",
-			version);
+	    if (version == LDAP_VERSION2) {
+		fprintf(stderr, "TLS (-Z) is incompatible with version %d\n",
+		    version);
 		exit(1);
 	    }
 	    version = LDAP_VERSION3;
@@ -406,66 +481,11 @@
 	}
 	rfc1738_unescape(user);
 	rfc1738_unescape(passwd);
-	tryagain = 1;
+	tryagain = (ld != NULL);
       recover:
-	if (ld == NULL) {
-#if HAS_URI_SUPPORT
-	    if (strstr(ldapServer, "://") != NULL) {
-		int rc = ldap_initialize( &ld, ldapServer );
-		if( rc != LDAP_SUCCESS ) {
-		    fprintf(stderr, "\nUnable to connect to LDAPURI:%s\n", ldapServer);
-		    break;
-		}
-	    } else
-#endif
-#if NETSCAPE_SSL
-	    if (sslpath) {
-		if ( !sslinit && (ldapssl_client_init(sslpath, NULL) != LDAP_SUCCESS)) {
-		    fprintf(stderr, "\nUnable to initialise SSL with cert path %s\n",
-			    sslpath);
-		    exit(1);
-		} else {
-		    sslinit++;
-		}
-		if ((ld = ldapssl_init(ldapServer, port, 1)) == NULL) {
-		    fprintf(stderr, "\nUnable to connect to SSL LDAP server: %s port:%d\n",
-			    ldapServer, port);
-		    exit(1);
-		}
-	    } else
-#endif
-	    if ((ld = ldap_init(ldapServer, port)) == NULL) {
-		fprintf(stderr, "\nUnable to connect to LDAP server:%s port:%d\n",
-		    ldapServer, port);
-		exit(1);
-	    }
-
-	    if (connect_timeout)
-		squid_ldap_set_connect_timeout(ld, connect_timeout);
-
-#ifdef LDAP_VERSION3
-	    if (version == -1 ) {
-                version = LDAP_VERSION2;
-	    }
-
-	    if( ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version )
-		    != LDAP_OPT_SUCCESS )
-	    {
-                fprintf( stderr, "Could not set LDAP_OPT_PROTOCOL_VERSION %d\n",
-                        version );
-                exit(1);
-	    }
-
-	    if ( use_tls && ( version == LDAP_VERSION3 ) && ( ldap_start_tls_s( ld, NULL, NULL ) != LDAP_SUCCESS )) {
-                fprintf( stderr, "Could not Activate TLS connection\n");
-                exit(1);
-	    }
-#endif
-	    squid_ldap_set_timelimit(ld, timelimit);
-	    squid_ldap_set_referrals(ld, !noreferrals);
-	    squid_ldap_set_aliasderef(ld, aliasderef);
-	}
-	if (checkLDAP(ld, user, passwd) != 0) {
+	if (ld == NULL && persistent)
+	    ld = open_ldap_connection(ldapServer, port);
+	if (checkLDAP(ld, user, passwd, ldapServer, port) != 0) {
 	    if (tryagain && squid_ldap_errno(ld) != LDAP_INVALID_CREDENTIALS) {
 		tryagain = 0;
 		ldap_unbind(ld);
@@ -476,7 +496,7 @@
 	} else {
 	    printf("OK\n");
 	}
-	if (!persistent || (squid_ldap_errno(ld) != LDAP_SUCCESS && squid_ldap_errno(ld) != LDAP_INVALID_CREDENTIALS)) {
+	if (ld && (squid_ldap_errno(ld) != LDAP_SUCCESS && squid_ldap_errno(ld) != LDAP_INVALID_CREDENTIALS)) {
 	    ldap_unbind(ld);
 	    ld = NULL;
 	}
@@ -491,7 +511,7 @@
 {
     int n = 0;
     while (size > 4 && *src) {
-	switch(*src) {
+	switch (*src) {
 	case '*':
 	case '(':
 	case ')':
@@ -500,8 +520,8 @@
 	    size -= 3;
 	    if (size > 0) {
 		*escaped++ = '\\';
-		snprintf(escaped, 3, "%02x", (unsigned char)*src++);
-		escaped+=2;
+		snprintf(escaped, 3, "%02x", (unsigned char) *src++);
+		escaped += 2;
 	    }
 	    break;
 	default:
@@ -515,9 +535,11 @@
 }
 
 static int
-checkLDAP(LDAP * ld, const char *userid, const char *password)
+checkLDAP(LDAP * persistent_ld, const char *userid, const char *password, const char *ldapServer, int port)
 {
     char dn[256];
+    int ret = 0;
+    LDAP *bind_ld = NULL;
 
     if (!*password) {
 	/* LDAP can't bind with a blank password. Seen as "anonymous"
@@ -534,19 +556,24 @@
 	{NULL};
 	char *userdn;
 	int rc;
+	LDAP *search_ld = persistent_ld;
+
+	if (!search_ld)
+	    search_ld = open_ldap_connection(ldapServer, port);
 
 	ldap_escape_value(escaped_login, sizeof(escaped_login), userid);
 	if (binddn) {
-	    rc = ldap_simple_bind_s(ld, binddn, bindpasswd);
+	    rc = ldap_simple_bind_s(search_ld, binddn, bindpasswd);
 	    if (rc != LDAP_SUCCESS) {
 		fprintf(stderr, PROGRAM_NAME ": WARNING, could not bind to binddn '%s'\n", ldap_err2string(rc));
-		return 1;
+		ret = 1;
+		goto search_done;
 	    }
 	}
 	snprintf(filter, sizeof(filter), searchfilter, escaped_login, escaped_login, escaped_login, escaped_login, escaped_login, escaped_login, escaped_login, escaped_login, escaped_login, escaped_login, escaped_login, escaped_login, escaped_login, escaped_login, escaped_login);
 	if (debug)
 	    fprintf(stderr, "user filter '%s', searchbase '%s'\n", filter, basedn);
-	rc = ldap_search_s(ld, basedn, searchscope, filter, searchattr, 1, &res);
+	rc = ldap_search_s(search_ld, basedn, searchscope, filter, searchattr, 1, &res);
 	if (rc != LDAP_SUCCESS) {
 	    if (noreferrals && rc == LDAP_PARTIAL_RESULTS) {
 		/* Everything is fine. This is expected when referrals
@@ -560,67 +587,93 @@
 		    fprintf(stderr, PROGRAM_NAME ": WARNING, SSL error %d (%s)\n", sslerr, ldapssl_err2string(sslerr));
 		}
 #endif
-		ldap_msgfree(res);
-		return 1;
+		ret = 1;
+		goto search_done;
 	    }
 	}
-	entry = ldap_first_entry(ld, res);
+	entry = ldap_first_entry(search_ld, res);
 	if (!entry) {
-	    ldap_msgfree(res);
-	    return 1;
+	    ret = 1;
+	    goto search_done;
 	}
-	userdn = ldap_get_dn(ld, entry);
+	userdn = ldap_get_dn(search_ld, entry);
 	if (!userdn) {
 	    fprintf(stderr, PROGRAM_NAME ": ERROR, could not get user DN for '%s'\n", userid);
-	    ldap_msgfree(res);
-	    return 1;
+	    ret = 1;
+	    goto search_done;
 	}
 	snprintf(dn, sizeof(dn), "%s", userdn);
 	squid_ldap_memfree(userdn);
-	ldap_msgfree(res);
+
+	if (ret == 0 && (!binddn || !bind_once || passwdattr)) {
+	    /* Reuse the search connection for comparing the user password attribute */
+	    bind_ld = search_ld;
+	    search_ld = NULL;
+	}
+      search_done:
+	if (res) {
+	    ldap_msgfree(res);
+	    res = NULL;
+	}
+	if (search_ld && search_ld != persistent_ld) {
+	    ldap_unbind(search_ld);
+	    search_ld = NULL;
+	}
+	if (ret != 0)
+	    return ret;
     } else {
 	snprintf(dn, sizeof(dn), "%s=%s,%s", userattr, userid, basedn);
     }
 
     if (debug)
 	fprintf(stderr, "attempting to bind to user '%s'\n", dn);
-    if (ldap_simple_bind_s(ld, dn, password) != LDAP_SUCCESS)
-	return 1;
-
-    return 0;
+    if (!bind_ld && !bind_once)
+	bind_ld = persistent_ld;
+    if (!bind_ld)
+	bind_ld = open_ldap_connection(ldapServer, port);
+    if (passwdattr && ldap_compare_s(bind_ld, dn, passwdattr, password) != LDAP_COMPARE_TRUE)
+	ret = 1;
+    else if (ldap_simple_bind_s(bind_ld, dn, password) != LDAP_SUCCESS)
+	ret = 1;
+    if (bind_ld != persistent_ld) {
+	ldap_unbind(bind_ld);
+	bind_ld = NULL;
+    }
+    return ret;
 }
 
-int readSecret(const char *filename)
+int 
+readSecret(const char *filename)
 {
-  char  buf[BUFSIZ];
-  char  *e = NULL;
-  FILE  *f;
-  char  *passwd = NULL;
-
-  if(!(f=fopen(filename, "r"))) {
-    fprintf(stderr, PROGRAM_NAME " ERROR: Can not read secret file %s\n", filename);
-    return 1;
-  }
+    char buf[BUFSIZ];
+    char *e = NULL;
+    FILE *f;
+    char *passwd = NULL;
 
-  if( !fgets(buf, sizeof(buf)-1, f)) {
-    fprintf(stderr, PROGRAM_NAME " ERROR: Secret file %s is empty\n", filename);
-    fclose(f);
-    return 1;
-  }
-
-  /* strip whitespaces on end */
-  if((e = strrchr(buf, '\n'))) *e = 0;
-  if((e = strrchr(buf, '\r'))) *e = 0;
-
-  passwd = (char *) calloc(sizeof(char), strlen(buf)+1);
-  if (!passwd) {
-    fprintf(stderr, PROGRAM_NAME " ERROR: can not allocate memory\n"); 
-    exit(1);
-  }
-  strcpy(passwd, buf);
-  bindpasswd = passwd;
+    if (!(f = fopen(filename, "r"))) {
+	fprintf(stderr, PROGRAM_NAME " ERROR: Can not read secret file %s\n", filename);
+	return 1;
+    }
+    if (!fgets(buf, sizeof(buf) - 1, f)) {
+	fprintf(stderr, PROGRAM_NAME " ERROR: Secret file %s is empty\n", filename);
+	fclose(f);
+	return 1;
+    }
+    /* strip whitespaces on end */
+    if ((e = strrchr(buf, '\n')))
+	*e = 0;
+    if ((e = strrchr(buf, '\r')))
+	*e = 0;
+
+    passwd = (char *) calloc(sizeof(char), strlen(buf) + 1);
+    if (!passwd) {
+	fprintf(stderr, PROGRAM_NAME " ERROR: can not allocate memory\n");
+	exit(1);
+    }
+    strcpy(passwd, buf);
+    bindpasswd = passwd;
 
-  fclose(f);
+    fclose(f);
 
-  return 0;
+    return 0;
 }
diff -ruN squid-2.5.STABLE6/helpers/basic_auth/MSNT/Makefile.in squid-2.5.STABLE7/helpers/basic_auth/MSNT/Makefile.in
--- squid-2.5.STABLE6/helpers/basic_auth/MSNT/Makefile.in	Tue Jun  8 05:37:12 2004
+++ squid-2.5.STABLE7/helpers/basic_auth/MSNT/Makefile.in	Sat Jul 10 06:11:41 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.7.2.13 2004/06/08 11:37:12 hno Exp $
+#  $Id: Makefile.in,v 1.7.2.15 2004/07/10 12:11:41 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/helpers/basic_auth/Makefile.in squid-2.5.STABLE7/helpers/basic_auth/Makefile.in
--- squid-2.5.STABLE6/helpers/basic_auth/Makefile.in	Tue Jun  8 05:37:11 2004
+++ squid-2.5.STABLE7/helpers/basic_auth/Makefile.in	Sat Jul 10 06:11:41 2004
@@ -15,7 +15,7 @@
 
 #  Makefile for storage modules in the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.7.2.10 2004/06/08 11:37:11 hno Exp $
+#  $Id: Makefile.in,v 1.7.2.12 2004/07/10 12:11:41 hno Exp $
 #
 
 SHELL = @SHELL@
diff -ruN squid-2.5.STABLE6/helpers/basic_auth/NCSA/Makefile.in squid-2.5.STABLE7/helpers/basic_auth/NCSA/Makefile.in
--- squid-2.5.STABLE6/helpers/basic_auth/NCSA/Makefile.in	Tue Jun  8 05:37:12 2004
+++ squid-2.5.STABLE7/helpers/basic_auth/NCSA/Makefile.in	Sat Jul 10 06:11:41 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.8.2.9 2004/06/08 11:37:12 hno Exp $
+#  $Id: Makefile.in,v 1.8.2.11 2004/07/10 12:11:41 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/helpers/basic_auth/NCSA/ncsa_auth.c squid-2.5.STABLE7/helpers/basic_auth/NCSA/ncsa_auth.c
--- squid-2.5.STABLE6/helpers/basic_auth/NCSA/ncsa_auth.c	Wed Aug 20 06:35:51 2003
+++ squid-2.5.STABLE7/helpers/basic_auth/NCSA/ncsa_auth.c	Sat Sep 25 14:53:17 2004
@@ -88,8 +88,8 @@
 	if ((buf[0] == '#') || (buf[0] == ' ') || (buf[0] == '\t') ||
 	    (buf[0] == '\n'))
 	    continue;
-	user = strtok(buf, ":\n");
-	passwd = strtok(NULL, ":\n");
+	user = strtok(buf, ":\n\r");
+	passwd = strtok(NULL, ":\n\r");
 	if ((strlen(user) > 0) && passwd) {
 	    u = xmalloc(sizeof(*u));
 	    u->user = xstrdup(user);
diff -ruN squid-2.5.STABLE6/helpers/basic_auth/PAM/Makefile.in squid-2.5.STABLE7/helpers/basic_auth/PAM/Makefile.in
--- squid-2.5.STABLE6/helpers/basic_auth/PAM/Makefile.in	Tue Jun  8 05:37:12 2004
+++ squid-2.5.STABLE7/helpers/basic_auth/PAM/Makefile.in	Sat Jul 10 06:11:41 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid PAM authentication helper
 #
-#  $Id: Makefile.in,v 1.7.2.11 2004/06/08 11:37:12 hno Exp $
+#  $Id: Makefile.in,v 1.7.2.13 2004/07/10 12:11:41 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/helpers/basic_auth/SASL/Makefile.in squid-2.5.STABLE7/helpers/basic_auth/SASL/Makefile.in
--- squid-2.5.STABLE6/helpers/basic_auth/SASL/Makefile.in	Tue Jun  8 05:37:15 2004
+++ squid-2.5.STABLE7/helpers/basic_auth/SASL/Makefile.in	Sat Jul 10 06:11:41 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid SASL authentication helper
 #
-#  $Id: Makefile.in,v 1.1.2.15 2004/06/08 11:37:15 hno Exp $
+#  $Id: Makefile.in,v 1.1.2.17 2004/07/10 12:11:41 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/helpers/basic_auth/SMB/Makefile.in squid-2.5.STABLE7/helpers/basic_auth/SMB/Makefile.in
--- squid-2.5.STABLE6/helpers/basic_auth/SMB/Makefile.in	Tue Jun  8 05:37:15 2004
+++ squid-2.5.STABLE7/helpers/basic_auth/SMB/Makefile.in	Sat Jul 10 06:11:41 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.7.2.11 2004/06/08 11:37:15 hno Exp $
+#  $Id: Makefile.in,v 1.7.2.13 2004/07/10 12:11:41 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/helpers/basic_auth/YP/Makefile.in squid-2.5.STABLE7/helpers/basic_auth/YP/Makefile.in
--- squid-2.5.STABLE6/helpers/basic_auth/YP/Makefile.in	Tue Jun  8 05:37:16 2004
+++ squid-2.5.STABLE7/helpers/basic_auth/YP/Makefile.in	Sat Jul 10 06:11:42 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.9.2.10 2004/06/08 11:37:16 hno Exp $
+#  $Id: Makefile.in,v 1.9.2.12 2004/07/10 12:11:42 hno Exp $
 #
 #
 
diff -ruN squid-2.5.STABLE6/helpers/basic_auth/getpwnam/Makefile.in squid-2.5.STABLE7/helpers/basic_auth/getpwnam/Makefile.in
--- squid-2.5.STABLE6/helpers/basic_auth/getpwnam/Makefile.in	Tue Jun  8 05:37:16 2004
+++ squid-2.5.STABLE7/helpers/basic_auth/getpwnam/Makefile.in	Sat Jul 10 06:11:42 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.8.2.9 2004/06/08 11:37:16 hno Exp $
+#  $Id: Makefile.in,v 1.8.2.11 2004/07/10 12:11:42 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/helpers/basic_auth/multi-domain-NTLM/Makefile.in squid-2.5.STABLE7/helpers/basic_auth/multi-domain-NTLM/Makefile.in
--- squid-2.5.STABLE6/helpers/basic_auth/multi-domain-NTLM/Makefile.in	Tue Jun  8 05:37:16 2004
+++ squid-2.5.STABLE7/helpers/basic_auth/multi-domain-NTLM/Makefile.in	Sat Jul 10 06:11:42 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.5.2.10 2004/06/08 11:37:16 hno Exp $
+#  $Id: Makefile.in,v 1.5.2.12 2004/07/10 12:11:42 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/helpers/basic_auth/winbind/Makefile.in squid-2.5.STABLE7/helpers/basic_auth/winbind/Makefile.in
--- squid-2.5.STABLE6/helpers/basic_auth/winbind/Makefile.in	Tue Jun  8 05:37:17 2004
+++ squid-2.5.STABLE7/helpers/basic_auth/winbind/Makefile.in	Sat Jul 10 06:11:42 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.1.2.11 2004/06/08 11:37:17 hno Exp $
+#  $Id: Makefile.in,v 1.1.2.13 2004/07/10 12:11:42 hno Exp $
 #
 
 SHELL = @SHELL@
diff -ruN squid-2.5.STABLE6/helpers/digest_auth/Makefile.in squid-2.5.STABLE7/helpers/digest_auth/Makefile.in
--- squid-2.5.STABLE6/helpers/digest_auth/Makefile.in	Tue Jun  8 05:37:18 2004
+++ squid-2.5.STABLE7/helpers/digest_auth/Makefile.in	Sat Jul 10 06:11:42 2004
@@ -15,7 +15,7 @@
 
 #  Makefile for digest auth helpers in the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.6.2.8 2004/06/08 11:37:18 hno Exp $
+#  $Id: Makefile.in,v 1.6.2.10 2004/07/10 12:11:42 hno Exp $
 #
 
 SHELL = @SHELL@
diff -ruN squid-2.5.STABLE6/helpers/digest_auth/password/Makefile.in squid-2.5.STABLE7/helpers/digest_auth/password/Makefile.in
--- squid-2.5.STABLE6/helpers/digest_auth/password/Makefile.in	Tue Jun  8 05:37:18 2004
+++ squid-2.5.STABLE7/helpers/digest_auth/password/Makefile.in	Sat Jul 10 06:11:42 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.8.2.8 2004/06/08 11:37:18 hno Exp $
+#  $Id: Makefile.in,v 1.8.2.10 2004/07/10 12:11:42 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/helpers/external_acl/Makefile.in squid-2.5.STABLE7/helpers/external_acl/Makefile.in
--- squid-2.5.STABLE6/helpers/external_acl/Makefile.in	Tue Jun  8 05:37:18 2004
+++ squid-2.5.STABLE7/helpers/external_acl/Makefile.in	Sat Jul 10 06:11:42 2004
@@ -15,7 +15,7 @@
 
 #  Makefile for storage modules in the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.2.2.5 2004/06/08 11:37:18 hno Exp $
+#  $Id: Makefile.in,v 1.2.2.7 2004/07/10 12:11:42 hno Exp $
 #
 
 SHELL = @SHELL@
diff -ruN squid-2.5.STABLE6/helpers/external_acl/ip_user/Makefile.in squid-2.5.STABLE7/helpers/external_acl/ip_user/Makefile.in
--- squid-2.5.STABLE6/helpers/external_acl/ip_user/Makefile.in	Tue Jun  8 05:37:18 2004
+++ squid-2.5.STABLE7/helpers/external_acl/ip_user/Makefile.in	Sat Jul 10 06:11:42 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the ip_user external_acl helper by Rodrigo Campos
 #
-#  $Id: Makefile.in,v 1.1.2.6 2004/06/08 11:37:18 hno Exp $
+#  $Id: Makefile.in,v 1.1.2.8 2004/07/10 12:11:42 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/helpers/external_acl/ldap_group/ChangeLog squid-2.5.STABLE7/helpers/external_acl/ldap_group/ChangeLog
--- squid-2.5.STABLE6/helpers/external_acl/ldap_group/ChangeLog	Mon Jan  5 06:12:12 2004
+++ squid-2.5.STABLE7/helpers/external_acl/ldap_group/ChangeLog	Sat Aug 14 16:47:14 2004
@@ -1,6 +1,17 @@
+Version 2.14
+
+2004-03-02 Henrik Nordstrom <hno@squid-cache.org>
+	Added -d (debug) flag
+
+2004-02-09 Henrik Nordstrom <hno@squid-cache.org>
+	-E and -S options mismatch
+
+2004-01-08 Henrik Nordstrom <hno@squid-cache.org>
+	Increase buffer size when reading group lookups from Squid
+
 Version 2.13
 
-2003-01-05 Henrik Nordstrom <hno@squid-cache.org>
+2004-01-05 Henrik Nordstrom <hno@squid-cache.org>
 	Corrected TLS mode (-Z)
 
 Version 2.12
diff -ruN squid-2.5.STABLE6/helpers/external_acl/ldap_group/Makefile.in squid-2.5.STABLE7/helpers/external_acl/ldap_group/Makefile.in
--- squid-2.5.STABLE6/helpers/external_acl/ldap_group/Makefile.in	Tue Jun  8 05:37:19 2004
+++ squid-2.5.STABLE7/helpers/external_acl/ldap_group/Makefile.in	Sat Jul 10 06:11:42 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid LDAP authentication helper
 #
-#  $Id: Makefile.in,v 1.1.2.8 2004/06/08 11:37:19 hno Exp $
+#  $Id: Makefile.in,v 1.1.2.10 2004/07/10 12:11:42 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/helpers/external_acl/ldap_group/squid_ldap_group.8 squid-2.5.STABLE7/helpers/external_acl/ldap_group/squid_ldap_group.8
--- squid-2.5.STABLE6/helpers/external_acl/ldap_group/squid_ldap_group.8	Tue Mar  2 02:13:29 2004
+++ squid-2.5.STABLE7/helpers/external_acl/ldap_group/squid_ldap_group.8	Sat Jul 17 09:00:12 2004
@@ -1,10 +1,10 @@
-.TH squid_ldap_group 8 "1 Mars 2003" "Squid LDAP Group"
+.TH squid_ldap_group 8 "17 July 2004" "Squid LDAP Group"
 .
 .SH NAME
 squid_ldap_group - Squid LDAP external acl group helper
 .
 .SH SYNOPSIS
-squid_ldap_group -b "base DN" -f "LDAP search filter" [options] [ldap_server_name[:port]...|URI]
+squid_ldap_group -b "base DN" -f "LDAP search filter" [options] [ldap_server_name[:port]|URI]...
 .
 .SH DESCRIPTION
 This helper allows Squid to connect to a LDAP directory to
@@ -139,7 +139,7 @@
 Strip NT domain name component from user names (/ or \\ separated)
 .
 .TP
-.BU -d
+.BI -d
 Debug mode where each step taken will get reported in detail.
 Useful for understanding what goes wrong if the results is
 not what is expected.
diff -ruN squid-2.5.STABLE6/helpers/external_acl/unix_group/Makefile.in squid-2.5.STABLE7/helpers/external_acl/unix_group/Makefile.in
--- squid-2.5.STABLE6/helpers/external_acl/unix_group/Makefile.in	Tue Jun  8 05:37:19 2004
+++ squid-2.5.STABLE7/helpers/external_acl/unix_group/Makefile.in	Sat Jul 10 06:11:42 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid LDAP authentication helper
 #
-#  $Id: Makefile.in,v 1.1.2.6 2004/06/08 11:37:19 hno Exp $
+#  $Id: Makefile.in,v 1.1.2.8 2004/07/10 12:11:42 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/helpers/external_acl/wbinfo_group/Makefile.in squid-2.5.STABLE7/helpers/external_acl/wbinfo_group/Makefile.in
--- squid-2.5.STABLE6/helpers/external_acl/wbinfo_group/Makefile.in	Tue Jun  8 05:37:19 2004
+++ squid-2.5.STABLE7/helpers/external_acl/wbinfo_group/Makefile.in	Sat Jul 10 06:11:42 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid LDAP authentication helper
 #
-#  $Id: Makefile.in,v 1.1.2.5 2004/06/08 11:37:19 hno Exp $
+#  $Id: Makefile.in,v 1.1.2.7 2004/07/10 12:11:42 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/helpers/external_acl/winbind_group/Makefile.in squid-2.5.STABLE7/helpers/external_acl/winbind_group/Makefile.in
--- squid-2.5.STABLE6/helpers/external_acl/winbind_group/Makefile.in	Tue Jun  8 05:37:20 2004
+++ squid-2.5.STABLE7/helpers/external_acl/winbind_group/Makefile.in	Sat Jul 10 06:11:42 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the wb_group external_acl helper
 #
-#  $Id: Makefile.in,v 1.1.2.7 2004/06/08 11:37:20 hno Exp $
+#  $Id: Makefile.in,v 1.1.2.9 2004/07/10 12:11:42 hno Exp $
 #
 
 SHELL = @SHELL@
diff -ruN squid-2.5.STABLE6/helpers/ntlm_auth/Makefile.in squid-2.5.STABLE7/helpers/ntlm_auth/Makefile.in
--- squid-2.5.STABLE6/helpers/ntlm_auth/Makefile.in	Tue Jun  8 05:37:20 2004
+++ squid-2.5.STABLE7/helpers/ntlm_auth/Makefile.in	Sat Jul 10 06:11:44 2004
@@ -15,7 +15,7 @@
 
 #  Makefile for storage modules in the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.7.2.10 2004/06/08 11:37:20 hno Exp $
+#  $Id: Makefile.in,v 1.7.2.12 2004/07/10 12:11:44 hno Exp $
 #
 
 SHELL = @SHELL@
diff -ruN squid-2.5.STABLE6/helpers/ntlm_auth/SMB/Makefile.in squid-2.5.STABLE7/helpers/ntlm_auth/SMB/Makefile.in
--- squid-2.5.STABLE6/helpers/ntlm_auth/SMB/Makefile.in	Tue Jun  8 05:37:20 2004
+++ squid-2.5.STABLE7/helpers/ntlm_auth/SMB/Makefile.in	Sat Jul 10 06:11:45 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.8.2.9 2004/06/08 11:37:20 hno Exp $
+#  $Id: Makefile.in,v 1.8.2.11 2004/07/10 12:11:45 hno Exp $
 #
 
 SHELL = @SHELL@
diff -ruN squid-2.5.STABLE6/helpers/ntlm_auth/fakeauth/Makefile.in squid-2.5.STABLE7/helpers/ntlm_auth/fakeauth/Makefile.in
--- squid-2.5.STABLE6/helpers/ntlm_auth/fakeauth/Makefile.in	Tue Jun  8 05:37:20 2004
+++ squid-2.5.STABLE7/helpers/ntlm_auth/fakeauth/Makefile.in	Sat Jul 10 06:11:47 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.8.2.8 2004/06/08 11:37:20 hno Exp $
+#  $Id: Makefile.in,v 1.8.2.10 2004/07/10 12:11:47 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/helpers/ntlm_auth/fakeauth/fakeauth_auth.c squid-2.5.STABLE7/helpers/ntlm_auth/fakeauth/fakeauth_auth.c
--- squid-2.5.STABLE6/helpers/ntlm_auth/fakeauth/fakeauth_auth.c	Wed Aug 29 08:57:38 2001
+++ squid-2.5.STABLE7/helpers/ntlm_auth/fakeauth/fakeauth_auth.c	Fri Aug 20 02:09:58 2004
@@ -150,7 +150,7 @@
     o = WSWAP(str->offset);
 
     /* Sanity checks. XXX values arbitrarialy chosen */
-    if (l <= 0 || l >= 32 || o >= 256) {
+    if (l <= 0 || o <= 0 || l >= 32 || o >= 256) {
 	fprintf(stderr, "ntlmGetString: insane: l:%d o:%d\n", l, o);
 	return (NULL);
     }
diff -ruN squid-2.5.STABLE6/helpers/ntlm_auth/no_check/Makefile.in squid-2.5.STABLE7/helpers/ntlm_auth/no_check/Makefile.in
--- squid-2.5.STABLE6/helpers/ntlm_auth/no_check/Makefile.in	Tue Jun  8 05:37:21 2004
+++ squid-2.5.STABLE7/helpers/ntlm_auth/no_check/Makefile.in	Sat Jul 10 06:11:47 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.8.2.10 2004/06/08 11:37:21 hno Exp $
+#  $Id: Makefile.in,v 1.8.2.12 2004/07/10 12:11:47 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
diff -ruN squid-2.5.STABLE6/helpers/ntlm_auth/winbind/Makefile.in squid-2.5.STABLE7/helpers/ntlm_auth/winbind/Makefile.in
--- squid-2.5.STABLE6/helpers/ntlm_auth/winbind/Makefile.in	Tue Jun  8 05:37:21 2004
+++ squid-2.5.STABLE7/helpers/ntlm_auth/winbind/Makefile.in	Sat Jul 10 06:11:47 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.1.2.11 2004/06/08 11:37:21 hno Exp $
+#  $Id: Makefile.in,v 1.1.2.13 2004/07/10 12:11:47 hno Exp $
 #
 
 SHELL = @SHELL@
diff -ruN squid-2.5.STABLE6/icons/Makefile.in squid-2.5.STABLE7/icons/Makefile.in
--- squid-2.5.STABLE6/icons/Makefile.in	Tue Jun  8 05:37:22 2004
+++ squid-2.5.STABLE7/icons/Makefile.in	Sat Jul 10 06:11:47 2004
@@ -13,7 +13,7 @@
 
 @SET_MAKE@
 
-# $Id: Makefile.in,v 1.21.2.10 2004/06/08 11:37:22 hno Exp $
+# $Id: Makefile.in,v 1.21.2.12 2004/07/10 12:11:47 hno Exp $
 #
 
 SHELL = @SHELL@
diff -ruN squid-2.5.STABLE6/include/autoconf.h.in squid-2.5.STABLE7/include/autoconf.h.in
--- squid-2.5.STABLE6/include/autoconf.h.in	Tue Jun  8 05:37:22 2004
+++ squid-2.5.STABLE7/include/autoconf.h.in	Mon Aug  9 07:55:49 2004
@@ -470,6 +470,9 @@
 /* Define if you have the getspnam function.  */
 #undef HAVE_GETSPNAM
 
+/* Define if you have the initgroups function.  */
+#undef HAVE_INITGROUPS
+
 /* Define if you have the lrand48 function.  */
 #undef HAVE_LRAND48
 
diff -ruN squid-2.5.STABLE6/include/initgroups.h squid-2.5.STABLE7/include/initgroups.h
--- squid-2.5.STABLE6/include/initgroups.h	Wed Dec 31 17:00:00 1969
+++ squid-2.5.STABLE7/include/initgroups.h	Mon Aug  9 07:54:23 2004
@@ -0,0 +1,17 @@
+/*
+ * $Id: initgroups.h,v 1.1.2.1 2004/08/09 13:54:23 hno Exp $
+ */
+#ifndef SQUID_INITGROUPS_H
+#define SQUID_INITGROUPS_H
+
+/* if you have configure you can use this */
+#if defined(HAVE_CONFIG_H)
+#include "config.h"
+#endif
+
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+extern int initgroups(const char *user, gid_t group);
+#endif /* SQUID_INITGROPS_H */
diff -ruN squid-2.5.STABLE6/include/version.h squid-2.5.STABLE7/include/version.h
--- squid-2.5.STABLE6/include/version.h	Thu Jul  8 17:44:39 2004
+++ squid-2.5.STABLE7/include/version.h	Mon Oct 11 14:27:03 2004
@@ -9,5 +9,5 @@
  */
 
 #ifndef SQUID_RELEASE_TIME
-#define SQUID_RELEASE_TIME 1089330276
+#define SQUID_RELEASE_TIME 1097526420
 #endif
diff -ruN squid-2.5.STABLE6/lib/Makefile.am squid-2.5.STABLE7/lib/Makefile.am
--- squid-2.5.STABLE6/lib/Makefile.am	Wed Nov 21 16:47:12 2001
+++ squid-2.5.STABLE7/lib/Makefile.am	Mon Aug  9 07:57:00 2004
@@ -1,6 +1,6 @@
 ## Process this file with automake to produce Makefile.in
 #
-#  $Id: Makefile.am,v 1.3 2001/11/21 23:47:12 hno Exp $
+#  $Id: Makefile.am,v 1.3.2.2 2004/08/09 13:57:00 hno Exp $
 #
 
 if NEED_OWN_SNPRINTF
diff -ruN squid-2.5.STABLE6/lib/Makefile.in squid-2.5.STABLE7/lib/Makefile.in
--- squid-2.5.STABLE6/lib/Makefile.in	Tue Jun  8 05:37:22 2004
+++ squid-2.5.STABLE7/lib/Makefile.in	Wed Sep  1 04:30:29 2004
@@ -14,7 +14,7 @@
 @SET_MAKE@
 
 #
-#  $Id: Makefile.in,v 1.57.2.7 2004/06/08 11:37:22 hno Exp $
+#  $Id: Makefile.in,v 1.57.2.14 2004/09/01 10:30:29 hno Exp $
 #
 
 SHELL = @SHELL@
@@ -221,15 +221,15 @@
 @AMDEP_TRUE@	$(DEPDIR)/dlmalloc.Po $(DEPDIR)/drand48.Po \
 @AMDEP_TRUE@	$(DEPDIR)/getfullhostname.Po $(DEPDIR)/hash.Po \
 @AMDEP_TRUE@	$(DEPDIR)/heap.Po $(DEPDIR)/html_quote.Po \
-@AMDEP_TRUE@	$(DEPDIR)/inet_ntoa.Po $(DEPDIR)/iso3307.Po \
-@AMDEP_TRUE@	$(DEPDIR)/md5.Po $(DEPDIR)/ntlmauth.Po \
-@AMDEP_TRUE@	$(DEPDIR)/radix.Po $(DEPDIR)/rfc1035.Po \
-@AMDEP_TRUE@	$(DEPDIR)/rfc1123.Po $(DEPDIR)/rfc1738.Po \
-@AMDEP_TRUE@	$(DEPDIR)/rfc2617.Po $(DEPDIR)/safe_inet_addr.Po \
-@AMDEP_TRUE@	$(DEPDIR)/snprintf.Po $(DEPDIR)/splay.Po \
-@AMDEP_TRUE@	$(DEPDIR)/strerror.Po $(DEPDIR)/stub_memaccount.Po \
-@AMDEP_TRUE@	$(DEPDIR)/tempnam.Po $(DEPDIR)/util.Po \
-@AMDEP_TRUE@	$(DEPDIR)/uudecode.Po
+@AMDEP_TRUE@	$(DEPDIR)/inet_ntoa.Po $(DEPDIR)/initgroups.Po \
+@AMDEP_TRUE@	$(DEPDIR)/iso3307.Po $(DEPDIR)/md5.Po \
+@AMDEP_TRUE@	$(DEPDIR)/ntlmauth.Po $(DEPDIR)/radix.Po \
+@AMDEP_TRUE@	$(DEPDIR)/rfc1035.Po $(DEPDIR)/rfc1123.Po \
+@AMDEP_TRUE@	$(DEPDIR)/rfc1738.Po $(DEPDIR)/rfc2617.Po \
+@AMDEP_TRUE@	$(DEPDIR)/safe_inet_addr.Po $(DEPDIR)/snprintf.Po \
+@AMDEP_TRUE@	$(DEPDIR)/splay.Po $(DEPDIR)/strerror.Po \
+@AMDEP_TRUE@	$(DEPDIR)/stub_memaccount.Po $(DEPDIR)/tempnam.Po \
+@AMDEP_TRUE@	$(DEPDIR)/util.Po $(DEPDIR)/uudecode.Po
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 CCLD = $(CC)
@@ -238,8 +238,8 @@
 DIST_SOURCES = $(libdlmalloc_a_SOURCES) $(libmiscutil_a_SOURCES) \
 	$(EXTRA_libmiscutil_a_SOURCES) $(libntlmauth_a_SOURCES) \
 	$(libregex_a_SOURCES)
-DIST_COMMON = Makefile.am Makefile.in drand48.c inet_ntoa.c strerror.c \
-	tempnam.c
+DIST_COMMON = Makefile.am Makefile.in drand48.c inet_ntoa.c \
+	initgroups.c strerror.c tempnam.c
 SOURCES = $(libdlmalloc_a_SOURCES) $(libmiscutil_a_SOURCES) $(EXTRA_libmiscutil_a_SOURCES) $(libntlmauth_a_SOURCES) $(libregex_a_SOURCES)
 
 all: all-am
@@ -292,6 +292,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/heap.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/html_quote.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/inet_ntoa.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/initgroups.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/iso3307.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/md5.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ntlmauth.Po@am__quote@
diff -ruN squid-2.5.STABLE6/lib/initgroups.c squid-2.5.STABLE7/lib/initgroups.c
--- squid-2.5.STABLE6/lib/initgroups.c	Wed Dec 31 17:00:00 1969
+++ squid-2.5.STABLE7/lib/initgroups.c	Mon Aug  9 07:54:23 2004
@@ -0,0 +1,54 @@
+#include "config.h"
+
+#if HAVE_GRP_H
+#include <grp.h>
+#endif
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#endif
+#if HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#if HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+int initgroups(const char *name, gid_t basegid)
+{
+#ifdef HAVE_SETGROUPS
+#ifndef NGROUPS_MAX
+#define NGROUPS_MAX 16
+#endif
+    gid_t groups[NGROUPS_MAX];
+    struct group *g;
+    int index = 0;
+
+    setgrent();
+
+    groups[index++] = basegid;
+
+    while (index < NGROUPS_MAX && ((g = getgrent()) != NULL)) {
+	if (g->gr_gid != basegid) {
+	    char **names;
+
+	    for (names = g->gr_mem; *names != NULL; ++names) {
+		if (!strcmp(*names, name))
+		    groups[index++] = g->gr_gid;
+	    }
+	}
+    }
+
+    endgrent();
+
+    return setgroups(index, groups);
+#else
+    return 0;
+#endif /* def HAVE_SETGROUPS */
+}
+
diff -ruN squid-2.5.STABLE6/lib/ntlmauth.c squid-2.5.STABLE7/lib/ntlmauth.c
--- squid-2.5.STABLE6/lib/ntlmauth.c	Sun Jul 21 20:06:31 2002
+++ squid-2.5.STABLE7/lib/ntlmauth.c	Fri Aug 20 02:09:58 2004
@@ -1,5 +1,5 @@
 /*
- * $Id: ntlmauth.c,v 1.5.2.2 2002/07/22 02:06:31 hno Exp $
+ * $Id: ntlmauth.c,v 1.5.2.3 2004/08/20 08:09:58 hno Exp $
  *
  * * * * * * * * Legal stuff * * * * * * *
  *
@@ -84,7 +84,7 @@
     o = WSWAP(str->offset);
     /* debug("fetch_string(plength=%d,l=%d,o=%d)\n",length,l,o); */
 
-    if (l < 0 || l > MAX_FIELD_LENGTH || o + l > length || o == 0) {
+    if (l < 0 || o <= 0 || l > MAX_FIELD_LENGTH || o + l > length) {
 	/* debug("ntlmssp: insane data (l: %d, o: %d)\n", l,o); */
 	return rv;
     }
diff -ruN squid-2.5.STABLE6/snmplib/asn1.c squid-2.5.STABLE7/snmplib/asn1.c
--- squid-2.5.STABLE6/snmplib/asn1.c	Fri Apr  3 18:43:52 1998
+++ squid-2.5.STABLE7/snmplib/asn1.c	Fri Sep 24 16:11:29 2004
@@ -484,7 +484,7 @@
 	return (NULL);
 
     header_len = bufp - data;
-    if (header_len + asn_length > *datalength) {
+    if (header_len + asn_length > *datalength || (int) asn_length < 0) {
 	snmp_set_api_error(SNMPERR_ASN_DECODE);
 	return (NULL);
     }
diff -ruN squid-2.5.STABLE6/src/HttpHeader.c squid-2.5.STABLE7/src/HttpHeader.c
--- squid-2.5.STABLE6/src/HttpHeader.c	Thu Jul 17 16:06:12 2003
+++ squid-2.5.STABLE7/src/HttpHeader.c	Wed Sep  1 07:55:47 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpHeader.c,v 1.74.2.7 2003/07/17 22:06:12 wessels Exp $
+ * $Id: HttpHeader.c,v 1.74.2.9 2004/09/01 13:55:47 hno Exp $
  *
  * DEBUG: section 55    HTTP Header
  * AUTHOR: Alex Rousskov
@@ -77,6 +77,7 @@
     {"Cache-Control", HDR_CACHE_CONTROL, ftPCc},
     {"Connection", HDR_CONNECTION, ftStr},
     {"Content-Base", HDR_CONTENT_BASE, ftStr},
+    {"Content-Disposition", HDR_CONTENT_DISPOSITION, ftStr},
     {"Content-Encoding", HDR_CONTENT_ENCODING, ftStr},
     {"Content-Language", HDR_CONTENT_LANGUAGE, ftStr},
     {"Content-Length", HDR_CONTENT_LENGTH, ftInt},
@@ -178,9 +179,10 @@
 /* entity-headers */
 static http_hdr_type EntityHeadersArr[] =
 {
-    HDR_ALLOW, HDR_CONTENT_BASE, HDR_CONTENT_ENCODING, HDR_CONTENT_LANGUAGE,
-    HDR_CONTENT_LENGTH, HDR_CONTENT_LOCATION, HDR_CONTENT_MD5,
-    HDR_CONTENT_RANGE, HDR_CONTENT_TYPE, HDR_ETAG, HDR_EXPIRES, HDR_LAST_MODIFIED, HDR_LINK,
+    HDR_ALLOW, 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_ETAG, HDR_EXPIRES, HDR_LAST_MODIFIED, HDR_LINK,
     HDR_OTHER
 };
 
@@ -1243,5 +1245,5 @@
     if (!Headers)
 	Headers = httpHeaderBuildFieldsInfo(HeadersAttrs, HDR_ENUM_END);
     assert(id >= 0 && id < HDR_ENUM_END);
-    return HeadersAttrs[id].name;
+    return strBuf(Headers[id].name);
 }
diff -ruN squid-2.5.STABLE6/src/HttpHeaderTools.c squid-2.5.STABLE7/src/HttpHeaderTools.c
--- squid-2.5.STABLE6/src/HttpHeaderTools.c	Mon May 26 06:14:27 2003
+++ squid-2.5.STABLE7/src/HttpHeaderTools.c	Sat Sep 25 05:56:16 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpHeaderTools.c,v 1.32.2.2 2003/05/26 12:14:27 hno Exp $
+ * $Id: HttpHeaderTools.c,v 1.32.2.3 2004/09/25 11:56:16 hno Exp $
  *
  * DEBUG: section 66    HTTP Header Tools
  * AUTHOR: Alex Rousskov
@@ -422,13 +422,23 @@
 static int
 httpHdrMangle(HttpHeaderEntry * e, request_t * request)
 {
-    int retval;
+    int retval = 1;
 
     /* check with anonymizer tables */
     header_mangler *hm;
     aclCheck_t *checklist;
     assert(e);
-    hm = &Config.header_access[e->id];
+    if (e->id == HDR_OTHER) {
+	for (hm = Config.header_access[HDR_OTHER].next; hm; hm = hm->next) {
+	    if (strCmp(e->name, hm->name) == 0)
+		break;
+	}
+	if (!hm)
+	    return 1;
+    } else
+	hm = &Config.header_access[e->id];
+    if (!hm->access_list)
+	return 1;
     checklist = aclChecklistCreate(hm->access_list, request, NULL);
     if (1 == aclCheckFast(hm->access_list, checklist)) {
 	/* aclCheckFast returns 1 for allow. */
@@ -442,11 +452,11 @@
 	 * is allowed.
 	 */
 	stringReset(&e->value, hm->replacement);
-	retval = 1;
+	retval = -1;
     }
-
     aclChecklistFree(checklist);
-    return retval;
+
+    return retval != 0;
 }
 
 /* Mangles headers for a list of headers. */
diff -ruN squid-2.5.STABLE6/src/HttpReply.c squid-2.5.STABLE7/src/HttpReply.c
--- squid-2.5.STABLE6/src/HttpReply.c	Tue May  6 14:13:02 2003
+++ squid-2.5.STABLE7/src/HttpReply.c	Tue Oct  5 15:31:25 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpReply.c,v 1.49.2.1 2003/05/06 20:13:02 hno Exp $
+ * $Id: HttpReply.c,v 1.49.2.2 2004/10/05 21:31:25 hno Exp $
  *
  * DEBUG: section 58    HTTP Reply (Response)
  * AUTHOR: Alex Rousskov
@@ -143,16 +143,17 @@
      * becuase somebody may feed a non NULL-terminated buffer to
      * us.
      */
-    char *headers = memAllocate(MEM_4K_BUF);
+    MemBuf mb = MemBufNull;
     int success;
-    size_t s = XMIN(end + 1, 4096);
     /* reset current state, because we are not used in incremental fashion */
     httpReplyReset(rep);
     /* put a string terminator.  s is how many bytes to touch in
      * 'buf' including the terminating NULL. */
-    xstrncpy(headers, buf, s);
-    success = httpReplyParseStep(rep, headers, 0);
-    memFree(headers, MEM_4K_BUF);
+    memBufDefInit(&mb);
+    memBufAppend(&mb, buf, end);
+    memBufAppend(&mb, "\0", 1);
+    success = httpReplyParseStep(rep, mb.buf, 0);
+    memBufClean(&mb);
     return success == 1;
 }
 
diff -ruN squid-2.5.STABLE6/src/HttpRequest.c squid-2.5.STABLE7/src/HttpRequest.c
--- squid-2.5.STABLE6/src/HttpRequest.c	Fri Apr 13 18:25:17 2001
+++ squid-2.5.STABLE7/src/HttpRequest.c	Thu Oct  7 11:01:13 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpRequest.c,v 1.30 2001/04/14 00:25:17 hno Exp $
+ * $Id: HttpRequest.c,v 1.30.2.2 2004/10/07 17:01:13 hno Exp $
  *
  * DEBUG: section 73    HTTP Request
  * AUTHOR: Duane Wessels
@@ -55,8 +55,8 @@
 requestDestroy(request_t * req)
 {
     assert(req);
-    if (req->body_connection)
-	clientAbortBody(req);
+    if (req->body_reader)
+	requestAbortBody(req);
     if (req->auth_user_request)
 	authenticateAuthUserRequestUnlock(req->auth_user_request);
     safe_free(req->canonical);
@@ -157,4 +157,42 @@
     if (strConn && strListIsMember(strConn, strBuf(e->name), ','))
 	return 0;
     return 1;
+}
+
+/*
+ * Read request body contents
+ */
+void
+requestReadBody(request_t * request, char *buf, size_t size, CBCB * callback, void *cbdata)
+{
+    if (request->body_reader) {
+	if (cbdataValid(request->body_reader_data)) {
+	    request->body_reader(request, buf, size, callback, cbdata);
+	} else {
+	    debug(73, 1) ("requestReadBody: Aborted\n");
+	    request->body_reader = NULL;
+	    cbdataUnlock(request->body_reader_data);
+	    request->body_reader_data = NULL;
+	    callback(buf, 0, cbdata);	/* Signal end of body */
+	}
+    } else {
+	callback(buf, 0, cbdata);	/* Signal end of body */
+    }
+}
+
+void
+requestAbortBody(request_t * request)
+{
+    if (!request)
+	return;
+    if (request->body_reader) {
+	if (cbdataValid(request->body_reader_data)) {
+	    request->body_reader(request, NULL, -1, NULL, NULL);
+	} else {
+	    debug(73, 2) ("requestAbortBody: Aborted\n");
+	    request->body_reader = NULL;
+	    cbdataUnlock(request->body_reader_data);
+	    request->body_reader_data = NULL;
+	}
+    }
 }
diff -ruN squid-2.5.STABLE6/src/Makefile.am squid-2.5.STABLE7/src/Makefile.am
--- squid-2.5.STABLE6/src/Makefile.am	Sun Nov 10 08:30:03 2002
+++ squid-2.5.STABLE7/src/Makefile.am	Sat Sep 25 15:37:35 2004
@@ -1,7 +1,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.am,v 1.16.2.9 2002/11/10 15:30:03 hno Exp $
+#  $Id: Makefile.am,v 1.16.2.10 2004/09/25 21:37:35 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
@@ -273,16 +273,16 @@
 DEFAULT_PREFIX		= $(prefix)
 DEFAULT_CONFIG_FILE     = $(sysconfdir)/squid.conf
 DEFAULT_MIME_TABLE	= $(sysconfdir)/mime.conf
-DEFAULT_DNSSERVER       = $(libexecdir)/dnsserver$(EXEEXT)
+DEFAULT_DNSSERVER       = $(libexecdir)/`echo dnsserver | sed '$(transform);s/$$/$(EXEEXT)/'`
 DEFAULT_LOG_PREFIX	= $(localstatedir)/logs
 DEFAULT_CACHE_LOG       = $(DEFAULT_LOG_PREFIX)/cache.log
 DEFAULT_ACCESS_LOG      = $(DEFAULT_LOG_PREFIX)/access.log
 DEFAULT_STORE_LOG       = $(DEFAULT_LOG_PREFIX)/store.log
 DEFAULT_PID_FILE        = $(DEFAULT_LOG_PREFIX)/squid.pid
 DEFAULT_SWAP_DIR        = $(localstatedir)/cache
-DEFAULT_PINGER		= $(libexecdir)/pinger$(EXEEXT)
-DEFAULT_UNLINKD		= $(libexecdir)/unlinkd$(EXEEXT)
-DEFAULT_DISKD		= $(libexecdir)/diskd$(EXEEXT)
+DEFAULT_PINGER		= $(libexecdir)/`echo pinger | sed '$(transform);s/$$/$(EXEEXT)/'`
+DEFAULT_UNLINKD		= $(libexecdir)/`echo unlinkd | sed '$(transform);s/$$/$(EXEEXT)/'`
+DEFAULT_DISKD		= $(libexecdir)/`echo diskd | sed '$(transform);s/$$/$(EXEEXT)/'`
 DEFAULT_ICON_DIR	= $(datadir)/icons
 DEFAULT_ERROR_DIR	= $(datadir)/errors/@ERR_DEFAULT_LANGUAGE@
 DEFAULT_MIB_PATH	= $(datadir)/mib.txt
diff -ruN squid-2.5.STABLE6/src/Makefile.in squid-2.5.STABLE7/src/Makefile.in
--- squid-2.5.STABLE6/src/Makefile.in	Tue Jun  8 05:37:22 2004
+++ squid-2.5.STABLE7/src/Makefile.in	Sat Sep 25 15:37:59 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.225.2.14 2004/06/08 11:37:22 hno Exp $
+#  $Id: Makefile.in,v 1.225.2.20 2004/09/25 21:37:59 hno Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
@@ -375,16 +375,16 @@
 DEFAULT_PREFIX = $(prefix)
 DEFAULT_CONFIG_FILE = $(sysconfdir)/squid.conf
 DEFAULT_MIME_TABLE = $(sysconfdir)/mime.conf
-DEFAULT_DNSSERVER = $(libexecdir)/dnsserver$(EXEEXT)
+DEFAULT_DNSSERVER = $(libexecdir)/`echo dnsserver | sed '$(transform);s/$$/$(EXEEXT)/'`
 DEFAULT_LOG_PREFIX = $(localstatedir)/logs
 DEFAULT_CACHE_LOG = $(DEFAULT_LOG_PREFIX)/cache.log
 DEFAULT_ACCESS_LOG = $(DEFAULT_LOG_PREFIX)/access.log
 DEFAULT_STORE_LOG = $(DEFAULT_LOG_PREFIX)/store.log
 DEFAULT_PID_FILE = $(DEFAULT_LOG_PREFIX)/squid.pid
 DEFAULT_SWAP_DIR = $(localstatedir)/cache
-DEFAULT_PINGER = $(libexecdir)/pinger$(EXEEXT)
-DEFAULT_UNLINKD = $(libexecdir)/unlinkd$(EXEEXT)
-DEFAULT_DISKD = $(libexecdir)/diskd$(EXEEXT)
+DEFAULT_PINGER = $(libexecdir)/`echo pinger | sed '$(transform);s/$$/$(EXEEXT)/'`
+DEFAULT_UNLINKD = $(libexecdir)/`echo unlinkd | sed '$(transform);s/$$/$(EXEEXT)/'`
+DEFAULT_DISKD = $(libexecdir)/`echo diskd | sed '$(transform);s/$$/$(EXEEXT)/'`
 DEFAULT_ICON_DIR = $(datadir)/icons
 DEFAULT_ERROR_DIR = $(datadir)/errors/@ERR_DEFAULT_LANGUAGE@
 DEFAULT_MIB_PATH = $(datadir)/mib.txt
diff -ruN squid-2.5.STABLE6/src/MemBuf.c squid-2.5.STABLE7/src/MemBuf.c
--- squid-2.5.STABLE6/src/MemBuf.c	Sun Jun  6 09:07:16 2004
+++ squid-2.5.STABLE7/src/MemBuf.c	Tue Oct  5 15:31:25 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: MemBuf.c,v 1.28.2.2 2004/06/06 15:07:16 hno Exp $
+ * $Id: MemBuf.c,v 1.28.2.3 2004/10/05 21:31:25 hno Exp $
  *
  * DEBUG: section 59    auto-growing Memory Buffer with printf
  * AUTHOR: Alex Rousskov
@@ -158,7 +158,7 @@
     (*mb->freefunc) (mb->buf);	/* free */
     mb->freefunc = NULL;	/* freeze */
     mb->buf = NULL;
-    mb->size = mb->capacity = 0;
+    mb->size = mb->capacity = mb->max_capacity = 0;
 }
 
 /* cleans the buffer without changing its capacity 
diff -ruN squid-2.5.STABLE6/src/access_log.c squid-2.5.STABLE7/src/access_log.c
--- squid-2.5.STABLE6/src/access_log.c	Mon Jun  7 15:20:34 2004
+++ squid-2.5.STABLE7/src/access_log.c	Mon Sep 27 16:34:19 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: access_log.c,v 1.72.2.5 2004/06/07 21:20:34 hno Exp $
+ * $Id: access_log.c,v 1.72.2.6 2004/09/27 22:34:19 wessels Exp $
  *
  * DEBUG: section 46    Access Log
  * AUTHOR: Duane Wessels
@@ -389,7 +389,7 @@
     logfile = logfileOpen(Config.Log.access, MAX_URL << 1, 1);
     LogfileStatus = LOG_ENABLE;
 #if HEADERS_LOG
-    headerslog = logfileOpen("/usr/local/squid/logs/headers.log", 512);
+    headerslog = logfileOpen("/usr/local/squid/logs/headers.log", MAX_URL << 1, 0);
     assert(NULL != headerslog);
 #endif
 #if FORW_VIA_DB
diff -ruN squid-2.5.STABLE6/src/acl.c squid-2.5.STABLE7/src/acl.c
--- squid-2.5.STABLE6/src/acl.c	Fri Feb 27 09:36:35 2004
+++ squid-2.5.STABLE7/src/acl.c	Sat Sep 25 05:56:16 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: acl.c,v 1.270.2.27 2004/02/27 16:36:35 wessels Exp $
+ * $Id: acl.c,v 1.270.2.29 2004/09/25 11:56:16 hno Exp $
  *
  * DEBUG: section 28    Access Control
  * AUTHOR: Duane Wessels
@@ -65,6 +65,8 @@
 static void aclDestroyUserMaxIP(void *data);
 static wordlist *aclDumpUserMaxIP(void *data);
 static int aclMatchUserMaxIP(void *, auth_user_request_t *, struct in_addr);
+static void aclParseHeader(void *data);
+static void aclDestroyHeader(void *data);
 static squid_acl aclStrToType(const char *s);
 static int decode_addr(const char *, struct in_addr *, struct in_addr *);
 static void aclCheck(aclCheck_t * checklist);
@@ -174,6 +176,10 @@
 	return ACL_REQ_MIME_TYPE;
     if (!strcmp(s, "rep_mime_type"))
 	return ACL_REP_MIME_TYPE;
+    if (!strcmp(s, "rep_header"))
+	return ACL_REP_HEADER;
+    if (!strcmp(s, "req_header"))
+	return ACL_REQ_HEADER;
     if (!strcmp(s, "max_user_ip"))
 	return ACL_MAX_USER_IP;
     if (!strcmp(s, "external"))
@@ -250,6 +256,10 @@
 	return "req_mime_type";
     if (type == ACL_REP_MIME_TYPE)
 	return "rep_mime_type";
+    if (type == ACL_REP_HEADER)
+	return "rep_header";
+    if (type == ACL_REQ_HEADER)
+	return "req_header";
     if (type == ACL_MAX_USER_IP)
 	return "max_user_ip";
     if (type == ACL_EXTERNAL)
@@ -503,36 +513,36 @@
     acl_time_data **Tail;
     int h1, m1, h2, m2;
     char *t = NULL;
+    long weekbits = 0;
     for (Tail = curlist; *Tail; Tail = &((*Tail)->next));
-    q = memAllocate(MEM_ACL_TIME_DATA);
     while ((t = strtokFile())) {
 	if (*t < '0' || *t > '9') {
 	    /* assume its day-of-week spec */
 	    while (*t) {
 		switch (*t++) {
 		case 'S':
-		    q->weekbits |= ACL_SUNDAY;
+		    weekbits |= ACL_SUNDAY;
 		    break;
 		case 'M':
-		    q->weekbits |= ACL_MONDAY;
+		    weekbits |= ACL_MONDAY;
 		    break;
 		case 'T':
-		    q->weekbits |= ACL_TUESDAY;
+		    weekbits |= ACL_TUESDAY;
 		    break;
 		case 'W':
-		    q->weekbits |= ACL_WEDNESDAY;
+		    weekbits |= ACL_WEDNESDAY;
 		    break;
 		case 'H':
-		    q->weekbits |= ACL_THURSDAY;
+		    weekbits |= ACL_THURSDAY;
 		    break;
 		case 'F':
-		    q->weekbits |= ACL_FRIDAY;
+		    weekbits |= ACL_FRIDAY;
 		    break;
 		case 'A':
-		    q->weekbits |= ACL_SATURDAY;
+		    weekbits |= ACL_SATURDAY;
 		    break;
 		case 'D':
-		    q->weekbits |= ACL_WEEKDAYS;
+		    weekbits |= ACL_WEEKDAYS;
 		    break;
 		case '-':
 		    /* ignore placeholder */
@@ -553,8 +563,11 @@
 		memFree(q, MEM_ACL_TIME_DATA);
 		return;
 	    }
+	    q = memAllocate(MEM_ACL_TIME_DATA);
 	    q->start = h1 * 60 + m1;
 	    q->stop = h2 * 60 + m2;
+	    q->weekbits = weekbits;
+	    weekbits = 0;
 	    if (q->start > q->stop) {
 		debug(28, 0) ("%s line %d: %s\n",
 		    cfg_filename, config_lineno, config_input_line);
@@ -562,14 +575,20 @@
 		memFree(q, MEM_ACL_TIME_DATA);
 		return;
 	    }
+	    if (q->weekbits == 0)
+		q->weekbits = ACL_ALLWEEK;
+	    *(Tail) = q;
+	    Tail = &q->next;
 	}
     }
-    if (q->start == 0 && q->stop == 0)
-	q->stop = 23 * 60 + 59;
-    if (q->weekbits == 0)
-	q->weekbits = ACL_ALLWEEK;
-    *(Tail) = q;
-    Tail = &q->next;
+    if (weekbits) {
+	q = memAllocate(MEM_ACL_TIME_DATA);
+	q->start = 0 * 60 + 0;
+	q->stop = 24 * 60 + 0;
+	q->weekbits = weekbits;
+	*(Tail) = q;
+	Tail = &q->next;
+    }
 }
 
 void
@@ -608,6 +627,81 @@
     }
 }
 
+static void
+aclParseHeader(void *data)
+{
+    char *t;
+    acl_hdr_data **hd = data;
+    acl_hdr_data *q;
+
+    t = strtokFile();
+    if (NULL == t) {
+	debug(28, 0) ("%s line %d: %s\n", cfg_filename, config_lineno, config_input_line);
+	debug(28, 0) ("aclParseHeader: No data defined '%s'\n", t);
+	return;
+    }
+    q = xcalloc(1, sizeof(acl_hdr_data));
+    q->hdr_name = xstrdup(t);
+    q->hdr_id = httpHeaderIdByNameDef(t, strlen(t));
+    aclParseRegexList(q->reglist);
+    if (!q->reglist) {
+	debug(28, 0) ("%s line %d: %s\n", cfg_filename, config_lineno, config_input_line);
+	debug(28, 0) ("aclParseHeader: No pattern defined '%s'\n", t);
+	aclDestroyHeader(&q);
+	return;
+    }
+    while (*hd)
+	hd = &(*hd)->next;
+    *hd = q;
+}
+
+static int
+aclMatchHeader(acl_hdr_data * hdrs, const HttpHeader * hdr)
+{
+    acl_hdr_data *hd;
+    for (hd = hdrs; hd; hd = hd->next) {
+	int ret;
+	String header;
+	if (hd->hdr_id != -1)
+	    header = httpHeaderGetStrOrList(hdr, hd->hdr_id);
+	else
+	    header = httpHeaderGetByName(hdr, hd->hdr_name);
+	if (!strBuf(header))
+	    continue;
+	ret = aclMatchRegex(hd->reglist, strBuf(header));
+	stringClean(&header);
+	if (ret)
+	    return 1;
+    }
+    return 0;
+}
+
+void
+aclDestroyHeader(void *data)
+{
+    acl_hdr_data **acldata = data;
+    while (*acldata) {
+	acl_hdr_data *q = *acldata;
+	*acldata = q->next;
+	if (q->reglist)
+	    aclDestroyRegexList((*acldata)->reglist);
+	safe_free(q);
+    }
+}
+
+static wordlist *
+aclDumpHeader(acl_hdr_data * hd)
+{
+    wordlist *W = NULL;
+    relist *data = hd->reglist;
+    wordlistAdd(&W, httpHeaderNameById(hd->hdr_id));
+    while (data != NULL) {
+	wordlistAdd(&W, data->pattern);
+	data = data->next;
+    }
+    return aclDumpRegexList(hd->reglist);
+}
+
 #if SQUID_SNMP
 static void
 aclParseWordList(void *curlist)
@@ -754,6 +848,10 @@
     case ACL_REP_MIME_TYPE:
 	aclParseRegexList(&A->data);
 	break;
+    case ACL_REP_HEADER:
+    case ACL_REQ_HEADER:
+	aclParseHeader(&A->data);
+	break;
     case ACL_SRC_ASN:
     case ACL_MAXCONN:
     case ACL_DST_ASN:
@@ -1473,6 +1571,8 @@
     case ACL_PROXY_AUTH_REGEX:
     case ACL_REP_MIME_TYPE:
     case ACL_REQ_MIME_TYPE:
+    case ACL_REP_HEADER:
+    case ACL_REQ_HEADER:
     case ACL_URLPATH_REGEX:
     case ACL_URL_PORT:
     case ACL_URL_REGEX:
@@ -1693,6 +1793,14 @@
 	    header = "";
 	return aclMatchRegex(ae->data, header);
 	/* NOTREACHED */
+    case ACL_REP_HEADER:
+	if (!checklist->reply)
+	    return 0;
+	return aclMatchHeader(ae->data, &checklist->reply->header);
+	/* NOTREACHED */
+    case ACL_REQ_HEADER:
+	return aclMatchHeader(ae->data, &checklist->request->header);
+	/* NOTREACHED */
     case ACL_EXTERNAL:
 	return aclMatchExternal(ae->data, checklist);
 	/* NOTREACHED */
@@ -2163,6 +2271,10 @@
 	case ACL_REQ_MIME_TYPE:
 	    aclDestroyRegexList(a->data);
 	    break;
+	case ACL_REP_HEADER:
+	case ACL_REQ_HEADER:
+	    aclDestroyHeader(a->data);
+	    break;
 	case ACL_PROTO:
 	case ACL_METHOD:
 	case ACL_SRC_ASN:
@@ -2578,6 +2690,9 @@
     case ACL_REQ_MIME_TYPE:
     case ACL_REP_MIME_TYPE:
 	return aclDumpRegexList(a->data);
+    case ACL_REQ_HEADER:
+    case ACL_REP_HEADER:
+	return aclDumpHeader(a->data);
     case ACL_SRC_ASN:
     case ACL_MAXCONN:
     case ACL_DST_ASN:
diff -ruN squid-2.5.STABLE6/src/auth/Makefile.in squid-2.5.STABLE7/src/auth/Makefile.in
--- squid-2.5.STABLE6/src/auth/Makefile.in	Tue Jun  8 05:37:22 2004
+++ squid-2.5.STABLE7/src/auth/Makefile.in	Sat Jul 10 06:11:49 2004
@@ -15,7 +15,7 @@
 
 #  Makefile for authentication modules in the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.6.2.7 2004/06/08 11:37:22 hno Exp $
+#  $Id: Makefile.in,v 1.6.2.9 2004/07/10 12:11:49 hno Exp $
 #
 
 SHELL = @SHELL@
diff -ruN squid-2.5.STABLE6/src/auth/basic/auth_basic.c squid-2.5.STABLE7/src/auth/basic/auth_basic.c
--- squid-2.5.STABLE6/src/auth/basic/auth_basic.c	Sat Apr 17 19:29:52 2004
+++ squid-2.5.STABLE7/src/auth/basic/auth_basic.c	Sat Sep 25 15:03:49 2004
@@ -1,5 +1,5 @@
 /*
- * $Id: auth_basic.c,v 1.14.2.6 2004/04/18 01:29:52 hno Exp $
+ * $Id: auth_basic.c,v 1.14.2.8 2004/09/25 21:03:49 hno Exp $
  *
  * DEBUG: section 29    Authenticator
  * AUTHOR: Duane Wessels
@@ -309,10 +309,11 @@
 	storeAppendPrintf(entry, " %s", list->key);
 	list = list->next;
     }
-    storeAppendPrintf(entry, "\n%s %s realm %s\n%s %s children %d\n%s %s credentialsttl %d seconds\n",
+    storeAppendPrintf(entry, "\n%s %s realm %s\n%s %s children %d\n%s %s credentialsttl %d seconds\n%s %s casesensitive %s\n",
 	name, "basic", config->basicAuthRealm,
 	name, "basic", config->authenticateChildren,
-	name, "basic", (int) config->credentialsTTL);
+	name, "basic", (int) config->credentialsTTL,
+	name, "basic", config->casesensitive ? "on" : "off");
 
 }
 
@@ -341,6 +342,8 @@
 	parse_eol(&basicConfig->basicAuthRealm);
     } else if (strcasecmp(param_str, "credentialsttl") == 0) {
 	parse_time_t(&basicConfig->credentialsTTL);
+    } else if (strcasecmp(param_str, "casesensitive") == 0) {
+	parse_onoff(&basicConfig->casesensitive);
     } else {
 	debug(28, 0) ("unrecognised basic auth scheme parameter '%s'\n", param_str);
     }
@@ -486,6 +489,8 @@
 	local_basic.passwd = xstrndup(cleartext, USER_IDENT_SZ);
     }
 
+    if (!basicConfig->casesensitive)
+	Tolower(local_basic.username);
     /* now lookup and see if we have a matching auth_user structure in memory. */
 
     if ((auth_user = authBasicAuthUserFindUsername(local_basic.username)) == NULL) {
diff -ruN squid-2.5.STABLE6/src/auth/basic/auth_basic.h squid-2.5.STABLE7/src/auth/basic/auth_basic.h
--- squid-2.5.STABLE6/src/auth/basic/auth_basic.h	Wed Feb 18 10:50:51 2004
+++ squid-2.5.STABLE7/src/auth/basic/auth_basic.h	Sat Jul 17 13:53:25 2004
@@ -41,6 +41,7 @@
     char *basicAuthRealm;
     wordlist *authenticate;
     time_t credentialsTTL;
+    int casesensitive;
 };
 
 typedef struct _auth_basic_config auth_basic_config;
diff -ruN squid-2.5.STABLE6/src/auth/digest/auth_digest.c squid-2.5.STABLE7/src/auth/digest/auth_digest.c
--- squid-2.5.STABLE6/src/auth/digest/auth_digest.c	Sat Apr 17 19:29:52 2004
+++ squid-2.5.STABLE7/src/auth/digest/auth_digest.c	Sat Aug 28 16:31:15 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: auth_digest.c,v 1.10.2.12 2004/04/18 01:29:52 hno Exp $
+ * $Id: auth_digest.c,v 1.10.2.13 2004/08/28 22:31:15 hno Exp $
  *
  * DEBUG: section 29    Authenticator
  * AUTHOR: Robert Collins
@@ -893,7 +893,7 @@
     if (reply) {
 	if ((t = strchr(reply, ' ')))
 	    *t = '\0';
-	if (*reply == '\0')
+	if (*reply == '\0' || *reply == '\n')
 	    reply = NULL;
     }
     assert(r->auth_user_request != NULL);
@@ -903,7 +903,7 @@
     digest_user = auth_user_request->auth_user->scheme_data;
     if (reply && (strncasecmp(reply, "ERR", 3) == 0))
 	digest_request->flags.credentials_ok = 3;
-    else {
+    else if (reply) {
 	CvtBin(reply, digest_user->HA1);
 	digest_user->HA1created = 1;
     }
diff -ruN squid-2.5.STABLE6/src/auth/ntlm/auth_ntlm.c squid-2.5.STABLE7/src/auth/ntlm/auth_ntlm.c
--- squid-2.5.STABLE6/src/auth/ntlm/auth_ntlm.c	Sat Apr 17 19:29:52 2004
+++ squid-2.5.STABLE7/src/auth/ntlm/auth_ntlm.c	Wed Aug 25 14:27:27 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: auth_ntlm.c,v 1.17.2.12 2004/04/18 01:29:52 hno Exp $
+ * $Id: auth_ntlm.c,v 1.17.2.18 2004/08/25 20:27:27 hno Exp $
  *
  * DEBUG: section 29    NTLM Authenticator
  * AUTHOR: Robert Collins
@@ -87,10 +87,12 @@
 static MemPool *ntlm_helper_state_pool = NULL;
 static MemPool *ntlm_user_pool = NULL;
 static MemPool *ntlm_request_pool = NULL;
+static MemPool *ntlm_challenge_pool = NULL;
 static auth_ntlm_config *ntlmConfig = NULL;
 
-static hash_table *proxy_auth_cache = NULL;
+static hash_table *ntlm_challenge_cache = NULL;
 
+static void authenticateNTLMReleaseServer(ntlm_request_t * ntlm_request);
 /*
  *
  * Private Functions
@@ -249,9 +251,10 @@
 	if (ntlmauthenticators == NULL)
 	    ntlmauthenticators = helperStatefulCreate("ntlmauthenticator");
 	if (ntlmConfig->challengeuses) {
-	    if (!proxy_auth_cache)
-		proxy_auth_cache = hash_create((HASHCMP *) strcmp, 7921, hash_string);
-	    assert(proxy_auth_cache);
+	    if (!ntlm_challenge_cache)
+		ntlm_challenge_cache = hash_create((HASHCMP *) strcmp, 7921, hash_string);
+	    if (!ntlm_challenge_pool)
+		ntlm_challenge_pool = memPoolCreate("NTLM Challenge Cache", sizeof(ntlm_challenge_hash_pointer));
 	}
 	ntlmauthenticators->cmdline = ntlmConfig->authenticate;
 	ntlmauthenticators->n_to_start = ntlmConfig->authenticateChildren;
@@ -379,8 +382,7 @@
 	xfree(ntlm_request->ntlmauthenticate);
     if (ntlm_request->authserver != NULL) {
 	debug(29, 9) ("authenticateNTLMRequestFree: releasing server '%p'\n", ntlm_request->authserver);
-	helperStatefulReleaseServer(ntlm_request->authserver);
-	ntlm_request->authserver = NULL;
+	authenticateNTLMReleaseServer(ntlm_request);
     }
     memPoolFree(ntlm_request_pool, ntlm_request);
 }
@@ -393,28 +395,19 @@
     auth_user_request->scheme_data = NULL;
 }
 
+static void authenticateNTLMChallengeCacheRemoveLink(ntlm_challenge_hash_pointer * challenge_hash);
+
 static void
 authenticateNTLMFreeUser(auth_user_t * auth_user)
 {
-    dlink_node *link, *tmplink;
     ntlm_user_t *ntlm_user = auth_user->scheme_data;
-    auth_user_hash_pointer *proxy_auth_hash;
 
     debug(29, 5) ("authenticateNTLMFreeUser: Clearing NTLM scheme data\n");
     if (ntlm_user->username)
 	xfree(ntlm_user->username);
     /* were they linked in by one or more proxy-authenticate headers */
-    link = ntlm_user->proxy_auth_list.head;
-    while (link) {
-	debug(29, 9) ("authenticateFreeProxyAuthUser: removing proxy_auth hash entry '%p'\n", link->data);
-	proxy_auth_hash = link->data;
-	tmplink = link;
-	link = link->next;
-	dlinkDelete(tmplink, &ntlm_user->proxy_auth_list);
-	hash_remove_link(proxy_auth_cache, (hash_link *) proxy_auth_hash);
-	/* free the key (usually the proxy_auth header) */
-	xfree(proxy_auth_hash->key);
-	memFree(proxy_auth_hash, MEM_AUTH_USER_HASH);
+    while (ntlm_user->challenge_list.head) {
+	authenticateNTLMChallengeCacheRemoveLink(ntlm_user->challenge_list.head->data);
     }
     memPoolFree(ntlm_user_pool, ntlm_user);
     auth_user->scheme_data = NULL;
@@ -427,6 +420,10 @@
     helper_stateful_server *server = ntlm_request->authserver;
     debug(29, 9) ("authenticateNTLMReleaseServer: releasing server '%p'\n", server);
     ntlm_request->authserver = NULL;
+    if (!ntlmConfig->challengeuses) {
+	ntlm_helper_state_t *helperstate = helperStatefulServerGetData(server);
+	helperstate->starve = 1;
+    }
     helperStatefulReleaseServer(server);
 }
 
@@ -436,7 +433,7 @@
 {
     helper_stateful_server *server = ntlm_request->authserver;
     ntlm_helper_state_t *helperstate = helperStatefulServerGetData(server);
-    debug(29, 9) ("authenticateNTLMReleaseServer: releasing server '%p'\n", server);
+    debug(29, 9) ("authenticateNTLMResetServer: releasing server '%p'\n", server);
     ntlm_request->authserver = NULL;
     helperstate->starve = 1;
     helperStatefulReleaseServer(server);
@@ -505,13 +502,13 @@
 	helperstate = helperStatefulServerGetData(srv);
 	if (helperstate == NULL)
 	    fatal("lost NTLM helper state! quitting\n");
-	helperstate->challenge = xstrndup(reply, NTLM_CHALLENGE_SZ + 5);
+	helperstate->challenge = xstrdup(reply);
 	helperstate->renewed = squid_curtime;
 	/* and we satisfy the request that happended on the refresh boundary */
 	/* note this code is now in two places FIXME */
 	assert(ntlm_request->auth_state == AUTHENTICATE_STATE_NEGOTIATE);
 	ntlm_request->authserver = srv;
-	ntlm_request->authchallenge = xstrndup(reply, NTLM_CHALLENGE_SZ + 5);
+	ntlm_request->authchallenge = xstrdup(reply);
 	helperstate->challengeuses = 1;
     } else if (strncasecmp(reply, "AF ", 3) == 0) {
 	/* we're finished, release the helper */
@@ -521,9 +518,7 @@
 	assert(ntlm_user != NULL);
 	/* we only expect OK when finishing the handshake */
 	assert(ntlm_request->auth_state == AUTHENTICATE_STATE_RESPONSE);
-	ntlm_user->username = xstrndup(reply, MAX_LOGIN_SZ);
-	ntlm_request->authserver = NULL;
-	helperStatefulReleaseServer(srv);
+	ntlm_user->username = xstrdup(reply);
 #ifdef NTLM_FAIL_OPEN
     } else if (strncasecmp(reply, "LD ", 3) == 0) {
 	/* This is a variant of BH, which rather than deny access
@@ -541,7 +536,7 @@
 	assert(ntlm_user != NULL);
 	/* we only expect LD when finishing the handshake */
 	assert(ntlm_request->auth_state == AUTHENTICATE_STATE_RESPONSE);
-	ntlm_user->username = xstrndup(reply, MAX_LOGIN_SZ);
+	ntlm_user->username = xstrdup(reply);
 	helperstate = helperStatefulServerGetData(ntlm_request->authserver);
 	/* BH code: mark helper as broken */
 	authenticateNTLMResetServer(ntlm_request);
@@ -699,7 +694,7 @@
 	    while ((server != NULL) && authenticateNTLMChangeChallenge_p(helperstate)) {
 		/* flag this helper for challenge changing */
 		helperstate->starve = 1;
-		helperStatefulReset(server);
+		helperStatefulReleaseServer(server);
 		/* Get another server */
 		server = helperStatefulGetServer(ntlmauthenticators);
 		helperstate = server ? helperStatefulServerGetData(server) : NULL;
@@ -734,12 +729,14 @@
 		helperStatefulSubmit(ntlmauthenticators, buf, authenticateNTLMHandleReply, r, ntlm_request->authserver);
 	    }
 	} else {
+	    if (!ntlmConfig->challengeuses)
+		debug(29, 0) ("authenticateNTLMStart: Reused challenge in server %p even if challenge reuse is disabled!", server);
 	    /* (server != NULL and we have a valid challenge) */
 	    /* TODO: turn the below into a function and call from here and handlereply */
 	    /* increment the challenge uses */
 	    helperstate->challengeuses++;
 	    /* assign the challenge */
-	    ntlm_request->authchallenge = xstrndup(helperstate->challenge, NTLM_CHALLENGE_SZ + 5);
+	    ntlm_request->authchallenge = xstrdup(helperstate->challenge);
 	    handler(data, NULL);
 	}
 
@@ -792,6 +789,9 @@
 	statedata->renewed = 0;
 	xfree(statedata->challenge);
 	statedata->challenge = NULL;
+	while (statedata->user_list.head) {
+	    authenticateNTLMChallengeCacheRemoveLink(statedata->user_list.head->data);
+	}
     }
 }
 
@@ -880,24 +880,34 @@
  * Check for this and if found ignore the new link 
  */
 static void
-authenticateProxyAuthCacheAddLink(const char *key, auth_user_t * auth_user)
+authenticateNTLMChallengeCacheAddLink(const char *key, auth_user_t * auth_user, helper_stateful_server * auth_server)
 {
-    auth_user_hash_pointer *proxy_auth_hash;
-    dlink_node *node;
+    ntlm_challenge_hash_pointer *challenge_hash;
     ntlm_user_t *ntlm_user;
+    ntlm_helper_state_t *helperstate = helperStatefulServerGetData(auth_server);
     ntlm_user = auth_user->scheme_data;
-    node = ntlm_user->proxy_auth_list.head;
     /* prevent duplicates */
-    while (node) {
-	if (!strcmp(key, ((auth_user_hash_pointer *) node->data)->key))
-	    return;
-	node = node->next;
-    }
-    proxy_auth_hash = memAllocate(MEM_AUTH_USER_HASH);
-    proxy_auth_hash->key = xstrdup(key);
-    proxy_auth_hash->auth_user = auth_user;
-    dlinkAddTail(proxy_auth_hash, &proxy_auth_hash->link, &ntlm_user->proxy_auth_list);
-    hash_join(proxy_auth_cache, (hash_link *) proxy_auth_hash);
+    if (hash_lookup(ntlm_challenge_cache, key))
+	return;
+    challenge_hash = memPoolAlloc(ntlm_challenge_pool);
+    challenge_hash->key = xstrdup(key);
+    challenge_hash->user.auth_user = auth_user;
+    dlinkAddTail(challenge_hash, &challenge_hash->user.link, &ntlm_user->challenge_list);
+    challenge_hash->challenge.authserver = auth_server;
+    dlinkAddTail(challenge_hash, &challenge_hash->challenge.link, &helperstate->user_list);
+    hash_join(ntlm_challenge_cache, (hash_link *) challenge_hash);
+}
+
+static void
+authenticateNTLMChallengeCacheRemoveLink(ntlm_challenge_hash_pointer * challenge_hash)
+{
+    ntlm_user_t *ntlm_user = challenge_hash->user.auth_user->scheme_data;
+    ntlm_helper_state_t *helperstate = helperStatefulServerGetData(challenge_hash->challenge.authserver);
+    hash_remove_link(ntlm_challenge_cache, (hash_link *) challenge_hash);
+    dlinkDelete(&challenge_hash->user.link, &ntlm_user->challenge_list);
+    dlinkDelete(&challenge_hash->challenge.link, &helperstate->user_list);
+    xfree(challenge_hash->key);
+    memPoolFree(ntlm_challenge_pool, challenge_hash);
 }
 
 
@@ -915,10 +925,12 @@
 authenticateNTLMAuthenticateUser(auth_user_request_t * auth_user_request, request_t * request, ConnStateData * conn, http_hdr_type type)
 {
     const char *proxy_auth;
-    auth_user_hash_pointer *usernamehash, *proxy_auth_hash = NULL;
+    auth_user_hash_pointer *usernamehash;
+    ntlm_challenge_hash_pointer *challenge_hash = NULL;
     auth_user_t *auth_user;
     ntlm_request_t *ntlm_request;
     ntlm_user_t *ntlm_user;
+    void *srv;
     LOCAL_ARRAY(char, ntlmhash, NTLM_CHALLENGE_SZ * 2);
     /* get header */
     proxy_auth = httpHeaderGetStr(&request->header, type);
@@ -942,7 +954,7 @@
 	/* we've recieved a negotiate request. pass to a helper */
 	debug(29, 9) ("authenticateNTLMAuthenticateUser: auth state ntlm none. %s\n", proxy_auth);
 	ntlm_request->auth_state = AUTHENTICATE_STATE_NEGOTIATE;
-	ntlm_request->ntlmnegotiate = xstrndup(proxy_auth, NTLM_CHALLENGE_SZ + 5);
+	ntlm_request->ntlmnegotiate = xstrdup(proxy_auth);
 	conn->auth_type = AUTH_NTLM;
 	conn->auth_user_request = auth_user_request;
 	ntlm_request->conn = conn;
@@ -982,9 +994,9 @@
 	    ntlm_request->authchallenge);
 	/* see if we already know this user's authenticate */
 	debug(29, 9) ("aclMatchProxyAuth: cache lookup with key '%s'\n", ntlmhash);
-	assert(proxy_auth_cache != NULL);
-	proxy_auth_hash = hash_lookup(proxy_auth_cache, ntlmhash);
-	if (!proxy_auth_hash) {	/* not in the hash table */
+	assert(ntlm_challenge_cache != NULL);
+	challenge_hash = hash_lookup(ntlm_challenge_cache, ntlmhash);
+	if (!challenge_hash) {	/* not in the hash table */
 	    debug(29, 4) ("authenticateNTLMAuthenticateUser: proxy-auth cache miss.\n");
 	    ntlm_request->auth_state = AUTHENTICATE_STATE_RESPONSE;
 	    /* verify with the ntlm helper */
@@ -993,8 +1005,8 @@
 	    /* throw away the temporary entry */
 	    ntlm_request->authserver_deferred = 0;
 	    authenticateNTLMReleaseServer(ntlm_request);
-	    authenticateAuthUserMerge(auth_user, proxy_auth_hash->auth_user);
-	    auth_user = proxy_auth_hash->auth_user;
+	    authenticateAuthUserMerge(auth_user, challenge_hash->user.auth_user);
+	    auth_user = challenge_hash->user.auth_user;
 	    auth_user_request->auth_user = auth_user;
 	    ntlm_request->auth_state = AUTHENTICATE_STATE_DONE;
 	    /* we found one */
@@ -1026,10 +1038,6 @@
 		usernamehash = usernamehash->next;
 	}
 	if (usernamehash) {
-	    /*
-	     * add another link from the new proxy_auth to the
-	     * auth_user structure and update the information */
-	    assert(proxy_auth_hash == NULL);
 	    /* we can't seamlessly recheck the username due to the 
 	     * challenge nature of the protocol. Just free the 
 	     * temporary auth_user */
@@ -1045,13 +1053,15 @@
 	    snprintf(ntlmhash, sizeof(ntlmhash) - 1, "%s%s",
 		ntlm_request->ntlmauthenticate,
 		ntlm_request->authchallenge);
-	    authenticateProxyAuthCacheAddLink(ntlmhash, auth_user);
+	    authenticateNTLMChallengeCacheAddLink(ntlmhash, auth_user, ntlm_request->authserver);
 	}
 	/* set these to now because this is either a new login from an 
 	 * existing user or a new user */
 	auth_user->expiretime = current_time.tv_sec;
+	srv = ntlm_request->authserver;
+	ntlm_request->authserver = NULL;
+	helperStatefulReleaseServer(srv);
 	return;
-	break;
     case AUTHENTICATE_STATE_DONE:
 	fatal("authenticateNTLMAuthenticateUser: unexpect auth state DONE! Report a bug to the squid developers.\n");
 	break;
diff -ruN squid-2.5.STABLE6/src/auth/ntlm/auth_ntlm.h squid-2.5.STABLE7/src/auth/ntlm/auth_ntlm.h
--- squid-2.5.STABLE6/src/auth/ntlm/auth_ntlm.h	Wed Feb  4 10:42:36 2004
+++ squid-2.5.STABLE7/src/auth/ntlm/auth_ntlm.h	Wed Aug 25 14:24:04 2004
@@ -27,9 +27,24 @@
 struct _ntlm_user {
     /* what username did this connection get? */
     char *username;
-    dlink_list proxy_auth_list;
+    dlink_list challenge_list;
 };
 
+struct _ntlm_challenge_hash_pointer {
+    /* first two items must be same as hash_link */
+    char *key;
+    auth_user_hash_pointer *next;
+    struct {
+	auth_user_t *auth_user;
+	dlink_node link;	/* other hash entries that point to the same auth_user */
+    } user;
+    struct {
+	helper_stateful_server *authserver;
+	dlink_node link;	/* other hash entries that point to the same challenge */
+    } challenge;
+};
+
+
 struct _ntlm_request {
     /* what negotiate string did the client use? */
     char *ntlmnegotiate;
@@ -52,6 +67,7 @@
     int starve;			/* 0= normal operation. 1=don't hand out any more challenges */
     int challengeuses;		/* the number of times this challenge has been issued */
     time_t renewed;
+    dlink_list user_list;	/* ntlm_challenge_hash_pointer list referring to this challenge */
 };
 
 /* configuration runtime data */
@@ -67,6 +83,7 @@
 typedef struct _ntlm_request ntlm_request_t;
 typedef struct _ntlm_helper_state_t ntlm_helper_state_t;
 typedef struct _auth_ntlm_config auth_ntlm_config;
+typedef struct _ntlm_challenge_hash_pointer ntlm_challenge_hash_pointer;
 
 extern MemPool *ntlm_helper_state_pool;
 extern MemPool *ntlm_user_pool;
diff -ruN squid-2.5.STABLE6/src/cache_cf.c squid-2.5.STABLE7/src/cache_cf.c
--- squid-2.5.STABLE6/src/cache_cf.c	Thu Apr 29 17:56:50 2004
+++ squid-2.5.STABLE7/src/cache_cf.c	Sat Sep 25 05:56:16 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: cache_cf.c,v 1.396.2.17 2004/04/29 23:56:50 hno Exp $
+ * $Id: cache_cf.c,v 1.396.2.18 2004/09/25 11:56:16 hno Exp $
  *
  * DEBUG: section 3     Configuration File Parsing
  * AUTHOR: Harvest Derived
@@ -917,12 +917,20 @@
 dump_http_header_access(StoreEntry * entry, const char *name, header_mangler header[])
 {
     int i;
+    header_mangler *other;
     for (i = 0; i < HDR_ENUM_END; i++) {
-	if (header[i].access_list != NULL) {
-	    storeAppendPrintf(entry, "%s ", name);
-	    dump_acl_access(entry, httpHeaderNameById(i),
-		header[i].access_list);
-	}
+	if (header[i].access_list == NULL)
+	    continue;
+	storeAppendPrintf(entry, "%s ", name);
+	dump_acl_access(entry, httpHeaderNameById(i),
+	    header[i].access_list);
+    }
+    for (other = header[HDR_OTHER].next; other; other = other->next) {
+	if (other->access_list == NULL)
+	    continue;
+	storeAppendPrintf(entry, "%s ", name);
+	dump_acl_access(entry, other->name,
+	    other->access_list);
     }
 }
 
@@ -944,9 +952,16 @@
     else if (strcmp(t, "Other") == 0)
 	id = HDR_OTHER;
     else if (id == -1) {
-	debug(3, 0) ("%s line %d: %s\n",
-	    cfg_filename, config_lineno, config_input_line);
-	debug(3, 0) ("parse_http_header_access: unknown header name %s.\n", t);
+	header_mangler *hdr = header[HDR_OTHER].next;
+	while (hdr && strcasecmp(hdr->name, t) != 0)
+	    hdr = hdr->next;
+	if (!hdr) {
+	    hdr = xcalloc(1, sizeof *hdr);
+	    hdr->name = xstrdup(t);
+	    hdr->next = header[HDR_OTHER].next;
+	    header[HDR_OTHER].next = hdr;
+	}
+	parse_acl_access(&hdr->access_list);
 	return;
     }
     if (id != HDR_ENUM_END) {
@@ -968,9 +983,22 @@
 free_http_header_access(header_mangler header[])
 {
     int i;
+    header_mangler **hdrp;
     for (i = 0; i < HDR_ENUM_END; i++) {
 	free_acl_access(&header[i].access_list);
     }
+    hdrp = &header[HDR_OTHER].next;
+    while (*hdrp) {
+	header_mangler *hdr = *hdrp;
+	free_acl_access(&hdr->access_list);
+	if (!hdr->replacement) {
+	    *hdrp = hdr->next;
+	    safe_free(hdr->name);
+	    safe_free(hdr);
+	} else {
+	    hdrp = &hdr->next;
+	}
+    }
 }
 
 static void
@@ -978,12 +1006,18 @@
     header[])
 {
     int i;
+    header_mangler *other;
     for (i = 0; i < HDR_ENUM_END; i++) {
 	if (NULL == header[i].replacement)
 	    continue;
 	storeAppendPrintf(entry, "%s %s %s\n", name, httpHeaderNameById(i),
 	    header[i].replacement);
     }
+    for (other = header[HDR_OTHER].next; other; other = other->next) {
+	if (other->replacement == NULL)
+	    continue;
+	storeAppendPrintf(entry, "%s %s %s\n", name, other->name, other->replacement);
+    }
 }
 
 static void
@@ -1004,10 +1038,18 @@
     else if (strcmp(t, "Other") == 0)
 	id = HDR_OTHER;
     else if (id == -1) {
-	debug(3, 0) ("%s line %d: %s\n",
-	    cfg_filename, config_lineno, config_input_line);
-	debug(3, 0) ("parse_http_header_replace: unknown header name %s.\n",
-	    t);
+	header_mangler *hdr = header[HDR_OTHER].next;
+	while (hdr && strcasecmp(hdr->name, t) != 0)
+	    hdr = hdr->next;
+	if (!hdr) {
+	    hdr = xcalloc(1, sizeof *hdr);
+	    hdr->name = xstrdup(t);
+	    hdr->next = header[HDR_OTHER].next;
+	    header[HDR_OTHER].next = hdr;
+	}
+	if (hdr->replacement != NULL)
+	    safe_free(hdr->replacement);
+	hdr->replacement = xstrdup(t + strlen(t) + 1);
 	return;
     }
     if (id != HDR_ENUM_END) {
@@ -1027,9 +1069,22 @@
 free_http_header_replace(header_mangler header[])
 {
     int i;
+    header_mangler **hdrp;
     for (i = 0; i < HDR_ENUM_END; i++) {
 	if (header[i].replacement != NULL)
 	    safe_free(header[i].replacement);
+    }
+    hdrp = &header[HDR_OTHER].next;
+    while (*hdrp) {
+	header_mangler *hdr = *hdrp;
+	free_acl_access(&hdr->access_list);
+	if (!hdr->access_list) {
+	    *hdrp = hdr->next;
+	    safe_free(hdr->name);
+	    safe_free(hdr);
+	} else {
+	    hdrp = &hdr->next;
+	}
     }
 }
 #endif
diff -ruN squid-2.5.STABLE6/src/carp.c squid-2.5.STABLE7/src/carp.c
--- squid-2.5.STABLE6/src/carp.c	Thu Jun 19 15:06:19 2003
+++ squid-2.5.STABLE7/src/carp.c	Thu Sep 30 03:23:30 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: carp.c,v 1.15.2.1 2003/06/19 21:06:19 wessels Exp $
+ * $Id: carp.c,v 1.15.2.2 2004/09/30 09:23:30 hno Exp $
  *
  * DEBUG: section 39    Cache Array Routing Protocol
  * AUTHOR: Eric Stern
@@ -119,7 +119,7 @@
     for (tp = Config.peers; tp; tp = tp->next) {
 	if (0.0 == tp->carp.load_factor)
 	    continue;
-	if (tp->tcp_up != PEER_TCP_MAGIC_COUNT)
+	if (!peerHTTPOkay(tp, request))
 	    continue;
 	assert(tp->type == PEER_PARENT);
 	combined_hash = (url_hash ^ tp->carp.hash);
diff -ruN squid-2.5.STABLE6/src/cf.data.pre squid-2.5.STABLE7/src/cf.data.pre
--- squid-2.5.STABLE6/src/cf.data.pre	Fri Apr 30 14:40:39 2004
+++ squid-2.5.STABLE7/src/cf.data.pre	Fri Oct  8 11:41:10 2004
@@ -1,6 +1,6 @@
 
 #
-# $Id: cf.data.pre,v 1.245.2.66 2004/04/30 20:40:39 wessels Exp $
+# $Id: cf.data.pre,v 1.245.2.77 2004/10/08 17:41:10 hno Exp $
 #
 #
 # SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -67,14 +67,14 @@
 	requests.  You may specify multiple socket addresses.
 	There are three forms: port alone, hostname with port, and
 	IP address with port.  If you specify a hostname or IP
-	address, then Squid binds the socket to that specific
+	address, Squid binds the socket to that specific
 	address.  This replaces the old 'tcp_incoming_address'
 	option.  Most likely, you do not need to bind to a specific
 	address, so you can use the port number alone.
 
 	The default port number is 3128.
 
-	If you are running Squid in accelerator mode, then you
+	If you are running Squid in accelerator mode, you
 	probably want to listen on port 80 also, or instead.
 
 	The -a command line option will override the *first* port
@@ -84,7 +84,7 @@
 	You may specify multiple socket addresses on multiple lines.
 
 	If you run Squid on a dual-homed machine with an internal
-	and an external interface then we recommend you to specify the
+	and an external interface we recommend you to specify the
 	internal address:port in http_port. This way Squid will only be
 	visible on the internal address.
 DOC_END
@@ -106,11 +106,11 @@
 
 	You may specify multiple socket addresses on multiple lines,
 	each with their own SSL certificate and/or options.
-			      
+
 	Options:
 
 	   cert=	Path to SSL certificate (PEM format)
-		
+
 	   key=		Path to SSL private key file (PEM format)
 			if not specified, the certificate file is
 			assumed to be a combined certificate and
@@ -211,11 +211,11 @@
 
 	The default behavior is to not bind to any specific address.
 
-	A udp_incoming_address value of 0.0.0.0 indicates that Squid should
-	listen for UDP messages on all available interfaces.
+	A udp_incoming_address value of 0.0.0.0 indicates Squid
+	should listen for UDP messages on all available interfaces.
 
 	If udp_outgoing_address is set to 255.255.255.255 (the default)
-	then it will use the same socket as udp_incoming_address. Only
+	it will use the same socket as udp_incoming_address. Only
 	change this if you want to have ICP queries sent using another
 	address than where this Squid listens for ICP queries from other
 	caches.
@@ -277,7 +277,7 @@
 		     htcp
 		     carp-load-factor
 
-		     use 'proxy-only' to specify that objects fetched
+		     use 'proxy-only' to specify objects fetched
 		     from this cache should not be saved locally.
 
 		     use 'weight=n' to specify a weighted parent.
@@ -303,7 +303,7 @@
 		     should be used in a round-robin fashion in the
 		     absence of any ICP queries.
 
-		     'multicast-responder' indicates that the named peer
+		     'multicast-responder' indicates the named peer
 		     is a member of a multicast group.  ICP queries will
 		     not be sent directly to the peer, but ICP replies
 		     will be accepted from it.
@@ -324,7 +324,7 @@
 		     use 'login=user:password' if this is a personal/workgroup
 		     proxy and your parent requires proxy authentication.
 		     Note: The string can include URL escapes (i.e. %20 for
-		     spaces). This also means that % must be written as %%.
+		     spaces). This also means % must be written as %%.
 
 		     use 'login=PASS' if users must authenticate against
 		     the upstream proxy. This will pass the users credentials
@@ -332,7 +332,7 @@
 		     Basic HTTP authentication sheme. Note: To combine this
 		     with proxy_auth both proxies must share the same user
 		     database as HTTP only allows for one proxy login.
-		     Also be warned that this will expose your users proxy
+		     Also be warned this will expose your users proxy
 		     password to the peer. USE WITH CAUTION
 
 		     use 'login=*:password' to pass the username to the
@@ -373,7 +373,7 @@
 		     cache as one participating in a CARP array.
 		     The 'f' values for all CARP parents must add
 		     up to 1.0.
-		 
+
 
 	NOTE: non-ICP/HTCP neighbors must be specified as 'parent'.
 DOC_END
@@ -396,7 +396,7 @@
 	has the effect such that UDP query packets are sent to
 	'bigserver' only when the requested object exists on a
 	server in the .edu domain.  Prefixing the domainname
-	with '!' means that the cache will be queried for objects
+	with '!' means the cache will be queried for objects
 	NOT in that domain.
 
 	NOTE:	* Any number of domains may be given for a cache-host,
@@ -596,7 +596,7 @@
 	low-water mark.  As swap utilization gets close to high-water
 	mark object eviction becomes more aggressive.  If utilization is
 	close to the low-water mark less replacement is done each time.
-	
+
 	Defaults are 90% and 95%. If you have a large cache, 5% could be
 	hundreds of MB. If this is the case you may wish to set these
 	numbers closer together.
@@ -739,7 +739,7 @@
 LOC: Config.cacheSwap
 DOC_START
 	Usage:
-	
+
 	cache_dir Type Directory-Name Fs-specific-data [options]
 
 	You can specify multiple cache_dir lines to spread the
@@ -751,7 +751,7 @@
 
 	'Directory' is a top-level directory where cache swap
 	files will be stored.  If you want to use an entire disk
-	for caching, then this can be the mount-point directory.
+	for caching, this can be the mount-point directory.
 	The directory must exist and be writable by the Squid
 	process.  Squid will NOT create this directory for you.
 
@@ -816,7 +816,7 @@
 	are limited to 24 bits, the block size determines the maximum
 	size of the COSS partition.  The default is 512 bytes, which
 	leads to a maximum cache_dir size of 512<<24, or 8 GB.  Note
-	that you should not change the coss block size after Squid
+	you should not change the coss block size after Squid
 	has written some objects to the cache_dir.
 
 	Common options:
@@ -881,13 +881,13 @@
 	a directory. Since this is the index for the whole object
 	list you CANNOT periodically rotate it!
 
-	If %s can be used in the file name then it will be replaced with a
+	If %s can be used in the file name it will be replaced with a
 	a representation of the cache_dir name where each / is replaced
 	with '.'. This is needed to allow adding/removing cache_dir
 	lines when cache_swap_log is being used.
-	
+
 	If have more than one 'cache_dir', and %s is not used in the name
-	then these swap logs will have names such as:
+	these swap logs will have names such as:
 
 		cache_swap_log.00
 		cache_swap_log.01
@@ -896,9 +896,9 @@
 	The numbered extension (which is added automatically)
 	corresponds to the order of the 'cache_dir' lines in this
 	configuration file.  If you change the order of the 'cache_dir'
-	lines in this file, then these log files will NOT correspond to
+	lines in this file, these log files will NOT correspond to
 	the correct 'cache_dir' entry (unless you manually rename
-	them).  We recommend that you do NOT use this option.  It is
+	them).  We recommend you do NOT use this option.  It is
 	better to keep these log files in each 'cache_dir' directory.
 DOC_END
 
@@ -913,7 +913,7 @@
 	programs use.  To disable/enable this emulation, set
 	emulate_httpd_log to 'off' or 'on'.  The default
 	is to use the native log format since it includes useful
-	information that Squid-specific log analyzers use.
+	information Squid-specific log analyzers use.
 DOC_END
 
 NAME: log_ip_on_direct
@@ -1038,10 +1038,10 @@
 	(and enable the use of picky ftp servers), set this to something
 	reasonable for your domain, like wwwuser@somewhere.net
 
-	The reason why this is domainless by default is that the
+	The reason why this is domainless by default is the
 	request can be made on the behalf of a user in any domain,
 	depending on how the cache is used.
-	Some ftp server also validate that the email address is valid
+	Some ftp server also validate the email address is valid
 	(for example perl.com).
 DOC_END
 
@@ -1061,7 +1061,7 @@
 LOC: Config.Ftp.passive
 DOC_START
 	If your firewall does not allow Squid to use passive
-	connections, then turn off this option.
+	connections, turn off this option.
 DOC_END
 
 NAME: ftp_sanitycheck
@@ -1073,7 +1073,7 @@
 	sanity checks of the addresses of FTP data connections ensure the
 	data connection is to the requested server. If you need to allow
 	FTP connections to servers using another IP address for the data
-	connection then turn this off.
+	connection turn this off.
 DOC_END
 
 NAME: ftp_telnet_protocol
@@ -1087,8 +1087,8 @@
 	the FTP protocol.
 
 	If you have trouble accessing files with ASCII code 255 in the
-	path or similar problems involving this ASCII code then you can
-	try setting this directive to off. If that helps report to the
+	path or similar problems involving this ASCII code you can
+	try setting this directive to off. If that helps, report to the
 	operator of the FTP server in question that their FTP server
 	is broken and does not follow the FTP standard.
 DOC_END
@@ -1134,8 +1134,8 @@
 IFDEF: !USE_DNSSERVERS
 DOC_START
 	DNS Query timeout. If no response is received to a DNS query
-	within this time then all DNS servers for the queried domain
-	is assumed to be unavailable.
+	within this time all DNS servers for the queried domain
+	are assumed to be unavailable.
 DOC_END
 
 NAME: dns_defnames
@@ -1176,10 +1176,10 @@
 DOC_START
 	Location of the host-local IP name-address associations
 	database.  Most Operating Systems have such a file: under
-	Un*X it's by default in /etc/hosts MS-Windows NT/2000 places
-	that in %SystemRoot%(by default
+	Un*X it's by default in /etc/hosts.  MS-Windows NT/2000 places
+	it in %SystemRoot%(by default
 	c:\winnt)\system32\drivers\etc\hosts, while Windows 9x/ME
-	places that in %windir%(usually c:\windows)\hosts
+	places it in %windir%(usually c:\windows)\hosts
 
 	The file contains newline-separated definitions, in the
 	form ip_address_in_dotted_form name [name ...] names are
@@ -1250,7 +1250,7 @@
 LOC: Config.onoff.redir_rewrites_host
 DOC_START
 	By default Squid rewrites any Host: header in redirected
-	requests.  If you are running an accelerator then this may
+	requests.  If you are running an accelerator this may
 	not be a wanted effect of a redirector.
 DOC_END
 
@@ -1273,14 +1273,14 @@
 	schemes supported by Squid.
 
 	format: auth_param scheme parameter [setting]
-	
-	The order that authentication schemes are presented to the client is
+
+	The order in which authentication schemes are presented to the client is
 	dependant on the order the scheme first appears in config file. IE
 	has a bug (it's not rfc 2617 compliant) in that it will use the basic
 	scheme if basic is the first entry presented, even if more secure
 	schemes are presented. For now use the order in the recommended
 	settings section below. If other browsers have difficulties (don't
-	recognise the schemes offered even if you are using basic) then either
+	recognise the schemes offered even if you are using basic) either
 	put basic first, or disable the other schemes (by commenting out their
 	program entry).
 
@@ -1300,7 +1300,7 @@
 	type acl.
 
 	=== Parameters for the basic scheme follow. ===
-	
+
 	"program" cmdline
 	Specify the command for the external authenticator.  Such a program
 	reads a line containing "username password" and replies "OK" or
@@ -1317,7 +1317,7 @@
 	Then, set this line to something like
 
 	auth_param basic program @DEFAULT_PREFIX@/libexec/ncsa_auth @DEFAULT_PREFIX@/etc/passwd
-	
+
 	"children" numberofchildren
 	The number of authenticator processes to spawn.
 	If you start too few Squid will have to wait for them to process a
@@ -1343,6 +1343,13 @@
 	also use the max_user_ip ACL in an http_access rule.
 	auth_param basic credentialsttl 2 hours
 
+	"casesensitive" on|off
+	Specifies if usernames are case sensitive. Most user databases are
+	case insensitive allowing the same username to be spelled using both
+	lower and upper case letters, but some are case sensitive. This
+	makes a big difference for user_max_ip ACL processing and similar.
+	auth_param basic casesensitive off
+
 	=== Parameters for the digest scheme follow ===
 
 	"program" cmdline
@@ -1443,7 +1450,7 @@
 	auth_param ntlm max_challenge_reuses 0
 
 	"max_challenge_lifetime" timespan
-	The maximum time period that a ntlm challenge is reused over. The
+	The maximum time period a ntlm challenge is reused over. The
 	actual period will be the minimum of this time AND the number of
 	reused challenges.
 	auth_param ntlm max_challenge_lifetime 2 minutes
@@ -1484,6 +1491,7 @@
 auth_param basic children 5
 auth_param basic realm Squid proxy-caching web server
 auth_param basic credentialsttl 2 hours
+auth_param basic casesensitive off
 NOCOMMENT_END
 DOC_END
 
@@ -1528,9 +1536,9 @@
 DOC_START
 	This option defines external acl classes using a helper program to
 	look up the status
-	
+
 	  external_acl_type name [options] FORMAT.. /path/to/helper [helper arguments..]
-	
+
 	Options:
 
 	  ttl=n		TTL in seconds for cached results (defaults to 3600
@@ -1542,7 +1550,8 @@
 			to service external acl lookups of this type.
 			Note: see compatibility note below
 	  cache=n	result cache size, 0 is unbounded (default)
-	
+	  protocol=3.0	Use URL-escaped strings instead of quoting
+
 	FORMAT specifications
 
 	  %LOGIN	Authenticated user login name
@@ -1569,7 +1578,7 @@
 	more details.
 
 	General result syntax:
-	
+
 	  OK/ERR keyword=value ...
 
 	Defined keywords:
@@ -1581,13 +1590,16 @@
 	whitespace, or the whitespace escaped using \. Any quotes or \
 	characters within the keyword value must be \ escaped.
 
+	If protocol=3.0 then URL escaping of the strings is used instead
+	of the above described quoting format.
+
 	Compatibility Note: The children= option was named concurrency= in
 	Squid-2.5.STABLE3 and earlier and such syntax is still accepted to
 	keep compatibility within the Squid-2.5 release. However, the meaning
 	of concurrency= option has changed in Squid-3 and the old syntax of
 	the directive is therefore depreated from Squid-2.5.STABLE4 and later.
 	If you want to be able to easily downgrade to earlier Squid-2.5
-	releases then you may want to continue using the old name, if not
+	releases you may want to continue using the old name, if not
 	please use the new name.
 DOC_END
 
@@ -1614,7 +1626,7 @@
 NAME: request_header_max_size
 COMMENT: (KB)
 TYPE: b_size_t
-DEFAULT: 10 KB
+DEFAULT: 20 KB
 LOC: Config.maxRequestHeaderSize
 DOC_START
 	This specifies the maximum size for HTTP headers in a request.
@@ -1672,7 +1684,7 @@
 		for problems which it causes.
 
 		override-lastmod enforces min age even on objects
-		that was modified recently.
+		that were modified recently.
 
 		reload-into-ims changes client no-cache or ``reload''
 		to If-Modified-Since requests. Doing this VIOLATES the
@@ -1683,7 +1695,7 @@
 		header. Doing this VIOLATES the HTTP standard. Enabling
 		this feature could make you liable for problems which
 		it causes.
-		
+
 	Basically a cached object is:
 
 		FRESH if expires < now, else STALE
@@ -1694,7 +1706,7 @@
 
 	The refresh_pattern lines are checked in the order listed here.
 	The first entry which matches is used.  If none of the entries
-	match, then the default will be used.
+	match the default will be used.
 
 	Note, you must uncomment all the default lines if you want
 	to change one. The default setting is only active if none is
@@ -1753,7 +1765,7 @@
 	to '0 KB'.
 
 	If you want retrievals to always continue if they are being
-	cached then set 'quick_abort_min' to '-1 KB'.
+	cached set 'quick_abort_min' to '-1 KB'.
 DOC_END
 
 
@@ -1803,7 +1815,7 @@
 DOC_START
 	Sets a upper limit on how far into the the file a Range request
 	may be to cause Squid to prefetch the whole file. If beyond this
-	limit then Squid forwards the Range request as it is and the result
+	limit Squid forwards the Range request as it is and the result
 	is NOT cached.
 
 	This is to stop a far ahead range request (lets say start at 17MB)
@@ -1811,7 +1823,7 @@
 	sending anything to the client.
 
 	A value of -1 causes Squid to always fetch the object from the
-	beginning so that it may cache the result. (2.0 style)
+	beginning so it may cache the result. (2.0 style)
 
 	A value of 0 causes Squid to never fetch more than the
 	client requested. (default)
@@ -1896,7 +1908,7 @@
 LOC: Config.Timeout.lifetime
 DEFAULT: 1 day
 DOC_START
-	The maximum amount of time that a client (browser) is allowed to
+	The maximum amount of time a client (browser) is allowed to
 	remain connected to the cache process.  This protects the Cache
 	from having a lot of sockets (and hence file descriptors) tied up
 	in a CLOSE_WAIT state from remote clients that go away without
@@ -1943,9 +1955,9 @@
 DEFAULT: 10 seconds
 DOC_START
 	Maximum time to wait for IDENT lookups to complete.
-	
+
 	If this is too high, and you enabled IDENT lookups from untrusted
-	users, then you might be susceptible to denial-of-service by having
+	users, you might be susceptible to denial-of-service by having
 	many ident requests going at once.
 DOC_END
 
@@ -2017,7 +2029,7 @@
 	acl aclname proto    HTTP FTP ...
 	acl aclname method   GET POST ...
 	acl aclname browser  [-i] regexp ...
-	  # pattern match on User-Agent header
+	  # pattern match on User-Agent header (see also req_header below)
         acl aclname referer_regex  [-i] regexp ...
           # pattern match on Referer header
           # Referer is highly unreliable, so use with care
@@ -2066,22 +2078,27 @@
 	  # This will be matched when the user attempts to log in from more
 	  # than <number> different ip addresses. The authenticate_ip_ttl
 	  # parameter controls the timeout on the ip entries.
-	  # If -s is specified then the limit is strict, denying browsing
+	  # If -s is specified the limit is strict, denying browsing
 	  # from any further IP addresses until the ttl has expired. Without
 	  # -s Squid will just annoy the user by "randomly" denying requests.
-	  # (the counter is then reset each time the limit is reached and a
+	  # (the counter is reset each time the limit is reached and a
 	  # request is denied)
 	  # NOTE: in acceleration mode or where there is mesh of child proxies,
 	  # clients may appear to come from multiple addresses if they are
 	  # going through proxy farms, so a limit of 1 may cause user problems.
 
 	acl aclname req_mime_type mime-type1 ...
-	  # regex match agains the mime type of the request generated
+	  # regex match against the mime type of the request generated
 	  # by the client. Can be used to detect file upload or some
 	  # types HTTP tunelling requests.
 	  # NOTE: This does NOT match the reply. You cannot use this
 	  # to match the returned file type.
 
+	acl aclname req_header header-name [-i] any\.regex\.here
+	  # regex match against any of the known request headers.  May be
+	  # thought of as a superset of "browser", "referer" and "mime-type"
+	  # acls.
+
 	acl aclname rep_mime_type mime-type1 ...
 	  # regex match against the mime type of the reply recieved by
 	  # squid. Can be used to detect file download or some
@@ -2090,6 +2107,12 @@
 	  # effect in rules that affect the reply data stream such as
 	  # http_reply_access.
 
+	acl aclname rep_header header-name [-i] any\.regex\.here
+	  # regex match against any of the known response headers.
+	  # Example:
+	  #
+	  # acl many_spaces rep_header Content-Disposition -i [[:space:]]{3,}
+
 	acl acl_name external class_name [arguments...]
 	  # external ACL lookup via a helper class defined by the
 	  # external_acl_type directive.
@@ -2139,7 +2162,7 @@
 
 	If none of the "access" lines cause a match, the default is the
 	opposite of the last line in the list.  If the last line was
-	deny, then the default is allow.  Conversely, if the last line
+	deny, the default is allow.  Conversely, if the last line
 	is allow, the default will be deny.  For these reasons, it is a
 	good idea to have an "deny all" or "allow all" entry at the end
 	of your access lists to avoid potential confusion.
@@ -2155,8 +2178,8 @@
 # Deny CONNECT to other than SSL ports
 http_access deny CONNECT !SSL_ports
 #
-# We strongly recommend to uncomment the following to protect innocent
-# web applications running on the proxy server who think that the only
+# We strongly recommend the following be uncommented to protect innocent
+# web applications running on the proxy server who think the only
 # one who can access services on "localhost" is a local user
 #http_access deny to_localhost
 #
@@ -2186,7 +2209,7 @@
         NOTE: if there are no access lines present, the default is to allow
 	all replies
 
-        If none of the access lines cause a match, then the opposite of the
+        If none of the access lines cause a match the opposite of the
         last line will apply. Thus it is good practice to end the rules
         with an "allow all" or "deny all" entry.
 
@@ -2234,7 +2257,7 @@
 		miss_access allow localclients
 		miss_access deny  !localclients
 
-	This means that only your local clients are allowed to fetch
+	This means only your local clients are allowed to fetch
 	MISSES and all other clients can only fetch HITS.
 
 	By default, allow all clients who passed the http_access rules
@@ -2325,11 +2348,11 @@
 	Allows you to map requests to different outgoing IP addresses
 	based on the username or sourceaddress of the user making
 	the request.
-	
+
 	tcp_outgoing_address ipaddr [[!]aclname] ...
 
 	Example where requests from 10.0.0.0/24 will be forwareded
-	with source address 10.1.0.1, 10.0.2.0/24 forwarded with 
+	with source address 10.1.0.1, 10.0.2.0/24 forwarded with
 	source address 10.1.0.2 and the rest will be forwarded with
 	source address 10.1.0.3.
 
@@ -2343,6 +2366,19 @@
 	matching line.
 DOC_END
 
+NAME: reply_header_max_size
+COMMENT: (KB)
+TYPE: b_size_t
+DEFAULT: 20 KB
+LOC: Config.maxReplyHeaderSize
+DOC_START
+	This specifies the maximum size for HTTP headers in a reply.
+	Reply headers are usually relatively small (about 512 bytes).
+	Placing a limit on the reply header size will catch certain
+	bugs (for example with persistent connections) and possibly
+	buffer-overflow or denial-of-service attacks.
+DOC_END
+
 NAME: reply_body_max_size
 COMMENT: bytes allow|deny acl acl...
 TYPE: body_size_t
@@ -2355,7 +2391,7 @@
 	such as MP3's and movies. When the reply headers are recieved,
 	the reply_body_max_size lines are processed, and the first line with
 	a result of "allow" is used as the maximum body size for this reply.
-	This size is then checked twice. First when we get the reply headers,
+	This size is checked twice. First when we get the reply headers,
 	we check the content-length value.  If the content length value exists
 	and is larger than the allowed size, the request is denied and the
 	user receives an error message that says "the request or reply
@@ -2391,27 +2427,29 @@
 TYPE: string
 DEFAULT: nobody
 LOC: Config.effectiveUser
-DOC_NONE
+DOC_START
+	If you start Squid as root, it will change its effective/real
+	UID/GID to the user specified below.  The default is to change
+	to UID to nobody.  If you define cache_effective_user, but not
+	cache_effective_group, Squid sets the GID to the effective
+	user's default group ID (taken from the password file) and
+	supplementary group list from the from groups membership of
+	cache_effective_user.
+DOC_END
+
 
 NAME: cache_effective_group
 TYPE: string
 DEFAULT: none
 LOC: Config.effectiveGroup
 DOC_START
-
-	If you start Squid as root, it will change its effective/real
-	UID/GID to the UID/GID specified below.  The default is to
-	change to UID to nobody.  If you define cache_effective_user,
-	but not cache_effective_group, Squid sets the GID the
-	effective user's default group ID (taken from the password
-	file).
-
-	If Squid is not started as root, the cache_effective_user
-	value is ignored and the GID value is unchanged by default.
-	However, you can make Squid change its GID to another group
-	that the process owner is a member of.  Note that if Squid
-	is not started as root then you cannot set http_port to a
-	value lower than 1024.
+	If you want Squid to run with a specific GID regardless of
+	the group memberships of the effective user then set this
+	to the group (or GID) you want Squid to run as. When set
+	all other group privileges of the effective user is ignored
+	and only this GID is effective. If Squid is not started as
+	root the user starting Squid must be member of the specified
+	group.
 DOC_END
 
 
@@ -2421,7 +2459,7 @@
 DEFAULT: none
 DOC_START
 	If you want to present a special hostname in error messages, etc,
-	then define this.  Otherwise, the return value of gethostname()
+	define this.  Otherwise, the return value of gethostname()
 	will be used. If you have multiple caches in a cluster and
 	get errors about IP-forwarding you must set them to have individual
 	names with this setting.
@@ -2434,8 +2472,8 @@
 DEFAULT: none
 DOC_START
 	If you want to have multiple machines with the same
-	'visible_hostname' then you must give each machine a different
-	'unique_hostname' so that forwarding loops can be detected.
+	'visible_hostname' you must give each machine a different
+	'unique_hostname' so forwarding loops can be detected.
 DOC_END
 
 
@@ -2444,7 +2482,7 @@
 LOC: Config.hostnameAliases
 DEFAULT: none
 DOC_START
-	A list of other DNS names that your cache has.
+	A list of other DNS names your cache has.
 DOC_END
 
 COMMENT_START
@@ -2535,14 +2573,14 @@
 	If you want to run Squid as an httpd accelerator, define the
 	host name and port number where the real HTTP server is.
 
-	If you want IP based virtual host support then specify the
+	If you want IP based virtual host support specify the
 	hostname as "virtual". This will make Squid use the IP address
 	where it accepted the request as hostname in the URL.
 
-	If you want virtual port support then specify the port as "0".
+	If you want virtual port support specify the port as "0".
 
 	NOTE: enabling httpd_accel_host disables proxy-caching and
-	ICP.  If you want these features enabled also, then set
+	ICP.  If you want these features enabled also, set
 	the 'httpd_accel_with_proxy' option.
 DOC_END
 
@@ -2553,7 +2591,7 @@
 DEFAULT: off
 DOC_START
 	If you are running Squid as an accelerator and have a single backend
-	server then set this to on. This causes Squid to forward the request
+	server set this to on. This causes Squid to forward the request
 	to this server, regardles of what any redirectors or Host headers
 	say.
 
@@ -2574,7 +2612,7 @@
 LOC: Config.onoff.accel_with_proxy
 DOC_START
 	If you want to use Squid as both a local httpd accelerator
-	and as a proxy, change this to 'on'. Note however that your
+	and as a proxy, change this to 'on'. Note however your
 	proxy users may have trouble to reach the accelerated domains
 	unless their browsers are configured not to use this proxy for
 	those domains (for example via the no_proxy browser configuration
@@ -2590,13 +2628,13 @@
 	HTTP/1.1 requests include a Host: header which is basically the
 	hostname from the URL.  The Host: header is used for domain based
 	virutal hosts. If your accelerator needs to provide domain based
-	virtual hosts on the same IP address then you will need to turn this
+	virtual hosts on the same IP address you will need to turn this
 	on.
 
-	Note that Squid does NOT check the value of the Host header matches
+	Note Squid does NOT check the value of the Host header matches
 	any of your accelerated server, so it may open a big security hole
 	unless you take care to set up access controls proper.  We recommend
-	that this option remain disabled unless you are sure of what you
+	this option remain disabled unless you are sure of what you
 	are doing.
 
 	However, you will need to enable this option if you run Squid
@@ -2650,7 +2688,7 @@
 	Appends local domain name to hostnames without any dots in
 	them.  append_domain must begin with a period.
 
-	Be warned that there today is Internet names with no dots in
+	Be warned there are now Internet names with no dots in
 	them using only top-domain names, so setting this may
 	cause some Internet sites to become unavailable.
 
@@ -2698,12 +2736,12 @@
 	This can be used to return a ERR_ page for requests which
 	do not pass the 'http_access' rules.  A single ACL will cause
 	the http_access check to fail.  If a 'deny_info' line exists
-	for that ACL then Squid returns a corresponding error page.
+	for that ACL Squid returns a corresponding error page.
 
 	You may use ERR_ pages that come with Squid or create your own pages
 	and put them into the configured errors/ directory.
 
-	Alternatively you can specify an error URL. The browsers will then
+	Alternatively you can specify an error URL. The browsers will
 	get redirected (302) to the specified URL. %s in the redirection
 	URL will be replaced by the requested URL.
 
@@ -2726,7 +2764,7 @@
 NAME: memory_pools_limit
 COMMENT: (bytes)
 TYPE: b_size_t
-DEFAULT: none
+DEFAULT: 5 MB
 LOC: Config.MemPools.limit
 DOC_START
 	Used only with memory_pools on:
@@ -2790,9 +2828,9 @@
 	If you want to return ICP_HIT for stale cache objects, set this
 	option to 'on'.  If you have sibling relationships with caches
 	in other administrative domains, this should be 'off'.  If you only
-	have sibling relationships with caches under your control, then
+	have sibling relationships with caches under your control,
 	it is probably okay to set this to 'on'.
-	If set to 'on', then your siblings should use the option "allow-miss"
+	If set to 'on', your siblings should use the option "allow-miss"
 	on their cache_peer lines for connecting to you.
 DOC_END
 
@@ -2905,7 +2943,7 @@
 DEFAULT: on
 LOC: Config.onoff.client_db
 DOC_START
-	If you want to disable collecting per-client statistics, then
+	If you want to disable collecting per-client statistics,
 	turn off client_db here.
 DOC_END
 
@@ -2949,8 +2987,8 @@
 	replies, enable this option.
 
 	If your peer has configured Squid (during compilation) with
-	'--enable-icmp' then that peer will send ICMP pings to origin server
-	sites of the URLs it receives.  If you enable this option then the
+	'--enable-icmp' that peer will send ICMP pings to origin server
+	sites of the URLs it receives.  If you enable this option the
 	ICP replies from that peer will include the ICMP data (if available).
 	Then, when choosing a parent cache, Squid will choose the parent with
 	the minimal RTT to the origin server.  When this happens, the
@@ -2994,7 +3032,7 @@
 	Doing this VIOLATES the HTTP standard.  Enabling this
 	feature could make you liable for problems which it
 	causes.
-	
+
 	see also refresh_pattern for a more selective approach.
 DOC_END
 
@@ -3052,16 +3090,16 @@
 		acl all src 0.0.0.0/0.0.0.0
 		never_direct deny local-servers
 		never_direct allow all
-	
-	or if squid is inside a firewall and there is local intranet
-	servers inside the firewall then use something like:
+
+	or if Squid is inside a firewall and there are local intranet
+	servers inside the firewall use something like:
 
 		acl local-intranet dstdomain .foo.net
 		acl local-external dstdomain external.foo.net
 		always_direct deny local-external
 		always_direct allow local-intranet
 		never_direct allow all
-	
+
 	This option replaces some v1.1 options such as inside_firewall
 	and firewall_ip.
 DOC_END
@@ -3162,9 +3200,9 @@
 LOC: Config.icons.use_short_names
 DEFAULT: off
 DOC_START
-	If this is enabled then Squid will use short URLs for icons.
+	If this is enabled Squid will use short URLs for icons.
 
-	If off then the URLs for icons will always be absolute URLs
+	If off the URLs for icons will always be absolute URLs
 	including the proxy name and port.
 DOC_END
 
@@ -3249,7 +3287,7 @@
 	available network interfaces.
 
 	If snmp_outgoing_address is set to 255.255.255.255 (the default)
-	then it will use the same socket as snmp_incoming_address. Only
+	it will use the same socket as snmp_incoming_address. Only
 	change this if you want to have SNMP replies sent using another
 	address than where this Squid listens for SNMP queries.
 
@@ -3632,14 +3670,14 @@
 	(matching hierarchy_stoplist or not cachable request type) direct
 	to origin servers.
 
-	If you set this to off, then Squid will prefer to send these
+	If you set this to off, Squid will prefer to send these
 	requests to parents.
 
 	Note that in most configurations, by turning this off you will only
 	add latency to these request without any improvement in global hit
 	ratio.
 
-	If you are inside an firewall then see never_direct instead of
+	If you are inside an firewall see never_direct instead of
 	this directive.
 DOC_END
 
@@ -3648,15 +3686,15 @@
 LOC: Config.onoff.prefer_direct
 DEFAULT: off
 DOC_START
-	Normally Squid tries to use parents for most requests. If you by some
+	Normally Squid tries to use parents for most requests. If you for some
 	reason like it to first try going direct and only use a parent if
-	going direct fails then set this to on.
+	going direct fails set this to on.
 
 	By combining nonhierarchical_direct off and prefer_direct on you
 	can set up Squid to use a parent as a backup path if going direct
 	fails.
 
-	Note: If you want Squid to use parents for all requests then see
+	Note: If you want Squid to use parents for all requests see
 	the never_direct directive. prefer_direct only modifies how Squid
 	acts on cachable requests.
 DOC_END
@@ -3699,7 +3737,7 @@
 	redirectors.  You should only enable this if the redirectors
 	are not critical to your caching system.  If you use
 	redirectors for access control, and you enable this option,
-	then users may have access to pages that they should not
+	users may have access to pages they should not
 	be allowed to request.
 DOC_END
 
@@ -3709,7 +3747,7 @@
 DEFAULT: on
 DOC_START
 	By default Squid checks that DNS responses are received
-	from the same IP addresses that they are sent to.  If they
+	from the same IP addresses they are sent to.  If they
 	don't match, Squid ignores the response and writes a warning
 	message to cache.log.  You can allow responses from unknown
 	nameservers by setting this option to 'off'.
@@ -3825,6 +3863,19 @@
 	after 10 seconds timeout.
 DOC_END
 
+NAME: balance_on_multiple_ip
+TYPE: onoff
+LOC: Config.onoff.balance_on_multiple_ip
+DEFAULT: on
+DOC_START
+	Some load balancing servers based on round robin DNS have been 
+	found not to preserve user session state across requests
+	to different IP addresses.
+
+	By default Squid rotates IP's per request. By disabling
+	this directive only connection failure trigers rotation.
+DOC_END
+
 NAME: pipeline_prefetch
 TYPE: onoff
 LOC: Config.onoff.pipeline_prefetch
@@ -3961,7 +4012,7 @@
 	system call. This sleep may help the situation where your
 	system reports fork() failures due to lack of (virtual)
 	memory. Note, however, that if you have a lot of child
-	processes, then these sleep delays will add up and your
+	processes, these sleep delays will add up and your
 	Squid will not service requests for some amount of time
 	until all the child processes have been started.
 DOC_END
diff -ruN squid-2.5.STABLE6/src/client_db.c squid-2.5.STABLE7/src/client_db.c
--- squid-2.5.STABLE6/src/client_db.c	Fri Feb 23 13:59:50 2001
+++ squid-2.5.STABLE7/src/client_db.c	Mon Oct 11 14:25:52 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: client_db.c,v 1.53 2001/02/23 20:59:50 hno Exp $
+ * $Id: client_db.c,v 1.53.2.4 2004/10/11 20:25:52 hno Exp $
  *
  * DEBUG: section 0     Client Database
  * AUTHOR: Duane Wessels
@@ -38,6 +38,15 @@
 static hash_table *client_table = NULL;
 static ClientInfo *clientdbAdd(struct in_addr addr);
 static FREE clientdbFreeItem;
+static void clientdbStartGC(void);
+static void clientdbScheduledGC(void *);
+
+static int max_clients = 32;
+static int cleanup_running = 0;
+static int cleanup_scheduled = 0;
+static int cleanup_removed;
+
+#define CLIENT_DB_HASH_SIZE 467
 
 static ClientInfo *
 clientdbAdd(struct in_addr addr)
@@ -48,6 +57,10 @@
     c->addr = addr;
     hash_join(client_table, &c->hash);
     statCounter.client_http.clients++;
+    if ((statCounter.client_http.clients > max_clients) && !cleanup_running && cleanup_scheduled < 2) {
+	cleanup_scheduled++;
+	eventAdd("client_db garbage collector", clientdbScheduledGC, NULL, 90, 0);
+    }
     return c;
 }
 
@@ -56,7 +69,7 @@
 {
     if (client_table)
 	return;
-    client_table = hash_create((HASHCMP *) strcmp, 467, hash_string);
+    client_table = hash_create((HASHCMP *) strcmp, CLIENT_DB_HASH_SIZE, hash_string);
     cachemgrRegister("client_list",
 	"Cache Client List",
 	clientdbDump,
@@ -89,6 +102,7 @@
 	if (LOG_UDP_HIT == ltype)
 	    kb_incr(&c->Icp.hit_kbytes_out, size);
     }
+    c->last_seen = squid_curtime;
 }
 
 /*
@@ -224,6 +238,64 @@
     hashFreeItems(client_table, clientdbFreeItem);
     hashFreeMemory(client_table);
     client_table = NULL;
+}
+
+static void
+clientdbScheduledGC(void *unused)
+{
+    cleanup_scheduled = 0;
+    clientdbStartGC();
+}
+
+static void
+clientdbGC(void *unused)
+{
+    static int bucket = 0;
+    hash_link *link_next;
+
+    link_next = hash_get_bucket(client_table, bucket++);
+    while (link_next != NULL) {
+	ClientInfo *c = (ClientInfo *) link_next;
+	int age = squid_curtime - c->last_seen;
+	link_next = link_next->next;
+	if (c->n_established)
+	    continue;
+
+	if (age < 24 * 3600 && c->Http.n_requests > 100)
+	    continue;
+	if (age < 4 * 3600 && (c->Http.n_requests > 10 || c->Icp.n_requests > 10))
+	    continue;
+	if (age < 5 * 60 && (c->Http.n_requests > 1 || c->Icp.n_requests > 1))
+	    continue;
+	if (age < 60)
+	    continue;
+	hash_remove_link(client_table, &c->hash);
+	clientdbFreeItem(c);
+	statCounter.client_http.clients--;
+	cleanup_removed++;
+    }
+
+    if (bucket < CLIENT_DB_HASH_SIZE)
+	eventAdd("client_db garbage collector", clientdbGC, NULL, 0.15, 0);
+    else {
+	bucket = 0;
+	cleanup_running = 0;
+	max_clients = statCounter.client_http.clients * 3 / 2;
+	if (!cleanup_scheduled) {
+	    cleanup_scheduled = 1;
+	    eventAdd("client_db garbage collector", clientdbScheduledGC, NULL, 3 * 3600, 0);
+	}
+	debug(49, 2) ("clientdbGC: Removed %d entries\n", cleanup_removed);
+    }
+}
+
+static void
+clientdbStartGC(void)
+{
+    max_clients = statCounter.client_http.clients;
+    cleanup_running = 1;
+    cleanup_removed = 0;
+    clientdbGC(NULL);
 }
 
 #if SQUID_SNMP
diff -ruN squid-2.5.STABLE6/src/client_side.c squid-2.5.STABLE7/src/client_side.c
--- squid-2.5.STABLE6/src/client_side.c	Mon May 31 16:57:09 2004
+++ squid-2.5.STABLE7/src/client_side.c	Tue Oct  5 16:34:42 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: client_side.c,v 1.561.2.55 2004/05/31 22:57:09 hno Exp $
+ * $Id: client_side.c,v 1.561.2.60 2004/10/05 22:34:42 hno Exp $
  *
  * DEBUG: section 33    Client-side Routines
  * AUTHOR: Duane Wessels
@@ -129,6 +129,8 @@
 static int clientRequestBodyTooLarge(int clen);
 static void clientProcessBody(ConnStateData * conn);
 static void clientEatRequestBody(clientHttpRequest *);
+static BODY_HANDLER clientReadBody;
+static void clientAbortBody(request_t * req);
 
 static int
 checkAccelOnly(clientHttpRequest * http)
@@ -360,9 +362,11 @@
 	    new_request->auth_user_request = old_request->auth_user_request;
 	    authenticateAuthUserRequestLock(new_request->auth_user_request);
 	}
-	if (old_request->body_connection) {
-	    new_request->body_connection = old_request->body_connection;
-	    old_request->body_connection = NULL;
+	if (old_request->body_reader) {
+	    new_request->body_reader = old_request->body_reader;
+	    new_request->body_reader_data = old_request->body_reader_data;
+	    old_request->body_reader = NULL;
+	    old_request->body_reader_data = NULL;
 	}
 	new_request->content_length = old_request->content_length;
 	new_request->flags.proxy_keepalive = old_request->flags.proxy_keepalive;
@@ -813,10 +817,7 @@
     MemObject *mem = NULL;
     debug(33, 3) ("httpRequestFree: %s\n", storeUrl(http->entry));
     if (!clientCheckTransferDone(http)) {
-	if (request && request->body_connection) {
-	    clientAbortBody(request);	/* abort request body transter */
-	    request->body_connection = NULL;
-	}
+	requestAbortBody(request);	/* abort request body transter */
 	/* HN: This looks a bit odd.. why should client_side care about
 	 * the ICP selection status?
 	 */
@@ -1584,15 +1585,6 @@
     if (checkNegativeHit(e)) {
 	http->log_type = LOG_TCP_NEGATIVE_HIT;
 	clientSendMoreData(data, buf, size);
-    } else if (r->method == METHOD_HEAD) {
-	/*
-	 * RFC 2068 seems to indicate there is no "conditional HEAD"
-	 * request.  We cannot validate a cached object for a HEAD
-	 * request, nor can we return 304.
-	 */
-	if (e->mem_status == IN_MEMORY)
-	    http->log_type = LOG_TCP_MEM_HIT;
-	clientSendMoreData(data, buf, size);
     } else if (!Config.onoff.offline && refreshCheckHTTP(e, r) && !http->flags.internal) {
 	debug(33, 5) ("clientCacheHit: in refreshCheck() block\n");
 	/*
@@ -1673,7 +1665,9 @@
 	/*
 	 * plain ol' cache hit
 	 */
-	if (e->mem_status == IN_MEMORY)
+	if (e->store_status != STORE_OK)
+	    http->log_type = LOG_TCP_MISS;
+	else if (e->mem_status == IN_MEMORY)
 	    http->log_type = LOG_TCP_MEM_HIT;
 	else if (Config.onoff.offline)
 	    http->log_type = LOG_TCP_OFFLINE_HIT;
@@ -2227,7 +2221,7 @@
 	} else if (clientGotNotEnough(http)) {
 	    debug(33, 5) ("clientWriteComplete: client didn't get all it expected\n");
 	    comm_close(fd);
-	} else if (http->request->body_connection) {
+	} else if (http->request->body_reader == clientReadBody) {
 	    debug(33, 5) ("clientWriteComplete: closing, but first we need to read the rest of the request\n");
 	    /* XXX We assumes the reply does fit in the TCP transmit window.
 	     * If not the connection may stall while sending the reply
@@ -2332,13 +2326,23 @@
 	e = http->entry = storeGetPublicByRequest(r);
     else
 	e = http->entry = NULL;
-    /* Release negatively cached IP-cache entries on reload */
-    if (r->flags.nocache)
+    /* Release IP-cache entries on reload */
+    if (r->flags.nocache) {
+#if USE_DNSSERVERS
 	ipcacheInvalidate(r->host);
+#else
+	ipcacheInvalidateNegative(r->host);
+#endif /* USE_DNSSERVERS */
+    }
 #if HTTP_VIOLATIONS
-    else if (r->flags.nocache_hack)
+    else if (r->flags.nocache_hack) {
+#if USE_DNSSERVERS
 	ipcacheInvalidate(r->host);
-#endif
+#else
+	ipcacheInvalidateNegative(r->host);
+#endif /* USE_DNSSERVERS */
+    }
+#endif /* HTTP_VIOLATIONS */
 #if USE_CACHE_DIGESTS
     http->lookup_type = e ? "HIT" : "MISS";
 #endif
@@ -2594,6 +2598,12 @@
     xmemcpy(inbuf, conn->in.buf, req_sz);
     *(inbuf + req_sz) = '\0';
 
+    /* Enforce max_request_size */
+    if (req_sz >= Config.maxRequestHeaderSize) {
+	debug(33, 5) ("parseHttpRequest: Too large request\n");
+	xfree(inbuf);
+	return parseHttpRequestAbort(conn, "error:request-too-large");
+    }
     /* Barf on NULL characters in the headers */
     if (strlen(inbuf) != req_sz) {
 	debug(33, 1) ("parseHttpRequest: Requestheader contains NULL characters\n");
@@ -3103,7 +3113,9 @@
 	    /* Do we expect a request-body? */
 	    if (request->content_length > 0) {
 		conn->body.size_left = request->content_length;
-		request->body_connection = conn;
+		request->body_reader = clientReadBody;
+		request->body_reader_data = conn;
+		cbdataLock(conn);
 		/* Is it too large? */
 		if (clientRequestBodyTooLarge(request->content_length)) {
 		    err = errorCon(ERR_TOO_BIG, HTTP_REQUEST_ENTITY_TOO_LARGE);
@@ -3159,15 +3171,20 @@
 }
 
 /* file_read like function, for reading body content */
-void
+static void
 clientReadBody(request_t * request, char *buf, size_t size, CBCB * callback, void *cbdata)
 {
-    ConnStateData *conn = request->body_connection;
+    ConnStateData *conn = request->body_reader_data;
+    if (!callback) {
+	clientAbortBody(request);
+	return;
+    }
     if (!conn) {
 	debug(33, 5) ("clientReadBody: no body to read, request=%p\n", request);
 	callback(buf, 0, cbdata);	/* Signal end of body */
 	return;
     }
+    assert(cbdataValid(conn));
     debug(33, 2) ("clientReadBody: start fd=%d body_size=%lu in.offset=%ld cb=%p req=%p\n", conn->fd, (unsigned long int) conn->body.size_left, (long int) conn->in.offset, callback, request);
     conn->body.callback = callback;
     conn->body.cbdata = cbdata;
@@ -3209,7 +3226,7 @@
     ConnStateData *conn = http->conn;
     cbdataLock(conn);
     if (conn->body.request)
-	clientAbortBody(conn->body.request);
+	requestAbortBody(conn->body.request);
     if (cbdataValid(conn))
 	clientEatRequestBodyHandler(NULL, -1, http);
     cbdataUnlock(conn);
@@ -3252,8 +3269,12 @@
 	    xmemmove(conn->in.buf, conn->in.buf + size, conn->in.offset);
 	/* Remove request link if this is the last part of the body, as
 	 * clientReadRequest automatically continues to process next request */
-	if (conn->body.size_left <= 0 && request != NULL)
-	    request->body_connection = NULL;
+	if (conn->body.size_left <= 0 && request != NULL) {
+	    request->body_reader = NULL;
+	    if (request->body_reader_data)
+		cbdataUnlock(request->body_reader_data);
+	    request->body_reader_data = NULL;
+	}
 	/* Remove clientReadBody arguments (the call is completed) */
 	conn->body.request = NULL;
 	conn->body.callback = NULL;
@@ -3274,14 +3295,16 @@
 }
 
 /* Abort a body request */
-void
+static void
 clientAbortBody(request_t * request)
 {
-    ConnStateData *conn = request->body_connection;
+    ConnStateData *conn = request->body_reader_data;
     char *buf;
     CBCB *callback;
     void *cbdata;
     int valid;
+    if (!cbdataValid(conn))
+	return;
     if (!conn->body.callback || conn->body.request != request)
 	return;
     buf = conn->body.buf;
diff -ruN squid-2.5.STABLE6/src/comm.c squid-2.5.STABLE7/src/comm.c
--- squid-2.5.STABLE6/src/comm.c	Sat Nov 29 11:52:59 2003
+++ squid-2.5.STABLE7/src/comm.c	Mon Sep 27 12:17:39 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: comm.c,v 1.324.2.3 2003/11/29 18:52:59 hno Exp $
+ * $Id: comm.c,v 1.324.2.4 2004/09/27 18:17:39 hno Exp $
  *
  * DEBUG: section 5     Socket Functions
  * AUTHOR: Harvest Derived
@@ -290,7 +290,8 @@
     }
     assert(ia->cur < ia->count);
     cs->in_addr = ia->in_addrs[ia->cur];
-    ipcacheCycleAddr(cs->host, NULL);
+    if (Config.onoff.balance_on_multiple_ip)
+	ipcacheCycleAddr(cs->host, NULL);
     cs->addrcount = ia->count;
     cs->connstart = squid_curtime;
     commConnectHandle(cs->fd, cs);
diff -ruN squid-2.5.STABLE6/src/dns_internal.c squid-2.5.STABLE7/src/dns_internal.c
--- squid-2.5.STABLE6/src/dns_internal.c	Mon May 31 17:33:52 2004
+++ squid-2.5.STABLE7/src/dns_internal.c	Thu Jul 29 07:26:20 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: dns_internal.c,v 1.45.2.3 2004/05/31 23:33:52 hno Exp $
+ * $Id: dns_internal.c,v 1.45.2.5 2004/07/29 13:26:20 hno Exp $
  *
  * DEBUG: section 78    DNS lookups; interacts with lib/rfc1035.c
  * AUTHOR: Duane Wessels
@@ -54,6 +54,8 @@
 typedef struct _ns ns;
 
 struct _idns_query {
+    hash_link hash;
+    char query[RFC1035_MAXHOSTNAMESZ + 1];
     char buf[512];
     size_t sz;
     unsigned short id;
@@ -66,6 +68,7 @@
     int attempt;
     const char *error;
     int rcode;
+    idns_query *queue;
 };
 
 struct _ns {
@@ -80,6 +83,7 @@
 static int nns_alloc = 0;
 static dlink_list lru_list;
 static int event_queued = 0;
+static hash_table *idns_lookup_hash = NULL;
 
 static OBJH idnsStats;
 static void idnsAddNameserver(const char *buf);
@@ -440,10 +444,32 @@
 }
 
 static void
+idnsCallback(idns_query * q, rfc1035_rr * answers, int n, const char *error)
+{
+    int valid;
+    valid = cbdataValid(q->callback_data);
+    cbdataUnlock(q->callback_data);
+    if (valid)
+	q->callback(q->callback_data, answers, n, error);
+    while (q->queue) {
+	idns_query *q2 = q->queue;
+	q->queue = q2->queue;
+	valid = cbdataValid(q2->callback_data);
+	cbdataUnlock(q2->callback_data);
+	if (valid)
+	    q2->callback(q2->callback_data, answers, n, error);
+	memFree(q2, MEM_IDNS_QUERY);
+    }
+    if (q->hash.key) {
+	hash_remove_link(idns_lookup_hash, &q->hash);
+	q->hash.key = NULL;
+    }
+}
+
+static void
 idnsGrokReply(const char *buf, size_t sz)
 {
     int n;
-    int valid;
     rfc1035_rr *answers = NULL;
     unsigned short rid = 0xFFFF;
     idns_query *q;
@@ -483,10 +509,7 @@
 	    return;
 	}
     }
-    valid = cbdataValid(q->callback_data);
-    cbdataUnlock(q->callback_data);
-    if (valid)
-	q->callback(q->callback_data, answers, n, q->error);
+    idnsCallback(q, answers, n, q->error);
     rfc1035RRDestroy(answers, n);
     memFree(q, MEM_IDNS_QUERY);
 }
@@ -585,17 +608,13 @@
 	if (tvSubDsec(q->start_t, current_time) < Config.Timeout.idns_query) {
 	    idnsSendQuery(q);
 	} else {
-	    int v = cbdataValid(q->callback_data);
 	    debug(78, 2) ("idnsCheckQueue: ID %x: giving up after %d tries and %5.1f seconds\n",
 		(int) q->id, q->nsends,
 		tvSubDsec(q->start_t, current_time));
-	    cbdataUnlock(q->callback_data);
-	    if (v) {
-		if (q->rcode != 0)
-		    q->callback(q->callback_data, NULL, -q->rcode, q->error);
-		else
-		    q->callback(q->callback_data, NULL, -16, "Timeout");
-	    }
+	    if (q->rcode != 0)
+		idnsCallback(q, NULL, -q->rcode, q->error);
+	    else
+		idnsCallback(q, NULL, -16, "Timeout");
 	    memFree(q, MEM_IDNS_QUERY);
 	}
     }
@@ -672,6 +691,7 @@
 	    "Internal DNS Statistics",
 	    idnsStats, 0, 1);
 	memset(RcodeMatrix, '\0', sizeof(RcodeMatrix));
+	idns_lookup_hash = hash_create((HASHCMP *) strcmp, 103, hash_string);
 	init++;
     }
 }
@@ -686,10 +706,37 @@
     idnsFreeNameservers();
 }
 
+static int
+idnsCachedLookup(const char *key, IDNSCB * callback, void *data)
+{
+    idns_query *q;
+    idns_query *old = hash_lookup(idns_lookup_hash, key);
+    if (!old)
+	return 0;
+    q = memAllocate(MEM_IDNS_QUERY);
+    q->callback = callback;
+    q->callback_data = data;
+    cbdataLock(q->callback_data);
+    q->queue = old->queue;
+    old->queue = q;
+    return 1;
+}
+
+static void
+idnsCacheQuery(idns_query * q, const char *key)
+{
+    xstrncpy(q->query, key, sizeof(q->query));
+    q->hash.key = q->query;
+    hash_join(idns_lookup_hash, &q->hash);
+}
+
 void
 idnsALookup(const char *name, IDNSCB * callback, void *data)
 {
-    idns_query *q = memAllocate(MEM_IDNS_QUERY);
+    idns_query *q;
+    if (idnsCachedLookup(name, callback, data))
+	return;
+    q = memAllocate(MEM_IDNS_QUERY);
     q->sz = sizeof(q->buf);
     q->id = rfc1035BuildAQuery(name, q->buf, &q->sz);
     if (0 == q->id) {
@@ -704,21 +751,27 @@
     q->callback_data = data;
     cbdataLock(q->callback_data);
     q->start_t = current_time;
+    idnsCacheQuery(q, name);
     idnsSendQuery(q);
 }
 
 void
 idnsPTRLookup(const struct in_addr addr, IDNSCB * callback, void *data)
 {
-    idns_query *q = memAllocate(MEM_IDNS_QUERY);
+    idns_query *q;
+    const char *ip = inet_ntoa(addr);
+    if (idnsCachedLookup(ip, callback, data))
+	return;
+    q = memAllocate(MEM_IDNS_QUERY);
     q->sz = sizeof(q->buf);
     q->id = rfc1035BuildPTRQuery(addr, q->buf, &q->sz);
     debug(78, 3) ("idnsPTRLookup: buf is %d bytes for %s, id = %#hx\n",
-	(int) q->sz, inet_ntoa(addr), q->id);
+	(int) q->sz, ip, q->id);
     q->callback = callback;
     q->callback_data = data;
     cbdataLock(q->callback_data);
     q->start_t = current_time;
+    idnsCacheQuery(q, ip);
     idnsSendQuery(q);
 }
 
diff -ruN squid-2.5.STABLE6/src/enums.h squid-2.5.STABLE7/src/enums.h
--- squid-2.5.STABLE6/src/enums.h	Wed Feb  4 10:42:28 2004
+++ squid-2.5.STABLE7/src/enums.h	Tue Oct  5 15:31:26 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: enums.h,v 1.203.2.10 2004/02/04 17:42:28 hno Exp $
+ * $Id: enums.h,v 1.203.2.13 2004/10/05 21:31:26 hno Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -134,6 +134,8 @@
     ACL_MAXCONN,
     ACL_REQ_MIME_TYPE,
     ACL_REP_MIME_TYPE,
+    ACL_REP_HEADER,
+    ACL_REQ_HEADER,
     ACL_MAX_USER_IP,
     ACL_EXTERNAL,
     ACL_URLLOGIN,
@@ -188,6 +190,7 @@
     HDR_CACHE_CONTROL,
     HDR_CONNECTION,
     HDR_CONTENT_BASE,
+    HDR_CONTENT_DISPOSITION,
     HDR_CONTENT_ENCODING,
     HDR_CONTENT_LANGUAGE,
     HDR_CONTENT_LENGTH,
@@ -480,7 +483,8 @@
     HTTP_GATEWAY_TIMEOUT = 504,
     HTTP_HTTP_VERSION_NOT_SUPPORTED = 505,
     HTTP_INSUFFICIENT_STORAGE = 507,	/* RFC2518 section 10.6 */
-    HTTP_INVALID_HEADER = 600	/* Squid header parsing error */
+    HTTP_INVALID_HEADER = 600,	/* Squid header parsing error */
+    HTTP_HEADER_TOO_LARGE = 601	/* Header too large to process */
 } http_status;
 
 /*
diff -ruN squid-2.5.STABLE6/src/errorpage.c squid-2.5.STABLE7/src/errorpage.c
--- squid-2.5.STABLE6/src/errorpage.c	Mon Mar 29 02:41:36 2004
+++ squid-2.5.STABLE7/src/errorpage.c	Fri Aug  6 05:05:05 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: errorpage.c,v 1.167.2.10 2004/03/29 09:41:36 hno Exp $
+ * $Id: errorpage.c,v 1.167.2.12 2004/08/06 11:05:05 hno Exp $
  *
  * DEBUG: section 4     Error Generation
  * AUTHOR: Duane Wessels
@@ -584,6 +584,7 @@
 	break;
     default:
 	memBufPrintf(&mb, "%%%c", token);
+	do_quote = 0;
 	break;
     }
     if (!p)
diff -ruN squid-2.5.STABLE6/src/external_acl.c squid-2.5.STABLE7/src/external_acl.c
--- squid-2.5.STABLE6/src/external_acl.c	Tue Feb 17 21:00:08 2004
+++ squid-2.5.STABLE7/src/external_acl.c	Sat Aug 14 15:01:33 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: external_acl.c,v 1.1.2.30 2004/02/18 04:00:08 hno Exp $
+ * $Id: external_acl.c,v 1.1.2.31 2004/08/14 21:01:33 hno Exp $
  *
  * DEBUG: section 82    External ACL
  * AUTHOR: Henrik Nordstrom, MARA Systems AB
@@ -89,6 +89,10 @@
     int cache_entries;
     dlink_list queue;
     int require_auth;
+    enum {
+	QUOTE_METHOD_SHELL = 1,
+	QUOTE_METHOD_URL
+    } quote;
 };
 
 struct _external_acl_format {
@@ -169,6 +173,7 @@
     if (!token)
 	self_destruct();
     a->name = xstrdup(token);
+    a->quote = QUOTE_METHOD_SHELL;
 
     token = strtok(NULL, w_space);
     /* Parse options */
@@ -183,6 +188,14 @@
 	    a->children = atoi(token + 12);
 	} else if (strncmp(token, "cache=", 6) == 0) {
 	    a->cache_size = atoi(token + 6);
+	} else if (strcmp(token, "protocol=2.5") == 0) {
+	    a->quote = QUOTE_METHOD_SHELL;
+	} else if (strcmp(token, "protocol=3.0") == 0) {
+	    a->quote = QUOTE_METHOD_URL;
+	} else if (strcmp(token, "quote=url") == 0) {
+	    a->quote = QUOTE_METHOD_URL;
+	} else if (strcmp(token, "quote=shell") == 0) {
+	    a->quote = QUOTE_METHOD_SHELL;
 	} else {
 	    break;
 	}
@@ -558,14 +571,24 @@
 	    str = "-";
 	if (!first)
 	    memBufAppend(&mb, " ", 1);
-	strwordquote(&mb, str);
+	if (acl_data->def->quote == QUOTE_METHOD_URL) {
+	    const char *quoted = rfc1738_escape(str);
+	    memBufAppend(&mb, quoted, strlen(quoted));
+	} else {
+	    strwordquote(&mb, str);
+	}
 	stringClean(&sb);
 	first = 0;
     }
     for (arg = acl_data->arguments; arg; arg = arg->next) {
 	if (!first)
 	    memBufAppend(&mb, " ", 1);
-	strwordquote(&mb, arg->key);
+	if (acl_data->def->quote == QUOTE_METHOD_URL) {
+	    const char *quoted = rfc1738_escape(arg->key);
+	    memBufAppend(&mb, quoted, strlen(quoted));
+	} else {
+	    strwordquote(&mb, arg->key);
+	}
 	first = 0;
     }
     return mb.buf;
@@ -708,6 +731,8 @@
 	    value = strchr(token, '=');
 	    if (value) {
 		*value++ = '\0';	/* terminate the token, and move up to the value */
+		if (state->def->quote == QUOTE_METHOD_URL)
+		    rfc1738_unescape(value);
 		if (strcmp(token, "user") == 0)
 		    user = value;
 		else if (strcmp(token, "error") == 0)
diff -ruN squid-2.5.STABLE6/src/forward.c squid-2.5.STABLE7/src/forward.c
--- squid-2.5.STABLE6/src/forward.c	Wed Feb 18 06:44:55 2004
+++ squid-2.5.STABLE7/src/forward.c	Tue Oct  5 16:34:42 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: forward.c,v 1.82.2.12 2004/02/18 13:44:55 hno Exp $
+ * $Id: forward.c,v 1.82.2.13 2004/10/05 22:34:42 hno Exp $
  *
  * DEBUG: section 17    Request Forwarding
  * AUTHOR: Duane Wessels
@@ -152,7 +152,7 @@
     /* If there is a request body then Squid can only try once
      * even if the method is indempotent
      */
-    if (fwdState->request->body_connection)
+    if (fwdState->request->body_reader)
 	return 0;
 
     /* RFC2616 9.1 Safe and Idempotent Methods */
diff -ruN squid-2.5.STABLE6/src/fs/Makefile.in squid-2.5.STABLE7/src/fs/Makefile.in
--- squid-2.5.STABLE6/src/fs/Makefile.in	Tue Jun  8 05:37:23 2004
+++ squid-2.5.STABLE7/src/fs/Makefile.in	Sat Jul 10 06:11:49 2004
@@ -15,7 +15,7 @@
 
 #  Makefile for storage modules in the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.8.2.8 2004/06/08 11:37:23 hno Exp $
+#  $Id: Makefile.in,v 1.8.2.10 2004/07/10 12:11:49 hno Exp $
 #
 
 SHELL = @SHELL@
diff -ruN squid-2.5.STABLE6/src/fs/aufs/store_dir_aufs.c squid-2.5.STABLE7/src/fs/aufs/store_dir_aufs.c
--- squid-2.5.STABLE6/src/fs/aufs/store_dir_aufs.c	Wed Aug  6 08:16:26 2003
+++ squid-2.5.STABLE7/src/fs/aufs/store_dir_aufs.c	Wed Aug 25 15:07:25 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: store_dir_aufs.c,v 1.40.2.8 2003/08/06 14:16:26 hno Exp $
+ * $Id: store_dir_aufs.c,v 1.40.2.9 2004/08/25 21:07:25 hno Exp $
  *
  * DEBUG: section 47    Store Directory Routines
  * AUTHOR: Duane Wessels
@@ -320,6 +320,10 @@
     char *path;
     int fd;
     path = storeAufsDirSwapLogFile(sd, NULL);
+    if (aioinfo->swaplog_fd >= 0) {
+	debug(50, 1) ("storeAufsDirOpenSwapLog: %s already open\n", path);
+	return;
+    }
     fd = file_open(path, O_WRONLY | O_CREAT | O_BINARY);
     if (fd < 0) {
 	debug(50, 1) ("%s: %s\n", path, xstrerror());
@@ -963,6 +967,10 @@
     state->new = xstrdup(storeAufsDirSwapLogFile(sd, ".clean"));
     state->fd = file_open(state->new, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY);
     if (state->fd < 0) {
+	debug(50, 0) ("storeDirWriteCleanStart: %s: open: %s\n",
+	    state->new, xstrerror());
+	debug(50, 0) ("storeDirWriteCleanStart: Current swap logfile "
+	    "not replaced.\n");
 	xfree(state->new);
 	xfree(state);
 	return -1;
diff -ruN squid-2.5.STABLE6/src/fs/diskd/Makefile.in squid-2.5.STABLE7/src/fs/diskd/Makefile.in
--- squid-2.5.STABLE6/src/fs/diskd/Makefile.in	Tue Jun  8 05:37:23 2004
+++ squid-2.5.STABLE7/src/fs/diskd/Makefile.in	Sat Jul 10 06:11:50 2004
@@ -16,7 +16,7 @@
 #
 #  Makefile for the DISKD storage driver for the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.6.2.7 2004/06/08 11:37:23 hno Exp $
+#  $Id: Makefile.in,v 1.6.2.9 2004/07/10 12:11:50 hno Exp $
 #
 
 SHELL = @SHELL@
diff -ruN squid-2.5.STABLE6/src/fs/ufs/store_dir_ufs.c squid-2.5.STABLE7/src/fs/ufs/store_dir_ufs.c
--- squid-2.5.STABLE6/src/fs/ufs/store_dir_ufs.c	Mon May 31 16:03:31 2004
+++ squid-2.5.STABLE7/src/fs/ufs/store_dir_ufs.c	Wed Aug 25 15:07:25 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: store_dir_ufs.c,v 1.39.2.8 2004/05/31 22:03:31 hno Exp $
+ * $Id: store_dir_ufs.c,v 1.39.2.10 2004/08/25 21:07:25 hno Exp $
  *
  * DEBUG: section 47    Store Directory Routines
  * AUTHOR: Duane Wessels
@@ -319,6 +319,10 @@
     char *path;
     int fd;
     path = storeUfsDirSwapLogFile(sd, NULL);
+    if (ufsinfo->swaplog_fd >= 0) {
+	debug(50, 1) ("storeUfsDirOpenSwapLog: %s already open\n", path);
+	return;
+    }
     fd = file_open(path, O_WRONLY | O_CREAT | O_BINARY);
     if (fd < 0) {
 	debug(50, 1) ("%s: %s\n", path, xstrerror());
@@ -961,6 +965,10 @@
     state->new = xstrdup(storeUfsDirSwapLogFile(sd, ".clean"));
     state->fd = file_open(state->new, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY);
     if (state->fd < 0) {
+	debug(50, 0) ("storeDirWriteCleanStart: %s: open: %s\n",
+	    state->new, xstrerror());
+	debug(50, 0) ("storeDirWriteCleanStart: Current swap logfile "
+	    "not replaced.\n");
 	xfree(state->new);
 	xfree(state);
 	return -1;
@@ -1636,6 +1644,7 @@
     ufsinfo->swaplog_fd = -1;
     ufsinfo->map = NULL;	/* Debugging purposes */
     ufsinfo->suggest = 0;
+    ufsinfo->open_files = 0;
     sd->init = storeUfsDirInit;
     sd->newfs = storeUfsDirNewfs;
     sd->dump = storeUfsDirDump;
diff -ruN squid-2.5.STABLE6/src/fs/ufs/store_io_ufs.c squid-2.5.STABLE7/src/fs/ufs/store_io_ufs.c
--- squid-2.5.STABLE6/src/fs/ufs/store_io_ufs.c	Mon May 31 16:03:31 2004
+++ squid-2.5.STABLE7/src/fs/ufs/store_io_ufs.c	Sat Jul 17 13:44:20 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: store_io_ufs.c,v 1.9.2.2 2004/05/31 22:03:31 hno Exp $
+ * $Id: store_io_ufs.c,v 1.9.2.4 2004/07/17 19:44:20 hno Exp $
  *
  * DEBUG: section 79    Storage Manager UFS Interface
  * AUTHOR: Duane Wessels
@@ -108,7 +108,7 @@
     debug(79, 3) ("storeUfsCreate: fileno %08X\n", filn);
     fd = file_open(path, mode);
     if (fd < 0) {
-	debug(79, 3) ("storeUfsCreate: got failure (%d)\n", errno);
+	debug(79, 1) ("storeUfsCreate: Failed to create %s (%s)\n", path, xstrerror());
 	return NULL;
     }
     debug(79, 3) ("storeUfsCreate: opened FD %d\n", fd);
diff -ruN squid-2.5.STABLE6/src/ftp.c squid-2.5.STABLE7/src/ftp.c
--- squid-2.5.STABLE6/src/ftp.c	Mon May 31 17:14:37 2004
+++ squid-2.5.STABLE7/src/ftp.c	Tue Oct  5 16:34:42 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ftp.c,v 1.316.2.14 2004/05/31 23:14:37 hno Exp $
+ * $Id: ftp.c,v 1.316.2.15 2004/10/05 22:34:42 hno Exp $
  *
  * DEBUG: section 9     File Transfer Protocol (FTP)
  * AUTHOR: Harvest Derived
@@ -2309,7 +2309,7 @@
 	return;
     if (!err) {
 	/* Shedule the rest of the request */
-	clientReadBody(ftpState->request, ftpState->data.buf, ftpState->data.size, ftpRequestBody, ftpState);
+	requestReadBody(ftpState->request, ftpState->data.buf, ftpState->data.size, ftpRequestBody, ftpState);
     } else {
 	debug(9, 1) ("ftpDataWriteCallback: write error: %s\n", xstrerror());
 	ftpFailed(ftpState, ERR_WRITE_ERROR);
@@ -2322,7 +2322,7 @@
     FtpStateData *ftpState = (FtpStateData *) data;
     debug(9, 3) ("ftpDataWrite\n");
     /* This starts the body transfer */
-    clientReadBody(ftpState->request, ftpState->data.buf, ftpState->data.size, ftpRequestBody, ftpState);
+    requestReadBody(ftpState->request, ftpState->data.buf, ftpState->data.size, ftpRequestBody, ftpState);
 }
 
 static void
diff -ruN squid-2.5.STABLE6/src/http.c squid-2.5.STABLE7/src/http.c
--- squid-2.5.STABLE6/src/http.c	Tue Jun  8 04:54:07 2004
+++ squid-2.5.STABLE7/src/http.c	Thu Oct  7 12:43:44 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: http.c,v 1.384.2.16 2004/06/08 10:54:07 hno Exp $
+ * $Id: http.c,v 1.384.2.19 2004/10/07 18:43:44 hno Exp $
  *
  * DEBUG: section 11    Hypertext Transfer Protocol (HTTP)
  * AUTHOR: Harvest Derived
@@ -65,18 +65,15 @@
     if (httpState == NULL)
 	return;
     if (httpState->body_buf) {
-	if (httpState->orig_request->body_connection) {
-	    clientAbortBody(httpState->orig_request);
-	}
+	requestAbortBody(httpState->orig_request);
 	if (httpState->body_buf) {
 	    memFree(httpState->body_buf, MEM_8K_BUF);
 	    httpState->body_buf = NULL;
 	}
     }
     storeUnlockObject(httpState->entry);
-    if (httpState->reply_hdr) {
-	memFree(httpState->reply_hdr, MEM_8K_BUF);
-	httpState->reply_hdr = NULL;
+    if (!memBufIsNull(&httpState->reply_hdr)) {
+	memBufClean(&httpState->reply_hdr);
     }
     requestUnlink(httpState->request);
     requestUnlink(httpState->orig_request);
@@ -320,6 +317,7 @@
     case HTTP_UNAUTHORIZED:
     case HTTP_PROXY_AUTHENTICATION_REQUIRED:
     case HTTP_INVALID_HEADER:	/* Squid header parsing error */
+    case HTTP_HEADER_TOO_LARGE:
     default:			/* Unknown status code */
 	return 0;
 	/* NOTREACHED */
@@ -371,6 +369,7 @@
     }
     stringClean(&vary);
 #if X_ACCELERATOR_VARY
+    pos = NULL;
     vary = httpHeaderGetList(&reply->header, HDR_X_ACCELERATOR_VARY);
     while (strListGetItem(&vary, ',', &item, &ilen, &pos)) {
 	char *name = xmalloc(ilen + 1);
@@ -395,50 +394,61 @@
 }
 
 /* rewrite this later using new interfaces @?@ */
-void
+static void
 httpProcessReplyHeader(HttpStateData * httpState, const char *buf, int size)
 {
-    char *t = NULL;
     StoreEntry *entry = httpState->entry;
-    int room;
     size_t hdr_len;
+    size_t hdr_size = headersEnd(buf, size);
     HttpReply *reply = entry->mem_obj->reply;
     Ctx ctx;
     debug(11, 3) ("httpProcessReplyHeader: key '%s'\n",
 	storeKeyText(entry->hash.key));
-    if (httpState->reply_hdr == NULL)
-	httpState->reply_hdr = memAllocate(MEM_8K_BUF);
+    if (memBufIsNull(&httpState->reply_hdr))
+	memBufDefInit(&httpState->reply_hdr);
     assert(httpState->reply_hdr_state == 0);
-    hdr_len = httpState->reply_hdr_size;
-    room = 8191 - hdr_len;
-    xmemcpy(httpState->reply_hdr + hdr_len, buf, room < size ? room : size);
-    hdr_len += room < size ? room : size;
-    httpState->reply_hdr[hdr_len] = '\0';
-    httpState->reply_hdr_size = hdr_len;
-    if (hdr_len > 4 && strncmp(httpState->reply_hdr, "HTTP/", 5)) {
-	debug(11, 3) ("httpProcessReplyHeader: Non-HTTP-compliant header: '%s'\n", httpState->reply_hdr);
+    if (hdr_size)
+	memBufAppend(&httpState->reply_hdr, buf, hdr_size);
+    else
+	memBufAppend(&httpState->reply_hdr, buf, size);
+    hdr_len = httpState->reply_hdr.size;
+    if (hdr_len > 4 && strncmp(httpState->reply_hdr.buf, "HTTP/", 5)) {
+	debug(11, 3) ("httpProcessReplyHeader: Non-HTTP-compliant header: '%s'\n", httpState->reply_hdr.buf);
 	httpState->reply_hdr_state += 2;
+	memBufClean(&httpState->reply_hdr);
 	reply->sline.status = HTTP_INVALID_HEADER;
 	return;
     }
-    t = httpState->reply_hdr + hdr_len;
+    if (hdr_size != hdr_len)
+	hdr_size = headersEnd(httpState->reply_hdr.buf, hdr_len);
+    if (hdr_size)
+	hdr_len = hdr_size;
+    if (hdr_len > Config.maxReplyHeaderSize) {
+	debug(11, 1) ("httpProcessReplyHeader: Too large reply header\n");
+	if (!memBufIsNull(&httpState->reply_hdr))
+	    memBufClean(&httpState->reply_hdr);
+	reply->sline.status = HTTP_HEADER_TOO_LARGE;
+	return;
+    }
     /* headers can be incomplete only if object still arriving */
-    if (!httpState->eof) {
-	size_t k = headersEnd(httpState->reply_hdr, 8192);
-	if (0 == k)
+    if (!hdr_size) {
+	if (httpState->eof)
+	    hdr_size = hdr_len;
+	else
 	    return;		/* headers not complete */
-	t = httpState->reply_hdr + k;
     }
-    *t = '\0';
+    /* Cut away any excess body data (only needed for debug?) */
+    memBufAppend(&httpState->reply_hdr, "\0", 1);
+    httpState->reply_hdr.buf[hdr_size] = '\0';
     httpState->reply_hdr_state++;
     assert(httpState->reply_hdr_state == 1);
     ctx = ctx_enter(entry->mem_obj->url);
     httpState->reply_hdr_state++;
     debug(11, 9) ("GOT HTTP REPLY HDR:\n---------\n%s\n----------\n",
-	httpState->reply_hdr);
+	httpState->reply_hdr.buf);
     /* Parse headers into reply structure */
     /* what happens if we fail to parse here? */
-    httpReplyParse(reply, httpState->reply_hdr, hdr_len);
+    httpReplyParse(reply, httpState->reply_hdr.buf, hdr_size);
     storeTimestampsSet(entry);
     /* Check if object is cacheable or not based on reply code */
     debug(11, 3) ("httpProcessReplyHeader: HTTP CODE: %d\n", reply->sline.status);
@@ -489,7 +499,7 @@
 	if (Config.onoff.detect_broken_server_pconns && httpReplyBodySize(httpState->request->method, reply) == -1) {
 	    debug(11, 1) ("httpProcessReplyHeader: Impossible keep-alive header from '%s'\n", storeUrl(entry));
 	    debug(11, 2) ("GOT HTTP REPLY HDR:\n---------\n%s\n----------\n",
-		httpState->reply_hdr);
+		httpState->reply_hdr.buf);
 	    httpState->flags.keepalive_broken = 1;
 	}
     }
@@ -600,7 +610,7 @@
 	    clen >>= 1;
 	IOStats.Http.read_hist[bin]++;
     }
-    if (!httpState->reply_hdr && len > 0 && fd_table[fd].uses > 1) {
+    if (!httpState->reply_hdr.size && len > 0 && fd_table[fd].uses > 1) {
 	/* Skip whitespace */
 	while (len > 0 && xisspace(*buf))
 	    xmemmove(buf, buf + 1, len--);
@@ -618,7 +628,7 @@
 	    commSetSelect(fd, COMM_SELECT_READ, httpReadReply, httpState, 0);
 	} else if (entry->mem_obj->inmem_hi == 0) {
 	    ErrorState *err;
-	    err = errorCon(ERR_READ_ERROR, HTTP_INTERNAL_SERVER_ERROR);
+	    err = errorCon(ERR_READ_ERROR, HTTP_BAD_GATEWAY);
 	    err->request = requestLink((request_t *) request);
 	    err->xerrno = errno;
 	    fwdFail(httpState->fwd, err);
@@ -628,7 +638,7 @@
 	}
     } else if (len == 0 && entry->mem_obj->inmem_hi == 0) {
 	ErrorState *err;
-	err = errorCon(ERR_ZERO_SIZE_OBJECT, HTTP_SERVICE_UNAVAILABLE);
+	err = errorCon(ERR_ZERO_SIZE_OBJECT, HTTP_BAD_GATEWAY);
 	err->xerrno = errno;
 	err->request = requestLink((request_t *) request);
 	fwdFail(httpState->fwd, err);
@@ -645,11 +655,31 @@
 	     * we want to process the reply headers.
 	     */
 	    httpProcessReplyHeader(httpState, buf, len);
-	fwdComplete(httpState->fwd);
+	if (entry->mem_obj->reply->sline.status == HTTP_HEADER_TOO_LARGE) {
+	    ErrorState *err;
+	    storeEntryReset(entry);
+	    err = errorCon(ERR_TOO_BIG, HTTP_BAD_GATEWAY);
+	    err->request = requestLink((request_t *) request);
+	    fwdFail(httpState->fwd, err);
+	    httpState->fwd->flags.dont_retry = 1;
+	} else {
+	    fwdComplete(httpState->fwd);
+	}
 	comm_close(fd);
+	return;
     } else {
 	if (httpState->reply_hdr_state < 2) {
 	    httpProcessReplyHeader(httpState, buf, len);
+	    if (entry->mem_obj->reply->sline.status == HTTP_HEADER_TOO_LARGE) {
+		ErrorState *err;
+		storeEntryReset(entry);
+		err = errorCon(ERR_TOO_BIG, HTTP_BAD_GATEWAY);
+		err->request = requestLink((request_t *) request);
+		fwdFail(httpState->fwd, err);
+		httpState->fwd->flags.dont_retry = 1;
+		comm_close(fd);
+		return;
+	    }
 	    if (httpState->reply_hdr_state == 2) {
 		http_status s = entry->mem_obj->reply->sline.status;
 #if WIP_FWD_LOG
@@ -719,7 +749,7 @@
 	return;
     if (errflag) {
 	if (entry->mem_obj->inmem_hi == 0) {
-	    err = errorCon(ERR_WRITE_ERROR, HTTP_INTERNAL_SERVER_ERROR);
+	    err = errorCon(ERR_WRITE_ERROR, HTTP_BAD_GATEWAY);
 	    err->xerrno = errno;
 	    err->request = requestLink(httpState->orig_request);
 	    errorAppendEntry(entry, err);
@@ -1002,7 +1032,7 @@
     commSetTimeout(fd, Config.Timeout.lifetime, httpTimeout, httpState);
     commSetSelect(fd, COMM_SELECT_READ, httpReadReply, httpState, 0);
 
-    if (httpState->orig_request->body_connection)
+    if (httpState->orig_request->body_reader)
 	sendHeaderDone = httpSendRequestEntry;
     else
 	sendHeaderDone = httpSendComplete;
@@ -1175,7 +1205,7 @@
 	return;
     if (errflag) {
 	if (entry->mem_obj->inmem_hi == 0) {
-	    err = errorCon(ERR_WRITE_ERROR, HTTP_INTERNAL_SERVER_ERROR);
+	    err = errorCon(ERR_WRITE_ERROR, HTTP_BAD_GATEWAY);
 	    err->xerrno = errno;
 	    err->request = requestLink(httpState->orig_request);
 	    errorAppendEntry(entry, err);
@@ -1188,7 +1218,7 @@
 	return;
     }
     httpState->body_buf = memAllocate(MEM_8K_BUF);
-    clientReadBody(httpState->orig_request, httpState->body_buf, 8192, httpRequestBodyHandler, httpState);
+    requestReadBody(httpState->orig_request, httpState->body_buf, 8192, httpRequestBodyHandler, httpState);
 }
 
 void
diff -ruN squid-2.5.STABLE6/src/ipcache.c squid-2.5.STABLE7/src/ipcache.c
--- squid-2.5.STABLE6/src/ipcache.c	Thu Feb 12 02:32:09 2004
+++ squid-2.5.STABLE7/src/ipcache.c	Mon Sep 27 12:17:39 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ipcache.c,v 1.236.2.3 2004/02/12 09:32:09 hno Exp $
+ * $Id: ipcache.c,v 1.236.2.4 2004/09/27 18:17:39 hno Exp $
  *
  * DEBUG: section 14    IP Cache
  * AUTHOR: Harvest Derived
@@ -116,6 +116,7 @@
 static void
 ipcacheRelease(ipcache_entry * i)
 {
+    debug(14, 3) ("ipcacheRelease: Releasing entry for '%s'\n", (const char *) i->hash.key);
     hash_remove_link(ip_table, (hash_link *) i);
     dlinkDelete(&i->lru, &lru_list);
     ipcacheFreeEntry(i);
@@ -332,7 +333,7 @@
 	return i;
     }
     assert(answers);
-    for (j = 0, k = 0; k < nr; k++) {
+    for (k = 0; k < nr; k++) {
 	if (answers[k].type != RFC1035_TYPE_A)
 	    continue;
 	if (answers[k].class != RFC1035_CLASS_IN)
@@ -582,6 +583,20 @@
      */
 }
 
+void
+ipcacheInvalidateNegative(const char *name)
+{
+    ipcache_entry *i;
+    if ((i = ipcache_get(name)) == NULL)
+	return;
+    if (i->flags.negcached)
+	i->expires = squid_curtime;
+    /*
+     * NOTE, don't call ipcacheRelease here becuase we might be here due
+     * to a thread started from a callback.
+     */
+}
+
 ipcache_addrs *
 ipcacheCheckNumeric(const char *name)
 {
@@ -669,6 +684,7 @@
     if (!ia->bad_mask[k]) {
 	ia->bad_mask[k] = TRUE;
 	ia->badcount++;
+	i->expires = XMIN(squid_curtime + XMAX(60, Config.negativeDnsTtl), i->expires);
 	debug(14, 2) ("ipcacheMarkBadAddr: %s [%s]\n", name, inet_ntoa(addr));
     }
     ipcacheCycleAddr(name, ia);
diff -ruN squid-2.5.STABLE6/src/protos.h squid-2.5.STABLE7/src/protos.h
--- squid-2.5.STABLE6/src/protos.h	Wed Feb  4 10:42:28 2004
+++ squid-2.5.STABLE7/src/protos.h	Tue Oct  5 16:34:42 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: protos.h,v 1.420.2.22 2004/02/04 17:42:28 hno Exp $
+ * $Id: protos.h,v 1.420.2.25 2004/10/05 22:34:42 hno Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -141,8 +141,6 @@
 extern void clientHttpConnectionsClose(void);
 extern StoreEntry *clientCreateStoreEntry(clientHttpRequest *, method_t, request_flags);
 extern int isTcpHit(log_type);
-extern void clientReadBody(request_t * req, char *buf, size_t size, CBCB * callback, void *data);
-extern void clientAbortBody(request_t * req);
 
 extern int commSetNonBlocking(int fd);
 extern int commUnsetNonBlocking(int fd);
@@ -304,8 +302,6 @@
 /* http.c */
 extern int httpCachable(method_t);
 extern void httpStart(FwdState *);
-extern void httpParseReplyHeaders(const char *, http_reply *);
-extern void httpProcessReplyHeader(HttpStateData *, const char *, int);
 extern mb_size_t httpBuildRequestPrefix(request_t * request,
     request_t * orig_request,
     StoreEntry * entry,
@@ -521,6 +517,8 @@
 extern int httpRequestPrefixLen(const request_t * req);
 extern int httpRequestHdrAllowed(const HttpHeaderEntry * e, String * strConnection);
 extern int httpRequestHdrAllowedByName(http_hdr_type id);
+extern void requestReadBody(request_t * request, char *buf, size_t size, CBCB * callback, void *cbdata);
+extern void requestAbortBody(request_t * request);
 
 extern void icmpOpen(void);
 extern void icmpClose(void);
@@ -585,10 +583,9 @@
 extern EVH ipcache_purgelru;
 extern const ipcache_addrs *ipcache_gethostbyname(const char *, int flags);
 extern void ipcacheInvalidate(const char *);
-extern void ipcacheReleaseInvalid(const char *);
+extern void ipcacheInvalidateNegative(const char *);
 extern void ipcache_init(void);
 extern void stat_ipcache_get(StoreEntry *);
-extern int ipcacheQueueDrain(void);
 extern void ipcacheCycleAddr(const char *name, ipcache_addrs *);
 extern void ipcacheMarkBadAddr(const char *name, struct in_addr);
 extern void ipcacheMarkGoodAddr(const char *name, struct in_addr);
diff -ruN squid-2.5.STABLE6/src/repl/Makefile.in squid-2.5.STABLE7/src/repl/Makefile.in
--- squid-2.5.STABLE6/src/repl/Makefile.in	Tue Jun  8 05:37:23 2004
+++ squid-2.5.STABLE7/src/repl/Makefile.in	Sat Jul 10 06:11:50 2004
@@ -15,7 +15,7 @@
 
 #  Makefile for storage modules in the Squid Object Cache server
 #
-#  $Id: Makefile.in,v 1.7.2.8 2004/06/08 11:37:23 hno Exp $
+#  $Id: Makefile.in,v 1.7.2.10 2004/07/10 12:11:50 hno Exp $
 #
 
 SHELL = @SHELL@
diff -ruN squid-2.5.STABLE6/src/repl/heap/store_repl_heap.c squid-2.5.STABLE7/src/repl/heap/store_repl_heap.c
--- squid-2.5.STABLE6/src/repl/heap/store_repl_heap.c	Sun Jul 21 18:07:17 2002
+++ squid-2.5.STABLE7/src/repl/heap/store_repl_heap.c	Thu Aug  5 14:23:01 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: store_repl_heap.c,v 1.8.2.1 2002/07/22 00:07:17 hno Exp $
+ * $Id: store_repl_heap.c,v 1.8.2.2 2004/08/05 20:23:01 hno Exp $
  *
  * DEBUG: section ?     HEAP based removal policies
  * AUTHOR: Henrik Nordstrom
@@ -191,6 +191,7 @@
     age = heap_peepminkey(heap->heap);
     entry = heap_extractmin(heap->heap);
     if (storeEntryLocked(entry)) {
+	storeLockObject(entry);
 	linklistPush(&heap_walker->locked_entries, entry);
 	goto try_again;
     }
@@ -220,6 +221,7 @@
     while ((entry = linklistShift(&heap_walker->locked_entries))) {
 	heap_node *node = heap_insert(heap->heap, entry);
 	SET_POLICY_NODE(entry, node);
+	storeUnlockObject(entry);
     }
     safe_free(walker->_data);
     cbdataFree(walker);
diff -ruN squid-2.5.STABLE6/src/squid.h squid-2.5.STABLE7/src/squid.h
--- squid-2.5.STABLE6/src/squid.h	Sun Mar  9 11:41:27 2003
+++ squid-2.5.STABLE7/src/squid.h	Mon Aug  9 07:54:23 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: squid.h,v 1.216.2.6 2003/03/09 18:41:27 hno Exp $
+ * $Id: squid.h,v 1.216.2.7 2004/08/09 13:54:23 hno Exp $
  *
  * AUTHOR: Duane Wessels
  *
@@ -418,6 +418,10 @@
 
 #if !HAVE_SNPRINTF
 #include "snprintf.h"
+#endif
+
+#if !HAVE_INITGROUPS
+#include "initgroups.h"
 #endif
 
 #define XMIN(x,y) ((x)<(y)? (x) : (y))
diff -ruN squid-2.5.STABLE6/src/ssl.c squid-2.5.STABLE7/src/ssl.c
--- squid-2.5.STABLE6/src/ssl.c	Mon Jun  7 15:20:34 2004
+++ squid-2.5.STABLE7/src/ssl.c	Mon Sep 27 12:07:30 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ssl.c,v 1.118.2.6 2004/06/07 21:20:34 hno Exp $
+ * $Id: ssl.c,v 1.118.2.7 2004/09/27 18:07:30 hno Exp $
  *
  * DEBUG: section 26    Secure Sockets Layer Proxy
  * AUTHOR: Duane Wessels
@@ -51,6 +51,7 @@
 #if DELAY_POOLS
     delay_id delay_id;
 #endif
+    int connected;
 } SslStateData;
 
 static const char *const conn_established = "HTTP/1.0 200 Connection established\r\n\r\n";
@@ -91,7 +92,9 @@
     debug(26, 3) ("sslClientClosed: FD %d\n", fd);
     assert(fd == sslState->client.fd);
     sslState->client.fd = -1;
-    if (sslState->server.fd == -1)
+    if (sslState->server.fd != -1)
+	comm_close(sslState->server.fd);
+    else
 	sslStateFree(sslState);
 }
 
@@ -152,7 +155,9 @@
     } else if (sslState->client.len == 0) {
 	comm_close(sslState->server.fd);
     }
-    if (sslState->server.fd > -1) {
+    if (!sslState->connected) {
+	/* Not yet connected. wait.. */
+    } else if (sslState->server.fd > -1) {
 	if (sslState->client.len > 0) {
 	    commSetSelect(sslState->server.fd,
 		COMM_SELECT_WRITE,
@@ -354,13 +359,7 @@
 {
     SslStateData *sslState = data;
     debug(26, 3) ("sslTimeout: FD %d\n", fd);
-    /* temporary lock to save our own feets (comm_close -> sslClientClosed -> Free) */
-    cbdataLock(sslState);
-    if (sslState->client.fd > -1)
-	comm_close(sslState->client.fd);
-    if (sslState->server.fd > -1)
-	comm_close(sslState->server.fd);
-    cbdataUnlock(sslState);
+    comm_close(sslState->client.fd);
 }
 
 static void
@@ -379,13 +378,7 @@
 {
     SslStateData *sslState = data;
     assert(sslState != NULL);
-    /* temporary lock to save our own feets (comm_close -> sslClientClosed -> Free) */
-    cbdataLock(sslState);
-    if (sslState->client.fd > -1)
-	comm_close(sslState->client.fd);
-    if (sslState->server.fd > -1)
-	comm_close(sslState->server.fd);
-    cbdataUnlock(sslState);
+    comm_close(sslState->client.fd);
 }
 
 
@@ -424,6 +417,7 @@
 	err->callback_data = sslState;
 	errorSend(sslState->client.fd, err);
     } else {
+	sslState->connected = 1;
 	if (sslState->servers->peer)
 	    sslProxyConnected(sslState->server.fd, sslState);
 	else
@@ -557,19 +551,11 @@
 	Config.Timeout.lifetime,
 	sslTimeout,
 	sslState);
-    commSetTimeout(sslState->server.fd,
-	Config.Timeout.connect,
-	sslConnectTimeout,
-	sslState);
+    sslSetSelect(sslState);
     peerSelect(request,
 	NULL,
 	sslPeerSelectComplete,
 	sslState);
-    /*
-     * Disable the client read handler until peer selection is complete
-     * Take control away from client_side.c.
-     */
-    commSetSelect(sslState->client.fd, COMM_SELECT_READ, NULL, NULL, 0);
 }
 
 static void
@@ -599,10 +585,6 @@
     debug(26, 3) ("sslProxyConnected: Sending {%s}\n", sslState->client.buf);
     sslState->client.len = mb.size;
     memBufClean(&mb);
-    commSetTimeout(sslState->server.fd,
-	Config.Timeout.read,
-	sslTimeout,
-	sslState);
     sslSetSelect(sslState);
 }
 
@@ -647,6 +629,10 @@
 	sslState->delay_id = 0;
     }
 #endif
+    commSetTimeout(sslState->server.fd,
+	Config.Timeout.connect,
+	sslConnectTimeout,
+	sslState);
     commConnectStart(sslState->server.fd,
 	sslState->host,
 	sslState->port,
diff -ruN squid-2.5.STABLE6/src/stat.c squid-2.5.STABLE7/src/stat.c
--- squid-2.5.STABLE6/src/stat.c	Sun Jun 22 15:32:10 2003
+++ squid-2.5.STABLE7/src/stat.c	Sat Jul 17 14:09:23 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: stat.c,v 1.351.2.9 2003/06/22 21:32:10 wessels Exp $
+ * $Id: stat.c,v 1.351.2.10 2004/07/17 20:09:23 hno Exp $
  *
  * DEBUG: section 18    Cache Manager Statistics
  * AUTHOR: Harvest Derived
@@ -1446,6 +1446,9 @@
 	    (long int) http->start.tv_sec,
 	    (int) http->start.tv_usec,
 	    tvSubDsec(http->start, current_time));
+#if DELAY_POOLS
+	storeAppendPrintf(s, "delay_pool %d\n", delayClient(http) >> 16);
+#endif
 	storeAppendPrintf(s, "\n");
     }
 }
diff -ruN squid-2.5.STABLE6/src/structs.h squid-2.5.STABLE7/src/structs.h
--- squid-2.5.STABLE6/src/structs.h	Sun Apr 18 17:43:30 2004
+++ squid-2.5.STABLE7/src/structs.h	Tue Oct  5 16:56:36 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: structs.h,v 1.408.2.24 2004/04/18 23:43:30 hno Exp $
+ * $Id: structs.h,v 1.408.2.30 2004/10/05 22:56:36 hno Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -88,6 +88,13 @@
     void *acl_data;
 };
 
+struct _acl_hdr_data {
+    acl_hdr_data *next;
+    relist *reglist;
+    http_hdr_type hdr_id;
+    const char *hdr_name;
+};
+
 struct _auth_user_hash_pointer {
     /* first two items must be same as hash_link */
     char *key;
@@ -214,6 +221,9 @@
 struct _header_mangler {
     acl_access *access_list;
     char *replacement;
+    /* What follows is only used by HDR_OTHER to build a list of named headers */
+    char *name;
+    header_mangler *next;
 };
 
 struct _body_size {
@@ -421,6 +431,7 @@
     } Timeout;
     size_t maxRequestHeaderSize;
     size_t maxRequestBodySize;
+    size_t maxReplyHeaderSize;
     dlink_list ReplyBodySize;
     struct {
 	u_short icp;
@@ -594,6 +605,7 @@
 	int pipeline_prefetch;
 	int request_entities;
 	int detect_broken_server_pconns;
+	int balance_on_multiple_ip;
     } onoff;
     acl *aclList;
     struct {
@@ -976,8 +988,7 @@
 struct _HttpStateData {
     StoreEntry *entry;
     request_t *request;
-    char *reply_hdr;
-    size_t reply_hdr_size;
+    MemBuf reply_hdr;
     int reply_hdr_state;
     peer *peer;			/* peer request made to */
     int eof;			/* reached end-of-object? */
@@ -1661,13 +1672,14 @@
     struct in_addr my_addr;
     unsigned short my_port;
     HttpHeader header;
-    ConnStateData *body_connection;	/* used by clientReadBody() */
     int content_length;
     HierarchyLogEntry hier;
     err_type err_type;
     char *peer_login;		/* Configured peer login:password */
     time_t lastmod;		/* Used on refreshes */
     const char *vary_headers;	/* Used when varying entities are detected. Changes how the store key is calculated */
+    BODY_HANDLER *body_reader;
+    void *body_reader_data;
 };
 
 struct _cachemgr_passwd {
@@ -1940,6 +1952,7 @@
 	int n_denied;
     } cutoff;
     int n_established;		/* number of current established connections */
+    time_t last_seen;
 };
 
 struct _CacheDigest {
diff -ruN squid-2.5.STABLE6/src/tools.c squid-2.5.STABLE7/src/tools.c
--- squid-2.5.STABLE6/src/tools.c	Tue Jun 24 14:52:26 2003
+++ squid-2.5.STABLE7/src/tools.c	Sat Aug 14 15:01:33 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: tools.c,v 1.213.2.8 2003/06/24 20:52:26 wessels Exp $
+ * $Id: tools.c,v 1.213.2.10 2004/08/14 21:01:33 hno Exp $
  *
  * DEBUG: section 21    Misc Functions
  * AUTHOR: Harvest Derived
@@ -516,18 +516,29 @@
 leave_suid(void)
 {
     debug(21, 3) ("leave_suid: PID %d called\n", (int) getpid());
+    if (Config.effectiveGroup) {
+#if HAVE_SETGROUPS
+	setgroups(1, &Config2.effectiveGroupID);
+#endif
+	if (setgid(Config2.effectiveGroupID) < 0)
+	    debug(50, 0) ("ALERT: setgid: %s\n", xstrerror());
+    }
     if (geteuid() != 0)
 	return;
     /* Started as a root, check suid option */
     if (Config.effectiveUser == NULL)
 	return;
-#if HAVE_SETGROUPS
-    setgroups(1, &Config2.effectiveGroupID);
-#endif
-    if (setgid(Config2.effectiveGroupID) < 0)
-	debug(50, 0) ("ALERT: setgid: %s\n", xstrerror());
     debug(21, 3) ("leave_suid: PID %d giving up root, becoming '%s'\n",
 	(int) getpid(), Config.effectiveUser);
+    if (!Config.effectiveGroup) {
+	if (setgid(Config2.effectiveGroupID) < 0)
+	    debug(50, 0) ("ALERT: setgid: %s\n", xstrerror());
+	if (initgroups(Config.effectiveUser, Config2.effectiveGroupID) < 0) {
+	    debug(50, 0) ("ALERT: initgroups: unable to set groups for User %s "
+		"and Group %u", Config.effectiveUser,
+		(unsigned) Config2.effectiveGroupID);
+	}
+    }
 #if HAVE_SETRESUID
     if (setresuid(Config2.effectiveUserID, Config2.effectiveUserID, 0) < 0)
 	debug(50, 0) ("ALERT: setresuid: %s\n", xstrerror());
@@ -1051,7 +1062,18 @@
 	switch (ch) {
 	case '\\':
 	    p++;
-	    *d++ = ch = *p;
+	    switch (*p) {
+	    case 'n':
+		ch = '\n';
+		break;
+	    case 'r':
+		ch = '\r';
+		break;
+	    default:
+		ch = *p;
+		break;
+	    }
+	    *d++ = ch;
 	    if (ch)
 		p++;
 	    break;
@@ -1090,10 +1112,22 @@
 	int l = strcspn(str, "\"\\");
 	memBufAppend(mb, str, l);
 	str += l;
-	while (*str == '"' || *str == '\\') {
+	switch (*str) {
+	case '\n':
+	    memBufAppend(mb, "\\n", 2);
+	    str++;
+	    break;
+	case '\r':
+	    memBufAppend(mb, "\\r", 2);
+	    str++;
+	    break;
+	case '\0':
+	    break;
+	default:
 	    memBufAppend(mb, "\\", 1);
 	    memBufAppend(mb, str, 1);
 	    str++;
+	    break;
 	}
     }
     if (quoted)
diff -ruN squid-2.5.STABLE6/src/typedefs.h squid-2.5.STABLE7/src/typedefs.h
--- squid-2.5.STABLE6/src/typedefs.h	Wed Feb  4 10:42:29 2004
+++ squid-2.5.STABLE7/src/typedefs.h	Tue Oct  5 16:34:42 2004
@@ -1,6 +1,6 @@
 
 /*
- * $Id: typedefs.h,v 1.132.2.4 2004/02/04 17:42:29 hno Exp $
+ * $Id: typedefs.h,v 1.132.2.6 2004/10/05 22:34:42 hno Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -66,6 +66,7 @@
 typedef struct _auth_user_hash_pointer auth_user_hash_pointer;
 typedef struct _auth_user_ip_t auth_user_ip_t;
 typedef struct _acl_proxy_auth_match_cache acl_proxy_auth_match_cache;
+typedef struct _acl_hdr_data acl_hdr_data;
 typedef struct _authscheme_entry authscheme_entry_t;
 typedef struct _authScheme authScheme;
 typedef struct _acl_user_data acl_user_data;
@@ -235,6 +236,7 @@
 typedef int READ_HANDLER(int, char *, int);
 typedef int WRITE_HANDLER(int, const char *, int);
 typedef void CBCB(char *buf, ssize_t size, void *data);
+typedef void BODY_HANDLER(request_t * req, char *, size_t, CBCB *, void *);
 
 typedef void STIOCB(void *their_data, int errflag, storeIOState *);
 typedef void STFNCB(void *their_data, int errflag, storeIOState *);
