dovecot-2.0: Mailbox opening and closing APIs changed.
dovecot at dovecot.org
dovecot at dovecot.org
Mon Jun 15 21:31:52 EEST 2009
details: http://hg.dovecot.org/dovecot-2.0/rev/653183a81b6c
changeset: 9468:653183a81b6c
user: Timo Sirainen <tss at iki.fi>
date: Mon Jun 15 14:28:55 2009 -0400
description:
Mailbox opening and closing APIs changed.
diffstat:
80 files changed, 1075 insertions(+), 1235 deletions(-)
src/imap/cmd-append.c | 9
src/imap/cmd-close.c | 3
src/imap/cmd-copy.c | 12
src/imap/cmd-delete.c | 3
src/imap/cmd-select.c | 18 -
src/imap/cmd-unselect.c | 3
src/imap/imap-status.c | 9
src/lda/main.c | 14
src/lib-lda/mail-deliver.c | 31 --
src/lib-storage/index/cydir/cydir-storage.c | 97 +++---
src/lib-storage/index/cydir/cydir-storage.h | 2
src/lib-storage/index/cydir/cydir-sync.c | 8
src/lib-storage/index/dbox/dbox-file.c | 8
src/lib-storage/index/dbox/dbox-mail.c | 5
src/lib-storage/index/dbox/dbox-save.c | 4
src/lib-storage/index/dbox/dbox-storage-rebuild.c | 36 +-
src/lib-storage/index/dbox/dbox-storage.c | 213 +++++++--------
src/lib-storage/index/dbox/dbox-storage.h | 9
src/lib-storage/index/dbox/dbox-sync-rebuild.c | 9
src/lib-storage/index/dbox/dbox-sync.c | 10
src/lib-storage/index/index-storage.c | 109 ++++---
src/lib-storage/index/index-storage.h | 14
src/lib-storage/index/index-thread.c | 6
src/lib-storage/index/maildir/maildir-copy.c | 2
src/lib-storage/index/maildir/maildir-keywords.c | 2
src/lib-storage/index/maildir/maildir-mail.c | 5
src/lib-storage/index/maildir/maildir-save.c | 9
src/lib-storage/index/maildir/maildir-storage.c | 187 +++++--------
src/lib-storage/index/maildir/maildir-storage.h | 3
src/lib-storage/index/maildir/maildir-sync-index.c | 7
src/lib-storage/index/maildir/maildir-sync.c | 25 -
src/lib-storage/index/maildir/maildir-uidlist.c | 4
src/lib-storage/index/maildir/maildir-util.c | 20 -
src/lib-storage/index/mbox/mbox-file.c | 13
src/lib-storage/index/mbox/mbox-lock.c | 30 +-
src/lib-storage/index/mbox/mbox-mail.c | 4
src/lib-storage/index/mbox/mbox-save.c | 2
src/lib-storage/index/mbox/mbox-storage.c | 284 ++++++++------------
src/lib-storage/index/mbox/mbox-storage.h | 2
src/lib-storage/index/mbox/mbox-sync-rewrite.c | 9
src/lib-storage/index/mbox/mbox-sync.c | 64 ++--
src/lib-storage/index/raw/raw-mail.c | 9
src/lib-storage/index/raw/raw-storage.c | 90 ++----
src/lib-storage/index/raw/raw-storage.h | 3
src/lib-storage/index/raw/raw-sync.c | 8
src/lib-storage/list/index-mailbox-list-sync.c | 18 -
src/lib-storage/mail-storage-private.h | 24 -
src/lib-storage/mail-storage.c | 63 ++--
src/lib-storage/mail-storage.h | 41 +-
src/lib-storage/mailbox-list-private.h | 2
src/lib-storage/mailbox-list.c | 17 -
src/lib-storage/test-mail-storage.c | 2
src/lib-storage/test-mail-storage.h | 6
src/lib-storage/test-mailbox.c | 19 -
src/lmtp/commands.c | 16 -
src/plugins/acl/acl-mailbox.c | 75 ++++-
src/plugins/acl/acl-plugin.h | 5
src/plugins/acl/acl-storage.c | 47 ---
src/plugins/convert/convert-storage.c | 26 -
src/plugins/expire/expire-plugin.c | 51 ---
src/plugins/expire/expire-tool.c | 8
src/plugins/fts/fts-plugin.c | 6
src/plugins/fts/fts-plugin.h | 4
src/plugins/fts/fts-storage.c | 14
src/plugins/imap-acl/imap-acl-plugin.c | 22 -
src/plugins/imap-quota/imap-quota-plugin.c | 13
src/plugins/lazy-expunge/lazy-expunge-plugin.c | 99 ++----
src/plugins/listescape/listescape-plugin.c | 11
src/plugins/mail-log/mail-log-plugin.c | 12
src/plugins/mbox-snarf/mbox-snarf-plugin.c | 25 -
src/plugins/quota/quota-count.c | 9
src/plugins/quota/quota-storage.c | 23 -
src/plugins/trash/trash-plugin.c | 8
src/plugins/virtual/virtual-config.c | 2
src/plugins/virtual/virtual-storage.c | 164 +++++------
src/plugins/virtual/virtual-storage.h | 1
src/plugins/virtual/virtual-sync.c | 26 +
src/plugins/zlib/zlib-plugin.c | 12
src/pop3/pop3-client.c | 16 -
src/util/doveadm.c | 9
diffs (truncated from 4684 to 300 lines):
diff -r 7b6fe859ec64 -r 653183a81b6c src/imap/cmd-append.c
--- a/src/imap/cmd-append.c Fri Jun 12 12:52:38 2009 -0400
+++ b/src/imap/cmd-append.c Mon Jun 15 14:28:55 2009 -0400
@@ -465,10 +465,11 @@ get_mailbox(struct client_command_contex
mailbox_equals(cmd->client->mailbox, ns, name))
return cmd->client->mailbox;
- box = mailbox_open(ns->list, name, NULL, MAILBOX_OPEN_SAVEONLY |
- MAILBOX_OPEN_KEEP_RECENT);
- if (box == NULL) {
- client_send_list_error(cmd, ns->list);
+ box = mailbox_alloc(ns->list, name, NULL, MAILBOX_FLAG_SAVEONLY |
+ MAILBOX_FLAG_KEEP_RECENT);
+ if (mailbox_open(box) < 0) {
+ client_send_storage_error(cmd, mailbox_get_storage(box));
+ mailbox_close(&box);
return NULL;
}
if (cmd->client->enabled_features != 0)
diff -r 7b6fe859ec64 -r 653183a81b6c src/imap/cmd-close.c
--- a/src/imap/cmd-close.c Fri Jun 12 12:52:38 2009 -0400
+++ b/src/imap/cmd-close.c Mon Jun 15 14:28:55 2009 -0400
@@ -23,8 +23,7 @@ bool cmd_close(struct client_command_con
if (mailbox_sync(mailbox, 0, 0, NULL) < 0)
client_send_untagged_storage_error(client, storage);
- if (mailbox_close(&mailbox) < 0)
- client_send_untagged_storage_error(client, storage);
+ mailbox_close(&mailbox);
client_update_mailbox_flags(client, NULL);
client_send_tagline(cmd, "OK Close completed.");
diff -r 7b6fe859ec64 -r 653183a81b6c src/imap/cmd-copy.c
--- a/src/imap/cmd-copy.c Fri Jun 12 12:52:38 2009 -0400
+++ b/src/imap/cmd-copy.c Mon Jun 15 14:28:55 2009 -0400
@@ -127,11 +127,13 @@ bool cmd_copy(struct client_command_cont
if (mailbox_equals(client->mailbox, dest_ns, mailbox))
destbox = client->mailbox;
else {
- destbox = mailbox_open(dest_ns->list, mailbox, NULL,
- MAILBOX_OPEN_SAVEONLY |
- MAILBOX_OPEN_KEEP_RECENT);
- if (destbox == NULL) {
- client_send_list_error(cmd, dest_ns->list);
+ destbox = mailbox_alloc(dest_ns->list, mailbox, NULL,
+ MAILBOX_FLAG_SAVEONLY |
+ MAILBOX_FLAG_KEEP_RECENT);
+ if (mailbox_open(destbox) < 0) {
+ client_send_storage_error(cmd,
+ mailbox_get_storage(destbox));
+ mailbox_close(&destbox);
return TRUE;
}
if (client->enabled_features != 0)
diff -r 7b6fe859ec64 -r 653183a81b6c src/imap/cmd-delete.c
--- a/src/imap/cmd-delete.c Fri Jun 12 12:52:38 2009 -0400
+++ b/src/imap/cmd-delete.c Mon Jun 15 14:28:55 2009 -0400
@@ -33,8 +33,7 @@ bool cmd_delete(struct client_command_co
storage = mailbox_get_storage(mailbox);
client->mailbox = NULL;
- if (mailbox_close(&mailbox) < 0)
- client_send_untagged_storage_error(client, storage);
+ mailbox_close(&mailbox);
}
if ((client->workarounds & WORKAROUND_TB_EXTRA_MAILBOX_SEP) != 0 &&
diff -r 7b6fe859ec64 -r 653183a81b6c src/imap/cmd-select.c
--- a/src/imap/cmd-select.c Fri Jun 12 12:52:38 2009 -0400
+++ b/src/imap/cmd-select.c Mon Jun 15 14:28:55 2009 -0400
@@ -263,13 +263,15 @@ select_open(struct imap_select_context *
{
struct client *client = ctx->cmd->client;
struct mailbox_status status;
- enum mailbox_open_flags open_flags = 0;
+ enum mailbox_flags flags = 0;
if (readonly)
- open_flags |= MAILBOX_OPEN_READONLY | MAILBOX_OPEN_KEEP_RECENT;
- ctx->box = mailbox_open(ctx->ns->list, mailbox, NULL, open_flags);
- if (ctx->box == NULL) {
- client_send_list_error(ctx->cmd, ctx->ns->list);
+ flags |= MAILBOX_FLAG_READONLY | MAILBOX_FLAG_KEEP_RECENT;
+ ctx->box = mailbox_alloc(ctx->ns->list, mailbox, NULL, flags);
+ if (mailbox_open(ctx->box) < 0) {
+ client_send_storage_error(ctx->cmd,
+ mailbox_get_storage(ctx->box));
+ mailbox_close(&ctx->box);
return -1;
}
@@ -370,15 +372,11 @@ bool cmd_select_full(struct client_comma
client->mailbox_change_lock = cmd;
if (client->mailbox != NULL) {
- struct mail_storage *old_storage =
- mailbox_get_storage(client->mailbox);
-
client_search_updates_free(client);
box = client->mailbox;
client->mailbox = NULL;
- if (mailbox_close(&box) < 0)
- client_send_untagged_storage_error(client, old_storage);
+ mailbox_close(&box);
/* CLOSED response is required by QRESYNC */
client_send_line(client, "* OK [CLOSED]");
}
diff -r 7b6fe859ec64 -r 653183a81b6c src/imap/cmd-unselect.c
--- a/src/imap/cmd-unselect.c Fri Jun 12 12:52:38 2009 -0400
+++ b/src/imap/cmd-unselect.c Mon Jun 15 14:28:55 2009 -0400
@@ -18,8 +18,7 @@ bool cmd_unselect(struct client_command_
client->mailbox = NULL;
storage = mailbox_get_storage(mailbox);
- if (mailbox_close(&mailbox) < 0)
- client_send_untagged_storage_error(client, storage);
+ mailbox_close(&mailbox);
client_update_mailbox_flags(client, NULL);
client_send_tagline(cmd, "OK Unselect completed.");
diff -r 7b6fe859ec64 -r 653183a81b6c src/imap/imap-status.c
--- a/src/imap/imap-status.c Fri Jun 12 12:52:38 2009 -0400
+++ b/src/imap/imap-status.c Mon Jun 15 14:28:55 2009 -0400
@@ -62,13 +62,8 @@ int imap_status_get(struct client *clien
}
/* open the mailbox */
- box = mailbox_open(ns->list, mailbox, NULL, MAILBOX_OPEN_FAST |
- MAILBOX_OPEN_READONLY | MAILBOX_OPEN_KEEP_RECENT);
- if (box == NULL) {
- *error_r = mailbox_list_get_last_error(ns->list, &error);
- *error_r = imap_get_error_string(*error_r, error);
- return -1;
- }
+ box = mailbox_alloc(ns->list, mailbox, NULL, MAILBOX_FLAG_READONLY |
+ MAILBOX_FLAG_KEEP_RECENT);
if ((items & STATUS_HIGHESTMODSEQ) != 0)
client_enable(client, MAILBOX_FEATURE_CONDSTORE);
diff -r 7b6fe859ec64 -r 653183a81b6c src/lda/main.c
--- a/src/lda/main.c Fri Jun 12 12:52:38 2009 -0400
+++ b/src/lda/main.c Mon Jun 15 14:28:55 2009 -0400
@@ -416,17 +416,17 @@ int main(int argc, char *argv[])
i_fatal("Couldn't create internal raw storage: %s", errstr);
if (path == NULL) {
input = create_raw_stream(&ctx, 0, &mtime);
- box = mailbox_open(raw_ns->list, "Dovecot Delivery Mail",
- input, MAILBOX_OPEN_NO_INDEX_FILES);
+ box = mailbox_alloc(raw_ns->list, "Dovecot Delivery Mail",
+ input, MAILBOX_FLAG_NO_INDEX_FILES);
i_stream_unref(&input);
} else {
mtime = (time_t)-1;
- box = mailbox_open(raw_ns->list, path, NULL,
- MAILBOX_OPEN_NO_INDEX_FILES);
- }
- if (box == NULL) {
+ box = mailbox_alloc(raw_ns->list, path, NULL,
+ MAILBOX_FLAG_NO_INDEX_FILES);
+ }
+ if (mailbox_open(box) < 0) {
i_fatal("Can't open delivery mail as raw: %s",
- mailbox_list_get_last_error(raw_ns->list, &error));
+ mail_storage_get_last_error(box->storage, &error));
}
if (mailbox_sync(box, 0, 0, NULL) < 0) {
i_fatal("Can't sync delivery mail: %s",
diff -r 7b6fe859ec64 -r 653183a81b6c src/lib-lda/mail-deliver.c
--- a/src/lib-lda/mail-deliver.c Fri Jun 12 12:52:38 2009 -0400
+++ b/src/lib-lda/mail-deliver.c Mon Jun 15 14:28:55 2009 -0400
@@ -79,16 +79,16 @@ mailbox_open_or_create_synced(struct mai
struct mail_storage *storage;
struct mailbox *box;
enum mail_error error;
- enum mailbox_open_flags open_flags =
- MAILBOX_OPEN_KEEP_RECENT | MAILBOX_OPEN_SAVEONLY |
- MAILBOX_OPEN_POST_SESSION;
+ enum mailbox_flags flags =
+ MAILBOX_FLAG_KEEP_RECENT | MAILBOX_FLAG_SAVEONLY |
+ MAILBOX_FLAG_POST_SESSION;
*error_r = NULL;
if (strcasecmp(name, "INBOX") == 0) {
/* deliveries to INBOX must always succeed,
regardless of ACLs */
- open_flags |= MAILBOX_OPEN_IGNORE_ACLS;
+ flags |= MAILBOX_FLAG_IGNORE_ACLS;
}
*ns_r = ns = mail_namespace_find(ctx->dest_user->namespaces, &name);
@@ -101,16 +101,17 @@ mailbox_open_or_create_synced(struct mai
return NULL;
}
- box = mailbox_open(ns->list, name, NULL, open_flags);
- if (box != NULL)
+ box = mailbox_alloc(ns->list, name, NULL, flags);
+ if (mailbox_open(box) == 0)
return box;
- *error_r = mailbox_list_get_last_error(ns->list, &error);
+ storage = mailbox_get_storage(box);
+ *error_r = mail_storage_get_last_error(storage, &error);
+ mailbox_close(&box);
if (!ctx->set->lda_mailbox_autocreate || error != MAIL_ERROR_NOTFOUND)
return NULL;
/* try creating it. */
- storage = mail_namespace_get_default_storage(ns);
if (mail_storage_mailbox_create(storage, ns, name, FALSE) < 0) {
*error_r = mail_storage_get_last_error(storage, &error);
return NULL;
@@ -121,16 +122,12 @@ mailbox_open_or_create_synced(struct mai
}
/* and try opening again */
- box = mailbox_open(ns->list, name, NULL, open_flags);
- if (box == NULL) {
- *error_r = mailbox_list_get_last_error(ns->list, &error);
- return NULL;
- }
-
- if (mailbox_sync(box, 0, 0, NULL) < 0) {
+ box = mailbox_alloc(ns->list, name, NULL, flags);
+ storage = mailbox_get_storage(box);
+ if (mailbox_open(box) < 0 ||
+ mailbox_sync(box, 0, 0, NULL) < 0) {
+ *error_r = mail_storage_get_last_error(storage, &error);
mailbox_close(&box);
- *error_r = mail_storage_get_last_error(mailbox_get_storage(box),
- &error);
return NULL;
}
return box;
diff -r 7b6fe859ec64 -r 653183a81b6c src/lib-storage/index/cydir/cydir-storage.c
--- a/src/lib-storage/index/cydir/cydir-storage.c Fri Jun 12 12:52:38 2009 -0400
+++ b/src/lib-storage/index/cydir/cydir-storage.c Mon Jun 15 14:28:55 2009 -0400
@@ -48,13 +48,13 @@ cydir_storage_get_list_settings(const st
set->subscription_fname = CYDIR_SUBSCRIPTION_FILE_NAME;
}
-static int create_cydir(struct mail_storage *storage, struct mail_namespace *ns,
+static int create_cydir(struct mail_storage *storage, struct mailbox_list *list,
const char *path)
{
mode_t mode;
gid_t gid;
- mailbox_list_get_dir_permissions(ns->list, NULL, &mode, &gid);
+ mailbox_list_get_dir_permissions(list, NULL, &mode, &gid);
if (mkdir_parents_chown(path, mode, (uid_t)-1, gid) < 0 &&
errno != EEXIST) {
if (!mail_storage_set_error_from_errno(storage)) {
@@ -67,76 +67,64 @@ static int create_cydir(struct mail_stor
}
static struct mailbox *
-cydir_open(struct mail_storage *storage, struct mailbox_list *list,
- const char *name, enum mailbox_open_flags flags)
+cydir_mailbox_alloc(struct mail_storage *storage, struct mailbox_list *list,
+ const char *name, struct istream *input,
+ enum mailbox_flags flags)
{
struct cydir_mailbox *mbox;
- struct mail_index *index;
- const char *path;
pool_t pool;
- path = mailbox_list_get_path(list, name,
- MAILBOX_LIST_PATH_TYPE_MAILBOX);
- index = index_storage_alloc(list, name, flags, CYDIR_INDEX_PREFIX);
- mail_index_set_fsync_types(index, MAIL_INDEX_SYNC_TYPE_APPEND |
- MAIL_INDEX_SYNC_TYPE_EXPUNGE);
+ /* cydir can't work without index files */
+ flags &= ~MAILBOX_FLAG_NO_INDEX_FILES;
pool = pool_alloconly_create("cydir mailbox", 1024+512);
mbox = p_new(pool, struct cydir_mailbox, 1);
mbox->ibox.box = cydir_mailbox;
mbox->ibox.box.pool = pool;
mbox->ibox.box.storage = storage;
+ mbox->ibox.box.list = list;
mbox->ibox.mail_vfuncs = &cydir_mail_vfuncs;
- mbox->ibox.index = index;
+
+ index_storage_mailbox_alloc(&mbox->ibox, name, input, flags,
+ CYDIR_INDEX_PREFIX);
+ mail_index_set_fsync_types(mbox->ibox.index,
+ MAIL_INDEX_SYNC_TYPE_APPEND |
+ MAIL_INDEX_SYNC_TYPE_EXPUNGE);
mbox->storage = (struct cydir_storage *)storage;
- mbox->path = p_strdup(pool, path);
-
- index_storage_mailbox_init(&mbox->ibox, name, flags, FALSE);
return &mbox->ibox.box;
}
More information about the dovecot-cvs
mailing list