On Thu, 8 Apr 2004, David Harris wrote:
I have an IMAP client developer telling me that my server is broken
because I insist on the proper RFC3501 sequencing of steps when the
client submits a literal.

It is *never* broken behavior to follow the RFC.


In short, he is saying that he can send the {<count>} followed by the
data in a single packet without waiting for the continuation command
from my server, and that I am broken because I won't accept that.
His claim is that this type of literal pipelining is "common Internet
practice" and that I should be more tolerant.

Tell him that the inventor of IMAP (and author of the IMAP specification) says that anyone who pleads "common Internet practice" to justify violating the protocol is full of [censored].


The reason I don't accept this type of single-packet literal delivery is
because I have to do an internal mode switch to accept a literal, and a
side-effect of that is that the internal TCP buffering I do gets flushed.

Well... Here's my position:


The client is broken. IMAP has literal synchronization for a reason. A client must synchronize literals, unless the server offers LITERAL+ (and the client uses the LITERAL+ form of literal). By treating synchronizing literals as non-synchronizing literals, the client runs the risk of putting the IMAP session into an undefined state if the server (for whatever reason) chooses to refuse the literal.

Your server isn't helping matters by flushing the TCP buffer. Nothing in the IMAP specification that justifies doing so, and I don't think that you should do so. Nevertheless, your server *is* compliant as-is.

It is therefore your decision whether or not you wish to accomodate this client. As much as I think that you shouldn't flush your TCP buffer, I feel even more strongly that a compliant implementation should never be required to change its ways to accomodate a broken implementation.

I am a bit offended by the client author's assertation that your server is "broken" because it does not accomodate non-compliant behavior that he alleges is "common Internet practice."

I would feel differently if he admitted fault, and begged indulgence. It wouldn't be unreasonable if he had said "I'll fix it, but it's a difficult fix and it is going to be a while before the fix gets out. In the meantime, please help my users out by making your server more tolerant."

True Confession Time: until some time between October and December 1992, the c-client library's IMAP2 client code would send a literal without doing synchronization (the Interlisp code did the right thing). It was laziness, and only affected sending passwords in the LOGIN command. So, if you want to call me on sins that were amended 11 years ago, you can say that I'm the pot calling the kettle black... :-)

-- Mark --

http://staff.washington.edu/mrc
Science does not emerge from voting, party politics, or public debate.
Si vis pacem, para bellum.

Reply via email to