r3543 - in trunk/varnish-cache: bin/varnishtest/tests lib/libvcl

phk at projects.linpro.no phk at projects.linpro.no
Sat Jan 24 13:56:27 CET 2009


Author: phk
Date: 2009-01-24 13:56:27 +0100 (Sat, 24 Jan 2009)
New Revision: 3543

Modified:
   trunk/varnish-cache/bin/varnishtest/tests/c00022.vtc
   trunk/varnish-cache/lib/libvcl/vcc_action.c
Log:
Test that we know the purge variable when it is compiled in.



Modified: trunk/varnish-cache/bin/varnishtest/tests/c00022.vtc
===================================================================
--- trunk/varnish-cache/bin/varnishtest/tests/c00022.vtc	2009-01-24 10:36:46 UTC (rev 3542)
+++ trunk/varnish-cache/bin/varnishtest/tests/c00022.vtc	2009-01-24 12:56:27 UTC (rev 3543)
@@ -33,6 +33,26 @@
 	}
 } -start
 
+# Trigger syntax check 
+varnish v1 -badvcl {
+	backend foo {
+		.host = "127.0.0.1";
+	}
+	sub vcl_recv {
+		purge (req.foo == req.url);
+	}
+}
+
+# Trigger syntax check 
+varnish v1 -badvcl {
+	backend foo {
+		.host = "127.0.0.1";
+	}
+	sub vcl_recv {
+		purge (req.http. == req.url);
+	}
+}
+
 # Fetch into cache
 client c1 {
 	txreq -url "/foo"

Modified: trunk/varnish-cache/lib/libvcl/vcc_action.c
===================================================================
--- trunk/varnish-cache/lib/libvcl/vcc_action.c	2009-01-24 10:36:46 UTC (rev 3542)
+++ trunk/varnish-cache/lib/libvcl/vcc_action.c	2009-01-24 12:56:27 UTC (rev 3543)
@@ -32,6 +32,7 @@
 #include "config.h"
 
 #include <stdio.h>
+#include <string.h>
 
 #include "vsb.h"
 
@@ -347,13 +348,23 @@
 
 /*--------------------------------------------------------------------*/
 
+static const struct purge_var {
+	const char	*name;
+	unsigned	flag;
+} purge_var[] = {
+#define PVAR(a, b, c)   { a, b },
+#include "purge_vars.h"
+#undef PVAR     
+        { 0, 0 }
+};
+
 static void
 parse_purge(struct tokenlist *tl)
 {
+	const struct purge_var *pv;
 
 	vcc_NextToken(tl);
 
-
 	Expect(tl, '(');
 	vcc_NextToken(tl);
 
@@ -362,6 +373,25 @@
 		tl->indent += INDENT;
 		while (1) {
 			ExpectErr(tl, VAR);
+
+			/* Check valididity of purge variable */
+			for (pv = purge_var; pv->name != NULL; pv++) {
+				if (!strncmp(pv->name, tl->t->b,
+				    strlen(pv->name)))
+					break;
+			}
+			if (pv->name == NULL) {
+				vsb_printf(tl->sb, "Unknown purge variable.");
+				vcc_ErrWhere(tl, tl->t);
+				return;
+			}
+			if (pv->flag &&
+			    tl->t->b + strlen(pv->name) >= tl->t->e) {
+				vsb_printf(tl->sb, "Missing header name.");
+				vcc_ErrWhere(tl, tl->t);
+				return;
+			}
+
 			Fb(tl, 1, "  \"%.*s\",\n", PF(tl->t));
 			vcc_NextToken(tl);
 			switch(tl->t->tok) {



More information about the varnish-commit mailing list