Network Working Group | J. Myers |
Internet-Draft | |
Obsoletes: 2088 (if approved) | A. Melnikov, Ed. |
Intended status: Standards Track | Isode Ltd |
Expires: June 20, 2015 | December 17, 2014 |
IMAP4 non-synchronizing literals
draft-melnikov-rfc2088bis-01.txt
The Internet Message Access Protocol (RFC 3501) contains the "literal" syntactic construct for communicating strings. When sending a literal from client to server, IMAP requires the client to wait for the server to send a command continuation request between sending the octet count and the string data. This document specifies an alternate form of literal which does not require this network round trip.
This document specifies 2 IMAP extensions: LITERAL+ and LITERAL-. The former allows the alternate form of literals in all IMAP command. The latter is the same as LITERAL+, but disallow the alternate form in IMAP APPEND.
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."
This Internet-Draft will expire on June 20, 2015.
Copyright (c) 2014 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English.
The non-synchronizing literal is added an alternate form of literal, and may appear in communication from client to server instead of the IMAP [RFC3501] form of literal. The IMAP form of literal, used in communication from client to server, is referred to as a synchronizing literal. The non-synchronizing literal form MUST NOT be sent from server to client.
Non-synchronizing literals may be used with any IMAP server implementation which returns "LITERAL+" or "LITERAL-" as one of the supported capabilities to the CAPABILITY command. If the server does not advertise either of the above capabilities, the client must use synchronizing literals instead. The difference between "LITERAL+" and "LITERAL-" extensions is explained in Section 4.
The non-synchronizing literal is distinguished from the original synchronizing literal by having a plus ('+') between the octet count and the closing brace ('}'). The server does not generate a command continuation request in response to a non-synchronizing literal, and clients are not required to wait before sending the octets of a non- synchronizing literal.
The protocol receiver of an IMAP server must check the end of every received line for an open brace ('{') followed by an octet count, a plus ('+'), and a close brace ('}') immediately preceeding the CRLF. If it finds this sequence, it is the octet count of a non- synchronizing literal and the server MUST treat the specified number of following octets and the following line as part of the same command. A server MAY still process commands and reject errors on a line-by-line basis, as long as it checks for non-synchronizing literals at the end of each line.
Example:
C: A001 LOGIN {11+} C: FRED FOOBAR {7+} C: fat man S: A001 OK LOGIN completed
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].
In examples, "C:" and "S:" indicate lines sent by the client and server respectively. If a single "C:" or "S:" label applies to multiple lines, then the line breaks between those lines are for editorial clarity only and are not part of the actual protocol exchange.
This section is important to understand for both client and server developers of this IMAP extension.
While non-synchronizing literals have clear advantages for clients, such as simplicity of use, they might be more difficilt to handle on the server side. When a non synchronizing literal is used by a client which is too big for the server to accept, a compliant LITERAL+ server implementation has to make a choice between several non optimal choices:
The problem described above is most common when using the APPEND command, because most of commands don't need to send lots of data from the client to the server. Some server implementations impose limits on literal (both synchronizing and non synchronizing) accepted from clients in order to protect from Denial Of Service attacks. Implementations can generally impose much lower limits on literal sizes for all commands other than APPEND. In order to address literal size issue in APPEND, this document introduces a new extension "LITERAL-", described in Section 4.
"LITERAL-" extension is almost identical to "LITERAL+", with one exception: when "LITERAL-" is advertised, non synchronizing literals MUST NOT be sent in APPEND (and extensions to APPEND such as MULTIAPPEND [RFC3502] and CATENATE [RFC4469]). A "LITERAL-" compliant server which encounters a non synchronizing literal in APPEND MUST reject such APPEND command with a tagged BAD response.
Because "LITERAL-" is a more restricted version of "LITERAL+", IMAP servers MUST NOT advertise both of these capabilities at the same time.
RFC 4466 [RFC4466] updated the non-terminal "literal8" defined in [RFC3516] to allow for non-synchronizing literals if both [RFC3516] and "LITERAL+" (or "LITERAL-") extensions are supported by the server.
The following syntax specification uses the Augmented Backus-Naur Form (ABNF) notation as specified in [ABNF].
Non-terminals referenced but not defined below are as defined by [RFC3501].
literal = "{" number ["+"] "}" CRLF *CHAR8 ; Number represents the number of CHAR8 octets CHAR8 = <defined in RFC 3501> literal8 = <defined in RFC 4466>
This document doesn't raise any new security concerns not already raised by [RFC3501].
IMAP4 capabilities are registered by publishing a standards track or IESG approved experimental RFC. The registry is currently located at:
http://www.iana.org/assignments/imap-capabilities
This document requests that IANA updated the above registry to include the entry for LITERAL+ capability pointing to this document.
This document also requests that IANA adds "LITERAL-" capability pointing to this document to the above registry.
Reference draft-jayantheesh-imap-appendlimit-extension which allows advertising limits for the APPEND command.
TBD
[ABNF] | Crocker, D. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", STD 68, RFC 5234, January 2008. |
[RFC2119] | Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. |
[RFC3501] | Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1", RFC 3501, March 2003. |
[RFC3516] | Nerenberg, L., "IMAP4 Binary Content Extension", RFC 3516, April 2003. |
[RFC4466] | Melnikov, A. and C. Daboo, "Collected Extensions to IMAP4 ABNF", RFC 4466, April 2006. |
[RFC3502] | Crispin, M., "Internet Message Access Protocol (IMAP) - MULTIAPPEND Extension", RFC 3502, March 2003. |
[RFC4469] | Resnick, P., "Internet Message Access Protocol (IMAP) CATENATE Extension", RFC 4469, April 2006. |
Added IANA registration.
Updated references.
Additional implementation considerations based on the IMAP mailing list discussions.
LITERAL- capability description.