[master] eb34f7d Turn {be}req.hash into a BLOB
Federico G. Schwindt
fgsch at lodoss.net
Mon Sep 4 16:46:10 CEST 2017
commit eb34f7dd5b3afcb9ef9df002f63655180694dc5f
Author: Federico G. Schwindt <fgsch at lodoss.net>
Date: Mon Sep 4 15:06:58 2017 +0100
Turn {be}req.hash into a BLOB
Fixes #2402.
diff --git a/bin/varnishd/cache/cache_vrt_var.c b/bin/varnishd/cache/cache_vrt_var.c
index 42f93b6..243a814 100644
--- a/bin/varnishd/cache/cache_vrt_var.c
+++ b/bin/varnishd/cache/cache_vrt_var.c
@@ -768,34 +768,32 @@ VRT_BODY_L(resp)
/*--------------------------------------------------------------------*/
-static const char *
-vrt_hash(VRT_CTX, uint8_t *digest)
-{
- char *p;
- int i;
-
- p = WS_Alloc(ctx->ws, SHA256_LEN * 2 + 1);
- if (p == NULL)
- return (NULL);
- for (i = 0; i < SHA256_LEN; i++)
- sprintf(&p[i * 2], "%02x", digest[i]);
+static struct vmod_priv *
+vrt_do_blob(VRT_CTX, uint8_t *digest)
+{
+ struct vmod_priv *p;
+ p = (void *)WS_Alloc(ctx->ws, sizeof *p);
+ AN(p);
+ memset(p, 0, sizeof *p);
+ p->len = DIGEST_LEN;
+ p->priv = WS_Copy(ctx->ws, digest, DIGEST_LEN);
return (p);
}
-const char *
+VCL_BLOB
VRT_r_req_hash(VRT_CTX)
{
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(ctx->req, REQ_MAGIC);
- return (vrt_hash(ctx, ctx->req->digest));
+ return (vrt_do_blob(ctx, ctx->req->digest));
}
-const char *
+VCL_BLOB
VRT_r_bereq_hash(VRT_CTX)
{
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(ctx->bo, BUSYOBJ_MAGIC);
- return (vrt_hash(ctx, ctx->bo->digest));
+ return (vrt_do_blob(ctx, ctx->bo->digest));
}
/*--------------------------------------------------------------------*/
diff --git a/bin/varnishtest/tests/b00051.vtc b/bin/varnishtest/tests/b00051.vtc
index 1863850..1ec12a1 100644
--- a/bin/varnishtest/tests/b00051.vtc
+++ b/bin/varnishtest/tests/b00051.vtc
@@ -6,11 +6,12 @@ server s1 {
} -start
varnish v1 -vcl+backend {
+ import vtc;
sub vcl_backend_response {
- set beresp.http.bereq_hash = bereq.hash;
+ set beresp.http.bereq_hash = vtc.blob2hex(bereq.hash);
}
sub vcl_deliver {
- set resp.http.req_hash = req.hash;
+ set resp.http.req_hash = vtc.blob2hex(req.hash);
}
} -start
diff --git a/bin/varnishtest/tests/v00020.vtc b/bin/varnishtest/tests/v00020.vtc
index b113669..77dcefa 100644
--- a/bin/varnishtest/tests/v00020.vtc
+++ b/bin/varnishtest/tests/v00020.vtc
@@ -220,15 +220,17 @@ varnish v1 -errvcl {Function returns VOID} {
varnish v1 -errvcl {'req.hash': Not available in method 'vcl_recv'.} {
backend b { .host = "127.0.0.1"; }
+ import vtc;
sub vcl_recv {
- set req.http.foo = req.hash;
+ set req.http.foo = vtc.blob2hex(req.hash);
}
}
varnish v1 -errvcl {'req.hash': Not available in method 'vcl_hash'.} {
backend b { .host = "127.0.0.1"; }
+ import vtc;
sub vcl_hash {
- set req.http.foo = req.hash;
+ set req.http.foo = vtc.blob2hex(req.hash);
}
}
diff --git a/lib/libvcc/generate.py b/lib/libvcc/generate.py
index 8bbd1e6..64e2167 100755
--- a/lib/libvcc/generate.py
+++ b/lib/libvcc/generate.py
@@ -234,7 +234,7 @@ sp_variables = [
"""
),
('req.hash',
- 'STRING',
+ 'BLOB',
('hit', 'miss', 'pass', 'purge', 'deliver', ),
(), """
The hash key of this request.
@@ -428,7 +428,7 @@ sp_variables = [
"""
),
('bereq.hash',
- 'STRING',
+ 'BLOB',
('pipe', 'backend', ),
(), """
The hash key of this request.
More information about the varnish-commit
mailing list