From: Timo Sirainen Date: Mon, 12 Apr 2010 16:14:55 +0000 (+0300) Subject: lmtp: Crashfix to multiple RCPT TOs when the first mail couldn't be used as a copy... X-Git-Tag: 2.0.beta5~143 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6b72856cca2917864b43d346b2aff987bb3397d2;p=thirdparty%2Fdovecot%2Fcore.git lmtp: Crashfix to multiple RCPT TOs when the first mail couldn't be used as a copy source. --HG-- branch : HEAD --- diff --git a/src/lmtp/commands.c b/src/lmtp/commands.c index e8212e4e1c..8b9a9c478a 100644 --- a/src/lmtp/commands.c +++ b/src/lmtp/commands.c @@ -604,26 +604,19 @@ client_input_data_write_local(struct client *client, struct istream *input) if (client_open_raw_mail(client, input) < 0) return; - /* save the message to the first recipient's mailbox */ src_mail = client->state.raw_mail; - if (!client_deliver_next(client, src_mail)) { - /* nothing got saved */ - i_assert(client->state.first_saved_mail == NULL); - return; - } - - if (client->state.first_saved_mail == NULL) - mail_user_unref(&client->state.dest_user); - else { - client->state.dest_user = NULL; - src_mail = client->state.first_saved_mail; + while (client_deliver_next(client, src_mail)) { + if (client->state.first_saved_mail == NULL || + client->state.first_saved_mail == src_mail) + mail_user_unref(&client->state.dest_user); + else { + /* use the first saved message to save it elsewhere too. + this might allow hard linking the files. */ + client->state.dest_user = NULL; + src_mail = client->state.first_saved_mail; + } } - /* use the first saved message to save it elsewhere too. - this might allow hard linking the files. */ - while (client_deliver_next(client, src_mail)) - mail_user_unref(&client->state.dest_user); - if (client->state.first_saved_mail != NULL) { struct mail *mail = client->state.first_saved_mail; struct mailbox_transaction_context *trans = mail->transaction;