[master] 474b9fc Also check for duplicate definitions of backends, probes and acls.
Poul-Henning Kamp
phk at varnish-cache.org
Mon May 23 11:07:19 CEST 2011
commit 474b9fcedbc7f056b6e7dc09e8231f08c16d8e12
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Mon May 23 09:06:47 2011 +0000
Also check for duplicate definitions of backends, probes and acls.
diff --git a/bin/varnishtest/tests/v00034.vtc b/bin/varnishtest/tests/v00034.vtc
index c73994b..fdc6e20 100644
--- a/bin/varnishtest/tests/v00034.vtc
+++ b/bin/varnishtest/tests/v00034.vtc
@@ -1,4 +1,4 @@
-varnishtest "Test sub redefinition"
+varnishtest "Test sub and backend redefinition"
server s1 {
rxreq
@@ -13,3 +13,14 @@ varnish v1 -badvcl {
sub c1 { }
sub vcl_recv { call c1; }
}
+
+varnish v1 -badvcl {
+ backend s1 { .host = "127.0.0.1"; }
+ backend s1 { .host = "127.0.0.1"; }
+}
+
+varnish v1 -badvcl {
+ backend s1 { .host = "127.0.0.1"; .probe = p1;}
+ probe p1 { }
+ probe p1 { }
+}
diff --git a/lib/libvcl/vcc_acl.c b/lib/libvcl/vcc_acl.c
index 6d7e629..e344d3d 100644
--- a/lib/libvcl/vcc_acl.c
+++ b/lib/libvcl/vcc_acl.c
@@ -465,6 +465,7 @@ void
vcc_Acl(struct vcc *tl)
{
struct token *an;
+ int i;
char acln[1024];
vcc_NextToken(tl);
@@ -474,7 +475,12 @@ vcc_Acl(struct vcc *tl)
an = tl->t;
vcc_NextToken(tl);
- vcc_AddDef(tl, an, SYM_ACL);
+ i = vcc_AddDef(tl, an, SYM_ACL);
+ if (i > 1) {
+ vsb_printf(tl->sb, "ACL %.*s redefined\n", PF(an));
+ vcc_ErrWhere(tl, an);
+ return;
+ }
bprintf(acln, "%.*s", PF(an));
SkipToken(tl, '{');
diff --git a/lib/libvcl/vcc_backend.c b/lib/libvcl/vcc_backend.c
index e8cd700..ab102bb 100644
--- a/lib/libvcl/vcc_backend.c
+++ b/lib/libvcl/vcc_backend.c
@@ -412,6 +412,7 @@ void
vcc_ParseProbe(struct vcc *tl)
{
struct token *t_probe;
+ int i;
vcc_NextToken(tl); /* ID: probe */
@@ -419,7 +420,11 @@ vcc_ParseProbe(struct vcc *tl)
ERRCHK(tl);
t_probe = tl->t;
vcc_NextToken(tl);
- vcc_AddDef(tl, t_probe, SYM_PROBE);
+ i = vcc_AddDef(tl, t_probe, SYM_PROBE);
+ if (i > 1) {
+ vsb_printf(tl->sb, "Probe %.*s redefined\n", PF(t_probe));
+ vcc_ErrWhere(tl, t_probe);
+ }
Fh(tl, 0, "\n#define vgc_probe_%.*s\tvgc_probe__%d\n",
PF(t_probe), tl->nprobe);
@@ -682,6 +687,11 @@ vcc_DefBackend(struct vcc *tl, const struct token *nm)
sym = VCC_GetSymbolTok(tl, nm, SYM_BACKEND);
AN(sym);
+ if (sym->ndef > 0) {
+ vsb_printf(tl->sb, "Backend %.*s redefined\n", PF(tl->t));
+ vcc_ErrWhere(tl, nm);
+ return;
+ }
sym->fmt = BACKEND;
sym->eval = vcc_Eval_Backend;
sym->ndef++;
@@ -700,6 +710,7 @@ vcc_ParseSimpleDirector(struct vcc *tl)
h = TlAlloc(tl, sizeof *h);
h->name = tl->t_dir;
vcc_DefBackend(tl, tl->t_dir);
+ ERRCHK(tl);
sprintf(vgcname, "_%.*s", PF(h->name));
h->vgcname = TlAlloc(tl, strlen(vgcname) + 1);
strcpy(h->vgcname, vgcname);
@@ -748,6 +759,7 @@ vcc_ParseDirector(struct vcc *tl)
vcc_ParseSimpleDirector(tl);
} else {
vcc_DefBackend(tl, tl->t_dir);
+ ERRCHK(tl);
ExpectErr(tl, ID); /* ID: policy */
tl->t_policy = tl->t;
vcc_NextToken(tl);
diff --git a/lib/libvcl/vcc_parse.c b/lib/libvcl/vcc_parse.c
index 5636b71..34f9c33 100644
--- a/lib/libvcl/vcc_parse.c
+++ b/lib/libvcl/vcc_parse.c
@@ -204,7 +204,7 @@ vcc_Function(struct vcc *tl)
assert(m < VCL_MET_MAX);
tl->fb = tl->fm[m];
if (tl->mprocs[m] == NULL) {
- vcc_AddDef(tl, tl->t, SYM_SUB);
+ (void)vcc_AddDef(tl, tl->t, SYM_SUB);
vcc_AddRef(tl, tl->t, SYM_SUB);
tl->mprocs[m] = vcc_AddProc(tl, tl->t);
}
More information about the varnish-commit
mailing list