| < draft-ietf-extra-quota-08.txt | draft-ietf-extra-quota-09.txt > | |||
|---|---|---|---|---|
| Network Working Group A. Melnikov | Network Working Group A. Melnikov | |||
| Internet-Draft Isode | Internet-Draft Isode | |||
| Obsoletes: 2087 (if approved) 21 October 2021 | Obsoletes: 2087 (if approved) 22 October 2021 | |||
| Intended status: Standards Track | Intended status: Standards Track | |||
| Expires: 24 April 2022 | Expires: 25 April 2022 | |||
| IMAP QUOTA Extension | IMAP QUOTA Extension | |||
| draft-ietf-extra-quota-08 | draft-ietf-extra-quota-09 | |||
| 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 (RFC 3501/RFC 9051) that permits administrative | |||
| limits on resource usage (quotas) to be manipulated through the IMAP | limits on resource usage (quotas) to be manipulated through the IMAP | |||
| protocol. | 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. | |||
| skipping to change at page 1, line 37 ¶ | skipping to change at page 1, line 37 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on 24 April 2022. | This Internet-Draft will expire on 25 April 2022. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 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 (https://trustee.ietf.org/ | |||
| license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
| Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
| skipping to change at page 3, line 4 ¶ | skipping to change at page 3, line 4 ¶ | |||
| 4.2.2. QUOTAROOT . . . . . . . . . . . . . . . . . . . . . . 10 | 4.2.2. QUOTAROOT . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 4.3. Response Codes . . . . . . . . . . . . . . . . . . . . . 10 | 4.3. Response Codes . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 4.3.1. OVERQUOTA . . . . . . . . . . . . . . . . . . . . . . 11 | 4.3.1. OVERQUOTA . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 5. Resource Type Definitions . . . . . . . . . . . . . . . . . . 12 | 5. Resource Type Definitions . . . . . . . . . . . . . . . . . . 12 | |||
| 5.1. STORAGE . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 5.1. STORAGE . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 5.2. MESSAGE . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 5.2. MESSAGE . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 5.3. MAILBOX . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 5.3. MAILBOX . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 5.4. ANNOTATION-STORAGE . . . . . . . . . . . . . . . . . . . 13 | 5.4. ANNOTATION-STORAGE . . . . . . . . . . . . . . . . . . . 13 | |||
| 6. Interaction with IMAP ACL extension (RFC 4314) . . . . . . . 14 | 6. Interaction with IMAP ACL extension (RFC 4314) . . . . . . . 14 | |||
| 7. Formal syntax . . . . . . . . . . . . . . . . . . . . . . . . 14 | 7. Formal syntax . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 9.1. Changes/additions to the IMAP4 capabilities registry . . 17 | 9.1. Changes/additions to the IMAP4 capabilities registry . . 17 | |||
| 9.2. IMAP quota resource type registry . . . . . . . . . . . . 17 | 9.2. IMAP quota resource type registry . . . . . . . . . . . . 18 | |||
| 9.3. Registrations of IMAP Quota Resource Types . . . . . . . 18 | 9.3. Registrations of IMAP Quota Resource Types . . . . . . . 18 | |||
| 10. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 19 | 10. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 19 | 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 12. Changes since RFC 2087 . . . . . . . . . . . . . . . . . . . 19 | 12. Changes since RFC 2087 . . . . . . . . . . . . . . . . . . . 20 | |||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 20 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 20 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 20 | |||
| 13.2. Informative References . . . . . . . . . . . . . . . . . 20 | 13.2. Informative References . . . . . . . . . . . . . . . . . 21 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 20 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 1. Document Conventions | 1. Document Conventions | |||
| In protocol examples, this document uses a prefix of "C: " to denote | 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 | lines sent by the client to the server, and "S: " for lines sent by | |||
| the server to the client. Lines prefixed with "// " are comments | the server to the client. Lines prefixed with "// " are comments | |||
| explaining the previous protocol line. These prefixes and comments | explaining the previous protocol line. These prefixes and comments | |||
| are not part of the protocol. Lines without any of these prefixes | are not part of the protocol. Lines without any of these prefixes | |||
| are continuations of the previous line, and no line break is present | are continuations of the previous line, and no line break is present | |||
| in the protocol unless specifically mentioned. | in the protocol before such lines unless specifically mentioned. | |||
| Again, for examples, the hierarchy separator on the IMAP server is | ||||
| presumed to be "/" throughout. None of these assumptions is required | ||||
| nor recommended by this document. | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| Other capitalised words are IMAP keywords [RFC3501][RFC9051] or | Other capitalised words are IMAP keywords [RFC3501][RFC9051] or | |||
| keywords from this document. | keywords from this document. | |||
| skipping to change at page 6, line 44 ¶ | skipping to change at page 6, line 33 ¶ | |||
| 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.) | |||
| The client can try using any of the resource types returned in | Note that the server is not required to support any specific resource | |||
| CAPABILITY response (i.e. all capability items with "QUOTA=RES-" | type (as advertised in the CAPABILITY response, i.e. all capability | |||
| prefix), however the server is not required to support any specific | items with the "QUOTA=RES-" prefix) for any particular quota root. | |||
| resource type 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) | |||
| skipping to change at page 8, line 4 ¶ | skipping to change at page 7, line 44 ¶ | |||
| 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 SETQUOTA command requires the server to | |||
| advertise "QUOTASET" capability. | advertise "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 be the specified limits. Any previous resource | |||
| limits for the named quota root are discarded. | limits for the named quota root are discarded, even resource limits | |||
| not explicitly listed in the SETQUOTA command. (For example, if the | ||||
| quota root had both STORAGE and MESSAGE limits assigned to the quota | ||||
| root before the SETQUOTA is called and the SETQUOTA only includes the | ||||
| STORAGE limit, then the MESSAGE limit is removed from the quota | ||||
| 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: | |||
| skipping to change at page 10, line 44 ¶ | skipping to change at page 10, line 40 ¶ | |||
| 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. | |||
| Example: | Examples: | |||
| S: * QUOTAROOT INBOX "" | S: * QUOTAROOT INBOX "" | |||
| // 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, | ||||
| 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 | OVERQUOTA response code SHOULD be returned in the tagged NO response | |||
| to an APPEND/COPY/MOVE when the addition of the message(s) puts the | to an APPEND/COPY/MOVE when the addition of the message(s) puts the | |||
| target mailbox over any one of its quota limits. | target mailbox over any one of its quota limits. | |||
| Example 1: C: A003 APPEND saved-messages (\Seen) {326} | Example 1: C: A003 APPEND saved-messages (\Seen) {326} | |||
| S: + Ready for literal data | S: + Ready for literal data | |||
| C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST) | C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST) | |||
| skipping to change at page 14, line 35 ¶ | skipping to change at page 14, line 35 ¶ | |||
| + - 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", "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 | ||||
| GETQUOTAROOT command depends on the quota resource type being | ||||
| requested. For example, a quota on number of messages (MESSAGE | ||||
| resource type) or total size of messages (STORAGE resource type) | ||||
| requires "r" right on the mailbox in question, since the quota | ||||
| involved would reveal information about the number (or total size) of | ||||
| messages in the mailbox. By comparison, the MAILBOX resource type | ||||
| 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]. | |||
| 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 upper or lower case characters to define | |||
| skipping to change at page 16, line 42 ¶ | skipping to change at page 17, line 4 ¶ | |||
| status-att-deleted-storage = "DELETED-STORAGE" SP number64 | status-att-deleted-storage = "DELETED-STORAGE" SP number64 | |||
| ;; DELETED-STORAGE status data item MUST be | ;; DELETED-STORAGE status data item MUST be | |||
| ;; supported when "QUOTA=RES-STORAGE" capability | ;; supported when "QUOTA=RES-STORAGE" capability | |||
| ;; is advertised. | ;; is advertised. | |||
| resp-text-code =/ "OVERQUOTA" | 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 | ||||
| attached to a set of shared mailboxes), a user that can consume or | ||||
| render unusable the resource can affect the resources available to | ||||
| the other users; this might occur, for example, by a user with | ||||
| permission to execute SETQUOTA setting 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 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 IMAP4 capabilities registry | |||
| End of changes. 19 change blocks. | ||||
| 23 lines changed or deleted | 42 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/ | ||||