]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Don't add userdb fields to settings if they're unknown
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 10 Apr 2025 14:57:16 +0000 (17:57 +0300)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Mon, 12 May 2025 15:51:47 +0000 (15:51 +0000)
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

index 4580b6cc8ba11a20f28d6b5aabc184d39bc6d090..ef8f3fa4571f709ea44eb43b47615e681bd5e9e3 100644 (file)
@@ -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 = "<hidden>";
        }
-       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,