| < draft-ietf-imapext-annotate-13.txt | draft-ietf-imapext-annotate-14.txt > | |||
|---|---|---|---|---|
| IMAP Extensions Working Group C. Daboo | IMAP Extensions Working Group C. Daboo | |||
| Internet-Draft ISAMET, Inc. | Internet-Draft | |||
| Expires: September 29, 2005 R. Gellens | Expires: May 25, 2006 R. Gellens | |||
| QUALCOMM Incorporated | QUALCOMM Incorporated | |||
| March 31, 2005 | November 21, 2005 | |||
| IMAP ANNOTATE Extension | IMAP ANNOTATE Extension | |||
| draft-ietf-imapext-annotate-13 | draft-ietf-imapext-annotate-14 | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet-Draft and is subject to all provisions | By submitting this Internet-Draft, each author represents that any | |||
| of section 3 of RFC 3667. By submitting this Internet-Draft, each | applicable patent or other IPR claims of which he or she is aware | |||
| author represents that any applicable patent or other IPR claims of | have been or will be disclosed, and any of which he or she becomes | |||
| which he or she is aware have been or will be disclosed, and any of | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
| which he or she 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 | Task Force (IETF), its areas, and its working groups. Note that | |||
| other groups may also distribute working documents as | other groups may also distribute working documents as Internet- | |||
| Internet-Drafts. | 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 | The list of current Internet-Drafts can be accessed at | |||
| http://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 September 29, 2005. | This Internet-Draft will expire on May 25, 2006. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2005). | Copyright (C) The Internet Society (2005). | |||
| Abstract | Abstract | |||
| The ANNOTATE extension to the Internet Message Access Protocol | The ANNOTATE extension to the Internet Message Access Protocol | |||
| permits clients and servers to maintain "metadata" for messages, or | permits clients and servers to maintain "meta data" for messages, or | |||
| individual message parts, stored in an IMAP mailbox. | individual message parts, stored in a mailbox on the server. | |||
| Change History (to be removed prior to publication as an RFC) | Change History (to be removed prior to publication as an RFC) | |||
| Changes from -13 to -14: | ||||
| 1. Changed 'string' formal syntax to 'list-mailbox' and 'astring' | ||||
| for entry/attribute names. | ||||
| 2. Updated examples to match new astring syntax. | ||||
| 3. Now requires explicit use of .priv or .shared in SORT. | ||||
| 4. Removed requirement that 'n' right only be present if 'r' right | ||||
| is also present. | ||||
| 5. Changed ANNOTATESIZE response to ANNOTATIONS response. | ||||
| 6. Allow servers to indicate that they do not support private | ||||
| annotations. | ||||
| 7. Added example for extended SELECT including ANNOTATIONS response | ||||
| code. | ||||
| 8. Removed content-type attribute. | ||||
| 9. Removed display-name attribute. | ||||
| 10. Prevent use of * and % wildcards in attributes. | ||||
| 11. Only allow "value" attributes in SEARCH. | ||||
| 12. Only allow "value" or "size" attributes in SORT. | ||||
| 13. Removed vendor attributes. | ||||
| 14. Removed IMAP flags, though the /flags entry path is reserved. | ||||
| 15. Added internationalization considerations. | ||||
| Changes from -12 to -13: | Changes from -12 to -13: | |||
| 1. Sync with change from DC meeting wrt 'r' right for both read and | 1. Sync with change from DC meeting wrt 'r' right for both read and | |||
| write of .priv. | write of .priv. | |||
| 2. Add text about 'n' right being a 'shared flag right' as defined | 2. Add text about 'n' right being a 'shared flag right' as defined | |||
| in 2086upd. | in 2086upd. | |||
| 3. Allow NIL in /<section-part>/flags entries. | 3. Allow NIL in /<section-part>/flags entries. | |||
| 4. Expand abstract to also indicate that annotations can apply on a | 4. Expand abstract to also indicate that annotations can apply on a | |||
| per-body part basis as well as per message. | per-body part basis as well as per message. | |||
| 5. Fix resp-text-code to use nil instead of "NIL". | 5. Fix resp-text-code to use nil instead of "NIL". | |||
| 6. Use double-quotes consistently around ANNOTATESIZE etc. | 6. Use double-quotes consistently around ANNOTATESIZE etc. | |||
| 7. Fix typos. | 7. Fix typos. | |||
| 8. Remove redundant second para of Introduction. | 8. Remove redundant second para of Introduction. | |||
| 9. Added 'Conventions' section with RFC2119 reference.. | 9. Added 'Conventions' section with RFC2119 reference.. | |||
| 10. Describe S:, C: example behaviour in conventions section.. | 10. Describe S:, C: example behaviour in conventions section.. | |||
| 11. Clarify that new rights must also be present if only old ACL is | 11. Clarify that new rights must also be present if only old ACL is | |||
| present. | present. | |||
| 12. Entry/attributes MUST NOT contain consecutive or trailing '/' or | 12. Entry/attributes MUST NOT contain consecutive or trailing '/' or | |||
| '.'. | '.'. | |||
| 13. Clarify default charset for content-type text/plain. | 13. Clarify default charset for content-type text/plain. | |||
| 14. Recommend use of utf-8 for all non-ascii text. | 14. Recommend use of utf-8 for all non-ascii text. | |||
| 15. Clarify terminology of ANNOTATESIZE response code. | 15. Clarify terminology of ANNOTATESIZE response code. | |||
| 16. Require servers to return ANNOTATESIZE on SELECT. | 16. Require servers to return ANNOTATESIZE on SELECT. | |||
| 17. Change an example to use UID FETCH for variety. | 17. Change an example to use UID FETCH for variety. | |||
| skipping to change at page 3, line 32 ¶ | skipping to change at page 4, line 4 ¶ | |||
| 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. | |||
| Changes from -07 to -08: | Changes from -07 to -08: | |||
| 1. ANNOTATESIZE response changed to use "NIL" for a mailbox that | 1. ANNOTATESIZE response changed to use "NIL" for a mailbox that | |||
| does not support any type of annotations, and "0" for a mailbox | does not support any type of annotations, and "0" for a mailbox | |||
| that only supports read-only annotations. | that only supports read-only annotations. | |||
| Changes from -06 to -07: | Changes from -06 to -07: | |||
| 1. Added text to state entry and attribute names are always | ||||
| case-insensitive. | 1. Added text to state entry and attribute names are always case- | |||
| insensitive. | ||||
| 2. Removed top-level entry namespace. | 2. Removed top-level entry namespace. | |||
| 3. Added server accept minima for annotation size and count. | 3. Added server accept minima for annotation size and count. | |||
| 4. Added [ANNOTATE TOOBIG] & [ANNOTATE TOOMANY] response codes. | 4. Added [ANNOTATE TOOBIG] & [ANNOTATE TOOMANY] response codes. | |||
| 5. Added [ANNOTATESIZE <<n>>] response code. | 5. Added [ANNOTATESIZE <<n>>] response code. | |||
| 6. Added comment on suggested CONDSTORE support. | 6. Added comment on suggested CONDSTORE support. | |||
| 7. Modified append behaviour to account for MULTIAPPEND. | 7. Modified append behaviour to account for MULTIAPPEND. | |||
| 8. Tweaked ABNF. | 8. Tweaked ABNF. | |||
| Changes from -05 to -06: | Changes from -05 to -06: | |||
| 1. Split references into Normative and Informative. | 1. Split references into Normative and Informative. | |||
| skipping to change at page 4, line 28 ¶ | skipping to change at page 4, line 48 ¶ | |||
| 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- | |||
| read-only/read-write mailboxes and storing private or shared | 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 | per-mailbox setting for the default. It is an open issue how | |||
| this 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 . . . . . . . . . . . . . . . . . 8 | 1. Introduction and Overview . . . . . . . . . . . . . . . . . . 7 | |||
| 2. Conventions Used in This Document . . . . . . . . . . . . . 8 | 2. Conventions Used in This Document . . . . . . . . . . . . . . 7 | |||
| 3. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 3. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 3.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 3.2 Namespace of entries and attributes . . . . . . . . . . . 9 | 3.2. Namespace of entries and attributes . . . . . . . . . . . 8 | |||
| 3.2.1 Entry Names . . . . . . . . . . . . . . . . . . . . . 10 | 3.2.1. Entry Names . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.2.2 Attribute Names . . . . . . . . . . . . . . . . . . . 12 | 3.2.2. Attribute Names . . . . . . . . . . . . . . . . . . . 10 | |||
| 3.3 Private versus Shared . . . . . . . . . . . . . . . . . . 13 | 3.3. Private versus Shared . . . . . . . . . . . . . . . . . . 11 | |||
| 3.4 Access Control . . . . . . . . . . . . . . . . . . . . . . 14 | 3.4. Access Control . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 3.5 Access to Standard IMAP Flags and Keywords . . . . . . . . 16 | 3.5. Access to Standard IMAP Flags and Keywords . . . . . . . . 15 | |||
| 4. IMAP Protocol Changes . . . . . . . . . . . . . . . . . . . 16 | 4. IMAP Protocol Changes . . . . . . . . . . . . . . . . . . . . 15 | |||
| 4.1 General Considerations . . . . . . . . . . . . . . . . . . 16 | 4.1. General Considerations . . . . . . . . . . . . . . . . . . 15 | |||
| 4.2 ANNOTATE parameter with the SELECT/EXAMINE commands . . . 16 | 4.2. ANNOTATE parameter with the SELECT/EXAMINE commands . . . 16 | |||
| 4.3 ANNOTATION Message Data Item in FETCH Command . . . . . . 17 | 4.3. ANNOTATION Message Data Item in FETCH Command . . . . . . 16 | |||
| 4.4 ANNOTATION Message Data Item in FETCH Response . . . . . . 19 | 4.4. ANNOTATION Message Data Item in FETCH Response . . . . . . 18 | |||
| 4.5 ANNOTATION Message Data Item in STORE . . . . . . . . . . 20 | 4.5. ANNOTATION Message Data Item in STORE . . . . . . . . . . 20 | |||
| 4.6 ANNOTATION interaction with COPY . . . . . . . . . . . . . 22 | 4.6. ANNOTATION interaction with COPY . . . . . . . . . . . . . 21 | |||
| 4.7 ANNOTATION Message Data Item in APPEND . . . . . . . . . . 22 | 4.7. ANNOTATION Message Data Item in APPEND . . . . . . . . . . 22 | |||
| 4.8 ANNOTATION Criterion in SEARCH . . . . . . . . . . . . . . 23 | 4.8. ANNOTATION Criterion in SEARCH . . . . . . . . . . . . . . 22 | |||
| 4.9 ANNOTATION Key in SORT . . . . . . . . . . . . . . . . . . 24 | 4.9. ANNOTATION Key in SORT . . . . . . . . . . . . . . . . . . 23 | |||
| 4.10 New ACL Rights . . . . . . . . . . . . . . . . . . . . . 24 | 4.10. New ACL Rights . . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 5. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . 24 | 5. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . 26 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 6.1 Entry and Attribute Registration Template . . . . . . . . 27 | 6.1. Entry and Attribute Registration Template . . . . . . . . 26 | |||
| 6.2 Entry Registrations . . . . . . . . . . . . . . . . . . . 27 | 6.2. Entry Registrations . . . . . . . . . . . . . . . . . . . 27 | |||
| 6.2.1 /comment . . . . . . . . . . . . . . . . . . . . . . . 28 | 6.2.1. /comment . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
| 6.2.2 /flags/\answered . . . . . . . . . . . . . . . . . . . 28 | 6.2.2. /flags . . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
| 6.2.3 /flags/\flagged . . . . . . . . . . . . . . . . . . . 29 | 6.2.3. /altsubject . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 6.2.4 /flags/\deleted . . . . . . . . . . . . . . . . . . . 29 | 6.2.4. /<section-part>/comment . . . . . . . . . . . . . . . 28 | |||
| 6.2.5 /flags/\seen . . . . . . . . . . . . . . . . . . . . . 30 | 6.2.5. /<section-part>/flags/seen . . . . . . . . . . . . . . 29 | |||
| 6.2.6 /flags/\draft . . . . . . . . . . . . . . . . . . . . 30 | 6.2.6. /<section-part>/flags/answered . . . . . . . . . . . . 29 | |||
| 6.2.7 /flags/\recent . . . . . . . . . . . . . . . . . . . . 31 | 6.2.7. /<section-part>/flags/flagged . . . . . . . . . . . . 30 | |||
| 6.2.8 /flags/$mdnsent . . . . . . . . . . . . . . . . . . . 31 | 6.2.8. /<section-part>/flags/forwarded . . . . . . . . . . . 30 | |||
| 6.2.9 /flags/$redirected . . . . . . . . . . . . . . . . . . 32 | 6.3. Attribute Registrations . . . . . . . . . . . . . . . . . 30 | |||
| 6.2.10 /flags/$forwarded . . . . . . . . . . . . . . . . . 32 | 6.3.1. value . . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 6.2.11 /altsubject . . . . . . . . . . . . . . . . . . . . 33 | 6.3.2. size . . . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 6.2.12 /<section-part>/comment . . . . . . . . . . . . . . 33 | 6.3.3. content-language . . . . . . . . . . . . . . . . . . . 32 | |||
| 6.2.13 /<section-part>/flags/seen . . . . . . . . . . . . . 34 | 7. Internationalization Considerations . . . . . . . . . . . . . 32 | |||
| 6.2.14 /<section-part>/flags/answered . . . . . . . . . . . 34 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 32 | |||
| 6.2.15 /<section-part>/flags/flagged . . . . . . . . . . . 35 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 6.2.16 /<section-part>/flags/forwarded . . . . . . . . . . 35 | 9.1. Normative References . . . . . . . . . . . . . . . . . . . 32 | |||
| 6.3 Attribute Registrations . . . . . . . . . . . . . . . . . 35 | 9.2. Informative References . . . . . . . . . . . . . . . . . . 33 | |||
| 6.3.1 value . . . . . . . . . . . . . . . . . . . . . . . . 36 | Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . . 33 | |||
| 6.3.2 size . . . . . . . . . . . . . . . . . . . . . . . . . 36 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
| 6.3.3 content-type . . . . . . . . . . . . . . . . . . . . . 37 | Intellectual Property and Copyright Statements . . . . . . . . . . 35 | |||
| 6.3.4 content-language . . . . . . . . . . . . . . . . . . . 37 | ||||
| 6.3.5 display-name . . . . . . . . . . . . . . . . . . . . . 38 | ||||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . 38 | ||||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 38 | ||||
| 8.1 Normative References . . . . . . . . . . . . . . . . . . . . 38 | ||||
| 8.2 Informative References . . . . . . . . . . . . . . . . . . . 39 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 39 | ||||
| A. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 40 | ||||
| Intellectual Property and Copyright Statements . . . . . . . 41 | ||||
| 1. Introduction and Overview | 1. Introduction and Overview | |||
| The ANNOTATE extension is present in any IMAP [RFC3501] | The ANNOTATE extension is present in any IMAP [RFC3501] | |||
| implementation which returns "ANNOTATE" as one of the supported | implementation which returns "ANNOTATE" as one of the supported | |||
| capabilities in the CAPABILITY response. | capabilities in the CAPABILITY response. | |||
| This extension makes the following changes to the IMAP protocol: | This extension makes the following changes to the IMAP protocol: | |||
| a. adds a new ANNOTATION message data item for use in FETCH | a. adds a new ANNOTATION message data item for use in FETCH | |||
| skipping to change at page 8, line 26 ¶ | skipping to change at page 7, line 26 ¶ | |||
| d. adds a new ANNOTATION sort key for use in SORT extension | d. adds a new ANNOTATION sort key for use in SORT extension | |||
| 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 new ANNOTATE parameter for use with the SELECT/EXAMINE | g. adds a new ANNOTATE parameter for use with the SELECT/EXAMINE | |||
| commands | commands | |||
| 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 code for the SELECT or EXAMINE | i. adds a new untagged response code for the SELECT or EXAMINE | |||
| commands to indicate the maximum size. | commands to indicate the maximum size. | |||
| j. adds a new ACL "bit" for use with the ACL extensions [RFC2086] | j. adds a new ACL "bit" for use with the ACL extensions [RFC2086] | |||
| and [ACLUPD] . | and [I-D.ietf-imapext-2086upd] . | |||
| 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 [RFC2244]. Note | of the Application Configuration Access Protocol [RFC2244]. Note | |||
| that there is no inheritance in annotations. | that there is no inheritance in annotations. | |||
| 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. | as defined in the IMAP base specification. | |||
| 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 [I-D.ietf-imapext- | |||
| 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. Conventions Used in This Document | 2. Conventions Used in This Document | |||
| In examples, "C:" and "S:" indicate lines sent by the client and | In examples, "C:" and "S:" indicate lines sent by the client and | |||
| server respectively. | server respectively. | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
| 3. Data Model | 3. Data Model | |||
| 3.1 Overview | 3.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 "meta data" for a message is stored as a single entry, made up of | |||
| several attributes. | several attributes. | |||
| For example, a comment annotation added to a message has an entry | For example, a comment annotation added to a message has an entry | |||
| name of "/comment". This entry is composed of several attributes | name of "/comment". This entry is composed of several attributes | |||
| such as "value", "size", etc. which contain the properties and data | such as "value", "size", etc. which contain the properties and data | |||
| of the entry. | of the 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 3.4 for specifics). | Section 3.4 for specifics). | |||
| 3.2 Namespace of entries and attributes | 3.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, with each component of the name separated by | has a hierarchical name, with each component of the name separated by | |||
| a slash ("/"). An entry name MUST NOT contain two consecutive "/" | a slash ("/"). An entry name MUST NOT contain two consecutive "/" | |||
| characters and MUST NOT end with a "/" character. | characters and MUST NOT end with a "/" character. | |||
| 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, with each component of the name separated by a | hierarchical name, with each component of the name separated by a | |||
| period ("."). An attribute name MUST NOT contain two consecutive "." | period ("."). An attribute name MUST NOT contain two consecutive "." | |||
| characters and MUST NOT end with a "." character. | characters and MUST NOT end with a "." character. | |||
| 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 NOT contain non-ASCII characters or the | ("%") characters and MUST NOT contain non-ASCII characters or the | |||
| NULL octet. Invalid entry or attribute names result in a BAD | 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. | |||
| Attribute names MUST NOT contain any hierarchical components with the | Attribute names MUST NOT contain any hierarchical components with the | |||
| names "priv" or "shared" as those have special meaning (see Section | names "priv" or "shared" as those have special meaning (see | |||
| 3.3. | Section 3.3. | |||
| Entry and attribute names are case-sensitive. | Entry and attribute names are case-sensitive. | |||
| Use of control or punctuation characters in entry and attribute names | Use of control or punctuation characters in entry and attribute names | |||
| is strongly discouraged. | is 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 as needed. | added as needed. | |||
| 3.2.1 Entry Names | 3.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 | experimental RFC, or fall under the vendor namespace. See | |||
| 6.1 for the registration template. | Section 6.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 | This entry hierarchy is reserved for future use. | |||
| entire message. The "value" attribute of each of the entries | ||||
| described below must be either "1", "0" or "NIL". "1" corresponds | ||||
| to the flag being set. | ||||
| Standard [RFC3501] flags always have a "\" prefix character. | ||||
| Other standard flags have a "$" prefix. The annotation names used | ||||
| for all flags uses the complete name for that flag, including the | ||||
| prefix character. | ||||
| Flag annotations are read-only. Clients MUST NOT attempt to | ||||
| change them via the annotation entries, instead the normal IMAP | ||||
| STORE FLAGS command is used. | ||||
| The set of standard IMAP flags annotations are: | ||||
| /flags/\answered | ||||
| /flags/\flagged | ||||
| /flags/\deleted | ||||
| /flags/\seen | ||||
| /flags/\draft | ||||
| /flags/\recent | ||||
| Note that entry names are sent as IMAP string elements which | ||||
| requires that "\" characters be escaped if sent as a quoted string | ||||
| as opposed to a literal. | ||||
| Note that flag and keyword names in IMAP are case-insensitive, | ||||
| however the entry names for the corresponding annotations are | ||||
| case-sensitive. Thus the IMAP flag and keyword names MUST be | ||||
| mapped to lowercase characters before being used as entry names | ||||
| for annotations. | ||||
| Additional standard flags are: | ||||
| /flags/$mdnsent | ||||
| /flags/$redirected | ||||
| /flags/$forwarded | ||||
| The "$mdnsent" flag is used to indicate message disposition | ||||
| notification processing state [RFC3503]. | ||||
| The "$redirected" flag indicates that a message has been handed | ||||
| off to someone else, by resending the message with minimal | ||||
| alterations, and in such a way that a reply by the new | ||||
| recipient is addressed to the original author, not the user who | ||||
| performed the redirection. | ||||
| The "$forwarded" flag indicates the message was resent to | ||||
| 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- | |||
| sub-entries can be used by vendors to provide client-specific | entries can be used by vendors to provide client-specific | |||
| attributes. The vendor-token MUST be registered with IANA, using | annotations. The vendor-token MUST be registered with IANA, using | |||
| the [RFC2244] vendor subtree registry. | the [RFC2244] 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 | syntax as the BODY message data item in the FETCH command | |||
| [RFC3501]. The server MUST return a BAD response if the client | [RFC3501]. The server MUST return a BAD response if the client | |||
| uses an incorrect part specifier (either incorrect syntax or a | uses an incorrect part specifier (either incorrect syntax or a | |||
| specifier referring to a non-existent part). The server MUST | specifier referring to a non-existent part). The server MUST | |||
| skipping to change at page 12, line 18 ¶ | skipping to change at page 10, line 22 ¶ | |||
| entirely by the client. There is no implicit change to any flag | entirely by the client. There is no implicit change to any flag | |||
| by 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 each of the entries described above must be either | attribute of each of the entries described above must be either | |||
| "1", "0" or "NIL". "1" corresponds to the flag being set. | "1", "0" or "NIL". "1" corresponds to the flag being set. | |||
| /<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 annotations. The vendor-token MUST be registered with | |||
| IANA. | IANA. | |||
| 3.2.2 Attribute Names | 3.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. See Section 6.1 for the registration | |||
| Section 6.1 for the registration template. | 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 string or binary data representing the value of the annotation. | A string or binary data representing the value of the annotation. | |||
| To delete an annotation, the client can store "NIL" into the | To delete an annotation, the client can store "NIL" into the | |||
| value. The content represented by the string is set via the | value. The content represented by the string is determined by the | |||
| content-type attribute. When the content-type attribute is not | Content-type used to register the entry (see Section 6.1 for entry | |||
| present, the value MUST be a "text/plain" content-type with a | registration templates). Where applicable, the registered | |||
| character set of "utf-8" [RFC3629]. Clients SHOULD use the utf-8 | content-type MUST include a charset parameter. Text values SHOULD | |||
| character set for any text values that contain non ASCII data. | use the utf-8 [RFC3629] character set. | |||
| Note that binary data (data which may contain the NULL octet) is | Note that binary data (data which may contain the NULL octet) is | |||
| allowed (e.g. for storing images etc), and this extension uses | allowed (e.g. for storing images etc), and this extension uses the | |||
| the "literal8" syntax element [ABNFEXT] to allow such data to be | "literal8" syntax element [I-D.melnikov-imap-ext-abnf] to allow | |||
| written to or read from the server. | such data to be written to or read from the server. | |||
| size | size | |||
| The size of the value, in octets. Set automatically by the | The size of the value, in octets. Set automatically by the | |||
| server, read-only to clients. | server, read-only to clients. | |||
| content-type | ||||
| A MIME [RFC2046] content type and subtype that describes the | ||||
| nature of the content of the "value" attribute. If not present, a | ||||
| value of "text/plain; charset=utf-8" is assumed. | ||||
| content-language | content-language | |||
| Indicates the language used for the value. This follows the | Indicates the language used for the value. This follows the | |||
| format described in [RFC3282]. Clients SHOULD set this value when | format described in [RFC3282]. Clients SHOULD set this value when | |||
| storing an annotation that uses text that can be presented to the | storing an annotation that uses text that can be presented to the | |||
| user. It is not required for enumerated or numeric values such as | user. It is not required for enumerated or numeric values such as | |||
| flags etc. If a value is being set, clients MUST ensure that it | flags etc. If a value is being set, clients MUST ensure that it | |||
| accurately reflects the content stored in the value attribute. | accurately reflects the content stored in the value attribute. | |||
| Servers MUST ensure that the "content-language" attribute value is | ||||
| kept in synchronization with the "value" attribute. To ensure | ||||
| that, the server MUST remove any "content-language" attribute | ||||
| value when the client STOREs a "value" attribute without also | ||||
| including a "content-language" attribute in the same STORE | ||||
| command. | ||||
| display-name | 3.3. Private versus Shared | |||
| A text string using the "utf-8" character set [RFC3629] that | ||||
| describes the nature of the corresponding annotation, in a | ||||
| language specified by the "content-language" attribute. | ||||
| vendor.<vendor-token> | ||||
| Defines an attribute associated with a particular product of some | ||||
| vendor. This attribute can be used by vendors to provide client | ||||
| specific attributes. The vendor-token MUST be registered with | ||||
| IANA, using the [RFC2244] vendor subtree registry. | ||||
| 3.3 Private versus Shared | ||||
| 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 | |||
| [ACLUPD] which permits access by other users, or because it is a | [I-D.ietf-imapext-2086upd] which permits access by other users, or | |||
| shared mailbox. | because it is a shared 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. | |||
| skipping to change at page 14, line 17 ¶ | skipping to change at page 12, line 13 ¶ | |||
| set shared annotations on messages in a shared folder, which | set shared annotations on messages in a shared folder, which | |||
| individual 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 | client to access both and not overlook either. There is also a | |||
| danger in allowing a client to store an annotation without knowing if | danger in allowing a client to store an annotation without knowing if | |||
| it is 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 or FETCH command which specifies | |||
| neither uses both. Store operations MUST explicitly use ".priv" or | neither uses both. STORE, APPEND and SORT commands MUST explicitly | |||
| ".shared" suffixes. | use ".priv" or ".shared" suffixes. | |||
| 3.4 Access Control | If the ANNOTATE extension is present, support for shared annotations | |||
| in servers is REQUIRED, whilst support for private annotations in | ||||
| servers is OPTIONAL. This recognises the fact that support for | ||||
| private annotations may introduce significantly more complexity to a | ||||
| server in terms of tracking ownership of the annotations, how quota | ||||
| is determined for users based on their own annotations etc. Clients | ||||
| that support the ANNOTATE extension MUST handle both shared and | ||||
| private annotations. | ||||
| 3.4. Access Control | ||||
| A user needs to have appropriate rights in order to read or write | A user needs to have appropriate rights in order to read or write | |||
| ".priv" or ".shared" annotation values. How those rights are | ".priv" or ".shared" annotation values. How those rights are | |||
| calculated depends on whether the ACL [RFC2086] extension or its | calculated depends on whether the ACL [RFC2086] extension or its | |||
| update [ACLUPD] is present or not. If a client attempts to store or | update [I-D.ietf-imapext-2086upd] is present or not. If a client | |||
| fetch an annotation to which they do not have the appropriate rights, | attempts to store or fetch an annotation to which they do not have | |||
| the server MUST respond with a NO response. | the appropriate rights, the server MUST respond with a NO response. | |||
| When the ACL extension is not present, access to annotation values is | When the ACL extension is not present, access to annotation values is | |||
| governed by the nature of the selected state. In particular whether | governed by the nature of the selected state. In particular whether | |||
| the mailbox was SELECT'ed or EXAMINE'd in READ-ONLY or READ-WRITE | the mailbox was SELECT'ed or EXAMINE'd in READ-ONLY or READ-WRITE | |||
| mode. | mode. | |||
| When the ACL extension is present, the server MUST recognise the new | When the ACL extension is present, the server MUST recognise the new | |||
| ACL right "n", in addition to the ones defined by the ACL extension | ACL right "n", in addition to the ones defined by the ACL extension | |||
| itself. | itself. | |||
| The "r" right controls both read and write access to ".priv" | The "r" right controls both read and write access to ".priv" | |||
| annotation values. When it is on, access to ".priv" annotations is | annotation values. When it is on, access to ".priv" annotations is | |||
| allowed, when it is off, access to ".priv" annotations is disallowed. | allowed, when it is off, access to ".priv" annotations is disallowed. | |||
| The "r" right controls only the read access for ".shared" annotation | The "r" right controls only the read access for ".shared" annotation | |||
| values. When it is on, ".shared" annotations can be read, when it is | values. When it is on, ".shared" annotations can be read, when it is | |||
| off, ".shared" annotations cannot be read. | off, ".shared" annotations cannot be read. | |||
| The "n" right controls only the write access for ".shared" annotation | The "n" right controls only the write access for ".shared" annotation | |||
| values. When it is on, ".shared" annotations can be changed, when it | values. When it is on, ".shared" annotations can be changed or | |||
| is off, ".shared" annotations cannot be changed. The "n" right MUST | created through either a STORE or APPEND command, when it is off, | |||
| NOT be present if the "r" is not present. The "n" right constitutes | ".shared" annotations cannot be changed or created. The "n" right | |||
| a "shared flag right" as defined in [ACLUPD] Section 6.2. | constitutes a "shared flag right" as defined in [I-D.ietf-imapext- | |||
| 2086upd] Section 6.2. | ||||
| A summary of all the access control restrictions is tabulated below | A summary of all the access control restrictions is tabulated below | |||
| +---------------+---------------+-----------------------------------+ | +---------------+---------------+-----------------------------------+ | |||
| | Server Type | Action on | Type of mailbox | | | Server Type | Action on | Type of mailbox | | |||
| | | annotation | | | | | annotation | | | |||
| +===============+===============+===================================+ | +===============+===============+===================================+ | |||
| | | | | | | | | | | |||
| | | read .priv | Any mailbox that can be SELECTED | | | | read .priv | Any mailbox that can be SELECTED | | |||
| | | values | or EXAMINED. | | | | values | or EXAMINED. | | |||
| | | | | | | | | | | |||
| | +---------------+-----------------------------------+ | | +---------------+-----------------------------------+ | |||
| | | | | | | | | | | |||
| skipping to change at page 16, line 5 ¶ | skipping to change at page 15, line 5 ¶ | |||
| | | read .shared | Any mailbox with the "r" | | | | read .shared | Any mailbox with the "r" | | |||
| | | values | ACL right. | | | | values | ACL right. | | |||
| | | | | | | | | | | |||
| | +---------------+-----------------------------------+ | | +---------------+-----------------------------------+ | |||
| | | | | | | | | | | |||
| | | write .shared | Any mailbox with the "n" | | | | write .shared | Any mailbox with the "n" | | |||
| | | values | ACL right. | | | | values | ACL right. | | |||
| | | | | | | | | | | |||
| +---------------+---------------+-----------------------------------+ | +---------------+---------------+-----------------------------------+ | |||
| 3.5 Access to Standard IMAP Flags and Keywords | 3.5. Access to Standard IMAP Flags and Keywords | |||
| Flags cannot be changed through annotations due to ambiguity of how | Due to ambiguity of how private and shared values would map to the | |||
| private and shared values would map to the base IMAP flag and keyword | base IMAP flag and keyword values, the ANNOTATE extension does not | |||
| values. As a result the /flags annotation values are treated as | expose IMAP flags or keywords as entries. However, the /flags | |||
| read-only and MUST NOT be changed by a client. In turn this means | annotation entry is reserved for future use and MUST NOT be used by | |||
| that the ".priv" and ".shared" values of a flag annotation are always | clients or servers supporting this extension. | |||
| the same and represent the value of the base IMAP flag or keyword. | ||||
| Clients that need to implement shared and private "flags" can create | Clients that need to implement shared and private "flags" can create | |||
| their own annotation entries for those, completely bypassing the base | their own annotation entries for those, completely bypassing the base | |||
| IMAP flag/keyword behaviour. | IMAP flag/keyword behaviour. | |||
| 4. IMAP Protocol Changes | 4. IMAP Protocol Changes | |||
| 4.1 General Considerations | 4.1. General Considerations | |||
| The server is allowed to impose limitations on the size of any one | Servers may be able to offer only a limited level of support for | |||
| annotation or the total number of annotations for a single message. | annotations in mailboxes, and it is useful for clients to be able to | |||
| However, the server MUST accept a minimum annotation data size of at | know what level of support is available. Servers MUST return an | |||
| least 1024 bytes, and a minimum annotation count per message of at | ANNOTATIONS response during the SELECT or EXAMINE command for a | |||
| least 10. | mailbox to indicate the level of support. Possible response codes | |||
| used with the ANNOTATIONS response are: | ||||
| The server MUST indicate the maximum size for an annotation value by | "NONE" - this indicates that the mailbox being selected does not | |||
| sending an untagged ANNOTATESIZE response containing the maximum size | support annotations at all. Clients MUST NOT attempt to use | |||
| value during a SELECT or EXAMINE command. Clients MUST NOT store | annotation extensions in commands. | |||
| annotation values of a size greater than the amount indicated by the | ||||
| server in the ANNOTATESIZE response. | ||||
| In some cases, servers may be able to offer annotations on some | "READ-ONLY" - this indicates that the annotations supported by the | |||
| mailboxes and not others, or may be able to provide only read-only | mailbox cannot be changed by the client. Clients MUST NOT attempt | |||
| annotations on some mailboxes. For mailboxes that cannot have | to store annotations on any messages in a mailbox with this | |||
| annotations associated with them, the server MUST return an | response code. | |||
| ANNOTATESIZE response with a value of "NIL" during the SELECT or | ||||
| EXAMINE command for that mailbox. Clients MUST NOT attempt to fetch | ||||
| or store annotations on any messages in a mailbox for which the | ||||
| ANNOTATESIZE response was "NIL". For mailboxes that can only have | ||||
| read-only annotations associated with them, the server MUST return an | ||||
| ANNOTATESIZE response with a value of "0" (zero) during the SELECT or | ||||
| EXAMINE command for that mailbox. Clients MUST NOT attempt to store | ||||
| annotations on any messages in a mailbox for which the ANNOTATESIZE | ||||
| response was zero. | ||||
| 4.2 ANNOTATE parameter with the SELECT/EXAMINE commands | "NOPRIVATE" - this indicates that the server does not support | |||
| private annotations on the mailbox. Only shared annotations are | ||||
| supported. Clients SHOULD only attempt to read or store | ||||
| annotations attributes with the ".shared" suffix. If a client | ||||
| uses an attribute with the ".priv" suffix in a FETCH command, then | ||||
| servers should return the attribute value in the FETCH response as | ||||
| "NIL". If a client uses an attribute with the ".priv" suffix in a | ||||
| STORE command (or an APPEND command targetted at the mailbox) then | ||||
| the server MUST return a NO response. | ||||
| numeric values - if servers support writable annotations, then the | ||||
| server MUST indicate the maximum size for an annotation value by | ||||
| providing the maximum size value in the response code. Clients | ||||
| MUST NOT store annotation values of a size greater than the amount | ||||
| indicated by the server. Servers MUST accept a minimum annotation | ||||
| data size of at least 1024 bytes if annotations can be written. | ||||
| In addition the server MAY limit the total number of annotations for | ||||
| a single message. However, the server MUST provide a minimum | ||||
| annotation count per message of at least 10. | ||||
| 4.2. ANNOTATE parameter with the SELECT/EXAMINE commands | ||||
| The ANNOTATE extension defines a single optional SELECT parameter | The ANNOTATE extension defines a single optional SELECT parameter | |||
| [ABNFEXT] "ANNOTATE", which is used to turn on unsolicited responses | [I-D.melnikov-imap-ext-abnf] "ANNOTATE", which is used to turn on | |||
| for annotations as described in Section 4.4. This optional parameter | unsolicited responses for annotations as described in Section 4.4. | |||
| results in a per-mailbox state change, i.e. it must be used in each | This optional parameter results in a per-mailbox state change, i.e. | |||
| SELECT/EXAMINE command in order to be effective, irrespective of | it must be used in each SELECT/EXAMINE command in order to be | |||
| whether it was used in a previous SELECT/EXAMINE during the same | effective, irrespective of whether it was used in a previous SELECT/ | |||
| session. | EXAMINE during the same session. | |||
| 4.3 ANNOTATION Message Data Item in FETCH Command | Example: | |||
| C: a SELECT INBOX ANNOTATE | ||||
| S: * FLAGS (\Answered \Flagged \Draft \Deleted \Seen) | ||||
| S: * OK [PERMANENTFLAGS (\Answered \Flagged \Draft | ||||
| \Deleted \Seen \*)] | ||||
| S: * 10268 EXISTS | ||||
| S: * 1 RECENT | ||||
| S: * OK [UNSEEN 10268] | ||||
| S: * OK [UIDVALIDITY 890061587] | ||||
| S: * OK [UIDNEXT 34643] | ||||
| S: * OK [ANNOTATIONS 20480 NOPRIVATE] | ||||
| S: a OK [READ-WRITE] Completed | ||||
| In the above example, a SELECT command with the ANNOTATE parameter | ||||
| is issued. The response from the server includes the required | ||||
| ANNOTATIONS response that indicates that the server supports | ||||
| annotations up to a maximum size of 20480 bytes and does not | ||||
| support private annotations (only shared). | ||||
| 4.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 "%" wild card characters can be used in entry specifiers 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. Thus an entry | |||
| appears in (that is, "/" for an entry specifier or "." for an | specifier of "/%" matches entries such as "/comment" and | |||
| attribute specifier). Thus an entry specifier of "/%" matches | "/altsubject", but not "/1/comment". | |||
| entries such as "/comment" and "/altsubject", but not "/flags/ | ||||
| $redirected". | ||||
| Example: | Example: | |||
| C: a UID FETCH 1123 (UID ANNOTATION | C: a UID FETCH 1123 (UID ANNOTATION | |||
| ("/*" ("value.priv" "size.priv"))) | (/* (value.priv size.priv))) | |||
| S: * 12 FETCH (UID 1123 ANNOTATION | S: * 12 FETCH (UID 1123 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 | |||
| ("value.priv" "label43" | (value.priv "label43" | |||
| "size.priv" "7") | size.priv "7") | |||
| "/vendor/foobar/personality" | /vendor/foobar/personality | |||
| ("value.priv" "Tallulah Bankhead" | (value.priv "Tallulah Bankhead" | |||
| "size.priv" "17"))) | size.priv "17"))) | |||
| S: a OK Fetch complete | S: a OK Fetch complete | |||
| In the above example, the contents of the private "value" and | In the above example, the contents of the private "value" and | |||
| "size" attributes for any entries in the "/" hierarchy are | "size" attributes for any entries in the "/" hierarchy are | |||
| requested by the client and returned by the server. | requested by the client and returned by the server. | |||
| Example: | Example: | |||
| C: a FETCH 1 (ANNOTATION ("/%" "value.shared")) | C: a FETCH 1 (ANNOTATION (/% value.shared)) | |||
| S: * 1 FETCH (ANNOTATION | S: * 1 FETCH (ANNOTATION | |||
| ("/comment" ("value.shared" "Patch Mangler") | (/comment (value.shared "Patch Mangler") | |||
| "/altsubject" ("value.shared" "Patches? We don't | /altsubject (value.shared "Patches? We don't | |||
| need no steenkin patches!"))) | need no steenkin patches!"))) | |||
| S: a OK Fetch complete | S: a OK Fetch complete | |||
| In the above example, the contents of the shared "value" | In the above example, the contents of the shared "value" | |||
| attributes for entries at the top level only of the "/" hierarchy | attributes for entries at the top level only of the "/" hierarchy | |||
| are requested by the client and returned by the server. | are requested by the client and returned by the server. | |||
| Entry and attribute specifiers can be lists of atomic specifiers, so | Entry and attribute specifiers can be lists of atomic specifiers, so | |||
| that multiple items of each type may be returned in a single FETCH | that multiple items of each type may be returned in a single FETCH | |||
| command. | command. | |||
| Example: | Example: | |||
| C: a FETCH 1 (ANNOTATION | C: a FETCH 1 (ANNOTATION | |||
| (("/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. | |||
| 4.4 ANNOTATION Message Data Item in FETCH Response | 4.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 | pair is returned by the server. Since the client did not specify | |||
| a ".shared" or ".priv" suffix, both are returned. Only the | a ".shared" or ".priv" suffix, both are returned. Only the | |||
| private 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- | |||
| attribute-value pair are returned by the server. Since the client | value pair are returned by the server. Since the client did not | |||
| did not specify a ".shared" or ".priv" suffix, both are returned. | specify a ".shared" or ".priv" suffix, both are returned. Only | |||
| Only the private attributes have values; the shared attributes are | 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 | a ".shared" or ".priv" suffix, both are returned. Only the | |||
| private attributes have values; the shared attributes are "NIL". | private attributes have values; the shared attributes are "NIL". | |||
| 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 | |||
| skipping to change at page 20, line 34 ¶ | skipping to change at page 19, line 51 ¶ | |||
| Unsolicited ANNOTATION responses MUST NOT include ANNOTATION data | Unsolicited ANNOTATION responses MUST NOT include ANNOTATION data | |||
| values - only the entry name of the ANNOTATION that has changed. | values - only the entry name of the ANNOTATION that has changed. | |||
| This restriction avoids sending ANNOTATION data values (which may be | This restriction avoids sending ANNOTATION data values (which may be | |||
| large) to a client unless the client explicitly asks for the value. | large) to a client unless the client explicitly asks for the value. | |||
| Example: | Example: | |||
| C: a STORE 1 +FLAGS (\Seen) | C: a STORE 1 +FLAGS (\Seen) | |||
| S: * 1 FETCH (FLAGS (\Seen)) | S: * 1 FETCH (FLAGS (\Seen)) | |||
| ANNOTATION ("/comment")) | ANNOTATION (/comment)) | |||
| S: a OK STORE complete | S: a OK STORE complete | |||
| In the above example, an unsolicited ANNOTATION response is | In the above example, an unsolicited ANNOTATION response is | |||
| returned during a STORE command. The unsolicited response | returned during a STORE command. The unsolicited response | |||
| contains only the entry name of the annotation that changed, and | contains only the entry name of the annotation that changed, and | |||
| not its value. | not its value. | |||
| 4.5 ANNOTATION Message Data Item in STORE | 4.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 | specified attributes with the values provided. Clients can use | |||
| "NIL" 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 | implicit ".SILENT" behaviour. This means the server does not | |||
| generate an untagged FETCH in response to the STORE command and | generate an untagged FETCH in response to the STORE command and | |||
| skipping to change at page 21, line 18 ¶ | skipping to change at page 20, line 35 ¶ | |||
| 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. | |||
| Example: | Example: | |||
| C: a STORE 1 ANNOTATION ("/comment" | C: a STORE 1 ANNOTATION (/comment | |||
| ("value.priv" "My new comment")) | (value.priv "My new comment")) | |||
| S: a OK Store complete | S: a OK Store complete | |||
| In the above example, the entry "/comment" is created (if not | In the above example, the entry "/comment" is created (if not | |||
| already present) and the private attribute "value" with data set | already present) and the private attribute "value" with data set | |||
| to "My new comment" is created if not already present, or replaced | to "My new comment" is created if not already present, or replaced | |||
| if it exists. | if it exists. | |||
| Example: | Example: | |||
| C: a STORE 1 ANNOTATION ("/comment" | C: a STORE 1 ANNOTATION (/comment | |||
| ("value.shared" NIL)) | (value.shared NIL)) | |||
| S: a OK Store complete | S: a OK Store complete | |||
| In the above example, the shared "value" attribute of the entry "/ | In the above example, the shared "value" attribute of the entry | |||
| comment" is removed by storing "NIL" into the attribute. | "/comment" is removed by storing "NIL" into the attribute. | |||
| Multiple entries can be set in a single STORE command by listing | Multiple entries can be set in a single STORE command by listing | |||
| entry-attribute-value pairs in the list. | entry-attribute-value pairs in the list. | |||
| Example: | Example: | |||
| C: a STORE 1 ANNOTATION ("/comment" | C: a STORE 1 ANNOTATION (/comment | |||
| ("value.priv" "Get tix Tuesday") | (value.priv "Get tix Tuesday") | |||
| "/altsubject" | /altsubject | |||
| ("value.priv" "Wots On")) | (value.priv "Wots On")) | |||
| S: a OK Store complete | S: a OK Store complete | |||
| In the above example, the entries "/comment" and "/altsubject" are | In the above example, the entries "/comment" and "/altsubject" are | |||
| created (if not already present) and the private attribute "value" | created (if not already present) and the private attribute "value" | |||
| is created for each entry if not already present, or replaced if | is created for each entry if not already present, or replaced if | |||
| they exist. | they exist. | |||
| Multiple attributes can be set in a single STORE command by listing | Multiple attributes can be set in a single STORE command by listing | |||
| multiple attribute-value pairs in the entry list. | multiple attribute-value pairs in the entry list. | |||
| Example: | Example: | |||
| 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")) | value.shared "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 and shared "value" attributes are created if | |||
| created if not already present, or replaced if they exist. | not already present, or replaced if they exist. | |||
| 4.6 ANNOTATION interaction with COPY | 4.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 "NONE" or "READ-ONLY" response code in its | |||
| response code), or if the destination mailbox cannot support the size | ANNOTATIONS response), or if the destination mailbox cannot support | |||
| of a annotation because it exceeds the ANNOTATESIZE value. Servers | the size of a annotation because it exceeds the ANNOTATIONS value. | |||
| MUST NOT copy ".priv" annotation data for users other than the | Servers MUST NOT copy ".priv" annotation data for users other than | |||
| current user. | the current user. | |||
| 4.7 ANNOTATION Message Data Item in APPEND | 4.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 [ABNFEXT]. The | appended via the addition of a new append data item [I-D.melnikov- | |||
| new data item can also be used with the multi-append [RFC3502] | imap-ext-abnf]. The new data item can also be used with the multi- | |||
| extension that allows multiple messages to be appended via a single | append [RFC3502] extension that allows multiple messages to be | |||
| APPEND command. | appended via a single APPEND 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 I say so")) {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. | |||
| 4.8 ANNOTATION Criterion in SEARCH | 4.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 "*" | in their values are returned in the SEARCH results. The "*" | |||
| character can be used in the entry or attribute name fields to match | character can be used in the entry name field to match any content in | |||
| any content in those items. The "%" character can be used in the | those items. The "%" character can be used in the entry name field | |||
| entry or attribute name fields to match a single level of hierarchy | to match a single level of hierarchy only. | |||
| only. | ||||
| Only the "value", "value.priv" and "value.shared" attributes can be | ||||
| searched. Clients MUST NOT specify an attribute other than either | ||||
| "value", "value.priv" or "value.shared". Servers MUST return a BAD | ||||
| response if the client tries to search any other attribute. | ||||
| 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 | |||
| results. | results. | |||
| Example: | Example: | |||
| C: a SEARCH ANNOTATION "*" "*" "IMAP4" | C: a SEARCH ANNOTATION * value.priv "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 the private "value" attribute of | |||
| of any entry are returned in the search results. | any entry are returned in the search results. | |||
| 4.9 ANNOTATION Key in SORT | 4.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 [I-D.ietf-imapext-sort] | |||
| server to return the message numbers or UIDs of a mailbox, sorted | instructs the server to return the message numbers or UIDs of a | |||
| using the values of the specified annotations. The ANNOTATION | mailbox, sorted using the values of the specified annotations. The | |||
| criterion is available if the server returns both ANNOTATE and SORT | ANNOTATION criterion is available if the server returns both ANNOTATE | |||
| as supported capabilities in the CAPABILITY command response. | and 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. | |||
| determines sort order, as specified in the SORT extension | ||||
| description.) | Clients MUST provide either the ".priv" or ".shared" suffix to the | |||
| attribute name to ensure that the server knows which specific value | ||||
| to sort on. | ||||
| Only the "value.priv", "value.shared", "size.priv" and "size.shared" | ||||
| attributes can be used for sorting. Clients MUST NOT specify an | ||||
| attribute other than either "value.priv", "value.shared", "size.priv" | ||||
| or "size.shared". Servers MUST return a BAD response if the client | ||||
| tries to search any other attribute. | ||||
| When either "value.priv" or "value.shared" is being sorted, the | ||||
| server MUST use the character set value specified in the SORT command | ||||
| to determine the appropriate sort order. | ||||
| When either "size.priv" or "size.shared" is being sorted, the server | ||||
| sorts using the numeric values of those attributes, as it would when | ||||
| the "SIZE" sort key is used. | ||||
| 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 - wild cards are not allowed. | |||
| 4.10 New ACL Rights | 4.10. New ACL Rights | |||
| As discussed in Section 3.4 this extension adds a new "n" right to | As discussed in Section 3.4 this extension adds a new "n" right to | |||
| the list of rights provided by the ACL extensions [RFC2086] and | the list of rights provided by the ACL extensions [RFC2086] and | |||
| [ACLUPD]. | [I-D.ietf-imapext-2086upd]. | |||
| 5. Formal Syntax | 5. 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 [RFC2234]. | Form (ABNF) notation as specified in [RFC2234]. | |||
| Non-terminals referenced but not defined below are as defined by | Non-terminals referenced but not defined below are as defined by | |||
| [RFC3501] with the new definitions in [ABNFEXT] superceding those in | [RFC3501] with the new definitions in [I-D.melnikov-imap-ext-abnf] | |||
| [RFC3501]. | superseding those in [RFC3501]. | |||
| Except as noted otherwise, all alphabetic characters are | Except as noted otherwise, all alphabetic characters are case- | |||
| case-insensitive. The use of upper or lower case characters to | insensitive. The use of upper or lower case characters to define | |||
| define token strings is for editorial clarity only. Implementations | token strings is for editorial clarity only. Implementations MUST | |||
| MUST accept these strings in a case-insensitive fashion. | accept these strings in a case-insensitive fashion. | |||
| ann-size = "NONE" / | ||||
| (("READ-ONLY" / nz-size) | ||||
| [SP "NOPRIVATE"]) | ||||
| ; response codes indicating the level of | ||||
| ; support for annotations in a mailbox | ||||
| append-ext =/ att-annotate | append-ext =/ att-annotate | |||
| ; modifies [RFC3501] extension behaviour | ; modifies [RFC3501] extension behaviour | |||
| att-annotate = "ANNOTATION" SP "(" entry-att *(SP entry-att) ")" | att-annotate = "ANNOTATION" SP | |||
| "(" entry-att *(SP entry-att) ")" | ||||
| att-match = string | att-search = "value" / "value.priv" / "value.shared" | |||
| ; dot-separated attribute name | ; the only attributes that can be searched | |||
| ; MAY contain "*" or "%" for use as wildcards | ||||
| att-sort = "value.priv" / "value.shared" / | ||||
| "size.priv" / "size.shared" | ||||
| ; the only attributes that can be sorted | ||||
| att-value = attrib SP value | att-value = attrib SP value | |||
| attrib = string | attrib = astring | |||
| ; dot-separated attribute name | ; dot-separated attribute name | |||
| ; MUST NOT contain "*" or "%" | ; MUST NOT contain "*" or "%" | |||
| attribs = att-match / | attribs = attrib / "(" attrib *(SP attrib) ")" | |||
| "(" att-match *(SP att-match) ")" | ; one or more attribute specifiers | |||
| capability =/ "ANNOTATE" | capability =/ "ANNOTATE" | |||
| ; defines the capability for this extension | ; defines the capability for this extension | |||
| entries = entry-match / | entries = entry-match / | |||
| "(" entry-match *(SP entry-match) ")" | "(" entry-match *(SP entry-match) ")" | |||
| entry = string | entry = astring | |||
| ; slash-separated path to entry | ; slash-separated path to entry | |||
| ; MUST NOT contain "*" or "%" | ; MUST NOT contain "*" or "%" | |||
| entry-att = entry SP "(" att-value *(SP att-value) ")" | entry-att = entry SP "(" att-value *(SP att-value) ")" | |||
| entry-match = string | entry-match = list-mailbox | |||
| ; slash-separated path to entry | ; slash-separated path to entry | |||
| ; MAY contain "*" or "%" for use as wildcards | ; MAY contain "*" or "%" for use as wild cards | |||
| fetch-att =/ "ANNOTATION" SP "(" entries SP attribs ")" | fetch-att =/ "ANNOTATION" SP "(" entries SP attribs ")" | |||
| ; modifies original IMAP fetch-att | ; modifies original IMAP fetch-att | |||
| msg-att-dynamic =/ "ANNOTATION" SP | msg-att-dynamic =/ "ANNOTATION" SP | |||
| ( "(" entry-att *(SP entry-att) ")" / | ( "(" entry-att *(SP entry-att) ")" / | |||
| "(" entry *(SP entry) ")" ) | "(" entry *(SP entry) ")" ) | |||
| ; extends FETCH response with annotation data | ; extends FETCH response with annotation data | |||
| resp-text-code =/ "ANNOTATE" SP "TOOBIG" / | resp-text-code =/ "ANNOTATE" SP "TOOBIG" / | |||
| "ANNOTATE" SP "TOOMANY" / | "ANNOTATE" SP "TOOMANY" / | |||
| "ANNOTATESIZE" SP (number / nil) | "ANNOTATIONS" SP ann-size | |||
| ; new response codes | ; new response codes | |||
| search-key =/ "ANNOTATION" SP entry-match SP att-match | search-key =/ "ANNOTATION" SP entry-match SP att-search | |||
| SP value | SP value | |||
| ; modifies original IMAP search-key | ; modifies original IMAP search-key | |||
| select-param =/ "ANNOTATE" | select-param =/ "ANNOTATE" | |||
| ; defines the select parameter used with | ; defines the select parameter used with | |||
| ; ANNOTATE extension | ; ANNOTATE extension | |||
| sort-key =/ "ANNOTATION" SP entry SP attrib | sort-key =/ "ANNOTATION" SP entry SP att-sort | |||
| ; modifies original sort-key | ; modifies original sort-key | |||
| store-att-flags =/ att-annotate | store-att-flags =/ att-annotate | |||
| ; modifies original IMAP STORE command | ; modifies original IMAP STORE command | |||
| value = nstring / literal8 | value = nstring / literal8 | |||
| 6. IANA Considerations | 6. IANA Considerations | |||
| Both entry names and attribute names MUST be specified in a standards | Entry names MUST be specified in a standards track or IESG approved | |||
| track or IESG approved experimental RFC, or fall under the vendor | experimental RFC, or fall under the vendor namespace. Vendor names | |||
| namespace. Vendor names MUST be registered. Each entry registration | MUST be registered. | |||
| MUST include a recommended content-type that is used to indicate the | ||||
| expected nature of the annotation value. | ||||
| 6.1 Entry and Attribute Registration Template | Attribute names MUST be specified in a standards track or IESG | |||
| approved experimental RFC. | ||||
| Each entry registration MUST include a content-type that is used to | ||||
| indicate the nature of the annotation value. Where applicable a | ||||
| charset parameter MUST be included with the content-type. | ||||
| 6.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: _______________________ | |||
| ____________________________________ | ____________________________________ | |||
| ____________________________________ | ____________________________________ | |||
| Recommended Content-Type:___________ | Content-Type:_______________________ | |||
| ____________________________________ | ||||
| Contact person: ____________________ | Contact person: ____________________ | |||
| email: ____________________ | email: ____________________ | |||
| 6.2 Entry Registrations | 6.2. Entry Registrations | |||
| The following templates specify the IANA registrations of annotation | The following templates specify the IANA registrations of annotation | |||
| entries specified in this document. | entries specified in this document. | |||
| 6.2.1 /comment | 6.2.1. /comment | |||
| 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: | |||
| [X] Entry [] Attribute | [X] Entry [] Attribute | |||
| Name: /comment | Name: /comment | |||
| Description: Defined in IMAP ANNOTATE extension document. | Description: Defined in IMAP ANNOTATE extension document. | |||
| Recommended Content-Type: text/plain | Content-Type: text/plain; charset=utf-8 | |||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 6.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. | ||||
| Recommended Content-Type: text/plain | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 6.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. | ||||
| Recommended Content-Type: text/plain | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 6.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. | ||||
| Recommended Content-Type: text/plain | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 6.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. | ||||
| Recommended Content-Type: text/plain | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 6.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. | ||||
| Recommended Content-Type: text/plain | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 6.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. | ||||
| Recommended Content-Type: text/plain | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 6.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. | ||||
| Recommended Content-Type: text/plain | ||||
| Contact person: Cyrus Daboo | ||||
| email: daboo@isamet.com | ||||
| 6.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. | ||||
| Recommended Content-Type: text/plain | ||||
| Contact person: Cyrus Daboo | Contact person: Cyrus Daboo | |||
| email: daboo@isamet.com | email: cyrus@daboo.name | |||
| 6.2.10 /flags/$forwarded | 6.2.2. /flags | |||
| 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: | |||
| [X] Entry [] Attribute | [X] Entry [] Attribute | |||
| Name: /flags/$forwarded | Name: /flags | |||
| Description: Defined in IMAP ANNOTATE extension document. | Description: Reserved entry hierarchy. | |||
| Recommended Content-Type: text/plain | Content-Type: - | |||
| Contact person: Cyrus Daboo | Contact person: Cyrus Daboo | |||
| email: daboo@isamet.com | email: cyrus@daboo.name | |||
| 6.2.11 /altsubject | 6.2.3. /altsubject | |||
| 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: | |||
| [X] Entry [] Attribute | [X] Entry [] Attribute | |||
| Name: /altsubject | Name: /altsubject | |||
| Description: Defined in IMAP ANNOTATE extension document. | Description: Defined in IMAP ANNOTATE extension document. | |||
| Recommended Content-Type: text/plain | Content-Type: text/plain; charset=utf-8 | |||
| Contact person: Cyrus Daboo | Contact person: Cyrus Daboo | |||
| email: daboo@isamet.com | email: cyrus@daboo.name | |||
| 6.2.12 /<section-part>/comment | 6.2.4. /<section-part>/comment | |||
| 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: | |||
| [X] Entry [] Attribute | [X] Entry [] Attribute | |||
| Name: /<section-part>/comment | Name: /<section-part>/comment | |||
| Description: Defined in IMAP ANNOTATE extension document. | Description: Defined in IMAP ANNOTATE extension document. | |||
| Recommended Content-Type: text/plain | Content-Type: text/plain; charset=utf-8 | |||
| Contact person: Cyrus Daboo | Contact person: Cyrus Daboo | |||
| email: daboo@isamet.com | email: cyrus@daboo.name | |||
| 6.2.13 /<section-part>/flags/seen | 6.2.5. /<section-part>/flags/seen | |||
| 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: | |||
| [X] Entry [] Attribute | [X] Entry [] Attribute | |||
| Name: /<section-part>/flags/seen | Name: /<section-part>/flags/seen | |||
| Description: Defined in IMAP ANNOTATE extension document. | Description: Defined in IMAP ANNOTATE extension document. | |||
| Recommended Content-Type: text/plain | Content-Type: text/plain; charset=utf-8 | |||
| Contact person: Cyrus Daboo | Contact person: Cyrus Daboo | |||
| email: daboo@isamet.com | email: cyrus@daboo.name | |||
| 6.2.14 /<section-part>/flags/answered | 6.2.6. /<section-part>/flags/answered | |||
| 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: | |||
| [X] Entry [] Attribute | [X] Entry [] Attribute | |||
| Name: /<section-part>/flags/answered | Name: /<section-part>/flags/answered | |||
| Description: Defined in IMAP ANNOTATE extension document. | Description: Defined in IMAP ANNOTATE extension document. | |||
| Recommended Content-Type: text/plain | Content-Type: text/plain; charset=utf-8 | |||
| Contact person: Cyrus Daboo | Contact person: Cyrus Daboo | |||
| email: daboo@isamet.com | email: cyrus@daboo.name | |||
| 6.2.15 /<section-part>/flags/flagged | 6.2.7. /<section-part>/flags/flagged | |||
| 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: | |||
| [X] Entry [] Attribute | [X] Entry [] Attribute | |||
| Name: /<section-part>/flags/flagged | Name: /<section-part>/flags/flagged | |||
| Description: Defined in IMAP ANNOTATE extension document. | Description: Defined in IMAP ANNOTATE extension document. | |||
| Recommended Content-Type: text/plain | Content-Type: text/plain; charset=utf-8 | |||
| Contact person: Cyrus Daboo | Contact person: Cyrus Daboo | |||
| email: daboo@isamet.com | email: cyrus@daboo.name | |||
| 6.2.16 /<section-part>/flags/forwarded | 6.2.8. /<section-part>/flags/forwarded | |||
| 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: | |||
| [X] Entry [] Attribute | [X] Entry [] Attribute | |||
| Name: /<section-part>/flags/forwarded | Name: /<section-part>/flags/forwarded | |||
| Description: Defined in IMAP ANNOTATE extension document. | Description: Defined in IMAP ANNOTATE extension document. | |||
| Recommended Content-Type: text/plain | Content-Type: text/plain; charset=utf-8 | |||
| Contact person: Cyrus Daboo | Contact person: Cyrus Daboo | |||
| email: daboo@isamet.com | email: cyrus@daboo.name | |||
| 6.3 Attribute Registrations | 6.3. Attribute Registrations | |||
| The following templates specify the IANA registrations of annotation | The following templates specify the IANA registrations of annotation | |||
| attributes specified in this document. | attributes specified in this document. | |||
| 6.3.1 value | 6.3.1. value | |||
| 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 [X] Attribute | [] Entry [X] Attribute | |||
| Name: value | Name: value | |||
| Description: Defined in IMAP ANNOTATE extension document. | Description: Defined in IMAP ANNOTATE extension document. | |||
| Contact person: Cyrus Daboo | Contact person: Cyrus Daboo | |||
| email: daboo@isamet.com | email: cyrus@daboo.name | |||
| 6.3.2 size | 6.3.2. size | |||
| 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 [X] Attribute | [] Entry [X] Attribute | |||
| Name: size | Name: size | |||
| Description: Defined in IMAP ANNOTATE extension document. | Description: Defined in IMAP ANNOTATE extension document. | |||
| Contact person: Cyrus Daboo | Contact person: Cyrus Daboo | |||
| email: daboo@isamet.com | email: cyrus@daboo.name | |||
| 6.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 | ||||
| 6.3.4 content-language | 6.3.3. content-language | |||
| 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 [X] Attribute | [] Entry [X] Attribute | |||
| Name: content-language | Name: content-language | |||
| Description: Defined in IMAP ANNOTATE extension document. | Description: Defined in IMAP ANNOTATE extension document. | |||
| Contact person: Cyrus Daboo | Contact person: Cyrus Daboo | |||
| email: daboo@isamet.com | email: cyrus@daboo.name | |||
| 6.3.5 display-name | ||||
| To: iana@iana.org | ||||
| Subject: IMAP Annotate Registration | ||||
| Please register the following IMAP Annotate item: | ||||
| [] Entry [X] Attribute | ||||
| Name: display-name | ||||
| Description: Defined in IMAP ANNOTATE extension document. | ||||
| Contact person: Cyrus Daboo | 7. Internationalization Considerations | |||
| email: daboo@isamet.com | Annotations may contain values that include text strings, and both | |||
| searching and sorting are possible with annotations. Servers MUST | ||||
| follow standard IMAP text normalization, character set conversion and | ||||
| collation rules when such operations are acarried out, as they would | ||||
| for other textual fields being searched or sorted on. | ||||
| 7. Security Considerations | 8. Security Considerations | |||
| Annotations whose values are intended to remain private MUST be | Annotations whose values are intended to remain private MUST be | |||
| stored in ".priv" values, and not ".shared" values which may be | stored in ".priv" values, and not ".shared" values which may be | |||
| accessible to other users. | accessible to other users. | |||
| Excluding the above issues the ANNOTATE extension does not raise any | Excluding the above issues the ANNOTATE extension does not raise any | |||
| security considerations that are not present in the base IMAP | security considerations that are not present in the base IMAP | |||
| protocol, and these issues are discussed in [RFC3501]. | protocol, and these issues are discussed in [RFC3501]. | |||
| 8. References | 9. References | |||
| 8.1 Normative References | 9.1. Normative References | |||
| [ABNFEXT] Melnikov, A., "Collected extensions to IMAP4 ABNF", | [I-D.ietf-imapext-2086upd] | |||
| draft-melnikov-imap-ext-abnf-01.txt, March 2005. | Melnikov, A., "IMAP4 ACL extension", | |||
| draft-ietf-imapext-2086upd-08 (work in progress), | ||||
| June 2005. | ||||
| [ACLUPD] Melnikov, A., "IMAP4 ACL extension", | [I-D.ietf-imapext-sort] | |||
| draft-ietf-imapext-2086upd-02.txt, December 2004. | Crispin, M. and K. Murchison, "INTERNET MESSAGE ACCESS | |||
| PROTOCOL - SORT AND THREAD EXTENSION", | ||||
| draft-ietf-imapext-sort-17 (work in progress), May 2004. | ||||
| [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | [I-D.melnikov-imap-ext-abnf] | |||
| Extensions (MIME) Part Two: Media Types", RFC 2046, | Daboo, C. and A. Melnikov, "Collected extensions to IMAP4 | |||
| November 1996. | ABNF", draft-melnikov-imap-ext-abnf-05 (work in progress), | |||
| October 2005. | ||||
| [RFC2086] Myers, J., "IMAP4 ACL extension", RFC 2086, January 1997. | [RFC2086] Myers, J., "IMAP4 ACL extension", RFC 2086, January 1997. | |||
| [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., Ed. 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 | [RFC3282] Alvestrand, H., "Content Language Headers", RFC 3282, | |||
| 2002. | 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) | ||||
| profile for Internet Message Access Protocol (IMAP)", RFC | ||||
| 3503, March 2003. | ||||
| [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | |||
| 10646", STD 63, RFC 3629, November 2003. | 10646", STD 63, RFC 3629, November 2003. | |||
| [SORT] Crispin, M. and K. Murchison, "Internet Message Access | 9.2. Informative References | |||
| Protocol - Sort and Thread Extension", | ||||
| draft-ietf-imapext-sort-17.txt, May 2004. | ||||
| 8.2 Informative References | ||||
| [CONDSTORE] | [I-D.ietf-imapext-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-06 (work in | |||
| November 2003. | progress), October 2005. | |||
| Appendix A. Acknowledgments | ||||
| Many thanks to Chris Newman for his detailed comments on the first | ||||
| draft of this document, and to the participants at the ACAP working | ||||
| dinner in Pittsburgh. The participants of the IMAPext working group | ||||
| made significant contributions to this work. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Cyrus Daboo | Cyrus Daboo | |||
| ISAMET, Inc. | ||||
| 5001 Baum Blvd. | ||||
| Suite 650 | ||||
| Pittsburgh, PA 15213 | ||||
| US | ||||
| EMail: daboo@isamet.com | Email: cyrus@daboo.name | |||
| 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 | |||
| Appendix A. Acknowledgments | ||||
| Many thanks to Chris Newman for his detailed comments on the first | ||||
| draft of this document, and to the participants at the ACAP working | ||||
| dinner in Pittsburgh. The participants of the IMAPext working group | ||||
| made significant contributions to this work. | ||||
| 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 Rights 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; nor does it represent that it has | might or might not be available; nor does it represent that it has | |||
| made any independent effort to identify any such rights. Information | made any independent effort to identify any such rights. Information | |||
| on the procedures with respect to rights in RFC documents can be | on the procedures with respect to rights in RFC documents can be | |||
| End of changes. 162 change blocks. | ||||
| 626 lines changed or deleted | 467 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/ | ||||