Amos Jeffries [Sun, 8 Mar 2009 11:46:19 +0000 (00:46 +1300)]
Author: Alex Rousskov <rousskov@measurement-factory.com>
SourceLayout: src/base, take 0 with tweaks
Added src/base directory for fundamental, commonly-used code pieces that are
not large enough to warrant their own directories. Currently base/ contains
the beginning of AsyncCalls hierarchy, which may eventually get its own
directory.
Removed src/ip from the top-level SUBDIRS list. Made cf_gen compile without
libip.
Started building makefile includes, to be used in subdir makefiles:
src/Common.am and src/TestHeaders.am.
Amos Jeffries [Tue, 3 Mar 2009 02:52:23 +0000 (15:52 +1300)]
SourceLayout: setup libcompat.la for portability primitives
This library forms an underlayer which intends to be seamless for the rest
of Squid and the various OS on which it runs.
For code to be eligible for inclusion at this lowest layer it must be
emulating or wrapping a piece of OS-provided API for use on other OS
where it is not provided.
Shared code which is unique to Squid is not portability.
API mappings which are OS-specific are all defined for their particular
OS in the os/* files.
API mappings which are provided by multiple OS or support libraries
are mapped in compat/*
Emulators are acceptable, though the aim should be to inline or template
most of the code so only .h are really needed.
Amos Jeffries [Sun, 1 Mar 2009 03:25:23 +0000 (16:25 +1300)]
Author: Mark Nottingham <mnot@pobox.com>
Bug 2599: Idempotent start
As discussed on squid-dev, Squid shouldn't return a shell error when:
- starting squid, if it's already running
- stopping squid, if it isn't running
This is to make writing scripts that control squid easier.
Note that it should still notify the user, and should not affect other
operations (e.g., kill, rotate, parse).
Amos Jeffries [Sun, 1 Mar 2009 03:06:42 +0000 (16:06 +1300)]
Author: Christos Tsantilas <chtsanti@users.sourceforge.net>
Bug 2591: adaptation_access does not work
An access checklist required for each service set, so we need only one
AccessRule object for each adaptation service set
This patch:
- When parses an adaptation_access line, checks if an AccessRule object exists
for the service set and if yes append the access checklist to this object else
creates a new AccessRule object for this service set
- The AccessRule constructor takes as argument now the reference service set
name (groupId)
- The new Adaptation::FindRuleByGroupId method created. This method returns
the AccessRule object for a service set using its name (groupId)
- When an AccessRule for a service group exist in AccessRules
list do not add it again in the list.
Amos Jeffries [Sun, 1 Mar 2009 02:57:49 +0000 (15:57 +1300)]
Author: Francesco Chemolli <kinkie@squid-cache.org>
String NG : basic SquidString updates pt 2
- finished the analysis of raw buffer exporting, divided among c-sting
and raw-buf access clients
- general sanitization
- reversal of some wrongly-renamed variables and comments
- implementation of SQUIDSTRINGPRINT and SQUIDSTRINGPH (placeholder) macros and
psize() function for printf-style calls
- implementation of, and migration to, String::size_type and String::npos
- de-inlining of pos(), rpos(), find() and rfind() calls
- implementation and use of a proper substr() call
Amos Jeffries [Wed, 18 Feb 2009 01:30:35 +0000 (14:30 +1300)]
Bug 2287: Send a 505 on requests with unsupported HTTP versions
Squid currenty accepts requests with well-formed 0.9, 1.0, and 1.1 versions
and one special case of missing version (assumed to be 0.9 legacy requests)
All others including well-formed 0.x < 0.9 are now aborted with a
HTTP 1.1 compliant 505 Version Not Supported error.
Amos Jeffries [Wed, 18 Feb 2009 01:19:56 +0000 (14:19 +1300)]
Bug 419: Hop by Hop headers MUST NOT be forwarded
This attempt builds on Henriks re-work of the client-request to
server-request cloning done since the last attempt was made at closing
this bug.
Adds all RFC 2616 listed Hop-by-hop headers to the clone selection test
as 'ignore' cases unless otherwise handled already.
The test for whether they exist in Connection: is moved to the default
case as an inline. Which reduces the code a fair bit and prevents the
side case where a specially handled header gets ignored because the
client explicitly added it to Connection: when it did not have to.
This method sets up a background default of not passing the hop-by-hop
headers while allowing any code which explicitly sets or copies the
headers across to operate as before without interference.
Amos Jeffries [Sun, 15 Feb 2009 13:01:35 +0000 (02:01 +1300)]
Author: Francesco Chemolli <kinkie@squid-cache.org>
Cleanups: Remove code handling K&R-style varargs.
It should be a safe enough bet that any C++ compiler can handle STDC-style varargs.
This patch removes all the (mostly spaghetti) code which used to handle K&R-style varargs calls.
Amos Jeffries [Sun, 8 Feb 2009 10:09:43 +0000 (23:09 +1300)]
Author: Francesco Chemolli <kinkie@squid-cache.org>
String NG : fixes initial merge, take 2
Compared to the retired first attempt it:
- fixes the issues Tsantilas Christos found out about
- implements String::find
- some more users analyzed and fixed.
Amos Jeffries [Sun, 8 Feb 2009 08:06:19 +0000 (21:06 +1300)]
Author: Henrik Nordstrom <henrik@henriknordstrom.net>
external_acl_type %<{ and %USER_CERT_ / %CA_CERT_ parsing brokenness
The parsing of external_acl_type formats was sligtly broken, destroying
%<{ (request header) if SSL was enabled and never able to parse %USER_CERT_
or %CA_CERT_..
Also clarified request/reply header syntax slightly
Amos Jeffries [Sun, 8 Feb 2009 06:32:54 +0000 (19:32 +1300)]
Bug 2526: pt 2: default ALLOW when no list specified.
Fallout from audit of access control checks.
- Some got sensible defaults added
- many got slightly more optimized defaults
- documented the ACLChecklist interface and some API cleanups
Amos Jeffries [Wed, 4 Feb 2009 12:03:01 +0000 (01:03 +1300)]
Author: Henrik Nordstrom <henrik@henriknordstrom.net>
Move -DDFAULT_SQUID_DATA_DIR & CONFIG_DIR from CFLAGS to DEFS
For some reason gcc on OpenBSD does not like having these in CFLAGS
when running configure. However works fine having them expanded in
src/Makefile DEFS variable just like -DDEFAULT_SQUID_CONFIG_FILE
Amos Jeffries [Mon, 2 Feb 2009 11:16:21 +0000 (00:16 +1300)]
Author: Christos Tsantilas <chtsanti@users.sourceforge.net>
Bug 2583: pure virtual method called
Inside the Adaptation::Initiator::announceInitiatorAbort method the check
x==NULL is not enough. We must also check if the x variable (of type Initiate)
is valid.
Amos Jeffries [Mon, 2 Feb 2009 11:00:12 +0000 (00:00 +1300)]
Author: Christos Tsantilas <chtsanti@users.sourceforge.net>
Fix assertion in comm_write from idnsSentQueryVC
The idnsSentQueryVC function called as AsyncCall. There is the possibility
when this function called the fd has start closing but not realy closed yet.
In this case this function will try to do a comm_write (idnsDoSendQueryVC
function) on sockect which closing and an assertion will triggered.
An extra test needed here to test if the socket closing and if yes just return.
Amos Jeffries [Mon, 2 Feb 2009 09:43:27 +0000 (22:43 +1300)]
Author: Christos Tsantilas <chtsanti@users.sourceforge.net>
Bug 2524: Connection close failed on Partial Content
The method ClientSocketContext::socketState in the case of partial content
request when all the expected bytes received and the proxy_keepalive flag is
not set must return STREAM_UNPLANNED_COMPLETE to inform the caller that the
socket should closed.
This patch fixes the bug reported in comment #12 of bug 2505.
In the DeferredReadManager::kickARead method it is possible that the socket in
which refers a DeferredRead object has been closed, but the DeferredReadManager
is not informed yet because the related comm_close handler has not been
executed yet.
This patch checks the socket state and if it is closing just ignore the object.
Do not assert that the close handler being removed must be in
the list because comm_close removes all close handlers before any FD handlers
are fired.
There also seems to be an unrelated(?) problem: comm_remove_close_handler
does not really remove the callback. It only cancels the call. It should
probably remove the callback as well to prevent an unlikely situation where
the close handler list grows "too much".
Amos Jeffries [Mon, 2 Feb 2009 06:57:42 +0000 (19:57 +1300)]
Bug 2524: Connection close failed on Partial Content
The method ClientSocketContext::socketState in the case of partial content
request when all the expected bytes received and the proxy_keepalive flag is
not set must return STREAM_UNPLANNED_COMPLETE to inform the caller that the
socket should closed.
Amos Jeffries [Sun, 1 Feb 2009 10:16:26 +0000 (23:16 +1300)]
Author: Adrian Chadd <adrian@creative.net.au>
Bug 2558: pt 1: Connect forwarding setting error too early
This does not appear to be all of the cause of 2558, but its part of the
problem anyway. Request forwarding should not be setting a connection
failed error page until all attempts at making a connection have failed.
This patch does not correct the place its being set, but clears err before
re-trying a connection.
From IRC:
(13:09:03) adri: no idea about v4-only hostnames
but the bug is still valid; you're creating errors on
the connect fail, but not clearing them before the next connect
Amos Jeffries [Fri, 23 Jan 2009 02:39:22 +0000 (15:39 +1300)]
Regression Fix: rollback bug 2395 fix.
Fixing bug 2395 uncovered a much more serious bug 2558.
It was not found earlier due to bug 2558 being a slow incremental affect
hidden by already-cached objects.
This rollback is intended as a temporary measure until a good fix can be
found for both bugs.
Amos Jeffries [Fri, 23 Jan 2009 02:35:05 +0000 (15:35 +1300)]
Only set Keep-alive once
Enact the TODO of same.
Some re-arrangement has been done to move setting cases which need
functions to be evaluated a lower priority than those which can be set
purely from flags.
Amos Jeffries [Sat, 17 Jan 2009 01:09:01 +0000 (14:09 +1300)]
Author: Regardt van de Vyver <squid@vdvyver.net>
Bug 2555: Fixes to SNMP-MIB
* Modified imports as Integer32 and TEXTUAL-CONVENTION are external defines to
this MIB, it's a compliance issue for validation
* Updated the order of Revisions as the MIB spec requires them to be in reverse
choronological order
* moved the nlanr define to a valid location as it may not be the first defined
item in a module (the MODULE IDENTITY must be)
* Modified various "ACCESS" statements to "MAX-ACCESS" due to changes in the
MIB spec requiring the change of defines.
* Modified various interative table entries to "not-accessible". This is due to
the fact that the root element should not be directly accessed, rather the
generated table entries matching these values. This is not strictly neccesary
but does make the file validate on severity 3 instead of severity 2.
* Modified cacheMedianTime to have a valid range. Ranges are REQUIRED for any
object used as an INDEX
* Modified cachePeerPortHTTP and cachePeerPortIcp to use a new type
"ValidPort". This is to meet a requirement that we cannot define valid port
ranges in a sequence defenition.
* Created a new define ValidPort so that we can specify a range of valid values
for ports
* In some object defines STATUS was set to mandatory, this is however not a
valid MIB STATUS value and has thus been fixed to current. These items
specifically caused the MIBs to fail compile completely.
* cacheClientEntry had a duplicate oid and after checking the source code I
updated its oid to the correct value.
SIDE NOTE:
Squid-2 and 3.0 have a different structure for cachePeerEnty enum. This may
cause some confusion if the squid3 mib is used with older squid releases.
Amos Jeffries [Fri, 16 Jan 2009 15:10:39 +0000 (04:10 +1300)]
Bug 2556: HTCP fails without icp_port
Removes requirement for ICP port to be open for peer UDP queries to take
place.
TODO: Some work still needs to be done to separate the timeout from
icp_timeout and break ICP specific query logics out into icp code files.
But that is just cleanup for later.
Amos Jeffries [Fri, 9 Jan 2009 02:31:47 +0000 (15:31 +1300)]
Author: Francesco Chemolli + Amos Jeffries
Pconn not being used when they should.
A slight misalignment between the keys generated for push and pop of
connections to the waiting pool caused new connections never to match
any of the existing connections.
This patch makes several alterations to achieve a fix:
- reduces the FwdState push logics down into a simple selection in
pconnPush function which previously was a dumb wrapper.
- adds a dump of current hash keys to the cacheManager pconn report
- adds much better debugging to the pconn process at level 48,3 and 48,6
- adds some additional documentation of code to the related call tree
Pconn API after this patch :
The Pconn KEY takes several parameters (host, port, domain, client-ip).
For HTTP requests this is normally generated from the request data of
same name with domain being optional since it may be identical to host.
However for peer-sourced requests this alters slightly and the host:port
fields become the peer NAME and HTTP-PORT.
This means the pconn key in abstract becomes a key to the TCP remote-end of
the link with an optional anchor on the domain being requested.
Amos Jeffries [Fri, 9 Jan 2009 02:16:41 +0000 (15:16 +1300)]
Untangle CacheManager reports from log_fqdn
The fqdnFromAddr() call depends on log_fqdn to generate the FQDN. But
CacheManager needs to always display it whenever available. This removes
the call indirection, dependency and makes Name: field only display when
a name is available.
Amos Jeffries [Mon, 5 Jan 2009 03:53:51 +0000 (16:53 +1300)]
Fix pinger immediate shutdowns
pinger runs okay when started manually, but shuts down after a sucessful
startup when run by Squid. This was due to the last_request timer being
left at zero/epoch.
Amos Jeffries [Fri, 26 Dec 2008 21:20:12 +0000 (10:20 +1300)]
Author: Alexander Lukyanov <lav@yar.ru>
Bug 2330: allow keep-alive+chunked; don't add max-age for no-cache
Attached patch enables keep-alive for chunked transfer-encoding, as such
encoding allows to determine reply body end.
Also the patch disables adding of max-age to requests with no-cache flag. It
saves a few bytes and also makes less difference between the incoming and
outgoing requests. Max-age is obviously not useful for no-cache requests.
NP: amended after bug discussion to also skip adding of no-cache on
internal calculation from local state which may not be correct
down the line in other caches. (nocache includes local config settings).
Amos Jeffries [Fri, 26 Dec 2008 21:15:59 +0000 (10:15 +1300)]
Author: Christos Tsantilas <chtsanti@users.sourceforge.net>
Bug 2542: squid fails to resume dowload (and breaks content) when any ICAP filter is attached
In the case the icap client is enabled, the
ServerStateData::handleMoreAdaptedBodyAvailable called to handle the incoming
data from the ICAP server. Inside this function a StoreIOBuffer created to pass
the data to the related StoreEntry.
The bug is that the offset passed to the StoreIOBuffer did not count the 206
response offsets.
This patch uses the ServerStateData::currentOffset to compute the correct
offset (which also used in the case the icap client is not enabled).