]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Save all mailbox settings in namespace settings
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 6 Mar 2025 18:27:57 +0000 (20:27 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Mar 2025 13:01:57 +0000 (13:01 +0000)
This avoids having to look them up again.

src/lib-storage/mail-storage-settings.c
src/lib-storage/mail-storage-settings.h
src/lib-storage/mail-storage.c

index 3de157bacb4508e959625aabc91b96ea53b9b03b..e351f0bb0d3feb89744acfd2baa3ff28cfa6de10 100644 (file)
@@ -808,14 +808,14 @@ namespace_parse_mailboxes(struct event *event, pool_t pool,
                          struct mail_namespace_settings *ns,
                          const char **error_r)
 {
-       struct mailbox_settings *box_set;
+       const struct mailbox_settings *box_set;
        const char *box_name, *error;
        int ret = 0;
 
        if (array_is_empty(&ns->mailboxes))
                return 0;
 
-       p_array_init(&ns->parsed_mailbox_names, pool,
+       p_array_init(&ns->parsed_mailboxes, pool,
                     array_count(&ns->mailboxes));
        event = event_create(event);
        event_add_str(event, SETTINGS_EVENT_NAMESPACE_NAME, ns->name);
@@ -832,8 +832,8 @@ namespace_parse_mailboxes(struct event *event, pool_t pool,
                        ret = -1;
                        break;
                }
-               const char *name_dup = p_strdup(pool, box_set->name);
-               array_push_back(&ns->parsed_mailbox_names, &name_dup);
+               array_push_back(&ns->parsed_mailboxes, &box_set);
+               pool_add_external_ref(pool, box_set->pool);
                bool have_special_use = array_not_empty(&box_set->special_use);
                settings_free(box_set);
                if (have_special_use)
index f7eda27a655a23c437b7f43b6f1011dee9e7a8a3..220a661208e23e59ac2cef97f362943a66012a92 100644 (file)
@@ -141,9 +141,8 @@ struct mail_namespace_settings {
 
        /* List of mailbox filter names */
        ARRAY_TYPE(const_string) mailboxes;
-       /* mailbox_name of each mailbox. This is used for matching mailbox
-          settings for mailbox names. */
-       ARRAY_TYPE(const_string) parsed_mailbox_names;
+       /* mailbox_settings of each configured mailbox in the namespace. */
+       ARRAY(const struct mailbox_settings *) parsed_mailboxes;
        bool parsed_have_special_use_mailboxes;
 };
 
index 65f3a40b7721a3bfc78e96fdb757ca3635707e94..70cf532a13f4efe3603719420d41cfeed1ddcba9 100644 (file)
@@ -3489,11 +3489,11 @@ static void mailbox_settings_filters_add(struct event *event,
        const char *vname_without_prefix =
                mailbox_get_name_without_prefix(list->ns, vname);
        unsigned int i, count;
-       const char *const *mailbox_names =
-               array_get(&list->ns->set->parsed_mailbox_names, &count);
+       const struct mailbox_settings *const *mailboxes =
+               array_get(&list->ns->set->parsed_mailboxes, &count);
 
        for (i = 0; i < count; i++) {
-               if (!wildcard_match(vname_without_prefix, mailbox_names[i]))
+               if (!wildcard_match(vname_without_prefix, mailboxes[i]->name))
                        continue;
 
                const char *filter_name =