From: Timo Sirainen Date: Thu, 12 Jan 2023 23:10:10 +0000 (+0200) Subject: imapc: Move settings initialization to imapc_storage_client_create() X-Git-Tag: 2.4.0~2291 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=53e3880771b2855bd510e8510765b9085ab8b052;p=thirdparty%2Fdovecot%2Fcore.git imapc: Move settings initialization to imapc_storage_client_create() --- diff --git a/src/lib-storage/index/imapc/imapc-list.c b/src/lib-storage/index/imapc/imapc-list.c index e184ee1e1f..1275f50368 100644 --- a/src/lib-storage/index/imapc/imapc-list.c +++ b/src/lib-storage/index/imapc/imapc-list.c @@ -95,12 +95,11 @@ static int imapc_list_init(struct mailbox_list *_list, const char **error_r) { struct imapc_mailbox_list *list = (struct imapc_mailbox_list *)_list; - list->set = settings_parser_get_root_set(_list->ns->user->set_parser, - imapc_get_setting_parser_info()); - if (imapc_storage_client_create(_list->ns, list->set, + if (imapc_storage_client_create(_list->ns, &list->client, error_r) < 0) return -1; list->client->_list = list; + list->set = list->client->set; imapc_storage_client_register_untagged(list->client, "LIST", imapc_untagged_list); diff --git a/src/lib-storage/index/imapc/imapc-list.h b/src/lib-storage/index/imapc/imapc-list.h index 11df6b08b3..b268fcb72b 100644 --- a/src/lib-storage/index/imapc/imapc-list.h +++ b/src/lib-storage/index/imapc/imapc-list.h @@ -9,7 +9,7 @@ struct imap_arg; struct imapc_mailbox_list { struct mailbox_list list; - const struct imapc_settings *set; + const struct imapc_settings *set; /* points to client->set */ struct imapc_storage_client *client; struct mailbox_list *index_list; diff --git a/src/lib-storage/index/imapc/imapc-storage.c b/src/lib-storage/index/imapc/imapc-storage.c index d25103c8ab..c5573ccf32 100644 --- a/src/lib-storage/index/imapc/imapc-storage.c +++ b/src/lib-storage/index/imapc/imapc-storage.c @@ -307,14 +307,17 @@ static void imapc_storage_client_login(struct imapc_storage_client *client, } int imapc_storage_client_create(struct mail_namespace *ns, - const struct imapc_settings *imapc_set, struct imapc_storage_client **client_r, const char **error_r) { + const struct imapc_settings *imapc_set; struct imapc_storage_client *client; struct imapc_client_settings set; string_t *str; + imapc_set = settings_parser_get_root_set(ns->user->set_parser, + imapc_get_setting_parser_info()); + i_zero(&set); set.host = imapc_set->imapc_host; if (*set.host == '\0') { @@ -371,6 +374,7 @@ int imapc_storage_client_create(struct mail_namespace *ns, client = i_new(struct imapc_storage_client, 1); client->refcount = 1; + client->set = imapc_set; i_array_init(&client->untagged_callbacks, 16); /* FIXME: storage->event would be better, but we first get here when creating mailbox_list, and storage doesn't even exist yet. */ @@ -416,8 +420,21 @@ imapc_storage_create(struct mail_storage *_storage, struct imapc_storage *storage = IMAPC_STORAGE(_storage); struct imapc_mailbox_list *imapc_list = NULL; - storage->set = settings_parser_get_root_set(_storage->user->set_parser, - imapc_get_setting_parser_info()); + if (strcmp(ns->list->name, MAILBOX_LIST_NAME_IMAPC) == 0) { + imapc_list = (struct imapc_mailbox_list *)ns->list; + storage->client = imapc_list->client; + storage->client->refcount++; + } else { + if (imapc_storage_client_create(ns, &storage->client, error_r) < 0) + return -1; + } + storage->client->_storage = storage; + storage->set = storage->client->set; + p_array_init(&storage->remote_namespaces, _storage->pool, 4); + if (!IMAPC_HAS_FEATURE(storage, IMAPC_FEATURE_NO_FETCH_BODYSTRUCTURE)) { + _storage->nonbody_access_fields |= + MAIL_FETCH_IMAP_BODY | MAIL_FETCH_IMAP_BODYSTRUCTURE; + } /* serialize all the settings */ _storage->unique_root_dir = p_strdup_printf(_storage->pool, @@ -441,22 +458,6 @@ imapc_storage_create(struct mail_storage *_storage, storage->set->pop3_deleted_flag, ns->list->set.root_dir); - if (strcmp(ns->list->name, MAILBOX_LIST_NAME_IMAPC) == 0) { - imapc_list = (struct imapc_mailbox_list *)ns->list; - storage->client = imapc_list->client; - storage->client->refcount++; - } else { - if (imapc_storage_client_create(ns, storage->set, - &storage->client, error_r) < 0) - return -1; - } - storage->client->_storage = storage; - p_array_init(&storage->remote_namespaces, _storage->pool, 4); - if (!IMAPC_HAS_FEATURE(storage, IMAPC_FEATURE_NO_FETCH_BODYSTRUCTURE)) { - _storage->nonbody_access_fields |= - MAIL_FETCH_IMAP_BODY | MAIL_FETCH_IMAP_BODYSTRUCTURE; - } - imapc_storage_client_register_untagged(storage->client, "STATUS", imapc_untagged_status); imapc_storage_client_register_untagged(storage->client, "NAMESPACE", diff --git a/src/lib-storage/index/imapc/imapc-storage.h b/src/lib-storage/index/imapc/imapc-storage.h index a37fdc2653..c6f6c2b24c 100644 --- a/src/lib-storage/index/imapc/imapc-storage.h +++ b/src/lib-storage/index/imapc/imapc-storage.h @@ -59,6 +59,7 @@ struct imapc_storage_client { struct imapc_mailbox_list *_list; struct imapc_client *client; + const struct imapc_settings *set; ARRAY(struct imapc_storage_event_callback) untagged_callbacks; @@ -74,7 +75,7 @@ struct imapc_storage_client { struct imapc_storage { struct mail_storage storage; - const struct imapc_settings *set; + const struct imapc_settings *set; /* points to client->set */ struct ioloop *root_ioloop; struct imapc_storage_client *client; @@ -199,7 +200,6 @@ struct imapc_simple_context { #define IMAPC_MAILBOX(s) container_of(s, struct imapc_mailbox, box) int imapc_storage_client_create(struct mail_namespace *ns, - const struct imapc_settings *imapc_set, struct imapc_storage_client **client_r, const char **error_r); void imapc_storage_client_unref(struct imapc_storage_client **client);