RFC 3894

Sieve Extension: Copying Without Side Effects

๐Ÿ“… published October 2004, from ietf

Sieve Extension: Copying Without Side Effects ๐ŸŽ€

RFC 3894, Network Working Group, dated October 2004. It's written by Jutta Degener of Sendmail, Inc. and filed as a Standards Track document. The header doesn't list anything it obsoletes or updates. ๐Ÿ’–


Status of this Memo ๐Ÿ“œ

This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "Internet Official Protocol Standards" (STD 1) for the standardization state and status of this protocol. Distribution of this memo is unlimited. ๐ŸŒธ

Copyright (C) The Internet Society (2004). ๐Ÿฆ‹

Abstract โœจ

okay so the Sieve scripting language lets users control what happens to their incoming e-mail ๐Ÿ’Œ By default, a message that a Sieve script processes gets saved in the owner's "inbox". Actions like "fileinto" and "redirect" cancel that default behavior ๐Ÿ™…โ€โ™€๏ธ

This document defines a new keyword parameter, :copy, for use with the Sieve "fileinto" and "redirect" actions. Adding :copy to an action stops it from cancelling the default "inbox" save. The result is that users can add commands to an existing script without changing what the rest of the script does. It's giving clean edits, no cap ๐Ÿซถ

1. Introduction ๐Ÿ’…

The Sieve scripting language [SIEVE] lets users control how their incoming e-mail is handled and disposed of ๐Ÿ“ฌ Two commands people use all the time are "fileinto" (saving into a local message store, such as an IMAP server) and "redirect" (forwarding to another e-mail address). Both of them cancel the Sieve default behavior of saving into the user's "inbox" ๐Ÿ˜ญ

But some users want to forward an extra copy of a message to another address for safekeeping, or save a copy in a folder. They want that to happen in addition to regular delivery, and the regular delivery shouldn't be affected by the copy. Literally the most normal request ever ๐Ÿฅบ

If saving an extra copy is all the user wanted to do, this would do the job:

fileinto "unfiltered";
keep;

The keep command does explicitly what the cancelled default behavior did. But the explicit keep is a bad stand-in for the implicit keep once more processing follows:

fileinto "unfiltered";
keep;

if header "Subject" "MAKE MONEY FAST!!!"
{
        discard;
}

In this example, the discard does nothing against the explicit keep. The discarded message still ends up in the user's inbox ๐Ÿ’€

It's possible to write Sieve code that perfectly expresses what a user wants. The problem is that the code gets unwieldy fast, because it has to keep track of the state that the implicit keep would have had without the fileinto or redirect command ๐Ÿ˜ตโ€๐Ÿ’ซ

This extension makes life easier for user interface designers and script writers by letting them express the "copy" semantics directly. Main character energy ๐Ÿ‘‘

2. Conventions used ๐Ÿ“

The conventions for notation are the same as in [SIEVE] section 1.1. That includes the use of [KEYWORDS] and the "Syntax:" label for defining action and tagged argument syntax ๐Ÿงš

The capability string for the extension defined in this document is "copy" ๐ŸŒˆ

3. ":copy" extension to the "fileinto" and "redirect" commands ๐ŸŽ€

Syntax:

"fileinto" [":copy"] <folder: string>
"redirect" [":copy"] <address: string>

If the optional :copy keyword is specified with "fileinto" or "redirect", the tagged command does not cancel the implicit keep. Instead, it just files or redirects a copy in addition to whatever else is happening to the message โœจ

Example:

require ["copy", "fileinto"];
fileinto :copy "incoming";

# ... more processing follows ...

4. Security Considerations ๐Ÿ”

ngl this section is serious, bestie ๐Ÿ˜ค

The copy extension makes it easier to eavesdrop on a user's message stream without the user noticing. This was technically possible before, if an attacker gained read/write access to a user's Sieve scripts. But now an attacker doesn't need to parse a script in order to modify it. Write access to Sieve scripts must be protected as strongly as read/write access to e-mail, for example by using secure directory protocols such as correctly parameterized LDAP over TLS [LDAP] ๐Ÿ›ก๏ธ

Organizations that want to monitor their users' e-mail traffic must learn their local data protection laws before creating stores of old e-mail traffic without control over, or perhaps even knowledge of, the senders or intended recipients ๐Ÿ™ˆ

Organizations that legally use redirect :copy to eavesdrop on correspondence (for example, by keeping a log to answer questions about insider trading at a later time) can avoid future problems by setting users' privacy expectations correctly ๐Ÿ’œ

5. IANA Considerations ๐Ÿ—‚๏ธ

The following template specifies the IANA registration of the "copy" Sieve extension specified in this document ๐Ÿ’–

To: iana@iana.org
Subject: Registration of new Sieve extension

Capability name: copy
Capability keyword: copy
Capability arguments: N/A
Standards Track: RFC 3894
Person and email address to contact for further information:

   Jutta Degener
   Sendmail, Inc.
   6425 Christie Ave, 4th Floor
   Emeryville, CA 94608

   Email: jutta@sendmail.com

This information has been added to the list of Sieve extensions given on http://www.iana.org/assignments/sieve-extensions ๐ŸŒธ

6. Acknowledgments ๐Ÿซถ

Thanks to Eric Allman, Ned Freed, Will Lee, Nigel Swinson, and Rand Wacker for corrections and comments. Iconic group chat ๐Ÿ“

7. References ๐Ÿ“š

7.1. Normative References

[KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

[SIEVE] Showalter, T., "Sieve: A Mail Filtering Language", RFC 3028, January 2001.

7.2. Informative References

[LDAP] Wahl, M., Alvestrand, H., Hodges, J., and R. Morgan, "Authentication Methods for LDAP", RFC 2829, May 2000.

Author's Address ๐Ÿ“ฎ

Jutta Degener Sendmail, Inc. 6425 Christie Ave, 4th Floor Emeryville, CA 94608

EMail: jutta@sendmail.com

Copyright (C) The Internet Society (2004).

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/S HE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY 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 IETF's procedures with respect to rights in IETF Documents can be found in BCP 78 and BCP 79.

Copies of IPR disclosures made to the IETF Secretariat, 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.

Acknowledgement ๐Ÿ’œ

Funding for the RFC Editor function is currently provided by the Internet Society. ๐ŸŒˆ

๐Ÿ“ฆ where this page comes from