diff --git a/doc/rfc/imap4flags.rfc5232.txt b/doc/rfc/imap4flags.rfc5232.txt
new file mode 100644
index 0000000000000000000000000000000000000000..57072679c4c339c6df6159a8946bf954728c9440
--- /dev/null
+++ b/doc/rfc/imap4flags.rfc5232.txt
@@ -0,0 +1,675 @@
+
+
+
+
+
+
+Network Working Group                                       A.  Melnikov
+Request for Comments: 5232                                 Isode Limited
+Category: Standards Track                                   January 2008
+
+
+              Sieve Email Filtering: Imap4flags 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
+
+   Recent discussions have shown that it is desirable to set different
+   IMAP (RFC 3501) flags on message delivery.  This can be done, for
+   example, by a Sieve interpreter that works as a part of a Mail
+   Delivery Agent.
+
+   This document describes an extension to the Sieve mail filtering
+   language for setting IMAP flags.  The extension allows setting of
+   both IMAP system flags and IMAP keywords.
+
+Table of Contents
+
+   1. Introduction ....................................................2
+      1.1. Conventions Used ...........................................2
+   2. General Requirements for Flag Handling ..........................3
+   3. Actions .........................................................3
+      3.1. Action setflag .............................................4
+      3.2. Action addflag .............................................4
+      3.3. Action removeflag ..........................................5
+   4. Test hasflag ....................................................6
+   5. Tagged Argument :flags ..........................................7
+   6. Interaction with Other Sieve Actions ............................8
+   7. Security Considerations .........................................8
+   8. IANA Considerations .............................................8
+   9. Extended Example ................................................8
+   10. Acknowledgments ...............................................10
+   11. Normative References ..........................................10
+
+
+
+
+
+
+
+
+Melnikov                    Standards Track                     [Page 1]
+
+RFC 5232              Sieve: Imap4flags Extension           January 2008
+
+
+1.  Introduction
+
+   This is an extension to the Sieve language defined by [SIEVE] for
+   setting [IMAP] flags.  It adds a new tagged argument to "keep" and
+   "fileinto" that describes the list of flags that have to be set when
+   the message is delivered to the specified mailbox.  It also adds
+   several actions to help manipulate list of flags and a test to check
+   whether a flag belongs to a list.
+
+   From the user's perspective, this extension provides several
+   capabilities.  First, it allows manipulation of sets of IMAP flags.
+   Second, it gives the ability to associate a set of IMAP flags with a
+   message that is delivered to a mailstore using the keep/fileinto
+   actions.  Third, it maintains an internal variable.  The internal
+   variable contains the default flags that will be associated with a
+   message that is delivered using the keep, implicit keep, or fileinto
+   actions, when the :flags tagged argument is not specified.  When the
+   Sieve [VARIABLES] extension is also supported by the Sieve engine, it
+   enables support for multiple variables containing sets of IMAP flags.
+
+   The capability string associated with the extension defined in this
+   document is "imap4flags".  All conformant implementations MUST
+   implement all Sieve actions (setflag, addflag, removeflag), the
+   "hasflag" test, and the ":flags" tagged argument described in this
+   document.
+
+   The "imap4flags" extension can be used with or without the
+   "variables" extension [VARIABLES].  When the "variables" extension is
+   enabled in a script using <require "variables">, the script can use
+   explicit variable names in setflag/addflag/removeflag actions and the
+   hasflag test.  See also Section 3 for more details.  When the
+   "variables" extension is not enabled, the explicit variable name
+   parameter to setflag/addflag/removeflag/hasflag MUST NOT be used and
+   MUST cause an error according to [SIEVE].
+
+1.1.  Conventions Used
+
+   Conventions for notations are as in [SIEVE], Section 1.1, including
+   use of "Usage:" label for the definition of action and tagged
+   arguments syntax.
+
+   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 RFC 2119.
+
+
+
+
+
+
+
+Melnikov                    Standards Track                     [Page 2]
+
+RFC 5232              Sieve: Imap4flags Extension           January 2008
+
+
+2.  General Requirements for Flag Handling
+
+   The following notes apply to processing of addflag/removeflag/setflag
+   actions, the "hasflag" test and the ":flags" tagged argument.
+
+   A Sieve interpreter MUST ignore empty strings (i.e., "") in a list-
+   of-flags parameter.
+
+   A string containing a space-separated list of flag names is
+   equivalent to a string list consisting of the flags.  This
+   requirement is to simplify amalgamation of multiple flag lists.
+
+   The Sieve interpreter SHOULD check the list of flags for validity as
+   described by [IMAP] ABNF.  In particular, according to [IMAP], non-
+   ASCII characters are not allowed in flag names.  However, spaces MUST
+   always be allowed as delimiters in strings representing a list of
+   flags.  In such strings, multiple spaces between flag names MUST be
+   treated as a single space character, and leading and trailing spaces
+   MUST be ignored.
+
+   If a flag validity check fails, the flag MUST be ignored.
+
+   Note that it is not possible to use this extension to set or clear
+   the \Recent flag or any other special system flag that is not
+   settable in [IMAP].  Any such flags MUST be ignored if included in a
+   flag list.
+
+3.  Actions
+
+   All actions described in this specification (setflag, addflag,
+   removeflag) operate on string variables that contain a set of [IMAP]
+   flags.  On variable substitution, a set of flags is represented as a
+   string containing a space-separated list of flag names.
+
+   Any setflag/addflag/removeflag action MAY alter the flag list in any
+   way that leaves its semantics as a set of case-insensitive words
+   unaltered.  For example, it may reorder the flags, alter the case of
+   the letters in them, or add or remove duplicates or extraneous
+   spaces.  Scripts MUST NOT make assumptions about the ordering of
+   flags in lists or the preservation of their case.
+
+   Note that the parameter specifying a variable name to
+   setflag/addflag/removeflag actions and the hasflag test is optional.
+   If the parameter is not specified, the actions operate on the
+   internal variable, which has the empty value when the script starts
+   execution.  If the SIEVE interpreter doesn't support the "variables"
+   extension [VARIABLES], the presence of the variable name parameter
+   will cause a runtime error [SIEVE].
+
+
+
+Melnikov                    Standards Track                     [Page 3]
+
+RFC 5232              Sieve: Imap4flags Extension           January 2008
+
+
+   The "addflag" action adds flags to an existing set.  The "removeflag"
+   action removes flags from an existing set.  The "setflag" action
+   replaces an existing set of flags with a new set.  The "set" action
+   defined in [VARIABLES] can be used to replace an existing set of
+   flags with a new set as well.  However, it should be noted that the
+   "set" action can't perform any flag reordering, duplicate
+   elimination, etc.
+
+   The :flags tagged argument to "keep" and "fileinto" actions is used
+   to associate a set of flags with the current message.  If the :flags
+   tagged argument is not specified with those two actions, the current
+   value of the internal variable is used instead.  The value of the
+   internal variable also applies to the implicit keep.
+
+   Note that when keep/fileinto is used multiple times in a script and
+   duplicate message elimination is performed (as described in Section
+   2.10.3 of [SIEVE]), the last flag list value MUST win.
+
+3.1.  Action setflag
+
+   Usage:   setflag [<variablename: string>]
+            <list-of-flags: string-list>
+
+   Setflag is used for setting [IMAP] system flags or keywords.
+   Setflag replaces any previously set flags.
+
+
+   Example:  if size :over 500K {
+                 setflag "\\Deleted";
+             }
+
+   A more substantial example is the following:
+
+   Example:
+        if header :contains "from" "boss@frobnitzm.example.edu" {
+            setflag "flagvar" "\\Flagged";
+            fileinto :flags "${flagvar}" "INBOX.From Boss";
+        }
+
+3.2.  Action addflag
+
+   Usage:   addflag [<variablename: string>]
+            <list-of-flags: string-list>
+
+   Addflag is used to add flags to a list of [IMAP] flags.  It doesn't
+   replace any previously set flags.  This means that multiple
+   occurrences of addflag are treated additively.
+
+
+
+
+Melnikov                    Standards Track                     [Page 4]
+
+RFC 5232              Sieve: Imap4flags Extension           January 2008
+
+
+   The following examples demonstrate requirements described in Section
+   2.1.  The following two actions
+
+      addflag "flagvar" "\\Deleted";
+      addflag "flagvar" "\\Answered";
+
+   produce the same result as the single action
+
+      addflag "flagvar" ["\\Deleted", "\\Answered"];
+
+   or
+
+      addflag "flagvar" "\\Deleted \\Answered";
+
+   or
+
+      addflag "flagvar" "\\Answered \\Deleted";
+
+3.3.  Action removeflag
+
+   Usage:   removeflag [<variablename: string>]
+            <list-of-flags: string-list>
+
+   Removeflag is used to remove flags from a list of [IMAP] flags.
+   Removeflag clears flags previously set by "set"/"addflag".  Calling
+   removeflag with a flag that wasn't set before is not an error and is
+   ignored.  Note that if an implementation doesn't perform automatic
+   duplicate elimination, it MUST remove all occurrences of the flags
+   specified in the second parameter to removeflag.  Empty strings in
+   the list-of-flags MUST be ignored.  Also note that flag names are
+   case-insensitive, as described in [IMAP].  Multiple removeflag
+   actions are treated additively.
+
+      Example:
+        if header :contains "Disposition-Notification-To"
+           "mel@example.com" {
+            addflag "flagvar" "$MDNRequired";
+        }
+        if header :contains "from" "imap@cac.washington.example.edu" {
+            removeflag "flagvar" "$MDNRequired";
+            fileinto :flags "${flagvar}" "INBOX.imap-list";
+        }
+
+
+
+
+
+
+
+
+
+Melnikov                    Standards Track                     [Page 5]
+
+RFC 5232              Sieve: Imap4flags Extension           January 2008
+
+
+4.  Test hasflag
+
+   Usage: hasflag [MATCH-TYPE] [COMPARATOR]
+          [<variable-list: string-list>]
+          <list-of-flags: string-list>
+
+   The hasflag test evaluates to true if any of the variables matches
+   any flag name.  The type of match defaults to ":is".  If the list of
+   variables is omitted, value of the internal variable is used instead.
+
+   The default comparator is "i;ascii-casemap", which is the same case-
+   insensitive comparison as defined for IMAP flags by [IMAP].
+
+   The "relational" extension [RELATIONAL] adds a match type called
+   ":count".  The :count of a variable returns the number of distinct
+   flags in it.  The count of a list of variables is the sum of the
+   counts of the member variables.
+
+   Example:
+     If the internal variable has the value "A B", the following test
+
+      hasflag :is "b A"
+
+     evaluates to true.  The above test can also be written as
+
+      hasflag ["b","A"]
+
+   Example:
+     If the variable "MyVar" has value "NonJunk Junk gnus-forward
+     $Forwarded NotJunk JunkRecorded $Junk $NotJunk", the following
+     tests evaluate to true:
+
+      hasflag :contains "MyVar" "Junk"
+      hasflag :contains "MyVar" "forward"
+      hasflag :contains "MyVar" ["label", "forward"]
+      hasflag :contains "MyVar" ["junk", "forward"]
+
+     Note that the last of these tests can be rewritten
+     as
+
+      hasflag :contains "MyVar" "junk forward"
+
+     or
+
+      hasflag :contains "MyVar" "forward junk"
+
+     However, the last two forms are not recommended.
+
+
+
+
+Melnikov                    Standards Track                     [Page 6]
+
+RFC 5232              Sieve: Imap4flags Extension           January 2008
+
+
+     And the following tests will evaluate to false:
+
+      hasflag :contains "MyVar" "label"
+
+      hasflag :contains "MyVar" ["label1", "label2"]
+
+   Example:
+     If the variable "MyFlags" has the value "A B", the following test
+
+       hasflag :count "ge" :comparator "i;ascii-numeric"
+               "MyFlags" "2"
+
+     evaluates to true, as the variable contains 2 distinct flags.
+
+5.  Tagged Argument :flags
+
+   This specification adds a new optional tagged argument ":flags" that
+   alters the behavior of actions "keep" and "fileinto".
+
+   The :flags tagged argument specifies that the flags provided in the
+   subsequent argument should be set when fileinto/keep delivers the
+   message to the target mailbox/user's main mailbox.  If the :flags
+   tagged argument is not specified, "keep" or "fileinto" will use the
+   current value of the internal variable when delivering the message to
+   the target mailbox.
+
+   Usage:   ":flags" <list-of-flags: string-list>
+
+   The copy of the message filed into the mailbox will have only flags
+   listed after the :flags tagged argument.
+
+   The Sieve interpreter MUST ignore all flags that it can't store
+   permanently.  This means that the interpreter MUST NOT treat failure
+   to store any flag as a runtime failure to execute the Sieve script.
+   For example, if the mailbox "INBOX.From Boss" can't store any flags,
+   then
+
+     fileinto :flags "\\Deleted" "INBOX.From Boss";
+
+   and
+
+     fileinto "INBOX.From Boss";
+
+   are equivalent.
+
+   This document doesn't dictate how the Sieve interpreter will set the
+   [IMAP] flags.  In particular, the Sieve interpreter may work as an
+   IMAP client or may have direct access to the mailstore.
+
+
+
+Melnikov                    Standards Track                     [Page 7]
+
+RFC 5232              Sieve: Imap4flags Extension           January 2008
+
+
+6.  Interaction with Other Sieve Actions
+
+   This extension works only on the message that is currently being
+   processed by Sieve; it doesn't affect another message generated as a
+   side effect of any action or any other message already in the
+   mailstore.
+
+   The extension described in this document doesn't change the implicit
+   keep (see Section 2.10.2 of [SIEVE]).
+
+7.  Security Considerations
+
+   Security considerations are discussed in [IMAP], [SIEVE], and
+   [VARIABLES].
+
+   This extension intentionally doesn't allow setting [IMAP] flags on an
+   arbitrary message in the [IMAP] message store.
+
+   It is believed that this extension doesn't introduce any additional
+   security concerns.
+
+8.  IANA Considerations
+
+   The following template specifies the IANA registration of the
+   variables Sieve extension specified in this document:
+
+   To: iana@iana.org
+   Subject: Registration of new Sieve extension
+
+   Capability name: imap4flags
+   Description:     Adds actions and tests for manipulating IMAP flags
+   RFC number:      RFC 5232
+   Contact address: The Sieve discussion list <ietf-mta-filters@imc.org>
+
+   This information has been added to the list of Sieve extensions given
+   on http://www.iana.org/assignments/sieve-extensions.
+
+9.  Extended Example
+
+   #
+   # Example Sieve Filter
+   # Declare any optional features or extension used by the script
+   #
+   require ["fileinto", "imap4flags", "variables"];
+
+   #
+   # Move large messages to a special mailbox
+   #
+
+
+
+Melnikov                    Standards Track                     [Page 8]
+
+RFC 5232              Sieve: Imap4flags Extension           January 2008
+
+
+   if size :over 1M
+           {
+           addflag "MyFlags" "Big";
+           if header :is "From" "boss@company.example.com"
+                      {
+   # The message will be marked as "\Flagged Big" when filed into
+   # mailbox "Big messages"
+                      addflag "MyFlags" "\\Flagged";
+                      }
+           fileinto :flags "${MyFlags}" "Big messages";
+           }
+
+   if header :is "From" "grandma@example.net"
+           {
+           addflag "MyFlags" ["\\Answered", "$MDNSent"];
+   # If the message is bigger than 1Mb it will be marked as
+   # "Big \Answered $MDNSent" when filed into mailbox "grandma".
+   # If the message is shorter than 1Mb it will be marked as
+   # "\Answered $MDNSent"
+           fileinto :flags "${MyFlags}" "GrandMa";
+           }
+
+   #
+   # Handle messages from known mailing lists
+   # Move messages from IETF filter discussion list to filter folder
+   #
+   if header :is "Sender" "owner-ietf-mta-filters@example.org"
+           {
+           set "MyFlags" "\\Flagged $Work";
+   # Message will have both "\Flagged" and $Work flags
+           keep :flags "${MyFlags}";
+           }
+
+   #
+   # Keep all messages to or from people in my company
+   #
+   elsif anyof address :domain :is ["From", "To"] "company.example.com"
+           {
+           keep :flags "${MyFlags}"; # keep in "Inbox" folder
+           }
+
+   # Try to catch unsolicited email.  If a message is not to me,
+   # or it contains a subject known to be spam, file it away.
+   #
+   elsif anyof (not address :all :contains
+                  ["To", "Cc"] "me@company.example.com",
+                header :matches "subject"
+                  ["*make*money*fast*", "*university*dipl*mas*"])
+
+
+
+Melnikov                    Standards Track                     [Page 9]
+
+RFC 5232              Sieve: Imap4flags Extension           January 2008
+
+
+           {
+           remove "MyFlags" "\\Flagged";
+           fileinto :flags "${MyFlags}" "spam";
+           }
+   else
+           {
+           # Move all other external mail to "personal"
+           # folder.
+           fileinto :flags "${MyFlags}" "personal";
+           }
+
+10.  Acknowledgments
+
+   This document has been revised in part based on comments and
+   discussions that took place on and off the Sieve mailing list.
+
+   The help of those who took the time to review the document and make
+   suggestions is appreciated, especially that of Tim Showalter, Barry
+   Leiba, Randall Gellens, Ken Murchison, Cyrus Daboo, Matthew Elvey,
+   Jutta Degener, Ned Freed, Marc Mutz, Nigel Swinson, Kjetil Torgrim
+   Homme, Mark E.  Mallett, Dave Cridland, Arnt Gulbrandsen, Philip
+   Guenther, Rob Austein, Sam Hartman, Eric Gray, and Cullen Jennings.
+
+   Special thanks to Tony Hansen and David Lamb for helping me better
+   explain the concept.
+
+11.  Normative References
+
+   [SIEVE]      Guenther, P., Ed., and T. Showalter, Ed., "Sieve: An
+                Email Filtering Language", RFC 5228, January 2008.
+
+   [IMAP]       Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION
+                4rev1", RFC 3501, March 2003.
+
+   [VARIABLES]  Homme, K., "Sieve Email Filtering: Variables Extension",
+                RFC 5229, January 2008.
+
+   [RELATIONAL] Segmuller, W. and B. Leiba "Sieve Email Filtering:
+                Relational Extension", RFC 5231, January 2008.
+
+
+
+
+
+
+
+
+
+
+
+
+Melnikov                    Standards Track                    [Page 10]
+
+RFC 5232              Sieve: Imap4flags Extension           January 2008
+
+
+Author's Address
+
+   Alexey Melnikov
+   Isode Limited
+
+   5 Castle Business Village
+   Hampton, Middlesex
+   United Kingdom, TW12 2BX
+
+   EMail: alexey.melnikov@isode.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Melnikov                    Standards Track                    [Page 11]
+
+RFC 5232              Sieve: Imap4flags Extension           January 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.
+
+
+
+
+
+
+
+
+
+
+
+
+Melnikov                    Standards Track                    [Page 12]
+
diff --git a/src/lib-sieve/plugins/imapflags/draft-ietf-sieve-imapflags-05.txt b/src/lib-sieve/plugins/imapflags/draft-ietf-sieve-imapflags-05.txt
deleted file mode 100644
index 53436d420c23999d7ccc6414fe62ea975069fc9d..0000000000000000000000000000000000000000
--- a/src/lib-sieve/plugins/imapflags/draft-ietf-sieve-imapflags-05.txt
+++ /dev/null
@@ -1,736 +0,0 @@
-Network Working Group                                       
-Internet Draft: Sieve -- IMAP flag Extension                 A. Melnikov
-Document: draft-ietf-sieve-imapflags-05.txt                Isode Limited
-Expires: November 2006                                          May 2006
-
-
-            SIEVE Email Filtering: IMAP flag Extension
-
-
-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/ietf/1id-abstracts.txt
-
-   The list of Internet-Draft Shadow Directories can be accessed at
-   http://www.ietf.org/shadow.html.
-
-
-Abstract
-
-   Recent discussions have shown that it is desirable to set different
-   IMAP (RFC 3501) flags on message delivery.  This can be done, for
-   example, by a Sieve interpreter that works as a part of a Mail
-   Delivery Agent.
-
-   This document describes an extension to the Sieve mail filtering
-   language for setting IMAP flags. The extension allows to set both
-   IMAP system flags and IMAP keywords.
-
-
-0. Meta-information on this draft
-
-   This information is intended to facilitate discussion.  It will be
-   removed when this document leaves the Internet-Draft stage.
-
-
-0.1. Discussion
-
-   This draft defines an extension to the Sieve mail filtering
-   language (RFC 3028) being 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/>.
-
-
-0.2. Changes from the version submitted to the Sieve mailing list
-
-   1. Added addflag and removeflag actions
-
-   2. Changed the semantics of setflag (setflag is not additive any
-      more)
-
-   3. Corrected section "Interaction with Other Sieve Actions".
-      Removed incorrect reference to the forward action as to an
-      action that prohibits setflag.
-
-   4. Added paragraph about the mutual order of "fileinto"/"keep" and
-      "setflag"/"addflag"/"removeflag" actions.
-
-
-0.3. Changes from the revision 00
-
-   1. Corrected Capability Identifier section (Section 2)
-
-   2. Corrected "Interaction with Other Sieve Actions" section
-      (Section 4)
-
-   3. Examples were updated to be compatible with Sieve-07 draft
-
-   4. Added "mark" and "unmark" actions
-
-
-0.4. Changes from the revision 01
-
-   1. Some language fixes based on Tony Hansen comments
-
-   2. Clarified that the extension allows to set both IMAP System
-      Flags and Keywords
-
-
-0.5. Changes from the revision 02
-
-   1. BugFix: all backslashes must be escaped
-
-   2. Added extended example and more detailed description of
-      "addflag"/"removeflag" additivity.
-
-   3. Minor example bugfixes
-
-
-0.6. Changes from the revision 03
-
-   1. Added second way to specify flags to be set (via optional tagged
-      arguments). [Tim Showalter]
-
-   2. Rules for using Reject with imapflags relaxed. [Randall Gellens]
- 
-   3. Removed ABNF section completely, added syntax description to
-      action definition. [Tim Showalter]
-
-   4. Cleaned up the example. [Ken Murchison]
-
-   5. Added FM (Flag Manupulation) acronym.
-
-   6. Clarified "mark"/"unmark" bahavior. [Randall Gellens]
-
-
-0.7. Changes from the revision 04
-
-   1. "Interaction with Other Sieve Actions" was simplified based on
-      comments from Tim Showalter.  Added sentence saying that
-      imapflags doesn't change an implicit keep.
-
-   2. Several editorial comments from Tim Showalter.
-
-0.8. Changes from the revision 05
-
-   1. Updated copyright, author address, section numbers and references.
-
-   2. Added dependency on Sieve "variables" extension.
-
-   3. Several editorial comments from Matthew Elvey.
-
-   4. Removed "mark" and "unmark" actions.
-
-   5. Added "hasflag" test.
-
-   6. Dropped ":globalflags"
-
-   7. An invalid flag name doesn't cause a script execution failure
-      anymore, as imapflags now depends on variables and a variable
-      can have an arbitrary value.
-
-0.9. Changes from the revision 06 (draft-ietf-sieve-imapflags-00.txt)
-
-   1. Updated boilerplate and references.
-
-   2. Fixed capability string in the extended example.
-
-   3. Improved implementation using macros (section 6).
-
-0.10. Changes from draft-ietf-sieve-imapflags-00.txt
-
-   1. Added back the internal variable, made the variable parameter
-      to all actions optional.
-
-   2. Some editorial suggestions from Mark E. Mallett.
-
-   3. Updated boilerplate once again.
-
-
-0.11. Changes from draft-ietf-sieve-imapflags-01.txt
-
-   1. Clarified that if "variables" is not available, then usage of
-      the explicit variable parameter causes a runtime error.
-
-   2. Clarified handling of spaces, in particular that leading/
-      trailing spaces in a flag variable are to be ignored.
-
-   3. Clarified that the extension can't be used to set the \Recent
-      flag.
-
-   4. Made the variable list parameter to hasflag test optional, for
-      consistency with all actions.
-
-   5. Dropped the "Implementation Notes" section.
-
-   6. Fixed an error in section 5: when the :flags tagged argument is
-      not specified, the correct behavior is to use flags from the
-      internal variable.
-
-   7. Other minor editorial changes.
-
-0.12. Changes from draft-ietf-sieve-imapflags-02.txt
-
-   1. Changed "Syntax:" label to "Usage:".
-
-   2. Updated the Introduction section to mention that hasflag also has
-      an optional parameter.
-
-   3. Clarified that a failure to store flags for a message is not
-      a runtime error.
-
-   4. Minor editorial nits from Philip.
-
-   5. Addressed ID nits.
-
-0.13. Changes from draft-ietf-sieve-imapflags-03.txt
-
-   1. Minor editorial changes from Ken.
-
-   2. Added IANA Considerations section.
-
-   3. Clarified "hasflag" behaviour with :matches, :contains, etc.
-
-   4. Added optional comparator field to "hasflag" test, for
-      consistency with other extensions.
-
-   5. Clarified interaction of hasflag with the relational extension.
-
-0.14. Changes from draft-ietf-sieve-imapflags-04.txt
-
-   1. Extended an example in section 4.
-
-   2. Fixed several typos.
-
-   3. Changed some examples to show that some parameters are optional
-      (Cyrus)
-
-   4. Addressed comments raised during IESG evaluation, in particular:
- 
-      Clarified that space is used as delimiter between flag names.
-
-      Described capabilities provided by the extension as they are
-      visible to end users.
-
-
-1. Introduction
-
-   This is an extension to the Sieve language defined by [SIEVE] for
-   setting [IMAP] flags. It adds a new tagged argument to "keep" and
-   "fileinto" that describes the list of flags that have to be set
-   when the message is delivered to the specified mailbox. It also
-   adds several actions to help manipulate list of flags and a test
-   to check if a flag belongs to a list.
-
-   From user's prospective this extension provides several
-   capabilities. First, it allows manipulation of sets of IMAP flags.
-   Second, it gives ability to associate a set of IMAP flags with
-   a message that is delivered to a mailstore using the keep/fileinto
-   actions. Third, it maintains an internal variable. The internal
-   variable contains the default flags that will be associated with
-   a message that is delivered using the keep, implicit keep or fileinto
-   actions, when the :flags tagged argument is not specified.
-   When the Sieve [VARIABLES] extension is also supported by the Sieve
-   engine, it enables support for multiple variables containing sets
-   of IMAP flags.
-
-   The capability string associated with extension defined in this
-   document is "imap4flags". All conformant implementations MUST
-   implement all Sieve actions (Setflag, Addflag, Removeflag),
-   the hasflag test and the :flags tagged argument described in this
-   document.
-
-   The "imap4flags" extension can be used with or without the
-   "variables" extension [VARIABLES]. When the "variables" extension
-   is enabled in a script using <require "variables">, the script can
-   use explicit variable names in setflag/addflag/removeflag actions
-   and hasflag test. See also section 3 for more details. When the
-   "variables" extension is not enabled the explicit variable name
-   parameter to setflag/addflag/removeflag/hasflag MUST NOT be used
-   and MUST cause an error according to [SIEVE].
-
-2. Conventions used.
-
-   Conventions for notations are as in [SIEVE] section 1.1, including
-   use of "Usage:" label for the definition of action and tagged
-   arguments syntax.
-
-   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 RFC 2119.
-
-
-2.1. General requirements for flag handling
-
-   The following notes apply to processing of Addflag/Removeflag/Setflag
-   actions, hasflag test and :flags tagged argument.
-
-   A Sieve interpreter MUST ignore empty strings (i.e. "") in a
-   list-of-flags parameter.
-
-   A string containing a space-separated list of flag names is
-   equivalent to a string list consisting of the flags. This requirement
-   is to simplify amalgamation of multiple flag lists.
-
-   The Sieve interpreter SHOULD check the list of flags for validity as
-   described by [IMAP] ABNF. In particular according to [IMAP] non-ASCII
-   characters are not allowed in flag names. However spaces MUST be
-   always allowed as delimiters in strings representing a list of flags.
-   In such strings multiple spaces between flag names MUST be treated as
-   a single space character, leading and trailing spaces MUST be
-   ignored.
-
-   If a flag validity check fails the flag MUST be ignored.
-
-   Note that it is not possible to use this extension to set or clear
-   the \Recent flag or any other special system flag which is not
-   settable in [IMAP]. Any such flags MUST be ignored if included in
-   a flag list.
-
-
-3. Actions
-
-   All actions described in this specification (setflag, addflag,
-   removeflag) operate on string variables that contain a set of [IMAP]
-   flags. On variable substitution a set of flags is represented as
-   a string containing space-separated list of flag names.
-
-   Any of setflag/addflag/removeflag action MAY alter the flag list in
-   any way that leaves its semantics as a set of case-insensitive words
-   unaltered. For example, it may reorder the flags, alter the case of
-   the letters in them, or add or remove duplicates or extraneous
-   spaces. Scripts MUST NOT make assumptions about the ordering of
-   flags in lists or the preservation of their case.
-
-   Note that the parameter specifying a variable name to setflag/
-   addflag/removeflag actions and the hasflag test is optional. If the
-   parameter is not specified the actions operate on the internal
-   variable, which has the empty value when the script starts execution.
-   If the SIEVE interpreter doesn't support the "variables" extension
-   [VARIABLES], the presence of the variable name parameter will cause
-   a runtime error [SIEVE].
-
-   The "addflag" action adds flags to an existing set. The "removeflag"
-   action removes flags from an existing set. The "setflag" action
-   replaces an existing set of flags with a new set.  The "set" action
-   defined in [VARIABLES] can be used to replace an existing set of
-   flags with a new set as well. However it should be noted that the
-   "set" action can't perform any flag reordering, duplicate
-   elimination, etc.
-
-   The :flags tagged argument to "keep" and "fileinto"
-   actions is used to associate a set of flags
-   with the current message. If the :flags tagged argument is not
-   specified with those 2 actions, the current value of the internal
-   variable is used instead. The value of the internal variable
-   also applies to the implicit keep.
-
-   Note that when keep/fileinto is used multiple times in a script and
-   duplicate message elimination is performed (as described in Section
-   2.10.3 of [SIEVE]), the last flag list value MUST win.
-
-
-3.1. Setflag Action
-
-   Usage:   setflag [<variablename: string>]
-            <list-of-flags: string-list>
-
-   Setflag is used for setting [IMAP] system flags or keywords.
-   Setflag replaces any previously set flags.
-
-
-   Example:  if size :over 500K {
-                 setflag "\\Deleted";
-             }
-
-   A more substantial example is:
-
-   Example:
-        if header :contains "from" "boss@frobnitzm.example.edu" {
-            setflag "flagvar" "\\Flagged";
-            fileinto :flags "${flagvar}" "INBOX.From Boss";
-        }
-
-
-3.2. Addflag action
-
-   Usage:   addflag [<variablename: string>]
-            <list-of-flags: string-list>
-
-   Addflag is used to add flags to a list of [IMAP] flags. It doesn't
-   replace any previously set flags. This means that multiple
-   occurrences of addflag are treated additively.
-
-   The following examples demonstrate requirements described in 2.1.
-   The following two actions
-
-      addflag "flagvar" "\\Deleted";
-      addflag "flagvar" "\\Answered";
-
-   produce the same result as the single action
-
-      addflag "flagvar" ["\\Deleted", "\\Answered"];
-
-   or
-
-      addflag "flagvar" "\\Deleted \\Answered";
-
-   or
-
-      addflag "flagvar" "\\Answered   \\Deleted";
-
-
-3.3. Removeflag Action
-
-   Usage:   removeflag [<variablename: string>]
-            <list-of-flags: string-list>
-
-   Removeflag is used to remove flags from a list of [IMAP] flags.
-   Removeflag clears flags previously set by "set"/"addflag". Calling
-   removeflag with a flag that wasn't set before is not an error and
-   is ignored. Note, that if an implementation doesn't perform automatic
-   duplicate elimination, it MUST remove all occurences of the flags
-   specified in the second parameter to removeflag. Empty strings in the
-   list-of-flags MUST be ignored. Also note, that flag names are
-   case-insensitive, as described in [IMAP].
-   Multiple removeflag actions are treated additively.
-
-      Example:
-        if header :contains "Disposition-Notification-To"
-           "mel@example.com" {
-            addflag "flagvar" "$MDNRequired";
-        }
-        if header :contains "from" "imap@cac.washington.example.edu" {
-            removeflag "flagvar" "$MDNRequired";
-            fileinto :flags "${flagvar}" "INBOX.imap-list";
-        }
-
-
-4.  Test hasflag
-
-   Usage: hasflag [MATCH-TYPE] [COMPARATOR]
-          [<variable-list: string-list>]
-          <list-of-flags: string-list>
-
-   The "hasflag" test evaluates to true if any of the variables matches
-   any flag name.  The type of match defaults to ":is".
-   If the list of variables is omitted, value of the internal variable
-   is used instead.
-
-   The default comparator is "i;ascii-casemap", which is the same
-   case-insensitive comparison as defined for IMAP flags by [IMAP].
-
-   The "relational" extension [RELATIONAL] adds a match type called
-   ":count".  The :count of a variable returns the number of distinct
-   flags in it.  The count of a list of variables is the sum of the
-   counts of the member variables.
-
-
-   Example:
-     If the internal variable has the value "A B", the following test
-
-      hasflag :is "b A"
-
-     evaluates to true. The above test can be also written as
-
-      hasflag ["b","A"]
-
-   Example:
-     If the variable "MyVar" has value "NonJunk Junk gnus-forward
-     $Forwarded NotJunk JunkRecorded $Junk $NotJunk", the following
-     tests evaluate to true:
-
-
-      hasflag :contains "MyVar" "Junk"
-      hasflag :contains "MyVar" "forward"
-      hasflag :contains "MyVar" ["label", "forward"]
-      hasflag :contains "MyVar" ["junk", "forward"]
-
-     Note that the last of these tests can be rewritten
-     as
-
-      hasflag :contains "MyVar" "junk forward"
-
-     or
-
-      hasflag :contains "MyVar" "forward junk"
-
-     However the last two forms are not recommended.
-
-     And the following tests will evaluate to false:
-
-      hasflag :contains "MyVar" "label"
-
-      hasflag :contains "MyVar" ["label1", "label2"]
-
-   Example:
-     If the variable "MyFlags" has the value "A B", the following test
-
-       hasflag :count "ge" :comparator "i;ascii-numeric"
-               "MyFlags" "2"
-
-     evaluates to true, as the variable contains 2 distinct flags.
-
-
-5. Tagged argument :flags
-
-   This specification adds a new optional tagged argument ":flags" that
-   alter the behavior of actions "keep" and "fileinto".
-
-   The :flags tagged argument specifies that the flags provided in the
-   subsequent argument should be set when fileinto/keep delivers the
-   message to the target mailbox/user's main mailbox. If the :flags
-   tagged argument is not specified, "keep" or "fileinto" will use
-   the current value of the internal variable when delivering message
-   to the target mailbox.
-
-   Usage:   ":flags" <list-of-flags: string-list>
-
-   The copy of the message filed into mailbox will have only flags
-   listed after the ":flags" tagged argument.
-
-   The Sieve interpreter MUST ignore all flags that it can't store
-   permanently. This means that the interpreter MUST NOT treat failure
-   to store any flag as a runtime failure to execute the Sieve
-   script. For example, if the mailbox "INBOX.From Boss" can't store any
-   flags, then
-
-     fileinto :flags "\\Deleted" "INBOX.From Boss";
-
-   and
-
-     fileinto "INBOX.From Boss";
-
-   are equivalent.
-
-   This document doesn't dictate how the Sieve interpreter will set
-   the [IMAP] flags. In particular, the Sieve interpreter may work as
-   an IMAP client, or may have direct access to the mailstore.
-
-
-6. Interaction with Other Sieve Actions
-
-   This extension works only on the message that is currently being
-   processed by Sieve, it doesn't affect another message generated
-   as a side effect of any action or any other message already in
-   the mailstore.
-
-   The extension described in this document doesn't change the implicit
-   keep (see section 2.10.2 of [SIEVE]).
-
-
-7. Security Considerations
-
-   Security considerations are discussed in the [IMAP], [SIEVE] and
-   [VARIABLES].
-
-   This extension intentionally doesn't allow setting [IMAP] flags on
-   an arbitrary message in the [IMAP] message store.
-
-   It is believed that this extension doesn't introduce any additional
-   security concerns.
-
-
-8. IANA Considerations
-
-   The following template specifies the IANA registration of the
-   variables Sieve extension specified in this document:
-
-   To: iana@iana.org
-   Subject: Registration of new Sieve extension
-
-   Capability name: imap4flags
-   Capability keyword: imap4flags
-   Capability arguments: N/A
-   Standards Track/IESG-approved experimental RFC number:
-           this RFC
-   Person and email address to contact for further information:
-           Alexey Melnikov
-           <alexey.melnikov@isode.com>
-
-   This information should be added to the list of sieve extensions
-   given on http://www.iana.org/assignments/sieve-extensions.
-
-
-9. Extended example
-
-   #
-   # Example Sieve Filter
-   # Declare any optional features or extension used by the script
-   #
-   require ["fileinto", "imap4flags", "variables"];
-
-   #
-   # Move large messages to a special mailbox
-   #
-   if size :over 1M
-           {
-           addflag "MyFlags" "Big";
-           if header :is "From" "boss@company.example.com"
-                      {
-   # The message will be marked as "\Flagged Big" when filed into 
-   # mailbox "Big messages"
-                      addflag "MyFlags" "\\Flagged";
-                      }
-           fileinto :flags "${MyFlags}" "Big messages";
-           }
-
-   if header :is "From" "grandma@example.net"
-           {
-           addflag "MyFlags" ["\\Answered", "$MDNSent"];
-   # If the message is bigger than 1Mb it will be marked as 
-   # "Big \Answered $MDNSent" when filed into mailbox "grandma". 
-   # If the message is shorter than 1Mb it will be marked as
-   # "\Answered $MDNSent"
-           fileinto :flags "${MyFlags}" "GrandMa";
-           }
-
-   #
-   # Handle messages from known mailing lists
-   # Move messages from IETF filter discussion list to filter folder
-   #
-   if header :is "Sender" "owner-ietf-mta-filters@example.org"
-           {
-           set "MyFlags" "\\Flagged $Work";
-   # Message will have both "\Flagged" and $Work flags
-           keep :flags "${MyFlags}";
-           }
-
-   #
-   # Keep all messages to or from people in my company
-   #
-   elsif anyof address :domain :is ["From", "To"] "company.example.com"
-           {
-           keep :flags "${MyFlags}"; # keep in "Inbox" folder
-           }
-   #
-   # Try and catch unsolicited email.  If a message is not to me,
-   # or it contains a subject known to be spam, file it away.
-   #
-   elsif anyof (not address :all :contains
-                  ["To", "Cc"] "me@company.example.com",
-                header :matches "subject"
-                  ["*make*money*fast*", "*university*dipl*mas*"])
-           {
-           remove "MyFlags" "\\Flagged";
-           fileinto :flags "${MyFlags}" "spam";
-           }
-   else
-           {
-           # Move all other external mail to "personal"
-           # folder.
-           fileinto :flags "${MyFlags}" "personal";
-           }
-
-
-10.  Acknowledgments
-
-    This document has been revised in part based on comments and
-    discussions which took place on and off the Sieve mailing list.
- 
-    The help of those who took the time to review the draft and make
-    suggestions is appreciated, especially that of Tim Showalter,
-    Barry Leiba, Randall Gellens, Ken Murchison, Cyrus Daboo,
-    Matthew Elvey, Jutta Degener, Ned Freed, Marc Mutz, Nigel Swinson,
-    Kjetil Torgrim Homme, Mark E. Mallett, Dave Cridland,
-    Arnt Gulbrandsen, Philip Guenther, Rob Austein, Sam Hartman,
-    Eric Gray and Cullen Jennings.
-
-    Special thanks to Tony Hansen and David Lamb for helping me
-    better explain the concept.
-
-
-11. Author's Address
-
-    Alexey Melnikov
-    Isode Limited
-
-    5 Castle Business Village
-    Hampton, Middlesex
-    United Kingdom, TW12 2BX
-
-    Email: alexey.melnikov@isode.com
-
-
-12.  Normative References
-
-    [SIEVE] Guenther, P. and T. Showalter, "Sieve: An Email Filtering
-    Language", work in progress, I-D draft-ietf-sieve-3028bis.
-
-    [KEYWORDS] Bradner, S., "Keywords for use in RFCs to Indicate
-    Requirement Levels", Harvard University, RFC 2119, March 1997.
-
-    [IMAP] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION
-    4rev1", University of Washington, RFC 3501, March 2003.
-
-    [VARIABLES] Homme, K. T., "Sieve -- Variables Extension", University
-    of Oslo, work in progress, draft-ietf-sieve-variables-XX.txt
-
-    [RELATIONAL] Leiba, B. and Segmuller, W., "Sieve Extension:
-    Relational Tests", Work in Progress, draft-ietf-sieve-3431bis-XX.txt
-
-
-13.  Intellectual Property Statement
-
-    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.
-
-
-14.  Full Copyright Statement
-
-    Copyright (C) The Internet Society (2006).
-
-    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 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.
-
-Acknowledgement
-
-   Funding for the RFC Editor function is currently provided by the
-   Internet Society.
diff --git a/src/lib-sieve/plugins/imapflags/ext-imapflags.c b/src/lib-sieve/plugins/imapflags/ext-imapflags.c
index c09afcafd5dfdcdb0b2aae4c13541b23bf0015ec..273c7f98765050e5b9f5e01154975a18e1d6e3bf 100644
--- a/src/lib-sieve/plugins/imapflags/ext-imapflags.c
+++ b/src/lib-sieve/plugins/imapflags/ext-imapflags.c
@@ -1,10 +1,10 @@
-/* Extension imapflags
- * ------------------
+/* Extension imap4flags
+ * --------------------
  *
  * Authors: Stephan Bosch
- * Specification: draft-ietf-sieve-imapflags-05
+ * Specification: RFC 5232
  * Implementation: full 
- * Status: experimental, largely untested
+ * Status: experimental, roughly tested
  *
  */