From d872e3d20330a9376be0974ab18618444a9efcb5 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Mon, 28 Apr 2008 21:48:10 +0000 Subject: [PATCH] Fixed a syntax error in the previous commit. Also added socket error checking. --- citadel/modules/smtp/serv_smtp.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/citadel/modules/smtp/serv_smtp.c b/citadel/modules/smtp/serv_smtp.c index 34b14cde8..43d2de624 100644 --- a/citadel/modules/smtp/serv_smtp.c +++ b/citadel/modules/smtp/serv_smtp.c @@ -1202,16 +1202,17 @@ void smtp_try(const char *key, const char *addr, int *status, } } - /* If we reach this point, the server is expecting data */ - /** Need to parse each line of the message here since someone may have sent + /* If we reach this point, the server is expecting data. + * Need to parse each line of the message here since someone may have sent * a message containing a single dot on a line of its own. In that case we * need to escape it in accordance with RFC821. * We could do this with the tokenizer functions but num_tokens returns an * int and the message may contain more lines than that, also copying each * line would be slow. */ + int bytes_written = 0; nextline = msgtext; - while (*nextline) + while ( (*nextline) && (bytes_written >= 0) ) { chunk_to_send = nextline; while (*nextline != '\n') @@ -1219,11 +1220,18 @@ void smtp_try(const char *key, const char *addr, int *status, nextline++; prev_char = *nextline; *nextline = '\0'; - if (!strcmp(chunk_to_send, ".\r\n"); - sock_write(sock, "..\r\n", 4); - else - sock_write(sock, chunk_to_send, (size_t)(nextline-chunk_to_send)); + if (!strcmp(chunk_to_send, ".\r\n")) { + bytes_written = sock_write(sock, "..\r\n", 4); + } + else { + bytes_written = sock_write(sock, chunk_to_send, (size_t)(nextline-chunk_to_send)); + } *nextline = prev_char; + if (bytes_written < 0) { + *status = 4; + strcpy(dsn, "Connection broken during SMTP message transmit"); + goto bail; + } } if (msgtext[msg_size-1] != 10) { -- 2.39.2