]> git.ipfire.org Git - thirdparty/squid.git/log
thirdparty/squid.git
2 weeks agoext_kerberos_ldap_group_acl: Do not prohibit all LDFLAGS (#2313) v7
Amos Jeffries [Wed, 10 Dec 2025 02:18:30 +0000 (02:18 +0000)] 
ext_kerberos_ldap_group_acl: Do not prohibit all LDFLAGS (#2313)

2 weeks agoRemove SQUID_CHECK_KRB5_SOLARIS_BROKEN_KRB5_H macro (#2314)
Amos Jeffries [Fri, 12 Dec 2025 03:49:15 +0000 (03:49 +0000)] 
Remove SQUID_CHECK_KRB5_SOLARIS_BROKEN_KRB5_H macro (#2314)

The issue this portability hack works around was resolved
in Solaris 10 update "U11" and likely Solaris 11.3 releases.

6 weeks agoDo not create world-readable directories (#2161)
Joshua Rogers [Sat, 15 Nov 2025 16:16:33 +0000 (16:16 +0000)] 
Do not create world-readable directories (#2161)

6 weeks agodigest_edirectory_auth: Fix LDAPS memory leaks (#2169)
Joshua Rogers [Sat, 15 Nov 2025 04:55:41 +0000 (04:55 +0000)] 
digest_edirectory_auth: Fix LDAPS memory leaks (#2169)

LDAPS connections now succeed; referral chasing behaves as configured,
and some small memory leaks have been eliminated.

7 weeks agoCI: test against fedora 43 instead of 41 (#2301)
Francesco Chemolli [Sun, 9 Nov 2025 19:36:56 +0000 (19:36 +0000)] 
CI: test against fedora 43 instead of 41 (#2301)

Fedora 43 is out, Fedora 41 is now EOL.
Chase releases for CI tests

7 weeks agoICMP: Harden echo paths, fix overflows, UB, and leaks (#2199)
Joshua Rogers [Thu, 23 Oct 2025 10:11:27 +0000 (10:11 +0000)] 
ICMP: Harden echo paths, fix overflows, UB, and leaks (#2199)

ICMPv4 send now validates getAddrInfo results before touching
ai_addr, avoiding null-deref, and frees the address on error.
Logging no longer passes nullptr strings, preventing UB.

ICMPv4 recv gained strict bounds checks: reject packets shorter
than IP/ICMP headers, reject bogus iphdrlen, and require enough
bytes for echo meta. Payload length is computed from real data,
clamped to MAX_PAYLOAD, and malformed negatives are dropped. The
result size calculation now uses PINGER_PAYLOAD_SZ instead of the
wrong MAX_PKT4_SZ, fixing excess memory disclosure.

ICMPv6 send added the same getAddrInfo validation and safe log
string handling. The recv path now checks for minimal header
lengths, validates echo meta, fixes ident comparison with ntohs,
and clamps payload length safely before copying into preply.

The pinger handshake no longer uses strlen() on raw buffers;
it now echoes exactly the bytes received, avoiding OOB reads.

Squid Recv was changed to treat pingerReplyData as variable-
length. It validates base header size, available payload, and
non-negative psize, and rejects truncated or oversized datagrams,
fixing past OOB read risks.

Finally, netdbBinaryExchange now flushes its 4K buffer before
writing the next record, fixing a possible overflow at the end of
the buffer.

7 weeks agosnmplib: Improve handling of zero-length ASN OCTET STRINGs (#2163)
Joshua Rogers [Sun, 9 Nov 2025 11:49:11 +0000 (11:49 +0000)] 
snmplib: Improve handling of zero-length ASN OCTET STRINGs (#2163)

When converting zero-length objects to c-strings and terminating their
values, do not write to c-string storage buffer at offset `-1`.

Also reject 128-byte SNMP community values because our storage buffer
does not allow for their zero-termination. Such values were probably
silently truncated to 127 bytes.

Also reject SNMP community values with ASCII NUL characters because some
of our code does not support such values.

7 weeks agoDebug tls_read_method()/tls_write_method() errors (#2295)
Alex Rousskov [Wed, 5 Nov 2025 16:01:17 +0000 (16:01 +0000)] 
Debug tls_read_method()/tls_write_method() errors (#2295)

A Comm::ReadNow() caller or similar high-level reading code that
triggers tls_read_method() calls is often unaware that it is doing TLS.
Comm::ReadNow() and similar TCP I/O APIs return decoded bytes or I/O
errors. This lack of awareness keeps high-level reading code simple, but
it becomes a problem in triage because neither low-level BIO code nor
high-level ReadNow() callers report TLS state/errors. They report
errno-based outcomes that may be faked by translation layers and may not
fully describe what happened at TLS layer.

Translations are highly environment/configuration/transaction specific,
but here are a few examples:

* EGAIN becomes SSL_ERROR_WANT_READ becomes EAGAIN;
* TLS close_alert becomes SSL_ERROR_ZERO_RETURN becomes zero-size read;
* TCP EOF becomes SSL_ERROR_SYSCALL becomes COMM_ERROR with zero errno!

These changes expose TLS state/errors hidden by translation (e.g.,
SSL_ERROR_WANT_READ, SSL_ERROR_ZERO_RETURN, SSL_ERROR_SYSCALL above).

Similar changes were applied to tls_write_method(), for similar reasons.

Debugging and error reporting improvements aside, no functionality
changes are expected. These enhancements were instrumental in tunnel
closure problems triage, but those problems deserve dedicated fixes.

8 weeks agonegotiate_sspi_auth: Respond with ERR when FormatMessage() fails (#2158)
Joshua Rogers [Sun, 2 Nov 2025 19:56:35 +0000 (19:56 +0000)] 
negotiate_sspi_auth: Respond with ERR when FormatMessage() fails (#2158)

8 weeks agosecurity_file_certgen: Fix OPENSSL_malloc()/free(3) mismatch (#2174)
Joshua Rogers [Sun, 2 Nov 2025 03:53:33 +0000 (03:53 +0000)] 
security_file_certgen: Fix OPENSSL_malloc()/free(3) mismatch (#2174)

2 months agov7.3 SQUID_7_3
Francesco Chemolli [Tue, 28 Oct 2025 08:21:56 +0000 (08:21 +0000)] 
v7.3

2 months agoQuit NTLM authenticate() on missing NTLM authorization header (#2216)
Joshua Rogers [Sat, 25 Oct 2025 08:42:26 +0000 (08:42 +0000)] 
Quit NTLM authenticate() on missing NTLM authorization header (#2216)

Previously, various null-pointer dereferences, UAFs, and so on occurred.

2 months agoMaintenance: Drop HttpStateData::handleMoreRequestBodyAvailable (#2286)
Alex Rousskov [Sat, 25 Oct 2025 10:07:58 +0000 (10:07 +0000)] 
Maintenance: Drop HttpStateData::handleMoreRequestBodyAvailable (#2286)

The method is unreachable: It was supposed to be a virtual method. It is
declared as such in HttpStateData class, but it should have been
declared virtual in Client (i.e. the _parent_ class). Without that
virtual declaration in Client, the caller calls a Client method with the
same name instead. This code became unreachable in 2007 commit 5f8252d2.

The current method implementation is unusable: There are two explicit
XXXs, excessive (and unclassified) level-1 debugging, and an infinite
recursion added in the same 2007 commit 5f8252d2.

It is possible to refactor this method implementation to address known
concerns. We decided to remove this method instead because proper
refactoring is costly and is likely to result in this method removal.

The infinite recursion concern was raised by Joshua Rogers
https://joshua.hu/

2 months agoBug 5520: ERR_INVALID_URL for CONNECT host with leading digit (#2283)
Alex Rousskov [Thu, 23 Oct 2025 08:05:28 +0000 (08:05 +0000)] 
Bug 5520: ERR_INVALID_URL for CONNECT host with leading digit (#2283)

Squid 7.2 commit b8337359 added validation of host names
following RFC 1035 requirements. But those requirements were
outdated by RFC 1123:

  One aspect of host name syntax is hereby changed: the
  restriction on the first character is relaxed to allow either a
  letter or a digit.  Host software MUST support this more liberal
  syntax.

The commit treated CONNECT host names that start with a decimal digit
as invalid IPv4 addresses and rejected the corresponding requests,
resulting in HTTP 404 errors. Undo that change.

We have considered preserving code that detects valid IPv4 addresses (as
opposed to treating all non-IPv6 input as an "IPv4 address or reg-name"
without disambiguating the two cases) because its pieces may be reused,
but that essentially unused code has non-trivial performance penalty and
final code may look quite different after we complete our "non-CONNECT
uri-host parsing code" migration TODO. Polished source code comments
aside, this change reverts 2025 commit b8337359 and restores 2023
AnyP::Uri::parseHost() implementation (commit 963ff143).

2 months agoSNMP: Remove extraneous va_start() from snmpAddNode() (#2228)
Joshua Rogers [Tue, 21 Oct 2025 14:52:18 +0000 (14:52 +0000)] 
SNMP: Remove extraneous va_start() from snmpAddNode() (#2228)

Also polished snmpAddNode() implementation, including adding
`mib_tree_head->parent` initialization.

2 months agoFix Auth::User::absorb() IP list transfer logic (#2194)
Joshua Rogers [Tue, 21 Oct 2025 05:31:41 +0000 (05:31 +0000)] 
Fix Auth::User::absorb() IP list transfer logic (#2194)

Detach IP from source list before reattaching to destination and
decrement ipcount. This prevents list corruption and counter mismatch.

2 months agoFix type mismatch in new/delete of addrinfo::ai_addr (#2136)
Ben Kallus [Mon, 11 Aug 2025 13:02:17 +0000 (13:02 +0000)] 
Fix type mismatch in new/delete of addrinfo::ai_addr (#2136)

new/delete type mismatches are UB. Fix an instance of this
problem that occurs when sockaddr_in6 is allocated, but
sockaddr is deallocated, by always allocating/deallocating
sockaddr_storage.

    AddressSanitizer: new-delete-type-mismatch:
      object passed to delete has wrong type:
      size of the allocated type:   28 bytes;
      size of the deallocated type: 16 bytes.
    #0 0xaaaad1a8db54 in operator delete(void*, unsigned long)
    #1 0xaaaad287a668 in Ip::Address::FreeAddr(addrinfo*&)
        src/ip/Address.cc:710:22

2 months agoFix libntlmauth string parsing on big-endian machines (#2242)
Joshua Rogers [Sun, 19 Oct 2025 17:33:18 +0000 (17:33 +0000)] 
Fix libntlmauth string parsing on big-endian machines (#2242)

Prevent off-by-one reads in ntlm_fetch_string(); clamp copies too.
Convert flags with le32toh; validate lengths; ensure NUL-terminate.
cast ntlm string characters to unsigned char explicitly.
Return BlobError on oversized fields to avoid UB.

Combined these changes affect Big-Endian CPU architectures
which will fail to detect ASCII vs UTF encoding properly and
produce invalid strings (including user/password to compare).

2 months agoCI: Use OpenBSD 7.7 instead of 7.6 (#2275)
Francesco Chemolli [Sat, 18 Oct 2025 09:52:37 +0000 (09:52 +0000)] 
CI: Use OpenBSD 7.7 instead of 7.6 (#2275)

Fix staging checks by targeting the current version of OpenBSD.

    https://cdn.openbsd.org/pub/OpenBSD/7.6/packages/amd64/: no such dir

2 months agov7.2 SQUID_7_2
Francesco Chemolli [Thu, 16 Oct 2025 20:15:14 +0000 (21:15 +0100)] 
v7.2

Changes in squid-7.2 (15 Oct 2025):

- Bug 3390: Proxy auth data visible to scripts
- Bug 5504: Document that Squid discards invalid rewrite-url
- Bug 5407: Support at least 1000 groups per Kerberos user
- Fix parsing of malformed quoted squid.conf strings
- Fix off-by-one in helper args count assertion
- Fix UDP log module opening and closing code
- Fix BodyPipe debugging in handleChunkedRequestBody()
- Fix debugging of Eui48::lookup() problems
- Fix memory leak when parsing deprecated %rG logformat code
- Fix SQUID_YESNO 'syntax error near unexpected token'
- DNS: fix RRPack memcpy
- DNS: Do not leak RR data upon RR data unpacking errors
- FTP: Avoid null dereferences when handling ftp_port traffic
- FTP: fix response parsing and error handling memory leaks
- HTCP: Check for too-small packed and too-large unpacked fields
- HTTP: fix purging of entries by relative [Content-]Location URLs
- SNMP: Improve parsing of malformed ASN.1 object identifiers
- SNMP: Check for objid memory allocation failures
- SNMP: Fix ASN.1 encoding of long OIDs
- SNMP: Do not assert when debugging requests with long OIDs
- SNMP: Match Var allocation/deallocation methods
- digest_edirectory_auth: null-terminate NMAS values array
- digest_edirectory_auth: safely return password
- ext_ad_group_acl: Fix domain lookup error handling
- ext_edirectory_userip_acl: Redact password from stdout
- ext_file_userip_acl: harden lookups and memory handling
- ext_kerberos_ldap_group_acl: avoid freeing getenv() pointer
- ext_kerberos_ldap_group_acl: Improve LDAPMessage freeing
- ext_ldap_group_acl: avoid infinite loop on login containing '%s'
- negotiate_kerberos_auth: Properly align NDR data
- negotiate_sspi_auth: Do not exit on the first request
- ntlm_sspi_auth: memcmp not memcpy, send newline, no uninit mem
- text_backend: avoid memory leaks when reload/clearing
- Reduce UDS/segment name clashes across same-service instances
- Reject eui64 ACL addresses with trailing garbage
- Validate raw-IPv4 when parsing hostnames
- Avoid memory leaks when logging to MS Windows syslog
- Flip configure --enable-arch-native default
- Support no-digest X509 certificate keys like ML-DSA/EdDSA
- Do not allow client_ip_max_connections+1 connections
- Remove bundled smblib and librfcnb
- ... and several code cleanups
- ... and some documentation improvements

2 months agoBug 3390: Proxy auth data visible to scripts (#2249)
Amos Jeffries [Sat, 11 Oct 2025 03:33:02 +0000 (16:33 +1300)] 
Bug 3390: Proxy auth data visible to scripts (#2249)

Original changes to redact credentials from error page %R code
expansion output was incomplete. It missed the parse failure
case where ErrorState::request_hdrs raw buffer contained
sensitive information.

Also missed was the %W case where full request message headers
were generated in a mailto link. This case is especially
problematic as it may be delivered over insecure SMTP even if
the error was secured with HTTPS.

After this change:
* The HttpRequest message packing code for error pages is de-duplicated
  and elides authentication headers for both %R and %W code outputs.
* The %R code output includes the CRLF request message terminator.
* The email_err_data directive causing advanced details to be added to
  %W mailto links is disabled by default.

Also redact credentials from generated TRACE responses.

---------

Co-authored-by: Alex Rousskov <rousskov@measurement-factory.com>
2 months agoFlip configure --enable-arch-native default (#2266)
Francesco Chemolli [Fri, 3 Oct 2025 23:51:25 +0000 (00:51 +0100)] 
Flip configure --enable-arch-native default (#2266)

Flip the default of configure's `--enable-arch-native` option from
enabled to disabled.

GCC's and clang's `-march=native` argument causes issues in some
environments, most notably containers where the compilers' heuristics
about CPU feature set may fail. These issues manifest as
hard-to-reproduce SIGILL errors in binaries such as `squid` or unit test
programs. The new default is safer. Performance-minded administrators
still have a convenient option to optimize via `--enable-arch-native`.

2 months agoReduce UDS/segment name clashes across same-service instances (#2023)
ankor2023 [Wed, 9 Jul 2025 17:45:19 +0000 (17:45 +0000)] 
Reduce UDS/segment name clashes across same-service instances (#2023)

Add a PID file name hash to the names of the shared memory segments and
Unix Domain Sockets. Since all instances running on the same host are
supposed to have unique PID files, this addition significantly reduces
the probability of name clashes when running multiple Squid instances
with the same service name (i.e. the same `squid -n` parameter value
that defaults to "squid").

A clash may still happen if two different PID file names have the same
hash or if multiple instances disable PID file management with
`pid_filename none`. Clashes may also happen in environments where Squid
does not even use service name for naming shared memory segments.

Examples of UDS and shared memory segment names (while using default
service name):

    /var/run/squid/squid-SLWQ-kid-1.ipc
    /var/run/squid/squid-SLWQ-coordinator.ipc
    /dev/shm/squid-SLWQ-tls_session_cache.shm
    /dev/shm/squid-SLWQ-transients_map_slices.shm

This change is a reference point for automated CONTRIBUTORS updates.

2 months agoSupport no-digest X509 certificate keys like ML-DSA/EdDSA (#2165)
uhliarik [Mon, 22 Sep 2025 13:46:05 +0000 (13:46 +0000)] 
Support no-digest X509 certificate keys like ML-DSA/EdDSA (#2165)

Recent OpenSSL releases (e.g., OpenSSL v3.5) support several private key
types[^1] for which supplying a message digest algorithm is prohibited
when signing a certificate. Prior to this enhancement, Squid was
rejecting https_port and http_port configurations using such key types
(with the above FATAL message) because OpenSSL X509_sign() call made
with a prohibited (for the given key type) non-nil digest algorithm was
failing.

Technically, only listening ports with generate-host-certificates (and
ssl-bump) parameters need to generate X509 certificates and, hence, call
X509_sign(). However, current Squid code generates so called "untrusted"
certificates even for ports that do not support dynamic host certificate
generation or SslBump (XXX). Thus, this enhancement is applicable to
both regular and SslBump configurations.

[^1]: Known no-message-digest key types are ML-DSA-44, ML-DSA-65,
ML-DSA-87, ED25519, and ED448, but others might exist or will be added.
This change was tested against known types, but should support others.
ML-DSA key types are used in post-quantum cryptography.

3 months agoRemove smblib and librfcnb (#2138)
Francesco Chemolli [Sat, 9 Aug 2025 23:01:57 +0000 (23:01 +0000)] 
Remove smblib and librfcnb (#2138)

Unused since we removed basic_smb_lm_auth helper.

3 months agoDo not allow client_ip_max_connections+1 connections (#2168)
Joshua Rogers [Mon, 8 Sep 2025 14:43:54 +0000 (14:43 +0000)] 
Do not allow client_ip_max_connections+1 connections (#2168)

Previously, setting client_ip_max_connections to a non-negative N would
allow N+1 client connections, due to an off-by-one error.

3 months agoSNMP: Match Var allocation/deallocation methods (#2183)
Joshua Rogers [Sat, 20 Sep 2025 16:48:47 +0000 (16:48 +0000)] 
SNMP: Match Var allocation/deallocation methods (#2183)

Pdu::setVars() and Pdu::unpack() allocate variables with `new Var(...)`,
but clearVars() freed them using snmp_var_free(). That skipped the `Var`
destructor and mismatched the allocator.

We hope that all Pdu::variables are allocated via Pdu class methods
despite the presence of snmp_var_new() and snmp_var_clone() calls in
low-level snmplib code.

3 months agoFix parsing of malformed quoted squid.conf strings (#2239)
Joshua Rogers [Mon, 15 Sep 2025 14:22:01 +0000 (14:22 +0000)] 
Fix parsing of malformed quoted squid.conf strings (#2239)

Iteration of a quoted token that ends with a backslash (escape with no
next char) kept going past the end of the token. That bug as well as
hypothetical 2KB-byte tokens (exceeding CONFIG_LINE_LIMIT) could also
result in a 1-byte NUL overrun.

3 months agoHTCP: Check for too-small packed and too-large unpacked fields (#2164)
Joshua Rogers [Thu, 11 Sep 2025 23:33:51 +0000 (23:33 +0000)] 
HTCP: Check for too-small packed and too-large unpacked fields (#2164)

Harden HTCP parsing by checking HTCP fields

- Check packed field lengths and buffer space before reads.
- Guard CLR "reason" when sz < 2; log invalid messages.
- Support old minor==0 layout with safe prefix copy.
- Use early returns and unique_ptr for safer flows.

3 months agodigest_edirectory_auth: safely return password (#2197)
Joshua Rogers [Thu, 11 Sep 2025 11:58:52 +0000 (11:58 +0000)] 
digest_edirectory_auth: safely return password (#2197)

Previously, nmasldap_get_simple_pwd() and nmasldap_get_password()
could overrun or return non-terminated strings at length
boundaries. This change adds strict bounds checks, copies at most
len - 1, and ensures explicit NUL termination, aligning both
helpers buffer/length semantics without altering call-site
behavior.

3 months agoFix off-by-one in helper args count assertion (#2212)
Joshua Rogers [Thu, 11 Sep 2025 13:27:27 +0000 (13:27 +0000)] 
Fix off-by-one in helper args count assertion (#2212)

The `nargs` value should now be pointing past both the
`HELPER_MAX_ARGS` and the additional terminator. i.e. outside
the valid array space. This is okay because it is an absolute
counter (1-based) not an offset (0-based) despite how it is
used to fill the array.

3 months agoNoNewGlobals for Auth::Scheme::_Schemes (#2196)
Joshua Rogers [Thu, 11 Sep 2025 10:31:55 +0000 (10:31 +0000)] 
NoNewGlobals for Auth::Scheme::_Schemes (#2196)

3 months agoFix purging of entries by relative [Content-]Location URLs (#2235)
Joshua Rogers [Wed, 10 Sep 2025 05:12:19 +0000 (05:12 +0000)] 
Fix purging of entries by relative [Content-]Location URLs (#2235)

3 months agoFix UDP log module opening and closing code (#2214)
Joshua Rogers [Wed, 10 Sep 2025 00:57:09 +0000 (00:57 +0000)] 
Fix UDP log module opening and closing code (#2214)

logfile_mod_udp_open() mistreated successful comm_connect_addr() result
as an "Unable to connect" failure (and vice versa), rendering UDP-based
logging unusable. Broken since at least 2010 commit d938215.

Also fixed logfile_mod_udp_close() closing FD 0 after "Invalid UDP
logging address" ERRORs during logfile_mod_udp_open().

3 months agoext_edirectory_userip_acl: Redact password from stdout (#2156)
Joshua Rogers [Tue, 9 Sep 2025 14:19:52 +0000 (14:19 +0000)] 
ext_edirectory_userip_acl: Redact password from stdout (#2156)

3 months agoext_file_userip_acl: harden lookups and memory handling (#2198)
Joshua Rogers [Tue, 9 Sep 2025 15:46:55 +0000 (15:46 +0000)] 
ext_file_userip_acl: harden lookups and memory handling (#2198)

Stop mutating getgrnam(3) buffer; iterate gr_mem safely
Zero last node and NULL-check in dict_lookup() to prevent OOB read
Add free_dict() and free dictionary before exit

3 months agoDo not leak RedirectStateData on snprintf error/truncation (#2205)
Joshua Rogers [Tue, 9 Sep 2025 09:45:48 +0000 (09:45 +0000)] 
Do not leak RedirectStateData on snprintf error/truncation (#2205)

3 months agoSimplify by removing lazy ACLDomainData::domains initialization (#2182)
Joshua Rogers [Tue, 9 Sep 2025 06:52:44 +0000 (06:52 +0000)] 
Simplify by removing lazy ACLDomainData::domains initialization (#2182)

3 months agoext_ldap_group_acl: avoid infinite loop on login containing '%s' (#2217)
Joshua Rogers [Tue, 9 Sep 2025 05:29:34 +0000 (05:29 +0000)] 
ext_ldap_group_acl: avoid infinite loop on login containing '%s' (#2217)

3 months agoFix BodyPipe debugging in handleChunkedRequestBody() (#2224)
Joshua Rogers [Tue, 9 Sep 2025 08:18:25 +0000 (08:18 +0000)] 
Fix BodyPipe debugging in handleChunkedRequestBody() (#2224)

3 months agodigest_edirectory_auth: Remove useless free in edirectory digest (#2192)
Joshua Rogers [Mon, 8 Sep 2025 23:47:49 +0000 (23:47 +0000)] 
digest_edirectory_auth: Remove useless free in edirectory digest (#2192)

In this codepath, `requestBer` is nullptr.

3 months agoDNS: Do not leak RR data upon RR data unpacking errors (#2193)
Joshua Rogers [Tue, 9 Sep 2025 01:14:06 +0000 (01:14 +0000)] 
DNS: Do not leak RR data upon RR data unpacking errors (#2193)

3 months agourn: free urn object on initial error (#2195)
Joshua Rogers [Tue, 9 Sep 2025 02:38:48 +0000 (02:38 +0000)] 
urn: free urn object on initial error (#2195)

Previously, the object wasn't freed if an error occurred
when setting the uri.

Also sets the location header to the first url, regardless
of qsort shifting the buffer.

3 months agoFix debugging of Eui48::lookup() problems (#2211)
Joshua Rogers [Tue, 9 Sep 2025 04:00:06 +0000 (04:00 +0000)] 
Fix debugging of Eui48::lookup() problems (#2211)

arpReq.arp_ha.sa_data is not a null-terminated buffer.
Log meaningful data: the sa_family which caused the log.

3 months agodigest_edirectory_auth: null-terminate NMAS values array (#2184)
Joshua Rogers [Mon, 8 Sep 2025 20:51:22 +0000 (20:51 +0000)] 
digest_edirectory_auth: null-terminate NMAS values array (#2184)

This patch NULL-terminates the NMAS Universal Password values
array (values[1] = nullptr) to match ldap_get_values() semantics
and avoid potential out-of-bounds iteration.

3 months agonegotiate_kerberos_auth: Properly align NDR data (#2186)
Joshua Rogers [Mon, 8 Sep 2025 22:18:21 +0000 (22:18 +0000)] 
negotiate_kerberos_auth: Properly align NDR data (#2186)

Resolves sporadic Negotiate/Kerberos auth failures that manifested
as proxy 407 loops or helper errors when decoding PAC data, depending
on ticket layout.

Previously, the parser advanced bpos by the remainder:
(bpos += bpos %n)
instead of padding to the next multiple of n.

For example, n = 4:
    bpos=5 (r=1): current: 6 (wrong), correct: 8
    bpos=6 (r=2): current: 8 (accidentally right)
    bpos=7 (r=3): current: 10 (wrong), correct: 8

3 months agoext_kerberos_ldap_group_acl: avoid freeing getenv() pointer (#2190)
Joshua Rogers [Mon, 8 Sep 2025 19:20:03 +0000 (19:20 +0000)] 
ext_kerberos_ldap_group_acl: avoid freeing getenv() pointer (#2190)

3 months agoSNMP: Improve parsing of malformed ASN.1 object identifiers (#2185)
Joshua Rogers [Mon, 8 Sep 2025 11:08:47 +0000 (11:08 +0000)] 
SNMP: Improve parsing of malformed ASN.1 object identifiers (#2185)

ASN.1 object identifiers are length-delimited, not null-terminated. If
the input encoding omits a terminating byte (MSB clear), then the parser
would walk past the buffer.

Also simplified expressions related to sub-identifier parsing.

3 months agoDNS: fix RRPack memcpy to copy rdata buffer, not the pointer (#2189)
Joshua Rogers [Mon, 8 Sep 2025 12:33:38 +0000 (12:33 +0000)] 
DNS: fix RRPack memcpy to copy rdata buffer, not the pointer (#2189)

Fortunately, broken code had no effect because its only caller --
rfc2671RROptPack() that sends EDNS option -- always supplies zero-size
rdata.

Also clarified rfc1035QueryUnpack() implementation using sizeof().

3 months agontlm_sspi_auth: memcmp not memcpy, send newline, no uninit mem (#2218)
Joshua Rogers [Mon, 8 Sep 2025 16:25:18 +0000 (16:25 +0000)] 
ntlm_sspi_auth: memcmp not memcpy, send newline, no uninit mem (#2218)

Previously, memcpy was incorrectly used instead of memcmp. In addition
to this, uninitalized memory could be used, and responses to Squid were
missing a newline.

3 months agoDo not assert when debugging SNMP requests with long OIDs (#2150)
Alex Rousskov [Mon, 8 Sep 2025 06:40:02 +0000 (06:40 +0000)] 
Do not assert when debugging SNMP requests with long OIDs (#2150)

    FATAL: assertion failed: MemBuf.cc: "new_cap > (size_t) capacity"

Also fixes repeated same-buffer snmpDebugOid() calls that used to
accumulate stale content in snmpTreeNext():

    snmpTreeNext: Current : .1.3.6.1.4.1.3495
    snmpTreeNext: Next : .1.3.6.1.4.1.3495.1.3.6.1.4.1.3495.1.1.1.0

Current snmpDebugOid() callers have been checked for compatibility with
this fix. Fixing snmpDebugOid() API is out of this surgical fix scope.

3 months agoAvoid memory leaks when logging to MS Windows syslog (#2154)
Joshua Rogers [Mon, 8 Sep 2025 09:37:01 +0000 (09:37 +0000)] 
Avoid memory leaks when logging to MS Windows syslog (#2154)

3 months agoFix memory leak when parsing deprecated %rG logformat code (#2187)
Joshua Rogers [Mon, 8 Sep 2025 05:06:43 +0000 (05:06 +0000)] 
Fix memory leak when parsing deprecated %rG logformat code (#2187)

Also terminate the tables for ProxyProtocol and TableTransport %codes.

3 months agotext_backend: avoid memory leaks when reload/clearing (#2188)
Joshua Rogers [Sun, 7 Sep 2025 23:04:46 +0000 (23:04 +0000)] 
text_backend: avoid memory leaks when reload/clearing (#2188)

3 months agoBug 5504: Document that Squid discards invalid rewrite-url (#2202)
Eduard Bagdasaryan [Sat, 6 Sep 2025 22:16:07 +0000 (22:16 +0000)] 
Bug 5504: Document that Squid discards invalid rewrite-url (#2202)

... values returned by url_rewrite_program.

3 months agoext_ad_group_acl: Fix domain lookup error handling (#2180)
Joshua Rogers [Sat, 6 Sep 2025 08:28:12 +0000 (08:28 +0000)] 
ext_ad_group_acl: Fix domain lookup error handling (#2180)

On errors, the helper was reporting DsRoleGetPrimaryDomainInformation()
error info using the wrong/bogus error code and probably freeing an
uninitialized pointer.

3 months agoext_kerberos_ldap_group_acl: Improve LDAPMessage freeing (#2181)
Joshua Rogers [Sat, 6 Sep 2025 12:34:22 +0000 (12:34 +0000)] 
ext_kerberos_ldap_group_acl: Improve LDAPMessage freeing (#2181)

Do not free uninitialized or freed LDAPMessage.

3 months agoConsistently check strcspn return value (#2166)
Joshua Rogers [Sat, 6 Sep 2025 07:04:21 +0000 (07:04 +0000)] 
Consistently check strcspn return value (#2166)

3 months agoMaintenance: Fix out-of-sync If-None-Match copying explanation (#2200)
Joshua Rogers [Thu, 4 Sep 2025 20:25:19 +0000 (20:25 +0000)] 
Maintenance: Fix out-of-sync If-None-Match copying explanation (#2200)

If `cache_miss_revalidate` is enabled, we append the header.

3 months agonegotiate_wrapper: Search buffer with strchr instead of memchr (#2176)
Joshua Rogers [Wed, 3 Sep 2025 17:36:49 +0000 (17:36 +0000)] 
negotiate_wrapper: Search buffer with strchr instead of memchr (#2176)

Previously, memchr would search tainted data.

3 months agoReject eui64 ACL addresses with trailing garbage (#2157)
Joshua Rogers [Wed, 3 Sep 2025 13:09:10 +0000 (13:09 +0000)] 
Reject eui64 ACL addresses with trailing garbage (#2157)

Also limit eui64 ACL addresses to 255 characters.

3 months agonegotiate_sspi_auth: Do not exit on the first request (#2159)
Joshua Rogers [Wed, 3 Sep 2025 16:15:05 +0000 (16:15 +0000)] 
negotiate_sspi_auth: Do not exit on the first request (#2159)

Broken since 2010 commit 8eeb87e6.

3 months agoFTP: Avoid null dereferences when handling ftp_port traffic (#2172)
Joshua Rogers [Tue, 2 Sep 2025 19:06:12 +0000 (19:06 +0000)] 
FTP: Avoid null dereferences when handling ftp_port traffic (#2172)

`strchr` may return null if a deliminator is not found. Likewise,
if an `Http::HdrType::FTP_REASON` string is not found, nullptr would
be used in the %s formatter, leading to UB.

3 months agoCheck for SNMP objid memory allocation failures (#2162)
Joshua Rogers [Tue, 2 Sep 2025 11:36:42 +0000 (11:36 +0000)] 
Check for SNMP objid memory allocation failures (#2162)

4 months agoValidate raw-IPv4 when parsing hostnames (#2140)
Amos Jeffries [Wed, 27 Aug 2025 19:13:15 +0000 (19:13 +0000)] 
Validate raw-IPv4 when parsing hostnames (#2140)

4 months agoMaintenance: C++11 default initializers for Comm::Connection (#2147)
Amos Jeffries [Sat, 30 Aug 2025 05:26:44 +0000 (05:26 +0000)] 
Maintenance: C++11 default initializers for Comm::Connection (#2147)

4 months agoFix ASN.1 encoding of long SNMP OIDs (#2149)
Alex Rousskov [Sat, 30 Aug 2025 06:49:36 +0000 (06:49 +0000)] 
Fix ASN.1 encoding of long SNMP OIDs (#2149)

4 months agoBug 5407: Support at least 1000 groups per Kerberos user (#2047)
Norman Ziert [Tue, 5 Aug 2025 08:31:40 +0000 (08:31 +0000)] 
Bug 5407: Support at least 1000 groups per Kerberos user (#2047)

Increase MAX_PAC_GROUP_SIZE to a more reasonable value,
so negotiate_kerberos_auth can report more than approximately
200 groups an authenticated user is member of back to Squid.

4 months agoFix FTP response parsing and error handling memory leaks (#2133)
Eduard Bagdasaryan [Fri, 1 Aug 2025 19:58:26 +0000 (19:58 +0000)] 
Fix FTP response parsing and error handling memory leaks (#2133)

FTP EPLF parsing leaks in ftpListParseParts() were detected by Coverity.
CID 1660782 and CID 1660785: Resource leaks (RESOURCE_LEAK).

Three other FTP client-related leaks were detected by Valgrind:

* Ftp::CtrlChannel::last_reply
* ErrorPage::ftp::cwd_msg
* Ftp::DataChannel::host

5 months agoSimplify Ipc::Strand::handleRegistrationResponse() (#2129)
Eduard Bagdasaryan [Thu, 31 Jul 2025 05:22:56 +0000 (05:22 +0000)] 
Simplify Ipc::Strand::handleRegistrationResponse() (#2129)

Checking PID to ignore stale responses became unnecessary after 2021
commit 4c21861 added Mine() calls that guarantee message freshness.

Also replaced the matching kidId check with an assertion because no IPC
messages, not even stale ones, may be sent to the kid with the wrong kid
identifier. This assertion cannot be easily generalized because most IPC
messages do not contain the kid identifier of the intended recipient.

5 months agoFix SQUID_YESNO 'syntax error near unexpected token' (#2117)
Amos Jeffries [Fri, 11 Jul 2025 13:50:50 +0000 (13:50 +0000)] 
Fix SQUID_YESNO 'syntax error near unexpected token' (#2117)

autoconf can be confused by use of commas (,) in the error
message when the SQUID_YESNO macro is followed by AC_CASE.

5 months agov7.1 SQUID_7_1
Francesco Chemolli [Thu, 10 Jul 2025 10:34:16 +0000 (10:34 +0000)] 
v7.1

5 months agoBug 5303: document regexp dialect (#2110)
Francesco Chemolli [Wed, 9 Jul 2025 16:01:14 +0000 (16:01 +0000)] 
Bug 5303: document regexp dialect (#2110)

Squid currently uses the GNU API providing regex_t and regcomp()
with POSIX.2 implementation expected.

Squid specifically uses/requires the REG_EXTENDED pattern
matching - which is commonly referred to as "POSIX extended
regex".

5 months agoCI: drop FreeBSD 13 testing (#2112)
Francesco Chemolli [Tue, 8 Jul 2025 21:24:57 +0000 (21:24 +0000)] 
CI: drop FreeBSD 13 testing (#2112)

FreeBSD 13 packages are unreliably packaged, causing
version mismatches that lead to CI test failures:

    Newer FreeBSD version for package ztrack:
      - package: 1305000
      - running userland: 1304000
    repository FreeBSD contains packages for wrong OS version

Continue to test on FreeBSD 14 which is more reliable.

5 months agoBug 5498: cachemgr documentation improvements (#2109)
Francesco Chemolli [Sat, 5 Jul 2025 15:55:34 +0000 (15:55 +0000)] 
Bug 5498: cachemgr documentation improvements (#2109)

Be more explicit in documenting squid's well-known-prefix
for cache manager in the release notes

6 months agoRemove basic_smb_lm_auth helper (#2009)
Francesco Chemolli [Thu, 6 Mar 2025 00:24:22 +0000 (00:24 +0000)] 
Remove basic_smb_lm_auth helper (#2009)

This helper implementation is based on an old snapshot and adaptation of
Samba code. Samba project offers a more secure and better maintained
tool.

6 months agoBug 5497: Fix detection of duped IPs returned by getaddrinfo() (#2100)
aafbsd [Thu, 26 Jun 2025 18:57:19 +0000 (18:57 +0000)] 
Bug 5497: Fix detection of duped IPs returned by getaddrinfo() (#2100)

    WARNING: Ignoring <IP X> because it is already covered by <IP X>

Affects `src`, `dst`, and `localip` ACLs, especially those that use
domain names with multiple DNS A or AAAA records.

IP addresses returned by getaddrinfo(3) may not be sorted (e.g., when a
host has multiple DNS A RRs on FreeBSD). Instead of comparing the
current address with just the previous one, we now check all previously
added addresses (while processing a single getaddrinfo() call output).

This surgical fix minimizes changes without improving surrounding code.

6 months agoDocs: Describe cf.data.depend purpose (#2102)
Alex Rousskov [Wed, 25 Jun 2025 18:38:40 +0000 (18:38 +0000)] 
Docs: Describe cf.data.depend purpose (#2102)

6 months agoMaintenance: remove some duplicate auth code (#2097)
Amos Jeffries [Mon, 23 Jun 2025 23:11:47 +0000 (23:11 +0000)] 
Maintenance: remove some duplicate auth code (#2097)

6 months agov7.0.2 SQUID_7_0_2
Francesco Chemolli [Fri, 20 Jun 2025 16:47:09 +0000 (16:47 +0000)] 
v7.0.2

6 months agoFix missing CONTRIBUTOR name (#2091)
Amos Jeffries [Sun, 22 Jun 2025 00:48:05 +0000 (00:48 +0000)] 
Fix missing CONTRIBUTOR name (#2091)

Despite CONTRIBUTORS file being UTF-8 Ture's name
was dropped by our conversion script which does not
handle non-ASCII characters nicely. Re-add it manually.

6 months agoPrep for v7.0.2 (#2090)
Francesco Chemolli [Fri, 20 Jun 2025 12:16:21 +0000 (13:16 +0100)] 
Prep for v7.0.2 (#2090)

Co-authored-by: Amos Jeffries <yadij@users.noreply.github.com>
6 months agoDo not duplicate received Surrogate-Capability in sent requests (#2087)
Eduard Bagdasaryan [Tue, 17 Jun 2025 21:00:51 +0000 (21:00 +0000)] 
Do not duplicate received Surrogate-Capability in sent requests (#2087)

When computing Surrogate-Capability header while forwarding an
accelerated request, Squid duplicated old (i.e. received) header entries
(if any). For example, this outgoing request shows an extra hop1 entry:

    GET / HTTP/1.1
    ...
    Surrogate-Capability: hop1="Surrogate/1.0"
    Surrogate-Capability: hop1="Surrogate/1.0", hop2="Surrogate/1.0"

6 months agoCI: Update tested Linux versions to current (#2080)
Francesco Chemolli [Tue, 10 Jun 2025 06:05:06 +0000 (06:05 +0000)] 
CI: Update tested Linux versions to current (#2080)

Fedora 40 is EOL, and add CentOS Stream 10 and Ubuntu Plucky

6 months agoCI: Fix gperf 3.2 output filter (#2081)
Amos Jeffries [Mon, 9 Jun 2025 04:49:04 +0000 (04:49 +0000)] 
CI: Fix gperf 3.2 output filter (#2081)

gperf 3.2 now provides properly compiler and C++ version scoped
fallthrough attributes. Our filter to convert the gperf 3.1 and
older output for C++17 attribute requirements is now broken and
produces compiler errors due to listing '[[fallback]];' on two
consecutive lines.

6 months agoFix OpenSSL build with GCC v15.1.1 [-Wformat-truncation=] (#2077)
Francesco Chemolli [Tue, 3 Jun 2025 12:29:30 +0000 (12:29 +0000)] 
Fix OpenSSL build with GCC v15.1.1 [-Wformat-truncation=] (#2077)

On arm64 Fedora 42:

    src/ssl/crtd_message.cc:132:39: error: '%zd' directive output may be
        truncated writing between 1 and 19 bytes into a region
        of size 10 [-Werror=format-truncation=]
        snprintf(buffer, sizeof(buffer), "%zd", body.length());

6 months agoDisable EUI when arpreq is missing and cannot be defined (#2070)
Francesco Chemolli [Sat, 31 May 2025 18:40:35 +0000 (18:40 +0000)] 
Disable EUI when arpreq is missing and cannot be defined (#2070)

OpenBSD 7.7 provides a net/if_arp.h header file,
but it doesn't provide a `struct arpreq`, which
is necessary for our EUI implementation to work.

Disable EUI when arpreq definition is missing,
except on Windows where we provide our own.

7 months agoCI: Pin OpenBSD 7.6
Francesco Chemolli [Sun, 11 May 2025 10:26:36 +0000 (11:26 +0100)] 
CI: Pin OpenBSD 7.6

OpenBSD 7.7 introduces some changes that fail our build.
Pin version 7.6 while we work on version 7.7 adoption.

7 months agoFix SNMP cacheNumObjCount -- number of cached objects (#2053) 2074/head
Carl Vuosalo [Wed, 28 May 2025 19:17:38 +0000 (19:17 +0000)] 
Fix SNMP cacheNumObjCount -- number of cached objects (#2053)

SNMP counter cacheNumObjCount used StoreEntry::inUseCount() stats. For
Squid instances using a rock cache_dirs or a shared memory cache, the
number of StoreEntry objects in use is usually very different from the
number of cached objects because these caches do not use StoreEntry
objects as a part of their index. For all instances, inUseCount() also
includes ongoing transactions and internal tasks that are not related to
cached objects at all.

We now use the sum of the counters already reported on "on-disk objects"
and "Hot Object Cache Items" lines in "Internal Data Structures" section
of `mgr:info` cache manager report. Due to floating-point arithmetic,
these stats are approximate, but it is best to keep SNMP and cache
manager reports consistent.

This change does not fix SNMP Gauge32 overflow bug: Caches with 2^32 or
more objects continue to report wrong/smaller cacheNumObjCount values.

### On MemStore::getStats() and StoreInfoStats changes

To include the number of memory-cached objects while supporting SMP
configurations with shared memory caches, we had to change how cache
manager code aggregates StoreInfoStats::mem data collected from SMP
worker processes. Before these changes, `StoreInfoStats::operator +=()`
used a mem.shared data member to trigger special aggregation code hack,
but

* SNMP-specific code cannot benefit from that StoreInfoStats aggregation
  because SNMP code exchanges simple counters rather than StoreInfoStats
  objects. `StoreInfoStats::operator +=()` is never called by SNMP code.
  Instead, SNMP uses Snmp::Pdu::aggregate() and friends.

* We could not accommodate SNMP by simply adding special aggregation
  hacks directly to MemStore::getStats() because that would break
  critical "all workers report about the same stats" expectations of the
  special hack in `StoreInfoStats::operator +=()`.

To make both SNMP and cache manager use cases work, we removed the hack
from StoreInfoStats::operator +=() and hacked MemStore::getStats()
instead, making the first worker responsible for shared memory cache
stats reporting (unlike SMP rock diskers, there is no single kid process
dedicated to managing a shared memory cache). StoreInfoStats operator
now uses natural aggregation logic without hacks.

TODO: After these changes, StoreInfoStats::mem.shared becomes
essentially unused because it was only used to enable special
aggregation hack in StoreInfoStats that no longer exists. Remove?

7 months agoBug 5352: Do not get stuck in RESPMOD after pausing peer read(2) (#2065)
Eduard Bagdasaryan [Tue, 20 May 2025 18:52:04 +0000 (18:52 +0000)] 
Bug 5352: Do not get stuck in RESPMOD after pausing peer read(2) (#2065)

The transaction gets stuck if Squid, while sending virgin body bytes to
an ICAP RESPMOD service, temporary stops reading additional virgin body
bytes from cache_peer or origin server. Squid pauses reading (with
readSizeWanted becoming zero) if reading more virgin bytes is temporary
prohibited by delay pools and/or read_ahead_gap limits:

    readReply: avoid delayRead() to give adaptation a chance to drain...

HttpStateData::readReply() starts waiting for ModXact to drain the
BodyPipe buffer, but that draining may not happen, either because
ModXact::virginConsume() is not called at all[^1] or because it is
"postponing consumption" when BodyPipe still has some unused space[^2].

With HttpStateData not reading more virgin bytes, Squid may not write
more virgin body bytes to the ICAP service, and the ICAP service may not
start or continue responding to the RESPMOD request. Without that ICAP
activity, ModXact does not consume, the virgin BodyPipe buffer is not
drained, HttpStateData is not reading, and no progress is possible.

HttpStateData::readReply() should start waiting for adaptation to drain
BodyPipe only when the buffer becomes completely full (instead of when
it is not empty). This change may increase virgin response body bytes
accumulation but not the buffer capacity because existing buffer
space-increasing logic in maybeMakeSpaceAvailable() remains intact.

To prevent stalling, both BodyPipe ends (i.e. HttpStateData and
Icap::ModXact) must use matching "progress is possible" conditions, but

* HttpStateData used hasContent()
* Icap::ModXact used spaceSize()
* Ftp::Client used potentialSpaceSize()

Now, all three use matching potentialSpaceSize()-based conditions.

Squid eCAP code is unaffected by this bug, because it does not postpone
BodyPipe consumption. eCAP API does not expose virgin body buffer
capacity, so an eCAP adapter that postpones consumption risks filling
the virgin body buffer and stalling. This is an eCAP API limitation.

Broken since 2024 commit cc8b26f.

[^1]: Zero readSizeWanted is reachable without delay pools, but only if
Squid receives an adapted response (that makes readAheadPolicyCanRead()
false by filling StoreEntry). Ideally, receiving an adapted response
should result in a virginConsume() calls (that would trigger BodyPipe
draining), but currently it may not. Reliably starting virgin data
consumption sooner is not trivial and deserves a dedicated change.

[^2]: ModXact postpones consumption to preserve virgin bytes for ICAP
retries and similar purposes. ModXact believes it is safe to postpone
because there is still space left in the buffer for HttpStateData to
continue to make progress. ModXact would normally start or resume
draining the buffer when sending more virgin bytes to the ICAP service.

7 months agoMaintenance: Remove shared LDADD (#2058)
Amos Jeffries [Sun, 18 May 2025 06:39:04 +0000 (06:39 +0000)] 
Maintenance: Remove shared LDADD (#2058)

Most built binaries have a distinct set of dependencies and already have
their own foo_LDADD variables. Add a few variables to cover the
remaining binaries and stop setting an (incomplete) LDADD global.

Also removed unnecessary EXTRA_PROGRAMS because mem_node_test and splay
binaries are built unconditionally.

7 months agoBug 5316: Release note says version 6 still for testing (#2066)
Amos Jeffries [Sun, 18 May 2025 04:57:29 +0000 (04:57 +0000)] 
Bug 5316: Release note says version 6 still for testing (#2066)

8 months agoSource Format Enforcement (#2041)
squidadm [Wed, 23 Apr 2025 07:37:02 +0000 (19:37 +1200)] 
Source Format Enforcement (#2041)

8 months agoBug 5489: Fix "make check" linking on Solaris (#2049)
Francesco Chemolli [Sun, 13 Apr 2025 22:56:57 +0000 (22:56 +0000)] 
Bug 5489: Fix "make check" linking on Solaris (#2049)

Change link order of libcomm and libip to fix missing symbols at link
time on Solaris:

    libtool: link: /usr/gcc/14/bin/g++ ... -o tests/testCacheManager
    _ZN2Ip11InterceptorE ... libcomm.a
    _ZN2Ip9Intercept9LookupNatERKN4Comm10ConnectionE ... libcomm.a
    ld: fatal: symbol referencing errors

8 months agoCI: update FreeBSD version (#2051)
Francesco Chemolli [Sun, 13 Apr 2025 21:11:46 +0000 (21:11 +0000)] 
CI: update FreeBSD version (#2051)

The FreeBSD project has promoted version 14.2 to stable.
Some packages we use are not compatible with version 14.1.
Upgrade the reference version we use, the action supports it

9 months agoFix GCC v13 LTO build [-Walloc-size-larger-than=] (#1929)
Julien [Sun, 23 Feb 2025 20:06:06 +0000 (20:06 +0000)] 
Fix GCC v13 LTO build [-Walloc-size-larger-than=] (#1929)

    store/Disks.cc:690: error: argument 1 value 18446744073709551615
        exceeds maximum object size 9223372036854775807
        [-Werror=alloc-size-larger-than=]
    const auto tmp = new SwapDir::Pointer[swap->n_allocated];

    pconn.cc:43:53: error: argument 1 value 18446744073709551615 ...
    theList_ = new Comm::ConnectionPointer[capacity_];

Tested on Ubuntu 24.04 and GCC v13.2.0.

9 months agoFix tls-dh support for DHE parameters with OpenSSL v3+ (#1949)
Andreas Weigel [Thu, 13 Mar 2025 11:30:28 +0000 (11:30 +0000)] 
Fix tls-dh support for DHE parameters with OpenSSL v3+ (#1949)

    # When applying tls-dh=prime256v1:dhparams.pem configuration:
    WARNING: Failed to decode EC parameters 'dhparams.pem'

    # When forcing the use of FFDHE with something like
    # openssl s_client -tls1_2 -cipher DHE-RSA-AES256-SHA256 -connect...
    ERROR: failure while accepting a TLS connection on:
        SQUID_TLS_ERR_ACCEPT+TLS_LIB_ERR=A0000C1+TLS_IO_ERR=1

Squid `https_port ... tls-dh=curve:dhparams.pem` configuration is
supposed to support _both_ ECDHE and FFDHE key exchange mechanisms (and
their cipher suites), depending on client-supported cipher suites. ECDHE
mechanism should use the named curve (e.g., `prime256v1`), and FFDHE
mechanism should use key exchange parameters loaded from the named PEM
file (e.g., `ffdhe4096` named group specified in RFC 7919).

When 2022 commit 742236c added support for OpenSSL v3 APIs, new
loadDhParams() code misinterpreted curve name presence in `tls-dh` value
as an indication that the named parameters file contains ECDHE
parameters, setting OSSL_DECODER_CTX_new_for_pkey() type parameter to
"EC", and (when parameter file specified FFDHE details) triggering the
WARNING message quoted above.

Squid should not expect additional ECDHE parameters when the elliptic
curve group is already fully specified by naming it at the start of
`tls-dh` value. Squid now reverts to earlier (v4) behavior, where
the two mechanisms can coexist and can be configured separately as
described above:

    $ openssl s_client -tls1_2 -cipher DHE-RSA-AES256-SHA256 -connect...
    Server Temp Key: DH, 4096 bits

    $ openssl s_client -connect...
    Server Temp Key: ECDH, prime256v1, 256 bits

Furthermore, updateContextEecdh() code in commit 742236c continued  to
load parsed parameters using old SSL_CTX_set_tmp_dh() call but should
have used SSL_CTX_set0_tmp_dh_pkey() API because the type of parsed
parameters (i.e. DhePointer) have changed from DH to EVP_PKEY pointer.
This second bug affected configurations with and without an explicit
curve name in `tls-dh` value.

Also report a failure to load parsed parameters into TLS context.

9 months agoNoNewGlobals for cbdata_htable (#1991)
Eduard Bagdasaryan [Wed, 5 Feb 2025 12:58:59 +0000 (12:58 +0000)] 
NoNewGlobals for cbdata_htable (#1991)

This fix also reduces memory leak false positives
reported by Valgrind.

9 months agoCI: Do not classify "no failures" stats as test-build errors (#2001)
Francesco Chemolli [Mon, 24 Feb 2025 19:01:52 +0000 (19:01 +0000)] 
CI: Do not classify "no failures" stats as test-build errors (#2001)

CppUnit tests emit a lot of "FAIL: 0" and "XFAIL: 0" lines, which are
incorrectly classified as errors by the test-builds.sh. Filter these
messages out as they are not indicative of problems.

9 months agoMinGW: use nameless unions in ext_ad_group_acl (#2004)
Francesco Chemolli [Tue, 4 Mar 2025 15:15:06 +0000 (15:15 +0000)] 
MinGW: use nameless unions in ext_ad_group_acl (#2004)

ext_ad_group_acl was written in 2008 in C, and
it used the C variant of the Win32 API.
It was then ported to C++, but the API callers were
not updated to the C++ version of the API.
With more modern compilers, and
Squid enforcing more strict types and error handling,
it is no longer compiling.

This is part 1 of 2 of the fixes to make the helper build
again, the scope is to update Win32 API callers so they
use the C++ version of the API

Examples of fixed errors:

    error: 'IADs' {aka 'struct IADs'} has no member named 'lpVtbl'
    error: 'VARIANT' {aka 'struct tagVARIANT'} has no member named 'n1'