| < draft-ietf-imapext-annotate-09.txt | draft-ietf-imapext-annotate-10.txt > | |||
|---|---|---|---|---|
| IMAP Extensions Working Group R. Gellens | IMAP Extensions Working Group R. Gellens | |||
| Internet-Draft QUALCOMM Incorporated | Internet-Draft QUALCOMM Incorporated | |||
| Expires: October 18, 2004 C. Daboo | Expires: January 16, 2005 C. Daboo | |||
| Cyrusoft International, Inc. | ISAMET, Inc. | |||
| April 19, 2004 | July 18, 2004 | |||
| IMAP ANNOTATE Extension | IMAP ANNOTATE Extension | |||
| draft-ietf-imapext-annotate-09 | draft-ietf-imapext-annotate-10 | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet-Draft and is in full conformance with | By submitting this Internet-Draft, I certify that any applicable | |||
| all provisions of Section 10 of RFC2026. | patent or other IPR claims of which I am aware have been disclosed, | |||
| and any of which I become aware will be disclosed, in accordance with | ||||
| RFC 3668. | ||||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that other | Task Force (IETF), its areas, and its working groups. Note that | |||
| groups may also distribute working documents as Internet-Drafts. | other groups may also distribute working documents as | |||
| Internet-Drafts. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| The list of current Internet-Drafts can be accessed at http:// | The list of current Internet-Drafts can be accessed at | |||
| www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| This Internet-Draft will expire on October 18, 2004. | This Internet-Draft will expire on January 16, 2005. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2004). All Rights Reserved. | Copyright (C) The Internet Society (2004). All Rights Reserved. | |||
| Abstract | Abstract | |||
| The ANNOTATE extension to the Internet Message Access Protocol | The ANNOTATE extension to the Internet Message Access Protocol | |||
| [IMAP4] permits clients and servers to maintain "metadata" for | [IMAP4] permits clients and servers to maintain "metadata" for | |||
| messages stored in an IMAP4 mailbox. | messages stored in an IMAP4 mailbox. | |||
| Change History (to be removed prior to publication as an RFC) | Change History (to be removed prior to publication as an RFC) | |||
| Changes from -09 to -10: | ||||
| 1. Added Content-Language value. | ||||
| 2. Added IANA registrations for entries/attributes in this document. | ||||
| Changes from -08 to -09: | Changes from -08 to -09: | |||
| 1. Fix formatting, ID nits etc. | 1. Fix formatting, ID nits etc. | |||
| 2. Fix subject -> altsubject in examples. | 2. Fix subject -> altsubject in examples. | |||
| 3. Added text to SELECT/EXAMINE optional parameter definition to | 3. Added text to SELECT/EXAMINE optional parameter definition to | |||
| indicate that the option could trigger a global state change or a | indicate that the option could trigger a global state change or a | |||
| mailbox specific change. | mailbox specific change. | |||
| 4. Changed entry/attribute names to be case-sensitive to avoid case | 4. Changed entry/attribute names to be case-sensitive to avoid case | |||
| mapping issues with utf8 text. | mapping issues with utf8 text. | |||
| 5. Clarify COPY interaction to indicate that only the current user's | 5. Clarify COPY interaction to indicate that only the current user's | |||
| '.priv's are copied, not the '.priv's of other users. | '.priv's are copied, not the '.priv's of other users. | |||
| skipping to change at page 2, line 44 ¶ | skipping to change at page 3, line 4 ¶ | |||
| 6. Cleaned up formal syntax to use IMAP string type for entry and | 6. Cleaned up formal syntax to use IMAP string type for entry and | |||
| attributes, with requirements on how the string is formatted. | attributes, with requirements on how the string is formatted. | |||
| 7. Use of ACAP vendor subtree registry for vendor tokens. | 7. Use of ACAP vendor subtree registry for vendor tokens. | |||
| 8. Fixed STORE syntax. | 8. Fixed STORE syntax. | |||
| Changes from -04 to -05: | Changes from -04 to -05: | |||
| 1. Fixed examples to match formal syntax for FETCH responses where | 1. Fixed examples to match formal syntax for FETCH responses where | |||
| parenthesis do not appear around entry-att items. | parenthesis do not appear around entry-att items. | |||
| Changes from -03 to -04: | Changes from -03 to -04: | |||
| 1. Fixed attrib/attrib-match grammar to use "." instead of "/". | 1. Fixed attrib/attrib-match grammar to use "." instead of "/". | |||
| 2. Add text for server to reject unknown <part-specifier>. | 2. Add text for server to reject unknown <part-specifier>. | |||
| 3. Do not allow empty part-specifier. | 3. Do not allow empty part-specifier. | |||
| 4. Store NIL to value to delete. | 4. Store NIL to value to delete. | |||
| 5. Comment on COPY interaction with ANNOTATE. | 5. Comment on COPY interaction with ANNOTATE. | |||
| 6. Added comment that IMAP flags are mapped one-to-one with their | 6. Added comment that IMAP flags are mapped one-to-one with their | |||
| corresponding FLAGS items. | corresponding FLAGS items. | |||
| 7. Added comment that the recent flag annotation is read-only. | 7. Added comment that the recent flag annotation is read-only. | |||
| Changes from -02 to -03: | Changes from -02 to -03: | |||
| 1. Removed reference to status modtime item. | 1. Removed reference to status modtime item. | |||
| 2. Added missing 'notify' and 'ret' dsn annotations for /message/ | 2. Added missing 'notify' and 'ret' dsn annotations for /message/ | |||
| smtp-envelope. | smtp-envelope. | |||
| 3. Added requirement to store data permanently - no 'session only' | 3. Added requirement to store data permanently - no 'session only' | |||
| annotations. | annotations. | |||
| 4. Removed Access Control section. Replaced with comments on | 4. Removed Access Control section. Replaced with comments on | |||
| read-only/read-write mailboxes and storing private or shared | read-only/read-write mailboxes and storing private or shared | |||
| annotations. | annotations. | |||
| 5. Removed STORE to default .priv or .shared. | 5. Removed STORE to default .priv or .shared. | |||
| 6. Added section on optional select parameters. | 6. Added section on optional select parameters. | |||
| Changes from -01 to -02: | Changes from -01 to -02: | |||
| 1. Now require .priv or .shared on store operations. | 1. Now require .priv or .shared on store operations. | |||
| Changes from -00 to -01: | Changes from -00 to -01: | |||
| 1. MODTIME moved to its own draft, which this draft now depends on. | 1. MODTIME moved to its own draft, which this draft now depends on. | |||
| Thus, Conditional Annotation STORE and related items deleted from | Thus, Conditional Annotation STORE and related items deleted from | |||
| this draft. | this draft. | |||
| 2. Private versus Shared Annotations: both are possible (separately | 2. Private versus Shared Annotations: both are possible (separately | |||
| addressable using ".priv" and ".shared" suffixes). There is a | addressable using ".priv" and ".shared" suffixes). There is a | |||
| per-mailbox setting for the default. It is an open issue how this | per-mailbox setting for the default. It is an open issue how | |||
| is viewed or changed by the client. | this is viewed or changed by the client. | |||
| 3. In ACLs, the "w" right is needed to updated shared state; the "s" | 3. In ACLs, the "w" right is needed to updated shared state; the "s" | |||
| right is needed to update private state. | right is needed to update private state. | |||
| 4. Various clarifications and text modifications. | 4. Various clarifications and text modifications. | |||
| 5. Added 'forwarded' flag for message parts. | 5. Added 'forwarded' flag for message parts. | |||
| Changes from pre-imapext to -00: | Changes from pre-imapext to -00: | |||
| 1. Clarified text describing attributions, entries, and attributes. | 1. Clarified text describing attributions, entries, and attributes. | |||
| 2. Changed 'modifiedsince' to 'modtime'; referenced ACAP spec. | 2. Changed 'modifiedsince' to 'modtime'; referenced ACAP spec. | |||
| 3. Deleted 'queued' flag. | 3. Deleted 'queued' flag. | |||
| 4. Expanded and explained smtp-envelope entry. | 4. Expanded and explained smtp-envelope entry. | |||
| 5. Restricted including ANNOTATION data in unsolicited responses | 5. Restricted including ANNOTATION data in unsolicited responses | |||
| until the client uses it first. (Open issue as to if needed). | until the client uses it first. (Open issue as to if needed). | |||
| 6. Examples now only use valid entries and attributes. | 6. Examples now only use valid entries and attributes. | |||
| 7. Updated Security Considerations. | 7. Updated Security Considerations. | |||
| 8. Content-Type now defaults to text/plain. | 8. Content-Type now defaults to text/plain. | |||
| 9. Open Issue: Shared vs. private annotations. | ||||
| 9. Open Issue: Shared vs. private annotations. | ||||
| 10. Open issue: Annotation Modtime untagged response or VALIDTIME | 10. Open issue: Annotation Modtime untagged response or VALIDTIME | |||
| FETCH data. | FETCH data. | |||
| 11. Open issue: Conditional annotation STORE. | 11. Open issue: Conditional annotation STORE. | |||
| 12. ANNOTATION criterion available if both "ANNOTATE" and "SORT" in | 12. ANNOTATION criterion available if both "ANNOTATE" and "SORT" in | |||
| CAPABILITY command response. | CAPABILITY command response. | |||
| 13. Prohibition on annotations in lieu of base spec functionality. | 13. Prohibition on annotations in lieu of base spec functionality. | |||
| 14. Specified required ACL rights. | 14. Specified required ACL rights. | |||
| 15. ANNOTATION message data item in APPEND. | 15. ANNOTATION message data item in APPEND. | |||
| 16. ANNOTATION-MODTIME message data item in STATUS. | 16. ANNOTATION-MODTIME message data item in STATUS. | |||
| 17. Replaced ATOM_CHAR with utf8-char. | 17. Replaced ATOM_CHAR with utf8-char. | |||
| 18. Updated other ABNF entries. | 18. Updated other ABNF entries. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction and Overview . . . . . . . . . . . . . . . . . 5 | 1. Introduction and Overview . . . . . . . . . . . . . . . . . 6 | |||
| 2. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 2.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 2.2 Namespace of entries and attributes . . . . . . . . . . . . 6 | 2.2 Namespace of entries and attributes . . . . . . . . . . . 7 | |||
| 2.2.1 Entry Names . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2.2.1 Entry Names . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 2.2.2 Attribute Names . . . . . . . . . . . . . . . . . . . . . . 9 | 2.2.2 Attribute Names . . . . . . . . . . . . . . . . . . . 10 | |||
| 2.3 Private versus Shared and Access Control . . . . . . . . . . 10 | 2.3 Private versus Shared and Access Control . . . . . . . . . 11 | |||
| 3. IMAP Protocol Changes . . . . . . . . . . . . . . . . . . . 11 | 3. IMAP Protocol Changes . . . . . . . . . . . . . . . . . . . 12 | |||
| 3.1 General Considerations . . . . . . . . . . . . . . . . . . . 11 | 3.1 General Considerations . . . . . . . . . . . . . . . . . . 12 | |||
| 3.2 Optional parameters with the SELECT/EXAMINE commands . . . . 11 | 3.2 Optional parameters with the SELECT/EXAMINE commands . . . 12 | |||
| 3.3 ANNOTATION Message Data Item in FETCH Command . . . . . . . 13 | 3.3 ANNOTATION Message Data Item in FETCH Command . . . . . . 14 | |||
| 3.4 ANNOTATION Message Data Item in FETCH Response . . . . . . . 15 | 3.4 ANNOTATION Message Data Item in FETCH Response . . . . . . 16 | |||
| 3.5 ANNOTATION Message Data Item in STORE . . . . . . . . . . . 16 | 3.5 ANNOTATION Message Data Item in STORE . . . . . . . . . . 17 | |||
| 3.6 ANNOTATION interaction with COPY . . . . . . . . . . . . . . 18 | 3.6 ANNOTATION interaction with COPY . . . . . . . . . . . . . 19 | |||
| 3.7 ANNOTATION Message Data Item in APPEND . . . . . . . . . . . 18 | 3.7 ANNOTATION Message Data Item in APPEND . . . . . . . . . . 19 | |||
| 3.8 ANNOTATION Criterion in SEARCH . . . . . . . . . . . . . . . 18 | 3.8 ANNOTATION Criterion in SEARCH . . . . . . . . . . . . . . 19 | |||
| 3.9 ANNOTATION Key in SORT . . . . . . . . . . . . . . . . . . . 19 | 3.9 ANNOTATION Key in SORT . . . . . . . . . . . . . . . . . . 20 | |||
| 4. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . 20 | 4. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . 22 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . 23 | |||
| 5.1 Entry and Attribute Registration Template . . . . . . . . . 22 | 5.1 Entry and Attribute Registration Template . . . . . . . . 23 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . 22 | 5.2 Entry Registrations . . . . . . . . . . . . . . . . . . . 23 | |||
| Normative References . . . . . . . . . . . . . . . . . . . . 22 | 5.2.1 /comment . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
| Informative References . . . . . . . . . . . . . . . . . . . 23 | 5.2.2 /flags/\answered . . . . . . . . . . . . . . . . . . 24 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 23 | 5.2.3 /flags/\flagged . . . . . . . . . . . . . . . . . . . 25 | |||
| A. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 24 | 5.2.4 /flags/\deleted . . . . . . . . . . . . . . . . . . . 25 | |||
| Intellectual Property and Copyright Statements . . . . . . . 25 | 5.2.5 /flags/\seen . . . . . . . . . . . . . . . . . . . . 26 | |||
| 5.2.6 /flags/\draft . . . . . . . . . . . . . . . . . . . . 26 | ||||
| 5.2.7 /flags/\recent . . . . . . . . . . . . . . . . . . . 27 | ||||
| 5.2.8 /flags/$mdnsent . . . . . . . . . . . . . . . . . . . 27 | ||||
| 5.2.9 /flags/$redirected . . . . . . . . . . . . . . . . . . 28 | ||||
| 5.2.10 /flags/$forwarded . . . . . . . . . . . . . . . . . 28 | ||||
| 5.2.11 /altsubject . . . . . . . . . . . . . . . . . . . . 29 | ||||
| 5.2.12 /<section-part>/comment . . . . . . . . . . . . . . 29 | ||||
| 5.2.13 /<section-part>/flags/seen . . . . . . . . . . . . . 30 | ||||
| 5.2.14 /<section-part>/flags/answered . . . . . . . . . . . 30 | ||||
| 5.2.15 /<section-part>/flags/flagged . . . . . . . . . . . 31 | ||||
| 5.2.16 /<section-part>/flags/forwarded . . . . . . . . . . 31 | ||||
| 5.3 Attribute Registrations . . . . . . . . . . . . . . . . . 31 | ||||
| 5.3.1 value . . . . . . . . . . . . . . . . . . . . . . . . 32 | ||||
| 5.3.2 size . . . . . . . . . . . . . . . . . . . . . . . . . 32 | ||||
| 5.3.3 content-type . . . . . . . . . . . . . . . . . . . . . 33 | ||||
| 5.3.4 content-language . . . . . . . . . . . . . . . . . . . 33 | ||||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . 33 | ||||
| 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
| 7.1 Normative References . . . . . . . . . . . . . . . . . . . . 34 | ||||
| 7.2 Informative References . . . . . . . . . . . . . . . . . . . 34 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 35 | ||||
| A. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 35 | ||||
| Intellectual Property and Copyright Statements . . . . . . . 36 | ||||
| 1. Introduction and Overview | 1. Introduction and Overview | |||
| The ANNOTATE extension is present in any IMAP4 implementation which | The ANNOTATE extension is present in any IMAP4 implementation which | |||
| returns "ANNOTATE" as one of the supported capabilities in the | returns "ANNOTATE" as one of the supported capabilities in the | |||
| CAPABILITY response. | CAPABILITY response. | |||
| The ANNOTATE extension adds a new message data item to the FETCH and | The ANNOTATE extension adds a new message data item to the FETCH and | |||
| STORE commands, as well as adding SEARCH and SORT keys and an APPEND | STORE commands, as well as adding SEARCH and SORT keys and an APPEND | |||
| modifier. | modifier. | |||
| This extension makes the following changes to the IMAP4 protocol: | This extension makes the following changes to the IMAP4 protocol: | |||
| skipping to change at page 5, line 31 ¶ | skipping to change at page 6, line 31 ¶ | |||
| e. adds a new ANNOTATION data item for use in APPEND | e. adds a new ANNOTATION data item for use in APPEND | |||
| f. adds a new requirement on the COPY command | f. adds a new requirement on the COPY command | |||
| g. adds a extension mechanism for adding parameters to the SELECT/ | g. adds a extension mechanism for adding parameters to the SELECT/ | |||
| EXAMINE commands and defines the ANNOTATE parameter | EXAMINE commands and defines the ANNOTATE parameter | |||
| h. adds two new response codes to indicate store failures of | h. adds two new response codes to indicate store failures of | |||
| annotations. | annotations. | |||
| i. adds a new untagged response codes for the SELECT or EXAMINE | i. adds a new untagged response codes for the SELECT or EXAMINE | |||
| commands to indicate the maximum size. | commands to indicate the maximum size. | |||
| The data model used for the storage of annotations is based on that | The data model used for the storage of annotations is based on that | |||
| of the Application Configuration Access Protocol [ACAP]. Note that | of the Application Configuration Access Protocol [ACAP]. Note that | |||
| there is no inheritance in annotations. | there is no inheritance in annotations. | |||
| Clients MUST NOT use annotations in lieu of equivalent IMAP base | Clients MUST NOT use annotations in lieu of equivalent IMAP base | |||
| specification facilities. For example, use of a "seen" flag in the | specification facilities. For example, use of a "seen" flag in the | |||
| vendor namespace together with ".PEEK" in fetches. Such behaviour | vendor namespace together with ".PEEK" in fetches. Such behaviour | |||
| would significantly reduce IMAP interoperability. | would significantly reduce IMAP interoperability. | |||
| If a server supports annotations, then it MUST store all annotation | If a server supports annotations, then it MUST store all annotation | |||
| data permanently, i.e. there is no concept of 'session only' | data permanently, i.e. there is no concept of 'session only' | |||
| annotations that would correspond to the behaviour of 'session' flags | annotations that would correspond to the behaviour of 'session' flags | |||
| as defined in the IMAP base specification. The exception to this is | as defined in the IMAP base specification. The exception to this is | |||
| IMAP flags (which are accessible directly through annotations) which | IMAP flags (which are accessible directly through annotations) which | |||
| may be 'session only' as determined by the FLAGS and PERMANENTFLAGS | may be 'session only' as determined by the FLAGS and PERMANENTFLAGS | |||
| responses to a SELECT or EXAMINE command. | responses to a SELECT or EXAMINE command. | |||
| This extension also introduces a generalised mechanism for adding | This extension also introduces a generalised mechanism for adding | |||
| parameters to the SELECT or EXAMINE commands. It is anticipated that | parameters to the SELECT or EXAMINE commands. It is anticipated that | |||
| other extensions may want to utilise this, so it is not strictly | other extensions may want to utilise this, so it is not strictly | |||
| dependent on the ANNOTATE extension being present. | dependent on the ANNOTATE extension being present. | |||
| In order to provide optimum support for a disconnected client (one | In order to provide optimum support for a disconnected client (one | |||
| that needs to synchronise annotations for use when offline), servers | that needs to synchronise annotations for use when offline), servers | |||
| SHOULD also support the Conditional STORE [CONDSTORE] extension. | SHOULD also support the Conditional STORE [CONDSTORE] extension. | |||
| The rest of this document describes the data model and protocol | The rest of this document describes the data model and protocol | |||
| changes more rigorously. | changes more rigorously. | |||
| 2. Data Model | 2. Data Model | |||
| 2.1 Overview | 2.1 Overview | |||
| The data model used in ANNOTATE is that of a uniquely named entry | The data model used in ANNOTATE is that of a uniquely named entry | |||
| which contains a set of standard attributes. A single coherent unit | which contains a set of standard attributes. A single coherent unit | |||
| of "metadata" for a message is stored as a single entry, made up of | of "metadata" for a message is stored as a single entry, made up of | |||
| several attributes. | several attributes. | |||
| For example, a comment added to a message has an entry name of "/ | For example, a comment added to a message has an entry name of "/ | |||
| comment". This entry is composed of several attributes such as | comment". This entry is composed of several attributes such as | |||
| "value", "size", etc. which contain the properties and data of the | "value", "size", etc. which contain the properties and data of the | |||
| entry. | entry. | |||
| The protocol changes to IMAP described below allow a client to access | The protocol changes to IMAP described below allow a client to access | |||
| or change the values of any attributes in any entries in a message | or change the values of any attributes in any entries in a message | |||
| annotation, assuming it has sufficient access rights to do so (see | annotation, assuming it has sufficient access rights to do so (see | |||
| Section 2.3 for specifics). | Section 2.3 for specifics). | |||
| 2.2 Namespace of entries and attributes | 2.2 Namespace of entries and attributes | |||
| Each message annotation is made up of a set of entries. Each entry | Each message annotation is made up of a set of entries. Each entry | |||
| has a hierarchical name in UTF-8, with each component of the name | has a hierarchical name in UTF-8, with each component of the name | |||
| separated by a slash ("/"). | separated by a slash ("/"). | |||
| Each entry is made up of a set of attributes. Each attribute has a | Each entry is made up of a set of attributes. Each attribute has a | |||
| hierarchical name in UTF-8, with each component of the name separated | hierarchical name in UTF-8, with each component of the name separated | |||
| by a period ("."). | by a period ("."). | |||
| The value of an attribute is NIL (has no value), or is a string of | The value of an attribute is NIL (has no value), or is a string of | |||
| zero or more octets. | zero or more octets. | |||
| Entry and attribute names MUST NOT contain asterisk ("*") or percent | Entry and attribute names MUST NOT contain asterisk ("*") or percent | |||
| ("%") characters and MUST be valid UTF-8 strings which do not contain | ("%") characters and MUST be valid UTF-8 strings which do not contain | |||
| the NULL octet. Invalid entry or attribute names result in a BAD | the NULL octet. Invalid entry or attribute names result in a BAD | |||
| response in any IMAP commands where they are used. | response in any IMAP commands where they are used. | |||
| Entry and attribute names are case-sensitive. | Entry and attribute names are case-sensitive. | |||
| Use of non-visible UTF-8 characters in entry and attribute names is | Use of non-visible UTF-8 characters in entry and attribute names is | |||
| strongly discouraged. | strongly discouraged. | |||
| This specification defines an initial set of entry and attribute | This specification defines an initial set of entry and attribute | |||
| names available for use in message annotations. In addition, an | names available for use in message annotations. In addition, an | |||
| extension mechanism is described to allow additional names to be | extension mechanism is described to allow additional names to be | |||
| added for extensibility. | added for extensibility. | |||
| 2.2.1 Entry Names | 2.2.1 Entry Names | |||
| Entry names MUST be specified in a standards track or IESG approved | Entry names MUST be specified in a standards track or IESG approved | |||
| experimental RFC, or fall under the vendor namespace. See Section 5.1 | experimental RFC, or fall under the vendor namespace. See Section | |||
| for the registration template. | 5.1 for the registration template. | |||
| / | / | |||
| Defines the top-level of entries associated with an entire | Defines the top-level of entries associated with an entire | |||
| message. This entry itself does not contain any attributes. All | message. This entry itself does not contain any attributes. All | |||
| entries that start with a numeric character ("0" - "9") refer to | entries that start with a numeric character ("0" - "9") refer to | |||
| an annotation on a specific body part. All other entries are for | an annotation on a specific body part. All other entries are for | |||
| annotations on the entire message. | annotations on the entire message. | |||
| /comment | /comment | |||
| Defines a comment or note associated with an entire message. | Defines a comment or note associated with an entire message. | |||
| /flags | /flags | |||
| Defines the top-level of entries for flags associated with an | Defines the top-level of entries for flags associated with an | |||
| entire message. The "value" attribute of each of the entries | entire message. The "value" attribute of each of the entries | |||
| described below must be either "1", "0" or NIL. "1" corresponds to | described below must be either "1", "0" or NIL. "1" corresponds | |||
| the flag being set. | to the flag being set. | |||
| Standard [IMAP4] flags always have a '\' prefix character. Other | Standard [IMAP4] flags always have a '\' prefix character. Other | |||
| standard flags have a '$' prefix. The annotation names used for | standard flags have a '$' prefix. The annotation names used for | |||
| all flags uses the complete name for that flag, including the | all flags uses the complete name for that flag, including the | |||
| prefix character. | prefix character. | |||
| The set of standard IMAP flags annotations are: | The set of standard IMAP flags annotations are: | |||
| /flags/\answered | /flags/\answered | |||
| /flags/\flagged | /flags/\flagged | |||
| /flags/\deleted | /flags/\deleted | |||
| /flags/\seen | /flags/\seen | |||
| /flags/\draft | /flags/\draft | |||
| /flags/\recent | /flags/\recent | |||
| Changes to these annotations are reflected in the standard IMAP | Changes to these annotations are reflected in the standard IMAP | |||
| flags. The \recent attribute is read only, clients MUST NOT | flags. The \recent attribute is read only, clients MUST NOT | |||
| attempt to change it. | attempt to change it. | |||
| Note that entry names are sent as [IMAP4] string elements which | Note that entry names are sent as [IMAP4] string elements which | |||
| requires that '\' characters be escaped if sent as a quoted string | requires that '\' characters be escaped if sent as a quoted string | |||
| as opposed to a literal. | as opposed to a literal. | |||
| Note that flag and keyword names in [IMAP4] are case-insensitive, | Note that flag and keyword names in [IMAP4] are case-insensitive, | |||
| however the entry names for the corresponding annotations are | however the entry names for the corresponding annotations are | |||
| case-sensitive. Thus the [IMAP4] flag and keyword names MUST be | case-sensitive. Thus the [IMAP4] flag and keyword names MUST be | |||
| mapped to lowercase characters before being used as entry names | mapped to lowercase characters before being used as entry names | |||
| for annotations. | for annotations. | |||
| Additional standard flags are: | Additional standard flags are: | |||
| /flags/$mdnsent | /flags/$mdnsent | |||
| /flags/$redirected | /flags/$redirected | |||
| /flags/$forwarded | /flags/$forwarded | |||
| The '$mdnsent' flag is used to indicate message disposition | The '$mdnsent' flag is used to indicate message disposition | |||
| skipping to change at page 8, line 35 ¶ | skipping to change at page 9, line 35 ¶ | |||
| The '$forwarded' flag indicates the message was resent to | The '$forwarded' flag indicates the message was resent to | |||
| another user, embedded within or attached to a new message. | another user, embedded within or attached to a new message. | |||
| /altsubject | /altsubject | |||
| Contains text supplied by the message recipient, to be used by the | Contains text supplied by the message recipient, to be used by the | |||
| client instead of the original message Subject. | client instead of the original message Subject. | |||
| /vendor/<vendor-token> | /vendor/<vendor-token> | |||
| Defines the top-level of entries associated with an entire message | Defines the top-level of entries associated with an entire message | |||
| as created by a particular product of some vendor. These | as created by a particular product of some vendor. These | |||
| sub-entries can be used by vendors to provide client-specific | sub-entries can be used by vendors to provide client-specific | |||
| attributes. The vendor-token MUST be registered with IANA, using | attributes. The vendor-token MUST be registered with IANA, using | |||
| the [ACAP] vendor subtree registry. | the [ACAP] vendor subtree registry. | |||
| /<section-part> | /<section-part> | |||
| Defines the top-level of entries associated with a specific body | Defines the top-level of entries associated with a specific body | |||
| part of a message. This entry itself does not contain any | part of a message. This entry itself does not contain any | |||
| attributes. The section-part uses the same numeric part specifier | attributes. The section-part uses the same numeric part specifier | |||
| syntax as the BODY message data item in the FETCH command [IMAP4]. | syntax as the BODY message data item in the FETCH command [IMAP4]. | |||
| The server MUST return a BAD response if the client uses an | The server MUST return a BAD response if the client uses an | |||
| incorrect part specifier (either incorrect syntax or a specifier | incorrect part specifier (either incorrect syntax or a specifier | |||
| referring to a non-existent part). The server MUST return a BAD | referring to a non-existent part). The server MUST return a BAD | |||
| response if the client uses an empty part specifier (which is used | response if the client uses an empty part specifier (which is used | |||
| in [IMAP4] to represent the entire message). | in [IMAP4] to represent the entire message). | |||
| /<section-part>/comment | /<section-part>/comment | |||
| Defines a comment or note associated with a specific body part of | Defines a comment or note associated with a specific body part of | |||
| a message. | a message. | |||
| /<section-part>/flags | /<section-part>/flags | |||
| Defines the top-level of entries associated with flag state for a | Defines the top-level of entries associated with flag state for a | |||
| specific body part of a message. All sub-entries are maintained | specific body part of a message. All sub-entries are maintained | |||
| entirely by the client. There is no implicit change to any flag by | entirely by the client. There is no implicit change to any flag | |||
| the server. | by the server. | |||
| /<section-part>/flags/seen | /<section-part>/flags/seen | |||
| /<section-part>/flags/answered | /<section-part>/flags/answered | |||
| /<section-part>/flags/flagged | /<section-part>/flags/flagged | |||
| /<section-part>/flags/forwarded | /<section-part>/flags/forwarded | |||
| Defines flags for a specific body part of a message. The "value" | Defines flags for a specific body part of a message. The "value" | |||
| attribute of these entries must be either "1", "0" or NIL. | attribute of these entries must be either "1", "0" or NIL. | |||
| /<section-part>/vendor/<vendor-token> | /<section-part>/vendor/<vendor-token> | |||
| Defines the top-level of entries associated with a specific body | Defines the top-level of entries associated with a specific body | |||
| part of a message as created by a particular product of some | part of a message as created by a particular product of some | |||
| vendor. This entry can be used by vendors to provide client | vendor. This entry can be used by vendors to provide client | |||
| specific attributes. The vendor-token MUST be registered with | specific attributes. The vendor-token MUST be registered with | |||
| IANA. | IANA. | |||
| 2.2.2 Attribute Names | 2.2.2 Attribute Names | |||
| Attribute names MUST be specified in a standards track or IESG | Attribute names MUST be specified in a standards track or IESG | |||
| approved experimental RFC, or fall under the vendor namespace. See | approved experimental RFC, or fall under the vendor namespace. See | |||
| Section 5.1 for the registration template. | Section 5.1 for the registration template. | |||
| All attribute names implicitly have a ".priv" and a ".shared" suffix | All attribute names implicitly have a ".priv" and a ".shared" suffix | |||
| which maps to private and shared versions of the entry. Searching or | which maps to private and shared versions of the entry. Searching or | |||
| fetching without using either suffix includes both. The client MUST | fetching without using either suffix includes both. The client MUST | |||
| specify either a ".priv" or ".shared" suffix when storing an | specify either a ".priv" or ".shared" suffix when storing an | |||
| annotation. | annotation. | |||
| value | value | |||
| A UTF8 string representing the data value of the attribute. To | A UTF8 string representing the data value of the attribute. To | |||
| delete an annotation, the client can store NIL into the value. | delete an annotation, the client can store NIL into the value. | |||
| size | size | |||
| The size of the value, in octets. Set automatically by the server, | The size of the value, in octets. Set automatically by the | |||
| read-only to clients. | server, read-only to clients. | |||
| content-type | content-type | |||
| A MIME [MIME] content type and subtype that describes the nature | A MIME [MIME] content type and subtype that describes the nature | |||
| of the content of the "value" attribute. If not present, a value | of the content of the "value" attribute. If not present, a value | |||
| of "text/plain; charset=utf8" is assumed. | of "text/plain; charset=utf8" is assumed. | |||
| content-language | ||||
| Indicates the language used for the value. This follows the | ||||
| format described in [RFC3282]. Clients SHOULD set this value when | ||||
| storing an annotation that uses text that can be presented to the | ||||
| user. It is not required for enumerated or numeric values such as | ||||
| flags etc. | ||||
| vendor.<vendor-token> | vendor.<vendor-token> | |||
| Defines an attribute associated with a particular product of some | Defines an attribute associated with a particular product of some | |||
| vendor. This attribute can be used by vendors to provide client | vendor. This attribute can be used by vendors to provide client | |||
| specific attributes. The vendor-token MUST be registered with | specific attributes. The vendor-token MUST be registered with | |||
| IANA, using the [ACAP] vendor subtree registry. | IANA, using the [ACAP] vendor subtree registry. | |||
| 2.3 Private versus Shared and Access Control | 2.3 Private versus Shared and Access Control | |||
| Some IMAP mailboxes are private, accessible only to the owning user. | Some IMAP mailboxes are private, accessible only to the owning user. | |||
| Other mailboxes are not, either because the owner has set an ACL | Other mailboxes are not, either because the owner has set an ACL | |||
| [ACL] which permits access by other users, or because it is a shared | [ACL] which permits access by other users, or because it is a shared | |||
| mailbox. | mailbox. | |||
| This raises the issue of shared versus private annotations. | This raises the issue of shared versus private annotations. | |||
| If all annotations are private, it is impossible to set annotations | If all annotations are private, it is impossible to set annotations | |||
| in a shared or otherwise non-private mailbox that are visible to | in a shared or otherwise non-private mailbox that are visible to | |||
| other users. This eliminates what could be a useful aspect of | other users. This eliminates what could be a useful aspect of | |||
| annotations in a shared environment. An example of such use is a | annotations in a shared environment. An example of such use is a | |||
| shared IMAP folder containing bug reports. Engineers may want to use | shared IMAP folder containing bug reports. Engineers may want to use | |||
| annotations to add information to existing messages, indicate | annotations to add information to existing messages, indicate | |||
| assignments, status, etc. This use requires shared annotations. | assignments, status, etc. This use requires shared annotations. | |||
| If all annotations are shared, it is impossible to use annotations | If all annotations are shared, it is impossible to use annotations | |||
| for private notes on messages in shared mailboxes. Also, modifying an | for private notes on messages in shared mailboxes. Also, modifying | |||
| ACL to permit access to a mailbox by other users may unintentionally | an ACL to permit access to a mailbox by other users may | |||
| expose private information. | unintentionally expose private information. | |||
| There are also situations in which both shared and private | There are also situations in which both shared and private | |||
| annotations are useful. For example, an administrator may want to set | annotations are useful. For example, an administrator may want to | |||
| shared annotations on messages in a shared folder, which individual | set shared annotations on messages in a shared folder, which | |||
| users may wish to supplement with additional notes. | individual users may wish to supplement with additional notes. | |||
| If shared and private annotations are to coexist, we need a clear way | If shared and private annotations are to coexist, we need a clear way | |||
| to differentiate them. Also, it should be as easy as possible for a | to differentiate them. Also, it should be as easy as possible for a | |||
| client to access both and not overlook either. There is also a danger | client to access both and not overlook either. There is also a | |||
| in allowing a client to store an annotation without knowing if it is | danger in allowing a client to store an annotation without knowing if | |||
| shared or private. | it is shared or private. | |||
| This document proposes two standard suffixes for all attributes: | This document proposes two standard suffixes for all attributes: | |||
| ".shared" and ".priv". A search, fetch, or sort which specifies | ".shared" and ".priv". A search, fetch, or sort which specifies | |||
| neither uses both. Store operations MUST explicitly use .priv or | neither uses both. Store operations MUST explicitly use .priv or | |||
| .shared suffixes. | .shared suffixes. | |||
| A user can only store and fetch private annotations on messages in | A user can only store and fetch private annotations on messages in | |||
| any mailbox which they can SELECT or EXAMINE, including ones which | any mailbox which they can SELECT or EXAMINE, including ones which | |||
| only open READ-ONLY. A user can only store and fetch shared | only open READ-ONLY. A user can only store and fetch shared | |||
| annotations on messages in any mailbox that they can SELECT and which | annotations on messages in any mailbox that they can SELECT and which | |||
| opens READ-WRITE. If a client attempts to store or fetch a shared | opens READ-WRITE. If a client attempts to store or fetch a shared | |||
| annotation on a READ-ONLY mailbox, the server MUST respond with a NO | annotation on a READ-ONLY mailbox, the server MUST respond with a NO | |||
| response. | response. | |||
| 3. IMAP Protocol Changes | 3. IMAP Protocol Changes | |||
| 3.1 General Considerations | 3.1 General Considerations | |||
| The server is allowed to impose limitations on the size of any one | The server is allowed to impose limitations on the size of any one | |||
| annotation or the total number of annotations for a single message. | annotation or the total number of annotations for a single message. | |||
| However, the server MUST accept a minimum annotation data size of at | However, the server MUST accept a minimum annotation data size of at | |||
| least 1024 bytes, and a minimum annotation count per message of at | least 1024 bytes, and a minimum annotation count per message of at | |||
| least 10. | least 10. | |||
| The server SHOULD indicate the maximum size for an annotation value | The server SHOULD indicate the maximum size for an annotation value | |||
| by sending an untagged "ANNOTATESIZE" response during a SELECT or | by sending an untagged "ANNOTATESIZE" response during a SELECT or | |||
| EXAMINE command. Clients MUST NOT store annotation values of a size | EXAMINE command. Clients MUST NOT store annotation values of a size | |||
| greater than the amount indicated by the server in the "ANNOTATESIZE" | greater than the amount indicated by the server in the "ANNOTATESIZE" | |||
| response. | response. | |||
| In some cases, servers may be able to offer annotations on some | In some cases, servers may be able to offer annotations on some | |||
| mailboxes and not others, or may be able to provide only read-only | mailboxes and not others, or may be able to provide only read-only | |||
| annotations on some mailboxes. For mailboxes that cannot have | annotations on some mailboxes. For mailboxes that cannot have | |||
| annotations associated with them, the server MUST return an | annotations associated with them, the server MUST return an | |||
| "ANNOTATESIZE" response with a value of "NIL" during the SELECT or | "ANNOTATESIZE" response with a value of "NIL" during the SELECT or | |||
| EXAMINE command for that mailbox. Clients MUST NOT attempt to fetch | EXAMINE command for that mailbox. Clients MUST NOT attempt to fetch | |||
| or store annotations on any messages in a mailbox for which the | or store annotations on any messages in a mailbox for which the | |||
| "ANNOTATESIZE" response was "NIL". For mailboxes that can only have | "ANNOTATESIZE" response was "NIL". For mailboxes that can only have | |||
| read-only annotations associated with them, the server MUST return an | read-only annotations associated with them, the server MUST return an | |||
| "ANNOTATESIZE" response with a value of "0" (zero) during the SELECT | "ANNOTATESIZE" response with a value of "0" (zero) during the SELECT | |||
| or EXAMINE command for that mailbox. Clients MUST NOT attempt to | or EXAMINE command for that mailbox. Clients MUST NOT attempt to | |||
| store annotations on any messages in a mailbox for which the | store annotations on any messages in a mailbox for which the | |||
| "ANNOTATESIZE" response was zero. | "ANNOTATESIZE" response was zero. | |||
| 3.2 Optional parameters with the SELECT/EXAMINE commands | 3.2 Optional parameters with the SELECT/EXAMINE commands | |||
| This extension adds the ability to include one or more parameters | This extension adds the ability to include one or more parameters | |||
| with the IMAP SELECT or EXAMINE commands, to turn on or off certain | with the IMAP SELECT or EXAMINE commands, to turn on or off certain | |||
| standard behaviour, or to add new optional behaviours required for a | standard behaviour, or to add new optional behaviours required for a | |||
| particular extension. | particular extension. | |||
| There are two possible modes of operation: | There are two possible modes of operation: | |||
| o A global state change where a single use of the optional parameter | o A global state change where a single use of the optional parameter | |||
| will effect the session state from that time on, irrespective of | will effect the session state from that time on, irrespective of | |||
| subsequent SELECT/EXAMINE commands. | subsequent SELECT/EXAMINE commands. | |||
| o A per-mailbox state change that will effect the session only for | o A per-mailbox state change that will effect the session only for | |||
| the duration of the new selected state. A subsequent SELECT/ | the duration of the new selected state. A subsequent SELECT/ | |||
| EXAMINE without the optional parameter will cancel its effect for | EXAMINE without the optional parameter will cancel its effect for | |||
| the newly selected mailbox. | the newly selected mailbox. | |||
| It is anticipated that other extensions may want to use this | It is anticipated that other extensions may want to use this | |||
| facility, so a generalised approach is given here. This facility is | facility, so a generalised approach is given here. This facility is | |||
| not dependent on the presence of the ANNOTATE extension - other | not dependent on the presence of the ANNOTATE extension - other | |||
| extensions can use it with a server that does not implement ANNOTATE. | extensions can use it with a server that does not implement ANNOTATE. | |||
| Optional parameters to the SELECT or EXAMINE commands are added as a | Optional parameters to the SELECT or EXAMINE commands are added as a | |||
| parenthesised list of atoms or strings, and appear after the mailbox | parenthesised list of atoms or strings, and appear after the mailbox | |||
| name in the standard SELECT or EXAMINE command. The order of | name in the standard SELECT or EXAMINE command. The order of | |||
| individual parameters is arbitrary. Individual parameters may consist | individual parameters is arbitrary. Individual parameters may | |||
| of one or more atoms or strings in a specific order. If a parameter | consist of one or more atoms or strings in a specific order. If a | |||
| consists of more than one atom or string, it MUST appear in its own | parameter consists of more than one atom or string, it MUST appear in | |||
| parenthesised list. Any parameter not defined by extensions that the | its own parenthesised list. Any parameter not defined by extensions | |||
| server supports MUST be rejected with a NO response. | that the server supports MUST be rejected with a NO response. | |||
| Example: | Example: | |||
| C: a SELECT INBOX (ANNOTATE) | C: a SELECT INBOX (ANNOTATE) | |||
| S: ... | S: ... | |||
| S: a OK SELECT complete | S: a OK SELECT complete | |||
| In the above example, a single parameter is used with the SELECT | In the above example, a single parameter is used with the SELECT | |||
| command. | command. | |||
| Example: | Example: | |||
| C: a EXAMINE INBOX (ANNOTATE (RESPONSES "UID Responses") CONDSTORE) | C: a EXAMINE INBOX (ANNOTATE (RESPONSES "UID Responses") CONDSTORE) | |||
| S: ... | S: ... | |||
| S: a OK EXAMINE complete | S: a OK EXAMINE complete | |||
| In the above example, three parameters are used with the EXAMINE | In the above example, three parameters are used with the EXAMINE | |||
| command. The second parameter consists of two items: an atom | command. The second parameter consists of two items: an atom | |||
| followed by a quoted string. | followed by a quoted string. | |||
| Example: | Example: | |||
| C: a SELECT INBOX (BLURDYBLOOP) | C: a SELECT INBOX (BLURDYBLOOP) | |||
| S: a NO Unknown parameter in SELECT command | S: a NO Unknown parameter in SELECT command | |||
| In the above example, a parameter not supported by the server is | In the above example, a parameter not supported by the server is | |||
| incorrectly used. | incorrectly used. | |||
| The ANNOTATE extension defines a single optional select parameter | The ANNOTATE extension defines a single optional select parameter | |||
| "ANNOTATE", which is used to turn on unsolicited responses for | "ANNOTATE", which is used to turn on unsolicited responses for | |||
| annotations as described in Section 3.4. This option al parameter is | annotations as described in Section 3.4. This option al parameter is | |||
| results in a per-mailbox state change, i.e. it must be used in each | results in a per-mailbox state change, i.e. it must be used in each | |||
| SELECT/EXAMINE command in order to be effective, irrespective of | SELECT/EXAMINE command in order to be effective, irrespective of | |||
| whether it was used in a previous SELECT/EXAMINE during the same | whether it was used in a previous SELECT/EXAMINE during the same | |||
| session. | session. | |||
| 3.3 ANNOTATION Message Data Item in FETCH Command | 3.3 ANNOTATION Message Data Item in FETCH Command | |||
| This extension adds an ANNOTATION message data item to the FETCH | This extension adds an ANNOTATION message data item to the FETCH | |||
| command. This allows clients to retrieve annotations for a range of | command. This allows clients to retrieve annotations for a range of | |||
| messages in the currently selected mailbox. | messages in the currently selected mailbox. | |||
| ANNOTATION <entry-specifier> <attribute-specifier> | ANNOTATION <entry-specifier> <attribute-specifier> | |||
| The ANNOTATION message data item, when used by the client in the | The ANNOTATION message data item, when used by the client in the | |||
| FETCH command, takes an entry specifier and an attribute | FETCH command, takes an entry specifier and an attribute | |||
| specifier. | specifier. | |||
| Example: | Example: | |||
| C: a FETCH 1 (ANNOTATION ("/comment" "value")) | C: a FETCH 1 (ANNOTATION ("/comment" "value")) | |||
| S: * 1 FETCH (ANNOTATION ("/comment" | S: * 1 FETCH (ANNOTATION ("/comment" | |||
| ("value.priv" "My comment" | ("value.priv" "My comment" | |||
| "value.shared" "Group note"))) | "value.shared" "Group note"))) | |||
| S: a OK Fetch complete | S: a OK Fetch complete | |||
| In the above example, the content of the "value" attribute for the | In the above example, the content of the "value" attribute for the | |||
| "/comment" entry is requested by the client and returned by the | "/comment" entry is requested by the client and returned by the | |||
| server. Since neither ".shared" nor ".priv" was specified, both | server. Since neither ".shared" nor ".priv" was specified, both | |||
| are returned. | are returned. | |||
| "*" and "%" wildcard characters can be used in either specifier to | "*" and "%" wildcard characters can be used in either specifier to | |||
| match one or more characters at that position, with the exception | match one or more characters at that position, with the exception | |||
| that "%" does not match the hierarchy delimiter for the specifier it | that "%" does not match the hierarchy delimiter for the specifier it | |||
| appears in (that is, "/" for an entry specifier or "." for an | appears in (that is, "/" for an entry specifier or "." for an | |||
| attribute specifier). Thus an entry specifier of "/%" matches entries | attribute specifier). Thus an entry specifier of "/%" matches | |||
| such as "/comment" and "/altsubject", but not "/flags/$redirected". | entries such as "/comment" and "/altsubject", but not "/flags/ | |||
| $redirected". | ||||
| Example: | Example: | |||
| C: a FETCH 1 (ANNOTATION ("/*" ("value.priv" "size.priv"))) | C: a FETCH 1 (ANNOTATION ("/*" ("value.priv" "size.priv"))) | |||
| S: * 1 FETCH (ANNOTATION | S: * 1 FETCH (ANNOTATION | |||
| ("/comment" ("value.priv" "My comment" | ("/comment" ("value.priv" "My comment" | |||
| "size.priv" "10") | "size.priv" "10") | |||
| "/altsubject" ("value.priv" "Rhinoceroses!" | "/altsubject" ("value.priv" "Rhinoceroses!" | |||
| "size.priv" "13") | "size.priv" "13") | |||
| "/vendor/foobar/label.priv" | "/vendor/foobar/label.priv" | |||
| skipping to change at page 15, line 5 ¶ | skipping to change at page 16, line 5 ¶ | |||
| (("/comment" "/altsubject") "value.priv")) | (("/comment" "/altsubject") "value.priv")) | |||
| S: * 1 FETCH (ANNOTATION | S: * 1 FETCH (ANNOTATION | |||
| ("/comment" ("value.priv" "What a chowder-head") | ("/comment" ("value.priv" "What a chowder-head") | |||
| "/altsubject" ("value.priv" "How to crush beer cans"))) | "/altsubject" ("value.priv" "How to crush beer cans"))) | |||
| S: a OK Fetch complete | S: a OK Fetch complete | |||
| In the above example, the contents of the private "value" | In the above example, the contents of the private "value" | |||
| attributes for the two entries "/comment" and "/altsubject" are | attributes for the two entries "/comment" and "/altsubject" are | |||
| requested by the client and returned by the server. | requested by the client and returned by the server. | |||
| 3.4 ANNOTATION Message Data Item in FETCH Response | 3.4 ANNOTATION Message Data Item in FETCH Response | |||
| The ANNOTATION message data item in the FETCH response displays | The ANNOTATION message data item in the FETCH response displays | |||
| information about annotations in a message. | information about annotations in a message. | |||
| ANNOTATION parenthesised list | ANNOTATION parenthesised list | |||
| The response consists of a list of entries, each of which has a | The response consists of a list of entries, each of which has a | |||
| list of attribute-value pairs. | list of attribute-value pairs. | |||
| Example: | Example: | |||
| C: a FETCH 1 (ANNOTATION ("/comment" "value")) | C: a FETCH 1 (ANNOTATION ("/comment" "value")) | |||
| S: * 1 FETCH (ANNOTATION ("/comment" | S: * 1 FETCH (ANNOTATION ("/comment" | |||
| ("value.priv" "My comment" | ("value.priv" "My comment" | |||
| "value.shared" NIL))) | "value.shared" NIL))) | |||
| S: a OK Fetch complete | S: a OK Fetch complete | |||
| In the above example, a single entry with a single attribute-value | In the above example, a single entry with a single attribute-value | |||
| pair is returned by the server. Since the client did not specify a | pair is returned by the server. Since the client did not specify | |||
| ".shared" or ".priv" suffix, both are returned. Only the private | a ".shared" or ".priv" suffix, both are returned. Only the | |||
| attribute has a value (the shared value is NIL). | private attribute has a value (the shared value is NIL). | |||
| Example: | Example: | |||
| C: a FETCH 1 (ANNOTATION | C: a FETCH 1 (ANNOTATION | |||
| (("/comment" "/altsubject") "value")) | (("/comment" "/altsubject") "value")) | |||
| S: * 1 FETCH (ANNOTATION | S: * 1 FETCH (ANNOTATION | |||
| ("/comment" ("value.priv" "My comment" | ("/comment" ("value.priv" "My comment" | |||
| "value.shared" NIL) | "value.shared" NIL) | |||
| "/altsubject" ("value.priv" "My subject" | "/altsubject" ("value.priv" "My subject" | |||
| "value.shared" NIL))) | "value.shared" NIL))) | |||
| S: a OK Fetch complete | S: a OK Fetch complete | |||
| In the above example, two entries each with a single | In the above example, two entries each with a single | |||
| attribute-value pair are returned by the server. Since the client | attribute-value pair are returned by the server. Since the client | |||
| did not specify a ".shared" or ".priv" suffix, both are returned. | did not specify a ".shared" or ".priv" suffix, both are returned. | |||
| Only the private attributes have values; the shared attributes are | Only the private attributes have values; the shared attributes are | |||
| NIL. | NIL. | |||
| Example: | Example: | |||
| C: a FETCH 1 (ANNOTATION | C: a FETCH 1 (ANNOTATION | |||
| ("/comment" ("value" "size"))) | ("/comment" ("value" "size"))) | |||
| S: * 1 FETCH (ANNOTATION | S: * 1 FETCH (ANNOTATION | |||
| ("/comment" | ("/comment" | |||
| ("value.priv" "My comment" | ("value.priv" "My comment" | |||
| "value.shared" NIL | "value.shared" NIL | |||
| "size.priv" "10" | "size.priv" "10" | |||
| "size.shared" "0"))) | "size.shared" "0"))) | |||
| S: a OK Fetch complete | S: a OK Fetch complete | |||
| In the above example, a single entry with two attribute-value | In the above example, a single entry with two attribute-value | |||
| pairs is returned by the server. Since the client did not specify | pairs is returned by the server. Since the client did not specify | |||
| a ".shared" or ".priv" suffix, both are returned. Only the private | a ".shared" or ".priv" suffix, both are returned. Only the | |||
| attributes have values; the shared attributes are NIL. | private attributes have values; the shared attributes are NIL. | |||
| Servers MUST NOT include ANNOTATION data in unsolicited responses | Servers MUST NOT include ANNOTATION data in unsolicited responses | |||
| unless the client used the ANNOTATE select parameter when it issued | unless the client used the ANNOTATE select parameter when it issued | |||
| the last SELECT or EXAMINE command. This restriction avoids sending | the last SELECT or EXAMINE command. This restriction avoids sending | |||
| ANNOTATION data to a client unless the client explicitly asks for it. | ANNOTATION data to a client unless the client explicitly asks for it. | |||
| Servers SHOULD send ANNOTATION message data items in unsolicited | Servers SHOULD send ANNOTATION message data items in unsolicited | |||
| FETCH responses if an annotation entry is changed by a third-party, | FETCH responses if an annotation entry is changed by a third-party, | |||
| and the ANNOTATE select parameter was used. This allows servers to | and the ANNOTATE select parameter was used. This allows servers to | |||
| keep clients updated with changes to annotations by other clients. | keep clients updated with changes to annotations by other clients. | |||
| 3.5 ANNOTATION Message Data Item in STORE | 3.5 ANNOTATION Message Data Item in STORE | |||
| ANNOTATION <parenthesised entry-attribute-value list> | ANNOTATION <parenthesised entry-attribute-value list> | |||
| Sets the specified list of entries by adding or replacing the | Sets the specified list of entries by adding or replacing the | |||
| specified attributes with the values provided. Clients can use NIL | specified attributes with the values provided. Clients can use | |||
| for values of attributes it wants to remove from entries. | NIL for values of attributes it wants to remove from entries. | |||
| The ANNOTATION message data item used with the STORE command has an | The ANNOTATION message data item used with the STORE command has an | |||
| implicit ".SILENT" behaviour. This means the server does not generate | implicit ".SILENT" behaviour. This means the server does not | |||
| an untagged FETCH in response to the STORE command and assumes that | generate an untagged FETCH in response to the STORE command and | |||
| the client updates its own cache if the command succeeds. | assumes that the client updates its own cache if the command | |||
| succeeds. | ||||
| If the server is unable to store an annotation because the size of | If the server is unable to store an annotation because the size of | |||
| its value is too large, the server MUST return a tagged NO response | its value is too large, the server MUST return a tagged NO response | |||
| with a "[ANNOTATE TOOBIG]" response code. | with a "[ANNOTATE TOOBIG]" response code. | |||
| If the server is unable to store a new annotation because the maximum | If the server is unable to store a new annotation because the maximum | |||
| number of allowed annotations has already been reached, the server | number of allowed annotations has already been reached, the server | |||
| MUST return a tagged NO response with a "[ANNOTATE TOOMANY]" response | MUST return a tagged NO response with a "[ANNOTATE TOOMANY]" response | |||
| code. | code. | |||
| skipping to change at page 18, line 5 ¶ | skipping to change at page 19, line 6 ¶ | |||
| C: a STORE 1 ANNOTATION ("/comment" | C: a STORE 1 ANNOTATION ("/comment" | |||
| ("value.priv" "My new comment" | ("value.priv" "My new comment" | |||
| "vendor.foobar.priv" "foo's bar")) | "vendor.foobar.priv" "foo's bar")) | |||
| S: a OK Store complete | S: a OK Store complete | |||
| In the above example, the entry "/comment" is created (if not already | In the above example, the entry "/comment" is created (if not already | |||
| present) and the private attributes "value" and "vendor.foobar" are | present) and the private attributes "value" and "vendor.foobar" are | |||
| created if not already present, or replaced if they exist. | created if not already present, or replaced if they exist. | |||
| 3.6 ANNOTATION interaction with COPY | 3.6 ANNOTATION interaction with COPY | |||
| The COPY command can be used to move messages from one mailbox to | The COPY command can be used to move messages from one mailbox to | |||
| another on the same server. Servers that support the ANNOTATION | another on the same server. Servers that support the ANNOTATION | |||
| extension MUST, for each message being copied, copy all '.priv' | extension MUST, for each message being copied, copy all '.priv' | |||
| annotation data for the current user only, and all '.shared' | annotation data for the current user only, and all '.shared' | |||
| annotation data along with the message to the new mailbox. The only | annotation data along with the message to the new mailbox. The only | |||
| exceptions to this are if the destination mailbox permissions are | exceptions to this are if the destination mailbox permissions are | |||
| such that either the '.priv' or '.shared' annotations are not | such that either the '.priv' or '.shared' annotations are not | |||
| allowed, or if the destination mailbox is of a type that does not | allowed, or if the destination mailbox is of a type that does not | |||
| support annotations or does not support storing of annotations (a | support annotations or does not support storing of annotations (a | |||
| mailbox that returns a zero or "NIL" value for its ANNOTATESIZE | mailbox that returns a zero or "NIL" value for its ANNOTATESIZE | |||
| response code). Servers MUST NOT copy '.priv' annotation data for | response code). Servers MUST NOT copy '.priv' annotation data for | |||
| users other than the current user. | users other than the current user. | |||
| 3.7 ANNOTATION Message Data Item in APPEND | 3.7 ANNOTATION Message Data Item in APPEND | |||
| ANNOTATION <parenthesised entry-attribute-value list> | ANNOTATION <parenthesised entry-attribute-value list> | |||
| Sets the specified list of entries and attributes in the resulting | Sets the specified list of entries and attributes in the resulting | |||
| message. | message. | |||
| The APPEND command can include annotations for the message being | The APPEND command can include annotations for the message being | |||
| appended via the addition of a new append data item. The new data | appended via the addition of a new append data item. The new data | |||
| item can also be used with the multi-append [MULTIAPPEND] extension | item can also be used with the multi-append [MULTIAPPEND] extension | |||
| that allows multiple messages to be appended via a single APPEND | that allows multiple messages to be appended via a single APPEND | |||
| command. | command. | |||
| Example: | Example: | |||
| C: a APPEND drafts ANNOTATION ("/comment" | C: a APPEND drafts ANNOTATION ("/comment" | |||
| ("value.priv" "Don't send until we hear from Sally")) {310} | ("value.priv" "Don't send until we hear from Sally")) {310} | |||
| S: + Ready for literal data | S: + Ready for literal data | |||
| C: MIME-Version: 1.0 | C: MIME-Version: 1.0 | |||
| ... | ... | |||
| C: | C: | |||
| S: a OK APPEND completed | S: a OK APPEND completed | |||
| In the above example, a comment with a private value is added to a | In the above example, a comment with a private value is added to a | |||
| new message appended to the mailbox. The ellipsis represents the | new message appended to the mailbox. The ellipsis represents the | |||
| bulk of the message. | bulk of the message. | |||
| 3.8 ANNOTATION Criterion in SEARCH | 3.8 ANNOTATION Criterion in SEARCH | |||
| ANNOTATION <entry-name> <attribute-name> <value> | ANNOTATION <entry-name> <attribute-name> <value> | |||
| The ANNOTATION criterion for the SEARCH command allows a client to | The ANNOTATION criterion for the SEARCH command allows a client to | |||
| search for a specified string in the value of an annotation entry of | search for a specified string in the value of an annotation entry of | |||
| a message. | a message. | |||
| Messages that have annotations with entries matching <entry-name> and | Messages that have annotations with entries matching <entry-name> and | |||
| attributes matching <attribute-name> and the specified string <value> | attributes matching <attribute-name> and the specified string <value> | |||
| in their values are returned in the SEARCH results. The "*" character | in their values are returned in the SEARCH results. The "*" | |||
| can be used in the entry or attribute name fields to match any | character can be used in the entry or attribute name fields to match | |||
| content in those items. The "%" character can be used in the entry or | any content in those items. The "%" character can be used in the | |||
| attribute name fields to match a single level of hierarchy only. | entry or attribute name fields to match a single level of hierarchy | |||
| only. | ||||
| Example: | Example: | |||
| C: a SEARCH ANNOTATION "/comment" "value" "IMAP4" | C: a SEARCH ANNOTATION "/comment" "value" "IMAP4" | |||
| S: * SEARCH 2 3 5 7 11 13 17 19 23 | S: * SEARCH 2 3 5 7 11 13 17 19 23 | |||
| S: a OK Search complete | S: a OK Search complete | |||
| In the above example, the message numbers of any messages | In the above example, the message numbers of any messages | |||
| containing the string "IMAP4" in the shared or private "value" | containing the string "IMAP4" in the shared or private "value" | |||
| attribute of the "/comment" entry are returned in the search | attribute of the "/comment" entry are returned in the search | |||
| skipping to change at page 19, line 34 ¶ | skipping to change at page 20, line 37 ¶ | |||
| Example: | Example: | |||
| C: a SEARCH ANNOTATION "*" "*" "IMAP4" | C: a SEARCH ANNOTATION "*" "*" "IMAP4" | |||
| S: * SEARCH 1 2 3 5 8 13 21 34 | S: * SEARCH 1 2 3 5 8 13 21 34 | |||
| S: a OK Search complete | S: a OK Search complete | |||
| In the above example, the message numbers of any messages | In the above example, the message numbers of any messages | |||
| containing the string "IMAP4" in any attribute (public or private) | containing the string "IMAP4" in any attribute (public or private) | |||
| of any entry are returned in the search results. | of any entry are returned in the search results. | |||
| 3.9 ANNOTATION Key in SORT | 3.9 ANNOTATION Key in SORT | |||
| ANNOTATION <entry-name> <attribute-name> | ANNOTATION <entry-name> <attribute-name> | |||
| The ANNOTATION criterion for the SORT command [SORT] instructs the | The ANNOTATION criterion for the SORT command [SORT] instructs the | |||
| server to return the message numbers or UIDs of a mailbox, sorted | server to return the message numbers or UIDs of a mailbox, sorted | |||
| using the values of the specified annotations. The ANNOTATION | using the values of the specified annotations. The ANNOTATION | |||
| criterion is available if the server returns both "ANNOTATE" and | criterion is available if the server returns both "ANNOTATE" and | |||
| "SORT" as supported capabilities in the CAPABILITY command response. | "SORT" as supported capabilities in the CAPABILITY command response. | |||
| Messages are sorted using the values of the <attribute-name> | Messages are sorted using the values of the <attribute-name> | |||
| attributes in the <entry-name> entries. (The charset argument | attributes in the <entry-name> entries. (The charset argument | |||
| determines sort order, as specified in the SORT extension | determines sort order, as specified in the SORT extension | |||
| description.) | description.) | |||
| Example: | Example: | |||
| C: a SORT (ANNOTATION "/altsubject" "value.shared") UTF-8 ALL | C: a SORT (ANNOTATION "/altsubject" "value.shared") UTF-8 ALL | |||
| S: * SORT 2 3 4 5 1 11 10 6 7 9 8 | S: * SORT 2 3 4 5 1 11 10 6 7 9 8 | |||
| S: a OK Sort complete | S: a OK Sort complete | |||
| In the above example, the message numbers of all messages are | In the above example, the message numbers of all messages are | |||
| returned, sorted according to the shared "value" attribute of the | returned, sorted according to the shared "value" attribute of the | |||
| "/altsubject" entry. | "/altsubject" entry. | |||
| Note that the ANNOTATION sort key must include a fully specified | Note that the ANNOTATION sort key must include a fully specified | |||
| entry and attribute -- wildcards are not allowed. | entry and attribute -- wildcards are not allowed. | |||
| 4. Formal Syntax | 4. Formal Syntax | |||
| The following syntax specification uses the Augmented Backus-Naur | The following syntax specification uses the Augmented Backus-Naur | |||
| Form (ABNF) notation as specified in [ABNF]. | Form (ABNF) notation as specified in [ABNF]. | |||
| Non-terminals referenced but not defined below are as defined by | Non-terminals referenced but not defined below are as defined by | |||
| [IMAP4]. | [IMAP4]. | |||
| Except as noted otherwise, all alphabetic characters are | Except as noted otherwise, all alphabetic characters are | |||
| case-insensitive. The use of upper or lower case characters to define | case-insensitive. The use of upper or lower case characters to | |||
| token strings is for editorial clarity only. Implementations MUST | define token strings is for editorial clarity only. Implementations | |||
| accept these strings in a case-insensitive fashion. | MUST accept these strings in a case-insensitive fashion. | |||
| annotate-param = "ANNOTATE" | annotate-param = "ANNOTATE" | |||
| ; defines the select parameter used with | ; defines the select parameter used with | |||
| ; ANNOTATE extension | ; ANNOTATE extension | |||
| append = "APPEND" SP mailbox [SP flag-list] [SP date-time] | append = "APPEND" SP mailbox [SP flag-list] [SP date-time] | |||
| [SP "ANNOTATION" SP att-annotate] SP literal | [SP "ANNOTATION" SP att-annotate] SP literal | |||
| ; modifies original IMAP4 APPEND command | ; modifies original IMAP4 APPEND command | |||
| append-message = [SP flag-list] [SP date-time] | append-message = [SP flag-list] [SP date-time] | |||
| skipping to change at page 22, line 7 ¶ | skipping to change at page 23, line 10 ¶ | |||
| ; are always parenthesised | ; are always parenthesised | |||
| sort-key =/ "ANNOTATION" SP entry SP attrib | sort-key =/ "ANNOTATION" SP entry SP attrib | |||
| ; modifies original sort-key [SORT] | ; modifies original sort-key [SORT] | |||
| store-att-flags =/ att-annotate | store-att-flags =/ att-annotate | |||
| ; modifies original IMAP4 STORE command | ; modifies original IMAP4 STORE command | |||
| value = nstring | value = nstring | |||
| 5. IANA Considerations | 5. IANA Considerations | |||
| Both entry names and attribute names MUST be specified in a standards | Both entry names and attribute names MUST be specified in a standards | |||
| track or IESG approved experimental RFC, or fall under the vendor | track or IESG approved experimental RFC, or fall under the vendor | |||
| namespace. Vendor names MUST be registered. | namespace. Vendor names MUST be registered. | |||
| 5.1 Entry and Attribute Registration Template | 5.1 Entry and Attribute Registration Template | |||
| To: iana@iana.org | To: iana@iana.org | |||
| Subject: IMAP Annotate Registration | Subject: IMAP Annotate Registration | |||
| Please register the following IMAP Annotate item: | Please register the following IMAP Annotate item: | |||
| [] Entry [] Attribute | [] Entry [] Attribute | |||
| Name: ______________________________ | Name: ______________________________ | |||
| Description: _______________________ | Description: _______________________ | |||
| ____________________________________ | ____________________________________ | |||
| ____________________________________ | ____________________________________ | |||
| Contact person: ____________________ | Contact person: ____________________ | |||
| email: ____________________ | email: ____________________ | |||
| 6. Security Considerations | 5.2 Entry Registrations | |||
| The ANNOTATE extension does not raise any security considerations | The following templates specify the IANA registrations of annotation | |||
| that are not present in the base [IMAP4] protocol, and these issues | entries specified in this document. | |||
| are discussed in [IMAP4]. | ||||
| 5.2.1 /comment | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /comment | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.2.2 /flags/\answered | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /flags/\answered | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.2.3 /flags/\flagged | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /flags/\flagged | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.2.4 /flags/\deleted | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /flags/\deleted | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.2.5 /flags/\seen | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /flags/\seen | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.2.6 /flags/\draft | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /flags/\draft | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.2.7 /flags/\recent | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /flags/\recent | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.2.8 /flags/$mdnsent | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /flags/$mdnsent | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.2.9 /flags/$redirected | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /flags/$redirected | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.2.10 /flags/$forwarded | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /flags/$forwarded | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.2.11 /altsubject | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /altsubject | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.2.12 /<section-part>/comment | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /<section-part>/comment | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.2.13 /<section-part>/flags/seen | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /<section-part>/flags/seen | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.2.14 /<section-part>/flags/answered | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /<section-part>/flags/answered | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.2.15 /<section-part>/flags/flagged | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /<section-part>/flags/flagged | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.2.16 /<section-part>/flags/forwarded | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [X] Entry [] Attribute | ||||
| Name: /<section-part>/flags/forwarded | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.3 Attribute Registrations | ||||
| The following templates specify the IANA registrations of annotation | ||||
| attributes specified in this document. | ||||
| 5.3.1 value | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [] Entry [X] Attribute | ||||
| Name: value | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.3.2 size | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [] Entry [X] Attribute | ||||
| Name: size | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.3.3 content-type | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [] Entry [X] Attribute | ||||
| Name: content-type | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 5.3.4 content-language | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [] Entry [X] Attribute | ||||
| Name: content-language | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 6. Security Considerations | ||||
| Care must be taken to ensure that annotations whose values are | Care must be taken to ensure that annotations whose values are | |||
| intended to remain private are not stored in mailboxes which are | intended to remain private are not stored in mailboxes which are | |||
| accessible to other users. This includes mailboxes owned by the user | accessible to other users. This includes mailboxes owned by the user | |||
| by whose ACLs permit access by others as well as any shared | by whose ACLs permit access by others as well as any shared | |||
| mailboxes. | mailboxes. | |||
| Normative References | Excluding the above issues the ANNOTATE extension does not raise any | |||
| security considerations that are not present in the base [IMAP4] | ||||
| protocol, and these issues are discussed in [IMAP4]. | ||||
| 7. References | ||||
| 7.1 Normative References | ||||
| [RFC1891] Moore, K., "SMTP Service Extension for Delivery Status | [RFC1891] Moore, K., "SMTP Service Extension for Delivery Status | |||
| Notifications", RFC 1891, January 1996. | Notifications", RFC 1891, January 1996. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [RFC2234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | [RFC2234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", RFC 2234, November 1997. | Specifications: ABNF", RFC 2234, November 1997. | |||
| [RFC2244] Newman, C. and J. Myers, "ACAP -- Application | [RFC2244] Newman, C. and J. Myers, "ACAP -- Application | |||
| Configuration Access Protocol", RFC 2244, November 1997. | Configuration Access Protocol", RFC 2244, November 1997. | |||
| [RFC3282] Alvestrand, H., "Content Language Headers", RFC 3282, May | ||||
| 2002. | ||||
| [RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION | [RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION | |||
| 4rev1", RFC 3501, March 2003. | 4rev1", RFC 3501, March 2003. | |||
| [RFC3502] Crispin, M., "Internet Message Access Protocol (IMAP) - | [RFC3502] Crispin, M., "Internet Message Access Protocol (IMAP) - | |||
| MULTIAPPEND Extension", RFC 3502, March 2003. | MULTIAPPEND Extension", RFC 3502, March 2003. | |||
| [RFC3503] Melnikov, A., "Message Disposition Notification (MDN) | [RFC3503] Melnikov, A., "Message Disposition Notification (MDN) | |||
| profile for Internet Message Access Protocol (IMAP)", RFC | profile for Internet Message Access Protocol (IMAP)", RFC | |||
| 3503, March 2003. | 3503, March 2003. | |||
| [SORT] Crispin, M. and K. Murchison, "Internet Message Access | [SORT] Crispin, M. and K. Murchison, "Internet Message Access | |||
| Protocol - Sort and Thread Extension", | Protocol - Sort and Thread Extension", | |||
| draft-ietf-imapext-sort-15.txt, April 2004. | draft-ietf-imapext-sort-17.txt, May 2004. | |||
| Informative References | 7.2 Informative References | |||
| [CONDSTORE] | [CONDSTORE] | |||
| Melnikov, A. and S. Hole, "IMAP Extension for Conditional | Melnikov, A. and S. Hole, "IMAP Extension for Conditional | |||
| STORE operation", draft-ietf-imapext-condstore-05.txt, | STORE operation", draft-ietf-imapext-condstore-05.txt, | |||
| April 2004. | November 2003. | |||
| [RFC2086] Myers, J., "IMAP4 ACL extension", RFC 2086, January 1997. | [RFC2086] Myers, J., "IMAP4 ACL extension", RFC 2086, January 1997. | |||
| Authors' Addresses | Authors' Addresses | |||
| Randall Gellens | Randall Gellens | |||
| QUALCOMM Incorporated | QUALCOMM Incorporated | |||
| 5775 Morehouse Dr. | 5775 Morehouse Dr. | |||
| San Diego, CA 92121-2779 | San Diego, CA 92121-2779 | |||
| US | US | |||
| skipping to change at page 24, line 4 ¶ | skipping to change at page 35, line 14 ¶ | |||
| Authors' Addresses | Authors' Addresses | |||
| Randall Gellens | Randall Gellens | |||
| QUALCOMM Incorporated | QUALCOMM Incorporated | |||
| 5775 Morehouse Dr. | 5775 Morehouse Dr. | |||
| San Diego, CA 92121-2779 | San Diego, CA 92121-2779 | |||
| US | US | |||
| EMail: randy@qualcomm.com | EMail: randy@qualcomm.com | |||
| Cyrus Daboo | Cyrus Daboo | |||
| Cyrusoft International, Inc. | ISAMET, Inc. | |||
| 5001 Baum Blvd. | 5001 Baum Blvd. | |||
| Suite 650 | Suite 650 | |||
| Pittsburgh, PA 15213 | Pittsburgh, PA 15213 | |||
| US | US | |||
| EMail: daboo@cyrusoft.com | EMail: daboo@isamet.com | |||
| Appendix A. Acknowledgments | Appendix A. Acknowledgments | |||
| Many thanks to Chris Newman for his detailed comments on the first | Many thanks to Chris Newman for his detailed comments on the first | |||
| draft of this document, and to the participants at the ACAP working | draft of this document, and to the participants at the ACAP working | |||
| dinner in Pittsburgh. | dinner in Pittsburgh. | |||
| Intellectual Property Statement | Intellectual Property Statement | |||
| The IETF takes no position regarding the validity or scope of any | The IETF takes no position regarding the validity or scope of any | |||
| intellectual property or other rights that might be claimed to | Intellectual Property Rights or other rights that might be claimed to | |||
| pertain to the implementation or use of the technology described in | pertain to the implementation or use of the technology described in | |||
| this document or the extent to which any license under such rights | this document or the extent to which any license under such rights | |||
| might or might not be available; neither does it represent that it | might or might not be available; nor does it represent that it has | |||
| has made any effort to identify any such rights. Information on the | made any independent effort to identify any such rights. Information | |||
| IETF's procedures with respect to rights in standards-track and | on the procedures with respect to rights in RFC documents can be | |||
| standards-related documentation can be found in BCP-11. Copies of | found in BCP 78 and BCP 79. | |||
| claims of rights made available for publication and any assurances of | ||||
| licenses to be made available, or the result of an attempt made to | Copies of IPR disclosures made to the IETF Secretariat and any | |||
| obtain a general license or permission for the use of such | assurances of licenses to be made available, or the result of an | |||
| proprietary rights by implementors or users of this specification can | attempt made to obtain a general license or permission for the use of | |||
| be obtained from the IETF Secretariat. | 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 | The IETF invites any interested party to bring to its attention any | |||
| copyrights, patents or patent applications, or other proprietary | copyrights, patents or patent applications, or other proprietary | |||
| rights which may cover technology that may be required to practice | rights that may cover technology that may be required to implement | |||
| this standard. Please address the information to the IETF Executive | this standard. Please address the information to the IETF at | |||
| Director. | ietf-ipr@ietf.org. | |||
| Full Copyright Statement | ||||
| Copyright (C) The Internet Society (2004). All Rights Reserved. | Disclaimer of Validity | |||
| This document and translations of it may be copied and furnished to | This document and the information contained herein are provided on an | |||
| others, and derivative works that comment on or otherwise explain it | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | |||
| or assist in its implementation may be prepared, copied, published | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | |||
| and distributed, in whole or in part, without restriction of any | ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | |||
| kind, provided that the above copyright notice and this paragraph are | INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE | |||
| included on all such copies and derivative works. However, this | INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | |||
| document itself may not be modified in any way, such as by removing | WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | |||
| the copyright notice or references to the Internet Society or other | ||||
| Internet organizations, except as needed for the purpose of | ||||
| developing Internet standards in which case the procedures for | ||||
| copyrights defined in the Internet Standards process must be | ||||
| followed, or as required to translate it into languages other than | ||||
| English. | ||||
| The limited permissions granted above are perpetual and will not be | Copyright Statement | |||
| revoked by the Internet Society or its successors or assignees. | ||||
| This document and the information contained herein is provided on an | Copyright (C) The Internet Society (2004). This document is subject | |||
| "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING | to the rights, licenses and restrictions contained in BCP 78, and | |||
| TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING | except as set forth therein, the authors retain all their rights. | |||
| 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 | Acknowledgment | |||
| Funding for the RFC Editor function is currently provided by the | Funding for the RFC Editor function is currently provided by the | |||
| Internet Society. | Internet Society. | |||
| End of changes. 127 change blocks. | ||||
| 237 lines changed or deleted | 622 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||