[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