From: Timo Sirainen Date: Tue, 15 Nov 2016 22:57:06 +0000 (+0200) Subject: lib-storage: If LAYOUT=index loses mailbox names, write the generated ones to index. X-Git-Tag: 2.2.27~139 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5cbd16c3dfbeeb485c00554c23405f0941d1f32c;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: If LAYOUT=index loses mailbox names, write the generated ones to index. Previously it just kept complaining and regenerating new names, without actually fixing up the situation. --- diff --git a/src/lib-storage/list/mailbox-list-index-sync.c b/src/lib-storage/list/mailbox-list-index-sync.c index e5d73253ab..13d3f6331e 100644 --- a/src/lib-storage/list/mailbox-list-index-sync.c +++ b/src/lib-storage/list/mailbox-list-index-sync.c @@ -334,11 +334,13 @@ mailbox_list_index_sync_list(struct mailbox_list_index_sync_context *sync_ctx) static void mailbox_list_index_sync_update_hdr(struct mailbox_list_index_sync_context *sync_ctx) { - if (sync_ctx->orig_highest_name_id != sync_ctx->ilist->highest_name_id) { + if (sync_ctx->orig_highest_name_id != sync_ctx->ilist->highest_name_id || + sync_ctx->ilist->corrupted) { /* new names added. this implicitly resets refresh flag */ T_BEGIN { mailbox_list_index_sync_names(sync_ctx); } T_END; + sync_ctx->ilist->corrupted = FALSE; } else if (mailbox_list_index_need_refresh(sync_ctx->ilist, sync_ctx->view)) { /* we're synced, reset refresh flag */ diff --git a/src/lib-storage/list/mailbox-list-index.c b/src/lib-storage/list/mailbox-list-index.c index 61d6fc8f92..47a0a1f56c 100644 --- a/src/lib-storage/list/mailbox-list-index.c +++ b/src/lib-storage/list/mailbox-list-index.c @@ -383,6 +383,7 @@ int mailbox_list_index_parse(struct mailbox_list *list, mail_index_mark_corrupted(ilist->index); return -1; } + ilist->corrupted = TRUE; } if (mailbox_list_index_parse_records(ilist, view, &error) < 0) { mailbox_list_set_critical(list, @@ -394,6 +395,7 @@ int mailbox_list_index_parse(struct mailbox_list *list, } /* FIXME: find any missing mailboxes, add them and write the index back. */ + ilist->corrupted = TRUE; } return 0; } diff --git a/src/lib-storage/list/mailbox-list-index.h b/src/lib-storage/list/mailbox-list-index.h index 6fe9ccd298..ba274c472d 100644 --- a/src/lib-storage/list/mailbox-list-index.h +++ b/src/lib-storage/list/mailbox-list-index.h @@ -113,6 +113,7 @@ struct mailbox_list_index { unsigned int updating_status:1; unsigned int has_backing_store:1; unsigned int index_last_check_changed:1; + unsigned int corrupted:1; }; struct mailbox_list_index_iterate_context {