John C Klensin wrote:
This is just my personal opinion, but if we add specific text to
deal with every clear violation of the existing standard text,
we will make 2821bis twice as long and add approximately zero
new information. I don't particularly object to this change but
wonder where things end if we start down that path.
And, of course, if the "Microsoft ESMTP server" issued the 421
because it intended to shut the connection down, then not only
is the response valid but I think we would prefer it to
"ignoring the command" by sending a 250 and suppressing that
information.
John, I looked into this more, and I think I found how what is going on.
First the summary of all this:
Maybe simply this change to the last sentence of the NOOP command
section is appropriate:
If a parameter string is specified, servers MUST ignore the
string as a reason for a 421 response. It MAY be used for
logging purposes only.
Background:
What's going on that these specific ESMTP (Extended Server) are still
following RFC 821 where there is ABNF or expecting for a NOOP string:
With RFC 821:
4.1. SMTP COMMANDS
NOOP (NOOP)
This command does not affect any parameters or previously
entered commands. It specifies no action other than that
the receiver send an OK reply.
This command has no effect on any of the reverse-path
buffer, the forward-path buffer, or the mail data buffer.
4.3. SEQUENCING OF COMMANDS AND REPLIES
NOOP
S: 250
E: 500, 421
Please note that in RFC821, the 421 is specifically stated for ALL
commands. This is important when it comes to RFC 2821 because it is now
removed and implied across all commands, and it adds ABNF for NOOP.
With RFC 2821 (same text in 2821bis):
4.1.1.9 NOOP (NOOP)
This command does not affect any parameters or previously entered
commands. It specifies no action other than that the receiver send
an OK reply.
This command has no effect on the reverse-path buffer, the forward-
path buffer, or the mail data buffer and may be issued at any time.
If a parameter string is specified, servers SHOULD ignore it.
Syntax:
"NOOP" [ SP String ] CRLF
4.3.2 Command-Reply Sequences
NOOP
S: 250
So 421 is implied for real server critical shut down reasons in 2821
compliant servers across the board.
For 821 compliant servers, the 421 is appropiate for an unexpected NOOP
string. No bug.
So in summary, you might want to consider these history real
possibilities where there some innocent "bugs" to help codify 2821
expected behaviors, especially when the server indicated it is an
EXTENDED SMTP (ESMTP) server. :-)
So maybe simply this change to the last sentence of the NOOP command
section is appropriate:
If a parameter string is specified, servers MUST ignore the
string as a reason for a 421 response. It MAY be used for
logging purposes only.
This will make it backward compatible and helpful to legacy programmers
of 821 base logic that might want to revisit their code, and it will
also make it very clear to future programmers.
--
Sincerely
Hector Santos, CTO
http://www.santronics.com
http://santronics.blogspot.com