]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: event-log - Fix handling dropping parent prefixes beyond a drop at a higher...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Wed, 2 Sep 2020 09:15:33 +0000 (11:15 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 10 Sep 2020 12:43:56 +0000 (12:43 +0000)
Before, the drop in the higher level became invisible to the lower
hiererarchies. For example:

parent1, parent2, parent3, parent4(drop one) yielded
"parent1: parent2: parent4: " as a prefix (which is still OK), whereas
parent1: parent2: parent3: parent4(drop one): leaf(drop 3) yielded
"parent1: leaf: ", while the expected prefix would be:
"leaf: ".

This means that the drop of one prefix by parent4 is ignored. Instead it should
apply that drop and operate on the prefixes that are still visible at the lowel
level, so the number of prefixes dropped should be additive, which is what this
commit changes.

src/lib/event-log.c
src/lib/test-event-log.c

index 23755a89477ef310033bddde48b64a4239c7a0f5..d62d0efd16af76071019c60dcef32d097b5b16a1 100644 (file)
@@ -218,8 +218,7 @@ event_get_log_message(struct event *event,
                }
        } else if (!event->log_prefix_replace &&
                   (!params->no_send || !glmctx->str_out_done)) {
-               if (event->log_prefixes_dropped > prefixes_dropped)
-                       prefixes_dropped = event->log_prefixes_dropped;
+               prefixes_dropped += event->log_prefixes_dropped;
                if (event_get_log_message(event->parent, glmctx,
                                          prefixes_dropped, fmt, args))
                        ret = TRUE;
index acb755a45ca341569cef7ea1c6b04bc094dc0a79..dc2e3dc0232855a39d5f4275de87fcf84af6ce26 100644 (file)
@@ -2369,6 +2369,22 @@ static void test_event_log_message(void)
                                "appended2.appended3.appended5.TEXT",
                        .result_str_out = "appended2.appended3.appended5.TEXT",
                },
+               {
+                       .prefixes = (const struct test_log_event []) {
+                               { TYPE_PREFIX_APPEND, "appended1,", 0 },
+                               { TYPE_PREFIX_APPEND, "appended2.", 0 },
+                               { TYPE_PREFIX_APPEND, "appended3.",
+                                 FLAG_DROP_PREFIXES_1 },
+                               { TYPE_PREFIX_APPEND, "appended4.", 0 },
+                               { TYPE_PREFIX_APPEND, "appended5.",
+                                 (FLAG_DROP_PREFIXES_1 |
+                                  FLAG_DROP_PREFIXES_2) },
+                               { .type = TYPE_END }
+                       },
+                       .global_log_prefix = "global3.",
+                       .result = "global3.Info: appended5.TEXT",
+                       .result_str_out = "appended5.TEXT",
+               },
        };
 
        test_begin("event log message");