From b671e2e99a07a76d951bd0d6ff0dc7fe298d5581 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 10 Apr 2025 17:57:16 +0300 Subject: [PATCH] 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. --- src/lib-storage/mail-storage-service.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) 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, -- 2.47.3