From: Timo Sirainen Date: Sat, 6 Feb 2010 21:41:33 +0000 (+0200) Subject: dbox: Moved more mailbox creation code to dbox-common. X-Git-Tag: 2.0.beta3~146 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=888ab4e17f7441b4dcca4a01886d055b57f4586d;p=thirdparty%2Fdovecot%2Fcore.git dbox: Moved more mailbox creation code to dbox-common. --HG-- branch : HEAD --- diff --git a/src/lib-storage/index/dbox-common/dbox-storage.c b/src/lib-storage/index/dbox-common/dbox-storage.c index 221382a000..f74061143e 100644 --- a/src/lib-storage/index/dbox-common/dbox-storage.c +++ b/src/lib-storage/index/dbox-common/dbox-storage.c @@ -75,10 +75,33 @@ dbox_cleanup_if_exists(struct mailbox_list *list, const char *path) return TRUE; } -int dbox_mailbox_open(struct mailbox *box) +static int dbox_mailbox_create_indexes(struct mailbox *box, + const struct mailbox_update *update) { struct dbox_storage *storage = (struct dbox_storage *)box->storage; + const char *origin; + mode_t mode; + gid_t gid; + + mailbox_list_get_dir_permissions(box->list, NULL, &mode, &gid, &origin); + if (mkdir_parents_chgrp(box->path, mode, gid, origin) == 0) { + /* create indexes immediately with the dbox header */ + if (index_storage_mailbox_open(box) < 0) + return -1; + if (storage->v.mailbox_create_indexes(box, update) < 0) + return -1; + } else if (errno != EEXIST) { + if (!mail_storage_set_error_from_errno(box->storage)) { + mail_storage_set_critical(box->storage, + "mkdir(%s) failed: %m", box->path); + } + return -1; + } + return 0; +} +int dbox_mailbox_open(struct mailbox *box) +{ if (box->input != NULL) { mail_storage_set_critical(box->storage, "dbox doesn't support streamed mailboxes"); @@ -91,7 +114,7 @@ int dbox_mailbox_open(struct mailbox *box) if (strcmp(box->name, "INBOX") == 0 && (box->list->ns->flags & NAMESPACE_FLAG_INBOX) != 0) { /* INBOX always exists, create it */ - if (storage->v.mailbox_create_indexes(box, NULL) < 0) + if (dbox_mailbox_create_indexes(box, NULL) < 0) return -1; return box->opened ? 0 : index_storage_mailbox_open(box); @@ -134,7 +157,6 @@ dbox_get_alt_path(struct mailbox_list *list, const char *path) int dbox_mailbox_create(struct mailbox *box, const struct mailbox_update *update, bool directory) { - struct dbox_storage *storage = (struct dbox_storage *)box->storage; const char *path, *alt_path, *origin; struct stat st; @@ -176,7 +198,7 @@ int dbox_mailbox_create(struct mailbox *box, return -1; } - return storage->v.mailbox_create_indexes(box, update); + return dbox_mailbox_create_indexes(box, update); } int dbox_list_iter_is_mailbox(struct mailbox_list_iterate_context *ctx ATTR_UNUSED, diff --git a/src/lib-storage/index/dbox-multi/mdbox-storage.c b/src/lib-storage/index/dbox-multi/mdbox-storage.c index 9b6be1c1ba..32c1c0d85f 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-storage.c +++ b/src/lib-storage/index/dbox-multi/mdbox-storage.c @@ -245,29 +245,12 @@ static int mdbox_mailbox_create_indexes(struct mailbox *box, const struct mailbox_update *update) { struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)box; - const char *origin; - mode_t mode; - gid_t gid; int ret; - mailbox_list_get_dir_permissions(box->list, NULL, &mode, &gid, &origin); - if (mkdir_parents_chgrp(box->path, mode, gid, origin) == 0) { - /* create indexes immediately with the dbox header */ - if (index_storage_mailbox_open(box) < 0) - return -1; - mbox->creating = TRUE; - ret = mdbox_write_index_header(box, update); - mbox->creating = FALSE; - if (ret < 0) - return -1; - } else if (errno != EEXIST) { - if (!mail_storage_set_error_from_errno(box->storage)) { - mail_storage_set_critical(box->storage, - "mkdir(%s) failed: %m", box->path); - } - return -1; - } - return 0; + mbox->creating = TRUE; + ret = mdbox_write_index_header(box, update); + mbox->creating = FALSE; + return ret; } static void mdbox_storage_get_status_guid(struct mailbox *box, diff --git a/src/lib-storage/index/dbox-single/sdbox-storage.c b/src/lib-storage/index/dbox-single/sdbox-storage.c index d54b570d88..ab0f5727a8 100644 --- a/src/lib-storage/index/dbox-single/sdbox-storage.c +++ b/src/lib-storage/index/dbox-single/sdbox-storage.c @@ -183,29 +183,12 @@ static int sdbox_mailbox_create_indexes(struct mailbox *box, const struct mailbox_update *update) { struct sdbox_mailbox *mbox = (struct sdbox_mailbox *)box; - const char *origin; - mode_t mode; - gid_t gid; int ret; - mailbox_list_get_dir_permissions(box->list, NULL, &mode, &gid, &origin); - if (mkdir_parents_chgrp(box->path, mode, gid, origin) == 0) { - /* create indexes immediately with the dbox header */ - if (index_storage_mailbox_open(box) < 0) - return -1; - mbox->creating = TRUE; - ret = sdbox_write_index_header(box, update); - mbox->creating = FALSE; - if (ret < 0) - return -1; - } else if (errno != EEXIST) { - if (!mail_storage_set_error_from_errno(box->storage)) { - mail_storage_set_critical(box->storage, - "mkdir(%s) failed: %m", box->path); - } - return -1; - } - return 0; + mbox->creating = TRUE; + ret = sdbox_write_index_header(box, update); + mbox->creating = FALSE; + return ret; } static void sdbox_storage_get_status_guid(struct mailbox *box,