On 06.01.2017 15:27, Amos Jeffries wrote:
As a result, the code responsible for lower-case
transformation was not executed.

That is intentional behaviour for several reasons;

1) it improves transparency and reduces risks from proxy fingerprinting by systems probing the URI scheme handling by the transport agents (ie, fingerprinting Squid).

2) unknown URI schemes are not necessarily handled properly as case-insensitive by the experimental agents sending and receiving the messages.

also, (and more importantly);

The patch does not change this, i.e., "unknown" images are still stored without
down-casing.


3) the transport protocol label and URI scheme label are still conflated. The scheme down-casing procedure is _only_ applicable when translating from ProtocolType_str labels (upper case) to scheme label (lower case).

To avoid misunderstanding I pay your attention that the unpatched Squid did not down-case at all (i.e. for known ProtocolType_str schemes too). In other words, when receiving HTTP://example.com "HTTP" was not down-cased. Just this violates HTTP caching rules: two different cache entries were created for HTTP://example.com
and http://example.com requests.



4) storing the down-cased string for registered protocols of each URI avoids many explicit down-casing operations on use/display of the URI scheme. Note that is specific to the known protocols.

- There are many more points of code displaying the scheme than setting it. So this is a significant performance gain despite the overhead of allocating and own-casing a new SBuf per UriScheme object your patch notes with an XXX.

I am not against allocating and storing down-cased SBuf "image_" (for performance sake). The related XXX is about allocating SBuf which we probably can avoid in future optimization. For example, we could do this by converting ProtocolType_str to a const array of SBufs, thus
avoiding image_ member allocation when dealing with known protocols.



There are a couple of XXX and one of them (about "broken caller" for
PROTO_NONE) needs clarification. This caller uses PROTO_NONE
(i.e., absent scheme) together with "http" scheme image inside
clientReplyContext::createStoreEntry() which looks inconsistent and
probably is a bug. Am I missing anything there?

Thats an odd case. I'm not exactly sure what we should be doing there. Thus the unusual parameter combo. It was done that way to minimize breakage with old code - so the request can be detected as missing scheme (avoid confusing with a real HTTP URL) if anything tries to compare it, but still generates a reasonably correct URL if its dumped to store files.


Since you agree that it is an "odd" case (and we are not going to fix it right now) I would leave
the "broken caller" XXX.

Please note that the major problem here is probably the caching problem as I noted above. I have not fully investigated whether it has security aspects, i.e., affects some URL based ACLs
while comparing with stored URLs.


Eduard.

_______________________________________________
squid-dev mailing list
[email protected]
http://lists.squid-cache.org/listinfo/squid-dev

Reply via email to