diff -u -r -N squid-6.0.3/ChangeLog squid-6.1/ChangeLog
--- squid-6.0.3/ChangeLog	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/ChangeLog	2023-07-06 17:15:40.000000000 +1200
@@ -1,3 +1,11 @@
+Changes in squid-6.1 (06 Jul 2023):
+
+	- Bug 5278: Log %err_code for "early" request handling errors
+	- Do not cache (and do not serve cached) cache manager responses
+	- Fix key equality comparison in LookupTable map
+	- Honor DNS RR TTLs larger than negative_dns_ttl
+	- ... and some documentation changes
+
 Changes in squid-6.0.3 (07 Jun 2023):
 
 	- Bug 5148: Log %Ss of failed tunnels as TCP_TUNNEL
diff -u -r -N squid-6.0.3/configure squid-6.1/configure
--- squid-6.0.3/configure	2023-06-07 06:49:22.000000000 +1200
+++ squid-6.1/configure	2023-07-06 17:28:38.000000000 +1200
@@ -1,7 +1,7 @@
 #! /bin/sh
 # From configure.ac Revision.
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for Squid Web Proxy 6.0.3.
+# Generated by GNU Autoconf 2.71 for Squid Web Proxy 6.1.
 #
 # Report bugs to <http://bugs.squid-cache.org/>.
 #
@@ -626,8 +626,8 @@
 # Identity of this package.
 PACKAGE_NAME='Squid Web Proxy'
 PACKAGE_TARNAME='squid'
-PACKAGE_VERSION='6.0.3'
-PACKAGE_STRING='Squid Web Proxy 6.0.3'
+PACKAGE_VERSION='6.1'
+PACKAGE_STRING='Squid Web Proxy 6.1'
 PACKAGE_BUGREPORT='http://bugs.squid-cache.org/'
 PACKAGE_URL=''
 
@@ -1696,7 +1696,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures Squid Web Proxy 6.0.3 to adapt to many kinds of systems.
+\`configure' configures Squid Web Proxy 6.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1767,7 +1767,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of Squid Web Proxy 6.0.3:";;
+     short | recursive ) echo "Configuration of Squid Web Proxy 6.1:";;
    esac
   cat <<\_ACEOF
 
@@ -2187,7 +2187,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-Squid Web Proxy configure 6.0.3
+Squid Web Proxy configure 6.1
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -3200,7 +3200,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by Squid Web Proxy $as_me 6.0.3, which was
+It was created by Squid Web Proxy $as_me 6.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -4692,7 +4692,7 @@
 
 # Define the identity of the package.
  PACKAGE='squid'
- VERSION='6.0.3'
+ VERSION='6.1'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -56854,7 +56854,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by Squid Web Proxy $as_me 6.0.3, which was
+This file was extended by Squid Web Proxy $as_me 6.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -56922,7 +56922,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-Squid Web Proxy config.status 6.0.3
+Squid Web Proxy config.status 6.1
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
diff -u -r -N squid-6.0.3/configure.ac squid-6.1/configure.ac
--- squid-6.0.3/configure.ac	2023-06-07 06:49:22.000000000 +1200
+++ squid-6.1/configure.ac	2023-07-06 17:28:38.000000000 +1200
@@ -5,7 +5,7 @@
 ## Please see the COPYING and CONTRIBUTORS files for details.
 ##
 
-AC_INIT([Squid Web Proxy],[6.0.3],[http://bugs.squid-cache.org/],[squid])
+AC_INIT([Squid Web Proxy],[6.1],[http://bugs.squid-cache.org/],[squid])
 AC_PREREQ(2.61)
 AC_CONFIG_HEADERS([include/autoconf.h])
 AC_CONFIG_AUX_DIR(cfgaux)
diff -u -r -N squid-6.0.3/doc/release-notes/release-6.html squid-6.1/doc/release-notes/release-6.html
--- squid-6.0.3/doc/release-notes/release-6.html	2023-06-07 06:53:17.000000000 +1200
+++ squid-6.1/doc/release-notes/release-6.html	2023-07-06 17:32:46.000000000 +1200
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <HTML>
 <HEAD>
- <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.82">
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.83">
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <TITLE>Squid 6.0.3 release notes</TITLE>
+ <TITLE>Squid 6.1 release notes</TITLE>
 </HEAD>
 <BODY>
-<H1>Squid 6.0.3 release notes</H1>
+<H1>Squid 6.1 release notes</H1>
 
 <H2>Squid Developers</H2>
 <P>
@@ -59,7 +59,7 @@
 <HR>
 <H2><A NAME="s1">1.</A> <A HREF="#toc1">Notice</A></H2>
 
-<P>The Squid Team are pleased to announce the release of Squid-6.0.3 for testing.</P>
+<P>The Squid Team are pleased to announce the release of Squid-6.1 for testing.</P>
 <P>This new release is available for download from 
 <A HREF="http://www.squid-cache.org/Versions/v6/">http://www.squid-cache.org/Versions/v6/</A> or the
 <A HREF="http://www.squid-cache.org/Download/http-mirrors.html">mirrors</A>.</P>
diff -u -r -N squid-6.0.3/include/version.h squid-6.1/include/version.h
--- squid-6.0.3/include/version.h	2023-06-07 06:49:22.000000000 +1200
+++ squid-6.1/include/version.h	2023-07-06 17:28:38.000000000 +1200
@@ -10,7 +10,7 @@
 #define SQUID_VERSION_H
 
 #ifndef SQUID_RELEASE_TIME
-#define SQUID_RELEASE_TIME 1686077352
+#define SQUID_RELEASE_TIME 1688621308
 #endif
 
 /*
diff -u -r -N squid-6.0.3/RELEASENOTES.html squid-6.1/RELEASENOTES.html
--- squid-6.0.3/RELEASENOTES.html	2023-06-07 06:53:17.000000000 +1200
+++ squid-6.1/RELEASENOTES.html	2023-07-06 17:32:46.000000000 +1200
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <HTML>
 <HEAD>
- <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.82">
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.83">
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <TITLE>Squid 6.0.3 release notes</TITLE>
+ <TITLE>Squid 6.1 release notes</TITLE>
 </HEAD>
 <BODY>
-<H1>Squid 6.0.3 release notes</H1>
+<H1>Squid 6.1 release notes</H1>
 
 <H2>Squid Developers</H2>
 <P>
@@ -59,7 +59,7 @@
 <HR>
 <H2><A NAME="s1">1.</A> <A HREF="#toc1">Notice</A></H2>
 
-<P>The Squid Team are pleased to announce the release of Squid-6.0.3 for testing.</P>
+<P>The Squid Team are pleased to announce the release of Squid-6.1 for testing.</P>
 <P>This new release is available for download from 
 <A HREF="http://www.squid-cache.org/Versions/v6/">http://www.squid-cache.org/Versions/v6/</A> or the
 <A HREF="http://www.squid-cache.org/Download/http-mirrors.html">mirrors</A>.</P>
diff -u -r -N squid-6.0.3/src/acl/external/delayer/ext_delayer_acl.8 squid-6.1/src/acl/external/delayer/ext_delayer_acl.8
--- squid-6.0.3/src/acl/external/delayer/ext_delayer_acl.8	2023-06-07 06:53:22.000000000 +1200
+++ squid-6.1/src/acl/external/delayer/ext_delayer_acl.8	2023-07-06 17:32:52.000000000 +1200
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "EXT_DELAYER_ACL 8"
-.TH EXT_DELAYER_ACL 8 "2023-06-06" "perl v5.36.0" "User Contributed Perl Documentation"
+.TH EXT_DELAYER_ACL 8 "2023-07-06" "perl v5.36.0" "User Contributed Perl Documentation"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff -u -r -N squid-6.0.3/src/acl/external/kerberos_sid_group/ext_kerberos_sid_group_acl.8 squid-6.1/src/acl/external/kerberos_sid_group/ext_kerberos_sid_group_acl.8
--- squid-6.0.3/src/acl/external/kerberos_sid_group/ext_kerberos_sid_group_acl.8	2023-06-07 06:53:22.000000000 +1200
+++ squid-6.1/src/acl/external/kerberos_sid_group/ext_kerberos_sid_group_acl.8	2023-07-06 17:32:52.000000000 +1200
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "EXT_KERBEROS_SID_GROUP_ACL 8"
-.TH EXT_KERBEROS_SID_GROUP_ACL 8 "2023-06-06" "perl v5.36.0" "User Contributed Perl Documentation"
+.TH EXT_KERBEROS_SID_GROUP_ACL 8 "2023-07-06" "perl v5.36.0" "User Contributed Perl Documentation"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff -u -r -N squid-6.0.3/src/acl/external/SQL_session/ext_sql_session_acl.8 squid-6.1/src/acl/external/SQL_session/ext_sql_session_acl.8
--- squid-6.0.3/src/acl/external/SQL_session/ext_sql_session_acl.8	2023-06-07 06:53:22.000000000 +1200
+++ squid-6.1/src/acl/external/SQL_session/ext_sql_session_acl.8	2023-07-06 17:32:52.000000000 +1200
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "EXT_SQL_SESSION_ACL 8"
-.TH EXT_SQL_SESSION_ACL 8 "2023-06-06" "perl v5.36.0" "User Contributed Perl Documentation"
+.TH EXT_SQL_SESSION_ACL 8 "2023-07-06" "perl v5.36.0" "User Contributed Perl Documentation"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff -u -r -N squid-6.0.3/src/acl/external/wbinfo_group/ext_wbinfo_group_acl.8 squid-6.1/src/acl/external/wbinfo_group/ext_wbinfo_group_acl.8
--- squid-6.0.3/src/acl/external/wbinfo_group/ext_wbinfo_group_acl.8	2023-06-07 06:53:22.000000000 +1200
+++ squid-6.1/src/acl/external/wbinfo_group/ext_wbinfo_group_acl.8	2023-07-06 17:32:52.000000000 +1200
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "EXT_WBINFO_GROUP_ACL 8"
-.TH EXT_WBINFO_GROUP_ACL 8 "2023-06-06" "perl v5.36.0" "User Contributed Perl Documentation"
+.TH EXT_WBINFO_GROUP_ACL 8 "2023-07-06" "perl v5.36.0" "User Contributed Perl Documentation"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff -u -r -N squid-6.0.3/src/auth/basic/DB/basic_db_auth.8 squid-6.1/src/auth/basic/DB/basic_db_auth.8
--- squid-6.0.3/src/auth/basic/DB/basic_db_auth.8	2023-06-07 06:53:23.000000000 +1200
+++ squid-6.1/src/auth/basic/DB/basic_db_auth.8	2023-07-06 17:32:53.000000000 +1200
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "BASIC_DB_AUTH 8"
-.TH BASIC_DB_AUTH 8 "2023-06-06" "perl v5.36.0" "User Contributed Perl Documentation"
+.TH BASIC_DB_AUTH 8 "2023-07-06" "perl v5.36.0" "User Contributed Perl Documentation"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff -u -r -N squid-6.0.3/src/auth/basic/POP3/basic_pop3_auth.8 squid-6.1/src/auth/basic/POP3/basic_pop3_auth.8
--- squid-6.0.3/src/auth/basic/POP3/basic_pop3_auth.8	2023-06-07 06:53:23.000000000 +1200
+++ squid-6.1/src/auth/basic/POP3/basic_pop3_auth.8	2023-07-06 17:32:53.000000000 +1200
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "BASIC_POP3_AUTH 8"
-.TH BASIC_POP3_AUTH 8 "2023-06-06" "perl v5.36.0" "User Contributed Perl Documentation"
+.TH BASIC_POP3_AUTH 8 "2023-07-06" "perl v5.36.0" "User Contributed Perl Documentation"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff -u -r -N squid-6.0.3/src/base/LookupTable.h squid-6.1/src/base/LookupTable.h
--- squid-6.0.3/src/base/LookupTable.h	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/base/LookupTable.h	2023-07-06 17:15:40.000000000 +1200
@@ -70,7 +70,7 @@
     }
 
 private:
-    typedef std::unordered_map<const SBuf, EnumType, Hasher> lookupTable_t;
+    using lookupTable_t = std::unordered_map<const SBuf, EnumType, Hasher, CaseInsensitiveSBufEqual>;
     lookupTable_t lookupTable;
     EnumType invalidValue;
 };
diff -u -r -N squid-6.0.3/src/cache_manager.cc squid-6.1/src/cache_manager.cc
--- squid-6.0.3/src/cache_manager.cc	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/cache_manager.cc	2023-07-06 17:15:40.000000000 +1200
@@ -17,6 +17,7 @@
 #include "error/ExceptionErrorDetail.h"
 #include "errorpage.h"
 #include "fde.h"
+#include "HttpHdrCc.h"
 #include "HttpReply.h"
 #include "HttpRequest.h"
 #include "mgr/Action.h"
@@ -38,6 +39,7 @@
 #include "wordlist.h"
 
 #include <algorithm>
+#include <memory>
 
 /// \ingroup CacheManagerInternal
 #define MGR_PASSWD_SZ 128
@@ -369,14 +371,9 @@
          */
         rep->header.putAuth("Basic", actionName);
 #endif
-        // Allow cachemgr and other XHR scripts access to our version string
-        if (request->header.has(Http::HdrType::ORIGIN)) {
-            rep->header.putExt("Access-Control-Allow-Origin",request->header.getStr(Http::HdrType::ORIGIN));
-#if HAVE_AUTH_MODULE_BASIC
-            rep->header.putExt("Access-Control-Allow-Credentials","true");
-#endif
-            rep->header.putExt("Access-Control-Expose-Headers","Server");
-        }
+
+        const auto originOrNil = request->header.getStr(Http::HdrType::ORIGIN);
+        PutCommonResponseHeaders(*rep, originOrNil);
 
         /* store the reply */
         entry->replaceHttpReply(rep);
@@ -404,14 +401,10 @@
         HttpReply *rep = err.BuildHttpReply();
         if (strncmp(rep->body.content(),"Internal Error:", 15) == 0)
             rep->sline.set(Http::ProtocolVersion(1,1), Http::scNotFound);
-        // Allow cachemgr and other XHR scripts access to our version string
-        if (request->header.has(Http::HdrType::ORIGIN)) {
-            rep->header.putExt("Access-Control-Allow-Origin",request->header.getStr(Http::HdrType::ORIGIN));
-#if HAVE_AUTH_MODULE_BASIC
-            rep->header.putExt("Access-Control-Allow-Credentials","true");
-#endif
-            rep->header.putExt("Access-Control-Expose-Headers","Server");
-        }
+
+        const auto originOrNil = request->header.getStr(Http::HdrType::ORIGIN);
+        PutCommonResponseHeaders(*rep, originOrNil);
+
         entry->replaceHttpReply(rep);
         entry->complete();
         return;
@@ -475,6 +468,27 @@
     return nullptr;
 }
 
+void
+CacheManager::PutCommonResponseHeaders(HttpReply &response, const char *httpOrigin)
+{
+    // Allow cachemgr and other XHR scripts access to our version string
+    if (httpOrigin) {
+        response.header.putExt("Access-Control-Allow-Origin", httpOrigin);
+#if HAVE_AUTH_MODULE_BASIC
+        response.header.putExt("Access-Control-Allow-Credentials", "true");
+#endif
+        response.header.putExt("Access-Control-Expose-Headers", "Server");
+    }
+
+    std::unique_ptr<HttpHdrCc> cc(new HttpHdrCc());
+    // this is honored by more caches but allows pointless revalidation;
+    // revalidation will always fail because we do not support it (yet?)
+    cc->noCache(String());
+    // this is honored by fewer caches but prohibits pointless revalidation
+    cc->noStore(true);
+    response.putCc(cc.release());
+}
+
 CacheManager*
 CacheManager::GetInstance()
 {
diff -u -r -N squid-6.0.3/src/CacheManager.h squid-6.1/src/CacheManager.h
--- squid-6.0.3/src/CacheManager.h	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/CacheManager.h	2023-07-06 17:15:40.000000000 +1200
@@ -20,6 +20,7 @@
 #include <vector>
 
 class HttpRequest;
+class HttpReply;
 
 /**
  * a CacheManager - the menu system for interacting with squid.
@@ -49,6 +50,11 @@
     static CacheManager* GetInstance();
     const char *ActionProtection(const Mgr::ActionProfilePointer &profile);
 
+    /// Add HTTP response headers specific/common to all cache manager replies,
+    /// including cache manager errors and Action reports.
+    /// \param httpOrigin the value of Origin header in the trigger HTTP request (or nil)
+    static void PutCommonResponseHeaders(HttpReply &, const char *httpOrigin);
+
 protected:
     CacheManager() {} ///< use Instance() instead
 
diff -u -r -N squid-6.0.3/src/cf.data.pre squid-6.1/src/cf.data.pre
--- squid-6.0.3/src/cf.data.pre	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/cf.data.pre	2023-07-06 17:15:40.000000000 +1200
@@ -4300,9 +4300,11 @@
 	The directory must exist and be writable by the Squid
 	process.  Squid will NOT create this directory for you.
 
-	In SMP configurations, cache_dir must not precede the workers option
-	and should use configuration macros or conditionals to give each
-	worker interested in disk caching a dedicated cache directory.
+	Rock is currently the only SMP-aware cache_dir type. Using other
+	store types in configurations with multiple workers is not
+	supported and may lead to HTTP violations or undefined behavior,
+	even when each such cache_dir is given a dedicated worker using
+	configuration conditionals.
 
 
 	====  The ufs store type  ====
diff -u -r -N squid-6.0.3/src/client_side.cc squid-6.1/src/client_side.cc
--- squid-6.0.3/src/client_side.cc	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/client_side.cc	2023-07-06 17:15:40.000000000 +1200
@@ -1654,10 +1654,16 @@
             http->setLogUriToRequestUri();
         } else
             debugs(33, 2, "internal URL found: " << request->url.getScheme() << "://" << request->url.authority(true) << " (not this proxy)");
+
+        if (ForSomeCacheManager(request->url.path()))
+            request->flags.disableCacheUse("cache manager URL");
     }
 
     request->flags.internal = http->flags.internal;
 
+    if (request->url.getScheme() == AnyP::PROTO_CACHE_OBJECT)
+        request->flags.disableCacheUse("cache_object URL scheme");
+
     if (!isFtp) {
         // XXX: for non-HTTP messages instantiate a different Http::Message child type
         // for now Squid only supports HTTP requests
diff -u -r -N squid-6.0.3/src/client_side_reply.cc squid-6.1/src/client_side_reply.cc
--- squid-6.0.3/src/client_side_reply.cc	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/client_side_reply.cc	2023-07-06 17:15:40.000000000 +1200
@@ -1527,6 +1527,9 @@
 
     // client sent CC:no-cache or some other condition has been
     // encountered which prevents delivering a public/cached object.
+    // XXX: The above text does not match the condition below. It might describe
+    // the opposite condition, but the condition itself should be adjusted
+    // (e.g., to honor flags.noCache in cache manager requests).
     if (!r->flags.noCache || r->flags.internal) {
         const auto e = storeGetPublicByRequest(r);
         identifyFoundObject(e, storeLookupString(bool(e)));
diff -u -r -N squid-6.0.3/src/errorpage.cc squid-6.1/src/errorpage.cc
--- squid-6.0.3/src/errorpage.cc	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/errorpage.cc	2023-07-06 17:15:40.000000000 +1200
@@ -1352,6 +1352,11 @@
             request->detailError(type, detail);
         else
             request->detailError(type, SysErrorDetail::NewIfAny(xerrno));
+    } else if (ale) {
+        if (detail)
+            ale->updateError(Error(type, detail));
+        else
+            ale->updateError(Error(type, SysErrorDetail::NewIfAny(xerrno)));
     }
 
     return rep;
diff -u -r -N squid-6.0.3/src/http/url_rewriters/LFS/url_lfs_rewrite.8 squid-6.1/src/http/url_rewriters/LFS/url_lfs_rewrite.8
--- squid-6.0.3/src/http/url_rewriters/LFS/url_lfs_rewrite.8	2023-06-07 06:53:25.000000000 +1200
+++ squid-6.1/src/http/url_rewriters/LFS/url_lfs_rewrite.8	2023-07-06 17:32:54.000000000 +1200
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "URL_LFS_REWRITE 8"
-.TH URL_LFS_REWRITE 8 "2023-06-06" "perl v5.36.0" "User Contributed Perl Documentation"
+.TH URL_LFS_REWRITE 8 "2023-07-06" "perl v5.36.0" "User Contributed Perl Documentation"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff -u -r -N squid-6.0.3/src/internal.cc squid-6.1/src/internal.cc
--- squid-6.0.3/src/internal.cc	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/internal.cc	2023-07-06 17:15:40.000000000 +1200
@@ -10,6 +10,7 @@
 
 #include "squid.h"
 #include "AccessLogEntry.h"
+#include "base/Assure.h"
 #include "CacheManager.h"
 #include "comm/Connection.h"
 #include "errorpage.h"
@@ -32,12 +33,15 @@
 internalStart(const Comm::ConnectionPointer &clientConn, HttpRequest * request, StoreEntry * entry, const AccessLogEntry::Pointer &ale)
 {
     ErrorState *err;
+
+    Assure(request);
     const SBuf upath = request->url.path();
     debugs(76, 3, clientConn << " requesting '" << upath << "'");
 
+    Assure(request->flags.internal);
+
     static const SBuf netdbUri("/squid-internal-dynamic/netdb");
     static const SBuf storeDigestUri("/squid-internal-periodic/store_digest");
-    static const SBuf mgrPfx("/squid-internal-mgr/");
 
     if (upath == netdbUri) {
         netdbBinaryExchange(entry);
@@ -54,8 +58,8 @@
         entry->replaceHttpReply(reply);
         entry->append(msgbuf, strlen(msgbuf));
         entry->complete();
-    } else if (upath.startsWith(mgrPfx)) {
-        debugs(17, 2, "calling CacheManager due to URL-path " << mgrPfx);
+    } else if (ForSomeCacheManager(upath)) {
+        debugs(17, 2, "calling CacheManager due to URL-path");
         CacheManager::GetInstance()->start(clientConn, request, entry, ale);
     } else {
         debugObj(76, 1, "internalStart: unknown request:\n",
@@ -79,6 +83,13 @@
     return urlPath.startsWith(InternalStaticPfx);
 }
 
+bool
+ForSomeCacheManager(const SBuf &urlPath)
+{
+    static const SBuf mgrPfx("/squid-internal-mgr");
+    return urlPath.startsWith(mgrPfx);
+}
+
 /*
  * makes internal url with a given host and port (remote internal url)
  */
diff -u -r -N squid-6.0.3/src/internal.h squid-6.1/src/internal.h
--- squid-6.0.3/src/internal.h	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/internal.h	2023-07-06 17:15:40.000000000 +1200
@@ -29,5 +29,9 @@
 const char *internalHostname(void);
 int internalHostnameIs(const char *);
 
+/// whether the given request URL path points to a cache manager (not
+/// necessarily running on this Squid instance)
+bool ForSomeCacheManager(const SBuf &);
+
 #endif /* SQUID_INTERNAL_H_ */
 
diff -u -r -N squid-6.0.3/src/ipcache.cc squid-6.1/src/ipcache.cc
--- squid-6.0.3/src/ipcache.cc	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/ipcache.cc	2023-07-06 17:15:40.000000000 +1200
@@ -543,8 +543,15 @@
                                 Config.positiveDnsTtl); // largest value allowed
 
     const time_t rrExpires = squid_curtime + ttl;
-    if (rrExpires < expires)
+    if (addrs.size() <= 1) {
+        debugs(14, 5, "use first " << ttl << " from RR TTL " << rrTtl);
         expires = rrExpires;
+    } else if (rrExpires < expires) {
+        debugs(14, 5, "use smaller " << ttl << " from RR TTL " << rrTtl << "; was: " << (expires - squid_curtime));
+        expires = rrExpires;
+    } else {
+        debugs(14, 7, "ignore " << ttl << " from RR TTL " << rrTtl << "; keep: " << (expires - squid_curtime));
+    }
 }
 
 /// \ingroup IPCacheInternal
diff -u -r -N squid-6.0.3/src/log/DB/log_db_daemon.8 squid-6.1/src/log/DB/log_db_daemon.8
--- squid-6.0.3/src/log/DB/log_db_daemon.8	2023-06-07 06:53:25.000000000 +1200
+++ squid-6.1/src/log/DB/log_db_daemon.8	2023-07-06 17:32:54.000000000 +1200
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "LOG_DB_DAEMON 8"
-.TH LOG_DB_DAEMON 8 "2023-06-06" "perl v5.36.0" "User Contributed Perl Documentation"
+.TH LOG_DB_DAEMON 8 "2023-07-06" "perl v5.36.0" "User Contributed Perl Documentation"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff -u -r -N squid-6.0.3/src/mgr/Action.cc squid-6.1/src/mgr/Action.cc
--- squid-6.0.3/src/mgr/Action.cc	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/mgr/Action.cc	2023-07-06 17:15:40.000000000 +1200
@@ -9,6 +9,7 @@
 /* DEBUG: section 16    Cache Manager API */
 
 #include "squid.h"
+#include "CacheManager.h"
 #include "comm/Connection.h"
 #include "HttpReply.h"
 #include "ipc/Port.h"
@@ -103,15 +104,11 @@
     if (writeHttpHeader) {
         HttpReply *rep = new HttpReply;
         rep->setHeaders(Http::scOkay, nullptr, contentType(), -1, squid_curtime, squid_curtime);
-        // Allow cachemgr and other XHR scripts access to our version string
-        const ActionParams &params = command().params;
-        if (params.httpOrigin.size() > 0) {
-            rep->header.putExt("Access-Control-Allow-Origin", params.httpOrigin.termedBuf());
-#if HAVE_AUTH_MODULE_BASIC
-            rep->header.putExt("Access-Control-Allow-Credentials","true");
-#endif
-            rep->header.putExt("Access-Control-Expose-Headers","Server");
-        }
+
+        const auto &origin = command().params.httpOrigin;
+        const auto originOrNil = origin.size() ? origin.termedBuf() : nullptr;
+        CacheManager::PutCommonResponseHeaders(*rep, originOrNil);
+
         entry->replaceHttpReply(rep);
     }
 
diff -u -r -N squid-6.0.3/src/mgr/Inquirer.cc squid-6.1/src/mgr/Inquirer.cc
--- squid-6.0.3/src/mgr/Inquirer.cc	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/mgr/Inquirer.cc	2023-07-06 17:15:40.000000000 +1200
@@ -11,6 +11,7 @@
 #include "squid.h"
 #include "AccessLogEntry.h"
 #include "base/TextException.h"
+#include "CacheManager.h"
 #include "comm.h"
 #include "comm/Connection.h"
 #include "comm/Write.h"
@@ -73,6 +74,9 @@
     Must(Comm::IsConnOpen(conn));
     Must(aggrAction != nullptr);
 
+    const auto &origin = aggrAction->command().params.httpOrigin;
+    const auto originOrNil = origin.size() ? origin.termedBuf() : nullptr;
+
     std::unique_ptr<MemBuf> replyBuf;
     if (strands.empty()) {
         const char *url = aggrAction->command().params.httpUri.termedBuf();
@@ -80,10 +84,12 @@
         auto *req = HttpRequest::FromUrlXXX(url, mx);
         ErrorState err(ERR_INVALID_URL, Http::scNotFound, req, nullptr);
         std::unique_ptr<HttpReply> reply(err.BuildHttpReply());
+        CacheManager::PutCommonResponseHeaders(*reply, originOrNil);
         replyBuf.reset(reply->pack());
     } else {
         std::unique_ptr<HttpReply> reply(new HttpReply);
         reply->setHeaders(Http::scOkay, nullptr, "text/plain", -1, squid_curtime, squid_curtime);
+        CacheManager::PutCommonResponseHeaders(*reply, originOrNil);
         reply->header.putStr(Http::HdrType::CONNECTION, "close"); // until we chunk response
         replyBuf.reset(reply->pack());
     }
diff -u -r -N squid-6.0.3/src/RequestFlags.h squid-6.1/src/RequestFlags.h
--- squid-6.0.3/src/RequestFlags.h	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/RequestFlags.h	2023-07-06 17:15:40.000000000 +1200
@@ -72,8 +72,14 @@
     /// This applies to TPROXY traffic that has not had spoofing disabled through
     /// the spoof_client_ip squid.conf ACL.
     bool spoofClientIp = false;
-    /** set if the request is internal (\see ClientHttpRequest::flags.internal)*/
+
+    /// whether the request targets a /squid-internal- resource (e.g., a MIME
+    /// icon or a cache manager page) served by this Squid instance
+    /// \sa ClientHttpRequest::flags.internal
+    /// TODO: Rename to avoid a false implication that this flag is true for
+    /// requests for /squid-internal- resources served by other Squid instances.
     bool internal = false;
+
     /** if set, request to try very hard to keep the connection alive */
     bool mustKeepalive = false;
     /** set if the request wants connection oriented auth */
diff -u -r -N squid-6.0.3/src/sbuf/Algorithms.h squid-6.1/src/sbuf/Algorithms.h
--- squid-6.0.3/src/sbuf/Algorithms.h	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/sbuf/Algorithms.h	2023-07-06 17:15:40.000000000 +1200
@@ -112,18 +112,25 @@
 };
 }
 
-/** hash functor for SBufs, meant so support case-insensitive std::unordered_map
- *
- * Typical use:
- * \code
- * auto m = std::unordered_map<SBuf, ValueType, CaseInsensitiveSBufHash>();
- * \endcode
- */
+/// hash functor for case-insensitive SBufs
+/// \sa std::hash<SBuf>
 class CaseInsensitiveSBufHash
 {
 public:
     std::size_t operator()(const SBuf &) const noexcept;
 };
 
+/// equality functor for case-insensitive SBufs
+/// \sa std::equal_to<SBuf>
+class CaseInsensitiveSBufEqual
+{
+public:
+    bool operator()(const SBuf &lhs, const SBuf &rhs) const
+    {
+        // Optimization: Do not iterate strings of different lengths.
+        return lhs.length() == rhs.length() && (lhs.compare(rhs, caseInsensitive) == 0);
+    }
+};
+
 #endif /* SQUID_SBUFALGOS_H_ */
 
diff -u -r -N squid-6.0.3/src/security/cert_validators/fake/security_fake_certverify.8 squid-6.1/src/security/cert_validators/fake/security_fake_certverify.8
--- squid-6.0.3/src/security/cert_validators/fake/security_fake_certverify.8	2023-06-07 06:53:26.000000000 +1200
+++ squid-6.1/src/security/cert_validators/fake/security_fake_certverify.8	2023-07-06 17:32:55.000000000 +1200
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "SECURITY_FAKE_CERTVERIFY 8"
-.TH SECURITY_FAKE_CERTVERIFY 8 "2023-06-06" "perl v5.36.0" "User Contributed Perl Documentation"
+.TH SECURITY_FAKE_CERTVERIFY 8 "2023-07-06" "perl v5.36.0" "User Contributed Perl Documentation"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff -u -r -N squid-6.0.3/src/store/id_rewriters/file/storeid_file_rewrite.8 squid-6.1/src/store/id_rewriters/file/storeid_file_rewrite.8
--- squid-6.0.3/src/store/id_rewriters/file/storeid_file_rewrite.8	2023-06-07 06:53:23.000000000 +1200
+++ squid-6.1/src/store/id_rewriters/file/storeid_file_rewrite.8	2023-07-06 17:32:52.000000000 +1200
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "STOREID_FILE_REWRITE 8"
-.TH STOREID_FILE_REWRITE 8 "2023-06-06" "perl v5.36.0" "User Contributed Perl Documentation"
+.TH STOREID_FILE_REWRITE 8 "2023-07-06" "perl v5.36.0" "User Contributed Perl Documentation"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff -u -r -N squid-6.0.3/src/tests/stub_cache_manager.cc squid-6.1/src/tests/stub_cache_manager.cc
--- squid-6.0.3/src/tests/stub_cache_manager.cc	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/tests/stub_cache_manager.cc	2023-07-06 17:15:40.000000000 +1200
@@ -26,4 +26,5 @@
 void Mgr::RegisterAction(char const *, char const *, Mgr::ClassActionCreationHandler *, int, int) {}
 
 Mgr::Action::Pointer CacheManager::createRequestedAction(const Mgr::ActionParams &) STUB_RETVAL(nullptr)
+void CacheManager::PutCommonResponseHeaders(HttpReply &, const char *) STUB
 
diff -u -r -N squid-6.0.3/src/tests/testLookupTable.cc squid-6.1/src/tests/testLookupTable.cc
--- squid-6.0.3/src/tests/testLookupTable.cc	2023-06-07 06:34:33.000000000 +1200
+++ squid-6.1/src/tests/testLookupTable.cc	2023-07-06 17:15:40.000000000 +1200
@@ -48,6 +48,11 @@
     CPPUNIT_ASSERT_EQUAL(lt.lookup(SBuf("six")), ENUM_6);
     CPPUNIT_ASSERT_EQUAL(lt.lookup(SBuf("seven")), ENUM_7);
 
+    // element found despite a different key spelling
+    CPPUNIT_ASSERT_EQUAL(lt.lookup(SBuf("One")), ENUM_1);
+    CPPUNIT_ASSERT_EQUAL(lt.lookup(SBuf("fOUr")), ENUM_4);
+    CPPUNIT_ASSERT_EQUAL(lt.lookup(SBuf("seveN")), ENUM_7);
+
     // element not found
     CPPUNIT_ASSERT_EQUAL(lt.lookup(SBuf("eleventy")), ENUM_INVALID);
 }
diff -u -r -N squid-6.0.3/tools/helper-mux/helper-mux.8 squid-6.1/tools/helper-mux/helper-mux.8
--- squid-6.0.3/tools/helper-mux/helper-mux.8	2023-06-07 06:53:26.000000000 +1200
+++ squid-6.1/tools/helper-mux/helper-mux.8	2023-07-06 17:32:55.000000000 +1200
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "HELPER-MUX 8"
-.TH HELPER-MUX 8 "2023-06-06" "perl v5.36.0" "User Contributed Perl Documentation"
+.TH HELPER-MUX 8 "2023-07-06" "perl v5.36.0" "User Contributed Perl Documentation"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
