| < draft-ietf-imapext-annotate-01.txt | draft-ietf-imapext-annotate-02.txt > | |||
|---|---|---|---|---|
| IMAP Extensions Working Group R. Gellens | IMAP Extensions Working Group R. Gellens | |||
| Internet Draft: IMAP ANNOTATE Extension C. Daboo | Internet Draft: IMAP ANNOTATE Extension C. Daboo | |||
| Document: draft-ietf-imapext-annotate-01.txt February 2001 | Document: draft-ietf-imapext-annotate-02.txt November 2001 | |||
| IMAP ANNOTATE Extension | IMAP ANNOTATE Extension | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet-Draft and is in full conformance with | This document is an Internet-Draft and is in full conformance with | |||
| all provisions of Section 10 of RFC2026. Internet-Drafts are | all provisions of Section 10 of RFC2026. Internet-Drafts are | |||
| working documents of the Internet Engineering Task Force (IETF), its | working documents of the Internet Engineering Task Force (IETF), its | |||
| areas, and its working groups. Note that other groups may also | areas, and its working groups. Note that other groups may also | |||
| distribute working documents as Internet-Drafts. | distribute working documents as Internet-Drafts. | |||
| skipping to change at page 19, line ? ¶ | skipping to change at page 19, line ? ¶ | |||
| 5 Introduction and Overview . . . . . . . . . . . . . . . . . . 4 | 5 Introduction and Overview . . . . . . . . . . . . . . . . . . 4 | |||
| 6 Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 6 Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 6.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . 4 | 6.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 6.2 Namespace of Entries and Attributes . . . . . . . . . . 5 | 6.2 Namespace of Entries and Attributes . . . . . . . . . . 5 | |||
| 6.2.1 Entry Names . . . . . . . . . . . . . . . . . . . . . 5 | 6.2.1 Entry Names . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 6.2.2 Attribute Names . . . . . . . . . . . . . . . . . . 7 | 6.2.2 Attribute Names . . . . . . . . . . . . . . . . . . 7 | |||
| 7 Private versus Shared . . . . . . . . . . . . . . . . . . . . 8 | 7 Private versus Shared . . . . . . . . . . . . . . . . . . . . 8 | |||
| 8 IMAP Protocol Changes . . . . . . . . . . . . . . . . . . . 9 | 8 IMAP Protocol Changes . . . . . . . . . . . . . . . . . . . 9 | |||
| 8.1 ANNOTATION Message Data Item in FETCH Command . . . . . . 9 | 8.1 ANNOTATION Message Data Item in FETCH Command . . . . . . 9 | |||
| 8.2 ANNOTATION Message Data Item in FETCH Response . . . . . 10 | 8.2 ANNOTATION Message Data Item in FETCH Response . . . . . 10 | |||
| 8.3 ANNOTATION Message Data Item in STORE . . . . . . . . . . 12 | 8.3 ANNOTATION Message Data Item in STORE . . . . . . . . . . 11 | |||
| 8.4 ANNOTATION Message Data Item in APPEND . . . . . . . . . 13 | 8.4 ANNOTATION Message Data Item in APPEND . . . . . . . . . 13 | |||
| 8.5 ANNOTATION Criterion in SEARCH . . . . . . . . . . . . . 13 | 8.5 ANNOTATION Criterion in SEARCH . . . . . . . . . . . . . 13 | |||
| 8.6 ANNOTATION Key in SORT . . . . . . . . . . . . . . . . . 14 | 8.6 ANNOTATION Key in SORT . . . . . . . . . . . . . . . . . 14 | |||
| 8.7 ACL Rights . . . . . . . . . . . . . . . . . . . . . . . 15 | 8.7 ACL Rights . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 9 Interaction with MODTIME . . . . . . . . . . . . . . . . . . 15 | 9 Interaction with MODTIME . . . . . . . . . . . . . . . . . . 15 | |||
| 10 Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 15 | 10 Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 11 IANA Considerations . . . . . . . . . . . . . . . . . . . . 17 | 11 IANA Considerations . . . . . . . . . . . . . . . . . . . . 16 | |||
| 11.1 Entry and Attribute Registration Template . . . . . . . . 17 | 11.1 Entry and Attribute Registration Template . . . . . . . . 16 | |||
| 12 Security Considerations . . . . . . . . . . . . . . . . . . 17 | 12 Security Considerations . . . . . . . . . . . . . . . . . . 17 | |||
| 13 References . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 13 References . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 14 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 18 | 14 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 15 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 18 | 15 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 16 Full Copyright Statement . . . . . . . . . . . . . . . . . . 18 | 16 Full Copyright Statement . . . . . . . . . . . . . . . . . . 18 | |||
| 1 Abstract | 1 Abstract | |||
| The ANNOTATE extension to the Internet Message Access Protocol | The ANNOTATE extension to the Internet Message Access Protocol | |||
| [IMAP4] permits clients and servers to maintain "metadata" for | [IMAP4] permits clients and servers to maintain "metadata" for | |||
| skipping to change at page 19, line ? ¶ | skipping to change at page 19, line ? ¶ | |||
| server respectively. Line breaks not preceded by a "C:" or "S:" are | server respectively. Line breaks not preceded by a "C:" or "S:" are | |||
| for editorial clarity only. | for editorial clarity only. | |||
| 4 Document Meta-Data | 4 Document Meta-Data | |||
| 4.1 Open Issues | 4.1 Open Issues | |||
| At points in this document open issues are discussed, marked by the | At points in this document open issues are discussed, marked by the | |||
| text "<<<OPEN-ISSUE>>>". These are items which have not been | text "<<<OPEN-ISSUE>>>". These are items which have not been | |||
| finalized. Discussion and comment is requested. Please use the | finalized. Discussion and comment is requested. Please use the | |||
| IETF IMAP Extensions mailing list, as described in section | IETF IMAP Extensions mailing list, as described in section 2. | |||
| 2. | ||||
| 4.2 Change History | 4.2 Change History | |||
| Changes from -01 to -02: | Changes from -01 to -02: | |||
| 1. Now require .pric or .shared on store operations. | ||||
| Changes from -00 to -01: | ||||
| 1. MODTIME moved to its own draft, which this draft now | 1. MODTIME moved to its own draft, which this draft now | |||
| depends on. Thus, Conditional Annotation STORE and | depends on. Thus, Conditional Annotation STORE and | |||
| related items deleted from this draft. | related items deleted from this draft. | |||
| 2. Private versus Shared Annotations: both are possible | 2. Private versus Shared Annotations: both are possible | |||
| (separately addressable using ".priv" and ".shared" | (separately addressable using ".priv" and ".shared" | |||
| suffixes). There is a per-mailbox setting for the | suffixes). There is a per-mailbox setting for the | |||
| default. It is an open issue how this is viewed or | default. It is an open issue how this is viewed or | |||
| changed by the client. | changed by the client. | |||
| 3. In ACLs, the "w" right is needed to updated shared state; | 3. In ACLs, the "w" right is needed to updated shared state; | |||
| the "s" right is needed to update private state. | the "s" 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 -00 to -01: | Changes from pre-imapext to -00: | |||
| 1. Clarified text describing attributions, entries, and | 1. Clarified text describing attributions, entries, and | |||
| attributes. | 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. | |||
| skipping to change at page 19, line ? ¶ | skipping to change at page 19, line ? ¶ | |||
| 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 | If shared and private annotations are to coexist, we need a clear | |||
| way to differentiate them. Also, it should be as easy as possible | way to differentiate them. Also, it should be as easy as possible | |||
| for a client to access both and not overlook either. There is also | for a client to access both and not overlook either. There is also | |||
| a danger in allowing a client to store an annotation without knowing | a danger in allowing a client to store an annotation without knowing | |||
| if it is shared or private. | if it is shared or private. | |||
| This document proposes two standard suffixes for all attributes: | This document proposes two standard suffixes for all attributes: | |||
| ".shared" and ".priv". A search, fetch, or sort which specifies | ".shared" and ".priv". A search, fetch, or sort which specifies | |||
| neither uses both. A store without using either stores into the | neither uses both. Store operations MUST explicitly use .priv or | |||
| default. | .shared suffixes. | |||
| <<<OPEN-ISSUE>>> | ||||
| This is dangerous since it allows a client to store an entry without | ||||
| knowing if other users are able to view it. | ||||
| How a client learns or changes the default is an open issue. One | ||||
| suggestion is to use an additional ACL bit to indicate the current | ||||
| default state. | ||||
| It may be better to remove the default, and force clients to always | ||||
| explicitly store into one or the other. | ||||
| 8 IMAP Protocol Changes | 8 IMAP Protocol Changes | |||
| 8.1 ANNOTATION Message Data Item in FETCH Command | 8.1 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> | |||
| skipping to change at page 19, line ? ¶ | skipping to change at page 19, line ? ¶ | |||
| 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 ("/message/comment" "value")) | C: a FETCH 1 (ANNOTATION ("/message/comment" "value")) | |||
| S: * 1 FETCH (ANNOTATION ("/message/comment" | S: * 1 FETCH (ANNOTATION ("/message/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 | |||
| "/message/comment" entry is requested by the client and returned by | for the "/message/comment" entry is requested by the client | |||
| the server. Since neither ".shared" nor ".priv" was specified, both | and returned by the server. Since neither ".shared" nor | |||
| are returned. | ".priv" was specified, both are returned. | |||
| "*" and "%" wildcard characters can be used in either specifier to | "*" and "%" wildcard characters can be used in either specifier to | |||
| match one or more characters at that position, with the exception | match one or more characters at that position, with the exception | |||
| that "%" does not match the hierarchy delimiter for the specifier it | that "%" does not match the hierarchy delimiter for the specifier it | |||
| appears in (that is, "/" for an entry specifier or "." for an | appears in (that is, "/" for an entry specifier or "." for an | |||
| attribute specifier). Thus an entry specifier of "/message/%" | attribute specifier). Thus an entry specifier of "/message/%" | |||
| matches entries such as "/message/comment" and "/message/subject", | matches entries such as "/message/comment" and "/message/subject", | |||
| but not "/message/flags/redirected". | but not "/message/flags/redirected". | |||
| Examples: | Examples: | |||
| skipping to change at page 19, line ? ¶ | skipping to change at page 19, line ? ¶ | |||
| "modtime.priv" "20000704000001")) | "modtime.priv" "20000704000001")) | |||
| ("/message/subject" ("value.priv" "Rhinoceroses!" | ("/message/subject" ("value.priv" "Rhinoceroses!" | |||
| "modtime.priv" "19991231235959")) | "modtime.priv" "19991231235959")) | |||
| ("/message/vendor/eudora/label.priv" | ("/message/vendor/eudora/label.priv" | |||
| ("value.priv" "label43" | ("value.priv" "label43" | |||
| "modtime.priv" "20000705101502")) | "modtime.priv" "20000705101502")) | |||
| ("/message/vendor/eudora/personality" | ("/message/vendor/eudora/personality" | |||
| ("value.priv" "Tallulah Bankhead" | ("value.priv" "Tallulah Bankhead" | |||
| "modtime.priv" "20000705101558")))) | "modtime.priv" "20000705101558")))) | |||
| 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 | |||
| "modtime" attributes for any entries in the "/message" hierarchy are | "modtime" attributes for any entries in the "/message" hierarchy are | |||
| requested by the client and returned by the server. | requested by the client and returned by the server. | |||
| C: a FETCH 1 (ANNOTATION ("/message/%" "value.shared")) | C: a FETCH 1 (ANNOTATION ("/message/%" "value.shared")) | |||
| S: * 1 FETCH (ANNOTATION | S: * 1 FETCH (ANNOTATION | |||
| (("/message/comment" ("value.shared" "Patch Mangler")) | (("/message/comment" ("value.shared" "Patch Mangler")) | |||
| ("/message/subject" ("value.shared" "Patches? We don' | ("/message/subject" ("value.shared" "Patches? We don' | |||
| 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" attributes | In the above example, the contents of the shared "value" | |||
| for entries at the top level only of the "/message" hierarchy are | attributes for entries at the top level only of the | |||
| requested by the client and returned by the server. | "/message" hierarchy 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. | |||
| Examples: | Examples: | |||
| C: a FETCH 1 (ANNOTATION | C: a FETCH 1 (ANNOTATION | |||
| (("/message/comment" "/message/subject") "value.priv")) | (("/message/comment" "/message/subject") "value.priv")) | |||
| S: * 1 FETCH (ANNOTATION | S: * 1 FETCH (ANNOTATION | |||
| (("/message/comment" ("value.priv" "What a chowder-head")) | (("/message/comment" ("value.priv" "What a chowder-head")) | |||
| skipping to change at page 19, line ? ¶ | skipping to change at page 19, line ? ¶ | |||
| annotations by other clients. | annotations by other clients. | |||
| Servers MUST NOT include ANNOTATION data in unsolicited responses | Servers MUST NOT include ANNOTATION data in unsolicited responses | |||
| until the client has used ANNOTATION data in a FETCH command. This | until the client has used ANNOTATION data in a FETCH command. This | |||
| restriction avoids sending ANNOTATION data to a client until the | restriction avoids sending ANNOTATION data to a client until the | |||
| client has shown it is capable of handling it. | client has shown it is capable of handling it. | |||
| <<<OPEN-ISSUE>>> | <<<OPEN-ISSUE>>> | |||
| Is this prohibition really necessary? | Is this prohibition really necessary? | |||
| * OK [ANNOTATIONS FLAGS MODTIME <modtime> <set>] | * OK [ANNOTATIONS FLAGS MODTIME <modtime> <set>] | |||
| 8.3 ANNOTATION Message Data Item in STORE | 8.3 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" behavior. This means the server does not | implicit ".SILENT" behavior. 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 | |||
| assumes that the client updates its own cache if the command | assumes that the client updates its own cache if the command | |||
| succeeds. | succeeds. | |||
| skipping to change at page 19, line ? ¶ | skipping to change at page 19, line ? ¶ | |||
| [ACL-EXT] Myers, "IMAP4 ACL extension", RFC 2086, Carnegie Mellon, | [ACL-EXT] Myers, "IMAP4 ACL extension", RFC 2086, Carnegie Mellon, | |||
| January 1997. | January 1997. | |||
| [IMAP4] Crispin, "Internet Message Access Protocol - Version 4rev1", | [IMAP4] Crispin, "Internet Message Access Protocol - Version 4rev1", | |||
| RFC 2060, University of Washington, December 1996. | RFC 2060, University of Washington, December 1996. | |||
| [KEYWORDS] Bradner, "Key words for use in RFCs to Indicate | [KEYWORDS] Bradner, "Key words for use in RFCs to Indicate | |||
| Requirement Levels", RFC 2119, Harvard University, March 1997. | Requirement Levels", RFC 2119, Harvard University, March 1997. | |||
| [MODTIME-EXT] Melnikov, "IMAP Conditional Store", work in progress. | [MODTIME-EXT] Melnikov, "IMAP Conditional Store", work in progress. | |||
| <http://www.ietf.org/internet-drafts/draft-melnikov-imap-condstore-xx.txt> | <http://www.ietf.org/internet-drafts/draft-melnikov-imap-condstore-03.txt> | |||
| [SMTP-DSN] Moore, "SMTP Service Extension for Delivery Status | [SMTP-DSN] Moore, "SMTP Service Extension for Delivery Status | |||
| Notifications", RFC 1891, University of Tennessee, January 1996. | Notifications", RFC 1891, University of Tennessee, January 1996. | |||
| [SORT-EXT] Crispin, "Internet Message Access Protocol -- SORT | [SORT-EXT] Crispin, "Internet Message Access Protocol -- SORT | |||
| Extension", work in progress. | Extension", work in progress. | |||
| <http://www.ietf.org/internet-drafts/draft-ietf-imapext-sort-xx.txt> | <http://www.ietf.org/internet-drafts/draft-ietf-imapext-sort-07.txt> | |||
| 14 Acknowledgments | 14 Acknowledgments | |||
| Many thanks to Chris Newman for his detailed comments on the first | Many thanks to Chris Newman for his detailed comments on the first | |||
| draft of this document, and to the participants at the ACAP working | draft of this document, and to the participants at the ACAP working | |||
| dinner in Pittsburgh. | dinner in Pittsburgh. | |||
| 15 Authors' Addresses | 15 Authors' Addresses | |||
| Randall Gellens | Randall Gellens | |||
| QUALCOMM Incorporated | QUALCOMM Incorporated | |||
| 5775 Morehouse Dr. | 5775 Morehouse Dr. | |||
| San Diego, CA 92121-2779 | San Diego, CA 92121-2779 | |||
| U.S.A. | U.S.A. | |||
| Phone: +1 858 651 5115 | ||||
| Email: randy@qualcomm.com | Email: randy@qualcomm.com | |||
| Cyrus Daboo | Cyrus Daboo | |||
| Cyrusoft International, Inc. | Cyrusoft International, Inc. | |||
| Suite 780, 5001 Baum Blvd. | Suite 780, 5001 Baum Blvd. | |||
| Pittsburgh, PA 15213 | Pittsburgh, PA 15213 | |||
| U.S.A. | U.S.A. | |||
| Phone: +1 412 605 0499 | ||||
| Email: daboo@cyrusoft.com | Email: daboo@cyrusoft.com | |||
| 16 Full Copyright Statement | 16 Full Copyright Statement | |||
| Copyright (C) The Internet Society 2001. All Rights Reserved. | Copyright (C) The Internet Society 2001. All Rights Reserved. | |||
| This document and translations of it may be copied and furnished to | This document and translations of it may be copied and furnished to | |||
| others, and derivative works that comment on or otherwise explain it | others, and derivative works that comment on or otherwise explain it | |||
| or assist in its implementation may be prepared, copied, published | or assist in its implementation may be prepared, copied, published | |||
| and distributed, in whole or in part, without restriction of any | and distributed, in whole or in part, without restriction of any | |||
| kind, provided that the above copyright notice and this paragraph | kind, provided that the above copyright notice and this paragraph | |||
| are included on all such copies and derivative works. However, this | are included on all such copies and derivative works. However, this | |||
| document itself may not be modified in any way, such as by removing | document itself may not be modified in any way, such as by removing | |||
| the copyright notice or references to the Internet Society or other | the copyright notice or references to the Internet Society or other | |||
| End of changes. 17 change blocks. | ||||
| 35 lines changed or deleted | 23 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/ | ||||