summaryrefslogtreecommitdiffstats
path: root/src/acl.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-03 05:11:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-03 05:11:10 +0000
commitcff6d757e3ba609c08ef2aaa00f07e53551e5bf6 (patch)
tree08c4fc3255483ad397d712edb4214ded49149fd9 /src/acl.c
parentAdding upstream version 2.9.7. (diff)
downloadhaproxy-upstream/3.0.0.tar.xz
haproxy-upstream/3.0.0.zip
Adding upstream version 3.0.0.upstream/3.0.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/acl.c')
-rw-r--r--src/acl.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/acl.c b/src/acl.c
index 8ef2b7d..c1f4edd 100644
--- a/src/acl.c
+++ b/src/acl.c
@@ -546,6 +546,25 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list *
*/
if (!pat_ref_add(ref, arg, NULL, err))
goto out_free_expr;
+
+ if (global.mode & MODE_DIAG) {
+ if (strcmp(arg, "&&") == 0 || strcmp(arg, "and") == 0 ||
+ strcmp(arg, "||") == 0 || strcmp(arg, "or") == 0)
+ ha_diag_warning("parsing [%s:%d] : pattern '%s' looks like a failed attempt at using an operator inside a pattern list\n", file, line, arg);
+ else if (strcmp(arg, "#") == 0 || strcmp(arg, "//") == 0)
+ ha_diag_warning("parsing [%s:%d] : pattern '%s' looks like a failed attempt at commenting an end of line\n", file, line, arg);
+ else if (find_acl_kw(arg))
+ ha_diag_warning("parsing [%s:%d] : pattern '%s' suspiciously looks like a known acl keyword\n", file, line, arg);
+ else {
+ const char *begw = arg, *endw;
+
+ for (endw = begw; is_idchar(*endw); endw++)
+ ;
+
+ if (endw != begw && find_sample_fetch(begw, endw - begw))
+ ha_diag_warning("parsing [%s:%d] : pattern '%s' suspiciously looks like a known sample fetch keyword\n", file, line, arg);
+ }
+ }
args++;
}
@@ -1331,7 +1350,11 @@ int smp_fetch_acl_parse(struct arg *args, char **err_msg)
name++;
}
- if (!(acl_sample->terms[i].acl = find_acl_by_name(name, &curproxy->acl))) {
+
+ if (
+ !(acl_sample->terms[i].acl = find_acl_by_name(name, &curproxy->acl)) &&
+ !(acl_sample->terms[i].acl = find_acl_default(name, &curproxy->acl, err_msg, NULL, NULL, 0))
+ ) {
memprintf(err_msg, "ACL '%s' not found", name);
goto err;
}