From: Timo Sirainen Date: Thu, 6 Mar 2025 18:27:57 +0000 (+0200) Subject: lib-storage: Save all mailbox settings in namespace settings X-Git-Tag: 2.4.1~31 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bd5e502cae6766828adee5d6508bae202fe80aa6;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Save all mailbox settings in namespace settings This avoids having to look them up again. --- diff --git a/src/lib-storage/mail-storage-settings.c b/src/lib-storage/mail-storage-settings.c index 3de157bacb..e351f0bb0d 100644 --- a/src/lib-storage/mail-storage-settings.c +++ b/src/lib-storage/mail-storage-settings.c @@ -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) diff --git a/src/lib-storage/mail-storage-settings.h b/src/lib-storage/mail-storage-settings.h index f7eda27a65..220a661208 100644 --- a/src/lib-storage/mail-storage-settings.h +++ b/src/lib-storage/mail-storage-settings.h @@ -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; }; diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index 65f3a40b77..70cf532a13 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -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 =