From 84fab47cc4a36eec99cbb3ca7d0fc87ed34efacd Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Sun, 10 Aug 2008 14:43:06 +0200
Subject: [PATCH] Installed RFC for the body extension in the doc/rfc
 directory.

---
 doc/rfc/body.rfc5173.txt                      | 563 +++++++++++++++
 .../plugins/body/draft-ietf-sieve-body-07.txt | 679 ------------------
 src/lib-sieve/plugins/body/ext-body.c         |  16 +-
 3 files changed, 571 insertions(+), 687 deletions(-)
 create mode 100644 doc/rfc/body.rfc5173.txt
 delete mode 100644 src/lib-sieve/plugins/body/draft-ietf-sieve-body-07.txt

diff --git a/doc/rfc/body.rfc5173.txt b/doc/rfc/body.rfc5173.txt
new file mode 100644
index 000000000..915724ce7
--- /dev/null
+++ b/doc/rfc/body.rfc5173.txt
@@ -0,0 +1,563 @@
+
+
+
+
+
+
+Network Working Group                                         J. Degener
+Request for Comments: 5173                                   P. Guenther
+Updates: 5229                                             Sendmail, Inc.
+Category: Standards Track                                     April 2008
+
+
+
+                 Sieve Email Filtering: Body Extension
+
+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.
+
+Abstract
+
+   This document defines a new command for the "Sieve" email filtering
+   language that tests for the occurrence of one or more strings in the
+   body of an email message.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Degener & Guenther          Standards Track                     [Page 1]
+
+RFC 5173         Sieve Email Filtering: Body Extension        April 2008
+
+
+1.  Introduction
+
+   The "body" test checks for the occurrence of one or more strings in
+   the body of an email message.  Such a test was initially discussed
+   for the [SIEVE] base document, but was subsequently removed because
+   it was thought to be too costly to implement.
+
+   Nevertheless, several server vendors have implemented some form of
+   the "body" test.
+
+   This document reintroduces the "body" test as an extension, and
+   specifies its syntax and semantics.
+
+2.  Conventions Used in This Document
+
+   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 [KEYWORDS].
+
+   Conventions for notations are as in [SIEVE] Section 1.1, including
+   the use of the "Usage:" label for the definition of text and tagged
+   argument syntax.
+
+   The rules for interpreting the grammar are defined in [SIEVE] and
+   inherited by this specification.  In particular, readers of this
+   document are reminded that according to [SIEVE] Sections 2.6.2 and
+   2.6.3, optional arguments such as COMPARATOR and MATCH-TYPE can
+   appear in any order.
+
+3.  Capability Identifier
+
+   The capability string associated with the extension defined in this
+   document is "body".
+
+4.  Test body
+
+   Usage: "body" [COMPARATOR] [MATCH-TYPE] [BODY-TRANSFORM]
+                <key-list: string-list>
+
+   The body test matches content in the body of an email message, that
+   is, anything following the first empty line after the header.  (The
+   empty line itself, if present, is not considered to be part of the
+   body.)
+
+   The COMPARATOR and MATCH-TYPE keyword parameters are defined in
+   [SIEVE].  As specified in Sections 2.7.1 and 2.7.3 of [SIEVE], the
+   default COMPARATOR is "i;ascii-casemap" and the default MATCH-TYPE is
+   ":is".
+
+
+
+Degener & Guenther          Standards Track                     [Page 2]
+
+RFC 5173         Sieve Email Filtering: Body Extension        April 2008
+
+
+   The BODY-TRANSFORM is a keyword parameter that governs how a set of
+   strings to be matched against are extracted from the body of the
+   message.  If a message consists of a header only, not followed by an
+   empty line, then that set is empty and all "body" tests return false,
+   including those that test for an empty string.  (This is similar to
+   how the "header" test always fails when the named header fields
+   aren't present.)  Otherwise, the transform must be followed as
+   defined below in Section 5.
+
+   Note that the transformations defined here do *not* match against
+   each line of the message independently, so the strings will usually
+   contain CRLFs.  How these can be matched is governed by the
+   comparator and match-type.  For example, with the default comparator
+   of "i;ascii-casemap", they can be included literally in the key
+   strings, or be matched with the "*" or "?" wildcards of the :matches
+   match-type, or be skipped with :contains.
+
+5.  Body Transform
+
+   Prior to matching content in a message body, "transformations" can be
+   applied that filter and decode certain parts of the body.  These
+   transformations are selected by a "BODY-TRANSFORM" keyword parameter.
+
+   Usage: ":raw"
+        / ":content" <content-types: string-list>
+        / ":text"
+
+   The default transformation is :text.
+
+5.1.  Body Transform ":raw"
+
+   The ":raw" transform matches against the entire undecoded body of a
+   message as a single item.
+
+   If the specified body-transform is ":raw", the [MIME] structure of
+   the body is irrelevant.  The implementation MUST NOT remove any
+   transfer encoding from the message, MUST NOT refuse to filter
+   messages with syntactic errors (unless the environment it is part of
+   rejects them outright), and MUST treat multipart boundaries or the
+   MIME headers of enclosed body parts as part of the content being
+   matched against, instead of MIME structures to interpret.
+
+
+
+
+
+
+
+
+
+
+Degener & Guenther          Standards Track                     [Page 3]
+
+RFC 5173         Sieve Email Filtering: Body Extension        April 2008
+
+
+   Example:
+
+        require "body";
+
+        # This will match a message containing the literal text
+        # "MAKE MONEY FAST" in body parts (ignoring any
+        # content-transfer-encodings) or MIME headers other than
+        # the outermost RFC 2822 header.
+
+        if body :raw :contains "MAKE MONEY FAST" {
+                discard;
+        }
+
+5.2.  Body Transform ":content"
+
+   If the body transform is ":content", the MIME parts that have the
+   specified content types are matched against independently.
+
+   If an individual content type begins or ends with a '/' (slash) or
+   contains multiple slashes, then it matches no content types.
+   Otherwise, if it contains a slash, then it specifies a full
+   <type>/<subtype> pair, and matches only that specific content type.
+   If it is the empty string, all MIME content types are matched.
+   Otherwise, it specifies a <type> only, and any subtype of that type
+   matches it.
+
+   The search for MIME parts matching the :content specification is
+   recursive and automatically descends into multipart and
+   message/rfc822 MIME parts.  All MIME parts with matching types are
+   searched for the key strings.  The test returns true if any
+   combination of a searched MIME part and key-list argument match.
+
+   If the :content specification matches a multipart MIME part, only the
+   prologue and epilogue sections of the part will be searched for the
+   key strings, treating the entire prologue and the entire epilogue as
+   separate strings; the contents of nested parts are only searched if
+   their respective types match the :content specification.
+
+   If the :content specification matches a message/rfc822 MIME part,
+   only the header of the nested message will be searched for the key
+   strings, treating the header as a single string; the contents of the
+   nested message body parts are only searched if their content type
+   matches the :content specification.
+
+   For other MIME types, the entire part will be searched as a single
+   string.
+
+
+
+
+
+Degener & Guenther          Standards Track                     [Page 4]
+
+RFC 5173         Sieve Email Filtering: Body Extension        April 2008
+
+
+   (Matches against container types with an empty match string can be
+   useful as tests for the existence of such parts.)
+
+   Example:
+
+        From: Whomever
+        To: Someone
+        Date: Whenever
+        Subject: whatever
+        Content-Type: multipart/mixed; boundary=outer
+
+     &  This is a multi-part message in MIME format.
+     &
+        --outer
+        Content-Type: multipart/alternative; boundary=inner
+
+     &  This is a nested multi-part message in MIME format.
+     &
+        --inner
+        Content-Type: text/plain; charset="us-ascii"
+
+     $  Hello
+     $
+        --inner
+        Content-Type: text/html; charset="us-ascii"
+
+     %  <html><body>Hello</body></html>
+     %
+        --inner--
+     &
+     &  This is the end of the inner MIME multipart.
+     &
+        --outer
+        Content-Type: message/rfc822
+
+     !  From: Someone Else
+     !  Subject: hello request
+
+     $  Please say Hello
+     $
+        --outer--
+     &
+     &  This is the end of the outer MIME multipart.
+
+
+
+
+
+
+
+
+Degener & Guenther          Standards Track                     [Page 5]
+
+RFC 5173         Sieve Email Filtering: Body Extension        April 2008
+
+
+   In the above example, the '&', '$', '%', and '!' characters at the
+   start of a line are used to illustrate what portions of the example
+   message are used in tests:
+
+   - the lines starting with '&' are the ones that are tested when a
+     'body :content "multipart" :contains "MIME"' test is executed.
+
+   - the lines starting with '$' are the ones that are tested when a
+     'body :content "text/plain" :contains "Hello"' test is executed.
+
+   - the lines starting with '%' are the ones that are tested when a
+     'body :content "text/html" :contains "Hello"' test is executed.
+
+   - the lines starting with '$' or '%' are the ones that are tested
+     when a 'body :content "text" :contains "Hello"' test is executed.
+
+   - the lines starting with '!' are the ones that are tested when a
+     'body :content "message/rfc822" :contains "Hello"' test is
+     executed.
+
+   Comparisons are performed on octets.  Implementations decode the
+   content-transfer-encoding and convert text to [UTF-8] as input to the
+   comparator.  MIME parts that cannot be decoded and converted MAY be
+   treated as plain US-ASCII, omitted, or processed according to local
+   conventions.  A NUL octet (character zero) SHOULD NOT cause early
+   termination of the content being compared against.  Implementations
+   MUST support the "quoted-printable", "base64", "7bit", "8bit", and
+   "binary" content transfer encodings.  Implementations MUST be capable
+   of converting to UTF-8 the US-ASCII, ISO-8859-1, and the US-ASCII
+   subset of ISO-8859-* character sets.
+
+   Each matched part is matched against independently: search
+   expressions MUST NOT match across MIME part boundaries.  MIME headers
+   of the containing part MUST NOT be included in the data.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Degener & Guenther          Standards Track                     [Page 6]
+
+RFC 5173         Sieve Email Filtering: Body Extension        April 2008
+
+
+   Example:
+
+        require ["body", "fileinto"];
+
+        # Save any message with any text MIME part that contains the
+        # words "missile" or "coordinates" in the "secrets" folder.
+
+        if body :content "text" :contains ["missile", "coordinates"] {
+                fileinto "secrets";
+        }
+
+        # Save any message with an audio/mp3 MIME part in
+        # the "jukebox" folder.
+
+        if body :content "audio/mp3" :contains "" {
+                fileinto "jukebox";
+        }
+
+5.3.  Body Transform ":text"
+
+   The ":text" body transform matches against the results of an
+   implementation's best effort at extracting UTF-8 encoded text from a
+   message.
+
+   It is unspecified whether this transformation results in a single
+   string or multiple strings being matched against.  All the text
+   extracted from a given non-container MIME part MUST be in the same
+   string.
+
+   In simple implementations, :text MAY be treated the same as :content
+   "text".
+
+   Sophisticated implementations MAY strip mark-up from the text prior
+   to matching, and MAY convert media types other than text to text
+   prior to matching.
+
+   (For example, they may be able to convert proprietary text editor
+   formats to text or apply optical character recognition algorithms to
+   image data.)
+
+   Example:
+        require ["body", "fileinto"];
+
+        # Save messages mentioning the project schedule in the
+        # project/schedule folder.
+        if body :text :contains "project schedule" {
+                fileinto "project/schedule";
+        }
+
+
+
+Degener & Guenther          Standards Track                     [Page 7]
+
+RFC 5173         Sieve Email Filtering: Body Extension        April 2008
+
+
+6.  Interaction with Other Sieve Extensions
+
+   Any extension that extends the grammar for the COMPARATOR or MATCH-
+   TYPE nonterminals will also affect the implementation of "body".
+
+   Wildcard expressions used with "body" are exempt from the side
+   effects described in [VARIABLES].  That is, they MUST NOT set match
+   variables (${1}, ${2}...) to the input values corresponding to
+   wildcard sequences in the matched pattern.  However, if the extension
+   is present, variable references in the key strings or content type
+   strings are evaluated as described in this document.
+
+7.  IANA Considerations
+
+   The following template specifies the IANA registration of the Sieve
+   extension specified in this document:
+
+   To: iana@iana.org
+   Subject: Registration of new Sieve extension
+
+   Capability name: body
+   Description:     Provides a test for matching against the
+                    body of the message being processed
+   RFC number:      RFC 5173
+   Contact Address: The Sieve discussion list
+                    <ietf-mta-filters@imc.org>
+
+8.  Security Considerations
+
+   The system MUST be sized and restricted in such a manner that even
+   malicious use of body matching does not deny service to other users
+   of the host system.
+
+   Filters relying on string matches in the raw body of an email message
+   may be more general than intended.  Text matches are no replacement
+   for a spam, virus, or other security related filtering system.
+
+9.  Acknowledgments
+
+   This document has been revised in part based on comments and
+   discussions that took place on and off the SIEVE mailing list.
+   Thanks to Cyrus Daboo, Ned Freed, Bob Johannessen, Simon Josefsson,
+   Mark E. Mallett, Chris Markle, Alexey Melnikov, Ken Murchison, Greg
+   Shapiro, Tim Showalter, Nigel Swinson, Dowson Tong, and Christian
+   Vogt for reviews and suggestions.
+
+
+
+
+
+
+Degener & Guenther          Standards Track                     [Page 8]
+
+RFC 5173         Sieve Email Filtering: Body Extension        April 2008
+
+
+10.  References
+
+10.1.  Normative References
+
+   [KEYWORDS]   Bradner, S., "Key words for use in RFCs to Indicate
+                Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+   [MIME]       Freed, N. and N. Borenstein, "Multipurpose Internet Mail
+                Extensions (MIME) Part One: Format of Internet Message
+                Bodies", RFC 2045, November 1996.
+
+   [SIEVE]      Guenther, P., Ed., and T. Showalter, Ed., "Sieve: An
+                Email Filtering Language", RFC 5228, January 2008.
+
+   [UTF-8]      Yergeau, F., "UTF-8, a transformation format of ISO
+                10646", STD 63, RFC 3629, November 2003.
+
+10.2.  Informative References
+
+   [VARIABLES]  Homme, K., "Sieve Email Filtering: Variables Extension",
+                RFC 5229, January 2008.
+
+Authors' Addresses
+
+   Jutta Degener
+   5245 College Ave, Suite #127
+   Oakland, CA 94618
+
+   EMail: jutta@pobox.com
+
+
+   Philip Guenther
+   Sendmail, Inc.
+   6425 Christie Ave, 4th Floor
+   Emeryville, CA 94608
+
+   EMail: guenther@sendmail.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Degener & Guenther          Standards Track                     [Page 9]
+
+RFC 5173         Sieve Email Filtering: Body Extension        April 2008
+
+
+Full Copyright Statement
+
+   Copyright (C) The IETF Trust (2008).
+
+   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.
+
+
+
+
+
+
+
+
+
+
+
+
+Degener & Guenther          Standards Track                    [Page 10]
+
diff --git a/src/lib-sieve/plugins/body/draft-ietf-sieve-body-07.txt b/src/lib-sieve/plugins/body/draft-ietf-sieve-body-07.txt
deleted file mode 100644
index 7a038ca29..000000000
--- a/src/lib-sieve/plugins/body/draft-ietf-sieve-body-07.txt
+++ /dev/null
@@ -1,679 +0,0 @@
-
-Network Working Group                                      Jutta Degener
-Internet Draft                                           Philip Guenther
-Intended status: Standards Track                          Sendmail, Inc.
-Expires: December 2007                                         June 2008
-Updates: RFC-ietf-sieve-variables-08
-
-
-                 Sieve Email Filtering: Body Extension
-                      draft-ietf-sieve-body-07.txt
-
-
-Status of this memo
-
-   By submitting this Internet-Draft, each author represents that any
-   applicable patent or other IPR claims of which he or she is aware
-   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
-   Task Force (IETF), its areas, and its working groups.  Note that
-   other groups may also distribute working documents as
-   Internet-Drafts.
-
-   Internet-Drafts are draft documents valid for a maximum of six
-   months and may be updated, replaced, or obsoleted by other
-   documents at any time.  It is inappropriate to use Internet-
-   Drafts as reference material or to cite them other than as
-   "work in progress."
-
-   The list of current Internet-Drafts can be accessed at
-   http://www.ietf.org/1id-abstracts.html
-
-   The list of Internet-Draft Shadow Directories can be accessed at
-   http://www.ietf.org/shadow.html
-
-Copyright Notice
-
-   Copyright (C) The IETF Trust (2007).
-
-Abstract
-
-   This document defines a new command for the "Sieve" email
-   filtering language that tests for the occurrence of one or more
-   strings in the body of an email message.
-
-
-
-
-
-
-
-
-
-
-
-
-Degener & Guenther           Standards Track                    [Page 1]
-
-Internet-Draft   Sieve Email Filtering: Body Extension     December 2007
-
-
-1. Introduction
-
-   The "body" test checks for the occurrence of one
-   or more strings in the body of an email message.
-   Such a test was initially discussed for the [SIEVE] base
-   document, but was subsequently removed because it was
-   thought to be too costly to implement.
-
-   Nevertheless, several server vendors have implemented
-   some form of the "body" test.
-
-   This document reintroduces the "body" test as an extension,
-   and specifies its syntax and semantics.
-
-
-2. Conventions used.
-
-   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 [KEYWORDS].
-
-   Conventions for notations are as in [SIEVE] section 1.1, including
-   use of the "Usage:" label for the definition of text and tagged
-   arguments syntax.
-
-   The capability string associated with the extension defined in
-   this document is "body".
-
-
-3. Test body
-
-   Usage: "body" [COMPARATOR] [MATCH-TYPE] [BODY-TRANSFORM]
-                <key-list: string-list>
-
-   The body test matches content in the body of an email message,
-   that is, anything following the first empty line after the header.
-   (The empty line itself, if present, is not considered to be part
-   of the body.)
-
-   The COMPARATOR and MATCH-TYPE keyword parameters are defined
-   in [SIEVE].  The BODY-TRANSFORM is a keyword parameter
-   discussed in section 4, below.
-
-   If a message consists of a header only, not followed by an empty
-   line, all "body" tests return false, including that for an empty
-   string.
-
-
-
-
-
-Degener & Guenther           Standards Track                    [Page 2]
-
-Internet-Draft   Sieve Email Filtering: Body Extension     December 2007
-
-
-   If a message consists of a header followed only by an empty
-   line with no body lines following it, the message is considered
-   to have an empty string as a body.
-
-
-4. Body Transform
-
-   Prior to matching content in a message body, "transformations"
-   can be applied that filter and decode certain parts of the body.
-   These transformations are selected by a "BODY-TRANSFORM"
-   keyword parameter.
-
-   Usage: ":raw"
-        / ":content" <content-types: string-list>
-        / ":text"
-
-   The default transformation is :text.
-
-
-4.1 Body Transform ":raw"
-
-   The ":raw" transform is intended to match against the undecoded
-   body of a message.
-
-   If the specified body-transform is ":raw", the [MIME] structure
-   of the body is irrelevant.  The implementation MUST NOT remove
-   any transfer encoding from the message, MUST NOT refuse to filter
-   messages with syntactic errors (unless the environment it is
-   part of rejects them outright), and MUST treat multipart boundaries
-   or the MIME headers of enclosed body parts as part of the content
-   being matched against instead of MIME structures to interpret.
-
-   Example:
-
-        require "body";
-
-        # This will match a message containing the literal text
-        # "MAKE MONEY FAST" in body parts (ignoring any
-        # content-transfer-encodings) or MIME headers other than
-        # the outermost RFC 2822 header.
-
-        if body :raw :contains "MAKE MONEY FAST" {
-                discard;
-        }
-
-
-
-
-
-
-
-Degener & Guenther           Standards Track                    [Page 3]
-
-Internet-Draft   Sieve Email Filtering: Body Extension     December 2007
-
-
-4.2 Body Transform ":content"
-
-   If the body transform is ":content", only MIME parts that have
-   the specified content-types are selected for matching.
-
-   If an individual content type begins or ends with a '/' (slash)
-   or contains multiple slashes, it matches no content types.
-   Otherwise, if it contains a slash, then it specifies a full
-   <type>/<subtype> pair, and matches only that specific content
-   type.  If it is the empty string, all MIME content types are
-   matched.  Otherwise, it specifies a <type> only, and any subtype
-   of that type matches it.
-
-   The search for MIME parts matching the :content specification
-   is recursive and automatically descends into multipart and
-   message/rfc822 MIME parts.  All MIME parts with matching types
-   are searched for the key strings.  The test returns true if any
-   combination of searched MIME part and key-list argument match.
-
-   If the :content specification matches a multipart MIME part,
-   only the prologue and epilogue sections of the part will be
-   searched for the key strings; the contents of nested parts are
-   only searched if their respective types match the :content
-   specification.
-
-   If the :content specification matches a message/rfc822 MIME part,
-   only the header of the nested message will be searched for the
-   key strings; the contents of the nested message body parts are
-   only searched if its content-type matches the :content specification.
-
-   (Matches against container types with an empty match string can
-   be useful as tests for the existence of such parts.)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Degener & Guenther           Standards Track                    [Page 4]
-
-Internet-Draft   Sieve Email Filtering: Body Extension     December 2007
-
-
-   Example:
-        From: Whomever
-        To: Someone
-        Date: Whenever
-        Subject: whatever
-        Content-Type: multipart/mixed; boundary=outer
-
-     &  This is a multi-part message in MIME format.
-     &
-        --outer
-        Content-Type: multipart/alternative; boundary=inner
-
-     &  This is a nested multi-part message in MIME format.
-     &
-        --inner
-        Content-Type: text/plain; charset="us-ascii"
-
-     $  Hello
-     $
-        --inner
-        Content-Type: text/html; charset="us-ascii"
-
-     %  <html><body>Hello</body></html>
-     %
-        --inner--
-     &
-     &  This is the end of the inner MIME multipart.
-     &
-        --outer
-        Content-Type: message/rfc822
-
-     !  From: Someone Else
-     !  Subject: hello request
-
-     $  Please say Hello
-     $
-        --outer--
-     &
-     &  This is the end of the outer MIME multipart.
-
-
-   In the above example, the '&', '$', '%', and '!' characters at
-   the start of a line are used to illustrate what portions of the
-   example message are used in tests:
-
-   - the lines starting with '&' are the ones that are tested when
-     a 'body :content "multipart" :contains "MIME"'
-     test is executed.
-
-
-
-Degener & Guenther           Standards Track                    [Page 5]
-
-Internet-Draft   Sieve Email Filtering: Body Extension     December 2007
-
-
-   - the lines starting with '$' are the ones that are tested when
-     a 'body :content "text/plain" :contains "Hello"' test is
-     executed.
-
-   - the lines starting with '%' are the ones that are tested when
-     a 'body :content "text/html" :contains "Hello"' test is executed.
-
-   - the lines starting with '$' or '%' are the ones that are tested
-     when a 'body :content "text" :contains "Hello"' test is executed.
-
-   - the lines starting with '!' are the ones that are tested when
-     a 'body :content "message/rfc822" :contains "Hello"' test is
-     executed.
-
-   Comparisons are performed on octets.  Implementations decode
-   the content-transfer-encoding and convert text to [UTF-8] as
-   input to the comparator.  MIME parts that cannot be decoded and
-   converted MAY be treated as plain US-ASCII, omitted, or processed
-   according to local conventions.  A NUL octet (character zero)
-   SHOULD NOT cause early termination of the content being compared
-   against.  Implementations MUST support the "quoted-printable",
-   "base64", "7bit", "8bit", and "binary" content transfer encodings.
-   Implementations MUST be capable of converting to UTF-8 the
-   US-ASCII, ISO-8859-1, and the US-ASCII subset of
-   ISO-8859-* character sets.
-
-   Search expressions MUST NOT match across MIME part boundaries.
-   MIME headers of the containing part MUST NOT be included in the
-   data.
-
-   Example:
-        require ["body", "fileinto"];
-
-        # Save any message with any text MIME part that contains the
-        # words "missile" or "coordinates" in the "secrets" folder.
-
-        if body :content "text" :contains ["missile", "coordinates"] {
-                fileinto "secrets";
-        }
-
-        # Save any message with an audio/mp3 MIME part in
-        # the "jukebox" folder.
-
-        if body :content "audio/mp3" :contains "" {
-                fileinto "jukebox";
-        }
-
-
-
-
-
-Degener & Guenther           Standards Track                    [Page 6]
-
-Internet-Draft   Sieve Email Filtering: Body Extension     December 2007
-
-
-4.3 Body Transform ":text"
-
-   The ":text" body transform matches against the results of
-   an implementation's best effort at extracting UTF-8 encoded
-   text from a message.
-
-   In simple implementations, :text MAY be treated the same
-   as :content "text".
-
-   Sophisticated implementations MAY strip mark-up from the text
-   prior to matching, and MAY convert media types other than text
-   to text prior to matching.
-
-   (For example, they may be able to convert proprietary text
-   editor formats to text or apply optical character recognition
-   algorithms to image data.)
-
-   Example:
-        require ["body", "fileinto"];
-
-        # Save messages mentioning the project schedule in the
-        # project/schedule folder.
-        if body :text :contains "project schedule" {
-                fileinto "project/schedule";
-        }
-
-
-5. Interaction with Other Sieve Extensions
-
-   Any extension that extends the grammar for the COMPARATOR or
-   MATCH-TYPE nonterminals will also affect the implementation of
-   "body".
-
-   Wildcard expressions used with "body" are exempt from the side
-   effects described in [VARIABLES].  That is, they MUST NOT set
-   match variables (${1}, ${2}...) to the input values corresponding
-   to wild card sequences in the matched pattern.  However, if the
-   extension is present, variable references in the key strings or
-   content type strings are evaluated as described in the draft.
-
-
-
-
-
-
-
-
-
-
-
-
-Degener & Guenther           Standards Track                    [Page 7]
-
-Internet-Draft   Sieve Email Filtering: Body Extension     December 2007
-
-
-6.  IANA Considerations
-
-    The following template specifies the IANA registration of the Sieve
-    extension specified in this document:
-
-    To: iana@iana.org
-    Subject: Registration of new Sieve extension
-
-    Capability name: body
-    Description:     adds the 'body' test for matching against the
-                     the body of the message being processed
-    RFC number:      this RFC
-    Contact Address: Jutta Degener <jutta@pobox.com>
-
-    This information should be added to the list of sieve extensions
-    given on http://www.iana.org/assignments/sieve-extensions.
-
-
-7. Security Considerations
-
-   The system MUST be sized and restricted in such a manner that
-   even malicious use of body matching does not deny service to
-   other users of the host system.
-
-   Filters relying on string matches in the raw body of an email
-   message may be more general than intended.  Text matches are no
-   replacement for a spam, virus, or other security related
-   filtering system.
-
-
-8. Acknowledgments
-
-   This document has been revised in part based on comments and
-   discussions that took place on and off the SIEVE mailing list.
-   Thanks to Cyrus Daboo, Ned Freed, Bob Johannessen, Simon Josefsson,
-   Mark E. Mallett, Chris Markle, Alexey Melnikov, Ken Murchison,
-   Greg Shapiro, Tim Showalter, Nigel Swinson, and Dowson Tong for
-   reviews and suggestions.
-
-
-
-
-
-
-
-
-
-
-
-
-
-Degener & Guenther           Standards Track                    [Page 8]
-
-Internet-Draft   Sieve Email Filtering: Body Extension     December 2007
-
-
-9. Authors' Addresses
-
-   Jutta Degener
-   5245 College Ave, Suite #127
-   Oakland, CA 94618
-
-   Email: jutta@pobox.com
-
-   Philip Guenther
-   Sendmail, Inc.
-   6425 Christie Ave, 4th Floor
-   Emeryville, CA 94608
-
-   Email: guenther@sendmail.com
-
-
-10. Discussion
-
-   This section will be removed when this document leaves the
-   Internet-Draft stage.
-
-   This draft is intended as an extension to the Sieve mail filtering
-   language.  Sieve extensions are discussed on the MTA Filters mailing
-   list at <ietf-mta-filters@imc.org>.  Subscription requests can
-   be sent to <ietf-mta-filters-request@imc.org> (send an email
-   message with the word "subscribe" in the body).
-
-   More information on the mailing list along with a WWW archive of
-   back messages is available at <http://www.imc.org/ietf-mta-filters/>.
-
-
-10.1 Changes from draft-ietf-sieve-body-06.txt
-
-   Changed "matched text" to "matched content".  Drop the word
-   "proposed".
-
-
-10.2 Changes from draft-ietf-sieve-body-05.txt
-
-   Updated boilerplate to match RFC 4748.
-
-   Added "Intended-Status: Standards Track" and
-   "Updates: draft-ietf-sieve-variables-08"
-
-   Change the references from appendices to sections.
-   Update [SIEVE] reference.
-
-
-
-
-
-Degener & Guenther           Standards Track                    [Page 9]
-
-Internet-Draft   Sieve Email Filtering: Body Extension     December 2007
-
-
-10.3 Changes from draft-ietf-sieve-body-04.txt
-
-   Changed 'reject' to 'discard' in the example.
-
-   Removed reference to regex draft.
-
-   Update copyright boilerplate.
-
-
-10.4 Changes from draft-ietf-sieve-body-03.txt
-
-   Update IANA registration to match 3028bis.
-
-   Added direct boilerplate for [KEYWORDS].
-
-
-10.5 Changes from draft-ietf-sieve-body-02.txt
-
-   Updated charset conversion to match draft-ietf-sieve-3028bis-06.txt.
-
-   Change "Syntax:" to "Usage:".
-
-   Updated references.
-
-
-10.6 Changes from draft-ietf-sieve-body-01.txt
-
-   Updated charset conversion requirements to match those in
-   draft-ietf-sieve-3028bis-03.txt for headers.
-
-
-10.7 Changes from draft-ietf-sieve-body-00.txt
-
-   Updated IPR boilerplate to RFC 3978/3979.
-
-   Many prose corrections in response to WGLC comments.  Of particular
-   note:
-     - made clear that :raw treats MIME boundaries and headers as
-       text to be matched against
-     - corrected description in comment of :raw example
-     - clarified the interpretation of invalid content-types in
-       :content
-     - gave precise description of what gets matched when :content
-       is used with message/rfc822 or any multipart type, as well
-       as a comprehensive example
-     - include an example of :text
-     - tightened wording of interaction with [VARIABLES]
-     - added informative reference to [REGEX]
-
-
-
-Degener & Guenther           Standards Track                   [Page 10]
-
-Internet-Draft   Sieve Email Filtering: Body Extension     December 2007
-
-
-10.8 Changes from draft-degener-sieve-body-04.txt
-
-   Renamed to draft-ietf-sieve-body-00.txt; tweaked the title and
-   abstract.
-
-   Added Philip Guenther as co-author.
-
-   Split references into normative and informative.  Updated [UTF-8]
-   and [VARIABLES] references.
-
-   Updated IPR boilerplate.
-
-
-10.9 Changes from draft-degener-sieve-body-03.txt
-
-   Made "body" exempt from variable-setting side effects in the
-   presence of the "variables" extension and wild cards.  It's too
-   hard to implement.
-
-   Removed :binary.  It's uglier and less useful than it needs to be
-   to bother.
-
-   Added IANA section.
-
-
-11. Normative References
-
-   [KEYWORDS]   Bradner, S., "Key words for use in RFCs to Indicate
-                Requirement Levels", BCP 15, RFC 2119, March 1997.
-
-   [MIME]       Freed, N. and N. Borenstein, "Multipurpose Internet Mail
-                Extensions (MIME) Part One: Format of Internet Message
-                Bodies", RFC 2045, November 1996.
-
-   [SIEVE]      Guenther, P. and T. Showalter, "Sieve: A Mail Filtering
-                Language", draft-ietf-sieve-3028bis-13, October 2007.
-
-   [UTF-8]      Yergeau, F., "UTF-8, a transformation format of ISO
-                10646", RFC 3629, November 2003.
-
-
-12. Informative References
-
-   [VARIABLES] Homme, K. T., "Sieve Extension: Variables",
-               draft-ietf-sieve-variables-08.txt, December 2005.
-
-
-
-
-
-
-Degener & Guenther           Standards Track                   [Page 11]
-
-Internet-Draft   Sieve Email Filtering: Body Extension     December 2007
-
-
-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.
-
-Acknowledgement
-
-   Funding for the RFC Editor function is currently provided by the IETF
-   Administrative Support Activity (IASA).
-
-
-
-
-
-
-
-Degener & Guenther           Standards Track                   [Page 12]
-
-
-------- End of Forwarded Message
-
-
diff --git a/src/lib-sieve/plugins/body/ext-body.c b/src/lib-sieve/plugins/body/ext-body.c
index 0fa141e68..c47f9b65e 100644
--- a/src/lib-sieve/plugins/body/ext-body.c
+++ b/src/lib-sieve/plugins/body/ext-body.c
@@ -2,7 +2,7 @@
  * ------------------
  *
  * Authors: Stephan Bosch
- * Specification: draft-ietf-sieve-body-07
+ * Specification: RFC 5173
  * Implementation: full, but text body-transform implementation is simple
  * Status: experimental, largely untested
  *
@@ -10,15 +10,15 @@
  
 /* FIXME: 
  *
- * From draft spec (07) with respect to :text body transform:
+ * From RFC with respect to :text body transform:
  *
- * "Sophisticated implementations MAY strip mark-up from the text
- *  prior to matching, and MAY convert media types other than text
- *  to text prior to matching.
+ * "Sophisticated implementations MAY strip mark-up from the text prior
+ *  to matching, and MAY convert media types other than text to text
+ *  prior to matching.
  *
- *  (For example, they may be able to convert proprietary text
- *  editor formats to text or apply optical character recognition
- *  algorithms to image data.)"
+ *  (For example, they may be able to convert proprietary text editor
+ *  formats to text or apply optical character recognition algorithms to
+ *  image data.)"
  *
  * We might want to do this in the future, i.e. we must evaluate whether this is 
  * feasible.
-- 
GitLab