Internet DRAFT - draft-happel-sieve-filter-rule-metadata

draft-happel-sieve-filter-rule-metadata







Network Working Group                                       H.-J. Happel
Internet-Draft                                              audriga GmbH
Intended status: Informational                             13 March 2023
Expires: 14 September 2023


                       Sieve Filter Rule Metadata
               draft-happel-sieve-filter-rule-metadata-00

Abstract

   This document describes current practices in managing Sieve scripts
   and proposes a standardized way for storing filter rule metadata in
   Sieve comments.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   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."

   This Internet-Draft will expire on 14 September 2023.

Copyright Notice

   Copyright (c) 2023 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents (https://trustee.ietf.org/
   license-info) in effect on the date of publication of this document.
   Please review these documents carefully, as they describe your rights
   and restrictions with respect to this document.  Code Components
   extracted from this document must include Revised BSD License text as
   described in Section 4.e of the Trust Legal Provisions and are
   provided without warranty as described in the Revised BSD License.






Happel                  Expires 14 September 2023               [Page 1]

Internet-Draft         Sieve Filter Rule Metadata             March 2023


Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
     1.1.  GUI-based email filter editors  . . . . . . . . . . . . .   3
     1.2.  Indirect creation of email filters  . . . . . . . . . . .   3
     1.3.  Special purpose email filters . . . . . . . . . . . . . .   4
     1.4.  Other kinds of Sieve scripts  . . . . . . . . . . . . . .   4
     1.5.  Conventions Used in This Document . . . . . . . . . . . .   4
   2.  Modular Sieve scripts in practice . . . . . . . . . . . . . .   4
     2.1.  Rule comments . . . . . . . . . . . . . . . . . . . . . .   4
     2.2.  Deactivation of filtering rules . . . . . . . . . . . . .   5
       2.2.1.  Example: Commenting out . . . . . . . . . . . . . . .   5
       2.2.2.  Example: Wrapping . . . . . . . . . . . . . . . . . .   5
     2.3.  Issues  . . . . . . . . . . . . . . . . . . . . . . . . .   6
   3.  Proposed conventions  . . . . . . . . . . . . . . . . . . . .   6
     3.1.  Script comments . . . . . . . . . . . . . . . . . . . . .   6
     3.2.  Rule comments . . . . . . . . . . . . . . . . . . . . . .   6
     3.3.  Deactivation of filtering rules . . . . . . . . . . . . .   6
   4.  Examples  . . . . . . . . . . . . . . . . . . . . . . . . . .   7
     4.1.  CriticalPath  . . . . . . . . . . . . . . . . . . . . . .   7
     4.2.  Horde (Ingo)  . . . . . . . . . . . . . . . . . . . . . .   7
     4.3.  Oracle Communication Messaging Server . . . . . . . . . .   8
     4.4.  OpenXchange . . . . . . . . . . . . . . . . . . . . . . .   9
     4.5.  OpenWave/InterMail  . . . . . . . . . . . . . . . . . . .   9
   5.  Security considerations . . . . . . . . . . . . . . . . . . .   9
   6.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   9
   7.  Informative References  . . . . . . . . . . . . . . . . . . .   9
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .   9

1.  Introduction

   Sieve is a formal language for email filtering specified in
   (RFC5228).  Filters are stored in so called "scripts", which are text
   files containing Sieve filtering expressions.

   Users can edit Sieve scripts directly, in case they have access to
   the script files, or by using the ManageSieve protocol (RFC5804), if
   it is made available by their email service.

   While experienced users may follow this approach, (RFC5228, section
   1) anticipates that "GUI-based editors will be the preferred way of
   editing filters for a large number of users."

   This likely describes current practice, given that typical end users
   rarely have direct access to their Sieve scripts, and given that most
   email services do not offer ManageSieve access.  Furthermore, even
   for a popular email client such as Thunderbird, only very rough
   Script editors seem to exist [TBSieve].



Happel                  Expires 14 September 2023               [Page 2]

Internet-Draft         Sieve Filter Rule Metadata             March 2023


1.1.  GUI-based email filter editors

   Many Webmail and Groupware software features GUI-based email filter
   editors, which use Sieve as the underlying script language.  When
   creating filters, the editor will create or update the user's Sieve
   script.  When opening the editor, the script will be parsed and
   presented in a constrained set of UI widgets (such as dropdown-lists
   or input fields).

   The vast majority (if not all) GUI-based editors follow a similar
   interaction paradigm, which is designed along the Sieve language
   design concepts.  A user first needs to define a "test" (RFC5228,
   section 2.5), which defines filtering criteria (e.g., based on sender
   or size of a message).  The second major component is the definition
   of one or more "actions" (RFC5228, section 4), such as to move an
   email matching the filtering criteria into a certain mailbox.

   The design of existing editors affords users to _modularize_ their
   email filters, so that multiple test/action style "fiter rules" are
   created.  The "else" and "elseif" keywords, which are common in free-
   form Sieve scripts (RFC5228, section 9), are typically not used in
   those modularized filter rules.

   Modularized filter rules often contain a "stop;" commend as their
   final action by default, which makes them widely independent of each
   other.  GUI-based email filter editors typically allow users to label
   and to (re-)order filter rules.

1.2.  Indirect creation of email filters

   Besides a dedicated GUI-based editor for email filters, many Webmail
   and Groupware software include additional ways to modify the Sieve
   script of a user.  There are _contextual_ interfaces, which create
   rules in the background or which launch a prefilled filter rule
   creation dialog.

   Examples are:

   *  Creating a filter rule based on a sender's email address ("Move
      all emails from "John Doe" to ...")
   *  Adding a sender to a block- or allowlist

   The latter case is also an example for special purpose filters as
   described in the following.







Happel                  Expires 14 September 2023               [Page 3]

Internet-Draft         Sieve Filter Rule Metadata             March 2023


1.3.  Special purpose email filters

   Email filters are often used as a technology for realizing other
   features, such as blocklists, vacation messages [RFC5230], or email
   forwarding.  In most of these cases, there will be a _dedicated user
   interface_ specific to the feature.  This user interface will still
   write to the user's Sieve script, but the corresponding email filter
   will either not be editable or hidden in the regular email filter
   editor.

   This special handling in the filter editor (i.e., the recognition of
   a special purpose filter rule) is typically based on metadata which
   is captured in Sieve comments (see also Section 4).

1.4.  Other kinds of Sieve scripts

   Besides capturing rules based on user input, Sieve scripts are
   sometimes also used in other ways.  E.g., some SPAM filtering systems
   use machine-generated Sieve scripts for their operations.  Such
   scripts are typically hidden from end users and hence cannot be
   edited.  They are out of the scope of this draft.

1.5.  Conventions Used in This Document

2.  Modular Sieve scripts in practice

2.1.  Rule comments

   In order to manage modularized Sieve scripts, GUI-based script
   editors need to capture the following information.

   *  The _type_ of a rule, distinguishing user-defined rules from
      certain special-purpose rules.  Examples for the latter are:
      VACTION, SPAM, ALLOWED/BLOCKED SENDER, AUTOFORWARD.
   *  The user-defined name of a rules, as shown in the rule management
      UI.  Some systems will use predefined rule names instead of rule
      types.

   In addition to this, some systems store further information:

   *  Rule Id: an id for internal reference and/or ordering of rules in
      processing and list presentation.
   *  Rule position: a numberic value to maintain the ordering of filter
      rules in a separate field.
   *  Rule description: additional notes complementing the rule label






Happel                  Expires 14 September 2023               [Page 4]

Internet-Draft         Sieve Filter Rule Metadata             March 2023


   Since none of this information is natively supported by the Sieve
   rule language, systems fall back to Sieve comments for storing.
   Various vendor-specific practices have emerged, as seen in Section 4.

2.2.  Deactivation of filtering rules

   Another aspect of informal standardization has been the deacativation
   of certain Sieve code.  Based on the RFC, Sieve offers two means of
   deactivation:

   *  Commenting out Sieve code
   *  Keeping one active and multiple deativated scripts (as per
      ManageSieve (RFC5804, section 1.4))

   While some vendors using type (b) scripts rely on commenting out for
   disabling individual modular rules, others came up with more
   formalized approaches such as wrapping disabled rules using a simple
   "if (false)" clause.

2.2.1.  Example: Commenting out

   The following filtering rule is take from an OpenXChange-generated
   Sieve script:

   Flag: |UniqueId:15|Rulename: testRuleCreate
   if true
   {
       discard ;
   }

   Once "deactivated" in the user interface, this filtering rule will be
   represented in the Sieve script as follows:

   ## Flag: |UniqueId:15|Rulename: testRuleCreate
   #<!-->if true
   #<!-->{
   #<!-->    discard ;
   #<!-->}

2.2.2.  Example: Wrapping

   The following filtering rule is take from an CriticalPath-generated
   Sieve script:

   if allof (true, header :contains "X-Priority" "5")
   {
           discard;
   }



Happel                  Expires 14 September 2023               [Page 5]

Internet-Draft         Sieve Filter Rule Metadata             March 2023


   Once "deactivated" in the user interface, this filtering rule will be
   represented in the Sieve script as follows:

   if allof (false, header :contains "X-Priority" "5")
   {
           discard;
   }

2.3.  Issues

   While the described informal workarounds helped vendors to cope
   within the boundaries of the Sieve language, we see a number of
   issues with this status quo:

   *  Interoperability: Vendor-specific workarounds tend to work only
      with the vendors own user interfaces.  Any attempt to edit the
      resulting Sieve scripts can essentially cause trouble displaying
      these scripts respectively their contained rules within the
      vendors UI.  Furthermore, editing special-purpose rules might even
      lead to more severe side effects.  The lack of interoperability
      might be considered a barrier for the implementation of useful
      Sieve clients, which in turn hinders more widespread adoption of
      Sieve.
   *  Portability: similar to the way Sieve clients should be able to
      interoperate with the Sieve usage of servers, Sieve scripts should
      be portable between different Sieve server vendors.  Otherwise,
      users will not be able to transfer their data between different
      providers.

3.  Proposed conventions

   The purpose of this section is to propose a normative reference for
   filtering rule comments and deactivation.

3.1.  Script comments

   (TBD)

3.2.  Rule comments

   (TBD)

3.3.  Deactivation of filtering rules

   For the purpose of deactivating rules, the "wrapping" approach
   described in the previous section should be applied.

   (TBD)



Happel                  Expires 14 September 2023               [Page 6]

Internet-Draft         Sieve Filter Rule Metadata             March 2023


4.  Examples

   In this section, we will document Sieve script patterns used by the
   software of different vendors.

   "(...)" stands for omitted code in example scripts.

4.1.  CriticalPath

   # cp_filter_name: Test filter
   # cp_filter_description:

4.2.  Horde (Ingo)






































Happel                  Expires 14 September 2023               [Page 7]

Internet-Draft         Sieve Filter Rule Metadata             March 2023


# Sieve Filter
# Generated by Ingo (http://www.horde.org/apps/ingo/) (09/03/2021, 05:37:41 PM)

require ["vacation", "regex", "fileinto", "imapflags", "body", "reject", "notify"];

# Whitelisted Addresses
if address :all :comparator "i;ascii-casemap" :is ["From", "Sender", "Resent-From"] "whitelist@foo.com"  {
    keep;
    stop;
}

# Vacation
(...)

# Blacklisted Addresses
if address :all :comparator "i;ascii-casemap" :is ["From", "Sender", "Resent-From"] "non@foo.com"  {
    discard;
    stop;
}

# Spamfilter
if header :comparator "i;ascii-casemap" :matches "X-Spam-Status" "yes*"  {
    fileinto "spamblock";
    stop;
}

# Forwards
if true {
    redirect "fws@foo.com";
}

# userDefined Rule (Name: fileInto userDefinedFolder)
if address :all :comparator "i;ascii-casemap" :contains "To" "x"  {
    fileinto "userDefinedFolder";
    stop;
}

4.3.  Oracle Communication Messaging Server

#RULE: $Name="Blocked senders" $Type="BLOCKED_ADDRESSES" $Version=1 $Lz=1 $Order=1
#BEGINFILTER
(...)
#ENDFILTER

#RULE: $Name="Test Folder Bulkmail" $Type="DEFAULT_TYPE" $Version=1 $Lz=1 $Order=6
#require "fileinto";
(...)
#ENDRULE



Happel                  Expires 14 September 2023               [Page 8]

Internet-Draft         Sieve Filter Rule Metadata             March 2023


4.4.  OpenXchange

   ## Flag: vacation|UniqueId:1|Rulename: vacation notice

   ## Flag: autoforward|UniqueId:2|Rulename: autoforward

   ## Flag: |UniqueId:0|Rulename: MyTestFiler

4.5.  OpenWave/InterMail

5.  Security considerations

   TBD

6.  IANA Considerations

   This document has no IANA actions at this time.

7.  Informative References

   [TBSieve]  Schmid, T., "Thunderbird Sieve Add-On",
              <https://addons.thunderbird.net/de/thunderbird/addon/
              sieve/>.

Author's Address

   Hans-Joerg Happel
   audriga GmbH
   Email: happel@audriga.com
   URI:   https://www.audriga.com





















Happel                  Expires 14 September 2023               [Page 9]