From: Timo Sirainen Date: Fri, 30 Jun 2017 10:56:54 +0000 (+0300) Subject: lib-storage: Fix mailbox delete to not delete childrens' INDEX or CONTROL dirs X-Git-Tag: 2.3.0.rc1~1344 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0784c6f498b36afe6fb079c51e3c3d7c20e26e2c;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Fix mailbox delete to not delete childrens' INDEX or CONTROL dirs If mail_location had separate INDEX and/or CONTROL set, deleting a mailbox with children caused the childrens' index and/or control directories to be deleted (but the mail/ALT directories weren't). I'm not sure why the _FLAG_MAILBOX_FILES was treated as a special case earlier. It shouldn't make a difference. --- diff --git a/src/lib-storage/list/mailbox-list-delete.c b/src/lib-storage/list/mailbox-list-delete.c index 5ecd452528..9c3b26ad41 100644 --- a/src/lib-storage/list/mailbox-list-delete.c +++ b/src/lib-storage/list/mailbox-list-delete.c @@ -296,8 +296,10 @@ static int mailbox_list_try_delete(struct mailbox_list *list, const char *name, strcmp(path, mailbox_path) == 0) return 0; - if (*list->set.maildir_name == '\0' && - (list->flags & MAILBOX_LIST_FLAG_MAILBOX_FILES) == 0) { + /* Note that only ALT currently uses maildir_name in paths. + INDEX and CONTROL don't. */ + if (type != MAILBOX_LIST_PATH_TYPE_ALT_MAILBOX || + *list->set.maildir_name == '\0') { /* this directory may contain also child mailboxes' data. we don't want to delete that. */ bool rmdir_path = *list->set.maildir_name != '\0';