From 84024b728b04d47480a5c033585f2173eb0df0b8 Mon Sep 17 00:00:00 2001 From: Philip Hazel Date: Wed, 21 Mar 2007 15:15:12 +0000 Subject: [PATCH] Patch from the Sieve maintainer. --- doc/doc-txt/ChangeLog | 4 +++- doc/doc-txt/README.SIEVE | 34 ++++++++++++++++++++++++++++------ src/src/sieve.c | 18 +++++++++++++++++- 3 files changed, 48 insertions(+), 8 deletions(-) diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index a34126472..b9f9967e6 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -1,4 +1,4 @@ -$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.497 2007/03/21 15:10:39 ph10 Exp $ +$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.498 2007/03/21 15:15:12 ph10 Exp $ Change log file for Exim from version 4.21 ------------------------------------------- @@ -190,6 +190,8 @@ PH/41 (Following a suggestion from Tony Finch) If all the RCPT commands in a intended to be helpful for MUAs that show only the final error to their users. +PH/42 Another patch from the Sieve maintainer. + Exim version 4.66 ----------------- diff --git a/doc/doc-txt/README.SIEVE b/doc/doc-txt/README.SIEVE index 42c9cbf5d..621ccf128 100644 --- a/doc/doc-txt/README.SIEVE +++ b/doc/doc-txt/README.SIEVE @@ -1,4 +1,4 @@ -$Cambridge: exim/doc/doc-txt/README.SIEVE,v 1.10 2006/04/25 10:44:57 ph10 Exp $ +$Cambridge: exim/doc/doc-txt/README.SIEVE,v 1.11 2007/03/21 15:15:12 ph10 Exp $ Notes on the Sieve implementation for Exim @@ -21,11 +21,12 @@ then there is no way around it. Exim Implementation The Exim Sieve implementation offers the core as defined by -draft-ietf-sieve-3028bis-05.txt (next version of RFC 3028 that fixes -specification mistakes), the "envelope" test (3028bis), the "fileinto" -action (3028bis), the "copy" action (RFC 3894), the "vacation" action -(draft-ietf-sieve-vacation-05.txt) and the "i;ascii-numeric" comparator -extension (RFC 2244). +draft-ietf-sieve-3028bis-10.txt (next version of RFC 3028 that +fixes specification mistakes), the "envelope" test (3028bis), the +"fileinto" action (3028bis), the "copy" parameter (RFC 3894), the +"vacation" action (draft-ietf-sieve-vacation-06), the "notify" action +(draft-ietf-sieve-notify-06.), the "i;ascii-numeric" comparator (RFC 2244) +and the subaddress parameter (draft-ietf-sieve-rfc3598bis-05). The Sieve filter is integrated in Exim and works very similar to the Exim filter: Sieve scripts are recognized by the first line containing @@ -361,3 +362,24 @@ Global Reply Address Blacklist The draft requires that each implementation offers a global black list of addresses that will never be replied to. Exim offers this as option "never_mail" in the autoreply transport. + + +The enotify extension + +The extension "enotify" is specified using the following grammar +extension. + + notify-command = "notify" { notify-options } + notify-options = [":from" string] + [":importance" <"1" / "2" / "3">] + [":options" 1*(string-list / number)] + [":message" string] + + command =/ notify-command + + valid_notify_method = "valid_notify_method" + + + test =/ valid_notify_method + +Only the mailto URI scheme is implemented. diff --git a/src/src/sieve.c b/src/src/sieve.c index a1a7b8883..9dd04eee7 100644 --- a/src/src/sieve.c +++ b/src/src/sieve.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/sieve.c,v 1.25 2007/03/13 10:05:17 ph10 Exp $ */ +/* $Cambridge: exim/src/src/sieve.c,v 1.26 2007/03/21 15:15:12 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -28,6 +28,9 @@ /* Undefine it for UNIX-style \n end-of-line terminators (default). */ #undef RFC_EOL +/* Define this for development of the Sieve extension "encoded-character". */ +#undef ENCODED_CHARACTER + /* Define this for development of the Sieve extension "envelope-auth". */ #undef ENVELOPE_AUTH @@ -58,6 +61,9 @@ struct Sieve int keep; int require_envelope; int require_fileinto; +#ifdef ENCODED_CHARACTER + int require_encoded_character; +#endif #ifdef ENVELOPE_AUTH int require_envelope_auth; #endif @@ -126,6 +132,10 @@ static uschar str_fileinto_c[]="fileinto"; static const struct String str_fileinto={ str_fileinto_c, 8 }; static uschar str_envelope_c[]="envelope"; static const struct String str_envelope={ str_envelope_c, 8 }; +#ifdef ENCODED_CHARACTER +static uschar str_encoded_character_c[]="encoded-character"; +static const struct String str_encoded_character={ str_encoded_character_c, 17 }; +#endif #ifdef ENVELOPE_AUTH static uschar str_envelope_auth_c[]="envelope-auth"; static const struct String str_envelope_auth={ str_envelope_auth_c, 13 }; @@ -3058,6 +3068,9 @@ filter->line=1; filter->keep=1; filter->require_envelope=0; filter->require_fileinto=0; +#ifdef ENCODED_CHARACTER +filter->require_encoded_character=0; +#endif #ifdef ENVELOPE_AUTH filter->require_envelope_auth=0; #endif @@ -3130,6 +3143,9 @@ while (parse_identifier(filter,CUS "require")) { if (eq_octet(check,&str_envelope,0)) filter->require_envelope=1; else if (eq_octet(check,&str_fileinto,0)) filter->require_fileinto=1; +#ifdef ENCODED_CHARACTER + else if (eq_octet(check,&str_encoded_character,0)) filter->require_encoded_character=1; +#endif #ifdef ENVELOPE_AUTH else if (eq_octet(check,&str_envelope_auth,0)) filter->require_envelope_auth=1; #endif -- 2.25.1