]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: log: fix broken '+bin' logformat node option
authorAurelien DARRAGON <adarragon@haproxy.com>
Fri, 14 Jun 2024 16:01:45 +0000 (18:01 +0200)
committerAurelien DARRAGON <adarragon@haproxy.com>
Fri, 14 Jun 2024 16:25:21 +0000 (18:25 +0200)
In 12d08cf912 ("BUG/MEDIUM: log: don't ignore disabled node's options"),
while trying to restore historical node option inheritance behavior, I
broke the '+bin' logformat node option recently introduced in b7c3d8c87c
("MINOR: log: add +bin logformat node option").

Indeed, because of 12d08cf912, LOG_OPT_BIN is not set anymore on
individual nodes even if it was set globally, making the feature unusable.
('+bin' is also used for binary cbor encoding)

What I should have done instead is include LOG_OPT_BIN in the options
inherited from global ones. This is what's being done in this commit.
Misleading comment was adjusted.

It must be backported in 3.0 with 12d08cf912.

src/log.c

index 42b5acad5c5dfd8ca83f2714925a04ed7441d023..a58c6fc3cf7cc9a0791c2a58cfe89697f6b7e986 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -969,14 +969,17 @@ static int lf_expr_postcheck_node_opt(struct lf_expr *lf_expr, struct logformat_
         * Also, ensure we don't mix encoding types, global setting
         * prevails over per-node one.
         *
-        * Finally, ignore LOG_OPT_BIN since it is a global-only option
+        * Finally, only consider LOG_OPT_BIN if set globally
+        * (it is a global-only option)
         */
        if (lf_expr->nodes.options & LOG_OPT_ENCODE) {
                node->options &= ~(LOG_OPT_BIN | LOG_OPT_ENCODE);
-               node->options |= (lf_expr->nodes.options & LOG_OPT_ENCODE);
+               node->options |= (lf_expr->nodes.options & (LOG_OPT_BIN | LOG_OPT_ENCODE));
        }
-       else
+       else {
                node->options &= ~LOG_OPT_BIN;
+               node->options |= (lf_expr->nodes.options & LOG_OPT_BIN);
+       }
 
        _lf_expr_postcheck_node_opt(&node->options, lf_expr->nodes.options);