From: Timo Sirainen Date: Wed, 24 Feb 2016 13:00:31 +0000 (+0200) Subject: lib-storage: Verify settings only after applying settings from userdb X-Git-Tag: 2.2.22.rc1~84 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=07448eb01d5111f050a0940534111f5a938bd20d;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Verify settings only after applying settings from userdb This is especially important to verify() functions that parse the settings and store data permanently based on them, e.g. pop3_delete_flag or imap_client_workarounds, which effectively couldn't be overwritten by userdb. --- diff --git a/src/lib-storage/mail-storage-service.c b/src/lib-storage/mail-storage-service.c index b306e49f2e..f6b2890206 100644 --- a/src/lib-storage/mail-storage-service.c +++ b/src/lib-storage/mail-storage-service.c @@ -1221,8 +1221,6 @@ mail_storage_service_lookup_real(struct mail_storage_service_ctx *ctx, user->flags = flags; user->set_parser = settings_parser_dup(set_parser, user_pool); - if (!settings_parser_check(user->set_parser, user_pool, &error)) - i_panic("settings_parser_check() failed: %s", error); sets = master_service_settings_parser_get_others(master_service, user->set_parser); @@ -1248,6 +1246,11 @@ mail_storage_service_lookup_real(struct mail_storage_service_ctx *ctx, ret = -2; } } + if (ret > 0 && !settings_parser_check(user->set_parser, user_pool, &error)) { + i_error("Invalid settings (probably caused by userdb): %s", error); + *error_r = ERRSTR_INVALID_USER_SETTINGS; + ret = -2; + } pool_unref(&temp_pool); /* load per-user plugins */