| rfc9208.original | rfc9208.txt | |||
|---|---|---|---|---|
| Network Working Group A. Melnikov | Internet Engineering Task Force (IETF) A. Melnikov | |||
| Internet-Draft Isode | Request for Comments: 9208 Isode | |||
| Obsoletes: 2087 (if approved) 18 November 2021 | Obsoletes: 2087 March 2022 | |||
| Intended status: Standards Track | Category: Standards Track | |||
| Expires: 22 May 2022 | ISSN: 2070-1721 | |||
| IMAP QUOTA Extension | IMAP QUOTA Extension | |||
| draft-ietf-extra-quota-10 | ||||
| Abstract | Abstract | |||
| This document defines a QUOTA extension of the Internet Message | This document defines a QUOTA extension of the Internet Message | |||
| Access Protocol (RFC 3501/RFC 9051) that permits administrative | Access Protocol (IMAP) (see RFCs 3501 and 9051) that permits | |||
| limits on resource usage (quotas) to be manipulated through the IMAP | administrative limits on resource usage (quotas) to be manipulated | |||
| protocol. | through the IMAP protocol. | |||
| This document obsoletes RFC 2087, but attempts to remain backwards | This document obsoletes RFC 2087 but attempts to remain backwards | |||
| compatible whenever possible. | compatible whenever possible. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 22 May 2022. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9208. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Simplified BSD License text | to this document. Code Components extracted from this document must | |||
| as described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Simplified BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| This document may contain material from IETF Documents or IETF | This document may contain material from IETF Documents or IETF | |||
| Contributions published or made publicly available before November | Contributions published or made publicly available before November | |||
| 10, 2008. The person(s) controlling the copyright in some of this | 10, 2008. The person(s) controlling the copyright in some of this | |||
| material may not have granted the IETF Trust the right to allow | material may not have granted the IETF Trust the right to allow | |||
| modifications of such material outside the IETF Standards Process. | modifications of such material outside the IETF Standards Process. | |||
| Without obtaining an adequate license from the person(s) controlling | Without obtaining an adequate license from the person(s) controlling | |||
| the copyright in such materials, this document may not be modified | the copyright in such materials, this document may not be modified | |||
| outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
| not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
| it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
| than English. | than English. | |||
| Table of Contents | Table of Contents | |||
| 1. Document Conventions . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction and Overview | |||
| 2. Introduction and Overview . . . . . . . . . . . . . . . . . . 3 | 2. Document Conventions | |||
| 3. Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Terms | |||
| 3.1. Resource . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3.1. Resource | |||
| 3.1.1. Name . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3.1.1. Name | |||
| 3.1.2. Definition . . . . . . . . . . . . . . . . . . . . . 4 | 3.1.2. Definition | |||
| 3.2. Quota Root . . . . . . . . . . . . . . . . . . . . . . . 5 | 3.2. Quota Root | |||
| 4. Definitions . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 4. Definitions | |||
| 4.1. Commands . . . . . . . . . . . . . . . . . . . . . . . . 6 | 4.1. Commands | |||
| 4.1.1. GETQUOTA . . . . . . . . . . . . . . . . . . . . . . 6 | 4.1.1. GETQUOTA | |||
| 4.1.2. GETQUOTAROOT . . . . . . . . . . . . . . . . . . . . 7 | 4.1.2. GETQUOTAROOT | |||
| 4.1.3. SETQUOTA . . . . . . . . . . . . . . . . . . . . . . 7 | 4.1.3. SETQUOTA | |||
| 4.1.4. New STATUS attributes . . . . . . . . . . . . . . . . 9 | 4.1.4. New STATUS attributes | |||
| 4.2. Responses . . . . . . . . . . . . . . . . . . . . . . . . 10 | 4.2. Responses | |||
| 4.2.1. QUOTA . . . . . . . . . . . . . . . . . . . . . . . . 10 | 4.2.1. QUOTA | |||
| 4.2.2. QUOTAROOT . . . . . . . . . . . . . . . . . . . . . . 10 | 4.2.2. QUOTAROOT | |||
| 4.3. Response Codes . . . . . . . . . . . . . . . . . . . . . 10 | 4.3. Response Codes | |||
| 4.3.1. OVERQUOTA . . . . . . . . . . . . . . . . . . . . . . 11 | 4.3.1. OVERQUOTA | |||
| 5. Resource Type Definitions . . . . . . . . . . . . . . . . . . 12 | 5. Resource Type Definitions | |||
| 5.1. STORAGE . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 5.1. STORAGE | |||
| 5.2. MESSAGE . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 5.2. MESSAGE | |||
| 5.3. MAILBOX . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 5.3. MAILBOX | |||
| 5.4. ANNOTATION-STORAGE . . . . . . . . . . . . . . . . . . . 13 | 5.4. ANNOTATION-STORAGE | |||
| 6. Interaction with IMAP ACL extension (RFC 4314) . . . . . . . 14 | 6. Interaction with IMAP ACL Extension (RFC 4314) | |||
| 7. Formal syntax . . . . . . . . . . . . . . . . . . . . . . . . 14 | 7. Formal Syntax | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | 8. Security Considerations | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | 9. IANA Considerations | |||
| 9.1. Changes/additions to the IMAP4 capabilities registry . . 17 | 9.1. Changes/Additions to the IMAP Capabilities Registry | |||
| 9.2. IMAP quota resource type registry . . . . . . . . . . . . 17 | 9.2. IMAP Quota Resource Type Registry | |||
| 9.3. Registrations of IMAP Quota Resource Types . . . . . . . 18 | 10. Changes Since RFC 2087 | |||
| 10. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 19 | 11. References | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 19 | 11.1. Normative References | |||
| 12. Changes since RFC 2087 . . . . . . . . . . . . . . . . . . . 20 | 11.2. Informative References | |||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 20 | Acknowledgments | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 20 | Contributors | |||
| 13.2. Informative References . . . . . . . . . . . . . . . . . 21 | Author's Address | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 21 | ||||
| 1. Document Conventions | ||||
| In protocol examples, this document uses a prefix of "C: " to denote | ||||
| lines sent by the client to the server, and "S: " for lines sent by | ||||
| the server to the client. Lines prefixed with "// " are comments | ||||
| explaining the previous protocol line. These prefixes and comments | ||||
| are not part of the protocol. Lines without any of these prefixes | ||||
| are continuations of the previous line, and no line break is present | ||||
| in the protocol before such lines unless specifically mentioned. | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
| "OPTIONAL" in this document are to be interpreted as described in BCP | ||||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | ||||
| capitals, as shown here. | ||||
| Other capitalised words are IMAP keywords [RFC3501][RFC9051] or | ||||
| keywords from this document. | ||||
| 2. Introduction and Overview | 1. Introduction and Overview | |||
| This document defines a couple of extensions to the Internet Message | This document defines a couple of extensions to the Internet Message | |||
| Access Protocol [RFC3501] for querying and manipulating | Access Protocol [RFC3501] [RFC9051] for querying and manipulating | |||
| administrative limits on resource usage (quotas). This extension is | administrative limits on resource usage (quotas). This extension is | |||
| compatible with both IMAP4rev1 [RFC3501] and IMAP4rev2 [RFC9051]. | compatible with both IMAP4rev1 [RFC3501] and IMAP4rev2 [RFC9051]. | |||
| The capability "QUOTA", denotes a RFC2087 [RFC2087] compliant server. | The "QUOTA" capability denotes a server compliant with [RFC2087]. | |||
| Some responses and response codes defined in this document are not | Some responses and response codes defined in this document are not | |||
| present in such servers (see Section 12 for more details), and | present in such servers (see Section 10 for more details), and | |||
| clients MUST NOT rely on their presence in the absence of any | clients MUST NOT rely on their presence in the absence of any | |||
| capability beginning with "QUOTA=". | capability beginning with "QUOTA=". | |||
| Any server compliant with this document MUST also return at least one | Any server compliant with this document MUST also return at least one | |||
| capability starting with "QUOTA=RES-" prefix, as described in | capability starting with the "QUOTA=RES-" prefix, as described in | |||
| Section 3.1. | Section 3.1. | |||
| Any server compliant with this document that implements the SETQUOTA | Any server compliant with this document that implements the SETQUOTA | |||
| command (see Section 4.1.3) MUST also return the "QUOTASET" | command (see Section 4.1.3) MUST also return the "QUOTASET" | |||
| capability. | capability. | |||
| This document also reserves all other capabilities starting with | This document also reserves all other capabilities starting with the | |||
| "QUOTA=" prefix for future IETF stream standard track, informational | "QUOTA=" prefix for future IETF Stream Standard Track, Informational, | |||
| or experimental extensions to this document. | or Experimental extensions to this document. | |||
| Quotas can be used to restrict clients for administrative reasons, | Quotas can be used to restrict clients for administrative reasons, | |||
| but the QUOTA extension can also be used to indicate system limits | but the QUOTA extension can also be used to indicate system limits | |||
| and current usage levels to clients. | and current usage levels to clients. | |||
| Although RFC2087 [RFC2087] specified an IMAP4 QUOTA extension, and | Although the IMAP4 QUOTA extension specified in [RFC2087] has seen | |||
| this has seen deployment in servers, it has seen little deployment in | deployment in servers, it has seen little deployment in clients. | |||
| clients. Since the meaning of the resources was left implementation- | Since the meaning of the resources was implementation dependent, it | |||
| dependent, it was impossible for a client implementation to determine | was impossible for a client implementation to determine which | |||
| which resources were supported, and impossible to determine which | resources were supported, and it was impossible to determine which | |||
| mailboxes were in a given quota root (see Section 3.2), without a | mailboxes were in a given quota root (see Section 3.2) without a | |||
| priori knowledge of the implementation. | priori knowledge of the implementation. | |||
| 2. Document Conventions | ||||
| In protocol examples, this document uses a prefix of "C: " to denote | ||||
| lines sent by the client to the server and "S: " for lines sent by | ||||
| the server to the client. Lines prefixed with "//" are comments | ||||
| explaining the previous protocol line. These prefixes and comments | ||||
| are not part of the protocol. Lines without any of these prefixes | ||||
| are continuations of the previous line, and no line break is present | ||||
| in the protocol before such lines unless specifically mentioned. | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
| "OPTIONAL" in this document are to be interpreted as described in | ||||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | ||||
| capitals, as shown here. | ||||
| Other capitalized words are IMAP keywords [RFC3501] [RFC9051] or | ||||
| keywords from this document. | ||||
| 3. Terms | 3. Terms | |||
| 3.1. Resource | 3.1. Resource | |||
| A resource has a name, a formal definition. | A resource has a name, a formal definition. | |||
| 3.1.1. Name | 3.1.1. Name | |||
| The resource name is an atom, as defined in IMAP4rev1 [RFC3501]. | The resource name is an atom, as defined in IMAP4rev1 [RFC3501]. | |||
| These MUST be registered with IANA. | These MUST be registered with IANA. | |||
| Supported resource names MUST be advertised as a capability, by | Supported resource names MUST be advertised as a capability by | |||
| prepending the resource name with "QUOTA=RES-". A server compliant | prepending the resource name with "QUOTA=RES-". A server compliant | |||
| with this specification is not required to support all reported | with this specification is not required to support all reported | |||
| resource types on all quota roots. | resource types on all quota roots. | |||
| 3.1.2. Definition | 3.1.2. Definition | |||
| The resource definition or document containing it, while not visible | The resource definition or document containing it, while not visible | |||
| through the protocol, SHOULD be registered with IANA. | through the protocol, SHOULD be registered with IANA. | |||
| The usage of a resource MUST be represented as a 63 bit unsigned | The usage of a resource MUST be represented as a 63-bit unsigned | |||
| integer. 0 indicates that the resource is exhausted. Usage integers | integer. 0 indicates that the resource is exhausted. Usage integers | |||
| don't necessarily represent proportional use, so clients MUST NOT | don't necessarily represent proportional use, so clients MUST NOT | |||
| compare available resource between two separate quota roots on the | compare an available resource between two separate quota roots on the | |||
| same or different servers. | same or different servers. | |||
| Limits will be specified as, and MUST be represented as, an integer. | Limits will be specified as, and MUST be represented as, an integer. | |||
| 0 indicates that any usage is prohibited. | 0 indicates that any usage is prohibited. | |||
| Limits may be hard or soft - that is, an implementation MAY choose, | Limits may be hard or soft; that is, an implementation MAY choose, or | |||
| or be configured, to disallow any command if the limit on a resource | be configured, to disallow any command if the limit on a resource is | |||
| is or would be exceeded. | or would be exceeded. | |||
| All resources which the server handles MUST be advertised in a | All resources that the server handles MUST be advertised in a | |||
| CAPABILITY response/response code consisting of the resource name | CAPABILITY response/response code consisting of the resource name | |||
| prefixed by "QUOTA=RES-". | prefixed by "QUOTA=RES-". | |||
| The resources STORAGE (Section 5.1), MESSAGE (Section 5.2), MAILBOX | The resources STORAGE (Section 5.1), MESSAGE (Section 5.2), MAILBOX | |||
| (Section 5.3) and ANNOTATION-STORAGE (Section 5.4) are defined in | (Section 5.3), and ANNOTATION-STORAGE (Section 5.4) are defined in | |||
| this document. | this document. | |||
| 3.2. Quota Root | 3.2. Quota Root | |||
| This document introduces a concept of a "quota root", as resource | This document introduces the concept of a "quota root", as resource | |||
| limits can apply across multiple IMAP mailboxes. | limits can apply across multiple IMAP mailboxes. | |||
| Each mailbox has zero or more implementation-defined named "quota | Each mailbox has zero or more implementation-defined named "quota | |||
| roots". Each quota root has zero or more resource limits (quotas). | roots". Each quota root has zero or more resource limits (quotas). | |||
| All mailboxes that share the same named quota root share the resource | All mailboxes that share the same named quota root share the resource | |||
| limits of the quota root. | limits of the quota root. | |||
| Quota root names need not be mailbox names, nor is there any | Quota root names need not be mailbox names, nor is there any | |||
| relationship defined by this document between a quota root name and a | relationship defined by this document between a quota root name and a | |||
| mailbox name. A quota root name is an astring, as defined in IMAP4 | mailbox name. A quota root name is an astring, as defined in IMAP4 | |||
| [RFC3501]. It SHOULD be treated as an opaque string by any clients. | [RFC3501] [RFC9051]. It SHOULD be treated as an opaque string by any | |||
| clients. | ||||
| Quota roots are used since not all implementations may be able to | Quota roots are used since not all implementations may be able to | |||
| calculate usage, or apply quotas, on arbitrary mailboxes or mailbox | calculate usage, or apply quotas, on arbitrary mailboxes or mailbox | |||
| hierarchies. | hierarchies. | |||
| Not all resources may be limitable or calculable for all quota roots. | Not all resources may be limitable or calculable for all quota roots. | |||
| Further, not all resources may support all limits - some limits may | Furthermore, not all resources may support all limits; some limits | |||
| be present in the underlying system. A server implementation of this | may be present in the underlying system. A server implementation of | |||
| memo SHOULD advise the client of such inherent limits, by generating | this memo SHOULD advise the client of such inherent limits, by | |||
| QUOTA (Section 4.2.1) responses, and SHOULD advise the client of | generating QUOTA (Section 4.2.1) responses, and SHOULD advise the | |||
| which resources are limitable for a particular quota root. A | client of which resources are limitable for a particular quota root. | |||
| SETQUOTA (Section 4.1.3) command MAY also round a quota limit in an | A SETQUOTA (Section 4.1.3) command MAY also round a quota limit in an | |||
| implementation-dependent way, if the granularity of the underlying | implementation-dependent way, if the granularity of the underlying | |||
| system demands it. A client MUST be prepared for a SETQUOTA | system demands it. A client MUST be prepared for a SETQUOTA | |||
| (Section 4.1.3) command to fail if a limit cannot be set. | (Section 4.1.3) command to fail if a limit cannot be set. | |||
| Implementation Notes: This means that, for example under UNIX, a | Implementation Notes: This means that, for example, under UNIX, a | |||
| quota root may have a MESSAGE (Section 5.2) quota always set due to | quota root may have a MESSAGE (Section 5.2) quota always set due to | |||
| the number of inodes available on the filesystem, and similarly | the number of inodes available on the filesystem; similarly, STORAGE | |||
| STORAGE (Section 5.1) may be rounded to the nearest block and limited | (Section 5.1) may be rounded to the nearest block and limited by free | |||
| by free filesystem space. | filesystem space. | |||
| 4. Definitions | 4. Definitions | |||
| 4.1. Commands | 4.1. Commands | |||
| The following commands exist for manipulation and querying quotas. | The following commands exist for manipulation and querying quotas. | |||
| 4.1.1. GETQUOTA | 4.1.1. GETQUOTA | |||
| Arguments: quota root | Arguments: quota root | |||
| Responses: REQUIRED untagged responses: QUOTA | Responses: REQUIRED untagged responses: QUOTA | |||
| Result: OK - getquota completed | Result: OK - getquota completed | |||
| NO - getquota error: no such quota root, permission denied | NO - getquota error: no such quota root, permission | |||
| denied | ||||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The GETQUOTA command takes the name of a quota root and returns the | The GETQUOTA command takes the name of a quota root and returns the | |||
| quota root's resource usage and limits in an untagged QUOTA response. | quota root's resource usage and limits in an untagged QUOTA response. | |||
| (Names of quota roots applicable to a particular mailbox can be | (Names of quota roots applicable to a particular mailbox can be | |||
| discovered by issuing the GETQUOTAROOT command, see Section 4.1.2.) | discovered by issuing the GETQUOTAROOT command; see Section 4.1.2.) | |||
| Note that the server is not required to support any specific resource | Note that the server is not required to support any specific resource | |||
| type (as advertised in the CAPABILITY response, i.e. all capability | type (as advertised in the CAPABILITY response, i.e., all capability | |||
| items with the "QUOTA=RES-" prefix) for any particular quota root. | items with the "QUOTA=RES-" prefix) for any particular quota root. | |||
| Example: | Example: | |||
| S: * CAPABILITY [...] QUOTA QUOTA=RES-STORAGE [...] | S: * CAPABILITY [...] QUOTA QUOTA=RES-STORAGE [...] | |||
| [...] | [...] | |||
| C: G0001 GETQUOTA "!partition/sda4" | C: G0001 GETQUOTA "!partition/sda4" | |||
| S: * QUOTA "!partition/sda4" (STORAGE 104 10923847) | S: * QUOTA "!partition/sda4" (STORAGE 104 10923847) | |||
| S: G0001 OK Getquota complete | S: G0001 OK Getquota complete | |||
| 4.1.2. GETQUOTAROOT | 4.1.2. GETQUOTAROOT | |||
| Arguments: mailbox name | Arguments: mailbox name | |||
| Responses: REQUIRED untagged responses: QUOTAROOT, QUOTA | Responses: REQUIRED untagged responses: QUOTAROOT, QUOTA | |||
| Result: OK - getquotaroot completed | Result: OK - getquotaroot completed | |||
| NO - getquotaroot error: permission denied | NO - getquotaroot error: permission denied | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The GETQUOTAROOT command takes a mailbox name and returns the list of | The GETQUOTAROOT command takes a mailbox name and returns the list of | |||
| quota roots for the mailbox in an untagged QUOTAROOT response. For | quota roots for the mailbox in an untagged QUOTAROOT response. For | |||
| each listed quota root, it also returns the quota root's resource | each listed quota root, it also returns the quota root's resource | |||
| usage and limits in an untagged QUOTA response. | usage and limits in an untagged QUOTA response. | |||
| Note that the mailbox name parameter doesn't have to reference an | Note that the mailbox name parameter doesn't have to reference an | |||
| existing mailbox. This can be handy in order to determine which | existing mailbox. This can be handy in order to determine which | |||
| quotaroot would apply to a mailbox when it gets created. | quota root would apply to a mailbox when it gets created. | |||
| Example: | Example: | |||
| S: * CAPABILITY [...] QUOTA QUOTA=RES-STORAGE QUOTA=RES-MESSAGE | S: * CAPABILITY [...] QUOTA QUOTA=RES-STORAGE QUOTA=RES-MESSAGE | |||
| [...] | [...] | |||
| [...] | [...] | |||
| C: G0002 GETQUOTAROOT INBOX | C: G0002 GETQUOTAROOT INBOX | |||
| S: * QUOTAROOT INBOX "#user/alice" "!partition/sda4" | S: * QUOTAROOT INBOX "#user/alice" "!partition/sda4" | |||
| S: * QUOTA "#user/alice" (MESSAGE 42 1000) | S: * QUOTA "#user/alice" (MESSAGE 42 1000) | |||
| S: * QUOTA "!partition/sda4" (STORAGE 104 10923847) | S: * QUOTA "!partition/sda4" (STORAGE 104 10923847) | |||
| S: G0002 OK Getquotaroot complete | S: G0002 OK Getquotaroot complete | |||
| 4.1.3. SETQUOTA | 4.1.3. SETQUOTA | |||
| Arguments: quota root | Arguments: quota root list of resource limits | |||
| list of resource limits | Responses: untagged responses: QUOTA | |||
| Responses: untagged responses: QUOTA | Result: OK - setquota completed | |||
| Result: OK - setquota completed | NO - setquota error: can't set that data | |||
| NO - setquota error: can't set that data | ||||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| Note that unlike other command/responses/response codes defined in | Note that unlike other command/responses/response codes defined in | |||
| this document, support for SETQUOTA command requires the server to | this document, support for the SETQUOTA command requires the server | |||
| advertise "QUOTASET" capability. | to advertise the "QUOTASET" capability. | |||
| The SETQUOTA command takes the name of a mailbox quota root and a | The SETQUOTA command takes the name of a mailbox quota root and a | |||
| list of resource limits. The resource limits for the named quota | list of resource limits. The resource limits for the named quota | |||
| root are changed to be the specified limits. Any previous resource | root are changed to the specified limits. Any previous resource | |||
| limits for the named quota root are discarded, even resource limits | limits for the named quota root are discarded, even resource limits | |||
| not explicitly listed in the SETQUOTA command. (For example, if the | not explicitly listed in the SETQUOTA command. (For example, if the | |||
| quota root had both STORAGE and MESSAGE limits assigned to the quota | quota root had both STORAGE and MESSAGE limits assigned to the quota | |||
| root before the SETQUOTA is called and the SETQUOTA only includes the | root before the SETQUOTA is called and the SETQUOTA only includes the | |||
| STORAGE limit, then the MESSAGE limit is removed from the quota | STORAGE limit, then the MESSAGE limit is removed from the quota | |||
| root.) | root.) | |||
| If the named quota root did not previously exist, an implementation | If the named quota root did not previously exist, an implementation | |||
| may optionally create it and change the quota roots for any number of | may optionally create it and change the quota roots for any number of | |||
| existing mailboxes in an implementation-defined manner. | existing mailboxes in an implementation-defined manner. | |||
| If the implementation chooses to change the quota roots for some | If the implementation chooses to change the quota roots for some | |||
| existing mailboxes such changes SHOULD be announced with untagged | existing mailboxes, such changes SHOULD be announced with untagged | |||
| QUOTA responses. | QUOTA responses. | |||
| Example: | Example: | |||
| S: * CAPABILITY [...] QUOTA QUOTASET QUOTA=RES-STORAGE QUOTA=RES- | S: * CAPABILITY [...] QUOTA QUOTASET QUOTA=RES-STORAGE QUOTA=RES- | |||
| MESSAGE [...] | MESSAGE [...] | |||
| [...] | [...] | |||
| C: S0000 GETQUOTA "#user/alice" | C: S0000 GETQUOTA "#user/alice" | |||
| S: * QUOTA "#user/alice" (STORAGE 54 111 MESSAGE 42 1000) | S: * QUOTA "#user/alice" (STORAGE 54 111 MESSAGE 42 1000) | |||
| S: S0000 OK Getquota completed | S: S0000 OK Getquota completed | |||
| C: S0001 SETQUOTA "#user/alice" (STORAGE 510) | C: S0001 SETQUOTA "#user/alice" (STORAGE 510) | |||
| S: * QUOTA "#user/alice" (STORAGE 58 512) | S: * QUOTA "#user/alice" (STORAGE 58 512) | |||
| // The server has rounded the STORAGE quota limit requested to the | // The server has rounded the STORAGE quota limit requested to | |||
| nearest 512 blocks of 1024 octects, or else another client has | the nearest 512 blocks of 1024 octets; otherwise, another client | |||
| performed a near simultaneous SETQUOTA, using a limit of 512. | has performed a near-simultaneous SETQUOTA using a limit of 512. | |||
| S: S0001 OK Rounded quota | S: S0001 OK Rounded quota | |||
| C: S0002 SETQUOTA "!partition/sda4" (STORAGE 99999999) | C: S0002 SETQUOTA "!partition/sda4" (STORAGE 99999999) | |||
| S: * QUOTA "!partition/sda4" (STORAGE 104 10923847) | S: * QUOTA "!partition/sda4" (STORAGE 104 10923847) | |||
| // The server has not changed the quota, since this is a | // The server has not changed the quota, since this is a | |||
| filesystem limit, and cannot be changed. The QUOTA response here | filesystem limit, and it cannot be changed. The QUOTA | |||
| is entirely optional. | response here is entirely optional. | |||
| S: S0002 NO Cannot change system limit | S: S0002 NO Cannot change system limit | |||
| 4.1.4. New STATUS attributes | 4.1.4. New STATUS attributes | |||
| DELETED and DELETED-STORAGE status data items allow to estimate the | The DELETED and DELETED-STORAGE status data items allow for | |||
| amount of resource freed by an EXPUNGE on a mailbox. | estimation of the amount of resources that could be freed by an | |||
| EXPUNGE on a mailbox. | ||||
| The DELETED status data item requests the server to return the number | The DELETED status data item requests the server to return the number | |||
| of messages with \Deleted flag set. The DELETED status data item is | of messages with the \Deleted flag set. The DELETED status data item | |||
| only required to be implemented when the server advertises QUOTA=RES- | is only required to be implemented when the server advertises the | |||
| MESSAGE capability. | "QUOTA=RES-MESSAGE" capability. | |||
| The DELETED-STORAGE status data item requests the server to return | The DELETED-STORAGE status data item requests the server to return | |||
| the amount of storage space that can be reclaimed by performing | the amount of storage space that can be reclaimed by performing | |||
| EXPUNGE on the mailbox. The server SHOULD return the exact value, | EXPUNGE on the mailbox. The server SHOULD return the exact value; | |||
| however it is recognized that the server may have to do non-trivial | however, it is recognized that the server may have to do a non- | |||
| amount of work to calculate it. If the calculation of the exact | trivial amount of work to calculate it. If the calculation of the | |||
| value would take a long time, the server MAY instead return the sum | exact value would take a long time, the server MAY instead return the | |||
| of RFC822.SIZEs of messages with the \Deleted flag set. The DELETED- | sum of the RFC822.SIZE of the messages with the \Deleted flag set. | |||
| STORAGE status data item is only required to be implemented when the | The DELETED-STORAGE status data item is only required to be | |||
| server advertises QUOTA=RES-STORAGE capability. | implemented when the server advertises the "QUOTA=RES-STORAGE" | |||
| capability. | ||||
| Example: | Example: | |||
| S: * CAPABILITY [...] QUOTA QUOTA=RES-STORAGE QUOTA=RES-MESSAGE | S: * CAPABILITY [...] QUOTA QUOTA=RES-STORAGE QUOTA=RES- | |||
| [...] | MESSAGE [...] | |||
| [...] | [...] | |||
| C: S0003 STATUS INBOX (MESSAGES DELETED DELETED-STORAGE) | C: S0003 STATUS INBOX (MESSAGES DELETED DELETED-STORAGE) | |||
| S: * STATUS INBOX (MESSAGES 12 DELETED 4 DELETED-STORAGE 8) | S: * STATUS INBOX (MESSAGES 12 DELETED 4 DELETED-STORAGE 8) | |||
| // 12 messages, 4 of which would be deleted when an EXPUNGE | // 12 messages, 4 of which would be deleted when an EXPUNGE | |||
| happens. | happens. | |||
| skipping to change at page 10, line 15 ¶ | skipping to change at line 427 ¶ | |||
| 4.2. Responses | 4.2. Responses | |||
| The following responses may be sent by the server. | The following responses may be sent by the server. | |||
| 4.2.1. QUOTA | 4.2.1. QUOTA | |||
| Data: quota root name | Data: quota root name | |||
| list of resource names, usages, and limits | list of resource names, usages, and limits | |||
| This response occurs as a result of a GETQUOTA, a GETQUOTAROOT or a | This response occurs as a result of a GETQUOTA, GETQUOTAROOT, or | |||
| SETQUOTA command. The first string is the name of the quota root for | SETQUOTA command. The first string is the name of the quota root for | |||
| which this quota applies. | which this quota applies. | |||
| The name is followed by a S-expression format list of the resource | The name is followed by an S-expression format list of the resource | |||
| usage and limits of the quota root. The list contains zero or more | usage and limits of the quota root. The list contains zero or more | |||
| triplets. Each triplet contains a resource name, the current usage | triplets. Each triplet contains a resource name, the current usage | |||
| of the resource, and the resource limit. | of the resource, and the resource limit. | |||
| Resources not named in the list are not limited in the quota root. | Resources not named in the list are not limited in the quota root. | |||
| Thus, an empty list means there are no administrative resource limits | Thus, an empty list means there are no administrative resource limits | |||
| in the quota root. | in the quota root. | |||
| Example: S: * QUOTA "" (STORAGE 10 512) | Example: | |||
| S: * QUOTA "" (STORAGE 10 512) | ||||
| 4.2.2. QUOTAROOT | 4.2.2. QUOTAROOT | |||
| Data: mailbox name | Data: mailbox name | |||
| zero or more quota root names | zero or more quota root names | |||
| This response occurs as a result of a GETQUOTAROOT command. The | This response occurs as a result of a GETQUOTAROOT command. The | |||
| first string is the mailbox and the remaining strings are the names | first string is the mailbox and the remaining strings are the names | |||
| of the quota roots for the mailbox. | of the quota roots for the mailbox. | |||
| Examples: | Examples: | |||
| S: * QUOTAROOT INBOX "" | S: * QUOTAROOT INBOX "" | |||
| // The INBOX mailbox is covered by a single quota root with name "". | // The INBOX mailbox is covered by a single quota root with | |||
| name "". | ||||
| S: * QUOTAROOT comp.mail.mime | S: * QUOTAROOT comp.mail.mime | |||
| // The comp.mail.mime mailbox has no quota root associated with it, | // The comp.mail.mime mailbox has no quota root associated | |||
| but one can be created. | with it, but one can be created. | |||
| 4.3. Response Codes | 4.3. Response Codes | |||
| 4.3.1. OVERQUOTA | 4.3.1. OVERQUOTA | |||
| OVERQUOTA response code SHOULD be returned in the tagged NO response | The OVERQUOTA response code SHOULD be returned in the tagged NO | |||
| to an APPEND/COPY/MOVE when the addition of the message(s) puts the | response to an APPEND/COPY/MOVE when the addition of the message(s) | |||
| target mailbox over any one of its quota limits. | puts the target mailbox over any one of its quota limits. | |||
| Example 1: C: A003 APPEND saved-messages (\Seen) {326} | Example 1: | |||
| S: + Ready for literal data | ||||
| C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST) | C: A003 APPEND saved-messages (\Seen) {326} | |||
| C: From: Fred Foobar <foobar@Blurdybloop.example> | S: + Ready for literal data | |||
| C: Subject: afternoon meeting | C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST) | |||
| C: To: mooch@owatagu.siam.edu.example | C: From: Fred Foobar <foobar@Blurdybloop.example> | |||
| C: Message-Id: <B27397-0100000@Blurdybloop.example> | C: Subject: afternoon meeting | |||
| C: MIME-Version: 1.0 | C: To: mooch@owatagu.siam.edu.example | |||
| C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII | C: Message-Id: <B27397-0100000@Blurdybloop.example> | |||
| C: | C: MIME-Version: 1.0 | |||
| C: Hello Joe, do you think we can meet at 3:30 tomorrow? | C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII | |||
| C: | C: | |||
| S: A003 NO [OVERQUOTA] APPEND Failed | C: Hello Joe, do you think we can meet at 3:30 tomorrow? | |||
| C: | ||||
| S: A003 NO [OVERQUOTA] APPEND Failed | ||||
| The OVERQUOTA response code MAY also be returned in an untagged NO | The OVERQUOTA response code MAY also be returned in an untagged NO | |||
| response in the authenticated or the selected state, when a mailbox | response in the authenticated or the selected state when a mailbox | |||
| exceeds soft quota. For example, such OVERQUOTA response code might | exceeds soft quota. For example, such OVERQUOTA response codes might | |||
| be sent as a result of an external event (e.g. LMTP delivery or | be sent as a result of an external event (e.g., Local Mail Transfer | |||
| COPY/MOVE/APPEND in another IMAP connection) that causes the | Protocol (LMTP) [RFC2033] delivery or COPY/MOVE/APPEND in another | |||
| currently selected mailbox to exceed soft quota. Note that such | IMAP connection) that causes the currently selected mailbox to exceed | |||
| OVERQUOTA response code might be ambiguous, because it might relate | soft quota. Note that such an OVERQUOTA response code might be | |||
| to the target mailbox (as specified in COPY/MOVE/APPEND) or to the | ambiguous because it might relate to the target mailbox (as specified | |||
| currently selected mailbox. (The WG chose not to address this | in COPY/MOVE/APPEND) or to the currently selected mailbox. (The | |||
| deficiency due to syntactic limitations of IMAP response codes and | EXTRA WG chose not to address this deficiency due to syntactic | |||
| because such events are likely to be rare.) This form of the | limitations of IMAP response codes and because such events are likely | |||
| OVERQUOTA response codes MUST NOT be returned if there is no mailbox | to be rare.) This form of the OVERQUOTA response codes MUST NOT be | |||
| selected and no command in progress that adds a message to a mailbox | returned if there is no mailbox selected and no command in progress | |||
| (e.g. APPEND). | that adds a message to a mailbox (e.g., APPEND). | |||
| Example 2: C: A003 APPEND saved-messages (\Seen) {326} | Example 2: | |||
| S: + Ready for literal data | ||||
| C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST) | ||||
| C: From: Fred Foobar <foobar@Blurdybloop.example> | ||||
| C: Subject: afternoon meeting | ||||
| C: To: mooch@owatagu.siam.edu.example | ||||
| C: Message-Id: <B27397-0100000@Blurdybloop.example> | ||||
| C: MIME-Version: 1.0 | ||||
| C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII | ||||
| C: | ||||
| C: Hello Joe, do you think we can meet at 3:30 tomorrow? | ||||
| C: | ||||
| S: * NO [OVERQUOTA] Soft quota has been exceeded | ||||
| S: A003 OK [APPENDUID 38505 3955] APPEND completed | ||||
| Example 3: C: A004 COPY 2:4 MEETING | C: A003 APPEND saved-messages (\Seen) {326} | |||
| S: * NO [OVERQUOTA] Soft quota has been exceeded | S: + Ready for literal data | |||
| S: A004 OK [COPYUID 38505 304,319:320 3956:3958] COPY | C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST) | |||
| command completed | C: From: Fred Foobar <foobar@Blurdybloop.example> | |||
| C: Subject: afternoon meeting | ||||
| C: To: mooch@owatagu.siam.edu.example | ||||
| C: Message-Id: <B27397-0100000@Blurdybloop.example> | ||||
| C: MIME-Version: 1.0 | ||||
| C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII | ||||
| C: | ||||
| C: Hello Joe, do you think we can meet at 3:30 tomorrow? | ||||
| C: | ||||
| S: * NO [OVERQUOTA] Soft quota has been exceeded | ||||
| S: A003 OK [APPENDUID 38505 3955] APPEND completed | ||||
| Example 3: | ||||
| C: A004 COPY 2:4 MEETING | ||||
| S: * NO [OVERQUOTA] Soft quota has been exceeded | ||||
| S: A004 OK [COPYUID 38505 304,319:320 3956:3958] COPY | ||||
| command completed | ||||
| 5. Resource Type Definitions | 5. Resource Type Definitions | |||
| The following resource types are defined in this memo. A server | The following resource types are defined in this memo. A server | |||
| supporting a resource type MUST advertise this as a CAPABILITY with a | supporting a resource type MUST advertise this as a CAPABILITY with a | |||
| name consisting of the resource name prefixed by "QUOTA=RES-". A | name consisting of the resource name prefixed by "QUOTA=RES-". A | |||
| server MAY support multiple resource types, and MUST advertise all | server MAY support multiple resource types and MUST advertise all | |||
| resource types it supports. | resource types it supports. | |||
| 5.1. STORAGE | 5.1. STORAGE | |||
| The physical space estimate, in units of 1024 octets, of the | "STORAGE" is the physical space estimate, in units of 1024 octets, of | |||
| mailboxes governed by the quota root. This MAY not be the same as | the mailboxes governed by the quota root. This MAY not be the same | |||
| the sum of the RFC822.SIZE of the messages. Some implementations MAY | as the sum of the RFC822.SIZE of the messages. Some implementations | |||
| include metadata sizes for the messages and mailboxes, other | MAY include metadata sizes for the messages and mailboxes, and other | |||
| implementations MAY store messages in such a way that the physical | implementations MAY store messages in such a way that the physical | |||
| space used is smaller, for example due to use of compression. | space used is smaller, for example, due to use of compression. | |||
| Additional messages might not increase the usage. Client MUST NOT | Additional messages might not increase the usage. Clients MUST NOT | |||
| use the usage figure for anything other than informational purposes, | use the usage figure for anything other than informational purposes; | |||
| for example, they MUST NOT refuse to APPEND a message if the limit | for example, they MUST NOT refuse to APPEND a message if the limit | |||
| less the usage is smaller than the RFC822.SIZE divided by 1024 of the | less the usage is smaller than the RFC822.SIZE divided by 1024 octets | |||
| message, but it MAY warn about such condition. | of the message, but it MAY warn about such condition. | |||
| The usage figure may change as a result of performing actions not | The usage figure may change as a result of performing actions not | |||
| associated with adding new messages to the mailbox, such as SEARCH, | associated with adding new messages to the mailbox, such as SEARCH, | |||
| since this may increase the amount of metadata included in the | since this may increase the amount of metadata included in the | |||
| calculations. | calculations. | |||
| When the server supports this resource type, it MUST also support the | When the server supports this resource type, it MUST also support the | |||
| DELETED-STORAGE status data item. | DELETED-STORAGE status data item. | |||
| Support for this resource MUST be indicated by the server by | Support for this resource MUST be indicated by the server by | |||
| advertising the CAPABILITY "QUOTA=RES-STORAGE". | advertising the "QUOTA=RES-STORAGE" capability. | |||
| A resource named the same was also given as an example in RFC2087 | A resource named the same was also given as an example in [RFC2087]. | |||
| [RFC2087]. This document provides a more precise definition. | This document provides a more precise definition. | |||
| 5.2. MESSAGE | 5.2. MESSAGE | |||
| The number of messages stored within the mailboxes governed by the | "MESSAGE" is the number of messages stored within the mailboxes | |||
| quota root. This MUST be an exact number, however, clients MUST NOT | governed by the quota root. This MUST be an exact number; however, | |||
| assume that a change in the usage indicates a change in the number of | clients MUST NOT assume that a change in the usage indicates a change | |||
| messages available, since the quota root may include mailboxes the | in the number of messages available, since the quota root may include | |||
| client has no access to. | mailboxes the client has no access to. | |||
| When the server supports this resource type, it MUST also support the | When the server supports this resource type, it MUST also support the | |||
| DELETED status data item. | DELETED status data item. | |||
| Support for this resource MUST be indicated by the server by | Support for this resource MUST be indicated by the server by | |||
| advertising the CAPABILITY "QUOTA=RES-MESSAGE". | advertising the "QUOTA=RES-MESSAGE" capability. | |||
| A resource named the same was also given as an example in RFC2087 | A resource named the same was also given as an example in [RFC2087]. | |||
| [RFC2087]. This document provides a more precise definition. | This document provides a more precise definition. | |||
| 5.3. MAILBOX | 5.3. MAILBOX | |||
| The number of mailboxes governed by the quota root. This MUST be an | "MAILBOX" is the number of mailboxes governed by the quota root. | |||
| exact number, however, clients MUST NOT assume that a change in the | This MUST be an exact number; however, clients MUST NOT assume that a | |||
| usage indicates a change in the number of mailboxes, since the quota | change in the usage indicates a change in the number of mailboxes, | |||
| root may include mailboxes the client has no access to. | since the quota root may include mailboxes the client has no access | |||
| to. | ||||
| Support for this resource MUST be indicated by the server by | Support for this resource MUST be indicated by the server by | |||
| advertising the CAPABILITY "QUOTA=RES-MAILBOX". | advertising the "QUOTA=RES-MAILBOX" capability. | |||
| 5.4. ANNOTATION-STORAGE | 5.4. ANNOTATION-STORAGE | |||
| The maximum size of all annotations [RFC5257], in units of 1024 | "ANNOTATION-STORAGE" is the maximum size of all annotations | |||
| octets, associated with all messages in the mailboxes governed by the | [RFC5257], in units of 1024 octets, associated with all messages in | |||
| quota root. | the mailboxes governed by the quota root. | |||
| Support for this resource MUST be indicated by the server by | Support for this resource MUST be indicated by the server by | |||
| advertising the CAPABILITY "QUOTA=RES-ANNOTATION-STORAGE". | advertising the "QUOTA=RES-ANNOTATION-STORAGE" capability. | |||
| 6. Interaction with IMAP ACL extension (RFC 4314) | 6. Interaction with IMAP ACL Extension (RFC 4314) | |||
| This section lists [RFC4314] rights required to execute quota related | This section lists [RFC4314] rights required to execute quota-related | |||
| commands when both RFC 4314 and this document are implemented. | commands when both RFC 4314 and this document are implemented. | |||
| +===================+=+=+===+===+===+===+===+===+===+===+=====+=====+ | +===================+=+=+===+===+===+===+===+===+===+===+=====+=====+ | |||
| | Operations\Rights |l|r| s | w | i | c | x | t | e | a | Any | Non | | | Operations\Rights |l|r| s | w | i | c | x | t | e | a | Any | Non | | |||
| +===================+=+=+===+===+===+===+===+===+===+===+=====+=====+ | +===================+=+=+===+===+===+===+===+===+===+===+=====+=====+ | |||
| | GETQUOTA | | | | | | | | | | | | + | | | GETQUOTA | | | | | | | | | | | | + | | |||
| +-------------------+-+-+---+---+---+---+---+---+---+---+-----+-----+ | +-------------------+-+-+---+---+---+---+---+---+---+---+-----+-----+ | |||
| | GETQUOTAROOT | |*| | | | | | | | | | * | | | GETQUOTAROOT | |*| | | | | | | | | | * | | |||
| +-------------------+-+-+---+---+---+---+---+---+---+---+-----+-----+ | +-------------------+-+-+---+---+---+---+---+---+---+---+-----+-----+ | |||
| | SETQUOTA | | | | | | | | | | + | | | | | SETQUOTA | | | | | | | | | | + | | | | |||
| +-------------------+-+-+---+---+---+---+---+---+---+---+-----+-----+ | +-------------------+-+-+---+---+---+---+---+---+---+---+-----+-----+ | |||
| Table 1 | Table 1 | |||
| See Section 4 of RFC 4314 for conventions used in this table. | See Section 4 of [RFC4314] for conventions used in this table. | |||
| Legend: | Legend: | |||
| + - The right is required | "+": The right is required | |||
| * - Only one of the rights marked with * is required | "*": Only one of the rights marked with * is required | |||
| "Any" - at least one of the "l", "r", "i", "k", "x", "a" rights is | "Any": At least one of the "l", "r", "i", "k", "x", or "a" rights is | |||
| required | required | |||
| "Non" - no rights required to perform the command | "Non": No rights required to perform the command | |||
| Note that which permissions are needed in order to perform | Note that which permissions are needed in order to perform a | |||
| GETQUOTAROOT command depends on the quota resource type being | GETQUOTAROOT command depends on the quota resource type being | |||
| requested. For example, a quota on number of messages (MESSAGE | requested. For example, a quota on the number of messages (MESSAGE | |||
| resource type) or total size of messages (STORAGE resource type) | resource type) or total size of messages (STORAGE resource type) | |||
| requires "r" right on the mailbox in question, since the quota | requires "r" right on the mailbox in question, since the quota | |||
| involved would reveal information about the number (or total size) of | involved would reveal information about the number (or total size) of | |||
| messages in the mailbox. By comparison, the MAILBOX resource type | messages in the mailbox. By comparison, the MAILBOX resource type | |||
| doesn't require any right. | doesn't require any right. | |||
| 7. Formal syntax | 7. Formal Syntax | |||
| The following syntax specification uses the Augmented Backus-Naur | The following syntax specification uses the Augmented Backus-Naur | |||
| Form (ABNF) notation as specified in [ABNF]. | Form (ABNF) notation as specified in [ABNF]. | |||
| Non-terminals referenced but not defined below are as defined by | Non-terminals referenced but not defined below are as defined by | |||
| IMAP4 [RFC3501]. | IMAP4 [RFC3501] [RFC9051]. | |||
| Except as noted otherwise, all alphabetic characters are case- | Except as noted otherwise, all alphabetic characters are case | |||
| insensitive. The use of upper or lower case characters to define | insensitive. The use of uppercase or lowercase characters to define | |||
| token strings is for editorial clarity only. Implementations MUST | token strings is for editorial clarity only. Implementations MUST | |||
| accept these strings in a case-insensitive fashion. | accept these strings in a case-insensitive fashion. | |||
| getquota = "GETQUOTA" SP quota-root-name | getquota = "GETQUOTA" SP quota-root-name | |||
| getquotaroot = "GETQUOTAROOT" SP mailbox | getquotaroot = "GETQUOTAROOT" SP mailbox | |||
| quota-list = "(" quota-resource *(SP quota-resource) ")" | quota-list = "(" quota-resource *(SP quota-resource) ")" | |||
| quota-resource = resource-name SP resource-usage SP resource-limit | quota-resource = resource-name SP resource-usage SP resource-limit | |||
| quota-response = "QUOTA" SP quota-root-name SP quota-list | quota-response = "QUOTA" SP quota-root-name SP quota-list | |||
| quotaroot-response = "QUOTAROOT" SP mailbox *(SP quota-root-name) | quotaroot-response = "QUOTAROOT" SP mailbox *(SP quota-root-name) | |||
| setquota = "SETQUOTA" SP quota-root-name SP setquota-list | setquota = "SETQUOTA" SP quota-root-name SP setquota-list | |||
| setquota-list = "(" [setquota-resource *(SP setquota-resource)] | setquota-list = "(" [setquota-resource *(SP setquota-resource)] | |||
| ")" | ")" | |||
| setquota-resource = resource-name SP resource-limit | setquota-resource = resource-name SP resource-limit | |||
| quota-root-name = astring | quota-root-name = astring | |||
| resource-limit = number64 | ||||
| resource-name = "STORAGE" / "MESSAGE" / "MAILBOX" / | resource-limit = number64 | |||
| "ANNOTATION-STORAGE" / resource-name-ext | resource-name = "STORAGE" / "MESSAGE" / "MAILBOX" / | |||
| "ANNOTATION-STORAGE" / resource-name-ext | ||||
| resource-name-ext = atom | resource-name-ext = atom | |||
| ;; Future resource registrations | ||||
| ;; Future resource registrations | resource-usage = number64 | |||
| ;; must be less than corresponding resource-limit | ||||
| resource-usage = number64 | ||||
| ;; must be less than corresponding resource-limit | ||||
| capability-quota = capa-quota-res / "QUOTASET" | ||||
| ;; One or more capa-quota-res must be returned. | ||||
| ;; Also "QUOTASET" can optionally be returned. | ||||
| capa-quota-res = "QUOTA=RES-" resource-name | ||||
| status-att =/ "DELETED" / "DELETED-STORAGE" | ||||
| ;; DELETED status data item MUST be supported | ||||
| ;; when "QUOTA=RES-MESSAGE" capability is | ||||
| ;; advertised. | ||||
| ;; DELETED-STORAGE status data item MUST be | ||||
| ;; supported when "QUOTA=RES-STORAGE" capability | capability-quota = capa-quota-res / "QUOTASET" | |||
| ;; One or more capa-quota-res must be returned. | ||||
| ;; Also "QUOTASET" can optionally be returned. | ||||
| ;; is advertised. | capa-quota-res = "QUOTA=RES-" resource-name | |||
| status-att-val =/ status-att-deleted / | status-att =/ "DELETED" / "DELETED-STORAGE" | |||
| ;; DELETED status data item MUST be supported | ||||
| ;; when the "QUOTA=RES-MESSAGE" capability is | ||||
| ;; advertised. | ||||
| ;; DELETED-STORAGE status data item MUST be | ||||
| ;; supported when the "QUOTA=RES-STORAGE" | ||||
| ;; capability is advertised. | ||||
| status-att-deleted-storage | status-att-val =/ status-att-deleted / | |||
| status-att-deleted-storage | ||||
| status-att-deleted = "DELETED" SP number | status-att-deleted = "DELETED" SP number | |||
| ;; DELETED status data item MUST be supported | ||||
| ;; DELETED status data item MUST be supported | ;; when the "QUOTA=RES-MESSAGE" capability is | |||
| ;; advertised. | ||||
| ;; when "QUOTA=RES-MESSAGE" capability is | ||||
| ;; advertised. | ||||
| status-att-deleted-storage = "DELETED-STORAGE" SP number64 | status-att-deleted-storage = "DELETED-STORAGE" SP number64 | |||
| ;; DELETED-STORAGE status data item MUST be | ||||
| ;; supported when the "QUOTA=RES-STORAGE" | ||||
| ;; capability is advertised. | ||||
| ;; DELETED-STORAGE status data item MUST be | resp-text-code =/ "OVERQUOTA" | |||
| ;; supported when "QUOTA=RES-STORAGE" capability | ||||
| ;; is advertised. | ||||
| resp-text-code =/ "OVERQUOTA" | ||||
| number64 = <Defined in RFC 9051> | number64 = <Defined in RFC 9051> | |||
| 8. Security Considerations | 8. Security Considerations | |||
| Implementors should be careful to make sure the implementation of | Implementors should be careful to make sure the implementation of | |||
| these commands does not violate the site's security policy. The | these commands does not violate the site's security policy. The | |||
| resource usage of other users is likely to be considered confidential | resource usage of other users is likely to be considered confidential | |||
| information and should not be divulged to unauthorized persons. In | information and should not be divulged to unauthorized persons. In | |||
| particular, no quota information should be disclosed to anonymous | particular, no quota information should be disclosed to anonymous | |||
| users. | users. | |||
| As for any resource shared across users (for example a quota root | As for any resource shared across users (for example, a quota root | |||
| attached to a set of shared mailboxes), a user that can consume or | attached to a set of shared mailboxes), a user that can consume or | |||
| render unusable the resource can affect the resources available to | render unusable the resource can affect the resources available to | |||
| the other users; this might occur, for example, by a user with | the other users; this might occur, for example, by a user with | |||
| permission to execute SETQUOTA setting an artificially small value. | permission to execute the SETQUOTA setting, which sets an | |||
| artificially small value. | ||||
| Note that computing resource usage might incur a heavy load on the | Note that computing resource usage might incur a heavy load on the | |||
| server. Server implementers should consider implementation | server. Server implementers should consider implementation | |||
| techniques that lower load on servers, such as caching of resource | techniques that lower the load on servers such as caching of resource | |||
| usage information or usage of less precise computations when under | usage information or usage of less precise computations when under | |||
| heavy load. | heavy load. | |||
| 9. IANA Considerations | 9. IANA Considerations | |||
| 9.1. Changes/additions to the IMAP4 capabilities registry | 9.1. Changes/Additions to the IMAP Capabilities Registry | |||
| IMAP4 capabilities are registered by publishing a standards track or | ||||
| IESG approved Informational or Experimental RFC. The registry is | ||||
| currently located at: | ||||
| https://www.iana.org/assignments/imap4-capabilities | ||||
| IANA is requested to update definition of the QUOTA extension to | ||||
| point to this document. IANA is also requested to add the "QUOTASET" | ||||
| capability to the IMAP4 capabilities registry, with this document as | ||||
| the reference. | ||||
| IANA is requested to reserve the prefix "QUOTA=RES-" in the IMAP4 | ||||
| capabilities registry and add a pointer to this document and to the | ||||
| IMAP quota resource type registry (see Section 9.2). | ||||
| IANA is requested to reserve all other capabilities starting with | ||||
| "QUOTA=" prefix for future IETF Stream extensions to this document. | ||||
| 9.2. IMAP quota resource type registry | ||||
| IANA is requested to create a new registry for IMAP quota resource | ||||
| types. Registration policy for this registry is "Specification | ||||
| Required". When registering a new quota resource type, the | ||||
| registrant need to provide the following: Name of the quota resource | ||||
| type, Author/Change Controller name and email address, short | ||||
| description, extra (if any) required and optional IMAP commands/ | ||||
| responses, and a reference to a specification that describes the | ||||
| quota resource type in more details. | ||||
| Designated Experts should check that provided references are correct, | ||||
| that they describe the quota resource type being registered in | ||||
| sufficient details to be implementable, that syntax of any optional | ||||
| commands/responses is correct (e.g. ABNF validates), and their | ||||
| syntax/description complies with rules and limitations imposed by | ||||
| IMAP [RFC3501][RFC9051]. Designated Experts should avoid registering | ||||
| multiple identical quota resource types under different names and | ||||
| should provide advice to requestors about other possible quota | ||||
| resource types to use. | ||||
| This document includes initial registrations for the following IMAP | ||||
| quota resource type: STORAGE (Section 5.1), MESSAGE (Section 5.2), | ||||
| MAILBOX (Section 5.3) and "ANNOTATION-STORAGE" (Section 5.4). See | ||||
| Section 9.3 for the registration templates. | ||||
| 9.3. Registrations of IMAP Quota Resource Types | ||||
| Name of the quota resource type: STORAGE | ||||
| Author: Alexey Melnikov <alexey.melnikov@isode.com> | ||||
| Change Controller: IESG <iesg@ietf.org> | ||||
| Description: The physical space estimate, in units of 1024 octets, | ||||
| of the mailboxes governed by the quota root. | ||||
| Extra required IMAP commands/responses: DELETED-STORAGE STATUS | ||||
| request data item and response data item | ||||
| Extra optional IMAP commands/responses: N/A | ||||
| Reference: Section 5.1 of RFCXXXX | ||||
| Name of the quota resource type: MESSAGE | IMAP4 capabilities are registered by publishing a Standards Track or | |||
| an IESG-approved Informational or Experimental RFC. The "IMAP | ||||
| Capabilities" registry is currently located at | ||||
| <https://www.iana.org/assignments/imap4-capabilities>. | ||||
| Author: Alexey Melnikov <alexey.melnikov@isode.com> | IANA has updated the reference for the QUOTA extension to point to | |||
| this document. IANA has also added the "QUOTA=" prefix and the | ||||
| "QUOTASET" capability to the "IMAP Capabilities" registry with this | ||||
| document as the reference. | ||||
| Change Controller: IESG <iesg@ietf.org> | IANA has added the following notes to the "IMAP Capabilities" | |||
| registry: | ||||
| Description: The number of messages stored within the mailboxes | The prefix "QUOTA=RES-" is reserved per RFC 9208, Section 9.1. See | |||
| governed by the quota root. | Section 9.2 of that document for values that follow this prefix. | |||
| Extra required IMAP commands/responses: DELETED STATUS request data | All other capabilities starting with the "QUOTA=" prefix are reserved | |||
| item and response data item | for future IETF Stream extensions to RFC 9208. | |||
| Extra optional IMAP commands/responses: N/A | 9.2. IMAP Quota Resource Type Registry | |||
| Reference: Section 5.2 of RFCXXXX | IANA has created a new registry for IMAP quota resource types. The | |||
| registration policy for the "IMAP Quota Resource Types" registry is | ||||
| "Specification Required" [RFC8126]. | ||||
| Name of the quota resource type: MAILBOX | When registering a new quota resource type, the registrant needs to | |||
| Author: Alexey Melnikov <alexey.melnikov@isode.com> | provide the following: | |||
| Change Controller: IESG <iesg@ietf.org> | * the name of the quota resource type | |||
| Description: The number of mailboxes governed by the quota root. | * a short description | |||
| Extra required IMAP commands/responses: N/A | * extra required IMAP commands/responses (if any) | |||
| Extra optional IMAP commands/responses: N/A | * extra optional IMAP commands/responses (if any) | |||
| Reference: Section 5.3 of RFCXXXX | * name and email address of author | |||
| Name of the quota resource type: ANNOTATION-STORAGE | * name and email address of change controller | |||
| Author: Alexey Melnikov <alexey.melnikov@isode.com> | * a reference to a specification that describes the quota resource | |||
| type in more detail | ||||
| Change Controller: IESG <iesg@ietf.org> | Designated experts should check that the provided references are | |||
| correct, the references describe the quota resource type being | ||||
| registered in sufficient detail to be implementable, the syntax of | ||||
| any optional commands/responses is correct (e.g., ABNF validates), | ||||
| and the syntax/description complies with rules and limitations | ||||
| imposed by IMAP [RFC3501] [RFC9051]. Designated experts should avoid | ||||
| registering multiple identical quota resource types under different | ||||
| names and should provide advice to requestors about other possible | ||||
| quota resource types to use. | ||||
| Description: The maximum size of all annotations [RFC5257], in units | The initial contents of the "IMAP Quota Resource Types" registry are | |||
| of 1024 octets, associated with all messages in the mailboxes | as follows: | |||
| governed by the quota root. | ||||
| Extra required IMAP commands/responses: N/A | +===================+=======================================+ | |||
| | field name | field value | | ||||
| +===================+=======================================+ | ||||
| | Name of the quota | STORAGE | | ||||
| | resource type: | | | ||||
| +-------------------+---------------------------------------+ | ||||
| | Description: | The physical space estimate, in units | | ||||
| | | of 1024 octets, of the mailboxes | | ||||
| | | governed by the quota root. | | ||||
| +-------------------+---------------------------------------+ | ||||
| | Extra required | DELETED-STORAGE STATUS request data | | ||||
| | IMAP commands/ | item and response data item | | ||||
| | responses: | | | ||||
| +-------------------+---------------------------------------+ | ||||
| | Extra optional | N/A | | ||||
| | IMAP commands/ | | | ||||
| | responses: | | | ||||
| +-------------------+---------------------------------------+ | ||||
| | Author: | Alexey Melnikov | | ||||
| | | <alexey.melnikov@isode.com> | | ||||
| +-------------------+---------------------------------------+ | ||||
| | Change | IESG <iesg@ietf.org> | | ||||
| | Controller: | | | ||||
| +-------------------+---------------------------------------+ | ||||
| | Reference: | Section 5.1 of RFC 9208 | | ||||
| +-------------------+---------------------------------------+ | ||||
| Extra optional IMAP commands/responses: N/A | Table 2: STORAGE | |||
| Reference: Section 5.4 of RFCXXXX | +=====================+==========================================+ | |||
| | field name | field value | | ||||
| +=====================+==========================================+ | ||||
| | Name of the quota | MESSAGE | | ||||
| | resource type: | | | ||||
| +---------------------+------------------------------------------+ | ||||
| | Description: | The number of messages stored within the | | ||||
| | | mailboxes governed by the quota root. | | ||||
| +---------------------+------------------------------------------+ | ||||
| | Extra required IMAP | DELETED STATUS request data item and | | ||||
| | commands/responses: | response data item | | ||||
| +---------------------+------------------------------------------+ | ||||
| | Extra optional IMAP | N/A | | ||||
| | commands/responses: | | | ||||
| +---------------------+------------------------------------------+ | ||||
| | Author: | Alexey Melnikov | | ||||
| | | <alexey.melnikov@isode.com> | | ||||
| +---------------------+------------------------------------------+ | ||||
| | Change Controller: | IESG <iesg@ietf.org> | | ||||
| +---------------------+------------------------------------------+ | ||||
| | Reference: | Section 5.2 of RFC 9208 | | ||||
| +---------------------+------------------------------------------+ | ||||
| 10. Contributors | Table 3: MESSAGE | |||
| Dave Cridland wrote lots of text in an earlier draft that became the | +==================================+=============================+ | |||
| basis for this document. | | field name | field value | | |||
| +==================================+=============================+ | ||||
| | Name of the quota resource type: | MAILBOX | | ||||
| +----------------------------------+-----------------------------+ | ||||
| | Description: | The number of mailboxes | | ||||
| | | governed by the quota root. | | ||||
| +----------------------------------+-----------------------------+ | ||||
| | Extra required IMAP commands/ | N/A | | ||||
| | responses: | | | ||||
| +----------------------------------+-----------------------------+ | ||||
| | Extra optional IMAP commands/ | N/A | | ||||
| | responses: | | | ||||
| +----------------------------------+-----------------------------+ | ||||
| | Author: | Alexey Melnikov | | ||||
| | | <alexey.melnikov@isode.com> | | ||||
| +----------------------------------+-----------------------------+ | ||||
| | Change Controller: | IESG <iesg@ietf.org> | | ||||
| +----------------------------------+-----------------------------+ | ||||
| | Reference: | Section 5.3 of RFC 9208 | | ||||
| +----------------------------------+-----------------------------+ | ||||
| 11. Acknowledgments | Table 4: MAILBOX | |||
| Editor of this document would like to thank the following people who | +================+=======================================+ | |||
| provided useful comments or participated in discussions that lead to | | field name | field value | | |||
| this update to RFC 2087: John Myers, Cyrus Daboo, Lyndon Nerenberg, | +================+=======================================+ | |||
| Benjamin Kaduk, Roman Danyliw, Eric Vyncke. | | Name of the | ANNOTATION-STORAGE | | |||
| | quota resource | | | ||||
| | type: | | | ||||
| +----------------+---------------------------------------+ | ||||
| | Description: | The maximum size of all annotations | | ||||
| | | [RFC5257], in units of 1024 octets, | | ||||
| | | associated with all messages in the | | ||||
| | | mailboxes governed by the quota root. | | ||||
| +----------------+---------------------------------------+ | ||||
| | Extra required | N/A | | ||||
| | IMAP commands/ | | | ||||
| | responses: | | | ||||
| +----------------+---------------------------------------+ | ||||
| | Extra optional | N/A | | ||||
| | IMAP commands/ | | | ||||
| | responses: | | | ||||
| +----------------+---------------------------------------+ | ||||
| | Author: | Alexey Melnikov | | ||||
| | | <alexey.melnikov@isode.com> | | ||||
| +----------------+---------------------------------------+ | ||||
| | Change | IESG <iesg@ietf.org> | | ||||
| | Controller: | | | ||||
| +----------------+---------------------------------------+ | ||||
| | Reference: | Section 5.4 of RFC 9208 | | ||||
| +----------------+---------------------------------------+ | ||||
| This document is a revision of RFC 2087. It borrows a lot of text | Table 5: ANNOTATION-STORAGE | |||
| from RFC 2087. Thus work of the RFC 2087 author John Myers is | ||||
| appreciated. | ||||
| 12. Changes since RFC 2087 | 10. Changes Since RFC 2087 | |||
| This document is a revision of RFC 2087. It tries to clarify the | This document is a revision of [RFC2087], and it aims to clarify the | |||
| meaning of different terms used by RFC 2087. It also provides more | meaning of different terms that were used in that RFC. It also | |||
| examples, gives guidance on allowed server behaviour, defines IANA | provides more examples, gives guidance on allowed server behavior, | |||
| registry for quota resource types and provides initial registrations | defines an IANA registry for quota resource types, and provides | |||
| for 4 of them. | initial registrations for 4 of them. | |||
| When compared with RFC 2087, this document defines two more commonly | When compared with [RFC2087], this document defines two more commonly | |||
| used resource type, adds optional OVERQUOTA response code and defines | used resource types, adds an optional OVERQUOTA response code, and | |||
| two extra STATUS data items ("DELETED" and "DELETED-STORAGE"). The | defines two extra STATUS data items ("DELETED" and "DELETED- | |||
| DELETED STATUS data item must be implemented if the QUOTA=RES-MESSAGE | STORAGE"). The DELETED STATUS data item must be implemented if the | |||
| capability is advertised. The DELETED-STORAGE STATUS data item must | "QUOTA=RES-MESSAGE" capability is advertised. The DELETED-STORAGE | |||
| be implemented if the QUOTA=RES-STORAGE capability is advertised. | STATUS data item must be implemented if the "QUOTA=RES-STORAGE" | |||
| For extensibility quota usage and quota limits are now 63 bit | capability is advertised. For extensibility, quota usage and quota | |||
| unsigned integers. | limits are now 63-bit unsigned integers. | |||
| 13. References | 11. References | |||
| 13.1. Normative References | 11.1. Normative References | |||
| [ABNF] Crocker, D., Ed. and P. Overell, Ed., "Augmented BNF for | [ABNF] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
| Syntax Specifications: ABNF", RFC 5234, January 2008, | Specifications: ABNF", STD 68, RFC 5234, | |||
| DOI 10.17487/RFC5234, January 2008, | ||||
| <https://www.rfc-editor.org/info/rfc5234>. | <https://www.rfc-editor.org/info/rfc5234>. | |||
| [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, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION | [RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION | |||
| 4rev1", RFC 3501, DOI 10.17487/RFC3501, March 2003, | 4rev1", RFC 3501, DOI 10.17487/RFC3501, March 2003, | |||
| <https://www.rfc-editor.org/info/rfc3501>. | <https://www.rfc-editor.org/info/rfc3501>. | |||
| skipping to change at page 21, line 10 ¶ | skipping to change at line 961 ¶ | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC9051] Melnikov, A., Ed. and B. Leiba, Ed., "Internet Message | [RFC9051] Melnikov, A., Ed. and B. Leiba, Ed., "Internet Message | |||
| Access Protocol (IMAP) - Version 4rev2", RFC 9051, | Access Protocol (IMAP) - Version 4rev2", RFC 9051, | |||
| DOI 10.17487/RFC9051, August 2021, | DOI 10.17487/RFC9051, August 2021, | |||
| <https://www.rfc-editor.org/info/rfc9051>. | <https://www.rfc-editor.org/info/rfc9051>. | |||
| 13.2. Informative References | 11.2. Informative References | |||
| [RFC2033] Myers, J., "Local Mail Transfer Protocol", RFC 2033, | ||||
| DOI 10.17487/RFC2033, October 1996, | ||||
| <https://www.rfc-editor.org/info/rfc2033>. | ||||
| [RFC2087] Myers, J., "IMAP4 QUOTA extension", RFC 2087, | [RFC2087] Myers, J., "IMAP4 QUOTA extension", RFC 2087, | |||
| DOI 10.17487/RFC2087, January 1997, | DOI 10.17487/RFC2087, January 1997, | |||
| <https://www.rfc-editor.org/info/rfc2087>. | <https://www.rfc-editor.org/info/rfc2087>. | |||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | ||||
| Writing an IANA Considerations Section in RFCs", BCP 26, | ||||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8126>. | ||||
| Acknowledgments | ||||
| The editor of this document would like to thank the following people | ||||
| who provided useful comments or participated in discussions that lead | ||||
| to this update of [RFC2087]: John Myers, Cyrus Daboo, Lyndon | ||||
| Nerenberg, Benjamin Kaduk, Roman Danyliw, and Éric Vyncke. | ||||
| This document is a revision of [RFC2087], and it borrows a lot of | ||||
| text from that RFC. Thus, the work of John Myers, the author of | ||||
| [RFC2087], is appreciated. | ||||
| Contributors | ||||
| Dave Cridland wrote a lot of text in an earlier draft version that | ||||
| became the basis for this document. | ||||
| Author's Address | Author's Address | |||
| Alexey Melnikov | Alexey Melnikov | |||
| Isode Limited | Isode Limited | |||
| Email: alexey.melnikov@isode.com | Email: alexey.melnikov@isode.com | |||
| URI: https://www.isode.com | URI: https://www.isode.com | |||
| End of changes. 158 change blocks. | ||||
| 441 lines changed or deleted | 503 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/ | ||||