]> 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)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 17 Feb 2017 09:32:32 +0000 (11:32 +0200)
Previous changes broke it.

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

index 3845e355bb677742f4df4952c35f46517d79e37b..f2d4fd7b49a75ab8edc5072c691fda11c784bda2 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 c777091410f9b5b92196a5e63adcbcfc5527e5a9..4588c593bece195c83819a4238e473056e79b660 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);