[PATCH] BUG/MINOR: acls: Set the right refflag when patterns are, loaded from a map

2017-06-14 Thread Christopher Faulet

Hi,

Here is a little patch to fix a little bug :)

Thanks
--
Christopher Faulet
>From e11c7f0ffe159f1e77c2c2568dd5f217f67327ee Mon Sep 17 00:00:00 2001
From: Christopher Faulet 
Date: Wed, 14 Jun 2017 14:41:33 +0200
Subject: [PATCH] BUG/MINOR: acls: Set the right refflag when patterns are
 loaded from a map

For an ACL, we can load patterns from a map using the flag -M. For example:

acl test hdr(host) -M -f hosts.map

The file is parsed as a map et the ACL will be executed as expected. But the
reference flag is wrong. It is set to PAT_REF_ACL. So the map will never be
listed by a "show map" on the stat socket. Setting the reference flag to
PAT_REF_ACL|PAT_REF_MAP fixes the bug.
---
 src/acl.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/acl.c b/src/acl.c
index da62e6c..9b67a61 100644
--- a/src/acl.c
+++ b/src/acl.c
@@ -140,7 +140,7 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list *
 	__label__ out_return, out_free_expr;
 	struct acl_expr *expr;
 	struct acl_keyword *aclkw;
-	int patflags;
+	int refflags, patflags;
 	const char *arg;
 	struct sample_expr *smp = NULL;
 	int idx = 0;
@@ -441,6 +441,7 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list *
 	 *   -u : force the unique id of the acl
 	 *   -- : everything after this is not an option
 	 */
+	refflags = PAT_REF_ACL;
 	patflags = 0;
 	is_loaded = 0;
 	unique_id = -1;
@@ -470,7 +471,7 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list *
 goto out_free_expr;
 			}
 
-			if (!pattern_read_from_file(&expr->pat, PAT_REF_ACL, args[1], patflags, load_as_map, err, file, line))
+			if (!pattern_read_from_file(&expr->pat, refflags, args[1], patflags, load_as_map, err, file, line))
 goto out_free_expr;
 			is_loaded = 1;
 			args++;
@@ -503,6 +504,7 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list *
 			args++;
 		}
 		else if (strcmp(*args, "-M") == 0) {
+			refflags |= PAT_REF_MAP;
 			load_as_map = 1;
 		}
 		else if (strcmp(*args, "--") == 0) {
-- 
2.9.4



Re: [PATCH] BUG/MINOR: acls: Set the right refflag when patterns are, loaded from a map

2017-06-14 Thread Willy Tarreau
On Wed, Jun 14, 2017 at 03:03:33PM +0200, Christopher Faulet wrote:
> For an ACL, we can load patterns from a map using the flag -M. For example:
> 
> acl test hdr(host) -M -f hosts.map
> 
> The file is parsed as a map et the ACL will be executed as expected. But the
> reference flag is wrong. It is set to PAT_REF_ACL. So the map will never be
> listed by a "show map" on the stat socket. Setting the reference flag to
> PAT_REF_ACL|PAT_REF_MAP fixes the bug.

Indeed it seems to make sense. I'm not sure it's really a bug or an
indecision in the initial design but if it's loaded as a map and
sharable as such, it must be marked as map.

Applied, thanks.
Willy