From: Amos Jeffries Date: Fri, 15 Mar 2024 13:24:27 +0000 (+0000) Subject: Convert hostname_aliases to SBufList (#1737) X-Git-Tag: SQUID_7_0_1~171 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6793ad05d9864bd3acc1c273e8bdff66a3f9c477;p=thirdparty%2Fsquid.git Convert hostname_aliases to SBufList (#1737) Fix a bug where hostname_aliases was being compared case-sensitively with HTTP request Host / URL domain. --- diff --git a/src/SquidConfig.h b/src/SquidConfig.h index b3d3bb541e..83063220ad 100644 --- a/src/SquidConfig.h +++ b/src/SquidConfig.h @@ -227,7 +227,7 @@ public: char *etcHostsPath; char *visibleHostname; char *uniqueHostname; - wordlist *hostnameAliases; + SBufList hostnameAliases; char *errHtmlText; struct { diff --git a/src/cf.data.pre b/src/cf.data.pre index 15fe637ec0..644899e676 100644 --- a/src/cf.data.pre +++ b/src/cf.data.pre @@ -7602,7 +7602,7 @@ DOC_START DOC_END NAME: hostname_aliases -TYPE: wordlist +TYPE: SBufList LOC: Config.hostnameAliases DEFAULT: none DOC_START diff --git a/src/client_side_request.cc b/src/client_side_request.cc index b80b1b2305..9ed54f2c72 100644 --- a/src/client_side_request.cc +++ b/src/client_side_request.cc @@ -1662,7 +1662,7 @@ ClientHttpRequest::checkForInternalAccess() if (!internalCheck(request->url.path())) return; - if (internalHostnameIs(request->url.host()) && request->url.port() == getMyPort()) { + if (request->url.port() == getMyPort() && internalHostnameIs(SBuf(request->url.host()))) { debugs(33, 3, "internal URL found: " << request->url.getScheme() << "://" << request->url.authority(true)); request->flags.internal = true; } else if (Config.onoff.global_internal_static && internalStaticCheck(request->url.path())) { diff --git a/src/internal.cc b/src/internal.cc index 6766f3bd23..326b175bc0 100644 --- a/src/internal.cc +++ b/src/internal.cc @@ -23,7 +23,6 @@ #include "Store.h" #include "tools.h" #include "util.h" -#include "wordlist.h" /* called when we "miss" on an internal object; * generate known dynamic objects, @@ -162,18 +161,17 @@ internalHostname(void) return host; } -int -internalHostnameIs(const char *arg) +bool +internalHostnameIs(const SBuf &arg) { - wordlist *w; - - if (0 == strcmp(arg, internalHostname())) - return 1; + if (arg.caseCmp(internalHostname()) == 0) + return true; - for (w = Config.hostnameAliases; w; w = w->next) - if (0 == strcmp(arg, w->key)) - return 1; + for (const auto &w : Config.hostnameAliases) { + if (w.caseCmp(arg) == 0) + return true; + } - return 0; + return false; } diff --git a/src/internal.h b/src/internal.h index 0bb628f1d3..c0cd7b2460 100644 --- a/src/internal.h +++ b/src/internal.h @@ -27,7 +27,7 @@ bool internalStaticCheck(const SBuf &urlPath); char *internalLocalUri(const char *dir, const SBuf &name); char *internalRemoteUri(bool, const char *, unsigned short, const char *, const SBuf &); const char *internalHostname(void); -int internalHostnameIs(const char *); +bool internalHostnameIs(const SBuf &); /// whether the given request URL path points to a cache manager (not /// necessarily running on this Squid instance)