[master] 31e03bf Switch VCL symbols from C to Varnish identifiers

Dridi Boukelmoune dridi.boukelmoune at gmail.com
Mon Aug 14 11:02:07 CEST 2017


commit 31e03bf3bc8bd34c9018fff092d9dafd6cb7072b
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date:   Fri Jun 23 10:22:29 2017 +0200

    Switch VCL symbols from C to Varnish identifiers
    
    This does not include VMOD space, but that is pretty much everything
    else.
    
    Refs #2325

diff --git a/bin/varnishtest/tests/c00084.vtc b/bin/varnishtest/tests/c00084.vtc
new file mode 100644
index 0000000..6ec8dee
--- /dev/null
+++ b/bin/varnishtest/tests/c00084.vtc
@@ -0,0 +1,38 @@
+varnishtest "legal symbol names"
+
+varnish v1 -arg "-s my-store=malloc" -vcl {
+	import directors;
+
+	acl my-acl { "127.0.0.1"; }
+
+	probe my-pb { }
+	backend my-be {
+		.host = "${bad_backend}";
+		.probe = my-pb;
+	}
+
+	sub vcl_init {
+		new my-dir = directors.round_robin();
+		my-dir.add_backend(my-be);
+	}
+
+	sub vcl_recv {
+		call my-sub;
+	}
+
+	sub my-sub {
+		if (client.ip ~ my-acl) { }
+		set req.storage = storage.my-store;
+		set req.backend_hint = my-dir.backend();
+	}
+} -start
+
+varnish v1 -cli "vcl.label my-label vcl1"
+
+varnish v1 -vcl {
+	backend dummy { .host = "${bad_backend}"; }
+
+	sub vcl_recv {
+		return (vcl(my-label));
+	}
+}
diff --git a/bin/varnishtest/tests/d00006.vtc b/bin/varnishtest/tests/d00006.vtc
index 195e8ba..fc35395 100644
--- a/bin/varnishtest/tests/d00006.vtc
+++ b/bin/varnishtest/tests/d00006.vtc
@@ -22,11 +22,11 @@ server s4 {
 	txresp -body "4444"
 } -start
 
-varnish v1 -errvcl {Name of VCL object, 'rr1-xx', contains illegal character '-'} {
+varnish v1 -errvcl {Name of VCL object, 'rr1.xx', contains illegal character '.'} {
 	import directors;
 	backend b1 { .host = "127.0.0.1"; .port = "8080";}
 	sub vcl_init {
-		new rr1-xx = directors.round_robin();
+		new rr1.xx = directors.round_robin();
 	}
 }
 
diff --git a/bin/varnishtest/tests/v00020.vtc b/bin/varnishtest/tests/v00020.vtc
index ba76e2d..bf31e4e 100644
--- a/bin/varnishtest/tests/v00020.vtc
+++ b/bin/varnishtest/tests/v00020.vtc
@@ -204,12 +204,12 @@ varnish v1 -errvcl {IP + IP not possible.} {
 	}
 }
 
-varnish v1 -errvcl {Name of function, 'foo-bar', contains illegal character '-'} {
+varnish v1 -errvcl {Name of function, 'foo.bar', contains illegal character '.'} {
 	backend b { .host = "127.0.0.1"; }
-	sub foo-bar {
+	sub foo.bar {
 	}
 	sub vcl_recv {
-		call foo-bar;
+		call foo.bar;
 	}
 }
 
@@ -238,9 +238,9 @@ varnish v1 -errvcl {'beresp.status': Not available in method 'vcl_recv'.} {
 	}
 }
 
-varnish v1 -errvcl {Name of ACL, 'foo-bar', contains illegal character '-'} {
+varnish v1 -errvcl {Name of ACL, 'foo.bar', contains illegal character '.'} {
 	backend b { .host = "127.0.0.1"; }
-	acl foo-bar {
+	acl foo.bar {
 	}
 	sub vcl_recv {
 		if (client.ip ~ foo.bar) {
diff --git a/lib/libvcc/vcc_acl.c b/lib/libvcc/vcc_acl.c
index f6acc44..0a6a15a 100644
--- a/lib/libvcc/vcc_acl.c
+++ b/lib/libvcc/vcc_acl.c
@@ -484,7 +484,7 @@ vcc_ParseAcl(struct vcc *tl)
 	vcc_NextToken(tl);
 	VTAILQ_INIT(&tl->acl);
 
-	vcc_ExpectCid(tl, "ACL");
+	vcc_ExpectVid(tl, "ACL");
 	ERRCHK(tl);
 	an = tl->t;
 	vcc_NextToken(tl);
diff --git a/lib/libvcc/vcc_backend.c b/lib/libvcc/vcc_backend.c
index 5775ee2..bc0c096 100644
--- a/lib/libvcc/vcc_backend.c
+++ b/lib/libvcc/vcc_backend.c
@@ -255,7 +255,7 @@ vcc_ParseProbe(struct vcc *tl)
 
 	vcc_NextToken(tl);			/* ID: probe */
 
-	vcc_ExpectCid(tl, "backend probe");	/* ID: name */
+	vcc_ExpectVid(tl, "backend probe");	/* ID: name */
 	ERRCHK(tl);
 	t_probe = tl->t;
 	vcc_NextToken(tl);
@@ -466,7 +466,7 @@ vcc_ParseBackend(struct vcc *tl)
 	t_first = tl->t;
 	vcc_NextToken(tl);		/* ID: backend */
 
-	vcc_ExpectCid(tl, "backend");	/* ID: name */
+	vcc_ExpectVid(tl, "backend");	/* ID: name */
 	ERRCHK(tl);
 
 	/* XXX: lift this limit once VSM ident becomes dynamic */
diff --git a/lib/libvcc/vcc_compile.h b/lib/libvcc/vcc_compile.h
index 6826e1e..3a417e2 100644
--- a/lib/libvcc/vcc_compile.h
+++ b/lib/libvcc/vcc_compile.h
@@ -318,7 +318,7 @@ void vcc_ErrWhere2(struct vcc *, const struct token *, const struct token *);
 
 void vcc__Expect(struct vcc *tl, unsigned tok, unsigned line);
 int vcc_IdIs(const struct token *t, const char *p);
-void vcc_ExpectCid(struct vcc *tl, const char *what);
+void vcc_ExpectVid(struct vcc *tl, const char *what);
 void vcc_Lexer(struct vcc *tl, struct source *sp);
 void vcc_NextToken(struct vcc *tl);
 void vcc__ErrInternal(struct vcc *tl, const char *func,
diff --git a/lib/libvcc/vcc_expr.c b/lib/libvcc/vcc_expr.c
index 238ee9d..78e26a7 100644
--- a/lib/libvcc/vcc_expr.c
+++ b/lib/libvcc/vcc_expr.c
@@ -471,7 +471,7 @@ vcc_Eval_Handle(struct vcc *tl, struct expr **e, const struct symbol *sym,
 		*e = vcc_mk_expr(STRING, "\"%s\"", sym->name);
 		(void)vcc_AddRef(tl, tl->t, sym->kind);
 	} else {
-		vcc_ExpectCid(tl, "handle");
+		vcc_ExpectVid(tl, "handle");
 		(void)vcc_AddRef(tl, tl->t, sym->kind);
 		*e = vcc_mk_expr(sym->fmt, "%s", sym->rname);
 		(*e)->constant = EXPR_VAR;	/* XXX ? */
@@ -1203,7 +1203,7 @@ vcc_expr_cmp(struct vcc *tl, struct expr **e, vcc_type_t fmt)
 	    (tl->t->tok == '~' || tl->t->tok == T_NOMATCH)) {
 		not = tl->t->tok == '~' ? "" : "!";
 		vcc_NextToken(tl);
-		vcc_ExpectCid(tl, "ACL");
+		vcc_ExpectVid(tl, "ACL");
 		sym = vcc_AddRef(tl, tl->t, SYM_ACL);
 		VCC_GlobalSymbol(sym, ACL, ACL_SYMBOL_PREFIX);
 		bprintf(buf, "%sVRT_acl_match(ctx, %s, \v1)", not, sym->rname);
diff --git a/lib/libvcc/vcc_parse.c b/lib/libvcc/vcc_parse.c
index 1e144b4..a3839b3 100644
--- a/lib/libvcc/vcc_parse.c
+++ b/lib/libvcc/vcc_parse.c
@@ -213,7 +213,7 @@ vcc_ParseFunction(struct vcc *tl)
 	int m, i;
 
 	vcc_NextToken(tl);
-	vcc_ExpectCid(tl, "function");
+	vcc_ExpectVid(tl, "function");
 	ERRCHK(tl);
 
 	m = IsMethod(tl->t);
diff --git a/lib/libvcc/vcc_token.c b/lib/libvcc/vcc_token.c
index a262ded..368f57c 100644
--- a/lib/libvcc/vcc_token.c
+++ b/lib/libvcc/vcc_token.c
@@ -291,26 +291,25 @@ vcc_IdIs(const struct token *t, const char *p)
 }
 
 /*--------------------------------------------------------------------
- * Check that we have a C-identifier
+ * Check that we have a Varnish identifier
  */
 
 void
-vcc_ExpectCid(struct vcc *tl, const char *what)
+vcc_ExpectVid(struct vcc *tl, const char *what)
 {
-	const char *q;
+	const char *bad;
 
 	ExpectErr(tl, ID);
 	ERRCHK(tl);
-	/* XXX: too soon to use vct_invalid_name() */
-	for (q = tl->t->b; q < tl->t->e; q++) {
-		if (!vct_isalnum(*q) && *q != '_') {
-			VSB_printf(tl->sb, "Name of %s, ", what);
-			vcc_ErrToken(tl, tl->t);
-			VSB_printf(tl->sb,
-			    ", contains illegal character '%c'\n", *q);
-			vcc_ErrWhere(tl, tl->t);
-			return;
-		}
+
+	bad = VCT_invalid_name(tl->t->b, tl->t->e);
+	if (bad != NULL) {
+		VSB_printf(tl->sb, "Name of %s, ", what);
+		vcc_ErrToken(tl, tl->t);
+		VSB_printf(tl->sb,
+		    ", contains illegal character '%c'\n", *bad);
+		vcc_ErrWhere(tl, tl->t);
+		return;
 	}
 }
 
diff --git a/lib/libvcc/vcc_vmod.c b/lib/libvcc/vcc_vmod.c
index e3449ea..d46e496 100644
--- a/lib/libvcc/vcc_vmod.c
+++ b/lib/libvcc/vcc_vmod.c
@@ -280,7 +280,7 @@ vcc_ParseNew(struct vcc *tl)
 
 	vcc_NextToken(tl);
 	ExpectErr(tl, ID);
-	vcc_ExpectCid(tl, "VCL object");
+	vcc_ExpectVid(tl, "VCL object");
 	ERRCHK(tl);
 	sy1 = VCC_HandleSymbol(tl, tl->t, INSTANCE, "vo");
 	ERRCHK(tl);



More information about the varnish-commit mailing list