X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/8b6b06fe3e009cb89ae7923b890e75f9dcd50118..0f1a8658daf8689f0ef0afbb11d0cb589447a57d:/src/src/smtp_in.c diff --git a/src/src/smtp_in.c b/src/src/smtp_in.c index 0ffa21939..48437c380 100644 --- a/src/src/smtp_in.c +++ b/src/src/smtp_in.c @@ -339,8 +339,8 @@ int fd, rc; fd_set fds; struct timeval tzero; -if (tls_in.active >= 0 && tls_could_read()) - return FALSE; +if (tls_in.active >= 0) + return !tls_could_read(); if (smtp_inptr < smtp_inend) return FALSE; @@ -1795,15 +1795,33 @@ for (i = 0; i < smtp_ch_index; i++) sep = US","; } -if (s != NULL) s[ptr] = 0; else s = US""; +if (s) s[ptr] = 0; else s = US""; log_write(0, LOG_MAIN, "no MAIL in SMTP connection from %s D=%s%s", - host_and_ident(FALSE), - readconf_printtime( (int) ((long)time(NULL) - (long)smtp_connection_start)), - s); + host_and_ident(FALSE), string_timesince(&smtp_connection_start), s); +} + + +/* Return list of recent smtp commands */ + +uschar * +smtp_cmd_hist(void) +{ +uschar * list = NULL; +int size = 0, len = 0, i; + +for (i = smtp_ch_index; i < SMTP_HBUFF_SIZE; i++) + if (smtp_connection_had[i] != SCH_NONE) + list = string_append_listele(list, &size, &len, ',', + smtp_names[smtp_connection_had[i]]); +for (i = 0; i < smtp_ch_index; i++) + list = string_append_listele(list, &size, &len, ',', + smtp_names[smtp_connection_had[i]]); +return list ? list : US""; } + /************************************************* * Check HELO line and set sender_helo_name * *************************************************/ @@ -2333,7 +2351,7 @@ uschar *user_msg, *log_msg; uschar *code, *esc; uschar *p, *s, *ss; -smtp_connection_start = time(NULL); +gettimeofday(&smtp_connection_start, NULL); for (smtp_ch_index = 0; smtp_ch_index < SMTP_HBUFF_SIZE; smtp_ch_index++) smtp_connection_had[smtp_ch_index] = SCH_NONE; smtp_ch_index = 0; @@ -2599,10 +2617,7 @@ if (!sender_host_unknown) Ustrcat(p, "[ "); p += 2; for (i = 0; i < opt[1]; i++) - { - sprintf(CS p, "%2.2x ", opt[i]); - p += 3; - } + p += sprintf(CS p, "%2.2x ", opt[i]); *p++ = ']'; } opt += opt[1]; @@ -3011,7 +3026,7 @@ if (rcpt_in_progress) rcpt_in_progress = FALSE; } -/* Not output the message, splitting it up into multiple lines if necessary. +/* Now output the message, splitting it up into multiple lines if necessary. We only handle pipelining these responses as far as nonfinal/final groups, not the whole MAIL/RCPT/DATA response set. */