From 8fb6b9e1b847e6a0dc4f73d5d8cfb178830a282e Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 3 Nov 2022 17:40:28 +0200 Subject: [PATCH] dsync: Skip autocreated mailboxes that haven't been created yet --- src/doveadm/dsync/dsync-mailbox-tree-fill.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/doveadm/dsync/dsync-mailbox-tree-fill.c b/src/doveadm/dsync/dsync-mailbox-tree-fill.c index c523e6bdc5..17c1eea0e5 100644 --- a/src/doveadm/dsync/dsync-mailbox-tree-fill.c +++ b/src/doveadm/dsync/dsync-mailbox-tree-fill.c @@ -79,6 +79,7 @@ static int dsync_mailbox_tree_add(struct dsync_mailbox_tree *tree, { struct dsync_mailbox_node *node; struct mailbox *box; + enum mailbox_existence existence; struct mailbox_metadata metadata; struct mailbox_status status; const char *errstr; @@ -94,8 +95,23 @@ static int dsync_mailbox_tree_add(struct dsync_mailbox_tree *tree, /* get GUID and UIDVALIDITY for selectable mailbox */ box = mailbox_alloc(info->ns->list, info->vname, MAILBOX_FLAG_READONLY); - if (dsync_mailbox_tree_get_selectable(box, &metadata, &status) < 0) { + ret = mailbox_exists(box, FALSE, &existence); + if (ret == 0 && existence != MAILBOX_EXISTENCE_SELECT) { + /* autocreated mailbox doesn't exist yet */ + mailbox_free(&box); + if (existence == MAILBOX_EXISTENCE_NOSELECT) { + return !guid_128_is_empty(box_guid) ? 0 : + dsync_mailbox_tree_add_exists_node( + tree, info, &node, error_r); + } else { + return 0; + } + } + if (ret == 0) + ret = dsync_mailbox_tree_get_selectable(box, &metadata, &status); + if (ret < 0) { errstr = mailbox_get_last_internal_error(box, &error); + ret = 0; switch (error) { case MAIL_ERROR_NOTFOUND: /* mailbox was just deleted? */ -- 2.47.3