Files
bpfire/src/patches/squid/squid-3.5-14126.patch
Matthias Fischer 3c22a549ab squid 3.5.22: latest patches (14123-14126)
Signed-off-by: Matthias Fischer <matthias.fischer@ipfire.org>
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
2016-12-17 17:26:36 +00:00

124 lines
4.4 KiB
Diff

------------------------------------------------------------
revno: 14126
revision-id: squid3@treenet.co.nz-20161215103357-827wow3k1y3k9yql
parent: squid3@treenet.co.nz-20161215093634-ykbs6tv8pdusz7cj
fixes bug: http://bugs.squid-cache.org/show_bug.cgi?id=4169
author: Garri Djavadyan <garryd@comnet.uz>
committer: Amos Jeffries <squid3@treenet.co.nz>
branch nick: 3.5
timestamp: Thu 2016-12-15 23:33:57 +1300
message:
Bug 4169: HIT marked as MISS when If-None-Match does not match
------------------------------------------------------------
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: squid3@treenet.co.nz-20161215103357-827wow3k1y3k9yql
# target_branch: http://bzr.squid-cache.org/bzr/squid3/3.5
# testament_sha1: 258cd3e400bcb137a7bcdf6e7e0240287ea581a3
# timestamp: 2016-12-15 10:34:30 +0000
# source_branch: http://bzr.squid-cache.org/bzr/squid3/3.5
# base_revision_id: squid3@treenet.co.nz-20161215093634-\
# ykbs6tv8pdusz7cj
#
# Begin patch
=== modified file 'src/LogTags.h'
--- src/LogTags.h 2016-10-09 19:47:26 +0000
+++ src/LogTags.h 2016-12-15 10:33:57 +0000
@@ -28,6 +28,7 @@
LOG_TCP_REFRESH_IGNORED, // refresh from origin ignored, stale entry sent
LOG_TCP_CLIENT_REFRESH_MISS,
LOG_TCP_IMS_HIT,
+ LOG_TCP_INM_HIT,
LOG_TCP_SWAPFAIL_MISS,
LOG_TCP_NEGATIVE_HIT,
LOG_TCP_MEM_HIT,
@@ -54,6 +55,7 @@
return
(code == LOG_TCP_HIT) ||
(code == LOG_TCP_IMS_HIT) ||
+ (code == LOG_TCP_INM_HIT) ||
(code == LOG_TCP_REFRESH_FAIL_OLD) ||
(code == LOG_TCP_REFRESH_UNMODIFIED) ||
(code == LOG_TCP_NEGATIVE_HIT) ||
=== modified file 'src/client_side.cc'
--- src/client_side.cc 2016-12-09 01:58:33 +0000
+++ src/client_side.cc 2016-12-15 10:33:57 +0000
@@ -429,6 +429,7 @@
statCounter.client_http.nearHitSvcTime.count(svc_time);
break;
+ case LOG_TCP_INM_HIT:
case LOG_TCP_IMS_HIT:
statCounter.client_http.nearMissSvcTime.count(svc_time);
break;
=== modified file 'src/client_side_reply.cc'
--- src/client_side_reply.cc 2016-12-15 09:36:34 +0000
+++ src/client_side_reply.cc 2016-12-15 10:33:57 +0000
@@ -778,40 +778,27 @@
return true;
}
- bool matchedIfNoneMatch = false;
if (r.header.has(HDR_IF_NONE_MATCH)) {
- if (!e->hasIfNoneMatchEtag(r)) {
- // RFC 2616: ignore IMS if If-None-Match did not match
- r.flags.ims = false;
- r.ims = -1;
- r.imslen = 0;
- r.header.delById(HDR_IF_MODIFIED_SINCE);
- http->logType = LOG_TCP_MISS;
- sendMoreData(result);
- return true;
- }
+ // RFC 7232: If-None-Match recipient MUST ignore IMS
+ r.flags.ims = false;
+ r.ims = -1;
+ r.imslen = 0;
+ r.header.delById(HDR_IF_MODIFIED_SINCE);
- if (!r.flags.ims) {
- // RFC 2616: if If-None-Match matched and there is no IMS,
- // reply with 304 Not Modified or 412 Precondition Failed
+ if (e->hasIfNoneMatchEtag(r)) {
sendNotModifiedOrPreconditionFailedError();
return true;
}
- // otherwise check IMS below to decide if we reply with 304 or 412
- matchedIfNoneMatch = true;
+ // None-Match is true (no ETag matched); treat as an unconditional hit
+ return false;
}
if (r.flags.ims) {
// handle If-Modified-Since requests from the client
if (e->modifiedSince(r.ims, r.imslen)) {
- http->logType = LOG_TCP_IMS_HIT;
- sendMoreData(result);
-
- } else if (matchedIfNoneMatch) {
- // If-None-Match matched, reply with 304 Not Modified or
- // 412 Precondition Failed
- sendNotModifiedOrPreconditionFailedError();
+ // Modified-Since is true; treat as an unconditional hit
+ return false;
} else {
// otherwise reply with 304 Not Modified
@@ -1974,7 +1961,12 @@
StoreEntry *e = http->storeEntry();
const time_t timestamp = e->timestamp;
HttpReply *const temprep = e->getReply()->make304();
- http->logType = LOG_TCP_IMS_HIT;
+ // log as TCP_INM_HIT if code 304 generated for
+ // If-None-Match request
+ if (!http->request->flags.ims)
+ http->logType = LOG_TCP_INM_HIT;
+ else
+ http->logType = LOG_TCP_IMS_HIT;
removeClientStoreReference(&sc, http);
createStoreEntry(http->request->method, RequestFlags());
e = http->storeEntry();