One document matched: draft-ietf-sieve-external-lists-02.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>
<!-- !ENTITY rfc2119 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml' -->
<!-- ?xml-stylesheet type='text/xsl' href='http://xml.resource.org/authoring/rfc2629.xslt' ? -->
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes" ?>
<?rfc tocompact="no" ?>
<?rfc tocindent="no" ?>
<?rfc comments="yes" ?>
<?rfc inline="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no" ?>
<?rfc strict="yes" ?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std"
ipr="trust200902"
docName="draft-ietf-sieve-external-lists-02">
<front>
<title>Sieve Extension: Externally Stored Lists</title>
<author initials='A.' surname="Melnikov" fullname="Alexey Melnikov">
<organization>Isode Limited</organization>
<address>
<postal>
<street>5 Castle Business Village</street>
<street>36 Station Road</street>
<city>Hampton</city>
<region>Middlesex</region>
<code>TW12 2BX</code>
<country>UK</country>
</postal>
<email>Alexey.Melnikov@isode.com</email>
</address>
</author>
<author initials='B.' surname="Leiba" fullname="Barry Leiba">
<organization>Huawei Technologies</organization>
<address>
<phone>+1 646 827 0648</phone>
<email>barryleiba@computer.org</email>
<uri>http://internetmessagingtechnology.org/</uri>
</address>
</author>
<date year="2010"/>
<area>Applications</area>
<workgroup>Sieve Working Group</workgroup>
<keyword>Sieve</keyword>
<keyword>external list</keyword>
<abstract>
<t>
The Sieve scripting language can be used to implement whitelisting,
blacklisting, personal distribution lists, and other sorts of list matching.
Currently, this requires
that all members of such lists be hardcoded in the script itself.
Whenever a member of a list is added or deleted, the script needs
to be updated and possibly uploaded to a mail server.
</t>
<t>
This document defines a Sieve extension for accessing externally stored
lists -- lists whose members are stored externally to the script, such as
using LDAP (RFC 4510), ACAP (RFC 2244), or relational databases.
</t>
</abstract>
<note title="ToDo">
<t>
<list style="symbols">
<t>
Need a way to advertise supported URI schemas in ManageSieve and ihave.
From IETF 77 minutes:
"Can use ihave to test if a URI is valid, both that the scheme is supported and
that the URI can be retrieved/queried."
</t>
</list>
</t>
</note>
</front>
<middle>
<section anchor="intro" title="Introduction">
<t>
This document specifies an extension to the Sieve language <xref target="Sieve"/>
for checking membership in an external list
or for redirecting messages to an external list of recipients.
An "external list" is a list whose members are stored externally to the Sieve script,
such as using LDAP <xref target="LDAP"/>, ACAP <xref target="ACAP"/>,
or relational databases.
</t>
<t>
This extension adds a new match type to apply to supported tests,
and a new tagged argument to the "redirect" action.
</t>
<section title="Conventions used in this document">
<t>
Conventions for notations are as in <xref target="Sieve"/> section 1.1, including
the use of <xref target="ABNF"/>.
</t>
<t>
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in <xref target="Kwds"/>.
</t>
</section>
</section>
<section title="Extlists extension">
<section anchor="capability" title="Capability Identifier">
<t>
The capability string associated with the extension defined in this
document is "extlists".
</t>
</section>
<section title=':list match type for supported tests'>
<t>ABNF:
<list style="hanging" hangIndent="8">
<t hangText=" MATCH-TYPE">=/ ":list"
<vspace />; only valid for supported tests
</t>
</list>
</t>
<t>
The new ":list" match type changes the interpretation
of the "key-list" parameter (the second parameter) to
supported tests.
When the match type is ":list", the key-list becomes a list of names of externally
stored lists. The external lists are queried, perhaps through a list-specific
mechanism, and the test evaluates to "true" if any of the specified values
matches any member of one or more of the lists.
</t>
<t>
Implementations MUST support "address", "envelope" and "header" tests.
Implementations that include the Variables extension <xref target="Variables" />
MUST also support "string" tests.
</t>
<t>
Implementations MAY support other tests but MUST raise an error
(which SHOULD be a compile-time error, but MAY be a runtime error)
when a script uses :list with a test for which it is not supported.
To maintain interoperability, other tests that can be used with :list
SHOULD be documented in a
specification that defines a capability string that can be tested (in a
"require" statement, or using ihave <xref target="Ihave" />).
</t>
<t>
For example, testing ':header ["to", "cc"]' against a list would cause each
"to" and "cc" value, ignoring leading and trailing whitespace, to be queried.
When any value is found to belong to the list, the queries stop and the test
returns "true". If no value belongs to the list, the test returns "false".
</t>
<t>
For some lists, the Sieve engine might directly retrieve the list and make its
own comparison. Other lists might not work that way -- they might provide a way
to ask if a value is in the list, but not permit retrieval of the list itself.
It is up to the Sieve implementation to understand how to interact with any
supported list. If the Sieve engine is permanently unable to query the list
(perhaps because the list doesn't support the required operation), the test
MUST result in a runtime error in the Sieve script.
</t>
<t>
See <xref target="list-name-syntax"/> for the detailed description
of syntax used for naming externally stored lists.
</t>
</section>
<section title=':list tagged argument to the "redirect" action'>
<t>
<list style="hanging" hangIndent="8">
<t hangText="Usage:">
redirect :list <ext-list-name: string>
</t>
</list>
</t>
<t>
The "redirect" action with the ":list" argument is used to send
the message to one or more email addresses stored in the externally stored
list 'ext-list-name'. This variant of the redirect command can be used
to implement a personal distribution list.
</t>
<t>
For this feature to work, one of the following conditions has to be true:
<list style="numbers">
<t>
The list resolves to a list of email addresses, and the Sieve
engine is able to enumerate those addresses.
</t>
<t>
The list handler is able to take care of the redirection on
behalf of the Sieve engine.
</t>
</list>
</t>
<t>
In cases where, for example, a list contains hashed email address values or
an email address pattern ("sz*@example.com", "*+ietf@example.net"),
the Sieve engine will not be able to redirect to that list, and responsibility
must pass to the list handler.
</t>
<t>
If neither the Sieve engine nor the list handler
can enumerate (or iterate) the list, or the list
does not resolve to email addresses, the situation
MUST result in a runtime error in the Sieve script.
</t>
<t>
See <xref target="list-name-syntax"/> for the detailed description
of syntax used for naming externally stored lists.
</t>
</section>
<section anchor="list-name-syntax" title='Syntax of an externally stored list name'>
<t>
A name of an externally stored list is always an absolute URI <xref target="URI"/>.
Implementations might find URLs such as <xref target="LDAP"/>,
<xref target="CardDAV"/>, or <xref target="TAG-URI"/> to be useful for naming
external lists.
</t>
<t>
The "tag" URI scheme <xref target="TAG-URI"/> MUST be supported, and
can be used to represent opaque,
but user friendlier identifiers. Resolution of such identifiers is going
to be implementation specific and it can help in hiding the complexity of
an implementation from end users. For example, an implementation can
provide a web interface for managing lists of users stored in LDAP.
Requiring users to know generic LDAP URL syntax might not be very
practical, due to its complexity. An implementation can instead 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)
and the prefix doesn't even need to be shown to end users.
</t>
</section>
<section anchor="examples" title='Examples'>
<t>
Example 1 uses the "envelope" option <xref target="Sieve"/>
and the "subaddress" extension <xref target="Subaddress"/>:
<figure>
<artwork><![CDATA[
require ["extlists", "envelope", "subaddress"];
# Submission from list members is sent to all members
if allof (envelope :detail :list "to"
"tag:example.com,2009-05-28:mylist",
header :list "from"
"tag:example.com,2009-05-28:mylist") {
redirect :list "tag:example.com,2009-05-28:mylist";
}
]]></artwork>
</figure>
</t>
</section>
</section>
<section anchor="security" title="Security Considerations">
<t>
Security considerations related to the "address"/"envelope"/"header" tests and
"redirect" action discussed in <xref target="Sieve"/> also apply to this document.
</t>
<t>
External list memberships ought to be treated as if they are
an integral part of the script,
so a temporary failure to access an external list
SHOULD be handled in the same way as a temporary failure to retrieve
the Sieve script itself.
</t>
<t>
For example, if the Sieve script is stored in the
Lightweight Directory Access Protocol <xref target="LDAP"/> and the script
can't be retrieved when a message is processed (perhaps the LDAP server is
unavailable), then the Sieve engine
might delay message delivery until the script can be retrieved successfully.
Similarly, if an external list is stored in LDAP and that LDAP server is
unavailable, the Sieve engine would take the same action -- delay message delivery
and try again later.
</t>
<t>
Protocols/APIs used to retrieve/verify external list membership MUST provide
an appropriate level of confidentiality and authentication.
Usually, that will be at least the same level of confidentiality as
protocols/APIs used to retrieve Sieve scripts, but only the implementation
(or deployment) will know what is appropriate.
There's a difference, for example, between making an LDAP
request on a closed LAN that's only used for trusted servers
(it may be that neither encryption nor authentication is needed),
on a firewalled LAN internal to a company
(it might be OK to skip encryption, depending upon policy),
and on the open Internet
(encryption and authentication are probably both required).
It also matters whether the list being accessed is private or public
(no encryption or authentication may be needed for public data, even on the
Internet).
</t>
<t>
Implementations of this extension should keep in mind that
matching 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 to servers providing access to externally stored mailing lists.
A naïve implementation, such as the one that tries to retrieve content
of the whole list to perform matching can make this worse.
</t>
<t>
But note that many protocols that can be used for accessing externally
stored lists support flexible searching features that can be used
to minimize network traffic and load on the directory service.
For example, LDAP allows for search filters.
Implementations SHOULD use such features whenever they can.
</t>
<t>
Many organizations support external lists with thousands of recipients.
In order to avoid mailbombs when redirecting a message to
an externally stored list, implementations SHOULD enforce
limits on the number of recipients and/or on domains to which such
recipients belong.
</t>
</section>
<section anchor="iana" title="IANA Considerations">
<t>
The following template specifies the IANA registration of the
notify Sieve extension specified in this document:
</t>
<t>
To: iana@iana.org
<vspace/>
Subject: Registration of new Sieve extension
<vspace/>
Capability name: extlists
<vspace/>
Description: adds the ':list' match type to certain Sieve tests,
and the ':list' argument to the 'redirect' action.
The ':list' match type changes tests to match
values against values stored in one or more externally stored
lists. The ':list' argument to the redirect action changes
the redirect action to forward the message to email addresses
stored in the externally stored list.
<vspace/>
RFC number: this RFC
<vspace/>
Contact address:
<vspace/>
The Sieve discussion list <sieve@ietf.org>
</t>
<t>
This information should be added to the list of sieve extensions
given on http://www.iana.org/assignments/sieve-extensions.
</t>
</section>
<section anchor="acknowledgements" title="Acknowledgements">
<t>
Thanks to Alexandros Vellis, Nigel Swinson, Ned Freed,
Kjetil Torgrim Homme, Dave Cridland, Cyrus Daboo, Pete Resnick,
and Robert Burrell Donkin
for ideas, comments and suggestions.
</t>
</section>
</middle>
<back>
<references title="Normative References">
<reference anchor="Kwds">
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials="S." surname="Bradner" fullname="Scott Bradner">
<organization>Harvard University</organization>
</author>
<date month="March" year="1997" />
</front>
<seriesInfo name="RFC" value="2119" />
</reference>
<reference anchor="ABNF">
<front>
<title>Augmented BNF for Syntax Specifications: ABNF</title>
<author initials="D." surname="Crocker" fullname="Dave Crocker" role="editor">
<organization>Internet Mail Consortium</organization>
</author>
<author initials="P." surname="Overell" fullname="Paul Overell">
<organization>Demon Internet Ltd.</organization>
</author>
<date month="January" year="2008" />
</front>
<seriesInfo name="RFC" value="5234" />
</reference>
<reference anchor="Sieve">
<front>
<title>Sieve: An Email Filtering Language</title>
<author initials="P." surname="Guenther" fullname="Philip Guenther">
<organization>Sendmail, Inc.</organization>
</author>
<author initials="T." surname="Showalter" fullname="Tim Showalter">
<organization />
</author>
<date month="January" year="2008" />
</front>
<seriesInfo name="RFC" value="5228" />
</reference>
<reference anchor="URI">
<front>
<title abbrev="URI Generic Syntax">Uniform Resource Identifier (URI): Generic Syntax</title>
<author initials="T." surname="Berners-Lee" fullname="Tim Berners-Lee">
<organization abbrev="W3C/MIT">World Wide Web Consortium</organization>
</author>
<author initials="R." surname="Fielding" fullname="Roy T. Fielding">
<organization abbrev="Day Software">Day Software</organization>
</author>
<author initials="L." surname="Masinter" fullname="Larry Masinter">
<organization abbrev="Adobe Systems">Adobe Systems Incorporated</organization>
</author>
<date year="2005" month="January"/>
</front>
<seriesInfo name="STD" value="66"/>
<seriesInfo name="RFC" value="3986"/>
<format type="TXT" octets="141811" target="ftp://ftp.isi.edu/in-notes/rfc3986.txt"/>
<format type="HTML" octets="200858" target="http://xml.resource.org/public/rfc/html/rfc3986.html"/>
<format type="XML" octets="165759" target="http://xml.resource.org/public/rfc/xml/rfc3986.xml"/>
</reference>
<reference anchor='TAG-URI'>
<front>
<title>The 'tag' URI Scheme</title>
<author initials='T.' surname='Kindberg' fullname='T. Kindberg'>
<organization /></author>
<author initials='S.' surname='Hawke' fullname='S. Hawke'>
<organization /></author>
<date year='2005' month='October' />
<abstract>
<t>This document describes the "tag" Uniform Resource Identifier (URI) scheme. Tag URIs (also known as "tags") are designed to be unique across space and time while being tractable to humans. They are distinct from most other URIs in that they have no authoritative resolution mechanism. A tag may be used purely as an entity identifier. Furthermore, using tags has some advantages over the common practice of using "http" URIs as identifiers for non-HTTP-accessible resources. This memo provides information for the Internet community.</t>
</abstract>
</front>
<seriesInfo name='RFC' value='4151' />
<format type='TXT' octets='22555' target='ftp://ftp.isi.edu/in-notes/rfc4151.txt' />
</reference>
</references>
<references title="Informative References">
<reference anchor="ACAP">
<front>
<title abbrev="ACAP">ACAP -- Application Configuration Access Protocol</title>
<author initials="C." surname="Newman" fullname="Chris Newman">
<organization>Innosoft</organization>
</author>
<author initials="J. G." surname="Myers" fullname="John G. Myers">
<organization>Netscape</organization>
</author>
<date year="1997" month="November"/>
</front>
<seriesInfo name="RFC" value="2244"/>
<format type="TXT" target="ftp://ftp.isi.edu/in-notes/rfc2244.txt"/>
</reference>
<reference anchor="LDAP">
<front>
<title>Lightweight Directory Access Protocol (LDAP): Technical Specification Road Map</title>
<author initials="K." surname="Zeilenga" fullname="K. Zeilenga">
<organization/>
</author>
<date year="2006" month="June"/>
</front>
<seriesInfo name="RFC" value="4510"/>
<format type="TXT" octets="12354" target="ftp://ftp.isi.edu/in-notes/rfc4510.txt"/>
</reference>
<reference anchor="Variables">
<front>
<title>Sieve Email Filtering: Variables Extension</title>
<author initials="K." surname="Homme" fullname="Kjetil T. Homme">
<organization>University of Oslo</organization>
</author>
<date month="January" year="2008" />
</front>
<seriesInfo name='RFC' value='5229' />
</reference>
<reference anchor="Subaddress">
<front>
<title>Sieve Email Filtering: Subaddress Extension</title>
<author initials="K." surname="Murchison" fullname="Ken Murchison">
<organization>Carnegie Mellon University</organization>
</author>
<date month="January" year="2008" />
</front>
<seriesInfo name='RFC' value='5233' />
</reference>
<reference anchor="Ihave">
<front>
<title>Sieve Email Filtering: Ihave Extension</title>
<author initials="N." surname="Freed" fullname="Ned Freed">
<organization>Sun Microsystems</organization>
</author>
<date month="March" year="2009" />
</front>
<seriesInfo name='RFC' value='5463' />
</reference>
<reference anchor="CardDAV">
<front>
<title>vCard Extensions to WebDAV (CardDAV)</title>
<author initials="C." surname="Daboo" fullname="Cyrus Daboo">
<organization>Apple</organization>
</author>
<date month="November" year="2009" />
</front>
<seriesInfo name="work in progress," value="draft-ietf-vcarddav-carddav" />
</reference>
</references>
</back>
</rfc>
| PAFTECH AB 2003-2026 | 2026-04-24 09:00:05 |