]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
config: Setting changes may have updated the included group's settings
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 29 Jul 2025 17:10:03 +0000 (20:10 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 30 Jul 2025 12:51:26 +0000 (12:51 +0000)
If group include was done before other settings, any further updates
changed the group's settings. For example:

group @test foo {
  default_internal_user = A
}
service imap {
  @test = foo
  default_internal_user = B
}
service pop3 {
  @test = foo
}

This caused service pop3 to also have default_internal_user=B.

src/config/config-parser.c

index 2a8bbbc88876181799071fc698fd8c4ecbcd7212..c860baf93037b19cc205a878ecea3f208bbf74a0 100644 (file)
@@ -2117,10 +2117,15 @@ config_module_parsers_merge(pool_t pool, struct config_module_parser *dest,
                        /* destination is empty - just copy the whole src */
                        *dest = *src;
                        if (new_change_counter != 0 && src->set_count > 0) {
+                               dest->settings =
+                                       p_new(pool, union config_module_parser_setting,
+                                             dest->set_count);
                                dest->change_counters =
                                        p_new(pool, uint8_t, dest->set_count);
                                for (unsigned int i = 0; i < dest->set_count; i++) {
                                        if (src->change_counters[i] != 0) {
+                                               dest->settings[i] =
+                                                       src->settings[i];
                                                dest->change_counters[i] =
                                                        new_change_counter;
                                        }