If we were to write an Errata against RFC 3207, I'd suggest text such as
the following (in Errata format):
Section:
4.2 Result of the STARTTLS Command
Old text:
The server MUST discard any knowledge obtained from the client, such
as the argument to the EHLO command, which was not obtained from the
TLS negotiation itself.
New text:
The server MUST discard any knowledge obtained from the client that
was not obtained from the TLS negotiation itself. The server state
is otherwise as if the connection had just been opened.
Reason:
The example is misleading and has lead some people to think that
knowledge of an EHLO having been sent previously should be
remembered.
Section:
4.2 Result of the STARTTLS Command
Old text:
The client SHOULD send an EHLO command as the
first command after a successful TLS negotiation.
New text:
The client MUST send either an EHLO command or a HELO command as the
first command after a successful TLS negotiation.
Reason:
Since the state is reset to that of a connection having just been
opened, the requirement from RFC 5321 applies:
In any event, a client MUST issue HELO or EHLO before starting a
mail transaction.
The previous text implied that a client can get by without sending
one or the either.
Section:
4. The STARTTLS Command
Old text:
The format for the STARTTLS command is:
STARTTLS
with no parameters.
New text:
The format for the STARTTLS command is:
STARTTLS
with no parameters.
Because the server state machine is reset to an initial connection
state after negotiating TLS, and any modifications to the server
state will be lost, the client SHOULD NOT issue any MAIL
FROM or RCPT TO commands prior to using the STARTTLS command.
Now for the $64k questions:
1) Is there consensus behind this viewpoint?
2) If so, does the text above cover the ground?
3) If so, who wants to file the Errata?
Tony Hansen
tony(_at_)att(_dot_)com
John C Klensin wrote:
--On Thursday, January 29, 2009 10:09 -0500 Tony Hansen
<tony(_at_)att(_dot_)com> wrote:
If this is the interpretation that we gain consensus on, that
it means "start over from scratch", it might as well also say
that it
SHOULD only be executed immediately after the initial EHLO.
The only possible exceptions to this rule would be for verbs
that don't affect the state machine, such as VRFY, EXPN, HELP,
NOOP.
RSET is also harmless immediately after EHLO. Changing the
state from "session open (EHLO issued), no mail transaction
state" to "session open (EHLO issued), no mail transaction
state" is a no-op. And the first paragraph of 4.1.1.5 of 5321
says that.
Out of context, I'm not sure exactly what you are suggesting
above, but I believe that it would mean:
S: 220 ...
C: EHLO ...
S: 250-...
S: 250-STARTTLS
S: 250-...
S: 250 OK
C: STARTTLS ...
(TLS session starts)
and the next command must be either EHLO
or as many instances of any of VRFY,
EXPN, HELP, NOOP, RSET as desired, followed by EHLO
Also, the "what the server MUST (or SHOULD) discard and the
client MUST (or SHOULD) not depend on" sentences and example
might reasonably be modified to explicitly include any
information gained from VRFY or EXPN issued between the 220
greeting and the initial EHLO. While one might not trust VRFY
or EXPN queries or results issued under TLS either, it would be
pointless and silly to send them before the initial EHLO if one
knew that one was going to issue STARTTLS if the server
permitted it. Indeed the only reason for doing so would be if
one intended to make a decision about whether to continue with a
mail transaction at all based on the results of VRFY or EXPN...
and that would be very rare today except in special
circumstances.
john