Commit 57ff1484 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Remove the hybrid VCL ban() syntax, it was only confusing everybody.

parent 496a4d6d
...@@ -21,7 +21,7 @@ server s1 { ...@@ -21,7 +21,7 @@ server s1 {
varnish v1 -vcl+backend { varnish v1 -vcl+backend {
sub vcl_recv { sub vcl_recv {
if (req.request == "PURGE") { if (req.request == "PURGE") {
ban (req.url == req.url); ban ("req.url == " + req.url);
error 410; error 410;
} }
if (req.request == "PURGESTR") { if (req.request == "PURGESTR") {
...@@ -31,26 +31,6 @@ varnish v1 -vcl+backend { ...@@ -31,26 +31,6 @@ varnish v1 -vcl+backend {
} }
} -start } -start
# Trigger syntax check
varnish v1 -badvcl {
backend foo {
.host = "127.0.0.1";
}
sub vcl_recv {
ban (req.foo == req.url);
}
}
# Trigger syntax check
varnish v1 -badvcl {
backend foo {
.host = "127.0.0.1";
}
sub vcl_recv {
ban (req.http. == req.url);
}
}
# Fetch into cache # Fetch into cache
client c1 { client c1 {
txreq -url "/foo" txreq -url "/foo"
......
...@@ -176,84 +176,19 @@ parse_unset(struct vcc *tl) ...@@ -176,84 +176,19 @@ parse_unset(struct vcc *tl)
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
static const struct ban_var {
const char *name;
unsigned flag;
} ban_var[] = {
#define PVAR(a, b, c) { (a), (b) },
#include "ban_vars.h"
#undef PVAR
{ 0, 0 }
};
static void static void
parse_ban(struct vcc *tl) parse_ban(struct vcc *tl)
{ {
const struct ban_var *pv;
vcc_NextToken(tl); vcc_NextToken(tl);
ExpectErr(tl, '('); ExpectErr(tl, '(');
vcc_NextToken(tl); vcc_NextToken(tl);
if (tl->t->tok == ID) { Fb(tl, 1, "VRT_ban_string(sp, ");
Fb(tl, 1, "VRT_ban(sp,\n"); vcc_Expr(tl, STRING);
tl->indent += INDENT; ERRCHK(tl);
while (1) { Fb(tl, 0, ");\n");
ExpectErr(tl, ID);
/* Check valididity of ban variable */
for (pv = ban_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 ban variable.");
vcc_ErrWhere(tl, tl->t);
return;
}
if ((pv->flag & PVAR_HTTP) &&
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) {
case '~':
case T_NOMATCH:
case T_EQ:
case T_NEQ:
Fb(tl, 1, " \"%.*s\",\n", PF(tl->t));
break;
default:
vsb_printf(tl->sb,
"Expected ~, !~, == or !=.\n");
vcc_ErrWhere(tl, tl->t);
return;
}
vcc_NextToken(tl);
Fb(tl, 1, " ");
vcc_Expr(tl, STRING);
ERRCHK(tl);
Fb(tl, 0, ",\n");
if (tl->t->tok == ')')
break;
ExpectErr(tl, T_CAND);
Fb(tl, 1, "\"%.*s\",\n", PF(tl->t));
vcc_NextToken(tl);
}
Fb(tl, 1, "0);\n");
tl->indent -= INDENT;
} else {
Fb(tl, 1, "VRT_ban_string(sp, ");
vcc_Expr(tl, STRING);
ERRCHK(tl);
Fb(tl, 0, ");\n");
}
ExpectErr(tl, ')'); ExpectErr(tl, ')');
vcc_NextToken(tl); vcc_NextToken(tl);
......
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