]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: acls: Set the right refflag when patterns are loaded from a map
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 14 Jun 2017 12:41:33 +0000 (14:41 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 14 Jun 2017 14:39:07 +0000 (16:39 +0200)
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

index da62e6c01b6b0d62da04e2ad2a033fd0bac342df..9b67a611b0f96ead5d9bdac97cae4237c63e1b57 100644 (file)
--- 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) {