[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: draft-nerenberg-imap-binary-00.txt



Issues with the binary extension:

(1) I concur with Mark's comments about syntax. The current proposed syntax is unacceptable, the XFETCH strawman seems workable (with associated XFETCH response). I could also deal with a fetch-item modifier as an alternative to a new command:
C: A002 FETCH 1:5 <BINARY>BODY[1]
S: * 1 FETCH (<BINARY>BODY[1] {#}...)
or
C: A002 FETCH 1:5 <CHARSET=UTF8><BINARY>BODY[1]
S: * 1 FETCH (<CHARSET=UTF8><BINARY>BODY[1] {#}...)
With that syntax, each modifier would have to describe how it interacts with various fetch items, for example, <BINARY>SIZE would return the size after removal of base64/QP encoding.


(2) I am currently opposed to a distinguished syntax for binary literals on the grounds that it introduces two silly states: a binary literal with non-binary content and a non-binary literal with binary content. (In unextended IMAP, the latter is simply a protocol violation which robust implementations should detect.) I would much prefer the statement that if the server advertises XFETCH BINARY, then the prohibition on the client sending binary literals for message content is lifted, and if the client issues the XFETCH command with BINARY option, then the prohibition on the server sending binary message content is lifted.

(3) If the concensus is against me on point 2, then I object to using a suffix to indicate a binary literal on the grounds that it breaks existing LITERAL+ detectors. That objection would not apply to a prefix character.

(4) If a server advertises XFETCH BINARY, that should permit the use of binary CTE and binary literal content in APPEND.

(5) An unextended IMAP server is required to convert a body part with a binary CTE to base64. An IMAP message store could receive a binary body part via the binary SMTP extension or an APPEND command (it is currently illegal protocol to have a true binary CTE in an APPEND). If we ever want to support binary body parts signed by PGP or S/MIME, then we need a way to distinguish the canonical CTE from the requested/supplied CTE. I don't have a strong opinion one way or the other, but the issue needs to be considered.

(6) BINARY and CHARSET=UTF8 conversions are no brainers (since an IMAP server with a halfway decent SEARCH command already implements them internally). But the CHANNEL model is both very important for conversions not likely to be built into an IMAP server and rather tricky to get right due to security/firewall issues.

(7) I suggest we have an XFETCH (MD5) modifier, which computes the MD5 hash of the specified fetch BODY item -- MD5 is just a content conversion which happens to have a fixed size output. May make channel security issues simpler, and could permit verification of PGP or S/MIME signatures without fetching all parts.

Note that I believe the CHANNEL mechanism in combination with an extension to the SMTP-SUBMIT protocol is the correct way to provide the ability to forward/resend an attachment without downloading it.

- Chris