[master] d1a614e Emit named ACLs using their symbol
Dridi Boukelmoune
dridi.boukelmoune at gmail.com
Mon Aug 14 11:02:06 CEST 2017
commit d1a614ee7e88825429686fd79f0cfc487df0247f
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date: Wed Jun 28 10:31:54 2017 +0200
Emit named ACLs using their symbol
For that, an indirection via VRT_acl_match is needed, because ACLs are a
special case being functions. However they've had "regular" symbols ever
since VMODs learned to use them.
Refs #2325
diff --git a/lib/libvcc/vcc_acl.c b/lib/libvcc/vcc_acl.c
index 08fc9d8..2a733d2 100644
--- a/lib/libvcc/vcc_acl.c
+++ b/lib/libvcc/vcc_acl.c
@@ -485,7 +485,7 @@ vcc_ParseAcl(struct vcc *tl)
acln = TlDupTok(tl, an);
- (void)VCC_HandleSymbol(tl, an, ACL, "&vrt_acl_named");
+ (void)VCC_HandleSymbol(tl, an, ACL, ACL_SYMBOL_PREFIX);
ERRCHK(tl);
SkipToken(tl, '{');
diff --git a/lib/libvcc/vcc_compile.h b/lib/libvcc/vcc_compile.h
index 17ceba0..0a05d21 100644
--- a/lib/libvcc/vcc_compile.h
+++ b/lib/libvcc/vcc_compile.h
@@ -360,3 +360,5 @@ int vcc_CheckUses(struct vcc *tl);
do { vcc__Expect(a, b, __LINE__); ERRCHK(a);} while (0)
#define SkipToken(a, b) \
do { vcc__Expect(a, b, __LINE__); ERRCHK(a); vcc_NextToken(a); } while (0)
+
+#define ACL_SYMBOL_PREFIX "&vrt_acl_named"
diff --git a/lib/libvcc/vcc_expr.c b/lib/libvcc/vcc_expr.c
index 3ab20b6..238ee9d 100644
--- a/lib/libvcc/vcc_expr.c
+++ b/lib/libvcc/vcc_expr.c
@@ -1204,9 +1204,9 @@ vcc_expr_cmp(struct vcc *tl, struct expr **e, vcc_type_t fmt)
not = tl->t->tok == '~' ? "" : "!";
vcc_NextToken(tl);
vcc_ExpectCid(tl, "ACL");
- (void)vcc_AddRef(tl, tl->t, SYM_ACL);
- bprintf(buf, "%smatch_acl_named_%.*s(ctx, \v1)",
- not, PF(tl->t));
+ 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);
vcc_NextToken(tl);
*e = vcc_expr_edit(BOOL, buf, *e, NULL);
return;
More information about the varnish-commit
mailing list