ietf
[Top] [All Lists]

Re: Last Call: SMTP Service Extension for Content Negotiation to Proposed Standard

2002-07-08 07:03:58
granted it's necessary for the client to be able to do that, but my 
point
is that having the server report conneg faliures in the RCPT status code
doesn't relieve the client of the necessity to detect other conditions
resulting from valid conneg strings that can cause delivery failure.
it's not as if the client can rely only on the response code to 
determine
how to handle the message.

Sure, but it is only useful to treat such failures as permanent.

how so?

Because you said: "other conditions resulting from valid conneg strings that
can cause delivery failure." If the conneg result is something you do not like
I don't think treating this as a temporary failure in hopes the conneg string
will change in the future is either reasonable or appropriate.

When you said "such failures" I wasn't sure which failures you were talking 
about -
the ones that are caused by server inability to supply a conneg string or those
caused by conneg strings that indicate that no conversion is possible.  (since
the quoted paragraph mentioned both kinds of failure)

if there is a temporary failure to get conneg information, the
client might quite reasonably decide to retry later.   or if the client
can't translate part of the message, it might reasonably decide that
delivering the remainder of the message is preferable to bouncing it.

That wasn't the case you were talking about.

That response was based on a guess as to what you were talking about.
I guessed wrong.

I remain unconvinced that this is a useful distinction. What REQUIRED 
says is
"I absolutely require CONNEG info and as such a failure to have it is the 
same
to me as any other sort of failure and should be responded to 
accordingly".

it's still poor separation of function, and it's still asking the server
to report a failure condition which the client understands better than the
server does.  E.g. the server is told to report errors as 4.3.3 or 5.3.3
when codes x.6.1 or x.6.2 or x.6.3 might be more appropriate.  The server
can't tell the difference between those conditions; the client can.

Ah, I see. We've moved from assertions that there were sure to be problems to
the nonspecific "poor separation of function".

Admittedly "poor separation of function" is a nonspecific description of the 
problem,
but a more specific description followed which described what I meant.

Asking the server to report reply codes and (more importantly) enhanced status
codes that don't accurately describe the condition that caused the failure,
(and cannot, because the server lacks the information necessary to distinguish
those conditions) doesn't seem like good protocol design to me.  The words
"poor separation of function" seem like an accurate description of this kind of
design flaw, though I wouldn't expect someone to understand my criticism of the
design (or accept the argument for changing it) from those four words alone.

But the entire point of REQUIRED
is to say "I don't want these functions separated; conneg failures are just
like any other failure to me".

Admitted that this is the entire point of REQUIRED; the question is whether
this is good design or an appropriate feature to include.  Using REQUIRED
doesn't simplify the design of the client by any significant amount (if
at all), and by using REQUIRED a client somewhat impairs its ability
to produce meaningful error reports.

In short: REQUIRED is not necessary because clients can detect a missing
CONNEG string by other means, it doesn't seem to be useful because it
doesn't simplify either the client or the server nor make them more
efficient, it encourages client implementors to produce less meaningful
error reports, and even though the implementation overhead is low, it
does add additional baggage to the protocol.

The real question is, why do we want this?

Why? If the client doesn't want CONNEG to alter the status all it has to 
do is
use OPTIONAL rather than REQUIRED. Again, REQUIRED implies that the 
client is
willing to treat different sorts of failures in the same way.

well, if we had such other features then the client wanting to assert such
other features would not be able to assert CONNEG=REQUIRED, it would just
have to implement the error detection by itself.

Doesn't follow. If some other functionality is implemented that results in 
RCPT
TO failing in some new way it can return errors in the same way. Of course the
error report is limited to a single error condition, but the potential for
multiple failures having to be collapsed into a single return value already
exists in abundance; the existance of this extension or an arbitrary number of
future extensions changes nothing in this regard.

I agree that we already have the potential for RCPT to report several kinds of
errors, though I do think adding new conditions is likely to contribute to less
precise error reporting.  And prior to this proposal all of the errors reported
by the server have been for conditions which were better detected by the server 
-
this proposal is new in that it asks the server to report an error for a 
condition
which is better detected by the client.

Again, I think a means of distinguishing conneg material in the response 
is a
good idea and I'm not opposed to eliminating REQUIRED. But really don't 
believe
REQUIRED causes the problems you think it does.

The overall effect of REQUIRED is probably to increase the number of
implementation errors and the number of mis-reported delivery failures.

Well, I've worked out what code is necessary to do this, and IMO this just
doesn't rise to the level of complexity for this to be the case.

The code to implement REQUIRED on either the client or server end is trivial.

On the other hand, the effort required for a new implementor to understand SMTP
and how this extension interacts with all of the other ones is nontrivial.

On numerous occasions we've both seen that even somewhat mature implementations
frequently misunderstand far less subtle aspects of email protocols than
those being discussed here.   This proposal introduces new opportunities
for misunderstanding.  Some of them are due to the way that the protocol
extension works, others are due to the description (or lack thereof) of
how the extension is to be used.

I believe that every new bit of complexity that we add to SMTP requires
significant justification, whether that complexity is measured in lines of
code, in lines of text that implementors have to understand, or (especially!)
in undocumented assumptions on the part of the designer that implementors
have to figure out.  And every bit of unnecessary complexity we can remove
from a proposed extension is worthwhile.

We might disagree on the relative merits of a particular feature, and
some of that is to be expected.  But when we get into extended
arguments about a single aspect of the design we should not lose
sight of the overall picture:  We need for email to work reliably.

In various ways this proposal adds unnecessary complexity, and lacks
the degree of background explanation that is necessary to allow
implementors to understand how to use it, especially for non-fax cases.

If it seems like I'm attacking the proposal harshly, it's only because
I'm painfully aware of how often SMTP is misimplemented, and because
I think that these discussions should have been had in the broader
SMTP implementor community long before IETF-wide Last Call.

Keith



<Prev in Thread] Current Thread [Next in Thread>