[PATCH] substring matching in std
Per Buer
perbu at varnish-software.com
Sat Sep 20 11:12:39 CEST 2014
bin/varnishtest/tests/m00018.vtc | 34 ++++++++++++++++++++++++++++++++++
lib/libvmod_std/vmod.vcc | 12 +++++++++++-
lib/libvmod_std/vmod_std.c | 14 ++++++++++++++
3 files changed, 59 insertions(+), 1 deletion(-)
create mode 100644 bin/varnishtest/tests/m00018.vtc
diff --git a/bin/varnishtest/tests/m00018.vtc
b/bin/varnishtest/tests/m00018.vtc
new file mode 100644
index 0000000..af00716
--- /dev/null
+++ b/bin/varnishtest/tests/m00018.vtc
@@ -0,0 +1,34 @@
+varnishtest "Test substring matching in std"
+
+server s1 {
+ rxreq
+ txresp
+
+ rxreq
+ txresp
+} -start
+
+varnish v1 -vcl+backend {
+ import ${vmod_std};
+
+ sub vcl_deliver {
+ if (std.substr(req.url, "foo")) {
+ set resp.http.sub = "found";
+ } else {
+ set resp.http.sub = "not found";
+ }
+
+ }
+} -start
+
+client c1 {
+ txreq -url "/foobar"
+ rxresp
+ expect resp.http.sub == "found"
+
+
+ txreq -url "/quux"
+ rxresp
+ expect resp.http.sub == "not found"
+} -run
+
diff --git a/lib/libvmod_std/vmod.vcc b/lib/libvmod_std/vmod.vcc
index fbc082b..e59c7a4 100644
--- a/lib/libvmod_std/vmod.vcc
+++ b/lib/libvmod_std/vmod.vcc
@@ -195,7 +195,6 @@ $Function STRING querysort(STRING)
Description
Sorts the querystring for cache normalization purposes.
-
Example
set req.url = std.querysort(req.url);
@@ -208,6 +207,17 @@ Example
This will cache the req.body if its size is smaller than 1KB.
+$Function BOOL substr(STRING, STRING)
+
+Description
+ Returns true if the second string is a substring of the first
+ string. Note that the comparison is case sensitive. You can
+ use the tolower function on both strings if you want case
+ insensitivity.
+Example
+ if (std.substr(req.url, req.http.x-restrict))
+
+
SEE ALSO
========
diff --git a/lib/libvmod_std/vmod_std.c b/lib/libvmod_std/vmod_std.c
index 8872a1c..8a89bb8 100644
--- a/lib/libvmod_std/vmod_std.c
+++ b/lib/libvmod_std/vmod_std.c
@@ -239,3 +239,17 @@ vmod_cache_req_body(const struct vrt_ctx *ctx,
VCL_BYTES size)
result = VRT_CacheReqBody(ctx, size);
VSLb(ctx->vsl, SLT_Debug,"VRT_CacheReqBody(%zu): %d", (size_t)size,
result);
}
+
+VCL_BOOL __match_proto__(td_std_substr)
+vmod_substr(const struct vrt_ctx *ctx, VCL_STRING mstr, VCL_STRING msubstr)
+{
+
+ CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+ char *match = strstr(mstr, msubstr);
+
+ if (match)
+ return(1);
+ else
+ return(0);
+}
+
--
1.9.3 (Apple Git-50)+GitX
--
*Per Buer*
CTO | Varnish Software AS
Cell: +47 95839117
We Make Websites Fly!
www.varnish-software.com
[image: Register now]
<http://info.varnish-software.com/varnish-summits-autumn-2014-registration>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.varnish-cache.org/lists/pipermail/varnish-dev/attachments/20140920/d0c917f1/attachment.html>
More information about the varnish-dev
mailing list