]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: logs: fix log-steps extra log origins selection
authorAurelien DARRAGON <adarragon@haproxy.com>
Mon, 21 Jul 2025 13:18:37 +0000 (15:18 +0200)
committerAurelien DARRAGON <adarragon@haproxy.com>
Mon, 21 Jul 2025 13:33:55 +0000 (15:33 +0200)
Willy noticed that it was not possible to select extra log origins using
log-steps directive. Extra origins are the one registered using
log_orig_register() such as http-req.

Reason was the error path was always executed during extra log origin
matching for log-steps parser, while it should only be executed if no
match was found.

It should be backported to 3.1.

src/log.c

index 0227a2a8c64e35b4d830f9101f5a52e69e373dcc..d481ce60b2110efe5353204942b884551cd70cf3 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -6837,7 +6837,7 @@ static int px_parse_log_steps(char **args, int section_type, struct proxy *curpx
 
        while (str[0]) {
                struct eb32_node *cur_step;
-               enum log_orig_id cur_id;
+               enum log_orig_id cur_id = LOG_ORIG_UNSPEC;
 
                cur_sep = strcspn(str, ",");
 
@@ -6862,14 +6862,16 @@ static int px_parse_log_steps(char **args, int section_type, struct proxy *curpx
                                }
                        }
 
-                       memprintf(err,
-                                 "invalid log step name (%.*s). Expected values are: "
-                                 "accept, request, connect, response, close",
-                                 (int)cur_sep, str);
-                        list_for_each_entry(cur, &log_origins, list)
-                               memprintf(err, "%s, %s", *err, cur->name);
+                       if (cur_id == LOG_ORIG_UNSPEC) {
+                               memprintf(err,
+                                         "invalid log step name (%.*s). Expected values are: "
+                                         "accept, request, connect, response, close",
+                                         (int)cur_sep, str);
+                               list_for_each_entry(cur, &log_origins, list)
+                                       memprintf(err, "%s, %s", *err, cur->name);
 
-                       goto end;
+                               goto end;
+                       }
                }
 
                cur_step = malloc(sizeof(*cur_step));