[master] 7cbfb2d Log hash_data() input when the Hash bit is set

Federico G. Schwindt fgsch at lodoss.net
Mon Mar 23 16:57:26 CET 2015


commit 7cbfb2d7f650538a01225329723ed51bc9f5db80
Author: Federico G. Schwindt <fgsch at lodoss.net>
Date:   Mon Mar 23 12:39:19 2015 +0000

    Log hash_data() input when the Hash bit is set
    
    Fixes #1693.

diff --git a/bin/varnishd/cache/cache_hash.c b/bin/varnishd/cache/cache_hash.c
index b3d3ac8..ccd80ad 100644
--- a/bin/varnishd/cache/cache_hash.c
+++ b/bin/varnishd/cache/cache_hash.c
@@ -187,14 +187,15 @@ HSH_DeleteObjHead(struct worker *wrk, struct objhead *oh)
 }
 
 void
-HSH_AddString(const struct req *req, const char *str)
+HSH_AddString(struct req *req, const char *str)
 {
 
 	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
 	AN(req->sha256ctx);
-	if (str != NULL)
+	if (str != NULL) {
 		SHA256_Update(req->sha256ctx, str, strlen(str));
-	else
+		VSLb(req->vsl, SLT_Hash, "%s", str);
+	} else
 		SHA256_Update(req->sha256ctx, &str, sizeof str);
 }
 
diff --git a/bin/varnishd/cache/cache_vrt.c b/bin/varnishd/cache/cache_vrt.c
index 6851bc0..63d2502 100644
--- a/bin/varnishd/cache/cache_vrt.c
+++ b/bin/varnishd/cache/cache_vrt.c
@@ -271,7 +271,6 @@ VRT_hashdata(VRT_CTX, const char *str, ...)
 		if (p == vrt_magic_string_end)
 			break;
 		HSH_AddString(ctx->req, p);
-		VSLb(ctx->vsl, SLT_Hash, "%s", str);
 	}
 	va_end(ap);
 	/*
diff --git a/bin/varnishd/hash/hash_slinger.h b/bin/varnishd/hash/hash_slinger.h
index 189f938..6f546ff 100644
--- a/bin/varnishd/hash/hash_slinger.h
+++ b/bin/varnishd/hash/hash_slinger.h
@@ -67,7 +67,7 @@ enum lookup_e HSH_Lookup(struct req *, struct objcore **, struct objcore **,
     int wait_for_busy, int always_insert);
 void HSH_Ref(struct objcore *o);
 void HSH_Init(const struct hash_slinger *slinger);
-void HSH_AddString(const struct req *, const char *str);
+void HSH_AddString(struct req *, const char *str);
 void HSH_Insert(struct worker *, const void *hash, struct objcore *);
 void HSH_Purge(struct worker *, struct objhead *, double ttl, double grace,
     double keep);
diff --git a/bin/varnishtest/tests/r01693.vtc b/bin/varnishtest/tests/r01693.vtc
new file mode 100644
index 0000000..f16d620
--- /dev/null
+++ b/bin/varnishtest/tests/r01693.vtc
@@ -0,0 +1,27 @@
+varnishtest "Check hash is logged when the Hash bit is set"
+
+server s1 {
+	rxreq
+	txresp
+} -start
+
+varnish v1 -arg "-p vsl_mask=+Hash" -vcl+backend {
+	sub vcl_hash {
+		hash_data("1" + req.http.foo + "3");
+	}
+} -start
+
+logexpect l1 -v v1 {
+	expect * 1001 Hash "1"
+	expect 0 1001 Hash "bar"
+	expect 0 1001 Hash "3"
+	expect 0 1001 Hash "/"
+	expect 0 1001 Hash "127.0.0.1"
+} -start
+
+client c1 {
+	txreq -hdr "foo: bar"
+	rxresp
+} -run
+
+logexpect l1 -wait



More information about the varnish-commit mailing list