Mercurial > dovecot > core-2.2
changeset 22305:91b8f2b6ebcb
lib-storage: Changed mail storage initialization.
Most importantly require mail_namespaces_init_finish() after
mail_storage_create(). This was needed so that
mail_namespaces_created/added hook would always have the ns->list set, which
is required for several of the hooks to work (e.g. mailbox list index)
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Mon, 02 May 2016 17:00:22 +0300 |
parents | e181b398eac9 |
children | 8459df27194b |
files | src/lib-storage/index/raw/raw-storage.c src/lib-storage/mail-namespace.c src/lib-storage/mail-user.c |
diffstat | 3 files changed, 12 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/raw/raw-storage.c Mon Jul 03 21:08:02 2017 +0300 +++ b/src/lib-storage/index/raw/raw-storage.c Mon May 02 17:00:22 2016 +0300 @@ -47,6 +47,8 @@ if (mail_storage_create(ns, "raw", 0, &error) < 0) i_fatal("Couldn't create internal raw storage: %s", error); + if (mail_namespaces_init_finish(ns, &error) < 0) + i_fatal("Couldn't create internal raw namespace: %s", error); return user; }
--- a/src/lib-storage/mail-namespace.c Mon Jul 03 21:08:02 2017 +0300 +++ b/src/lib-storage/mail-namespace.c Mon May 02 17:00:22 2016 +0300 @@ -367,7 +367,9 @@ ns->next = namespaces; namespaces = ns; } - if (!namespaces_check(namespaces, error_r)) { + if (namespaces->user->autocreated) { + /* e.g. raw user - don't check namespaces' validity */ + } else if (!namespaces_check(namespaces, error_r)) { *error_r = t_strconcat("namespace configuration error: ", *error_r, NULL); while (namespaces != NULL) { @@ -434,11 +436,12 @@ } } - if (namespaces != NULL) - return mail_namespaces_init_finish(namespaces, error_r); - - /* no namespaces defined, create a default one */ - return mail_namespaces_init_location(user, NULL, error_r); + if (namespaces == NULL) { + /* no namespaces defined, create a default one */ + if (mail_namespaces_init_location(user, NULL, error_r) < 0) + return -1; + } + return mail_namespaces_init_finish(namespaces, error_r); } int mail_namespaces_init_location(struct mail_user *user, const char *location, @@ -514,12 +517,6 @@ mail_namespace_free(ns); return -1; } - user->namespaces = ns; - - T_BEGIN { - hook_mail_namespaces_added(ns); - hook_mail_namespaces_created(ns); - } T_END; return 0; } @@ -537,7 +534,6 @@ ns->user_set = user->set; ns->mail_set = mail_user_set_get_storage_set(user); i_array_init(&ns->all_storages, 2); - user->namespaces = ns; return ns; }
--- a/src/lib-storage/mail-user.c Mon Jul 03 21:08:02 2017 +0300 +++ b/src/lib-storage/mail-user.c Mon May 02 17:00:22 2016 +0300 @@ -319,6 +319,7 @@ tmp = &user->namespaces; for (; *tmp != NULL; tmp = &(*tmp)->next) { + i_assert(*tmp != ns); if (strlen(ns->prefix) < strlen((*tmp)->prefix)) break; }