]> git.ipfire.org Git - thirdparty/squid.git/log
thirdparty/squid.git
9 years agoBug 4281: copy-paste typos in src/tools.cc
Marcos Mello [Tue, 27 Oct 2015 22:47:21 +0000 (15:47 -0700)] 
Bug 4281: copy-paste typos in src/tools.cc

9 years agoBug 4188: Bumping intercepted SSL connections does not work on Solaris
Alex Rousskov [Tue, 27 Oct 2015 22:45:11 +0000 (15:45 -0700)] 
Bug 4188: Bumping intercepted SSL connections does not work on Solaris

9 years agoAvoid errors when parsing manager ACL in old squid.conf
Amos Jeffries [Tue, 27 Oct 2015 22:21:38 +0000 (15:21 -0700)] 
Avoid errors when parsing manager ACL in old squid.conf

ACL manager is now a built-in definition and has a different type. That
has been causing FATAL errors when parsing old squid.conf. We can be
nicer and just ignore the obsolete config lines.

9 years agoBug 4279: No response from proxy for FTP-download of non-existing file
Vitaly Lavrov [Wed, 14 Oct 2015 06:44:45 +0000 (23:44 -0700)] 
Bug 4279: No response from proxy for FTP-download of non-existing file

9 years agoBug 3574: crashes on reconfigure and startup
Amos Jeffries [Wed, 14 Oct 2015 05:29:29 +0000 (22:29 -0700)] 
Bug 3574: crashes on reconfigure and startup

When Squid receives a reconfigure signal before its signal handler
has been registered on startup it will crash with unhandled signal
exceptions. This can be triggered on system boot when a resolv.conf
alteration signal wins a race with the daemon service initialization.

Fix:
 Register the reconfigure signal handler early and ignoring signals
 until initial squid.conf load has completed.

When Squid receives a reconfigure signal while it is already in the
process of reconfiguring, the two async sequences can interfere and
result in confusing fatal error or crashes.

Fix:
 Only allow one reconfigure sequence to be initiated at a time.

Also, if shutdown signal has been received while waiting for a
reconfigure to finish, let shutdown take precedence over any pending
reconfigure repeats.

 Based on work by Clint Byrum and D J Gardner, Ubuntu

9 years agoBug 4347: compile errors with LibreSSL 2.3
Stuart Henderson [Sun, 11 Oct 2015 05:36:19 +0000 (22:36 -0700)] 
Bug 4347: compile errors with LibreSSL 2.3

9 years ago3.5.10 SQUID_3_5_10
Amos Jeffries [Thu, 1 Oct 2015 14:50:44 +0000 (07:50 -0700)] 
3.5.10

9 years agoAlign behavior of MEMPROXY_CLASS's operator delete with ::delete on nullptr
Francesco Chemolli [Thu, 1 Oct 2015 11:01:25 +0000 (04:01 -0700)] 
Align behavior of MEMPROXY_CLASS's operator delete with ::delete on nullptr

9 years agoBug 4330: Do not use SSL_METHOD::put_cipher_by_char to determine size
Christos Tsantilas [Thu, 1 Oct 2015 10:46:13 +0000 (03:46 -0700)] 
Bug 4330: Do not use SSL_METHOD::put_cipher_by_char to determine size

 ... of cipher on hello messages

The use of these methods can cause many problems in squid:
- In earlier openSSL libraries the SSL_METHOD::put_cipher_by_char method with
  NULL arguments returned the size of cipher in the SSL hello message.
  In newer openSSL releases, calling this method with NULL arguments is not
  valid any more, and can result to segfaults.
- In newer libreSSL library releases, the SSLv23_method it is used to produce
  TLS messages and does not return the size of a cipher in an v2 HELLO
  message.

This is a Measurement Factory project

9 years agoFix cache_peer login=PASS(THRU) after CVE-2015-5400
Amos Jeffries [Sun, 27 Sep 2015 08:28:59 +0000 (01:28 -0700)] 
Fix cache_peer login=PASS(THRU) after CVE-2015-5400

The patch for CVE-2015-5400 converts all non-200 peer responses
into 502 Bad Gateway responses when relaying a CONNECT to a peer.

This happens to break login=PASS and login=PASSTHRU behaviour
which relies on the 401 and 407 status being relayed transparently.

We need to relay the auth server responses as-is when login= is
set to PASS or PASSTHRU but then unconditionally close the
connections to prevent CVE-2015-5400 from occuring.

9 years agoBug 4304: PeerConnector.cc:743 "!callback" assertion.
Alex Rousskov [Sun, 27 Sep 2015 08:18:53 +0000 (01:18 -0700)] 
Bug 4304: PeerConnector.cc:743 "!callback" assertion.

When no ssl_bump rules match, Squid may throw a "a rule with the final
action must have matched" exception:

Must(finalAction == Ssl::bumpSplice || finalAction == Ssl::bumpBump ||
     finalAction == Ssl::bumpTerminate);

After the exception is thrown, Squid attempts to wind down the affected
transaction (as it should), but the code either quits with an unhandled
exception error or hits the !callback assertion, depending on whether
the async job processing was in place when the exception was hit (which
depends on whether non-blocking/slow ssl_bump ACLs were active).

The attached patch does three things:

1. Teaches Squid to guess the final ssl_bump action when no ssl_bump
rules match. The final guessed action is "bump" if the last non-final
action was "stare" and "splice" otherwise. I suspect that the older
Squid code attempted to do something like that, but that code may have
been lost when we taught Squid to ignore impossible ssl_bump actions.

2. Protects ssl_bump-checking code from quitting with an unhandled
exception error.

3. Converts the fatal !callback assertion into [hopefully less damaging]
transaction error, with a BUG message logged to cache.log.

More work may be needed to investigate other exceptions, especially
Must(!csd->serverBump() || csd->serverBump()->step <= Ssl::bumpStep2);

This is a Measurement Factory project

9 years agoRelicense SSPI helper to GPLv2+
Guido Serassio [Sun, 27 Sep 2015 05:24:31 +0000 (22:24 -0700)] 
Relicense SSPI helper to GPLv2+

 From: Guido Serassio <guido.serassio@acmeconsulting.it>
 To: Amos Jeffries <squid3@treenet.co.nz>, Squid Foundation Board
  <squid-board@lists.squid-cache.org>
 Subject: R: Squid copyrights
 Thread-Topic: Squid copyrights
 Thread-Index: AQHQ9+T6PCUWJkiqykyPO1tKufh0Lp5Odnyw
 Date: Sat, 26 Sep 2015 08:15:43 +0000
 Message-ID: <0B31416C912584429DC230430752D91C0C028E4B@SBS.acmeconsulting.loc>

 Hi Amos,

 For me the changes are OK.

 Please apply the changes on behalf of me.

 Regards

 Guido Serassio

9 years agoBug 4208: more than one port in wccp2_service_info line causes error
Guy Helmer [Sun, 27 Sep 2015 00:09:40 +0000 (17:09 -0700)] 
Bug 4208: more than one port in wccp2_service_info line causes error

9 years agoRelicense smb_lm auth helper to GPLv2+
Francesco Chemolli [Sun, 27 Sep 2015 00:08:12 +0000 (17:08 -0700)] 
Relicense smb_lm auth helper to GPLv2+

9 years agoRelicense ntlm_fake_auth.pl to GPLv2+
Francesco Chemolli [Sun, 27 Sep 2015 00:06:36 +0000 (17:06 -0700)] 
Relicense ntlm_fake_auth.pl to GPLv2+

9 years agoSMP: register worker listening ports one by one
Alex Rousskov [Sun, 27 Sep 2015 00:03:03 +0000 (17:03 -0700)] 
SMP: register worker listening ports one by one

When operating with many listening ports workers can flood the UDS queue
buffers and run into a timeout waiting for the coordinator to respond.

To prevent that we for a queue and wait for each port to get a response
before registering the next.

9 years agoBug 4328: %un format code does not work for external ACLs in credentials-fetching...
Steve Hill [Sun, 27 Sep 2015 00:01:09 +0000 (17:01 -0700)] 
Bug 4328: %un format code does not work for external ACLs in credentials-fetching rules

9 years agoBug 4323: Netfilter broken cross-includes with Linux 4.2
Francesco Chemolli [Sat, 26 Sep 2015 23:56:59 +0000 (16:56 -0700)] 
Bug 4323: Netfilter broken cross-includes with Linux 4.2

9 years agoCleanup: Migrate StoreEntry to using MEMPROXY_CLASS
Francesco Chemolli [Thu, 24 Sep 2015 09:59:36 +0000 (02:59 -0700)] 
Cleanup: Migrate StoreEntry to using MEMPROXY_CLASS

9 years agoRemove custom pool chunk size for StoreEntry.
Francesco Chemolli [Thu, 24 Sep 2015 05:29:46 +0000 (22:29 -0700)] 
Remove custom pool chunk size for StoreEntry.

As an historic optimization StoreEntry uses a custom pool chunk size of 2MB.
Knowledge of the actual benefits from this optimization has been lost in time,
and it's not possible to accurately measure its actual impact in all load
scenarios; at the same time this optimization is blocking other potentially
useful developments.

This change is therefore considered a potential performance regression in
some load scenarios.

9 years agoImplement default constructor for hash_link
Francesco Chemolli [Thu, 24 Sep 2015 05:26:38 +0000 (22:26 -0700)] 
Implement default constructor for hash_link

9 years agoBug 4326: base64 binary encoder rejects data beginning with nil byte
Pavel Simerda [Mon, 21 Sep 2015 11:43:00 +0000 (04:43 -0700)] 
Bug 4326: base64 binary encoder rejects data beginning with nil byte

9 years ago3.5.9 SQUID_3_5_9
Amos Jeffries [Thu, 17 Sep 2015 13:04:55 +0000 (06:04 -0700)] 
3.5.9

9 years agontlm_smb_lm_auth: ignore empty NTresponse field
Amos Jeffries [Thu, 17 Sep 2015 13:03:28 +0000 (06:03 -0700)] 
ntlm_smb_lm_auth: ignore empty NTresponse field

9 years agoBug 4309: Fix the presence of extensions detection in SSL Hello messages
Christos Tsantilas [Thu, 17 Sep 2015 05:58:53 +0000 (22:58 -0700)] 
Bug 4309: Fix the presence of extensions detection in SSL Hello messages

RFC5246 section 7.4.1.3 (Server Hello) says:

   The presence of extensions can be detected by determining whether
   there are bytes following the compression_method field at the end
   of the ServerHello.

Current parsing Hello code checks whether there are bytes in the whole
SSL message. It does not account for the fact that the message may
contain more than just ServerHello.

This patch fixes this issue and tries to improve the related code to
avoid related problems in the future.

This is a Measurement Factory project

9 years agoBug 4309: Squid crashed when Skype login
Alex Rousskov [Thu, 17 Sep 2015 05:46:55 +0000 (22:46 -0700)] 
Bug 4309: Squid crashed when Skype login

Do not assume that (char << 8) cannot overflow a short integer.
Be more consistent with storing certificate-related lengths.

9 years agoSupport SNI on generated CONNECT after peek
Christos Tsantilas [Thu, 17 Sep 2015 05:40:34 +0000 (22:40 -0700)] 
Support SNI on generated CONNECT after peek

When Squid decides to splice a connection in the step2 SSL bumping step
sends a second fake CONNECT request to the ICAP/eCAP for adaptation.

This patch fixes squid to use the SNI information when sending the second
CONNECT request, if it is available.

This is a Measurement Factory project

9 years agoBug 4284: missing sanity checks for malloc
Amos Jeffries [Wed, 9 Sep 2015 16:43:37 +0000 (09:43 -0700)] 
Bug 4284: missing sanity checks for malloc

9 years agoBug 3618: ntlm_smb_lm_auth rejects correct passwords
Amos Jeffries [Wed, 9 Sep 2015 16:36:42 +0000 (09:36 -0700)] 
Bug 3618: ntlm_smb_lm_auth rejects correct passwords

9 years agoFix CONNECT request debugging 11,2 traces
Amos Jeffries [Wed, 9 Sep 2015 16:32:08 +0000 (09:32 -0700)] 
Fix CONNECT request debugging 11,2 traces

Using the MemBuf::buf directly is not great, but it does have a properly
terminated c-string in this instance. We cannot use Raw() interface
because that is for output at DBG_DATA levels and will only display the
buffer name as if that was the raw traffic bytes at 11,2.
Which negates the entire purpose of this 11,2 output.

9 years agoSourceLayout: rename fs/rock/RockForward.h to fs/rock/forward.h
Amos Jeffries [Wed, 9 Sep 2015 16:29:40 +0000 (09:29 -0700)] 
SourceLayout: rename fs/rock/RockForward.h to fs/rock/forward.h

To bring in line with layout guidelines.

9 years agoQuieten UFS cache maintenance skipped warnings
Amos Jeffries [Sun, 6 Sep 2015 14:01:18 +0000 (07:01 -0700)] 
Quieten UFS cache maintenance skipped warnings

The maintenance loop cycles once per second. On long DIRTY cache rebuilds
this can reult in a lot of log mesages at level 1.

* reduce the messages to L=3 except once per minute allow one at L=1

* perform the under-size limit check first to allow completely silent
  skipping when no maintenance would have taken place anyway.

9 years agoMaintenance: use SGML for release checks after rev.13896
Amos Jeffries [Sun, 6 Sep 2015 13:10:21 +0000 (06:10 -0700)] 
Maintenance: use SGML for release checks after rev.13896

9 years ago3.5.8 SQUID_3_5_8
Amos Jeffries [Tue, 1 Sep 2015 19:41:50 +0000 (12:41 -0700)] 
3.5.8

9 years agoFix FreeBSD Clang-3.5 build error
Amos Jeffries [Tue, 1 Sep 2015 18:40:41 +0000 (11:40 -0700)] 
Fix FreeBSD Clang-3.5 build error

9 years agoSupport splice for SSLv3 and TLSv1 sessions that start with an SSLv2 Hello
Alex Rousskov [Tue, 1 Sep 2015 09:25:57 +0000 (02:25 -0700)] 
Support splice for SSLv3 and TLSv1 sessions that start with an SSLv2 Hello

Such sessions are created, for example, by some SSL clients using OpenSSL
v0.9.8 with default options. This does _not_ relate to SSLv2 sessions.
Just enacts the permitted exception for Hello messages in RFC 6176.

9 years agoBug 3553: cache_swap_high ignored and maxCapacity used instead
Amos Jeffries [Sat, 29 Aug 2015 20:21:33 +0000 (13:21 -0700)] 
Bug 3553: cache_swap_high ignored and maxCapacity used instead

Also, to make matters worse the amount of objects (max 70) being purged on
each of the 1-second maintenance loops was far too small for the traffic
speeds of up to 20k RPS now being processed by proxies.

This fixes the cache_swap_high behaviour to closer match what is documented
at present, although some documentation does say it cleans all the way down
to the low-water mark. Which appears never to have been true in regards to
one cycle but would occur over several of the proxy speed was not too high.

With this updated algorithm there is almost no limit to how far the
aggressiveness can scale, but it is linear at 300 objects per multiple of
the gap between low- and high- watermark.

SwapDir::maintain is now fairly well documented and debug traces added. With
several TODO ideas for future improvement also documented in the method code.

9 years agoFix memory leak in Surrogate-Capability header detection
Amos Jeffries [Sat, 29 Aug 2015 20:13:41 +0000 (13:13 -0700)] 
Fix memory leak in Surrogate-Capability header detection

 Detected by Coverity Scan. Issue 1318023

9 years agoWhen a RESPMOD service aborts, mark the body it produced as truncated.
Alex Rousskov [Sat, 29 Aug 2015 20:11:19 +0000 (13:11 -0700)] 
When a RESPMOD service aborts, mark the body it produced as truncated.

Without these changes, the recipient of the truncated body often
cannot tell that the body was actually truncated (e.g., when Squid
uses chunked encoding for body delivery). Lying about truncation
may result in rather serious user-level problems.

9 years agoCleanup: fix assertion in Store unit tests
Amos Jeffries [Sat, 29 Aug 2015 18:51:19 +0000 (11:51 -0700)] 
Cleanup: fix assertion in Store unit tests

The old Squid String implementation cannot handle appending nullptr or
negative lengths. So if the test code using CapturingStoreEntry ever
tries to append such it will crash instead of working like a StoreEntry
should.

9 years agoBug 3696: crash when client delay pools are activated
Amos Jeffries [Fri, 28 Aug 2015 13:22:38 +0000 (06:22 -0700)] 
Bug 3696: crash when client delay pools are activated

9 years agoBug 4278: Docs: typo in the refresh_pattern freshness algorithm
Javad Kouhi [Thu, 27 Aug 2015 08:11:38 +0000 (01:11 -0700)] 
Bug 4278: Docs: typo in the refresh_pattern freshness algorithm

9 years agoBug 4306: build portability fix in Kerberos helpers
Patrick Welche [Thu, 27 Aug 2015 08:09:33 +0000 (01:09 -0700)] 
Bug 4306: build portability fix in Kerberos helpers

9 years agoDocs: auto-build release notes for snapshots
Amos Jeffries [Tue, 25 Aug 2015 15:27:18 +0000 (08:27 -0700)] 
Docs: auto-build release notes for snapshots

This adds conditional build support to generate release notes whenever
a tarball is being created, regardless of what the code branch status
is. All that is required is the linuxdoc tool chain.

Formal release branch snapshots have been publishing the notes files
built for their previous release. But development versions of Squid
have not been getting documented at all which can be annoying for
testers.

The release-3.N.html file is also removed from the repository. With this
update it is no longer be needed by the snapshot machinery.

9 years agoFtpServer.cc:1024: "reply != NULL" assertion
Christos Tsantilas [Fri, 21 Aug 2015 01:25:52 +0000 (18:25 -0700)] 
FtpServer.cc:1024: "reply != NULL" assertion

Handle nil HttpReply pointer inside various handlers called from
Ftp::Server::handleReply(). For example, when the related StoreEntry
object is aborted, the client_side_reply.cc code may call the
Ftp::Server::handleReply() method with a nil reply pointer.

The Ftp::Server::handleReply() methods itself cannot handle nil replies
because they are valid in many states. Only state-specific handlers know
whether they need the reply.

The Ftp::Server::handleReply() method is called [via Store] from Client code.
Thus, exceptions in handleReply() are handled by the Ftp::Client job. That job
does not have enough information to know whether the client-to-Squid connection
should be closed; the job keeps the connection open. When the reply is nil,
that open connection becomes unusable, leading to more problems.

This patch fixes the Ftp::Server::handleReply() to handle exceptions,
including closing the connections in the case of an exception. It also
adds Must(reply) checks to check for nil HttpReply pointers where the
reply is required. Eventually, Store should start using async calls to
protect jobs waiting for Store updates. Meanwhile, this should help.

This is a Measurement Factory project.

9 years agoWork around clang-3.6 complaining of unknown attributes in libxml2
Francesco Chemolli [Fri, 21 Aug 2015 00:54:50 +0000 (17:54 -0700)] 
Work around clang-3.6 complaining of unknown attributes in libxml2

9 years agoIgnore impossible SSL bumping actions, as intended and documented.
Christos Tsantilas [Fri, 21 Aug 2015 00:31:55 +0000 (17:31 -0700)] 
Ignore impossible SSL bumping actions, as intended and documented.

According to Squid wiki: "Some actions are not possible during
certain processing steps. During a given processing step, Squid
ignores ssl_bump lines with impossible actions". The distributed
squid.conf.documented has similar text.

Current Squid violates the above rule. Squid considers all actions,
and if an impossible action matches first, Squid guesses what the
true configuration intent was. Squid may guess wrong. For example,
depending on the transaction, Squid may guess that a matching
stare or peek action during bumping step3 means "bump", breaking
peeked connections that cannot be bumped.

This unintended but gross configuration semantics violation remained
invisible until bug 4237, probably because most configurations in
most environments either worked around the problem (where admins
experimented to "make it work") or did not result in visible
errors (where Squid guesses did not lead to terminated connections).

While configuration workarounds are possible, the current
implementation is very wrong and leads to overly complex and, hence,
often wrong configurations. It is also nearly impossible to document
accurately because the guessing logic depends on too many factors.

To fix this, we add an action filtering/banning mechanism to Squid
ACL code. This mechanism is then used to:
  - ban client-first and server-first on bumping steps 2 and 3.
  - ban peek and stare actions on bumping step 3.
  - ban splice on step3 if stare is selected on step2 and
    Squid cannot splice the SSL connection any more.
  - ban bump on step3 if peek is selected on step2 and
    Squid cannot bump the connection any more.

The same action filtering mechanism may be useful for other
ACL-driven directives with state-dependent custom actions.

This change adds a runtime performance overhead of a single virtual
method call to all ORed ACLs that do not use banned actions.
That method itself just returns false unless the ACL represents
a whole directive rule. In the latter case, an std::vector size()
is also checked. It is possible to avoid this overhead by adding
a boolean "I may ban actions" flag to Acl::OrNode, but we decided
the small performance harm is not worth the extra code to set
that flag.

This is a Measurement Factory project.

9 years agoBug 4242: compile errors with eCAP using clang-3.6
Pavel Timofeev [Thu, 20 Aug 2015 23:57:18 +0000 (16:57 -0700)] 
Bug 4242: compile errors with eCAP using clang-3.6

9 years agoDocs: fix typo in miss_access
Lubos Uhliarik [Thu, 20 Aug 2015 13:52:14 +0000 (06:52 -0700)] 
Docs: fix typo in miss_access

9 years agoBug 4285 partial: %us is not supported in access.log
Amos Jeffries [Thu, 20 Aug 2015 13:51:00 +0000 (06:51 -0700)] 
Bug 4285 partial: %us is not supported in access.log

9 years agoBug 4302: IPFilter v5 transparent interception
Amos Jeffries [Thu, 20 Aug 2015 13:48:55 +0000 (06:48 -0700)] 
Bug 4302: IPFilter v5 transparent interception

9 years agoDocs: update intercept/tproxy related text
Amos Jeffries [Thu, 20 Aug 2015 13:47:37 +0000 (06:47 -0700)] 
Docs: update intercept/tproxy related text

9 years agoBug 4301: compile errors with IPFilter interception
Patrick Welche [Thu, 20 Aug 2015 13:46:36 +0000 (06:46 -0700)] 
Bug 4301: compile errors with IPFilter interception

9 years agoPolish: add debug section,level to cache.log
Amos Jeffries [Thu, 20 Aug 2015 13:44:21 +0000 (06:44 -0700)] 
Polish: add debug section,level to cache.log

Cache.log produced at level ALL,9 are very verbose, and tracking down
what specific section,level details to log for a shorter trace without
lost details can sometimes be tricky and time consuming. Particularly
when multiple sections are involved.

This patch adds a column containing the relevant debug_options
SECTION,LEVEL value on each line right after the kidN number for debug
levels 2+.

9 years agoReject non-chunked HTTP messages with conflicting Content-Length values.
Alex Rousskov [Thu, 20 Aug 2015 13:42:51 +0000 (06:42 -0700)] 
Reject non-chunked HTTP messages with conflicting Content-Length values.

Squid used to trust and forward the largest Content-Length header. This
behavior violated an RFC 7230 MUST in Section 3.3.3 item #4. It also confused
some ICAP services and probably some HTTP agents. Squid now refuses to forward
the badly framed message to the ICAP service and HTTP agent, responding with
an HTTP 411 or 502 (depending on the message direction) error instead.

This is a quick-and-dirty implementation. A polished version should reject
responses with invalid Content-Length values as well (per RFC 7230 MUST) and
should behave the same regardless of the relaxed_header_parser setting (this
is not a header parsing issue).

10 years agoBoilerplate: update ignored files
Amos Jeffries [Sat, 8 Aug 2015 04:10:36 +0000 (21:10 -0700)] 
Boilerplate: update ignored files

10 years agoBoilerplate: add Foundation details to rfcnb and smblib documentation files
Amos Jeffries [Sat, 8 Aug 2015 04:09:13 +0000 (21:09 -0700)] 
Boilerplate: add Foundation details to rfcnb and smblib documentation files

We had hoped to be removing this old library code by now. But it appears
that there is no alternative and users are still requesting the helpers
that depend on them.

10 years agoCleanup: de-duplicate fake-CONNECT code
Amos Jeffries [Sat, 8 Aug 2015 04:04:45 +0000 (21:04 -0700)] 
Cleanup: de-duplicate fake-CONNECT code

Over the course of the peek-n-splice development and followup patches
the code generating fake CONNECT requests to tunnel various intercepted
traffic has been copy-n-pasted several times.

Add a new method fakeAConnectRequest() that takes a debug reason and
SBuf containing any payload to preserve from the original I/O buffer.

10 years agoUse automake subdir-objects feature
Amos Jeffries [Sat, 8 Aug 2015 02:18:24 +0000 (19:18 -0700)] 
Use automake subdir-objects feature

The auto* toolchain warns that automake future versions will be enabling
subdir-objects mechanism by default.

Some unit tests were moved into per-library subdirs with the plan of
keeping all convenience library code together. However the current
layout state of Squid means that most still require some objects in other
libraries or at the top level. This does not build happily with the
auto-tools subdir-objects feature. In particular the distclean target has
a tendency to erase objects twice and die on the second attempt.

Temporarily undo that SourceLayout shuffing in order to be more
compatible with automake 1.1n versions.

Now that there are no longer cross-directory collisions in the built
binaries or libraries we can enable subdir-objects from ./configure
instead of on a per-Makefile basis

10 years ago3.5.7 SQUID_3_5_7
Amos Jeffries [Sat, 1 Aug 2015 06:06:27 +0000 (23:06 -0700)] 
3.5.7

10 years agoBug 4293: wrong SNI sent to server after URL-rewrite
Alex Wu [Sat, 1 Aug 2015 05:59:31 +0000 (22:59 -0700)] 
Bug 4293: wrong SNI sent to server after URL-rewrite

10 years agoAdd ENABLE_POD2MAN_DOC automake conditional for pod2man builds
Amos Jeffries [Sat, 1 Aug 2015 01:09:59 +0000 (18:09 -0700)] 
Add ENABLE_POD2MAN_DOC automake conditional for pod2man builds

10 years agobasic_smb_auth: rejecting valid credentials
Unknown - Debian Project [Fri, 31 Jul 2015 20:17:23 +0000 (13:17 -0700)] 
basic_smb_auth: rejecting valid credentials

basic_smb_auth.sh delivers the credentials via environment in
a form "$USER%$PASSWORD", which is not expected from smbclient. This seem to
result from an obsolete or inferior documentation of smbclient. While it is
perfectly valid to deliver the credentials in this form via commandline
parameter -U, for example in

  smbclient //domain_controller/NETLOGON -d 0 -E -W windows_domain -c "get
  proxyauth -" -U herrmann%mysecurepassword 2>/dev/null

this form is not valid, when the credentials will be delivered via environment.

Via environment the credentials must be delivered in two separate variables
  USER=$USER%
  PASSWD=$PASSWORD.

10 years agobasic_smb_auth: doesn't handle passwords with backslashes
Jeff Licquia [Fri, 31 Jul 2015 20:13:45 +0000 (13:13 -0700)] 
basic_smb_auth: doesn't handle passwords with backslashes

 From; Jeff Licquia <jlicquia@scinet.springfieldclinic.com>
 Subject; squid: SMB auth proxy has problems with some passwords
 Date; Tue, 18 Jul 2000 12:45:01 -0500 (CDT)

The SMB authenticator doesn't handle passwords with backslashes in them
correctly.  The fix appears to be easy; just put a -r in the "read SMBPASS"
line in smb_auth.sh.

10 years agobasic_smb_auth: nmblookup fails when smb.conf contaisn WINS servers
John M Cooper [Fri, 31 Jul 2015 20:12:12 +0000 (13:12 -0700)] 
basic_smb_auth: nmblookup fails when smb.conf contaisn WINS servers

 From; John M Cooper
 To; Debian Bug Tracking System
 Subject; squid: smb_auth does not work with a wins server defined in smb.conf
 Date; 28 Jan 2002 17:46:13 +0000

If you define a wins server in the file /etc/samba/smb.conf then the
smb_auth script gets the wrong Domain Controller IP address.

There should be a change to smb_auth.sh at line 50

basically adding in the extra "\..+" stops the number of Wins servers
from being returned from the nmblookup command.

10 years agoDocs: fix man(8) page syntax for lexgrof tool
Amos Jeffries [Fri, 31 Jul 2015 19:51:29 +0000 (12:51 -0700)] 
Docs: fix man(8) page syntax for lexgrof tool

10 years agoMake pod2man an optional dependency
Amos Jeffries [Fri, 31 Jul 2015 04:13:29 +0000 (21:13 -0700)] 
Make pod2man an optional dependency

Documentation files can be built on a best-effort basis. This allows
Squid more helpers to be built without pod2man and sub-dependencies.

configure.ac already checks for pod2man existence and sets appropriate
automake conditionals.

10 years agoHandle exceptions during squid.conf parse
Amos Jeffries [Wed, 29 Jul 2015 08:56:44 +0000 (01:56 -0700)] 
Handle exceptions during squid.conf parse

Increasingly code used inside squid.conf parsing is capable of throwing
exceptions to signal errors. Catch any unexpected exceptions that reach
the config parse initiator(s) and report as a FATAL event before self
destructing.

 Detected by Coverity Scan. Issue 1231352

10 years agoWhen SBuf chop()s away everything, always clear the buffer.
Alex Rousskov [Wed, 29 Jul 2015 08:54:08 +0000 (01:54 -0700)] 
When SBuf chop()s away everything, always clear the buffer.

The old code was trying to make the clearance decision without
normalizing parameters first and missed most cases as the result.

In theory, clear()ing SBuf during chop() is just an optimization
that should have no effect on correct code functionality.

10 years agoCleanup: avoid mentioning compiler directives in configure output
Amos Jeffries [Wed, 29 Jul 2015 08:51:50 +0000 (01:51 -0700)] 
Cleanup: avoid mentioning compiler directives in configure output

In particular -march=native. It confuses some downstream build tools
to encounter the option in its full name form.

10 years agoBug 4251: incorrect instance name for memory segments in /dev/shm
Jose Luis Godoy [Sat, 25 Jul 2015 16:31:02 +0000 (09:31 -0700)] 
Bug 4251: incorrect instance name for memory segments in /dev/shm

10 years agoBug 3345: Support %un (any available user name) format code for external ACLs.
Amos Jeffries [Sat, 25 Jul 2015 16:25:42 +0000 (09:25 -0700)] 
Bug 3345: Support %un (any available user name) format code for external ACLs.

The same %un code, with the same meaning is already supported in access.log.
In an external ACL request, it expands to the first available user name
from the following list of information sources:

  - authenticated user name, like %ul or %LOGIN
  - user name supplied by an external ACL to Squid via the "user=..."
    key=value pair, like %ue or %EXT_USER
  - SSL client name, like %us
  - ident user name, like %ui

Based on Amos Jeffries 2011 patch and "arronax28" design:
http://www.squid-cache.org/mail-archive/squid-dev/201112/0080.html
with TODO completion by Measurement Factory

10 years agoAUFS: Raise I/O queue congestion limits
Amos Jeffries [Fri, 24 Jul 2015 13:32:26 +0000 (06:32 -0700)] 
AUFS: Raise I/O queue congestion limits

... from 8 to 8196 before initial congestion message appears.

Modern networks can be quite busy and even amateur installations have a
much higher I/O throughput than Squid was originally designed for. This
often results in a series of "Queue congestion" warnings appearing on
startup before Squid learns what the local environment requires.

The new limit helps to cater for this and reduce teh frequency of
unnecessary warnings. They may still occur, so debug output is also
updated to show what the queue length has grown to with each warning.

Also updating the congestion counter from 32-bit to 64-bit unsigned
since the new limit already consumes half the available growth bits in
32-bit integer.

NP: this update was triggered by reports from admin with proxies needing
    to expand AIO queues to over 4K entries on startup.

10 years agoImprove handling of client connections on shutdown
Amos Jeffries [Fri, 24 Jul 2015 13:30:14 +0000 (06:30 -0700)] 
Improve handling of client connections on shutdown

When Squid which are processing a lot of traffic, using persistent
client connections, or dealing with long duration requests are shutdown
they can exit with a lot of connections still open. The
shutdown_lifetime directive exists to allow time for existing
transactions to complete, but this is not always possible and has no
effect on idle connections.

The result is a large dump of aborted FD entries being logged as the TCP
sockets get abruptly reset. Potentially active transactions cache
objects being "corrupted" in the process.

Makes ConnStateData and its children implement Runner API callbacks
to receive signals about Squid shutdown. Which allows their close()
handlers to be run properly and make use of AsyncCalls API. Idle client
connections are closed immediately on the startShutdown() signal, so
their closure CPU cycles happens during the shutdown grace period.

An extra 0-delay event step is added to SignalEngine shutdown sequence
with a new Runner registry hook 'endingShutdown' is added to signal that
the shutdown_lifetime grace period is over for closure of active
transactions. All network FD sockets should be considered unusable for
read()/write() at that point since close handlers may have already been
scheduled by other Runners. AsyncCall's may still be scheduled to
release resources.

Also adds a DeregisterRunner() API action to remove Runners dynamically
from the registered set.

The Squid shutdown sequence is now:

* shutdown signal received:
 - listening sockets closed
 - idle client connections closed

* shutdown grace period ends:
 - remaining client connections closed

* shutdown finishes:
 - main signal and Async loop halted
 - all memory free'd

Server connections which are PINNED or in active use during the
endingShutdown execution will be closed cleanly as a side-effect of the
client closures. Otherwise there is no change (yet) to server connections
or other FD sockets behaviour on shutdown.

10 years agoAvoid SSL certificate db corruption with empty index.txt as a symptom.
Christos Tsantilas [Thu, 16 Jul 2015 07:24:24 +0000 (00:24 -0700)] 
Avoid SSL certificate db corruption with empty index.txt as a symptom.

* Detect cases where the size file is corrupted or has a clearly wrong
  value. Automatically rebuild the database in such cases.

* Teach ssl_crtd to keep running if it is unable to store the generated
  certificate in the database. Return the generated certificate to Squid
  and log an error message in such cases.

Background:

There are cases where ssl_crtd may corrupt its certificate database.
The known cases manifest themselves with an empty db index file.  When
that happens, ssl_crtd helpers quit, SSL bumping does not work any more,
and the certificate DB has to be deleted and re-initialized.

We do not know exactly what causes corruption in deployments, but one
known trigger that is easy to reproduce in a lab is the block size
change in the ssl_crtd configuration. That change has the following
side-effects:

1. When ssl_crtd removes certificates, it computes their size using a
   different block size than the one used to store the certificates.
   This is may result in negative database sizes.

2. Signed/unsigned conversion results in a huge number near LONG_MAX,
   which is then written to the "size" file.

3. The ssl_crtd helper remoces all certificates from database trying to make
   space for new certificates.

4. The ssl_crtd helper refuses to store new certificates because the
   database size (as described by the "size" file) still exceeds the
   configured limit.

5. The ssl_crtd helper exits because it cannot store a new certificates
   to the database. No helper response is sent to Squid in this case.

Most likely, there are other corruption triggers -- the database
management code is of an overall poor quality. This change resolves some
of the underlying problems in hope to address at least some of the
unknown triggers as well as the known one.

This is a Measurement Factory project.

10 years agoErrors served using invalid certificates when dealing with SSL server errors.
Christos Tsantilas [Thu, 16 Jul 2015 07:14:42 +0000 (00:14 -0700)] 
Errors served using invalid certificates when dealing with SSL server errors.

When bumping Squid needs to send an Squid-generated error "page" over a
secure connection, Squid needs to generate a certificate for that connection.
Prior to these changes, several scenarios could lead to Squid generating
a certificate that clients could not validate. In those cases, the user would
get a cryptic and misleading browser error instead of a Squid-generated
error page with useful details about the problem.

For example, is a server certificate that is rejected by the certificate
validation helper. Squid no longer uses CN from that certificate to generate
a fake certificate.

Another example is a user accessing an origin server using one of its
"alternative names" and getting a Squid-generated certificate containing just
the server common name (CN).

These changes make sure that certificate for error pages is generated using
SNI (when peeking or staring, if available) or CONNECT host name (including
server-first bumping mode). We now update the ConnStateData::sslCommonName
field (used as CN field for generated certificates) only _after_ the server
certificate is successfully validated.

This is a Measurement Factory project.

10 years agoIPv6: improve BCP 177 compliance
Amos Jeffries [Thu, 16 Jul 2015 07:01:37 +0000 (00:01 -0700)] 
IPv6: improve BCP 177 compliance

Always perform the IP transport probes to detect IPv6 availability.

* Accept lack of IPv6 assignment as per normal by auto-disabling IPv6.

* Whine loudly if (and only if) it would have worked but has been
  forced OFF by --disable-ipv6.

10 years agoPolish debugs on NAT failure
Amos Jeffries [Thu, 16 Jul 2015 07:00:12 +0000 (00:00 -0700)] 
Polish debugs on NAT failure

10 years agoFix crash in TcpAccepter with profiler enabled
Amos Jeffries [Thu, 16 Jul 2015 06:59:08 +0000 (23:59 -0700)] 
Fix crash in TcpAccepter with profiler enabled

10 years agoSplice to origin cache_peer.
Christos Tsantilas [Tue, 14 Jul 2015 17:51:21 +0000 (10:51 -0700)] 
Splice to origin cache_peer.

Currently, Squid cannot redirect intercepted connections that are subject to
SslBump rules to _originserver_ cache_peer. For example, consider Squid that
enforces "safe search" by redirecting clients to forcesafesearch.example.com.
Consider a TLS client that tries to connect to www.example.com. Squid needs to
send that client to forcesafesearch.example.com (without changing the host
header and SNI information; those would still point to www.example.com for
safe search to work as intended!).

The admin may configure Squid to send intercepted clients to an originserver
cache_peer with the forcesafesearch.example.com address. Such a configuration
does not currently work together with ssl_bump peek/splice rules.

This patch:

* Fixes src/neighbors.cc bug which prevented CONNECT requests from going
  to originserver cache peers. This bug affects both true CONNECT requests
  and intercepted SSL/TLS connections (with fake CONNECT requests). Squid
  use the CachePeer::in_addr.port which is not meant to be used for the HTTP
  port, apparently. HTTP checks should use CachePeer::http_port instead.

* Changes Squid to not initiate SSL/TLS connection to cache_peer for
  true CONNECT requests.

* Allows forwarding being-peeked (or stared) at connections to originserver
  cache_peers.

The bug fix described in the first bullet makes the last two changes
necessary.

This is a Measurement Factory project.

10 years agoBug 4227: invalid key in AuthUserHashPointer causing assertation failure
Manuel Meitinger [Tue, 7 Jul 2015 08:42:54 +0000 (01:42 -0700)] 
Bug 4227: invalid key in AuthUserHashPointer causing assertation failure

Temporary workaroudn patch, reverting SBuf conversion of AuthUser key
data storage.

NOTE:
    This patch is applied to 3.5 series only.
    Squid-4 series and later are not yet fixed.

10 years ago3.5.6 SQUID_3_5_6
Amos Jeffries [Fri, 3 Jul 2015 09:11:09 +0000 (02:11 -0700)] 
3.5.6

10 years agoext_edirectory_userip_acl: fix uninitialized variable
Amos Jeffries [Wed, 1 Jul 2015 11:34:25 +0000 (04:34 -0700)] 
ext_edirectory_userip_acl: fix uninitialized variable

 Detected by Coverity Scan. Issue 1258704

10 years agoDo not blindly forward cache peer CONNECT responses.
Alex Rousskov [Wed, 1 Jul 2015 06:26:38 +0000 (23:26 -0700)] 
Do not blindly forward cache peer CONNECT responses.

Squid blindly forwards cache peer CONNECT responses to clients. This
may break things if the peer responds with something like HTTP 403
(Forbidden) and keeps the connection with Squid open:
  -  The client application issues a CONNECT request.
  -  Squid forwards this request to a cache peer.
  -  Cache peer correctly responds back with a "403 Forbidden".
  -  Squid does not parse cache peer response and
     just forwards it as if it was a Squid response to the client.
  -  The TCP connections are not closed.

At this stage, Squid is unaware that the CONNECT request has failed. All
subsequent requests on the user agent TCP connection are treated as
tunnelled traffic. Squid is forwarding these requests to the peer on the
TCP connection previously used for the 403-ed CONNECT request, without
proper processing. The additional headers which should have been applied
by Squid to these requests are not applied, and the requests are being
forwarded to the cache peer even though the Squid configuration may
state that these requests must go directly to the origin server.

This fixes Squid to parse cache peer responses, and if an error response
found, respond with "502 Bad Gateway" to the client and close the
connections.

10 years agoBug 3483: assertion failed store.cc:1866: 'isEmpty()'
Chudy Fernandez [Wed, 1 Jul 2015 04:40:00 +0000 (21:40 -0700)] 
Bug 3483: assertion failed store.cc:1866: 'isEmpty()'

10 years agoUse relative-URL in errorpage.css for SN.png
Amos Jeffries [Sun, 28 Jun 2015 10:13:58 +0000 (03:13 -0700)] 
Use relative-URL in errorpage.css for SN.png

Modern browsers now seem to be accepting relative-URLs in CSS, and Squid
global_internal_static non-https:// URLs are working (bug 4132). So we
can do this now without as many failures.

10 years agoBug 4193: Memory leak on FTP listings
Matthias Pitzl [Sun, 28 Jun 2015 10:12:54 +0000 (03:12 -0700)] 
Bug 4193: Memory leak on FTP listings

10 years agoBug 4274: ssl_crtd.8 not being installed
Amos Jeffries [Sun, 28 Jun 2015 10:11:34 +0000 (03:11 -0700)] 
Bug 4274: ssl_crtd.8 not being installed

10 years agoFix CONNECT failover to IPv4 after trying broken IPv6 servers
Amos Jeffries [Sun, 28 Jun 2015 10:09:15 +0000 (03:09 -0700)] 
Fix CONNECT failover to IPv4 after trying broken IPv6 servers

This makes CONNECT tunnel connection attempts obey forward_timeout
and continue retrying instead of aborting with a client error when one
possible server hits a connect_timeout.

10 years agoFixed segfault when freeing https_port clientca on reconfigure or exit.
Alex Rousskov [Sun, 28 Jun 2015 10:05:58 +0000 (03:05 -0700)] 
Fixed segfault when freeing https_port clientca on reconfigure or exit.

AnyP::PortCfg::clientCA list was double-freed because the SSL context takes
ownership of the STACK_OF(X509_NAME) supplied via SSL_CTX_set_client_CA_list(),
but Squid was not aware of that. Squid now supplies a clone of clientCA.

10 years agoTLS: Disable client-initiated renegotiation
Paulo Matias [Sun, 28 Jun 2015 10:04:16 +0000 (03:04 -0700)] 
TLS: Disable client-initiated renegotiation

Hardening against CVE-2009-3555 mitigating a DoS attack which
might be possible with some builds of the OpenSSL library.

10 years agoTranslations: add Spanish US dialect alias
Amos Jeffries [Mon, 22 Jun 2015 03:53:34 +0000 (20:53 -0700)] 
Translations: add Spanish US dialect alias

10 years agoCleanup: replace __DATE__ and __TIME__ macros
Amos Jeffries [Mon, 22 Jun 2015 03:50:59 +0000 (20:50 -0700)] 
Cleanup: replace __DATE__ and __TIME__ macros

... with code VERSION and SQUID_BUILD_INFO maros.

This allows separately built binaries to be compared for equivalence. A
small security check, but useful.

10 years agoFix assertion String.cc:221: "str"
Christos Tsantilas [Fri, 5 Jun 2015 23:46:42 +0000 (16:46 -0700)] 
Fix assertion String.cc:221: "str"

This bug can be caused by certificates does not contain a CN field. In this
case the Ssl::ErrorDetail::cn method may return NULL causing this assertion
somewhere inside Ssl::ErrorDetail::buildDetail method, which expects always
a non NULL value from Ssl::ErrorDetail::cn and similar methods.

This patch try to hardening the Ssl::ErrorDetail error formating functions to
avoid always check for NULL values and also avoid sending wrong information
for various certificate fields in the case of an error while extracting the
information from certificate..

This is a Measurement Factory project

10 years agoFix assertion comm.cc:759: "Comm::IsConnOpen(conn)" in ConnStateData::getSslContextDone
Christos Tsantilas [Fri, 5 Jun 2015 23:41:22 +0000 (16:41 -0700)] 
Fix assertion comm.cc:759: "Comm::IsConnOpen(conn)" in ConnStateData::getSslContextDone

This is an ssertion inside ConnStateData::getSslContextDone while
setting timeout. The reason is that the ConnStateData::clientConnection
may closed while waiting response from ssl_crtd helper.

This is a Measurement Factory project

10 years agoBug 3875: bad mimeLoadIconFile error handling
Amos Jeffries [Fri, 5 Jun 2015 23:38:34 +0000 (16:38 -0700)] 
Bug 3875: bad mimeLoadIconFile error handling

Improve the MimeIcon reliability when filesystem I/O errors or others
cause the icon data to not be loadable.

The loading process is re-worked to guarantee that once the
MimeIon::created callback occurs it will result in a valid StoreEntry in
the cache representing the wanted icon.

* If the image can be loaded without any issues it will be placed in
the cache as a 200 response.

* If errors prevent the image being loaded or necessary parameters
(size and mtime) being known a 204 object will be placed into the cache.

NP: There is no clear agreement on 204 being 'the best' status for this
case. 500 Internal Error is also appropriate. I have use 204 since:

* the bug is not in the clients request (eliminating 400, 404, etc),
* a 500 would be revealing details about server internals unnecessarily
   often and incur extra complexity creating the error page.
* 204 also avoids needing to send Content-Length, Cache-Control header
  and body object (bandwidth saving over 500 status).

NP: This started with just correcting the errno usage, but other bugs
promptly started appearing once I got to seriously testing this load
process. So far it fixes:
* several assertions resulting from StoreEntry being left invalid in
  cache limbo beween created hash entries and valid mem_obj data.
* repeated attempts on startup to load absent icons files which dont
  exist in the filesystem.
* buffer overfow on misconfigured or corrupt mime.conf file entries
* incorrect debugs messages about file I/O errors
* large error pages delivered when icons not installed (when it does
  not assert from the StoreEntry)

10 years agoSupport custom OIDs in *_cert ACLs
Christos Tsantilas [Fri, 5 Jun 2015 23:30:10 +0000 (16:30 -0700)] 
Support custom OIDs in *_cert ACLs

This patch allow user_cert and ca_cert ACLs to match arbitrary
stand-alone OIDs (not DN/C/O/CN/L/ST objects or their substrings).
For example, should be able to match certificates that have
1.3.6.1.4.1.1814.3.1.14 OID in the certificate Subject or Issuer field.

Squid configuration would look like this:
 acl User_Cert-TrustedCustomerNum user_cert 1.3.6.1.4.1.1814.3.1.14 1001

This is a Measurement Factory project

10 years agoBug 3329: The server side pinned connection is not closed properly
Christos Tsantilas [Fri, 5 Jun 2015 23:22:22 +0000 (16:22 -0700)] 
Bug 3329: The server side pinned connection is not closed properly

... in ConnStateData::clientPinnedConnectionClosed CommClose handler.

Squid enters a buggy state when an idle connection pinned to a peer closes:

 - The ConnStateData::clientPinnedConnectionRead, the pinned peer
   connection read handler, is called with the io.flag set to
   Comm::ERR_CLOSING. The read handler does not close the peer
   Comm::Connection object. This is correct and expected -- the I/O
   handler must exit on ERR_CLOSING without doing anything.

 - The ConnStateData::clientPinnedConnectionClosed close handler is called,
   but it does not close the peer Comm::Connection object either. Again,
   this is correct and expected -- the close handler is not the place to
   close a being-closed connection.

 - The corresponding fde object is marked as closed (fde::flags.open
   is false), but the peer Comm::Connection object is still open
   (Comm::Connection.fd >= 0)! From this point on, we have an inconsistency
   between the peer Comm::Connection object state and the real world.

 - When the ConnStateData::pinning::serverConnection object is later
   destroyed (by refcounting), it will try to close its fd. If that fd
   is already in use (e.g., by another Comm::Connection), bad things
   happen (crashes, segfaults, etc). Otherwise (i.e., if that fd is
   not open), comm_close may cry about BUG 3556 (or worse).

To fix this problem, we must not allow Comm::Connections to get out
of sync with fd_table, even when a descriptor is closed without going
through Connection::close(). There are two ways to accomplished that:

 * Change Comm to always store Comm::Connections and similar high-level
   objects instead of fdes. This is a huge change that has been long on
   the TODO list (those "other high-level objects" is on of the primary
   obstacles there because not everything with a FD is a Connection).

 * Notify Comm::Connections about closure in their closing handlers
   (this change). This design relies on every Comm::Connection having
   a close handler that notifies it. It may take us some time to reach
   that goal, but this change is the first step providing the necessary
   API, a known bug fix, and a few preventive changes.

This change:

 - Adds a new Comm::Connection::noteClosure() method to inform the
   Comm::Connection object that somebody is closing its FD.

 - Uses the new method inside ConnStateData::clientPinnedConnectionClosed
   handler to inform the ConnStateData::pinning::serverConnection object
   that its FD is being closed.

 - Replaces comm_close calls which may cause bug #3329 in other places with
   Comm::Connection->close() calls.

Initially based on Nathan Hoad research for bug 3329.

This is a Measurement Factory project.

10 years ago3.5.5 SQUID_3_5_5
Amos Jeffries [Thu, 28 May 2015 11:01:47 +0000 (04:01 -0700)] 
3.5.5

10 years agoPortability: migrate auto_ptr to C++11 unique_ptr
Amos Jeffries [Wed, 27 May 2015 23:28:09 +0000 (16:28 -0700)] 
Portability: migrate auto_ptr to C++11 unique_ptr

Improving the backward compatibility workaround for older compilers.

This is required for GCC 5.x which does not include any auto_ptr support
or compatibility at all.

This does apply for 3.5 where C++11 support is still optional, since it
is the portability definition to allow patch back-ports.