From: Timo Sirainen Date: Mon, 26 Jun 2017 16:44:43 +0000 (+0300) Subject: lib-storage: Don't autocreate mailbox during deletion. X-Git-Tag: 2.2.32.rc1~36 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4ac47a954c14a32ba74be14840a80496c71697fd;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Don't autocreate mailbox during deletion. Trying to delete a nonexistent autocreated mailbox first created it and then immediately deleted it. --- diff --git a/src/lib-storage/index/index-storage.c b/src/lib-storage/index/index-storage.c index ea81cd4330..39d03ebdaa 100644 --- a/src/lib-storage/index/index-storage.c +++ b/src/lib-storage/index/index-storage.c @@ -735,7 +735,15 @@ int index_storage_mailbox_delete_pre(struct mailbox *box) if (!box->opened) { /* \noselect mailbox, try deleting only the directory */ - return index_storage_mailbox_delete_dir(box, FALSE); + if (index_storage_mailbox_delete_dir(box, FALSE) == 0) + return 0; + if (mailbox_is_autocreated(box)) { + /* Return success when trying to delete autocreated + mailbox. The client sees it as existing, so we + shouldn't be returning an error. */ + return 0; + } + return -1; } if ((box->list->flags & MAILBOX_LIST_FLAG_MAILBOX_FILES) == 0) { diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index 0fb3c6b396..27697e7885 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -1203,6 +1203,7 @@ mailbox_open_full(struct mailbox *box, struct istream *input) } T_END; if (ret < 0 && box->storage->error == MAIL_ERROR_NOTFOUND && + !box->deleting && box->input == NULL && mailbox_is_autocreated(box)) T_BEGIN { ret = mailbox_autocreate_and_reopen(box); } T_END; @@ -1549,7 +1550,7 @@ int mailbox_delete(struct mailbox *box) if (mailbox_get_last_mail_error(box) != MAIL_ERROR_NOTFOUND && !box->mailbox_deleted) return -1; - /* \noselect mailbox */ + /* might be a \noselect mailbox, so continue deletion */ } ret = box->v.delete_box(box);