[4.1] 194acd4 Allow VCL set Last-Modified to be used for I-M-S processing.

PÃ¥l Hermunn Johansen hermunn at varnish-software.com
Thu Jun 9 16:34:07 CEST 2016


commit 194acd4f0a9e0483b8ae82ad58ed726129cd03eb
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed May 18 07:03:30 2016 +0000

    Allow VCL set Last-Modified to be used for I-M-S processing.
    
    Submitted by:	rezan
    Fixes:		#1931

diff --git a/bin/varnishd/cache/cache_rfc2616.c b/bin/varnishd/cache/cache_rfc2616.c
index cb089cf..650bcf5 100644
--- a/bin/varnishd/cache/cache_rfc2616.c
+++ b/bin/varnishd/cache/cache_rfc2616.c
@@ -254,7 +254,7 @@ rfc2616_weak_compare(const char *p, const char *e)
 int
 RFC2616_Do_Cond(const struct req *req)
 {
-	const char *p, *e;
+	const char *p, *e, *l;
 	double ims, lm;
 
 	/*
@@ -274,6 +274,12 @@ RFC2616_Do_Cond(const struct req *req)
 		ims = VTIM_parse(p);
 		if (!ims || ims > req->t_req)	/* [RFC7232 3.3 p16] */
 			return (0);
+		if (http_GetHdr(req->resp, H_Last_Modified, &l)) {
+			lm = VTIM_parse(l);
+			if (!lm || lm > ims)
+				return (0);
+			return (1);
+		}
 		AZ(ObjGetDouble(req->wrk, req->objcore, OA_LASTMODIFIED, &lm));
 		if (lm > ims)
 			return (0);
diff --git a/bin/varnishtest/tests/v00047.vtc b/bin/varnishtest/tests/v00047.vtc
new file mode 100644
index 0000000..9ca2a6c
--- /dev/null
+++ b/bin/varnishtest/tests/v00047.vtc
@@ -0,0 +1,40 @@
+varnishtest "Changing Last Modified in vcl_deliver"
+ 
+server s1 {
+	rxreq
+	txresp -hdr "Last-Modified: Wed, 27 Apr 2016 14:00:00 GMT"
+} -start
+ 
+varnish v1 -vcl+backend {
+	sub vcl_deliver {
+		if (req.http.deliver == "modify") {
+			set resp.http.Last-Modified = "Wed, 27 Apr 2016 16:00:00 GMT";
+		}
+	}
+} -start
+ 
+client c1 {
+	txreq
+	rxresp
+	expect resp.status == 200
+
+	txreq -hdr "If-Modified-Since: Wed, 27 Apr 2016 14:00:00 GMT"
+	rxresp
+	expect resp.status == 304
+
+	txreq -hdr "If-Modified-Since: Wed, 27 Apr 2016 12:00:00 GMT"
+	rxresp
+	expect resp.status == 200
+
+	txreq -hdr "If-Modified-Since: Wed, 27 Apr 2016 14:00:00 GMT" -hdr "deliver: modify"
+	rxresp
+	expect resp.status == 200
+
+	txreq -hdr "If-Modified-Since: Wed, 27 Apr 2016 16:00:00 GMT" -hdr "deliver: modify"
+	rxresp
+	expect resp.status == 304
+
+	txreq -hdr "If-Modified-Since: Wed, 27 Apr 2016 18:00:00 GMT" -hdr "deliver: modify"
+	rxresp
+	expect resp.status == 304
+} -run



More information about the varnish-commit mailing list