Mercurial > dovecot > core-2.2
changeset 12283:2c364acbc293
lmtp: Don't allow saving zero byte sized messages.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 15 Oct 2010 19:21:43 +0100 |
parents | 7a839a028dfa |
children | a771ccba0c31 |
files | src/lmtp/commands.c |
diffstat | 1 files changed, 20 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lmtp/commands.c Fri Oct 15 19:04:42 2010 +0100 +++ b/src/lmtp/commands.c Fri Oct 15 19:21:43 2010 +0100 @@ -526,7 +526,7 @@ return FALSE; } -static void client_rcpt_fail_all(struct client *client) +static void client_rcpt_tempfail_all(struct client *client) { const struct mail_recipient *rcpt; @@ -583,7 +583,6 @@ i_error("Can't open delivery mail as raw: %s", mail_storage_get_last_error(box->storage, &error)); mailbox_free(&box); - client_rcpt_fail_all(client); return -1; } raw_box = (struct raw_mailbox *)box; @@ -605,8 +604,10 @@ struct mail *src_mail; uid_t old_uid, first_uid = (uid_t)-1; - if (client_open_raw_mail(client, input) < 0) + if (client_open_raw_mail(client, input) < 0) { + client_rcpt_tempfail_all(client); return; + } old_uid = geteuid(); src_mail = client->state.raw_mail; @@ -707,12 +708,28 @@ return str_c(str); } +static void client_rcpt_fail_all_zerosize(struct client *client) +{ + const struct mail_recipient *rcpt; + + array_foreach(&client->state.rcpt_to, rcpt) { + client_send_line(client, + "451 4.2.0 <%s> Can't save empty message", + rcpt->address); + } +} + static bool client_input_data_write(struct client *client) { struct istream *input; bool ret = TRUE; i_stream_destroy(&client->dot_input); + if (client->state.mail_data_output == NULL && + client->state.mail_data->used == 0) { + client_rcpt_fail_all_zerosize(client); + return TRUE; + } input = client_get_input(client); client_input_data_write_local(client, input);