Commit 59402fee authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Test that we know the purge variable when it is compiled in.



git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@3543 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent 984919d2
...@@ -33,6 +33,26 @@ varnish v1 -vcl+backend { ...@@ -33,6 +33,26 @@ varnish v1 -vcl+backend {
} }
} -start } -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 # Fetch into cache
client c1 { client c1 {
txreq -url "/foo" txreq -url "/foo"
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include "config.h" #include "config.h"
#include <stdio.h> #include <stdio.h>
#include <string.h>
#include "vsb.h" #include "vsb.h"
...@@ -347,13 +348,23 @@ parse_unset(struct tokenlist *tl) ...@@ -347,13 +348,23 @@ parse_unset(struct tokenlist *tl)
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
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 static void
parse_purge(struct tokenlist *tl) parse_purge(struct tokenlist *tl)
{ {
const struct purge_var *pv;
vcc_NextToken(tl); vcc_NextToken(tl);
Expect(tl, '('); Expect(tl, '(');
vcc_NextToken(tl); vcc_NextToken(tl);
...@@ -362,6 +373,25 @@ parse_purge(struct tokenlist *tl) ...@@ -362,6 +373,25 @@ parse_purge(struct tokenlist *tl)
tl->indent += INDENT; tl->indent += INDENT;
while (1) { while (1) {
ExpectErr(tl, VAR); 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)); Fb(tl, 1, " \"%.*s\",\n", PF(tl->t));
vcc_NextToken(tl); vcc_NextToken(tl);
switch(tl->t->tok) { switch(tl->t->tok) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment