| < draft-melnikov-sieve-external-lists-01.txt | draft-melnikov-sieve-external-lists-02.txt > | |||
|---|---|---|---|---|
| Sieve Working Group A. Melnikov | Sieve Working Group A. Melnikov | |||
| Internet-Draft Isode Limited | Internet-Draft Isode Limited | |||
| Intended status: Standards Track July 6, 2007 | Intended status: Standards Track July 5, 2009 | |||
| Expires: January 7, 2008 | Expires: January 6, 2010 | |||
| Sieve Extension: Externally Stored Lists | Sieve Extension: Externally Stored Lists | |||
| draft-melnikov-sieve-external-lists-01 | draft-melnikov-sieve-external-lists-02 | |||
| Status of this Memo | Status of this Memo | |||
| By submitting this Internet-Draft, each author represents that any | This Internet-Draft is submitted to IETF in full conformance with the | |||
| applicable patent or other IPR claims of which he or she is aware | provisions of BCP 78 and BCP 79. | |||
| have been or will be disclosed, and any of which he or she becomes | ||||
| aware will be disclosed, in accordance with Section 6 of BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
| other groups may also distribute working documents as Internet- | other groups may also distribute working documents as Internet- | |||
| Drafts. | Drafts. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
| http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| This Internet-Draft will expire on January 7, 2008. | This Internet-Draft will expire on January 6, 2010. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The IETF Trust (2007). | Copyright (c) 2009 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | ||||
| This document is subject to BCP 78 and the IETF Trust's Legal | ||||
| Provisions Relating to IETF Documents in effect on the date of | ||||
| publication of this document (http://trustee.ietf.org/license-info). | ||||
| Please review these documents carefully, as they describe your rights | ||||
| and restrictions with respect to this document. | ||||
| Abstract | Abstract | |||
| Sieve scripting language can be used for implementing of | Sieve scripting language can be used for implementing of | |||
| whitelisting, blacklisting and personal distribution lists. | whitelisting, blacklisting and personal distribution lists. | |||
| Currently this requires that all members of such lists be hardcoded | Currently this requires that all members of such lists be hardcoded | |||
| in the script itself. Whenever a member of such list is added or | in the script itself. Whenever a member of such list is added or | |||
| deleted, the script needs to be updated and possibly uploaded to a | deleted, the script needs to be updated and possibly uploaded to a | |||
| mail server. | mail server. | |||
| skipping to change at page 2, line 26 ¶ | skipping to change at page 2, line 31 ¶ | |||
| 1.1. Conventions used in this document . . . . . . . . . . . . . . 3 | 1.1. Conventions used in this document . . . . . . . . . . . . . . 3 | |||
| 2. Extlists extension . . . . . . . . . . . . . . . . . . . . . 3 | 2. Extlists extension . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2.1. Capability Identifier . . . . . . . . . . . . . . . . . . . . 3 | 2.1. Capability Identifier . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2.2. :list tagged argument to the 'address', 'header' and | 2.2. :list tagged argument to the 'address', 'header' and | |||
| 'envelope' tests . . . . . . . . . . . . . . . . . . . . . . 3 | 'envelope' tests . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2.3. :list tagged argument to the 'redirect' action . . . . . . . 4 | 2.3. :list tagged argument to the 'redirect' action . . . . . . . 4 | |||
| 2.4. Syntax of an externally stored list name . . . . . . . . . . 4 | 2.4. Syntax of an externally stored list name . . . . . . . . . . 4 | |||
| 2.5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2.5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. Security Considerations . . . . . . . . . . . . . . . . . . . 4 | 3. Security Considerations . . . . . . . . . . . . . . . . . . . 5 | |||
| 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5 | 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 5 | 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 6. References . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 6. References . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 6.1. Normative References . . . . . . . . . . . . . . . . . . . . 6 | 6.1. Normative References . . . . . . . . . . . . . . . . . . . . 6 | |||
| 6.2. Informative References . . . . . . . . . . . . . . . . . . . 6 | 6.2. Informative References . . . . . . . . . . . . . . . . . . . 7 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . 6 | Author's Address . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| Intellectual Property and Copyright Statements . . . . . . . 7 | ||||
| 1. Introduction | 1. Introduction | |||
| This document specified an extension to the Sieve language defined by | This document specified an extension to the Sieve language defined by | |||
| [Sieve] for checking membership in an externally stored list or for | [Sieve] for checking membership in an externally stored list or for | |||
| sending messages to a list of recipients stored externally to the | sending messages to a list of recipients stored externally to the | |||
| Sieve script. | Sieve script. | |||
| This extension adds a new tagged argument to the "header" and | This extension adds a new tagged argument to the "header" and | |||
| "envelope" tests, and to the "redirect" action [Sieve]. | "envelope" tests, and to the "redirect" action [Sieve]. | |||
| skipping to change at page 4, line 23 ¶ | skipping to change at page 4, line 23 ¶ | |||
| The "redirect" action with the ":list" argument is used to send the | The "redirect" action with the ":list" argument is used to send the | |||
| message to one or more email address stored in the externally stored | message to one or more email address stored in the externally stored | |||
| list 'ext-list-name'. This variant of the redirect command can be | list 'ext-list-name'. This variant of the redirect command can be | |||
| used to implement a personal distribution list. | used to implement a personal distribution list. | |||
| See Section 2.4 for the detailed description of syntax used for | See Section 2.4 for the detailed description of syntax used for | |||
| naming externally stored lists. | naming externally stored lists. | |||
| 2.4. Syntax of an externally stored list name | 2.4. Syntax of an externally stored list name | |||
| [[anchor5: Specify ABNF. Dave Cridland has suggested to use a | A name of an externally stored list is always an absolute URI. | |||
| leading ':' for "opaque" identifiers.]] | Implementations might find URL such as [LDAP], [CardDAV] URL), or | |||
| [TAG-URI] to be useful for naming external lists. | ||||
| A name of an externally stored list is either an absolute URL (e.g. | The "tag" URI scheme can be used to represent opaque, but user | |||
| an [LDAP], [ACAP] or [CardDAV] URL) or an opaque identifier. | friendlier identifiers. Resolution of such identifiers is going to | |||
| Interpretation of opaque identifiers is left up to implementations. | be implementation specific and it can help in hiding the complexity | |||
| They can hide complexity of an implementation from end users. For | of an implementation from end users. For example, an implementation | |||
| example, an implementation can provide a web interface for managing | can provide a web interface for managing lists of users stored in | |||
| lists of users stored in LDAP. Requiring users to know syntax for | LDAP. Requiring users to know generic LDAP URL syntax is not going | |||
| LDAP URLs is just not very practical. | to be very practical, due to its complexity. However such | |||
| implementation can use a fixed tag URI prefix such as "tag: | ||||
| example.com,<date>:" (where <date> can be, for example, a date | ||||
| generated once on installation of the web interface and left | ||||
| untouched upon upgrades) instead and the prefix doesn't even need to | ||||
| be shown to end users. | ||||
| 2.5. Examples | 2.5. Examples | |||
| Example 1: | Example 1: | |||
| require ["extlists"]; | require ["extlists"]; | |||
| # Submission from list members is sent to all members | # Submission from list members is sent to all members | |||
| if allof (envelope :detail :list "to" "mylist", | if allof (envelope :detail :list "to" | |||
| header :contains :list "from" "mylist") { | "tag:example.com,2009-05-28:mylist", | |||
| redirect :list "mylist"; | header :contains :list "from" | |||
| "tag:example.com,2009-05-28:mylist") { | ||||
| redirect :list "tag:example.com,2009-05-28:mylist"; | ||||
| } | } | |||
| 3. Security Considerations | 3. Security Considerations | |||
| Security considerations are discussed in [Sieve]. | Security considerations related to the "envelope"/"header" tests and | |||
| "redirect" action discussed in [Sieve] also apply to this document. | ||||
| [[anchor6: Describe risks of external lists including thousands of | A failure to retrieve data due to the server storing the external | |||
| recipients.]] [[anchor7: Describe how to handle outages of servers | list membership being down or otherwise inaccessible may alter the | |||
| providing access to an externally stored list.]] | result of Sieve processing. So implementations SHOULD treat a | |||
| temporary failure to retrieve or verify external list membership in | ||||
| the same manner as a temporary failure to retrieve a Sieve script. | ||||
| For example, if the Sieve script is stored in the Lightweight | ||||
| Directory Access Protocol (LDAP) and the script can't be retrieved | ||||
| when a message is processed, then the agent performing Sieve | ||||
| processing can, for example, assume that the script doesn't exist or | ||||
| delay message delivery until the script can be retrieved | ||||
| successfully. External list memberships should be treated as if they | ||||
| are a part of the script itself, so a temporary failure to retrieve | ||||
| them should be handled in the same way as a temporary failure to | ||||
| retrieve the Sieve script itself. | ||||
| Protocols/APIs used to retrieve/verify external list membership MUST | ||||
| provide at least the same level of confidentiality as protocols/APIs | ||||
| used to retrieve Sieve scripts. For example, if Sieve scripts are | ||||
| retrieved using LDAP secured with Transport Layer Security (TLS) | ||||
| encryption, then the protocol used to retrieve external list | ||||
| membership must use a comparable mechanism for providing connection | ||||
| confidentiality. In particular, the protocol used to retrieve | ||||
| external list membership must not be lacking encryption. | ||||
| Implementations of this extensions should keep in mind that matching | Implementations of this extensions should keep in mind that matching | |||
| values against an externally stored list can be IO and/or CPU | values against an externally stored list can be IO and/or CPU | |||
| intensive. This can be used to deny service to the mailserver and/or | intensive. This can be used to deny service to the mailserver and/or | |||
| to servers providing access to externally stored mailing lists. A | to servers providing access to externally stored mailing lists. A | |||
| naive implementation, such as the one that tries to retrieve content | naive implementation, such as the one that tries to retrieve content | |||
| of the whole list to perform matching can make this worse. But note | of the whole list to perform matching can make this worse. But note | |||
| that many protocols that can be used for accessing externally stored | that many protocols that can be used for accessing externally stored | |||
| lists support flexible searching facilities that can be used to | lists support flexible searching facilities that can be used to | |||
| minimize network traffic. For example LDAP allows for search | minimize network traffic and load on the directory service. For | |||
| filters. | example LDAP allows for search filters. | |||
| In order to avoid mailbombs, when redirecting a message to an | Many organizations support external lists with thousands of | |||
| externally stored mailing list, implementations SHOULD enforce limits | recipients. In order to avoid mailbombs, when redirecting a message | |||
| on the number of recipients and/or on domains to which such | to an externally stored mailing list, implementations SHOULD enforce | |||
| limits on the number of recipients and/or on domains to which such | ||||
| recipients belong. | recipients belong. | |||
| 4. IANA Considerations | 4. IANA Considerations | |||
| The following template specifies the IANA registration of the notify | The following template specifies the IANA registration of the notify | |||
| Sieve extension specified in this document: | Sieve extension specified in this document: | |||
| To: iana@iana.org | To: iana@iana.org | |||
| Subject: Registration of new Sieve extension | Subject: Registration of new Sieve extension | |||
| Capability name: extlists | Capability name: extlists | |||
| skipping to change at page 6, line 10 ¶ | skipping to change at page 6, line 38 ¶ | |||
| Thanks to Alexandros Vellis, Barry Leiba, Nigel Swinson, Kjetil | Thanks to Alexandros Vellis, Barry Leiba, Nigel Swinson, Kjetil | |||
| Torgrim Homme, Dave Cridland, Cyrus Daboo, Pete Resnick for ideas, | Torgrim Homme, Dave Cridland, Cyrus Daboo, Pete Resnick for ideas, | |||
| comments and suggestions. | comments and suggestions. | |||
| 6. References | 6. References | |||
| 6.1. Normative References | 6.1. Normative References | |||
| [ABNF] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [ABNF] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", RFC 4234, October 2005. | Specifications: ABNF", RFC 5234, January 2008. | |||
| [Kwds] Bradner, S., "Key words for use in RFCs to Indicate | [Kwds] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", RFC 2119, March 1997. | Requirement Levels", RFC 2119, March 1997. | |||
| [Sieve] Guenther, P. and T. Showalter, "Sieve: An Email Filtering | [Sieve] Guenther, P. and T. Showalter, "Sieve: An Email Filtering | |||
| Language", work in progress, draft-ietf-sieve-3028bis, | Language", RFC 5228, January 2008. | |||
| August 2006. | ||||
| [URI] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [URI] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
| Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
| RFC 3986, January 2005. | RFC 3986, January 2005. | |||
| 6.2. Informative References | 6.2. Informative References | |||
| [ACAP] Newman, C. and J. Myers, "ACAP -- Application | [ACAP] Newman, C. and J. Myers, "ACAP -- Application | |||
| Configuration Access Protocol", RFC 2244, November 1997. | Configuration Access Protocol", RFC 2244, November 1997. | |||
| [CardDAV] Daboo, C., "vCard Extensions to WebDAV (CardDAV)", work in | [CardDAV] Daboo, C., "vCard Extensions to WebDAV (CardDAV)", work in | |||
| progress, draft-daboo-carddav, May 2007. | progress, draft-daboo-carddav, May 2007. | |||
| [LDAP] Zeilenga, K., "Lightweight Directory Access Protocol | [LDAP] Zeilenga, K., "Lightweight Directory Access Protocol | |||
| (LDAP): Technical Specification Road Map", RFC 4510, | (LDAP): Technical Specification Road Map", RFC 4510, | |||
| June 2006. | June 2006. | |||
| [TAG-URI] Kindberg, T. and S. Hawke, "The 'tag' URI Scheme", | ||||
| RFC 4151, October 2005. | ||||
| Author's Address | Author's Address | |||
| Alexey Melnikov | Alexey Melnikov | |||
| Isode Limited | Isode Limited | |||
| 5 Castle Business Village | 5 Castle Business Village | |||
| 36 Station Road | 36 Station Road | |||
| Hampton, Middlesex TW12 2BX | Hampton, Middlesex TW12 2BX | |||
| UK | UK | |||
| Email: Alexey.Melnikov@isode.com | Email: Alexey.Melnikov@isode.com | |||
| Full Copyright Statement | ||||
| Copyright (C) The IETF Trust (2007). | ||||
| This document is subject to the rights, licenses and restrictions | ||||
| contained in BCP 78, and except as set forth therein, the authors | ||||
| retain all their rights. | ||||
| This document and the information contained herein are provided on an | ||||
| "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | ||||
| OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND | ||||
| THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS | ||||
| OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF | ||||
| THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | ||||
| Intellectual Property | ||||
| The IETF takes no position regarding the validity or scope of any | ||||
| Intellectual Property Rights or other rights that might be claimed to | ||||
| pertain to the implementation or use of the technology described in | ||||
| this document or the extent to which any license under such rights | ||||
| might or might not be available; nor does it represent that it has | ||||
| made any independent effort to identify any such rights. Information | ||||
| on the procedures with respect to rights in RFC documents can be | ||||
| found in BCP 78 and BCP 79. | ||||
| Copies of IPR disclosures made to the IETF Secretariat and any | ||||
| assurances of licenses to be made available, or the result of an | ||||
| attempt made to obtain a general license or permission for the use of | ||||
| such proprietary rights by implementers or users of this | ||||
| specification can be obtained from the IETF on-line IPR repository at | ||||
| http://www.ietf.org/ipr. | ||||
| The IETF invites any interested party to bring to its attention any | ||||
| copyrights, patents or patent applications, or other proprietary | ||||
| rights that may cover technology that may be required to implement | ||||
| this standard. Please address the information to the IETF at | ||||
| ietf-ipr@ietf.org. | ||||
| Acknowledgment | ||||
| Funding for the RFC Editor function is provided by the IETF | ||||
| Administrative Support Activity (IASA). | ||||
| End of changes. 21 change blocks. | ||||
| 39 lines changed or deleted | 75 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/ | ||||