]> git.ipfire.org Git - thirdparty/squid.git/log
thirdparty/squid.git
9 years agoRemoved unused methods.
Alex Rousskov [Fri, 22 Apr 2016 17:11:54 +0000 (11:11 -0600)] 
Removed unused methods.

9 years agoFixed "make check".
Alex Rousskov [Fri, 22 Apr 2016 16:47:59 +0000 (10:47 -0600)] 
Fixed "make check".

9 years agoCode polishing. No functionality changes.
Alex Rousskov [Fri, 22 Apr 2016 05:17:07 +0000 (23:17 -0600)] 
Code polishing. No functionality changes.

9 years agoDo not allocate TlsDetails until throwing isSslv2Record() returns.
Alex Rousskov [Fri, 22 Apr 2016 04:51:24 +0000 (22:51 -0600)] 
Do not allocate TlsDetails until throwing isSslv2Record() returns.

If isSslv2Record() throws InsufficientInput, then we must re-parse these
first few bytes later. Nil details triggers that parsing.

9 years agoMerged two identical methods together. No functionality changes.
Alex Rousskov [Fri, 22 Apr 2016 03:48:37 +0000 (21:48 -0600)] 
Merged two identical methods together. No functionality changes.

9 years agoLack of data at EOF is a parsing error, not a "need more" condition.
Alex Rousskov [Fri, 22 Apr 2016 00:12:20 +0000 (18:12 -0600)] 
Lack of data at EOF is a parsing error, not a "need more" condition.

Branch changes did not distinguish "need more and can expect more" from
"need more but got everything" situations. When one of the inner parsers
that deal with "complete" buffers failed, it would throw
InsufficientInput exception and the higher level parsing code would
interpret that as a sign that more SSL records/fragments are needed,
resulting in stuck transactions instead of parsing errors.

Unlike parsing errors, stuck transactions cannot be bypassed or ignored
so the difference is important.

9 years agoFixed "unused variable" compilation error.
Alex Rousskov [Fri, 15 Apr 2016 18:03:53 +0000 (12:03 -0600)] 
Fixed "unused variable" compilation error.

9 years agoOptimization/simplification: Do not parse unused challenge in v2 Handshake.
Alex Rousskov [Fri, 15 Apr 2016 17:52:20 +0000 (11:52 -0600)] 
Optimization/simplification: Do not parse unused challenge in v2 Handshake.

Also removed pointless commit() and #if-0d code.

9 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.

9 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.

9 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.

9 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.

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

9 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

9 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.

9 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.

9 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

9 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

9 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

9 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

9 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

9 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

9 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

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

9 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

9 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

9 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.

9 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.

9 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".

9 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.

9 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.

9 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.

9 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.

9 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.

9 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.

9 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.

9 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.

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

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

9 years agoFix memory leak of HttpRequest objects
Nathan Hoad [Thu, 10 Mar 2016 06:55:17 +0000 (19:55 +1300)] 
Fix memory leak of HttpRequest objects

9 years agoCleanup: remove last goto in libsslsquid
Amos Jeffries [Mon, 7 Mar 2016 16:03:45 +0000 (05:03 +1300)] 
Cleanup: remove last goto in libsslsquid

9 years agoSquid crashes on shutdown while cleaning up idle ICAP connections.
Christos Tsantilas [Thu, 3 Mar 2016 00:49:45 +0000 (13:49 +1300)] 
Squid crashes on shutdown while cleaning up idle ICAP connections.

The global Adaptation::Icap::TheConfig object is automatically
destroyed when Squid exits. Its destructor destroys Icap::ServiceRep
objects that, in turn, close all open connections in the idle
connections pool. Since this happens after comm_exit has destroyed all
Comm structures associated with those connections, Squid crases.

This is a Measurement Factory project.

9 years agoImplement sbuf/forward.h and use it
Francesco Chemolli [Wed, 2 Mar 2016 09:47:11 +0000 (10:47 +0100)] 
Implement sbuf/forward.h and use it

9 years agoMake use of sbuf/forward.h
Francesco Chemolli [Tue, 1 Mar 2016 16:19:49 +0000 (17:19 +0100)] 
Make use of sbuf/forward.h

9 years agoSort sbuf/Makefile.am
Francesco Chemolli [Tue, 1 Mar 2016 15:52:09 +0000 (16:52 +0100)] 
Sort sbuf/Makefile.am

9 years agoadd sbuf/forward.h
Francesco Chemolli [Tue, 1 Mar 2016 15:51:56 +0000 (16:51 +0100)] 
add sbuf/forward.h

9 years agoRename files in sbuf/ to better adhere to standards
Francesco Chemolli [Tue, 1 Mar 2016 10:37:15 +0000 (11:37 +0100)] 
Rename files in sbuf/ to better adhere  to standards

9 years agoMerged from trunk
Francesco Chemolli [Tue, 1 Mar 2016 10:35:55 +0000 (11:35 +0100)] 
Merged from trunk

9 years agoSource maintenance
Francesco Chemolli [Tue, 1 Mar 2016 10:25:13 +0000 (11:25 +0100)] 
Source maintenance

9 years agoRename sbuf/SBufList and sbuf/SBufStream
Francesco Chemolli [Tue, 1 Mar 2016 09:58:44 +0000 (10:58 +0100)] 
Rename sbuf/SBufList and sbuf/SBufStream

9 years agoRFC 7725: Add registry entry for 451 status text
Amos Jeffries [Tue, 1 Mar 2016 02:57:50 +0000 (15:57 +1300)] 
RFC 7725: Add registry entry for 451 status text

While Squid does not generate these messages automatically we still have
to relay the status line text accurately, and admin may want to use it
for deny_info status.

9 years agoBug 4447:FwdState.cc:447 "serverConnection() == conn" assertion, part2
Christos Tsantilas [Mon, 29 Feb 2016 20:00:34 +0000 (22:00 +0200)] 
Bug 4447:FwdState.cc:447 "serverConnection() == conn" assertion, part2

Fix to allow make check  work again.

9 years agoBug 4447:FwdState.cc:447 "serverConnection() == conn" assertion
Christos Tsantilas [Mon, 29 Feb 2016 18:43:03 +0000 (20:43 +0200)] 
Bug 4447:FwdState.cc:447 "serverConnection() == conn" assertion

After certain failures, FwdState::retryOrBail() may be called twice,
once from FwdState::unregisterdServerEnd() [called from
HttpStateData::swanSong()] and once from the FwdState's own connection
close handler. This may result in two concurrent connections to the
remote server, followed by an assertion upon a connection closure.

This patch:

 - After HttpStateData failures, instead of closing the squid-to-peer
   connection directly (and, hence, triggering closure handlers), calls
   HttpStateData::closeServer() and mustStop() for a cleaner exit with
   fewer wasteful side effects and better debugging.

 - Creates and remembers a FwdState close handler AsyncCall so that
   comm_remove_close_handler() can cancel an already scheduled callback.
   The conversion to the AsyncCall was necessary because legacy [close
   handler callbacks] cannot be canceled once scheduled.

This is a Measurement Factory project.

9 years agoMerged from trunk
Francesco Chemolli [Mon, 29 Feb 2016 10:33:39 +0000 (11:33 +0100)] 
Merged from trunk

9 years agoRename some files in sbuf/ and apply include paths consistently
Francesco Chemolli [Mon, 29 Feb 2016 10:11:37 +0000 (11:11 +0100)] 
Rename some files in sbuf/ and apply include paths consistently

9 years agoSourceFormat Enforcement
Source Maintenance [Sun, 28 Feb 2016 12:12:11 +0000 (12:12 +0000)] 
SourceFormat Enforcement

9 years agoDocs: release notes update
Marcos Mello [Sun, 28 Feb 2016 11:03:39 +0000 (00:03 +1300)] 
Docs: release notes update

9 years agoCleanup: separate SBufStats from SBuf.h
Amos Jeffries [Sun, 28 Feb 2016 07:49:02 +0000 (20:49 +1300)] 
Cleanup: separate SBufStats from SBuf.h

9 years agoRemove most *_DEPENDENCIES clauses from src/Makefile.am, they are not necessary
Francesco Chemolli [Sat, 27 Feb 2016 09:26:00 +0000 (10:26 +0100)] 
Remove most *_DEPENDENCIES clauses from src/Makefile.am, they are not necessary

9 years agorename SBufStringConvert.h to StringConvert.h
Francesco Chemolli [Fri, 26 Feb 2016 16:45:24 +0000 (17:45 +0100)] 
rename SBufStringConvert.h to StringConvert.h

9 years agorenamed SBufExceptions to sbuf/Exceptions
Francesco Chemolli [Fri, 26 Feb 2016 16:36:24 +0000 (17:36 +0100)] 
renamed SBufExceptions to sbuf/Exceptions

9 years agorenamed SBufDetailedStats.h to sbuf/DetailedStats.h
Francesco Chemolli [Fri, 26 Feb 2016 15:53:52 +0000 (16:53 +0100)] 
renamed SBufDetailedStats.h to sbuf/DetailedStats.h

9 years agorenamed sbuf/SBufAlgos.h to sbuf/Algorithms.h
Francesco Chemolli [Fri, 26 Feb 2016 15:44:19 +0000 (16:44 +0100)] 
renamed sbuf/SBufAlgos.h to sbuf/Algorithms.h

9 years agoMerged from trunk
Francesco Chemolli [Fri, 26 Feb 2016 15:18:52 +0000 (16:18 +0100)] 
Merged from trunk

9 years agoSourceFormat Enforcement
Source Maintenance [Fri, 26 Feb 2016 00:11:57 +0000 (00:11 +0000)] 
SourceFormat Enforcement

9 years agoRefactor SBuf into own library and simplify link time dependencies
Francesco Chemolli [Thu, 25 Feb 2016 21:30:10 +0000 (22:30 +0100)] 
Refactor SBuf into own library and simplify link time dependencies

9 years agoImplement audit suggestions
Francesco Chemolli [Thu, 25 Feb 2016 18:01:29 +0000 (19:01 +0100)] 
Implement audit suggestions

9 years agoMerged from trunk
Francesco Chemolli [Thu, 25 Feb 2016 16:49:08 +0000 (17:49 +0100)] 
Merged from trunk

9 years agoavoid unnecessary SBuf copies
Francesco Chemolli [Thu, 25 Feb 2016 16:44:46 +0000 (17:44 +0100)] 
avoid unnecessary SBuf copies

9 years agoFix include paths in some unit tests
Francesco Chemolli [Thu, 25 Feb 2016 16:43:51 +0000 (17:43 +0100)] 
Fix include paths in some unit tests

9 years agoavoid unnecessary SBuf copies
Francesco Chemolli [Thu, 25 Feb 2016 16:43:21 +0000 (17:43 +0100)] 
avoid unnecessary SBuf copies

9 years agoImprove documentation
Francesco Chemolli [Thu, 25 Feb 2016 16:34:29 +0000 (17:34 +0100)] 
Improve documentation

9 years agoShuffle libbase in its proper order, fix formatting, remove some unneeded files
Francesco Chemolli [Thu, 25 Feb 2016 16:11:03 +0000 (17:11 +0100)] 
Shuffle libbase in its proper order, fix formatting, remove some unneeded files

9 years agoRemoved spurious file in libsbuf SOURCES
Francesco Chemolli [Thu, 25 Feb 2016 15:57:10 +0000 (16:57 +0100)] 
Removed spurious file in libsbuf SOURCES

9 years agoRemove some _DEPENDENCIES declarations for unit tests
Francesco Chemolli [Thu, 25 Feb 2016 15:50:26 +0000 (16:50 +0100)] 
Remove some _DEPENDENCIES declarations for unit tests

9 years agoRemoved unnecessary stubs from unit tests
Francesco Chemolli [Thu, 25 Feb 2016 14:59:21 +0000 (15:59 +0100)] 
Removed unnecessary stubs from unit tests

9 years agoRemoved unnecessary stubs from unit tests
Francesco Chemolli [Thu, 25 Feb 2016 13:18:24 +0000 (14:18 +0100)] 
Removed unnecessary stubs from unit tests

9 years agoBug 4450: wait() related cleanup
Marcos Mello [Thu, 25 Feb 2016 01:52:52 +0000 (14:52 +1300)] 
Bug 4450: wait() related cleanup

9 years agoDocs: release notes about process manager changes
Amos Jeffries [Thu, 25 Feb 2016 00:16:34 +0000 (13:16 +1300)] 
Docs: release notes about process manager changes

9 years agoBug 3826: Add --foreground option to fix -z process behaviour
Marcos Mello [Wed, 24 Feb 2016 23:55:48 +0000 (12:55 +1300)] 
Bug 3826: Add --foreground option to fix -z process behaviour

9 years agoMove SBuf<->String conversion to own header.
Francesco Chemolli [Wed, 24 Feb 2016 18:12:43 +0000 (19:12 +0100)] 
Move SBuf<->String conversion to own header.

9 years agoRemove SBUF_SOURCE from src/Makefile.am
Francesco Chemolli [Wed, 24 Feb 2016 12:35:14 +0000 (13:35 +0100)] 
Remove SBUF_SOURCE from src/Makefile.am

9 years agoMove SBufDetailedStats to src/sbuf
Francesco Chemolli [Wed, 24 Feb 2016 12:16:16 +0000 (13:16 +0100)] 
Move SBufDetailedStats to src/sbuf

9 years agoBug 3826: SMP compatibility with systemd
Marcos Mello [Tue, 23 Feb 2016 22:27:43 +0000 (11:27 +1300)] 
Bug 3826: SMP compatibility with systemd

** These changes require capabilities changes specific to Squid-4 and
   require systemd 209+

NOTE: 'squid -z' command does not yet support SMP with systemd.

Differences from the Squid-3 tools/systemd/squid.service:

- After=nss-lookup.target, for people running a local DNS server like BIND.
  Since there is no requirement dependency, it is a NOP when no such
  service is running.

- Type=forking and squid without -N in ExecStart: SMP now works.

- PIDFile=/var/run/squid.pid to tell systemd what pid is the main one. This
  is actually optional with Squid 4, because systemd will consider its first
  child as the main pid. But let's be safe. DEFAULT_PID_FILE could be used
  here with proper autoconf/automake magic...

- ExecReload calls kill rather than 'squid -k reconfigure'. systemd already
  knows the main pid.

- KillMode=mixed. The old KillMode=process sends SIGTERM (and SIGKILL after
  TimeoutStopSec) only to main daemon process. 'mixed' OTOH sends SIGTERM
  only to main process, but SIGKILL to all services' cgroup processes after
  timeout. With 'mixed' systemd ensures if daemon shutdown fails it will
  clean up all the remains. 'mixed' requires systemd >= 209.

9 years ago4.0.7 SQUID_4_0_7
Amos Jeffries [Tue, 23 Feb 2016 17:40:44 +0000 (06:40 +1300)] 
4.0.7

9 years agoPrep for 4.0.7 and 3.5.15
Amos Jeffries [Tue, 23 Feb 2016 16:16:32 +0000 (05:16 +1300)] 
Prep for 4.0.7 and 3.5.15

9 years agoinitial version of libsbuf
Francesco Chemolli [Tue, 23 Feb 2016 08:51:22 +0000 (09:51 +0100)] 
initial version of libsbuf

9 years agoauthor: "William Lima" <william.lima@hscbrasil.com.br>
Christos Tsantilas [Mon, 22 Feb 2016 18:01:23 +0000 (20:01 +0200)] 
author: "William Lima" <william.lima@hscbrasil.com.br>
Fix memory leak when the cache of sslcrtvalidator_program is disabled via ttl=0

9 years agoLog noise reduction: No eCAP debugging messages at DBG_IMPORTANT level.
Alex Rousskov [Sun, 21 Feb 2016 18:07:04 +0000 (11:07 -0700)] 
Log noise reduction: No eCAP debugging messages at DBG_IMPORTANT level.

9 years agoMacOS fix: shorten testRock store path to fit in shm segment filename size limitation...
Francesco Chemolli [Sun, 21 Feb 2016 08:53:50 +0000 (09:53 +0100)] 
MacOS fix: shorten testRock store path to fit in shm segment filename size limitations; change some tools.cc stubs into nops

9 years agoSourceFormat Enforcement
Source Maintenance [Sat, 20 Feb 2016 00:12:02 +0000 (00:12 +0000)] 
SourceFormat Enforcement

9 years agoFix propagation of response status line parsing error details.
Alex Rousskov [Fri, 19 Feb 2016 21:26:00 +0000 (14:26 -0700)] 
Fix propagation of response status line parsing error details.

This is a follow-up patch to trunk r14548 (Bug 4432). Now that the
calling code is using the right field to get the parsing error details
(parseStatusCode), we need to fix the code that sets those parsing error
details [in case of response status line parsing errors].

TODO: To minimize chances of similar "I forgot to set parseStatusCode"
bugs slipping through, hide that data member behind a method that
returns scInvalidHeader (or a new scInternalSquidError) if parseError_
is still zero. Rename parseStatusCode to parseError_ and stop confusing
it with the response status code.

9 years agoThrow instead of asserting on some String overflows.
Alex Rousskov [Fri, 19 Feb 2016 21:23:08 +0000 (14:23 -0700)] 
Throw instead of asserting on some String overflows.

Note that Client-caught exceptions result in HTTP 500 (Internal Server
Error) responses with X-Squid-Error set to "ERR_CANNOT_FORWARD 0".

Also avoid stuck Client jobs on exceptions. See trunk r8266 for a
similar fix with a detailed discussion. Here, I added doneWithFwd
instead of setting fwd to NULL because we dereference fwd (and store
pointers to things stored in fwd!) in many places. I think it is too
risky to just clear refcounted FwdState pointer (except in the
destructor where doing so is pointless).

Using doneWithFwd correctly is difficult because there are many ways we
can be "done" with FwdState, including:

    * calling fwd->complete(),
    * calling fwd->handleUnregisteredServerEnd(), and
    * closing the connection that FwdState monitors for closures.

The latter is especially tricky case because the closing is initiated in
many places, the process is asynchronous, and not all control
connections are monitored by FwdState.

For example, the updated control connection closure handler assumes that
it is being used for either external closures or internal closures
incorrectly used instead of mustStop()/abortAll(). In both cases, either
FwdState is still monitoring the connection (OK) or we forgot to call
one of its "done" methods listed above before closing. The latter would
be a bug, but I did not find any signs of it and fixing it would be
outside this change scope anyway.

Also unified String size limit checks [that I could find].

9 years agoexternal_acl parameters separated by %20 instead of space
Christos Tsantilas [Fri, 19 Feb 2016 17:19:25 +0000 (19:19 +0200)] 
external_acl parameters separated by %20 instead of space

If an external ACL is configured with more than one parameter as shown
in the example below, then Squid sends those parameters to the
external_acl helper separated by %20 characters instead of spaces:

  acl TEST external ACLTYPE param1=val1 param2=val2

This change fixes regression introduced in trunk r14351 (Support
logformat %macros in external_acl_type format) but more work may
be needed to make Squid behave as squid.conf.documented promises.

This is a Measurement Factory project.

9 years agoRevert r14303: Migrate StoreEntry to using MEMPROXY_CLASS
Amos Jeffries [Fri, 19 Feb 2016 15:06:42 +0000 (04:06 +1300)] 
Revert r14303: Migrate StoreEntry to using MEMPROXY_CLASS

This change has been identified as the trigger for several object caching
errors. The real cause is not yet known, but reverting this optimisation
avoids it, so is being done for stability.

This resolves bugs 4370 and maybe also 4354 and 4355

9 years agoBug 3870: assertion failed: String.cc: 'len_ + len <65536' in ESI::CustomParser
William Lima [Thu, 18 Feb 2016 12:48:08 +0000 (01:48 +1300)] 
Bug 3870: assertion failed: String.cc: 'len_ + len <65536' in ESI::CustomParser

The custom ESI parser used in absence of libxml2 or libexpat parsers was
restricted to handling 64KB buffers but under some conditions could expand
to over 64KB during the parse process. Hitting this assertion.

TODO: the parser can now be redesigned to make use of Tokenizer and
      CharacterSet parsing tools. But that is left for later work.

9 years agoBug 4432: assertion failed: store.cc:1919: "isEmpty()"
Alex Rousskov [Thu, 18 Feb 2016 04:11:36 +0000 (21:11 -0700)] 
Bug 4432: assertion failed: store.cc:1919: "isEmpty()"

When we failed to parse a response:

* Do not use parsing leftovers, such as HTTP response status code. Doing
  so screws up error detection logic in continueAfterParsingHeader() and
  leads to stuck transactions instead of error responses.

* Do not store the fake half-baked response (via replaceHttpReply).
  Doing so leads to assertions.  The fake response is only meant for
  continueAfterParsingHeader().

I also removed a misleading XXX about connection closure. Our
continueAfterParsingHeader() handles errors, not processReplyHeader().

TODO: The error detection/propagation code is ugly and should be
rewritten [using C++ exceptions].

9 years agoBug 4111: leave_suid() does not properly handle error codes returned by setuid
tangqinghao [Thu, 18 Feb 2016 02:48:41 +0000 (15:48 +1300)] 
Bug 4111: leave_suid() does not properly handle error codes returned by setuid

... this will cause privilege escalation in the rare case that setuid fails.
So far there are no known cases of this happening when downgrading from root.

Also fixes several incorrect uses of errno which may have been obscuring
error message details if it did happen.

9 years agoSourceLayout: Move the Runner which manages SSL SessionCache to libsecurity
Amos Jeffries [Wed, 17 Feb 2016 21:03:29 +0000 (10:03 +1300)] 
SourceLayout: Move the Runner which manages SSL SessionCache to libsecurity

Unfortunately the OpenSSL session cache callbacks cannot also be moved
due to circular dependency issues. However, when those are resolved by
later libsecurity API additions the callbacks will be much easier to
shift. For now the three symbols shared between the two libraries are
exposed by libsslsquid in the Ssl:: namespace.

Cache initialization is now moved into the Runner. Binding its state
initialization more tightly to the memory allocation and initialization.
Which also removes the need for explicit main.cc dependency.

One issue was uncovered during this:

* While ssl/support.h was defining a destruct_session_cache() function
that appeared to release the cache memory, it was not actually being
used anywhere. Which unless a fortuitous sequence of events is happening
means that the memory for the cache entries may not be released properly.
On the other hand the cache should only be erased on shutdown so the
effects of this are minor.

The unused function has been removed and the issue is now expicitly
noted in the Runner shutdown handling method for future investigation.

9 years ago4.0.6 SQUID_4_0_6
Amos Jeffries [Mon, 15 Feb 2016 15:53:15 +0000 (04:53 +1300)] 
4.0.6