From c22031979d498609f382c813790ecca82cddef23 Mon Sep 17 00:00:00 2001 From: Francesco Chemolli <5175948+kinkie@users.noreply.github.com> Date: Tue, 28 Jan 2025 08:56:38 +0000 Subject: [PATCH] V6 backports (#1986) Backporting commits: * 8b3185859b : Portability: remove explicit check for libdl * dd3292c92f : Refactor peerRefreshDNS() to clarify its (void*)1 logic * 0ef767a500: Nil request dereference in ACLExtUser and SourceDomainCheck ACLs --- configure.ac | 8 -------- src/acl/ExtUser.h | 1 + src/acl/SourceDomain.cc | 6 +++++- src/neighbors.cc | 33 +++++++++++++++++++++------------ 4 files changed, 27 insertions(+), 21 deletions(-) diff --git a/configure.ac b/configure.ac index 05aede6eb86..465ba34bdab 100644 --- a/configure.ac +++ b/configure.ac @@ -393,14 +393,6 @@ AS_IF([test "x$squid_opt_aufs_threads" != "x"],[ [Defines how many threads aufs uses for I/O]) ]) -## TODO check if this is necessary, LT_INIT does these checks -SQUID_AUTO_LIB(dl,[dynamic linking],[LIBDL]) -AS_IF([test "x$with_dl" != "xno"],[ - CXXFLAGS="$LIBDL_CFLAGS $CXXFLAGS" - LDFLAGS="$LIBDL_PATH $LDFLAGS" - AC_CHECK_LIB(dl, dlopen) -]) - AC_DEFUN([LIBATOMIC_CHECKER],[ AC_MSG_CHECKING(whether linking $1 -latomic works) AC_LINK_IFELSE([ diff --git a/src/acl/ExtUser.h b/src/acl/ExtUser.h index 457508ac667..a5df49deb69 100644 --- a/src/acl/ExtUser.h +++ b/src/acl/ExtUser.h @@ -27,6 +27,7 @@ class ACLExtUser : public ACL char const *typeString() const override; void parse() override; int match(ACLChecklist *checklist) override; + bool requiresRequest() const override { return true; } SBufList dump() const override; bool empty () const override; diff --git a/src/acl/SourceDomain.cc b/src/acl/SourceDomain.cc index bbec3e9224f..000a76dd7cb 100644 --- a/src/acl/SourceDomain.cc +++ b/src/acl/SourceDomain.cc @@ -36,7 +36,11 @@ SourceDomainLookup::LookupDone(const char *, const Dns::LookupDetails &details, { ACLFilledChecklist *checklist = Filled((ACLChecklist*)data); checklist->markSourceDomainChecked(); - checklist->request->recordLookup(details); + if (checklist->request) + checklist->request->recordLookup(details); + else + debugs(28, 3, "no request to recordLookup()"); + checklist->resumeNonBlockingCheck(SourceDomainLookup::Instance()); } diff --git a/src/neighbors.cc b/src/neighbors.cc index 33682fa878a..04b69c1e437 100644 --- a/src/neighbors.cc +++ b/src/neighbors.cc @@ -57,7 +57,8 @@ static void neighborAlive(CachePeer *, const MemObject *, const icp_common_t *); static void neighborAliveHtcp(CachePeer *, const MemObject *, const HtcpReplyData *); #endif static void neighborCountIgnored(CachePeer *); -static void peerRefreshDNS(void *); +static void peerDnsRefreshCheck(void *); +static void peerDnsRefreshStart(); static IPH peerDNSConfigure; static void peerProbeConnect(CachePeer *, const bool reprobeIfBusy = false); static CNCB peerProbeConnectDone; @@ -583,7 +584,7 @@ neighbors_init(void) } } - peerRefreshDNS((void *) 1); + peerDnsRefreshStart(); sep = getservbyname("echo", "udp"); echo_port = sep ? ntohs((unsigned short) sep->s_port) : 7; @@ -1237,24 +1238,32 @@ peerDNSConfigure(const ipcache_addrs *ia, const Dns::LookupDetails &, void *data } static void -peerRefreshDNS(void *data) +peerScheduleDnsRefreshCheck(const double delayInSeconds) { - CachePeer *p = nullptr; - - if (eventFind(peerRefreshDNS, nullptr)) - eventDelete(peerRefreshDNS, nullptr); + if (eventFind(peerDnsRefreshCheck, nullptr)) + eventDelete(peerDnsRefreshCheck, nullptr); + eventAddIsh("peerDnsRefreshCheck", peerDnsRefreshCheck, nullptr, delayInSeconds, 1); +} - if (!data && 0 == stat5minClientRequests()) { +static void +peerDnsRefreshCheck(void *) +{ + if (!stat5minClientRequests()) { /* no recent client traffic, wait a bit */ - eventAddIsh("peerRefreshDNS", peerRefreshDNS, nullptr, 180.0, 1); + peerScheduleDnsRefreshCheck(180.0); return; } - for (p = Config.peers; p; p = p->next) + peerDnsRefreshStart(); +} + +static void +peerDnsRefreshStart() +{ + for (auto p = Config.peers; p; p = p->next) ipcache_nbgethostbyname(p->host, peerDNSConfigure, p); - /* Reconfigure the peers every hour */ - eventAddIsh("peerRefreshDNS", peerRefreshDNS, nullptr, 3600.0, 1); + peerScheduleDnsRefreshCheck(3600.0); } /// whether new TCP probes are currently banned