Network Working Group                                       W. Segmuller
Internet Draft                           IBM T.J. Watson Research Center
Document: draft-segmuller-sieve-relation-01.txt           September 2001
                                                     Expires: March 2002


                   Sieve Extension: Relational Tests

Status of this Document

  This document is an Internet-Draft and is in full conformance with
  all provisions of Section 10 of RFC2026.  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.

  The protocol discussed in this document is experimental and subject
  to change.  Persons planning on either implementing or using this
  protocol are STRONGLY URGED to get in touch with the author before
  embarking on such a project.

  Discussion and suggestions for improvement are requested, and should
  be sent to ietf-mta-filters@imc.org.  This document will expire
  before 31 September 2001.  Distribution of this memo is unlimited.

Abstract

  This document describes the RELATIONAL extension to the Sieve mail
  filtering language [SIEVE].  This extension allows relational
  operators on field values and on the number of entities in header
  fields and addresses.

0 Change History

  changes from version -00

  - domain names fixed in examples, thanks to Phil Pennock and Tony
     Hansen.


Segmuller                  Expires March 2002                   [Page 1]


Internet Draft     Sieve Extension: Relational Tests     September 2001

  - Strip leading and trailing spaces when using a match-type of
     ":value".

1 Introduction

  The RELATIONAL extension provides relational operators on the
  address, envelope and header tests.  This extension also provides a
  way of counting the entities in a message header or address field.

  With this extension, the sieve script may now determine if a field is
  greater than or less than a value instead of just equal to.  One use
  is for the x-priority field: move messages with a priority greater
  than 3 to the "work on later" folder.  Mail could also be sorted by
  the from address.  Those userids that start with 'a'-'m' go to one
  folder, and the rest go to another folder.

  The sieve script can also determine the number of fields in the
  header, or the number of addresses in a recipient field.  An example:
  are there more than 5 addresses in the to and cc fields.

2 Conventions used in this document

  Conventions for notations are as in [SIEVE] section 1.1,  including
  use of [KEYWORDS] and "Syntax:" label for the definition of action
  and tagged arguments syntax, and the use of [ABNF]

  The capability string associated with extension defined in this
  document is "relational".

3 Match Type

  This document defines two new match types.  They are the VALUE match
  type and the COUNT match type.

  The syntax is:

     MATCH-TYPE =/ COUNT / VALUE

     COUNT = ":count" relational-match

     VALUE = ":value" relational-match

     relational-match = DQUOTE ( "gt" / "ge" / "lt"
                                 / "le" / "eq" / "ne" ) DQUOTE

3.1  Match Type Value

  The VALUE match type does a relational comparison between strings.

  The VALUE match type may be used with any comparator which returns
  sort information.

  Leading and trailing white space MUST be removed from the value from
  the message for the comparison.  White space is defined as


Segmuller                  Expires March 2002                   [Page 2]


Internet Draft     Sieve Extension: Relational Tests     September 2001

     SP / HTAB / CRLF / CR / LF

  A value from the message is considered the left side of the relation.
  A value from the test expression, the key-list for address, envelope,
  and header tests, is the right side of the relation.

  If there are multiple values on either side or both sides, the test
  is considered true if any pair is true.

3.2  Match Type Count

  The COUNT match type first determines the number of the specified
  entities in the message and does a relational comparison of the
  number of entities to the values specified in the test expression.

  The COUNT match type SHOULD only be used with numeric comparators.  A
  suitable comparator is "i;ascii-numeric" which is defined in [ACAP].

  For the Address Test, this counts the number of recipients in the
  specified fields.  Group names are ignored.

  For the Envelope Test, this counts the number of recipients in the
  specified envelope parts.

  For the Header Test, this counts the total number of instances of the
  specified fields.  This does not count individual addresses in the
  "to", "cc", and other recipient fields.

  In all cases, if more than one field name is specified, the counts
  for all specified fields are added together to obtain the number for
  comparison.  Thus, specifying ["to", "cc"] in an address COUNT test
  will compare the total number of "to" and "cc" addresses; if separate
  counts are desired, they must be done in two comparisons, perhaps
  joined by "allof" or "anyof".

4 Security Considerations

  Security considerations are discussed in [SIEVE].

  It is belived that this  extension  doesn't  introduce any additional
  security concerns.

5 Example

  Using the message:

     received: ...
     received: ...
     subject: example
     to: foo@example.com.invalid, baz@example.com.invalid
     cc: qux@example.com.invalid

  The test



Segmuller                  Expires March 2002                   [Page 3]


Internet Draft     Sieve Extension: Relational Tests     September 2001

       address :count "ge" :comparator "i;ascii-numeric" ["to", "cc"]
     ["3"]

  would be true and the test

       anyof ( address :count "ge" :comparator "i;ascii-numeric"
                       ["to"] ["3"],
               address :count "ge" :comparator "i;ascii-numeric"
                       ["cc"] ["3"] )

  would be false.

  To check the number of received fields in the header, the following
  test may be used:

       header :count "ge" :comparator "i;ascii-numeric"
                      ["received"] ["3"]

  This would return false.  But

       header :count "ge" :comparator "i;ascii-numeric"
                        ["received", "subject"] ["3"]

  would return true.

  The test:

       header :count "ge" :comparator "i;ascii-numeric"
                     ["to", "cc"] ["3"]

  will always return false on an RFC 822 compliant message [RFC822],
  since a message can have at most one "to" field and at most one "cc"
  field.  This test counts the number of fields, not the number of
  addresses.

6 Extended Example

  require "relational";

  if header :value "lt" :comparator "i;ascii-numeric"
            ["x-priority"] ["3"]
  {
     fileinto "Priority";
  }

  elseif address :count "gt" :comparator "i;ascii-numeric"
             ["to"] ["5"]
  {
     # everything with more than 5 recipients in the "to" field
     # is considered SPAM
     fileinto "SPAM";
  }

  elseif address :value "gt" :all :comparator "i;ascii-casemap"
             ["from"] ["M"]

Segmuller                  Expires March 2002                   [Page 4]


Internet Draft     Sieve Extension: Relational Tests     September 2001

  {
     fileinto "From N-Z";
  } else {
     fileinto "From A-M";
  }

  if allof ( address :count "eq" :comparator "i;ascii-numeric"
                     ["to", "cc"] ["1"] ,
             address :all :comparator "i;ascii-casemap"
                     ["to", "cc"] ["me@foo.example.com"]
  {
     fileinto "Only me";
  }

7 Author's Address

  Wolfgang Segmuller
  IBM T.J. Watson Research Center
  30 Saw Mill River Rd
  Hawthorne, NY  10532

  Phone: 1-914-784-7408
  Email: whs@watson.ibm.com

Appendix A. References

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

  [Keywords]; Bradner, S.; "Key words for use in RFCs to Indicate
  Requirement Levels"; RFC 2119; Harvard University; March 1997

  [ABNF]; Crocker, D.; "Augmented BNF for Syntax Specifications: ABNF";
  RFC 2234; Internet Mail Consortium; November, 1997.

  [RFC822]; Crocker, D.; "Standard for the Format of ARPA Internet Text
  Messages"; RFC 822; University of Delaware; August 1982

  [ACAP]; Newman, C. and J. G. Myers, "ACAP -- Application
  Configuration Access Protocol", RFC 2244, November 1997.

Appendix B. Full Copyright Statement

  Copyright (C) The Internet Society 2001. All Rights Reserved.

  This document and translations of it may be copied and furnished to
  others, and derivative works that comment on or otherwise explain it
  or assist in its implementation may be prepared, copied, published
  and distributed, in whole or in part, without restriction of any
  kind, provided that the above copyright notice and this paragraph are
  included on all such copies and derivative works.  However, this
  document itself may not be modified in any way, such as by removing
  the copyright notice or references to the Internet Society or other
  Internet organizations, except as needed for the purpose of
  developing Internet standards in which case the procedures for

Segmuller                  Expires March 2002                   [Page 5]


Internet Draft     Sieve Extension: Relational Tests     September 2001

  copyrights defined in the Internet Standards process must be
  followed, or as required to translate it into languages other than
  English.

  The limited permissions granted above are perpetual and will not be
  revoked by the Internet Society or its successors or assigns.

  This document and the information contained herein is provided on an
  "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
  TASK FORCE DISCLAIMS 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.











































Segmuller                  Expires March 2002                   [Page 6]