From: owner-ietf-smtp(_at_)mail(_dot_)imc(_dot_)org [mailto:owner-ietf-
smtp(_at_)mail(_dot_)imc(_dot_)org] On Behalf Of David MacQuigg
Sent: Thursday, October 22, 2009 9:43 AM
To: IETF SMTP list
Subject: Re: Abort data transfer?
If the receiver is accepting data so fast, that it runs a few seconds
ahead of the milter process, then a few seconds of data might
*beyond* where the milter says REJECT. That's certainly less of a
problem than receiving data forever.
This isn't how Sendmail works. The entire message is cached to the queue
before milter is told anything about the headers or body. There's no "a few
seconds ahead", it's all the way ahead. Milter has no opportunity to say
REJECT in the middle of the SMTP DATA phase because the filter doesn't even
know that's where the MTA is.
Read the code in srvrsmtp.c and note that collect() is called before
milter_data(); the former collects the entire message from the incoming stream,
and the latter is what sends header and body information down to the filters.
I just did an experiment with Sendmail using telnet as the client. If
send one line of data, then pause, Sendmail waits 10 minutes then
disconnects with no message to telnet. There is no timeout in telnet,
so it just sits there until I force a disconnect on that end.
That's an MTA timeout and has nothing to do with milter. Upon reaching this
timeout, the filter has received the envelope data but none of the header or
body, and will be given an "abort" instruction.