]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
virtual: Fix saving to a virtual mailbox to work again
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 13 Feb 2017 18:23:49 +0000 (20:23 +0200)
committerGitLab <gitlab@git.dovecot.net>
Tue, 14 Feb 2017 12:57:34 +0000 (14:57 +0200)
Previous changes broke it.

src/plugins/virtual/virtual-mail.c
src/plugins/virtual/virtual-save.c
src/plugins/virtual/virtual-storage.h

index bd6eb4d8f61fac4c9f099b686c45f860e900e0d7..a6c69a34ff78f3f370921d28aaa7f95cb8e309c1 100644 (file)
@@ -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;
index c8671bca711bceaba9aef3c5535fa8f2c9553c75..9091c07fda2b1ee568e700d126b7366cc495b895 100644 (file)
@@ -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);
 }
 
index e847cd31f81a00e0f62d2b0abe4c3c667445acfa..a7a7f0d96723c2f80a46daf46d0320db63ea76c1 100644 (file)
@@ -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);