]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: cfgparse: report proper location for log-format-sd errors
authorAurelien DARRAGON <adarragon@haproxy.com>
Wed, 28 Feb 2024 18:29:27 +0000 (19:29 +0100)
committerAurelien DARRAGON <adarragon@haproxy.com>
Thu, 7 Mar 2024 10:48:17 +0000 (11:48 +0100)
When a parsing error occurs inside a log-format-sd expression, we report
the location of the log-format directive (which may not be set) instead
of reporting the proper log-format-sd directive location where the parsing
error occured.

 1|listen test
 2|  log-format "%B"      # no error
 3|  log-format-sd "%bad" # error

 | [ALERT]    (322261) : config : Parsing [empty.conf:2]: failed to parse log-format-sd : no such format variable 'bad'. If you wanted to emit the '%' character verbatim, you need to use '%%'.

The fix consists in using the config hints dedicated to log-format-sd
directive instead of the log-format one.

The bug was introduced in 8a4e4420 ("MEDIUM: log-format: Use standard
HAProxy log system to report errors").

This should be backported to every stable versions.

src/cfgparse.c

index 4d4d12cd9a21b95dcacafb38b45a7a0509336017..e9e4e8a7eeb8b7f286040c76296baf8d198e4900 100644 (file)
@@ -3435,12 +3435,12 @@ out_uri_auth_compat:
                                                    LOG_OPT_MANDATORY|LOG_OPT_MERGE_SPACES,
                                                    SMP_VAL_FE_LOG_END, &err)) {
                                ha_alert("Parsing [%s:%d]: failed to parse log-format-sd : %s.\n",
-                                        curproxy->conf.lfs_file, curproxy->conf.lfs_line, err);
+                                        curproxy->conf.lfsd_file, curproxy->conf.lfsd_line, err);
                                free(err);
                                cfgerr++;
                        } else if (!add_to_logformat_list(NULL, NULL, LF_SEPARATOR, &curproxy->logformat_sd, &err)) {
                                ha_alert("Parsing [%s:%d]: failed to parse log-format-sd : %s.\n",
-                                        curproxy->conf.lfs_file, curproxy->conf.lfs_line, err);
+                                        curproxy->conf.lfsd_file, curproxy->conf.lfsd_line, err);
                                free(err);
                                cfgerr++;
                        }