| < draft-gahrns-imap-namespace-00.txt | draft-gahrns-imap-namespace-01.txt > | |||
|---|---|---|---|---|
| Network Working Group M. Gahrns, Microsoft | Network Working Group M. Gahrns, Microsoft | |||
| J. Myers | C. Newman, Innosoft | |||
| J. De Winter, Wildbear Consulting | ||||
| Internet Draft | Internet Draft | |||
| Document: draft-gahrns-imap-namespace-00.txt April 1997 | Document: draft-gahrns-imap-namespace-01.txt June 1997 | |||
| IMAP4 Namespace | IMAP4 Namespace | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet Draft. Internet Drafts are working | This document is an Internet Draft. Internet Drafts are working | |||
| documents of the Internet Engineering Task Force (IETF), its Areas, | documents of the Internet Engineering Task Force (IETF), its Areas, | |||
| and its Working Groups. Note that other groups may also distribute | and its Working Groups. Note that other groups may also distribute | |||
| working documents as Internet Drafts. | working documents as Internet Drafts. | |||
| skipping to change at line 31 ¶ | skipping to change at line 30 ¶ | |||
| "working draft" or "work in progress". | "working draft" or "work in progress". | |||
| To learn the current status of any Internet-Draft, please check the | To learn the current status of any Internet-Draft, please check the | |||
| 1id-abstracts.txt listing contained in the Internet-Drafts Shadow | 1id-abstracts.txt listing contained in the Internet-Drafts Shadow | |||
| Directories on ds.internic.net, nic.nordu.net, ftp.isi.edu, or | Directories on ds.internic.net, nic.nordu.net, ftp.isi.edu, or | |||
| munnari.oz.au. | munnari.oz.au. | |||
| A revised version of this draft document will be submitted to the | A revised version of this draft document will be submitted to the | |||
| RFC editor as a Proposed Standard for the Internet Community. | RFC editor as a Proposed Standard for the Internet Community. | |||
| Discussion and suggestions for improvement are requested. This | Discussion and suggestions for improvement are requested. This | |||
| document will expire before October 1997. Distribution of this draft | document will expire before November 1997. Distribution of this | |||
| is unlimited. | draft is unlimited. | |||
| 1. Abstract | 1. Abstract | |||
| IMAP4[RFC-2060] does not define a default mailbox namespace and | IMAP4[RFC-2060] does not define a default server namespace. As a | |||
| hierarchy. As such, server behavior regarding namespaces can | result, two common namespace models have evolved: | |||
| differ, creating difficulties for certain client operations. | ||||
| This document defines a #personal namespace for identifying a user's | ||||
| personal mailbox scope and a CANONICAL command that allows the | ||||
| discovery of the preferred name of a mailbox within the server's | ||||
| default mailbox hierarchy. | ||||
| By using the #personal namespace, a client is able to automatically | The "Personal Mailbox" model, in which the default namespace that is | |||
| create or access a mailbox without first configuring a server | presented consists of only the user's personal mailboxes. To access | |||
| specific personal mailbox prefix. For example, many clients often | shared mailboxes, the user must use an escape mechanism to reach | |||
| create at initial start up time a "Sent Mail" or "Draft" mailbox. | another namespace. | |||
| In addition, the #personal mailbox namespace allows a client to | The "Complete Hierarchy" model, in which the default namespace that | |||
| present a view to the user that is completely restricted to the | is presented includes the user's personal mailboxes along with any | |||
| user's personal folders without displaying any shared mailboxes. | other mailboxes they have access to. | |||
| Gahrns, Myers and De Winter 1 | These two models, create difficulties for certain client operations. | |||
| By using the CANONICAL command, a client is able to determine where | This document defines a NAMESPACE command that allows a client to | |||
| a mailbox exists in the server's entire default mailbox hierarchy. | discover the prefixes of namespaces used by a server for personal | |||
| Used in conjunction with #personal namespace, a graphical client is | mailboxes, other user's mailboxes, and shared mailboxes. This | |||
| able to display a server's entire default hierarchy, starting the | allows a client to avoid much of the manual user configuration that | |||
| user at their personal space. | is now necessary when mixing and matching IMAP4 clients and servers. | |||
| Gahrns and Newman 1 | ||||
| 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. | |||
| Personal Namespace: A namespace that the server considers within the | ||||
| personal scope of the authenticated user on a particular connection. | ||||
| Typically, only the authenticated user has access to mailboxes in | ||||
| their Personal Namespace. The specially defined IMAP4 mailbox INBOX | ||||
| resides in a user's personal namespace. | ||||
| Other Users' Namespace: A namespace that consists of mailboxes from | ||||
| the Personal Namespaces of other users. To access mailboxes in the | ||||
| Other Users' Namespace, the currently authenticated user MUST be | ||||
| explicitly granted access rights. For example, it is common for a | ||||
| manager to grant to their secretary access rights to their mailbox. | ||||
| Shared Namespace: A namespace that consists of mailboxes that are | ||||
| intended to be shared amongst users and do not exist within a user's | ||||
| Personal Namespace. | ||||
| 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 | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in | |||
| this document are to be interpreted as described in [RFC-2119]. | this document are to be interpreted as described in [RFC-2119]. | |||
| 3. Introduction and Overview | 3. Introduction and Overview | |||
| A mailbox can be known by different names. For example, for the | Clients often attempt to create mailboxes for such purposes as | |||
| user authenticated as joe, the mailbox INBOX could also be known as | maintaining a record of sent messages (e.g. "Sent Mail") or | |||
| /var/spool/mail/joe. A mailbox can also exist in more than one | temporarily saving messages being composed (e.g. "Drafts"). For | |||
| namespace. For example, the mailbox #news.comp.mail.imap could also | these clients to inter-operate correctly with the variety of IMAP4 | |||
| be known as "#shared/internet newsgroups/comp/mail/imap". | servers available, the user must enter the prefix of the Personal | |||
| Namespace used by the server. Using the NAMESPACE command, a client | ||||
| is able to automatically discover this prefix without manual user | ||||
| configuration. | ||||
| The canonical name of a mailbox is the server's preferred name of | In addition, users are often required to manually enter the prefixes | |||
| the mailbox within the server's default hierarchy. | of various namespaces in order to view the mailboxes located there. | |||
| For example, they might be required to enter the prefix of #shared | ||||
| to view the shared mailboxes namespace. The NAMESPACE command allows | ||||
| a client to automatically discover the namespaces that are available | ||||
| on a server. This allows a client to present the available | ||||
| namespaces to the user in which ever manner it deems appropriate. | ||||
| For example, a client could choose to initially display only | ||||
| personal mailboxes, or it may choose to display the complete list of | ||||
| mailboxes available, and initially position the user at the root of | ||||
| their Personal Namespace. | ||||
| The canonical name of a mailbox MAY be different for different | A server MAY choose to make available to the NAMESPACE command only | |||
| logged on users. For example, for the user logged on as "joe", the | a subset of the complete set of namespaces the server supports. | |||
| canonical name of their INBOX mailbox may be "INBOX". The canonical | ||||
| name of this same mailbox could be "users.joe.INBOX" for any other | ||||
| user not logged on as "joe". | ||||
| Gahrns and Newman 2 | ||||
| 4. Requirements | 4. Requirements | |||
| IMAP4 servers that support this extension MUST list the keyword | IMAP4 servers that support this extension MUST list the keyword | |||
| CANONICAL in their CAPABILITY response. A server that implements | NAMESPACE in their CAPABILITY response. | |||
| the CANONICAL command MUST also define a #personal namespace. | ||||
| If a mailbox has multiple names, a subscription to any one of the | ||||
| mailbox names SHOULD result in a subscription to the canonical name | ||||
| of the mailbox. | ||||
| 5. #personal namespace | ||||
| #personal is the namespace that the server considers within the | 5. NAMESPACE Command | |||
| personal scope of the authenticated user on a particular connection. | ||||
| Servers defining this namespace MUST use "/" as the hierachy | ||||
| Gahrns, Myers and De Winter 2 | Arguments: none | |||
| separator within the #personal namespace. Servers MAY use use | ||||
| different hierarchy separators outside the #personal namespace. | ||||
| IMAP4 defines INBOX as a special mailbox reserved to mean 'the | Response: an untagged NAMESPACE response that contains the prefix | |||
| primary mailbox for this user on this server'. If this mailbox | to the server's default Personal Namespace, the Other | |||
| exists on the server, it MAY also appear in the #personal namespace | Users' Namespace, and the Shared Namespace that the | |||
| as #personal/INBOX. | server wishes to expose. The Personal Namespace and | |||
| Other User's Namespace prefix are each to a single | ||||
| namespace, and as such, MUST end with the hierarchy | ||||
| character used in that namespace. The Shared Namespace | ||||
| prefix MAY be to multiple namespaces. If the Shared | ||||
| Namespace prefix is to multiple namespaces, the | ||||
| hierarchy character is not included in the prefix. | ||||
| Typically, no other users will have access to the mailboxes within | Result: OK - Command completed | |||
| the #personal namespace unless the user has explicitly granted | NO - Error: Can't complete command | |||
| access rights to other users. | BAD - argument invalid | |||
| By defining a #personal namespace, servers allow clients the ability | If a particular namespace is not available, the prefix to that | |||
| to create personal scope mailboxes or limit a list response to | namespace is NIL. | |||
| personal scope mailboxes, without regard to the underlying default | ||||
| mailbox hierarchy a server has choosen. | ||||
| Example: | Example: | |||
| C: A001 CREATE "#personal/sent mail" | < A server that supports only the personal namespace. No leading | |||
| S: A001 OK CREATE completed | prefix is used on personal mailboxes. > | |||
| C: A002 LIST "" "#personal/%" | C: A001 NAMESPACE | |||
| S: * LIST () "/" "#personal/INBOX" | S: * NAMESPACE "" NIL NIL | |||
| S: * LIST () "/" "#personal/sent mail" | S: A001 OK NAMESPACE command completed | |||
| S: A002 OK LIST completed | ||||
| 6. CANONICAL Command | Example: | |||
| Argument: namespace or mailbox name | < A user logged on anonymously to a server. No personal | |||
| mailboxes are associated with the anonymous user. No prefix is | ||||
| required to access shared mailboxes. > | ||||
| Responses: LIST response for the canonical mailbox name | C: A001 NAMESPACE | |||
| S: * NAMESPACE NIL NIL "" | ||||
| S: A001 OK NAMESPACE command completed | ||||
| Result: OK - Command completed | The Personal Namespace prefix returned MUST be to a single Personal | |||
| NO - Error: Can't complete command | Namespace and MUST end with the hierarchy character used in that | |||
| BAD - argument invalid | ||||
| The CANONICAL command calculates the canonical name of the mailbox | Gahrns and Newman 3 | |||
| and generates an untagged LIST response as if a LIST command were | namespace. This allows a client to use the Personal Namespace | |||
| issued with an empty reference argument and the canonical name of | prefix to automatically create personal mailboxes. | |||
| the mailbox as the pattern. | ||||
| Gahrns, Myers and De Winter 3 | ||||
| Example: | Example: | |||
| Consider a server with a default hierarchy as follows: | < A server that supports only the Personal Namespace, with a | |||
| leading prefix of INBOX to personal mailboxes. > | ||||
| The user's personal scope starts at the INBOX mailbox. | C: A001 NAMESPACE | |||
| Personal mailboxes are created as inferiors to INBOX, with "." | S: * NAMESPACE "INBOX." NIL NIL | |||
| as the hierarchy delimiter. | S: A001 OK NAMESPACE command completed | |||
| Shared mailboxes are created at the same level as INBOX. | ||||
| INBOX | C: A002 CREATE "INBOX.Sent Mail" | |||
| INBOX.<Any Personal mailboxes> | S: A002 OK CREATE command completed | |||
| <Any Shared mailboxes> | ||||
| C: A001 CANONICAL #personal | The Other Users' Namespace prefix MUST be to a single Other Users' | |||
| S: * LIST () "." "INBOX" | Namespace and MUST end with the hierarchy character used in that | |||
| S: A001 OK Completed | namespace. The next level of hierarchy following the Other Users' | |||
| Namespace prefix SHOULD consist of <username>, where <username> is a | ||||
| user name as per the IMAP4 LOGIN or AUTHENTICATE command. | ||||
| C: A002 CANONICAL #personal/foo | A client can construct a LIST command by appending a "%" to the | |||
| S: * LIST () "." "INBOX.foo" | Other Users' Namespace prefix to discover the Personal Namespaces of | |||
| S: A002 OK Completed | other users that are available to the currently authenticate user. | |||
| C: A003 CANONICAL foo | In response to such a LIST command, a server SHOULD NOT return user | |||
| S: * LIST () "." "foo" | names that have not granted access to their personal mailboxes to | |||
| S: A003 OK Completed | the user in question. | |||
| Example: | A server MAY return a LIST response containing only the names of | |||
| users that have explicitly granted access to the user in question. | ||||
| Alternatively, a server MAY return NO to such a LIST command, | ||||
| requiring that a user name be included with the Other Users' | ||||
| Namespace prefix before listing any other user's mailboxes. | ||||
| Consider a server with a default hierarchy that starts right at | Example: | |||
| the user's #personal namespace. In this example, #personal does | ||||
| not translate to a selectable mailbox. | ||||
| C: A001 CANONICAL #personal | < A server that supports providing a list of other user's | |||
| S: * LIST (\Noselect) "/" "" | mailboxes that are accessible to the currently logged on user. > | |||
| S: A001 OK Completed | ||||
| C: A002 CANONICAL "#personal/foo" | C: A001 NAMESPACE | |||
| S: * LIST (\Noinferiors) "/" "foo" | S: * NAMESPACE "" "Other Users/" NIL | |||
| S: A002 OK | S: A001 OK NAMESPACE command completed | |||
| C: A003 CANONICAL "#personal/inbox" | C: A002 LIST "" "Other Users/%" | |||
| S: * LIST () "/" "inbox" | S: * LIST () "/" "Other Users/Mike" | |||
| S: A003 OK | S: * LIST () "/" "Other Users/Karen" | |||
| S: A002 OK LIST command completed | ||||
| Gahrns and Newman 4 | ||||
| Example: | Example: | |||
| Consider a mailbox that is known by two different names. | < A server that does not support providing a list of other user's | |||
| CANONICAL returns the same canonical name for each. | mailboxes that are accessible to the currently logged on user. | |||
| The mailboxes are listable if the client includes the name of the | ||||
| other user with the Other Users' Namespace prefix. > | ||||
| C: A001 CANONICAL #news.alt.comp.mail.imap | C: A001 NAMESPACE | |||
| S: * LIST () "/" "public/internet news/alt/comp/mail/imap" | S: * NAMESPACE "" "#Users/" NIL | |||
| S: A001 OK CANONICAL completed | S: A001 OK NAMESPACE command completed | |||
| Gahrns, Myers and De Winter 4 | < In this example, the currently logged on user has access to the | |||
| C: A002 CANONICAL "public folders/internet news/alt/comp/imap" | Personal Namespace of user Mike, but the server chose to suppress | |||
| S: * LIST () "/" "public folders/internet news/alt/comp/imap" | this information in the LIST response. However, by appending the | |||
| S: A002 OK CANONICAL completed | user name Mike (received through user input) to the Other Users' | |||
| Namespace prefix, the client is able to get a listing of the | ||||
| personal mailboxes of user Mike. > | ||||
| C: A002 LIST "" "#Users/%" | ||||
| S: A002 NO The requested item could not be found. | ||||
| C: A003 LIST "" "#Users/Mike/%" | ||||
| S: * LIST () "/" "#Users/Mike/INBOX" | ||||
| S: * LIST () "/" "#Users/Mike/Foo" | ||||
| S: A003 OK LIST command completed. | ||||
| The shared mailboxes prefix MAY be to multiple Shared Namespaces. A | ||||
| client can construct a LIST command by appending a "%" to the Shared | ||||
| Namespace prefix to discover available Shared Namespaces. | ||||
| Example: | Example: | |||
| Using the CANONICAL command, a graphical client can discover | < A server that contains a single Shared Namespace. > | |||
| where in the exposed default hierarchy it should present the | ||||
| user's personal mailboxes. Using the LIST command, the graphical | ||||
| client can complete the display of a "tree" control that shows | ||||
| the initial set of mailboxes a client has access to. | ||||
| C: A001 CANONICAL #personal | C: A001 NAMESPACE | |||
| S: * list () "/" "All/Users/Joe" | S: * NAMESPACE "" NIL "Public Folders/" | |||
| S: A001 OK CANONICAL completed | S: A001 OK NAMESPACE command completed | |||
| To complete the tree view, the client issues a LIST % command on | C: A002 LIST "" "Public Folders/%" | |||
| each hierarchy above the personal scope so that it can gather the | S: * LIST () "/" "Public Folders/Foo" | |||
| information needed to complete the display of the "tree" control. | S: * LIST () "/" "Public Folders/Bar" | |||
| S: A002 OK LIST command completed. | ||||
| C: A002 LIST "" "All/Users/%" | Example: | |||
| S: * LIST () "" "All/Users/Joe" | ||||
| S: * LIST () "" "All/Users/Fred" | ||||
| S: A002 OK LIST completed | ||||
| C: A003 LIST "" "All/%" | < A server that contains multiple Shared Namespaces. Note that | |||
| S: * LIST (\Noselect) "" "Users" | the hierarchy delimiter used within each namespace can be | |||
| S: * LIST (\Noselect) "" "Shared" | different. > | |||
| S: A003 OK LIST completed. | ||||
| The client now has gathered enough information so that it could | C: A001 NAMESPACE | |||
| display to the user a "tree" control such as: | S: * NAMESPACE "~/mail/" NIL "#" | |||
| S: A001 OK NAMESPACE command completed | ||||
| All | Gahrns and Newman 5 | |||
| Users | C: A002 LIST "" "#%" | |||
| +Joe | S: * LIST () "." "#News" | |||
| +Fred | S: * LIST () "/" "#Shared" | |||
| +Shared | S: A002 OK LIST command completed. | |||
| Where lower level of hierarchy is denoted by indentation, and "+" | Historical convention has been to start all namespaces with the "#" | |||
| indicates a hierarchy level that has not yet been expanded by the | character. Namespaces that include the "#" character are not IMAP | |||
| user. | URL [IMAP-URL] friendly requiring the "#" character to be | |||
| represented as %23 when within URLs. As such, server implementers | ||||
| MAY instead consider using namespace prefixes that do not contain | ||||
| the "#" character. | ||||
| 7. Formal Syntax | 6. Formal Syntax | |||
| The following syntax specification uses the augmented Backus-Naur | The following syntax specification uses the augmented Backus-Naur | |||
| Form (BNF) as described in [ABNF]. | Form (BNF) as described in [ABNF]. | |||
| Canonical = "CANONICAL" SPACE mailbox | Namespace_Command = "NAMESPACE" | |||
| Namespace_Response = "*" SPACE "NAMESPACE" SPACE Prefix SPACE Prefix | ||||
| SPACE Prefix | ||||
| ; The first prefix is a prefix to the Personal Namespace | ||||
| ; The second prefix is a prefix to the Other Users' Namespace | ||||
| ; The third prefix is a prefix to the Shared Namespace | ||||
| mailbox = <mailbox> | mailbox = <mailbox> | |||
| ; <mailbox as defined in [RFC-2060] | ; <mailbox as defined in [RFC-2060] | |||
| Gahrns, Myers and De Winter 5 | Prefix = NIL | mailbox | |||
| 8. Security Considerations | ||||
| This extension does not impose any security considerations over and | 7. Security Considerations | |||
| above those discussed in [RFC-2060]. | ||||
| 9. References | In response to a LIST command containing an argument of the Other | |||
| Users' Namespace prefix, a server SHOULD NOT list users that have | ||||
| not granted access to their personal mailboxes to the currently | ||||
| authenticated user. Providing such a list, could compromise | ||||
| security by potentially disclosing confidential information of who | ||||
| is located on the server, or providing a starting point of a list of | ||||
| user accounts to attack. | ||||
| 8. References | ||||
| [RFC-2060], Crispin, M., "Internet Message Access Protocol – Version | [RFC-2060], Crispin, M., "Internet Message Access Protocol – Version | |||
| 4rev1", RFC 2060, University of Washington, December 1996. | 4rev1", RFC 2060, University of Washington, December 1996. | |||
| [RFC-2119], Bradner, S, "Key words for use in RFCs to Indicate | [RFC-2119], Bradner, S, "Key words for use in RFCs to Indicate | |||
| Requirement Levels", RFC 2119, Harvard University, March 1997 | Requirement Levels", RFC 2119, Harvard University, March 1997 | |||
| Gahrns and Newman 6 | ||||
| [ABNF], DRUMS working group, Dave Crocker Editor, "Augmented BNF for | [ABNF], DRUMS working group, Dave Crocker Editor, "Augmented BNF for | |||
| Syntax Specifications: ABNF", draft-drums-abnf-02.txt (work in | Syntax Specifications: ABNF", draft-drums-abnf-02.txt (work in | |||
| progress), Internet Mail Consortium, April 1997 | progress), Internet Mail Consortium, April 1997 | |||
| 10. Acknowledgments | [IMAP-URL], Newman, C., "IMAP URL Scheme", draft-newman-url-imap- | |||
| 09.txt (work in progress), Innosoft, May 1997 | ||||
| Randy Gellens, Steve Hole, Andrew McCown, Larry Osterman, and Sam | 9. Acknowledgments | |||
| Weiler contributed to this document. | ||||
| Many people have participated in the discussion of IMAP namespaces | ||||
| on the IMAP mailing list. In particular, the authors would like to | ||||
| thank Mark Crispin for many of the concepts relating to the Personal | ||||
| Namespace and accessing the Personal Namespace of other users, Steve | ||||
| Hole for summarizing the two namespace models, John Myers and Jack | ||||
| De Winter for their work in a preceding effort trying to define a | ||||
| standardized personal namespace, and Larry Osterman for his review | ||||
| and collaboration on this document. | ||||
| 11. Author's Addresses | 11. Author's Addresses | |||
| Mike Gahrns | Mike Gahrns | |||
| Microsoft | Microsoft | |||
| One Microsoft Way | One Microsoft Way | |||
| Redmond, WA, 98072 | Redmond, WA, 98072, USA | |||
| Phone: (206) 936-9833 | Phone: (206) 936-9833 | |||
| Email: mikega@microsoft.com | Email: mikega@microsoft.com | |||
| John G. Myers | Chris Newman | |||
| 220 Palo Alto Ave., Apt 102 | Innosoft International, Inc. | |||
| Palo Alto, CA 94301 | 1050 East Garvey Ave. South | |||
| Email: jgm@cmu.edu | West Covina, CA, 91790, USA | |||
| Email: chris.newman@innosoft.com | ||||
| Jack De Winter | ||||
| Wildbear Consulting, Inc | ||||
| 96 Rankin Street | ||||
| Waterloo, Ontario, Canada | ||||
| N2V 2B6 | ||||
| Email: jack@wildbear.on.ca | ||||
| Gahrns, Myers and De Winter 6 | Gahrns and Newman 7 | |||
| End of changes. 62 change blocks. | ||||
| 171 lines changed or deleted | 218 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/ | ||||