Mercurial > dovecot > core-2.2
changeset 10286:353a30947b91 HEAD
lmtp client: More fixes to handling RCPT TO failures.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 09 Nov 2009 20:03:42 -0500 |
parents | aa8729e340ba |
children | 147627c8433a |
files | src/lib-lda/lmtp-client.c |
diffstat | 1 files changed, 11 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-lda/lmtp-client.c Mon Nov 09 19:27:27 2009 -0500 +++ b/src/lib-lda/lmtp-client.c Mon Nov 09 20:03:42 2009 -0500 @@ -183,31 +183,21 @@ { struct lmtp_rcpt *rcpt; unsigned int i, count; - bool last = TRUE; - switch (client->protocol) { - case LMTP_CLIENT_PROTOCOL_SMTP: - i_assert(client->rcpt_next_data_idx == 0); - - rcpt = array_get_modifiable(&client->recipients, &count); - for (i = 0; i < count; i++) { - rcpt[i].failed = line[0] != '2'; - rcpt[i].data_callback(!rcpt[i].failed, line, - rcpt[i].context); + rcpt = array_get_modifiable(&client->recipients, &count); + for (i = client->rcpt_next_data_idx; i < count; i++) { + if (rcpt[i].failed) { + /* already called rcpt_to_callback with failure */ + continue; } - client->rcpt_next_data_idx = count; - break; - case LMTP_CLIENT_PROTOCOL_LMTP: - rcpt = array_idx_modifiable(&client->recipients, - client->rcpt_next_data_idx); - rcpt->failed = line[0] != '2'; - last = ++client->rcpt_next_data_idx == - array_count(&client->recipients); - rcpt->data_callback(!rcpt->failed, line, rcpt->context); - break; + rcpt[i].failed = line[0] != '2'; + rcpt[i].data_callback(!rcpt[i].failed, line, + rcpt[i].context); + if (client->protocol == LMTP_CLIENT_PROTOCOL_LMTP) + break; } - return !last; + return i < count; } static void lmtp_client_send_data(struct lmtp_client *client)