Internet DRAFT - draft-gulbrandsen-imap-nostore

draft-gulbrandsen-imap-nostore



Network Working Group                                   Arnt Gulbrandsen
Request for Comments: DRAFT                       Oryx Mail Systems GmbH
draft-gulbrandsen-imap-nostore-00.txt                      February 2006



                       The IMAP NOSTORE Extension


Status of this Memo

    By submitting this Internet-Draft, each author represents that any
    applicable patent or other IPR claims of which he or she is aware
    have been or will be disclosed, and any of which he or she becomes
    aware will be disclosed, in accordance with Section 6 of BCP 79.

    Internet-Drafts are working documents of the Internet Engineering
    Task Force (IETF), its areas, and its working groups.  Note that
    other groups may also distribute working documents as Internet-
    Drafts.

    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."

    The list of current Internet-Drafts can be accessed at
    http://www.ietf.org/ietf/1id-abstracts.txt. The list of Internet-
    Draft Shadow Directories can be accessed at
    http://www.ietf.org/shadow.html.

    This Internet-Draft will expire in February, 2007.


Copyright Notice

    Copyright (C) The Internet Society (2006).


Abstract

    The NOSTORE extension allows an IMAP server to send EXPUNGE and
    EXISTS responses to a support client at any time, while preserving
    the advantages of message-number arithmentic.

    The extension requires that UID STORE be used instead of STORE.





Gulbrandsen               Expires Feburary 2007                 [Page 1]

Internet-draft                                               August 2006


Conventions Used in This Document

    The key words "REQUIRED", "MUST", "MUST NOT", "SHOULD", "SHOULD
    NOT", and "MAY" in this document are to be interpreted as described
    in "Key words for use in RFCs to Indicate Requirement Levels"
    [KEYWORDS]. Formal syntax is defined by [ABNF] as modified by [IMAP]
    and [IMAPABNF].

    In the example, "C:" and "S:" indicate lines sent by the client and
    server respectively.


Introduction

    An [IMAP] server that supports this extension announces "NOSTORE" as
    one of its capabilities. This extension adds one new select
    parameter, no commands and no responses.

    While the extension is active, the server notifies the client at
    once about external changes to the mailbox.


Client Requirements

    To enable NOSTORE for a mailbox session, the client uses the NOSTORE
    select-param on the SELECT command.

    In such a session, the client MUST NOT use the STORE command. It
    should always use the UID STORE command instead.

    The client MUST tolerate that EXPUNGE, EXISTS and other untagged
    responses can arrive at any time, even when no command is being
    executed.

    It follows that commands with MSN arguments are best not used. This
    includes FETCH, COPY, often SEARCH and sometimes UID SEARCH. The
    commands UID STORE, UID FETCH, UID COPY and UID SEARCH can do the
    same job.


Server Requirements

    When NOSTORE has been enabled for a mailbox session, the server
    changes its behaviour as follows:

    The server MUST reject the STORE command with a BAD response.





Gulbrandsen               Expires Feburary 2007                 [Page 2]

Internet-draft                                               August 2006


    If a command is found to contains MSNs outside the currently valid
    range, the server MUST silently ignore these MSNs. (This is similar
    to how UIDs are handled.)

    The server SHOULD send EXISTS and EXPUNGED responses promptly when
    messages are added to the mailbox or expunged from the mailbox. The
    server MAY send flag updates and other unsolicited responses at any
    time.


Examples

    In examples, some lines have been wrapped for editorial clarity.

    In this example, a client selects a mailbox and updates its UID and
    flag cache.

         C: a SELECT INBOX (NOSTORE)
         S: * FLAGS (\Deleted \Answered \Flagged \Draft \Seen)
         S: * 999 EXISTS
         S: * 0 RECENT
         S: * OK [UIDNEXT 10001] next uid
         S: * OK [UIDVALIDITY 1] uid validity
         S: * OK [PERMANENTFLAGS (\Deleted \Answered \Flagged \Draft
            \Seen \*)] permanent flags
         S: a OK [READ-WRITE] Mailbox selected with NOSTORE active
         C: b UID FETCH 1:* (FLAGS)
         S: * 1 FETCH (UID 10 FLAGS (\seen))
         S: * 2 FETCH (UID 20 FLAGS (\seen))
         [996 similar responses elided]
         S: * 999 FETCH (UID 10000 FLAGS ())
         S: c OK That was fun

    In the next example, an advanced client uses MSN arithmetic to do
    the same job much more efficiently. Before connecting, the client
    has 1000 messages cached, with UIDs 10, 20 and so on to 10000. When
    connecting, it sees that the server has just 999 messages, and so
    knows that at least one message has been deleted.

         C: a SELECT INBOX (NOSTORE)
         S: * FLAGS (\Deleted \Answered \Flagged \Draft \Seen)
         S: * 999 EXISTS
         S: * 0 RECENT
         S: * OK [UIDNEXT 10001] next uid
         S: * OK [UIDVALIDITY 1] uid validity
         S: * OK [PERMANENTFLAGS (\Deleted \Answered \Flagged \Draft
            \Seen \*)] permanent flags
         S: a OK [READ-WRITE] Mailbox selected with NOSTORE active



Gulbrandsen               Expires Feburary 2007                 [Page 3]

Internet-draft                                               August 2006


    To find out which message was deleted without using too much
    bandwidth, this very smart client starts with a search command using
    MSNs:

         C: d UID SEARCH 1,200,400,600,800,999,* UID
         S: * SEARCH 10,2000,4000,6000,8000,10000
         S: d OK Search completed

    At this time, the client knows the approximate UID of the deleted
    messages. The server has 198 messages with UIDs between 10 and 2000,
    199 between 2000 and 4000, etc. The client determines that since the
    server has 198 messages between UID 8000 and 10000 and its own cache
    contains 199 messages, the deleted message must be in this range.
    Accordingly it sends another search:

         C: e UID SEARCH 801:998
         S: * SEARCH 8010,8030,8040,8040,[196 more UIDs elided]
         S: e OK Search completed

    The second search reveals that the cached message with UID 8020 has
    been expunged.

    Note that this command sequence works perfectly even if the server
    expunges messages at the same time.

    If the server supports [CONDSTORE], the client can now go on to
    update its flag cache.

         C: f UID FETCH 1:* FLAGS (CHANGEDSINCE 42)
         S: * 997 FETCH (UID 9980 FLAGS (\seen) MODSEQ 42)
         S: f OK That was much more fun!


Formal Syntax

    The following syntax specification uses the Augmented Backus-Naur
    Form (ABNF) notation as specified in [ABNF]. [IMAPABNF] defines the
    non-terminals search-param.

    Except as noted otherwise, all alphabetic characters are case-
    insensitive.  The use of upper or lower case characters to define
    token strings is for editorial clarity only.  Implementations MUST
    accept these strings in a case-insensitive fashion.

        search-param =/ "NOSTORE"


Security considerations



Gulbrandsen               Expires Feburary 2007                 [Page 4]

Internet-draft                                               August 2006


    There are no known security issues with this extension.


IANA considerations

    The IANA is requested to add NOSTORE to the list of IMAP extensions.


Credits

    (Your name here :)


Normative References

    [ABNF]     Crocker, Overell, "Augmented BNF for Syntax
               Specifications: ABNF", RFC 2234, Internet Mail
               Consortium, Demon Internet Ltd, November 1997.

    [KEYWORDS] Bradner, "Key words for use in RFCs to Indicate
               Requirement Levels", RFC 2119, Harvard University, March
               1997.

    [IMAP]     Crispin, M., "Internet Message Access Protocol - Version
               4rev1", RFC 3501, University of Washington, June 2003.

    [IMAPABNF] Melnikov, A. and Daboo, C., "Collected Extensions to
               IMAP4 ABNF", RFC 4466, Isode Ltd., April 2006.

    [CONDSTORE] Melnikov, A. and Hole, S.., "IMAP Extension for
               Conditional STORE Operation or Quick Flag Changes
               Resynchronization", RFC 4551, Isode Ltd., June 2006.


Author's Address

    Arnt Gulbrandsen
    Oryx Mail Systems GmbH
    Schweppermannstr. 8
    D-81671 Muenchen
    Germany

    Fax: +49 89 4502 9758

    Email: arnt@oryx.com






Gulbrandsen               Expires Feburary 2007                 [Page 5]

Internet-draft                                               August 2006


Intellectual Property Statement

    The IETF takes no position regarding the validity or scope of any
    Intellectual Property Rights or other rights that might be claimed
    to pertain to the implementation or use of the technology described
    in this document or the extent to which any license under such
    rights might or might not be available; nor does it represent that
    it has made any independent effort to identify any such rights.
    Information on the procedures with respect to rights in RFC
    documents can be found in BCP 78 and BCP 79.

    Copies of IPR disclosures made to the IETF Secretariat and any
    assurances of licenses to be made available, or the result of an
    attempt made to obtain a general license or permission for the use
    of such proprietary rights by implementers or users of this
    specification can be obtained from the IETF on-line IPR repository
    at http://www.ietf.org/ipr.

    The IETF invites any interested party to bring to its attention any
    copyrights, patents or patent applications, or other proprietary
    rights that may cover technology that may be required to implement
    this standard.  Please address the information to the IETF at ietf-
    ipr@ietf.org.


Full Copyright Statement

    Copyright (C) The Internet Society (2006).  This document is subject
    to the rights, licenses and restrictions contained in BCP 78, and
    except as set forth therein, the authors retain all their rights.

    This document and the information contained herein are provided on
    an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE
    REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE
    INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
    THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
    WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.


Acknowledgment

    Funding for the RFC Editor function is currently provided by the
    Internet Society.







Gulbrandsen               Expires Feburary 2007                 [Page 6]