]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: mailbox-list: index_list_rename_mailbox() - Support NO-NOSELECT
authorMarkus Valentin <markus.valentin@open-xchange.com>
Fri, 14 Jan 2022 07:07:50 +0000 (08:07 +0100)
committermartti.rannanjarvi <martti.rannanjarvi@open-xchange.com>
Wed, 26 Jan 2022 07:38:02 +0000 (07:38 +0000)
When NO-NOSELECT is configured delete parent mailboxes which are not
selectable or existant when renaming child mailboxes.

src/lib-storage/list/mailbox-list-index-backend.c

index fecad1db8e9b1ff9d56e6a7be8efa109e04a0c5d..6b42c01020e752809ce39a93fe5281f7a53a7883 100644 (file)
@@ -808,6 +808,7 @@ index_list_rename_mailbox(struct mailbox_list *_oldlist, const char *oldname,
        const void *data;
        bool created, expunged;
        uint32_t oldseq, newseq;
+       int ret;
 
        if (_oldlist != _newlist) {
                mailbox_list_set_error(_oldlist, MAIL_ERROR_NOTPOSSIBLE,
@@ -881,7 +882,12 @@ index_list_rename_mailbox(struct mailbox_list *_oldlist, const char *oldname,
                              sync_ctx->ilist->ext_id, &oldrec, NULL);
        mail_index_expunge(sync_ctx->trans, newseq);
 
-       return mailbox_list_index_sync_end(&sync_ctx, TRUE);
+       ret = mailbox_list_index_sync_end(&sync_ctx, TRUE);
+
+       if (_oldlist->set.no_noselect && ret == 0)
+               (void)index_list_try_delete_nonexistent_parent(_oldlist, oldname);
+
+       return ret;
 }
 
 static struct mailbox_list_iterate_context *