]> git.ipfire.org Git - thirdparty/squid.git/log
thirdparty/squid.git
10 years agoRefactored and probably sped up ServerBio reading.
Alex Rousskov [Wed, 13 Apr 2016 05:40:24 +0000 (23:40 -0600)] 
Refactored and probably sped up ServerBio reading.

I could not grok the logic of the ServerBio::read*() methods and
saw strange cache.log message sequences like this:

  | bio.cc(121) read: FD 13 read -1 <= 65535
  | bio.cc(126) read: error: 11 ignored: 1
  | bio.cc(139) readAndBuffer: read -1 bytes
  | bio.cc(266) read: Pass 5 bytes to openSSL as read
  | bio.cc(121) read: FD 13 read -1 <= 65535
  | bio.cc(126) read: error: 11 ignored: 1
  | bio.cc(139) readAndBuffer: read -1 bytes
  | bio.cc(266) read: Pass 4 bytes to openSSL as read

Initially, they looked like we were [incorrectly] subtracting -1 from
some buffer length (read -1, pass 5; read -1, pass 4). Now, I believe
they [just] indicated unnecessary network reads. The fixed sequence
looks similar to this (note no network reads):

  | bio.cc(289) giveBuffered: Pass 5 read bytes to openSSL
  | bio.cc(289) giveBuffered: Pass 4 read bytes to openSSL

The refactored ServerBio code starts in "parsing" state (SSL Hello
parsing is the primary ServerBio functionality). Only when that parsing
is over, ServerBio starts feeding OpenSSL with received bytes. This
internal logic allows us to hide parsing from callers and avoid the
confusing public holdRead API.

10 years agoThe "hold write" conditions are not important enough for debug level 1.
Alex Rousskov [Wed, 13 Apr 2016 05:36:05 +0000 (23:36 -0600)] 
The "hold write" conditions are not important enough for debug level 1.

... and are already reported at lower levels in ServerBio.

I was getting one of this messages for every(?) transaction in Polygraph
tests.

10 years agoFixed SSL server Hello parsing.
Alex Rousskov [Tue, 12 Apr 2016 18:28:03 +0000 (12:28 -0600)] 
Fixed SSL server Hello parsing.

We must parse cipher and compression method before extensions.

Also fixed extensions detection to match RFC 5246 algorithm.

10 years agoSourceFormat Enforcement
Source Maintenance [Tue, 12 Apr 2016 18:12:15 +0000 (18:12 +0000)] 
SourceFormat Enforcement

10 years agoBug 4492: Handle SP padded size in chunked encoding
Amos Jeffries [Tue, 12 Apr 2016 15:07:13 +0000 (03:07 +1200)] 
Bug 4492: Handle SP padded size in chunked encoding

10 years agoRemoved ServerOptions "partial copy" copy constructor.
Alex Rousskov [Mon, 11 Apr 2016 16:34:29 +0000 (10:34 -0600)] 
Removed ServerOptions "partial copy" copy constructor.

AFAICT, the default copy constructor should work and the removed
explicit constructor was not copying the staticContext member, for no
documented reason (that I could find). It was also unused [in my tests].

If the partial copy constructor was abused for something useful, then a
different approach should be found -- the one that does not violate the
standard copy constructor post-conditions.

10 years agoAvoid startup/shutdown crashes [by avoiding static non-POD globals].
Alex Rousskov [Mon, 11 Apr 2016 15:14:58 +0000 (09:14 -0600)] 
Avoid startup/shutdown crashes [by avoiding static non-POD globals].

Squid crashes on startup when the parent process exit()s after fork()ing
the kid process. Squid may also crash on shutdown after exiting main().

In both cases, the crashes are build- and environment-specific. Many
environments show no problems at all. Even disabling compiler
optimizations may prevent crashes. When crashes do happen, their
symptoms (e.g., backtrace) point to problems during destruction of
global objects, but the details point to innocent objects (e.g., PortCfg
or SSL_CTX).

In some environments, the following malloc error is printed on console
before the crash: "corrupted double-linked list".

This change replaces two StatHist globals used for SBuf statistics
collection with always-available singletons. The replaced globals could
be destructed before the last SBuf object using them, leading to memory
corruption (that would eventually crash Squid).

There are probably more such globals.

10 years agoAdd a new error page token for unquoted external ACL messages.
Nathan Hoad [Sun, 10 Apr 2016 04:31:51 +0000 (16:31 +1200)] 
Add a new error page token for unquoted external ACL messages.

This is useful for external ACLs that send back messages that contain
actual HTML.

This work is submitted on behalf of Bloomberg L.P.

10 years agoBug 4465: Header forgery detection leads to crash
Alex Rousskov [Sat, 9 Apr 2016 15:35:34 +0000 (03:35 +1200)] 
Bug 4465: Header forgery detection leads to crash

10 years agoRecord SSL client and SSL server details (supported TLS version/requested
Christos Tsantilas [Fri, 8 Apr 2016 10:58:07 +0000 (13:58 +0300)] 
Record SSL client and SSL server details (supported TLS version/requested
TLS version) for fast-sni branch

Currently the fast-SNI-peek branch does not parse SSL client hello in
Client-First and Server-First bumping modes. This patch always "peeks" the
SSL client hello message and apply the squid TLS parser for Client-First
and Server-First modes to.

Also this patch moves the code which retrieves SSL server details from
PeekingPeerConnector class to PeerConnector class t retrieve details  for all
SSL server side connections.

10 years agoFix shm_open error message after rev.14625
Amos Jeffries [Fri, 8 Apr 2016 07:35:47 +0000 (19:35 +1200)] 
Fix shm_open error message after rev.14625

10 years agoBug 4405: assertion failed: comm.cc:554: "Comm::IsConnOpen(conn)"
Christos Tsantilas [Thu, 7 Apr 2016 16:36:10 +0000 (19:36 +0300)] 
Bug 4405: assertion failed: comm.cc:554: "Comm::IsConnOpen(conn)"

 It is possible that the connection will be closed somewhere inside
"clientTunnelOnError" call, inside ConnStateData::fakeAConnectRequest which
is called by ConnStateData::clientTunnelOnError or inside spliceOnError()
while trying to splice(). In this case the callers should be informed to abort
imediatelly, but instead continues, and try to set timeout handler on closed
connection.

This patch:
  - Modify ConnStateData::fakeAConnectRequest and ConnStateData::splice methods     to return boolean and false on error.
  - Does not close the connection inside ConnStateData::fakeAConnectRequest but
    instead return false and allow callers to close the connection if required.

This is a Measurement Factory project

10 years agoBug 4481: varyEvaluateMatch: Oops. Not a Vary match on second attempt
Amos Jeffries [Thu, 7 Apr 2016 13:10:28 +0000 (01:10 +1200)] 
Bug 4481: varyEvaluateMatch: Oops. Not a Vary match on second attempt

10 years agoBug 4482: Solaris GCC 5.2 warning in src/ip/Intercept.cc
Carsten Grzemba [Thu, 7 Apr 2016 12:03:53 +0000 (00:03 +1200)] 
Bug 4482: Solaris GCC 5.2 warning in src/ip/Intercept.cc

10 years agoFix missing variable type after rev.14625
Amos Jeffries [Thu, 7 Apr 2016 11:12:09 +0000 (23:12 +1200)] 
Fix missing variable type after rev.14625

10 years agoFixed NotNode (!acl) naming: Terminate the name before strncat(name).
Alex Rousskov [Thu, 7 Apr 2016 00:08:06 +0000 (18:08 -0600)] 
Fixed NotNode (!acl) naming: Terminate the name before strncat(name).

The fix may reduce or even eliminate garbage in logged ACL names (at
least). The bug was exposed by valgrind's "Conditional jump or move
depends on uninitialised value(s)" error.

10 years agofix comment
Christos Tsantilas [Wed, 6 Apr 2016 19:31:38 +0000 (22:31 +0300)] 
fix comment

10 years agoCleanup and fixes
Christos Tsantilas [Wed, 6 Apr 2016 19:28:28 +0000 (22:28 +0300)] 
Cleanup and fixes

- remove uneeded members from classes
- Remove the TlsDetails object from ClientBio
- Enable SSL Server Hello parsing code
- remove uneeded code
- Fix bump client first and bump server first bumping modes

10 years agoBug 4483: ./configure garbles -Og option in CFLAGS
Carsten Grzemba [Wed, 6 Apr 2016 14:46:39 +0000 (02:46 +1200)] 
Bug 4483: ./configure garbles -Og option in CFLAGS

10 years agoauthor: Nathan Hoad <nathan@getoffmalawn.com>
Christos Tsantilas [Tue, 5 Apr 2016 09:43:47 +0000 (12:43 +0300)] 
author: Nathan Hoad <nathan@getoffmalawn.com>
Add chained certificates and signing certificate to peek-then-bumped connections.

The scenario this patch addresses is when Squid is configured with an
intermediate signing CA certificate, and clients have the root CA installed on
their machines. What happens is that the generated certificates come down with
an unknown issuer (the intermediate signing certificate), with no
intermediates, so they are rejected. By adding the configured certificate chain
as old client-first mode did, the intermediate and root certificates come down
as well, resulting in the issuer being identified and the connection being
established "securely".

This work is submitted on behalf of Bloomberg L.P.

10 years agoMerged from trunk rev.14625
Amos Jeffries [Tue, 5 Apr 2016 02:40:39 +0000 (14:40 +1200)] 
Merged from trunk rev.14625

10 years agoCleanup: remove xstrerror()
Amos Jeffries [Sun, 3 Apr 2016 23:41:58 +0000 (11:41 +1200)] 
Cleanup: remove xstrerror()

10 years ago4.0.8 SQUID_4_0_8
Amos Jeffries [Fri, 1 Apr 2016 21:03:15 +0000 (10:03 +1300)] 
4.0.8

10 years agoPrep for 4.0.8 and 3.5.16
Amos Jeffries [Fri, 1 Apr 2016 20:56:46 +0000 (09:56 +1300)] 
Prep for 4.0.8 and 3.5.16

10 years agoDocs: release notes for shared_memory_locking
Amos Jeffries [Fri, 1 Apr 2016 20:23:56 +0000 (09:23 +1300)] 
Docs: release notes for shared_memory_locking

10 years agoSourceFormat Enforcement
Source Maintenance [Fri, 1 Apr 2016 18:12:14 +0000 (18:12 +0000)] 
SourceFormat Enforcement

10 years agoAdd reply_header_add directive
Nathan Hoad [Fri, 1 Apr 2016 17:54:10 +0000 (06:54 +1300)] 
Add reply_header_add directive

... for adding HTTP headers to reply objects as they are sent to the client.

 This work is submitted on behalf of Bloomberg L.P.

10 years agoDocs: release notes for server_pconn_for_nonretriable
Amos Jeffries [Fri, 1 Apr 2016 01:46:41 +0000 (14:46 +1300)] 
Docs: release notes for server_pconn_for_nonretriable

10 years agoDocs: release notes for collapsed_forwarding_shared_entries_limit
Amos Jeffries [Fri, 1 Apr 2016 01:42:36 +0000 (14:42 +1300)] 
Docs: release notes for collapsed_forwarding_shared_entries_limit

10 years agoBug 4438 pt2: Fix destructor sequence issues in old memory pools (partial)
Amos Jeffries [Fri, 1 Apr 2016 01:00:02 +0000 (14:00 +1300)] 
Bug 4438 pt2: Fix destructor sequence issues in old memory pools (partial)

10 years agoDo not expose TidyPointer internals. No functionality changes intended.
Alex Rousskov [Thu, 31 Mar 2016 23:33:45 +0000 (17:33 -0600)] 
Do not expose TidyPointer internals. No functionality changes intended.

10 years agoFirst fast-sni implementation
Christos Tsantilas [Thu, 31 Mar 2016 18:37:15 +0000 (21:37 +0300)] 
First fast-sni implementation

Squid parses incomming client SSL hello mesage, before create any openSSL
related structures and objects. After acl check at bumping step2.
Actually creating openSSL objects for client side still can be delayed
untill the server side is finishes. The only reason to create openSSL
structures imediatelly after step2 is to use openSSL to check for unsupported
comunications features and settings and fallback to spliceOnError.

Regression:
  Squid does not parses client Hello message in the case of bump-server-first
  and bump-client-first.
  The supported and requested SSL versions (i %ssl::>received_supported_version
  and %ssl::>received_hello_version formating codes ) can not be logged for
  these modes.

The code still needs cleanup.

10 years agoCacheManager::GetInstance should be static not local
Amos Jeffries [Thu, 31 Mar 2016 15:36:10 +0000 (04:36 +1300)] 
CacheManager::GetInstance should be static not local

10 years agoMark GetPool() for removal
Amos Jeffries [Thu, 31 Mar 2016 10:02:08 +0000 (23:02 +1300)] 
Mark GetPool() for removal

10 years agoMake CacheManager::GetInstance() work during early global initialization
Amos Jeffries [Wed, 30 Mar 2016 16:15:57 +0000 (05:15 +1300)] 
Make CacheManager::GetInstance() work during early global initialization

10 years agoSimplify MemPools::GetInstance()
Alex Rousskov [Wed, 30 Mar 2016 16:15:28 +0000 (05:15 +1300)] 
Simplify MemPools::GetInstance()

10 years agoBug 4312: Support disabling collapsed forwarding SMP cooperation
Dave Dykstra [Wed, 30 Mar 2016 11:55:02 +0000 (00:55 +1300)] 
Bug 4312: Support disabling collapsed forwarding SMP cooperation

10 years agoImprove TLS/SSL parsing code in Handshale.cc and use it inside bio.cc for client
Christos Tsantilas [Tue, 29 Mar 2016 19:17:34 +0000 (22:17 +0300)] 
Improve TLS/SSL parsing code in Handshale.cc and use it inside bio.cc for client
and server messages

  - full implementation for TLS and SSLv2 parsers inside Handshake.cc/h files
  - remove parsing code from bio.cc
  - Store parsed info in new Security::TlsDetails struct and remove the
    Ssl::sslFeatures class
  - improve SSLv2 parsing code.

10 years agoCleanup: Automatically remove duplicated #include lines.
Alex Rousskov [Tue, 29 Mar 2016 16:58:12 +0000 (10:58 -0600)] 
Cleanup: Automatically remove duplicated #include lines.

10 years agopinger: drop capabilities on Linux
Yuriy M. Kaminskiy [Tue, 29 Mar 2016 16:56:38 +0000 (05:56 +1300)] 
pinger: drop capabilities on Linux

On linux, it is possible to install pinger helper with only CAP_NET_RAW
raised instead of full setuid-root:

 (setcap cap_net_raw+ep /path/to/pinger && chmod u-s /path/to/pinger) || :

However, pinger only drops setuid/setgid, and won't drop capabilities
after sockets are opened (when it is setuid-root, setuid(getuid()) also
drops capabilities, no code changes necessary; however, if it is only
setcap'ed, setuid() is no-op).

Fix is minimally tested, seems to work fine with both/either `setcap`
and `chmod u+s`; non-linux/non-libcap configurations should not be
affected).

* Also fixes errno debug outputs.

10 years agoMerged from trunk rev.14612
Amos Jeffries [Tue, 29 Mar 2016 16:11:58 +0000 (05:11 +1300)] 
Merged from trunk rev.14612

10 years agoBug 4409 pt2: Fix krb5-config Heimdal detection
Amos Jeffries [Tue, 29 Mar 2016 15:23:51 +0000 (04:23 +1300)] 
Bug 4409 pt2: Fix krb5-config Heimdal detection

10 years agoRemoved duplicated #include line.
Alex Rousskov [Tue, 29 Mar 2016 14:46:57 +0000 (08:46 -0600)] 
Removed duplicated #include line.

10 years agoReturn a reference from GetStrPool()
Amos Jeffries [Tue, 29 Mar 2016 09:53:45 +0000 (22:53 +1300)] 
Return a reference from GetStrPool()

10 years agoRemove memPoolInUseCount() wrapper
Amos Jeffries [Tue, 29 Mar 2016 08:00:44 +0000 (21:00 +1300)] 
Remove memPoolInUseCount() wrapper

10 years agoUse Mem::Init() to initialize for GetPool()
Amos Jeffries [Tue, 29 Mar 2016 07:58:21 +0000 (20:58 +1300)] 
Use Mem::Init() to initialize for GetPool()

10 years agopinger: Fix select(2) to actually use max_fd
Yuriy M. Kaminskiy [Mon, 28 Mar 2016 23:06:36 +0000 (12:06 +1300)] 
pinger: Fix select(2) to actually use max_fd

10 years agopinger: Fix buffer overflow in Icmp6::Recv
Yuriy M. Kaminskiy [Mon, 28 Mar 2016 22:52:58 +0000 (11:52 +1300)] 
pinger: Fix buffer overflow in Icmp6::Recv

10 years agoFix MemPools::GetInstance() potential destruct sequence
Amos Jeffries [Mon, 28 Mar 2016 22:14:41 +0000 (11:14 +1300)] 
Fix MemPools::GetInstance() potential destruct sequence

10 years agoFirst implementation for parsing SSLv2/v3 handshake messages and extracing SSL features
Christos Tsantilas [Sun, 27 Mar 2016 17:36:18 +0000 (20:36 +0300)] 
First implementation for parsing SSLv2/v3 handshake messages and extracing SSL features

10 years agoFix build issue in X-Accelerator-Vary
Amos Jeffries [Fri, 25 Mar 2016 21:03:30 +0000 (10:03 +1300)] 
Fix build issue in X-Accelerator-Vary

10 years agoConvert Vary handling to SBuf
Amos Jeffries [Fri, 25 Mar 2016 20:11:29 +0000 (09:11 +1300)] 
Convert Vary handling to SBuf

10 years agoDocs: update SPONSORS list
Amos Jeffries [Fri, 25 Mar 2016 13:06:34 +0000 (02:06 +1300)] 
Docs: update SPONSORS list

10 years agoFix memory leak of AccessLogentry::url
Nathan Hoad [Fri, 25 Mar 2016 13:03:30 +0000 (02:03 +1300)] 
Fix memory leak of AccessLogentry::url

 ... created by ACLFilledChecklist::syncAle().

::syncAle() is the only place in the codebase that assigns a URL that
AccessLogEntry is expected to free(), which AccessLogEntry doesn't do.
This results in a memory leak.

  This is submitted on behalf of Bloomberg L.P.

10 years agoBug 4438: SIGSEGV in memFreeString() destructing SBuf globals on shutdown/restart
Amos Jeffries [Fri, 25 Mar 2016 12:55:30 +0000 (01:55 +1300)] 
Bug 4438: SIGSEGV in memFreeString() destructing SBuf globals on shutdown/restart

10 years agoAdded shared_memory_locking configuration directive to control mlock(2).
Alex Rousskov [Thu, 24 Mar 2016 17:02:25 +0000 (11:02 -0600)] 
Added shared_memory_locking configuration directive to control mlock(2).

Locking shared memory at startup avoids SIGBUS crashes when kernel runs
out of RAM during runtime. Why not enable it by default? Unfortunately,
locking requires privileges and/or much-higher-than-default
RLIMIT_MEMLOCK limits. Thus, requiring locked memory by default is
likely to cause too many complaints, especially since Squid has not
required that before. The default is off, at least for now.

As we gain more experience, we may try to enable locking by default
while making default locking failures non-fatal and warning about
significant [accumulated] locking delays.

10 years agoReduce scope of MemIsInitialized
Amos Jeffries [Thu, 24 Mar 2016 10:12:23 +0000 (23:12 +1300)] 
Reduce scope of MemIsInitialized

10 years agoRemove useless SmallestStringBeforeMemIsInitialized
Amos Jeffries [Thu, 24 Mar 2016 09:18:33 +0000 (22:18 +1300)] 
Remove useless SmallestStringBeforeMemIsInitialized

10 years agoFully initialize string pools in GetStrPool()
Amos Jeffries [Thu, 24 Mar 2016 09:17:05 +0000 (22:17 +1300)] 
Fully initialize string pools in GetStrPool()

10 years agoAdd memFindStringSizeType() to simplify looking up a string pool
Amos Jeffries [Thu, 24 Mar 2016 08:35:05 +0000 (21:35 +1300)] 
Add memFindStringSizeType() to simplify looking up a string pool

10 years agoPolish: rename getStrPool to GetStrPool in coding guidelines
Amos Jeffries [Wed, 23 Mar 2016 18:19:39 +0000 (07:19 +1300)] 
Polish: rename getStrPool to GetStrPool in coding guidelines

10 years agoPolish: rename getPool to GetPool in coding guidelines
Amos Jeffries [Wed, 23 Mar 2016 18:15:24 +0000 (07:15 +1300)] 
Polish: rename getPool to GetPool in coding guidelines

10 years agoRemove unused static in old_api.cc
Francesco Chemolli [Wed, 23 Mar 2016 18:10:47 +0000 (19:10 +0100)] 
Remove unused static in old_api.cc

10 years agoRework string pools into accessor toe ensure initializaiton safety
Francesco Chemolli [Wed, 23 Mar 2016 17:56:24 +0000 (18:56 +0100)] 
Rework string pools into accessor toe ensure initializaiton safety

10 years agoconvert old_api.cc:MemPools to accessor method to ensure initialization order
Francesco Chemolli [Wed, 23 Mar 2016 17:43:07 +0000 (18:43 +0100)] 
convert old_api.cc:MemPools to accessor method to ensure initialization order

10 years agoMemPools::init is not implemented except in stubs
Francesco Chemolli [Wed, 23 Mar 2016 16:29:47 +0000 (17:29 +0100)] 
MemPools::init is not implemented except in stubs

10 years agoBring MemPools::instance as a static variable in GetInstance() to force initializatio...
Francesco Chemolli [Wed, 23 Mar 2016 11:36:59 +0000 (12:36 +0100)] 
Bring MemPools::instance as a static variable in GetInstance() to force initialization order

10 years agoFixed build broken by r14601: Use trunk, not v3.5 ID for Cache-Control.
Alex Rousskov [Mon, 21 Mar 2016 04:48:44 +0000 (22:48 -0600)] 
Fixed build broken by r14601: Use trunk, not v3.5 ID for Cache-Control.

10 years agoBug 2831: Cache-control: max-age not sent on TCP_IMS_HIT/304
Dave Dykstra [Sun, 20 Mar 2016 16:20:28 +0000 (05:20 +1300)] 
Bug 2831: Cache-control: max-age not sent on TCP_IMS_HIT/304

10 years agoBug 4452: squid -z segfaults with ufs
Marcos Mello [Sun, 20 Mar 2016 12:00:54 +0000 (00:00 +1200)] 
Bug 4452: squid -z segfaults with ufs

10 years agoTests: remove GnuTLS from layer-02-maximus again
Amos Jeffries [Sun, 20 Mar 2016 11:49:15 +0000 (23:49 +1200)] 
Tests: remove GnuTLS from layer-02-maximus again

10 years agofix SrvBio::serverCertificates call now called SrvBio::serverCertificatesIfAny
Christos Tsantilas [Sat, 19 Mar 2016 19:35:42 +0000 (21:35 +0200)] 
fix SrvBio::serverCertificates call now called SrvBio::serverCertificatesIfAny

10 years agorequired fixes to PeerConnector to work with Ssl::ServerBio fixes
Christos Tsantilas [Sat, 19 Mar 2016 19:31:06 +0000 (21:31 +0200)] 
required fixes to PeerConnector to work with Ssl::ServerBio fixes

10 years agomerge new SSL messages parser from lp:fetch-cert branch
Christos Tsantilas [Sat, 19 Mar 2016 19:21:44 +0000 (21:21 +0200)] 
merge new SSL messages parser from lp:fetch-cert branch

10 years agoadd forgotten Handshake.{cc,h} files
Christos Tsantilas [Sat, 19 Mar 2016 19:07:09 +0000 (21:07 +0200)] 
add forgotten Handshake.{cc,h} files

10 years agoMove BinaryTokenizer, Ssl::HandshakeParser and Ssl::Rfc5246::* classes to
Christos Tsantilas [Sat, 19 Mar 2016 18:24:53 +0000 (20:24 +0200)] 
Move BinaryTokenizer, Ssl::HandshakeParser and Ssl::Rfc5246::* classes to
their own *.cc,*.h files

-Move the BinaryTokenizer from ssl/bio.* files to parser/BinaryTokenizer.{cc,h}
-Move the Ssl::Handshake and related structures and declarations from ssl/bio.*
 to security/Handshake.{c,h}, and under the   Security namespace
 (Security::Handshake)
-Move the Ssl::Rfc5246::* classes from ssl/bio.* to security/Handshake.{c,h},
 under the Security namespace.

10 years agoTests: update test suite for GnuTLS
Amos Jeffries [Sat, 19 Mar 2016 12:52:42 +0000 (01:52 +1300)] 
Tests: update test suite for GnuTLS

10 years agomerge from trunk r14597
Christos Tsantilas [Fri, 18 Mar 2016 18:00:56 +0000 (20:00 +0200)] 
merge from trunk r14597

10 years agomerge from trunk r14590
Christos Tsantilas [Fri, 18 Mar 2016 17:42:31 +0000 (19:42 +0200)] 
merge from trunk r14590

10 years agoBug 4423: adding stdio: prefix to cache_log directive produces FATAL error
Amos Jeffries [Fri, 18 Mar 2016 12:05:14 +0000 (01:05 +1300)] 
Bug 4423: adding stdio: prefix to cache_log directive produces FATAL error

10 years agominor polishing fixes
Christos Tsantilas [Fri, 18 Mar 2016 11:19:44 +0000 (13:19 +0200)] 
minor polishing fixes

10 years agoBug 4459: move ssl_db into /var/cache/squid/
Marcos Mello [Fri, 18 Mar 2016 09:38:10 +0000 (22:38 +1300)] 
Bug 4459: move ssl_db into /var/cache/squid/

* auto-generates the man(8) page for this helper.

* moves the shared Makefile variables to Common.am

* updates the heper documentation to use the builds actual
  installed paths instead of hard-coding standard paths

10 years agoBug 4459: FHS compliance: move netdb.state to /var/cache/squid
Amos Jeffries [Fri, 18 Mar 2016 07:36:45 +0000 (20:36 +1300)] 
Bug 4459: FHS compliance: move netdb.state to /var/cache/squid

10 years agoCleanup: de-duplicate HttpRequest CreateFromUrl functions
Amos Jeffries [Thu, 17 Mar 2016 03:28:14 +0000 (16:28 +1300)] 
Cleanup: de-duplicate HttpRequest CreateFromUrl functions

10 years agoSourceFormat Enforcement
Source Maintenance [Tue, 15 Mar 2016 18:12:09 +0000 (18:12 +0000)] 
SourceFormat Enforcement

10 years agoassertion failed: Write.cc:41: "!ccb->active()"
Christos Tsantilas [Tue, 15 Mar 2016 12:43:09 +0000 (14:43 +0200)] 
assertion failed: Write.cc:41: "!ccb->active()"

Bug description:
   - The client side and server side are finished
   - On server side the Ftp::Relay::finalizeDataDownload() is called and
     schedules the Ftp::Server::originDataCompletionCheckpoint
   - On client side the "Ftp::Server::userDataCompletionCheckpoint" is
     called. This is schedules a write to control connection and closes
     data connection.
   - The Ftp::Server::originDataCompletionCheckpoint is called which is
     trying to write to control connection and the assertion triggered.

This bug is an corner case, where the client-side  (FTP::Server) should
wait for the server side (Ftp::Client/Ftp::Relay) to finish its job before
respond to the FTP client. In this bug the existing mechanism, designed
to handle such problems, did not worked correctly and resulted to a double
write response to the client.

This patch try to fix the existing mechanism as follows:

- When Ftp::Server receives a "startWaitingForOrigin" callback, postpones
  writting possible responses to the client and keeps waiting for the
  stopWaitingForOrigin callback

- When the Ftp::Server receives a "stopWaitingForOrigin" callback,
  resumes any postponed response.

- When the Ftp::Client starts working on a DATA-related transaction, calls the
  Ftp::Server::startWaitingForOrigin callback

- When the Ftp::Client finishes its job or when its abort abnormaly, checks
  whether it needs to call Ftp::Server::stopWaitingForOrigin callback.

- Also this patch try to fix the status code returned to the FTP client
  taking in account the status code returned by FTP server. The
  "Ftp::Server::stopWaitingForOrigin" is used to pass the returned status code
  to the client side.

This is a Measurement Factory project

10 years agoBug 4458: Squid 4 behaviour change with external ACL arguments
Amos Jeffries [Tue, 15 Mar 2016 06:22:49 +0000 (19:22 +1300)] 
Bug 4458: Squid 4 behaviour change with external ACL arguments

10 years agoDetect when a child method declaration hides parent's virtual method.
Alex Rousskov [Sun, 13 Mar 2016 04:47:19 +0000 (21:47 -0700)] 
Detect when a child method declaration hides parent's virtual method.

Adding -Woverloaded-virtual exposed one problem in the existing code.

10 years agoAuthor: Eduard Bagdasaryan <eduard.bagdasaryan@measurement-factory.com>
Eduard Bagdasaryan [Sat, 12 Mar 2016 20:27:35 +0000 (13:27 -0700)] 
Author: Eduard Bagdasaryan <eduard.bagdasaryan@measurement-factory.com>
Added ACL-driven server_pconn_for_nonretriable squid.conf directive.

This directive provides fine-grained control over persistent connection
reuse when forwarding HTTP requests that Squid cannot retry. It is
useful in environments where opening new connections is very expensive
and race conditions associated with persistent connections are very rare
and/or only cause minor problems.

10 years agoTrying to avoid "looser throw specifier" error with Wheezy GCC.
Alex Rousskov [Sat, 12 Mar 2016 18:40:29 +0000 (11:40 -0700)] 
Trying to avoid "looser throw specifier" error with Wheezy GCC.

AFAICT, the default CbdataParent destructor gets implicit
"noexcept(true)" specifier (because the default destructor does not
throw itself, and CbdataParent has no data members or parents that could
have contributed potentially throwing destructors). The AsyncJob child
uses a lot of things that might throw during destruction (the compiler
cannot tell for sure because we do not use noexcept specifiers). Thus,
the compiler has to use "noexcept(false)" specifier for ~AsyncJob, which
is "looser" that "noexcept(true)" for ~CbdataParent and, hence, violates
the parent interface AsyncJob is implementing/overriding.

I have doubts about the above analysis because many other compilers,
including GCC v5 and clang are happy with the default virtual
CbdataParent destructor. If my analysis is correct, then the rule of
thumb is: Base classes must not use "= default" destructors until all
our implicit destructors become "noexcept".

10 years agoImprove class declaration consistency a bit. No functionality changes.
Alex Rousskov [Sat, 12 Mar 2016 06:16:09 +0000 (23:16 -0700)] 
Improve class declaration consistency a bit. No functionality changes.

10 years agoUse CBDATA_CHILD() instead of CBDATA_CLASS() to mark overridden methods.
Alex Rousskov [Sat, 12 Mar 2016 06:04:03 +0000 (23:04 -0700)] 
Use CBDATA_CHILD() instead of CBDATA_CLASS() to mark overridden methods.

TODO: If this works across the build farm, convert other AsyncJob kids.

10 years agoFixed clang -Winconsistent-missing-override warning.
Alex Rousskov [Sat, 12 Mar 2016 05:01:46 +0000 (22:01 -0700)] 
Fixed clang -Winconsistent-missing-override warning.

AsyncJob classes can now use C++11 overrides as long as they use the new
CBDATA_CHILD() macro instead of old CBDATA_CLASS().

I have prohibited multiple CBDATA_CHILD() classes on the same
inheritance branch by adding the "final" specifier to toCbdata(). Such
classes feel dangerous because they may have different sizes and it is
not obvious to me whether the cbdata code will call the right size-
specific delete for them. We can easily relax this later if needed.

10 years agoBug 7: Update cached entries on 304 responses.
Alex Rousskov [Fri, 11 Mar 2016 18:00:51 +0000 (11:00 -0700)] 
Bug 7: Update cached entries on 304 responses.

New Store API to update entry metadata and headers on 304s.
Support entry updates in shared memory cache and rock cache_dirs.
No changes to ufs-based cache_dirs: Their entries are still not updated.

* Atomic StoreEntry metadata updating

   StoreEntry metadata (swap_file_sz, timestamps, etc.) is used
   throughout Squid code. Metadata cannot be updated atomically because
   it has many fields, but a partial update to those fields causes
   assertions. Still, we must update metadata when updating HTTP
   headers. Locking the entire entry for a rewrite does not work well
   because concurrent requests will attempt to download a new entry
   copy, defeating the very HTTP 304 optimization we want to support.

   Ipc::StoreMap index now uses an extra level of indirection (the
   StoreMap::fileNos index) which allows StoreMap control which
   anchor/fileno is associated with a given StoreEntry key. The entry
   updating code creates a disassociated (i.e., entry/key-less) anchor,
   writes new metadata and headers using that new anchor, and then
   _atomically_ switches the map to use that new anchor. This allows old
   readers to continue reading using the stale anchor/fileno as if
   nothing happened while a new reader gets the new anchor/fileno.

   Shared memory usage increase: 8 additional bytes per cache entry: 4
   for the extra level of indirection (StoreMapFileNos) plus 4 for
   splicing fresh chain prefix with the stale chain suffix
   (StoreMapAnchor::splicingPoint). However, if the updated headers are
   larger than the stale ones, Squid will allocate shared memory pages
   to accommodate for the increase, leading to shared memory
   fragmentation/waste for small increases.

* Revamped rock index rebuild process

   The index rebuild process had to be completely revamped because
   splicing fresh and stale entry slot chain segments implies tolerating
   multiple entry versions in a single chain and the old code was based
   on the assumption that different slot versions are incompatible. We
   were also uncomfortable with the old cavalier approach to accessing
   two differently indexed layers of information (entry vs. slot) using
   the same set of class fields, making it trivial to accidentally
   access entry data while using slot index.

   During the rewrite of the index rebuilding code, we also discovered a
   way to significantly reduce RAM usage for the index build map (a
   temporary object that is allocated in the beginning and freed at the
   end of the index build process). The savings depend on the cache
   size: A small cache saves about 30% (17 vs 24 bytes per entry/slot)
   while a 1TB cache_dir with 32KB slots (which implies uneven
   entry/slot indexes) saves more than 50% (~370MB vs. ~800MB).

   Adjusted how invalid slots are counted. The code was sometimes
   counting invalid entries and sometimes invalid entry slots. We should
   always count _slots_ now because progress is measured in the number
   of slots scanned, not entries loaded. This accounting change may
   surprise users with much higher "Invalid entries" count in cache.log
   upon startup, but at least the new reports are meaningful.

   This rewrite does not attempt to solve all rock index build problems.
   For example, the code still assumes that StoreEntry metadata fits a
   single slot which is not always true for very small slots.

10 years agoDocumented some of the Packable API problems.
Alex Rousskov [Fri, 11 Mar 2016 17:53:26 +0000 (10:53 -0700)] 
Documented some of the Packable API problems.

10 years agoDo not prohibit updating Last-Modified on 304 responses.
Alex Rousskov [Fri, 11 Mar 2016 17:52:03 +0000 (10:52 -0700)] 
Do not prohibit updating Last-Modified on 304 responses.

RFC 7232 Section 4.1 says sending Last-Modified in 304 might be useful
and RFC 7234 Section 4.3.3 requires updating all non-Warning headers.

10 years agoAdded missing const qualifiers to HTTP message packing methods.
Alex Rousskov [Fri, 11 Mar 2016 17:48:57 +0000 (10:48 -0700)] 
Added missing const qualifiers to HTTP message packing methods.

10 years agoRemoved SWAPOUT_WRITING assertion from storeSwapMetaBuild().
Alex Rousskov [Fri, 11 Mar 2016 17:24:13 +0000 (10:24 -0700)] 
Removed SWAPOUT_WRITING assertion from storeSwapMetaBuild().

I do not see any strong dependency of that code on that state and we
need to be able to build swap metadata when updating a stale entry
(which would not normally be in the SWAPOUT_WRITING state).

The biggest danger is that somebody calls storeSwapMetaBuild() when the
entry metadata is not yet stable. I am not sure we have a way of
detecting that without using something as overly strong as
SWAPOUT_WRITING.

10 years agoFix memory leak of lastAclData
Nathan Hoad [Fri, 11 Mar 2016 15:03:20 +0000 (04:03 +1300)] 
Fix memory leak of lastAclData

10 years agoCleanup: improved EUI debugging
Amos Jeffries [Thu, 10 Mar 2016 14:46:28 +0000 (03:46 +1300)] 
Cleanup: improved EUI debugging