X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/7e3ce68e68ab9b8906a637d352993abf361554e2..9960d1e59f08254a951283981d4a32c73ca7d3ad:/src/src/smtp_in.c diff --git a/src/src/smtp_in.c b/src/src/smtp_in.c index d4b3e565a..6c9afc501 100644 --- a/src/src/smtp_in.c +++ b/src/src/smtp_in.c @@ -73,7 +73,6 @@ enum { ETRN_CMD, /* This by analogy with TURN from the RFC */ STARTTLS_CMD, /* Required by the STARTTLS RFC */ TLS_AUTH_CMD, /* auto-command at start of SSL */ - BDAT_CMD, /* Implied by RFC3030 "After all MAIL and..." */ /* This is a dummy to identify the non-sync commands when pipelining */ @@ -83,6 +82,15 @@ enum { MAIL_CMD, RCPT_CMD, RSET_CMD, + /* RFC3030 section 2: "After all MAIL and RCPT responses are collected and + processed the message is sent using a series of BDAT commands" + implies that BDAT should be synchronized. However, we see Google, at least, + sending MAIL,RCPT,BDAT-LAST in a single packet, clearly not waiting for + processing of the RPCT response(s). We shall do the same, and not require + synch for BDAT. */ + + BDAT_CMD, + /* This is a dummy to identify the non-sync commands when not pipelining */ NON_SYNC_CMD_NON_PIPELINING, @@ -344,6 +352,15 @@ if (smtp_inptr >= smtp_inend) return *smtp_inptr++; } +void +smtp_get_cache(void) +{ +#ifndef DISABLE_DKIM +int n = smtp_inend - smtp_inptr; +if (n > 0) + dkim_exim_verify_feed(smtp_inptr, n); +#endif +} /* Get a byte from the smtp input, in CHUNKING mode. Handle ack of the @@ -378,10 +395,14 @@ for(;;) /* If not the last, ack the received chunk. The last response is delayed until after the data ACL decides on it */ - /*XXX find that "last response" and append the chunk size */ if (chunking_state == CHUNKING_LAST) + { +#ifndef DISABLE_DKIM + dkim_exim_verify_feed(".\r\n", 3); /* for consistency with .-term MAIL */ +#endif return EOD; + } chunking_state = CHUNKING_OFFERED; smtp_printf("250 %u byte chunk received\r\n", chunking_datasize); @@ -2043,6 +2064,7 @@ smtp_inbuffer = (uschar *)malloc(in_buffer_size); if (smtp_inbuffer == NULL) log_write(0, LOG_MAIN|LOG_PANIC_DIE, "malloc() failed for SMTP input buffer"); receive_getc = smtp_getc; +receive_get_cache = smtp_get_cache; receive_ungetc = smtp_ungetc; receive_feof = smtp_feof; receive_ferror = smtp_ferror;