From: Timo Sirainen Date: Mon, 13 Feb 2017 18:23:49 +0000 (+0200) Subject: virtual: Fix saving to a virtual mailbox to work again X-Git-Tag: 2.2.28.rc1~100 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6816dcc048cb84d6675a480d5c69682b027eb651;p=thirdparty%2Fdovecot%2Fcore.git virtual: Fix saving to a virtual mailbox to work again Previous changes broke it. --- diff --git a/src/plugins/virtual/virtual-mail.c b/src/plugins/virtual/virtual-mail.c index 3845e355bb..f2d4fd7b49 100644 --- a/src/plugins/virtual/virtual-mail.c +++ b/src/plugins/virtual/virtual-mail.c @@ -172,6 +172,18 @@ virtual_mail_set_backend_mail(struct mail *mail, return vmail->cur_backend_mail; } +void virtual_mail_set_unattached_backend_mail(struct mail *mail, + struct mail *backend_mail) +{ + struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct mail_private *backend_pmail; + + vmail->cur_backend_mail = backend_mail; + + backend_pmail = (struct mail_private *)backend_mail; + backend_pmail->vmail = mail; +} + static void virtual_mail_set_seq(struct mail *mail, uint32_t seq, bool saving) { struct virtual_mail *vmail = (struct virtual_mail *)mail; diff --git a/src/plugins/virtual/virtual-save.c b/src/plugins/virtual/virtual-save.c index c8671bca71..9091c07fda 100644 --- a/src/plugins/virtual/virtual-save.c +++ b/src/plugins/virtual/virtual-save.c @@ -79,10 +79,7 @@ virtual_copy_keywords(struct mailbox *src_box, int virtual_save_begin(struct mail_save_context *_ctx, struct istream *input) { struct virtual_save_context *ctx = (struct virtual_save_context *)_ctx; - struct virtual_mailbox *mbox = - (struct virtual_mailbox *)_ctx->transaction->box; struct mail_save_data *mdata = &_ctx->data; - struct mail *mail; if (ctx->backend_save_ctx == NULL) { if (ctx->open_errstr != NULL) { @@ -113,8 +110,8 @@ int virtual_save_begin(struct mail_save_context *_ctx, struct istream *input) mailbox_save_set_guid(ctx->backend_save_ctx, mdata->guid); mailbox_save_set_min_modseq(ctx->backend_save_ctx, mdata->min_modseq); - mail = virtual_mail_set_backend_mail(_ctx->dest_mail, mbox->save_bbox); - mailbox_save_set_dest_mail(ctx->backend_save_ctx, mail); + virtual_mail_set_unattached_backend_mail(_ctx->dest_mail, + ctx->backend_save_ctx->dest_mail); return mailbox_save_begin(&ctx->backend_save_ctx, input); } diff --git a/src/plugins/virtual/virtual-storage.h b/src/plugins/virtual/virtual-storage.h index c777091410..4588c593be 100644 --- a/src/plugins/virtual/virtual-storage.h +++ b/src/plugins/virtual/virtual-storage.h @@ -195,6 +195,8 @@ virtual_mail_alloc(struct mailbox_transaction_context *t, struct mail * virtual_mail_set_backend_mail(struct mail *mail, struct virtual_backend_box *bbox); +void virtual_mail_set_unattached_backend_mail(struct mail *mail, + struct mail *backend_mail); struct mailbox_sync_context * virtual_storage_sync_init(struct mailbox *box, enum mailbox_sync_flags flags);