From: Timo Sirainen Date: Thu, 10 Apr 2025 14:57:16 +0000 (+0300) Subject: lib-storage: Don't add userdb fields to settings if they're unknown X-Git-Tag: 2.4.2~796 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b671e2e99a07a76d951bd0d6ff0dc7fe298d5581;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Don't add userdb fields to settings if they're unknown Userdb extra fields can be used for other purposes than as being settings. Now that we know all setting names, don't add them to settings overrides if we know they're not known settings. --- diff --git a/src/lib-storage/mail-storage-service.c b/src/lib-storage/mail-storage-service.c index 4580b6cc8b..ef8f3fa457 100644 --- a/src/lib-storage/mail-storage-service.c +++ b/src/lib-storage/mail-storage-service.c @@ -75,14 +75,26 @@ static void set_keyvalue(struct mail_storage_service_user *user, if (*key == '\0') return; - settings_override(user->set_instance, key, value, - SETTINGS_OVERRIDE_TYPE_USERDB); + bool is_setting; + if (strchr(key, '/') != NULL) { + /* Assume this is intended to be a setting. */ + is_setting = TRUE; + } else { + is_setting = settings_key_exists(user->event, key); + } + if (is_setting) { + settings_override(user->set_instance, key, value, + SETTINGS_OVERRIDE_TYPE_USERDB); + } if (strstr(key, "pass") != NULL) { /* possibly a password field (e.g. imapc_password). hide the value. */ value = ""; } - e_debug(user->event, "Added userdb setting: %s=%s", key, value); + if (is_setting) + e_debug(user->event, "Added setting via userdb: %s=%s", key, value); + else + e_debug(user->event, "Ignored unknown userdb field: %s=%s", key, value); } static bool validate_chroot(const struct mail_user_settings *user_set,