From: Aki Tuomi Date: Wed, 28 Dec 2016 20:45:22 +0000 (+0200) Subject: index-storage: Update mailbox last_rename_stamp on rename X-Git-Tag: 2.3.0.rc1~2343 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3743948b65bd079cd6f2502d35bd21666c1a2f5a;p=thirdparty%2Fdovecot%2Fcore.git index-storage: Update mailbox last_rename_stamp on rename --- diff --git a/src/lib-storage/index/index-storage.c b/src/lib-storage/index/index-storage.c index a3908af92f..d55d7501f7 100644 --- a/src/lib-storage/index/index-storage.c +++ b/src/lib-storage/index/index-storage.c @@ -300,6 +300,10 @@ int index_storage_mailbox_open(struct mailbox *box, bool move_to_memory) box->box_name_hdr_ext_id = mail_index_ext_register(box->index, "box-name", 0, 0, 0); + box->box_last_rename_stamp_ext_id = + mail_index_ext_register(box->index, "last-rename-stamp", + sizeof(uint32_t), 0, sizeof(uint32_t)); + box->opened = TRUE; if ((box->enabled_features & MAILBOX_FEATURE_CONDSTORE) != 0) @@ -795,6 +799,19 @@ int index_storage_mailbox_rename(struct mailbox *src, struct mailbox *dest) return -1; } + if (mailbox_open(dest) == 0) { + struct mail_index_transaction *t = + mail_index_transaction_begin(dest->view, 0); + + uint32_t stamp = ioloop_time; + + mail_index_update_header_ext(t, dest->box_last_rename_stamp_ext_id, + 0, &stamp, sizeof(stamp)); + + /* can't do much if this fails anyways */ + (void)mail_index_transaction_commit(&t); + } + /* we'll track mailbox names, instead of GUIDs. We may be renaming a non-selectable mailbox (directory), which doesn't even have a GUID */ mailbox_name_get_sha128(dest->vname, guid); diff --git a/src/lib-storage/mail-storage-private.h b/src/lib-storage/mail-storage-private.h index c91a447c2a..69bbf18da1 100644 --- a/src/lib-storage/mail-storage-private.h +++ b/src/lib-storage/mail-storage-private.h @@ -362,6 +362,7 @@ struct mailbox { uint32_t vsize_hdr_ext_id; uint32_t pop3_uidl_hdr_ext_id; uint32_t box_name_hdr_ext_id; + uint32_t box_last_rename_stamp_ext_id; /* MAIL_RECENT flags handling */ ARRAY_TYPE(seq_range) recent_flags;