~ubuntu-branches/ubuntu/trusty/dovecot/trusty-proposed

« back to all changes in this revision

Viewing changes to pigeonhole/doc/rfc/notify.rfc5435.txt

  • Committer: Package Import Robot
  • Author(s): James Page, James Page, Ante Karamatic
  • Date: 2013-02-11 12:41:24 UTC
  • mfrom: (4.1.33 sid)
  • Revision ID: package-import@ubuntu.com-20130211124124-v7bdegzftlhw7yfr
Tags: 1:2.1.7-7ubuntu1
[ James Page ]
* Merge from Debian unstable (LP: #1117613, #1075456), remaining changes:
  + Add mail-stack-delivery package:
    - Update d/rules
    - d/control: convert existing dovecot-postfix package to a dummy
      package and add new mail-stack-delivery package.
    - Update maintainer scripts.
    - Rename d/dovecot-postfix.* to debian/mail-stack-delivery.*
    - d/mail-stack-delivery.preinst: Move previously installed backups and
      config files to a new package namespace.
    - d/mail-stack-delivery.prerm: Added to handle downgrades.
  + Use Snakeoil SSL certificates by default:
    - d/control: Depend on ssl-cert.
    - d/dovecot-core.postinst: Relax grep for SSL_* a bit.
  + Add autopkgtest to debian/tests/*.
  + Add ufw integration:
    - d/dovecot-core.ufw.profile: new ufw profile.
    - d/rules: install profile in dovecot-core.
    - d/control: dovecot-core - suggest ufw.
  + d/dovecot-core.dirs: Added usr/share/doc/dovecot-core
  + Add apport hook:
    - d/rules, d/source_dovecot.py
  + Add upstart job:
    - d/rules, d/dovecot-core.dovecot.upstart, d/control,
      d/dovecot-core.dirs, dovecot-imapd.{postrm, postinst, prerm},
      d/dovecot-pop3d.{postinst, postrm, prerm}.
      d/mail-stack-deliver.postinst: Convert init script to upstart.
  + d/control: Added Pre-Depends: dpkg (>= 1.15.6) to dovecot-dbg to support
    xz compression in Ubuntu.
  + d/control: Demote dovecot-common Recommends: to Suggests: to prevent
    install of extra packages on upgrade.
  + d/patches/dovecot-drac.patch: Updated with version for dovecot >= 2.0.0.
* Dropped changes, included in Debian:
  + d/{control,rules}: enable PIE hardening.
  + d/control: Drop B-D on systemd.
* d/p/mail-stack-delivery.postinst: Updated to ensure that configured SSL
  cert and key locations are used when configuring postfix, sorted out
  formatting.
* d/p/dovecot-core.postinst: Create compat links to old style, existing
  SSL cert and key if found.
* d/rules: Don't pass hardening flags for DRAC plugin.
* d/dovecot-{pop3d,imapd}.prerm: Re-sync with Debian.
* d/dovecot-core.lintian-overrides: Drop override for DRAC plugin as not
  required in Ubuntu.
* d/01-mail-stack-delivery: Renamed 99-mail-stack-delivery to ensure that
  the mail-stack-delivery configuration overrides configuration options
  set elsewhere, updated with new cert/key file locations.

[ Ante Karamatic ]
* Change configuration file for LDA on new installs and upgrades
  (LP: #671065).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
 
3
 
 
4
 
 
5
 
 
6
 
 
7
 
Network Working Group                                   A. Melnikov, Ed.
8
 
Request for Comments: 5435                                 Isode Limited
9
 
Category: Standards Track                                  B. Leiba, Ed.
10
 
                                                            W. Segmuller
11
 
                                         IBM T.J. Watson Research Center
12
 
                                                               T. Martin
13
 
                                                       Endless Crossword
14
 
                                                            January 2009
15
 
 
16
 
 
17
 
           Sieve Email Filtering: Extension for Notifications
18
 
 
19
 
Status of This Memo
20
 
 
21
 
   This document specifies an Internet standards track protocol for the
22
 
   Internet community, and requests discussion and suggestions for
23
 
   improvements.  Please refer to the current edition of the "Internet
24
 
   Official Protocol Standards" (STD 1) for the standardization state
25
 
   and status of this protocol.  Distribution of this memo is unlimited.
26
 
 
27
 
Copyright Notice
28
 
 
29
 
   Copyright (c) 2009 IETF Trust and the persons identified as the
30
 
   document authors.  All rights reserved.
31
 
 
32
 
   This document is subject to BCP 78 and the IETF Trust's Legal
33
 
   Provisions Relating to IETF Documents (http://trustee.ietf.org/
34
 
   license-info) in effect on the date of publication of this document.
35
 
   Please review these documents carefully, as they describe your rights
36
 
   and restrictions with respect to this document.
37
 
 
38
 
Abstract
39
 
 
40
 
   Users go to great lengths to be notified as quickly as possible that
41
 
   they have received new mail.  Most of these methods involve polling
42
 
   to check for new messages periodically.  A push method handled by the
43
 
   final delivery agent gives users quicker notifications and saves
44
 
   server resources.  This document does not specify the notification
45
 
   method, but it is expected that using existing instant messaging
46
 
   infrastructure such as Extensible Messaging and Presence Protocol
47
 
   (XMPP), or Global System for Mobile Communications (GSM) Short
48
 
   Message Service (SMS) messages will be popular.  This document
49
 
   describes an extension to the Sieve mail filtering language that
50
 
   allows users to give specific rules for how and when notifications
51
 
   should be sent.
52
 
 
53
 
 
54
 
 
55
 
 
56
 
 
57
 
 
58
 
Melnikov, et al.            Standards Track                     [Page 1]
59
 
 
60
 
RFC 5435             Sieve Extension: Notifications         January 2009
61
 
 
62
 
 
63
 
Table of Contents
64
 
 
65
 
   1. Introduction ....................................................3
66
 
      1.1. Conventions Used in This Document ..........................3
67
 
   2. Capability Identifier ...........................................3
68
 
   3. Notify Action ...................................................3
69
 
      3.1. Notify Action Syntax and Semantics .........................3
70
 
      3.2. Notify Parameter "method" ..................................3
71
 
      3.3. Notify Tag ":from" .........................................4
72
 
      3.4. Notify Tag ":importance" ...................................4
73
 
      3.5. Notify Tag ":options" ......................................5
74
 
      3.6. Notify Tag ":message" ......................................5
75
 
      3.7. Examples ...................................................6
76
 
      3.8. Requirements on Notification Methods Specifications ........7
77
 
   4. Test valid_notify_method ........................................8
78
 
   5. Test notify_method_capability ...................................9
79
 
   6. Modifier encodeurl to the 'set' Action .........................10
80
 
   7. Interactions with Other Sieve Actions ..........................11
81
 
   8. Security Considerations ........................................11
82
 
   9. IANA Considerations ............................................13
83
 
      9.1. Registration of Sieve Extension ...........................13
84
 
      9.2. New Registry for Sieve Notification Mechanisms ............14
85
 
      9.3. New Registry for Notification-Capability Parameters .......14
86
 
   10. Acknowledgements ..............................................15
87
 
   11. References ....................................................16
88
 
      11.1. Normative References .....................................16
89
 
      11.2. Informative References ...................................16
90
 
 
91
 
 
92
 
 
93
 
 
94
 
 
95
 
 
96
 
 
97
 
 
98
 
 
99
 
 
100
 
 
101
 
 
102
 
 
103
 
 
104
 
 
105
 
 
106
 
 
107
 
 
108
 
 
109
 
 
110
 
 
111
 
 
112
 
 
113
 
 
114
 
Melnikov, et al.            Standards Track                     [Page 2]
115
 
 
116
 
RFC 5435             Sieve Extension: Notifications         January 2009
117
 
 
118
 
 
119
 
1.  Introduction
120
 
 
121
 
   This is an extension to the Sieve language defined by [Sieve] for
122
 
   providing instant notifications.  It defines the new action "notify".
123
 
 
124
 
   This document does not specify the notification methods.  Examples of
125
 
   possible notification methods are email and XMPP.  To allow for the
126
 
   portability of scripts that use notifications, implementation of the
127
 
   [MailTo] method is mandatory.  Other available methods shall depend
128
 
   upon the implementation and configuration of the system.
129
 
 
130
 
1.1.  Conventions Used in This Document
131
 
 
132
 
   Conventions for notations are as in [Sieve], Section 1.1, including
133
 
   the use of [ABNF].
134
 
 
135
 
   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
136
 
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
137
 
   document are to be interpreted as described in [Kwds].
138
 
 
139
 
2.  Capability Identifier
140
 
 
141
 
   The capability string associated with the extension defined in this
142
 
   document is "enotify".
143
 
 
144
 
3.  Notify Action
145
 
 
146
 
3.1.  Notify Action Syntax and Semantics
147
 
 
148
 
   Usage:  notify [":from" string]
149
 
           [":importance" <"1" / "2" / "3">]
150
 
           [":options" string-list]
151
 
           [":message" string]
152
 
           <method: string>
153
 
 
154
 
   The "notify" action specifies that a notification should be sent to a
155
 
   user.  The format of the notification is implementation-defined and
156
 
   is also affected by the notification method used (see Section 3.2).
157
 
   However, all content specified in the ":message" parameter SHOULD be
158
 
   included.
159
 
 
160
 
3.2.  Notify Parameter "method"
161
 
 
162
 
   The "method" positional parameter identifies the notification method
163
 
   that will be used; it is a URI [URI].  For example, the notification
164
 
   method can be a tel URI [TEL-URI] with a phone number to send SMS
165
 
   messages to, or an XMPP [XMPP] URI containing an XMPP identifier
166
 
   [XMPP-URI].
167
 
 
168
 
 
169
 
 
170
 
Melnikov, et al.            Standards Track                     [Page 3]
171
 
 
172
 
RFC 5435             Sieve Extension: Notifications         January 2009
173
 
 
174
 
 
175
 
   The supported URI values will be site-specific, but support for the
176
 
   [MailTo] method is REQUIRED in order to ensure interoperability.  If
177
 
   a URI schema is specified that the implementation does not support,
178
 
   the notification MUST cause an error condition at run time.  Sieve
179
 
   scripts can check the supported methods using the valid_notify_method
180
 
   test to be sure that they only use supported ones, to avoid such
181
 
   error conditions.
182
 
 
183
 
   If the "method" parameter contains a supported URI schema, then the
184
 
   URI MUST be checked for syntactic validity.  Invalid URI syntax or an
185
 
   unsupported URI extension MUST cause an error.  An implementation MAY
186
 
   enforce other semantic restrictions on URIs -- for example, to
187
 
   restrict phone numbers in a tel: URI to a particular geographical
188
 
   region -- and will treat violations of such semantic restrictions as
189
 
   errors.
190
 
 
191
 
3.3.  Notify Tag ":from"
192
 
 
193
 
   A ":from" tag may be used to specify an author of the notification.
194
 
   The syntax of this parameter's value is method-specific.
195
 
   Implementations SHOULD check the syntax according to the notification
196
 
   method specification and generate an error when a syntactically
197
 
   invalid ":from" tag is specified.
198
 
 
199
 
   In order to minimize/prevent forgery of the author value,
200
 
   implementations SHOULD impose restrictions on what values can be
201
 
   specified in a ":from" tag.  For example, an implementation may
202
 
   restrict this value to be a member of a list of known author
203
 
   addresses or to belong to a particular domain.  It is suggested that
204
 
   values that don't satisfy such restrictions simply be ignored rather
205
 
   than causing the "notify" action to fail.
206
 
 
207
 
3.4.  Notify Tag ":importance"
208
 
 
209
 
   The ":importance" tag specifies the importance of quick delivery of
210
 
   the notification, as perceived by the Sieve script owner.  The
211
 
   ":importance" tag is followed by a numeric value represented as a
212
 
   string: "1" (high importance), "2" (normal importance), and "3" (low
213
 
   importance).  If no importance is given, the default value "2" SHOULD
214
 
   be assumed.  A notification method MAY treat the importance value as
215
 
   a transport indicator.  For example, it might deliver notifications
216
 
   of high importance quicker than notifications of normal or low
217
 
   importance.  Some notification methods allow users to specify their
218
 
   state of activity (for example, "busy" or "away from keyboard").  If
219
 
   the notification method provides this information, it SHOULD be used
220
 
   to selectively send notifications.  If, for example, the user marks
221
 
 
222
 
 
223
 
 
224
 
 
225
 
 
226
 
Melnikov, et al.            Standards Track                     [Page 4]
227
 
 
228
 
RFC 5435             Sieve Extension: Notifications         January 2009
229
 
 
230
 
 
231
 
   herself as "busy", a notification method can require that a
232
 
   notification with importance of "3" is not to be sent; however, the
233
 
   user might be notified of a notification with higher importance.
234
 
 
235
 
   If the notification method allows users to filter messages based upon
236
 
   certain parameters in the message, users SHOULD be able to filter
237
 
   based upon importance.  If the notification method does not support
238
 
   importance, then this parameter MUST be ignored.  An implementation
239
 
   MAY include the importance value in the default message, Section 3.6,
240
 
   if one is not provided.
241
 
 
242
 
3.5.  Notify Tag ":options"
243
 
 
244
 
   The ":options" tag is used to send additional parameters to the
245
 
   notification method.  Interpretation of the parameters is method-
246
 
   specific.  This document doesn't specify any such additional
247
 
   parameter.
248
 
 
249
 
   Each string in the options string list has the following syntax:
250
 
   "<optionname>=<value>"
251
 
   where optionname has the following ABNF [ABNF]:
252
 
 
253
 
 
254
 
      l-d = ALPHA / DIGIT
255
 
      l-d-p = l-d / "." / "-" / "_"
256
 
      optionname = l-d *l-d-p
257
 
      value = *(%x01-09 / %x0B-0C / %x0E-FF)
258
 
 
259
 
3.6.  Notify Tag ":message"
260
 
 
261
 
   The ":message" tag specifies the message data to be included in the
262
 
   notification.  The entirety of the string SHOULD be sent, but
263
 
   implementations MAY shorten the message for technical or aesthetic
264
 
   reasons.  If the ":message" parameter is absent, a default
265
 
   implementation-specific message is used.  Unless otherwise specified
266
 
   by a particular notification mechanism, an implementation default
267
 
   containing at least the value of the "From" header field and the
268
 
   value of the "Subject" header field is RECOMMENDED.
269
 
 
270
 
   In order to construct more complex messages, the notify extension can
271
 
   be used together with the Sieve variables extension [Variables], as
272
 
   shown in the examples below.
273
 
 
274
 
 
275
 
 
276
 
 
277
 
 
278
 
 
279
 
 
280
 
 
281
 
 
282
 
Melnikov, et al.            Standards Track                     [Page 5]
283
 
 
284
 
RFC 5435             Sieve Extension: Notifications         January 2009
285
 
 
286
 
 
287
 
3.7.  Examples
288
 
 
289
 
   Example 1:
290
 
       require ["enotify", "fileinto", "variables"];
291
 
 
292
 
       if header :contains "from" "boss@example.org" {
293
 
           notify :importance "1"
294
 
               :message "This is probably very important"
295
 
                           "mailto:alm@example.com";
296
 
           # Don't send any further notifications
297
 
           stop;
298
 
       }
299
 
 
300
 
       if header :contains "to" "sievemailinglist@example.org" {
301
 
           # :matches is used to get the value of the Subject header
302
 
           if header :matches "Subject" "*" {
303
 
               set "subject" "${1}";
304
 
           }
305
 
 
306
 
           # :matches is used to get the value of the From header
307
 
           if header :matches "From" "*" {
308
 
               set "from" "${1}";
309
 
           }
310
 
 
311
 
           notify :importance "3"
312
 
               :message "[SIEVE] ${from}: ${subject}"
313
 
               "mailto:alm@example.com";
314
 
           fileinto "INBOX.sieve";
315
 
       }
316
 
 
317
 
   Example 2:
318
 
       require ["enotify", "fileinto", "variables", "envelope"];
319
 
 
320
 
       if header :matches "from" "*@*.example.org" {
321
 
           # :matches is used to get the MAIL FROM address
322
 
           if envelope :all :matches "from" "*" {
323
 
               set "env_from" " [really: ${1}]";
324
 
           }
325
 
 
326
 
           # :matches is used to get the value of the Subject header
327
 
           if header :matches "Subject" "*" {
328
 
               set "subject" "${1}";
329
 
           }
330
 
 
331
 
           # :matches is used to get the address from the From header
332
 
           if address :matches :all "from" "*" {
333
 
               set "from_addr" "${1}";
334
 
           }
335
 
 
336
 
 
337
 
 
338
 
Melnikov, et al.            Standards Track                     [Page 6]
339
 
 
340
 
RFC 5435             Sieve Extension: Notifications         January 2009
341
 
 
342
 
 
343
 
           notify :message "${from_addr}${env_from}: ${subject}"
344
 
                           "mailto:alm@example.com";
345
 
       }
346
 
 
347
 
 Example 3:
348
 
     require ["enotify", "variables"];
349
 
 
350
 
     set "notif_method"
351
 
     "xmpp:tim@example.com?message;subject=SIEVE;body=You%20got%20mail";
352
 
 
353
 
     if header :contains "subject" "Your dog" {
354
 
         set "notif_method" "tel:+14085551212";
355
 
     }
356
 
 
357
 
     if header :contains "to" "sievemailinglist@example.org" {
358
 
         set "notif_method" "";
359
 
     }
360
 
 
361
 
     if not string :is "${notif_method}" "" {
362
 
         notify "${notif_method}";
363
 
     }
364
 
 
365
 
     if header :contains "from" "boss@example.org" {
366
 
         # :matches is used to get the value of the Subject header
367
 
         if header :matches "Subject" "*" {
368
 
             set "subject" "${1}";
369
 
         }
370
 
 
371
 
         # don't need high importance notification for
372
 
         # a 'for your information'
373
 
         if not header :contains "subject" "FYI:" {
374
 
             notify :importance "1" :message "BOSS: ${subject}"
375
 
                                "tel:+14085551212";
376
 
         }
377
 
     }
378
 
 
379
 
3.8.  Requirements on Notification Methods Specifications
380
 
 
381
 
   This section describes requirements for documents that define
382
 
   specific Sieve notification methods.
383
 
 
384
 
   Notification mechanisms MUST NOT add new Sieve tags to the "notify"
385
 
   action.
386
 
 
387
 
   A notification method MAY allow modification of the final
388
 
   notification text -- for example, truncating it if it exceeds a
389
 
   length limit or modifying characters that can not be represented in
390
 
   the target character set.  Characters in the notification text that
391
 
 
392
 
 
393
 
 
394
 
Melnikov, et al.            Standards Track                     [Page 7]
395
 
 
396
 
RFC 5435             Sieve Extension: Notifications         January 2009
397
 
 
398
 
 
399
 
   can't be represented by the notification method SHOULD be replaced
400
 
   with a symbol indicating an unknown character.  Allowed modifications
401
 
   MUST be documented in the document describing the notification
402
 
   method.
403
 
 
404
 
   A notification method MAY ignore parameters specified in the "notify"
405
 
   action.
406
 
 
407
 
   A notification method MAY recommend the default message value to be
408
 
   used if the ":message" argument is not specified.
409
 
 
410
 
   Notifications SHOULD include timestamps, if the notification method
411
 
   allows for their transmission outside of the textual message.
412
 
   Implementation methods that can only transmit timestamps in the
413
 
   textual message MAY include them in the textual message.
414
 
 
415
 
   A notification MUST include means to identify/track its origin in
416
 
   order to allow a recipient to stop notifications or find out how to
417
 
   contact the sender.  This requirement is to help with tracking a
418
 
   misconfigured or abusive origin of notifications.
419
 
 
420
 
   Methods SHOULD NOT include any other extraneous information not
421
 
   specified in parameters to the "notify" action.
422
 
 
423
 
   Methods MUST specify which URI parameters (if any) must be ignored,
424
 
   which ones must be used in the resulting notification, and which ones
425
 
   must cause an error.
426
 
 
427
 
   Methods MUST specify what values are returned by the
428
 
   notify_method_capability test, Section 5, in particular for the
429
 
   "online" notification-capability.
430
 
 
431
 
   If there are errors sending the notification, the Sieve interpreter
432
 
   SHOULD ignore the notification and not retry indefinitely.  The Sieve
433
 
   interpreter MAY throttle notifications; if it does, a request to send
434
 
   a notification MAY be silently ignored.  Documents describing
435
 
   notification methods SHOULD describe how retries, throttling,
436
 
   duplicate suppression (if any), etc. are to be handled by
437
 
   implementations.
438
 
 
439
 
4.  Test valid_notify_method
440
 
 
441
 
   Usage:  valid_notify_method <notification-uris: string-list>
442
 
 
443
 
   The valid_notify_method test is true if the notification methods
444
 
   listed in the notification-uris argument are supported and they are
445
 
   valid both syntactically (including URI parameters) and semantically
446
 
 
447
 
 
448
 
 
449
 
 
450
 
Melnikov, et al.            Standards Track                     [Page 8]
451
 
 
452
 
RFC 5435             Sieve Extension: Notifications         January 2009
453
 
 
454
 
 
455
 
   (including implementation-specific semantic restrictions).  This test
456
 
   MUST perform exactly the same validation as would be performed on the
457
 
   "method" parameter to the "notify" action.
458
 
 
459
 
   The test is true only if ALL of the listed notification methods are
460
 
   supported and valid.
461
 
 
462
 
   Example 4 (partial):
463
 
             if not valid_notify_method ["mailto:",
464
 
                     "http://gw.example.net/notify?test"] {
465
 
                 stop;
466
 
             }
467
 
 
468
 
5.  Test notify_method_capability
469
 
 
470
 
   Usage:  notify_method_capability [COMPARATOR] [MATCH-TYPE]
471
 
           <notification-uri: string>
472
 
           <notification-capability: string>
473
 
           <key-list: string-list>
474
 
 
475
 
   The notify_method_capability test retrieves the notification
476
 
   capability specified by the notification-capability string that is
477
 
   specific to the notification-uri and matches it to the values
478
 
   specified in the key-list.  The test succeeds if a match occurs.  The
479
 
   type of match defaults to ":is", and the default comparator is
480
 
   "i;ascii-casemap".
481
 
 
482
 
   The notification-capability parameter is case insensitive.
483
 
 
484
 
   The notify_method_capability test MUST fail unconditionally if the
485
 
   specified notification-uri is syntactically invalid (as determined by
486
 
   the valid_notify_method test, Section 4) or specifies an unsupported
487
 
   notification method.  However this MUST NOT cause an error.
488
 
 
489
 
   The notify_method_capability test MUST fail unconditionally if the
490
 
   specified notification-capability item is not known to the Sieve
491
 
   interpreter.  A script MUST NOT fail with an error if the item does
492
 
   not exist.  This allows scripts to be written that handle nonexistent
493
 
   items gracefully.
494
 
 
495
 
   This document defines a single notification-capability value
496
 
   "online", which is described below.  Additional notification-
497
 
   capability values may be defined by using the procedure defined in
498
 
   Section 9.3.
499
 
 
500
 
   The "relational" extension [Relational] adds a match type called
501
 
   ":count".  The count of an notify_method_capability test is 0, if the
502
 
   returned information is the empty string, or 1.
503
 
 
504
 
 
505
 
 
506
 
Melnikov, et al.            Standards Track                     [Page 9]
507
 
 
508
 
RFC 5435             Sieve Extension: Notifications         January 2009
509
 
 
510
 
 
511
 
   For the "online" notification-capability, the
512
 
   notify_method_capability test can match one of the following key-list
513
 
   values:
514
 
 
515
 
   o  "yes" - the entity identified by the notification-uri can receive
516
 
      a notify notification immediately.  Note that even after this
517
 
      value is returned, there is no guarantee that the entity would
518
 
      actually be able to receive any notification immediately or even
519
 
      receive it at all.  Transport errors, recipient policy, etc. can
520
 
      prevent that.
521
 
 
522
 
   o  "no" - the entity identified by the notification-uri is not
523
 
      currently available to receive an immediate notification.
524
 
 
525
 
   o  "maybe" - the Sieve interpreter can't determine if the entity
526
 
      identified by the notification-uri is online or not.
527
 
 
528
 
   Example 5:
529
 
             require ["enotify"];
530
 
 
531
 
             if notify_method_capability
532
 
                    "xmpp:tim@example.com?message;subject=SIEVE"
533
 
                    "Online"
534
 
                    "yes" {
535
 
                 notify :importance "1" :message "You got mail"
536
 
                      "xmpp:tim@example.com?message;subject=SIEVE";
537
 
             } else {
538
 
                 notify :message "You got mail" "tel:+14085551212";
539
 
             }
540
 
 
541
 
6.  Modifier encodeurl to the 'set' Action
542
 
 
543
 
   Usage:  ":encodeurl"
544
 
 
545
 
   When the Sieve script specifies both "variables" [Variables] and
546
 
   "enotify" capabilities in the "require", a new "set" action modifier
547
 
   (see [Variables]) ":encodeurl" becomes available to Sieve scripts.
548
 
   This modifier performs percent-encoding of any octet in the string
549
 
   that doesn't belong to the "unreserved" set (see [URI]).  The
550
 
   percent-encoding procedure is described in [URI].
551
 
 
552
 
   The ":encodeurl" modifier has precedence 15.
553
 
 
554
 
 
555
 
 
556
 
 
557
 
 
558
 
 
559
 
 
560
 
 
561
 
 
562
 
Melnikov, et al.            Standards Track                    [Page 10]
563
 
 
564
 
RFC 5435             Sieve Extension: Notifications         January 2009
565
 
 
566
 
 
567
 
   Example 6:
568
 
       require ["enotify", "variables"];
569
 
 
570
 
       set :encodeurl "body_param" "Safe body&evil=evilbody";
571
 
 
572
 
       notify "mailto:tim@example.com?body=${body_param}";
573
 
 
574
 
7.  Interactions with Other Sieve Actions
575
 
 
576
 
   The "notify" action is compatible with all other actions, and does
577
 
   not affect the operation of other actions.  In particular, the
578
 
   "notify" action MUST NOT cancel the implicit keep.
579
 
 
580
 
   Multiple executed "notify" actions are allowed.  Specific
581
 
   notification methods MAY allow multiple notifications from the same
582
 
   script to be collapsed into one.
583
 
 
584
 
8.  Security Considerations
585
 
 
586
 
   Security considerations are discussed in [Sieve].  Additionally,
587
 
   implementations must be careful to follow the security considerations
588
 
   of the specific notification methods.
589
 
 
590
 
   The "notify" action is potentially very dangerous.  The path the
591
 
   notification takes through the network may not be secure.  An error
592
 
   in the options string may cause the message to be transmitted to
593
 
   someone it was not intended for, or may expose information to
594
 
   eavesdroppers.
595
 
 
596
 
   Just because a notification is received doesn't mean that it was sent
597
 
   by the Sieve implementation.  It might be possible to forge
598
 
   notifications or modify parts of valid notifications with some
599
 
   notification methods.
600
 
 
601
 
   Forgery of the ":importance" value (for example, by unauthorized
602
 
   script modification) can potentially result in slowdown in
603
 
   notification delivery.
604
 
 
605
 
   Note that some components of notifications should not be trusted.
606
 
   For example, the timestamp field can be easily forged or modified
607
 
   when some notification transports are used.  Even if the timestamp is
608
 
   believed to be correct by the sender and is not modified in transit,
609
 
   it might be misleading on the receiving system due to clock
610
 
   differences.
611
 
 
612
 
 
613
 
 
614
 
 
615
 
 
616
 
 
617
 
 
618
 
Melnikov, et al.            Standards Track                    [Page 11]
619
 
 
620
 
RFC 5435             Sieve Extension: Notifications         January 2009
621
 
 
622
 
 
623
 
   An organization may have a policy about the forwarding of classified
624
 
   information to unclassified networks.  Unless the policy is also
625
 
   enforced in the module responsible for the generating (or sending) of
626
 
   notifications, users can use the extension defined in this document
627
 
   to extract classified information and bypass the policy.
628
 
 
629
 
   Notifications can result in loops and bounces.  Also, allowing a
630
 
   single script to notify multiple destinations can be used as a means
631
 
   of amplifying the number of messages in an attack.  Moreover, if loop
632
 
   detection is not properly implemented, it may be possible to set up
633
 
   exponentially growing notification loops.  Accordingly, Sieve
634
 
   notification methods:
635
 
 
636
 
   1.  MUST provide mechanisms for avoiding notification loops.
637
 
 
638
 
   2.  MUST provide the means for administrators to limit the ability of
639
 
       users to abuse notify.  In particular, it MUST be possible to
640
 
       limit the number of "notify" actions a script can perform.
641
 
       Additionally, if no use cases exist for using "notify" with
642
 
       multiple destinations, this limit SHOULD be set to 1.  Additional
643
 
       limits, such as the ability to restrict "notify" to local users,
644
 
       MAY also be implemented.
645
 
 
646
 
   3.  MUST provide facilities to log the use of "notify" in order to
647
 
       facilitate tracking down abuse.
648
 
 
649
 
   4.  MAY use script analysis to determine whether or not a given
650
 
       script can be executed safely.  While the Sieve language is
651
 
       sufficiently complex so that full analysis of all possible
652
 
       scripts is computationally infeasible, the majority of real-world
653
 
       scripts are amenable to analysis.  For example, an implementation
654
 
       might allow scripts that it has determined to be safe to run
655
 
       unhindered, block scripts that are potentially problematic, and
656
 
       subject unclassifiable scripts to additional auditing and
657
 
       logging.
658
 
 
659
 
   Allowing "notify" action at all may not be appropriate in situations
660
 
   where Sieve scripts are associated with email accounts that are
661
 
   freely-available and/or not trackable to a human who can be held
662
 
   accountable for creating message bombs or other abuse.
663
 
 
664
 
   Implementations that construct URIs internally from various notify
665
 
   parameters MUST make sure that all components of such URIs are
666
 
   properly percent-encoded (see [URI]).  In particular, this applies to
667
 
   values of the ":from" and ":message" tagged arguments and may apply
668
 
   to the ":options" values.
669
 
 
670
 
 
671
 
 
672
 
 
673
 
 
674
 
Melnikov, et al.            Standards Track                    [Page 12]
675
 
 
676
 
RFC 5435             Sieve Extension: Notifications         January 2009
677
 
 
678
 
 
679
 
   Header/envelope tests [Sieve], together with Sieve variables, can be
680
 
   used to extract the list of users to receive notifications from the
681
 
   incoming email message or its envelope.  This is potentially quite
682
 
   dangerous, as this can be used for denial-of-service attacks on
683
 
   recipients controlled by the message sender.  For this reason,
684
 
   implementations SHOULD NOT allow the use of variables containing
685
 
   values extracted from the email message in the "method" parameter to
686
 
   the "notify" action.  Note that violation of this SHOULD NOT may
687
 
   result in the creation of an open relay, i.e., any sender would be
688
 
   able to create specially crafted email messages that would result in
689
 
   notifications delivered to recipients under the control of the
690
 
   sender.  In the worst case, this might result in financial loss by
691
 
   the user controlling the Sieve script and/or by recipients of
692
 
   notifications (e.g., if a notification is an SMS message).
693
 
 
694
 
   Note that the last SHOULD NOT is not a generic prohibition of use of
695
 
   variables in the "notify" action, as controlling the target of a
696
 
   notification by extracting it from user-owned data stores (such as
697
 
   user's Lightweight Directory Access Protocol (LDAP) entry) is
698
 
   considered to be useful.
699
 
 
700
 
   It is imperative that whatever implementations use to store the user-
701
 
   defined filtering scripts protect them from unauthorized
702
 
   modification, to preserve the integrity of the mail system.  An
703
 
   attacker who can modify a script can cause mail to be discarded,
704
 
   rejected, or forwarded to an unauthorized recipient.  In addition,
705
 
   it's possible that Sieve scripts might expose private information,
706
 
   such as mailbox names or email addresses of favored (or disfavored)
707
 
   correspondents.  Because of that, scripts SHOULD also be protected
708
 
   from unauthorized retrieval.
709
 
 
710
 
9.  IANA Considerations
711
 
 
712
 
9.1.  Registration of Sieve Extension
713
 
 
714
 
   To:  iana@iana.org
715
 
   Subject:  Registration of new Sieve extension
716
 
   Capability name:  enotify
717
 
   Description:  adds the "notify" action for notifying user about the
718
 
      received message.  It also provides two new tests:
719
 
         valid_notify_method checks notification URIs for validity;
720
 
         notify_method_capability can check recipients capabilities.
721
 
   RFC number:  this RFC
722
 
   Contact address:  The Sieve discussion list
723
 
      <ietf-mta-filters@imc.org>
724
 
 
725
 
   This information has been added to the list of Sieve extensions
726
 
   available from http://www.iana.org/.
727
 
 
728
 
 
729
 
 
730
 
Melnikov, et al.            Standards Track                    [Page 13]
731
 
 
732
 
RFC 5435             Sieve Extension: Notifications         January 2009
733
 
 
734
 
 
735
 
9.2.  New Registry for Sieve Notification Mechanisms
736
 
 
737
 
   IANA has created a new registry for Sieve notification mechanisms.
738
 
   This registry contains both vendor-controlled notification mechanism
739
 
   names (beginning with "vnd.") and IETF-controlled notification
740
 
   mechanism names.  Vendor-controlled notification mechanism names have
741
 
   the format as defined in the following paragraph and may be
742
 
   registered on a "First Come First Served" basis [IANA-GUIDELINES], by
743
 
   applying to IANA with the form specified later in this section.
744
 
   Registration of notification mechanisms that do not begin with "vnd."
745
 
   are registered using a "Specification Required" policy
746
 
   [IANA-GUIDELINES].
747
 
 
748
 
   Vendor-controlled notification mechanism names MUST have the form
749
 
   "vnd.<vendor-name>.<mechanism-name>", where <vendor-name> is as
750
 
   specified in the Application Configuration Access Protocol (ACAP)
751
 
   Vendor Subtree registry [ACAP].
752
 
 
753
 
   This defines the template for a new registry for Sieve notification
754
 
   mechanisms, which has been created and is available from
755
 
   http://www.iana.org/.  There are no initial entries for this
756
 
   registry.
757
 
 
758
 
   To:  iana@iana.org
759
 
   Subject:  Registration of new Sieve notification mechanism
760
 
   Mechanism name:  [the name of the mechanism]
761
 
   Mechanism URI:  [the RFC number of the document that defines the URI
762
 
      used by this mechanism.  Different mechanisms MUST use different
763
 
      URI schema.]
764
 
   Mechanism-specific options:  [the names of any Sieve notify options
765
 
      (as used in the ":options" parameter) that are specific to this
766
 
      mechanism, or "none"]
767
 
   Permanent and readily available reference:  [the RFC number or an URL
768
 
      of the document that defines this notification mechanism]
769
 
   Person and email address to contact for further information:  [the
770
 
      name and email address of the technical contact for information
771
 
      about this mechanism]
772
 
 
773
 
9.3.  New Registry for Notification-Capability Parameters
774
 
 
775
 
   IANA has created a new registry for the notification-capability
776
 
   parameters of the notify_method_capability test.  This registry
777
 
   contains both vendor-controlled notification-capability values
778
 
   (beginning with "vnd.") and IETF-controlled notification-capability
779
 
   values.  Vendor-controlled notification-capability values have the
780
 
   format as defined in the following paragraph and may be registered on
781
 
   a "First Come First Served" basis [IANA-GUIDELINES], by applying to
782
 
   IANA with the form specified later in this section.  Registration of
783
 
 
784
 
 
785
 
 
786
 
Melnikov, et al.            Standards Track                    [Page 14]
787
 
 
788
 
RFC 5435             Sieve Extension: Notifications         January 2009
789
 
 
790
 
 
791
 
   notification-capability values that do not begin with "vnd." are
792
 
   registered using the "Specification Required" policy
793
 
   [IANA-GUIDELINES].
794
 
 
795
 
   Vendor-controlled notification-capability values MUST have the form
796
 
   "vnd.<vendor-name>.<capability-name>", where <vendor-name> is as
797
 
   specified in the ACAP Vendor Subtree registry [ACAP].
798
 
 
799
 
   The following template must be used for registering notification-
800
 
   capability parameters:
801
 
 
802
 
   To:  iana@iana.org
803
 
   Subject:  Registration of a new notification-capability parameter
804
 
   Capability name:  [the name of the notification-capability]
805
 
   Description:  [an explanation of the purpose of the notification-
806
 
      capability]
807
 
   Syntax:  [formal definition of allowed values and their syntax]
808
 
   Permanent and readily available reference(s):  [the RFC number(s) or
809
 
      an URL of the document that defines this notification mechanism]
810
 
   Contact information:  [the name and email address of the technical
811
 
      contact for information about this mechanism]
812
 
 
813
 
   Below is the registration form for the "online" notification-
814
 
   capability:
815
 
 
816
 
   To:  iana@iana.org
817
 
   Subject:  Registration of a new notification-capability parameter
818
 
   Capability name:  online
819
 
   Description:  Returns whether the entity identified by the
820
 
      notification-uri parameter to the notify_method_capability test
821
 
      can receive a notify notification immediately.
822
 
   Syntax:  Can contain one of three values: "yes", "no", and, "maybe".
823
 
      Values MUST be in lowercase.
824
 
   Permanent and readily available reference(s):  This RFC
825
 
   Contact information:  The Sieve discussion list
826
 
      <ietf-mta-filters@imc.org>
827
 
 
828
 
10.  Acknowledgements
829
 
 
830
 
   Thanks to Larry Greenfield, Sarah Robeson, Tim Showalter, Cyrus
831
 
   Daboo, Nigel Swinson, Kjetil Torgrim Homme, Michael Haardt, Mark E.
832
 
   Mallett, Ned Freed, Lisa Dusseault, Dilyan Palauzov, Arnt
833
 
   Gulbrandsen, Peter Saint-Andre, Sean Turner, Cullen Jennings, and
834
 
   Pasi Eronen for help with this document.
835
 
 
836
 
 
837
 
 
838
 
 
839
 
 
840
 
 
841
 
 
842
 
Melnikov, et al.            Standards Track                    [Page 15]
843
 
 
844
 
RFC 5435             Sieve Extension: Notifications         January 2009
845
 
 
846
 
 
847
 
11.  References
848
 
 
849
 
11.1.  Normative References
850
 
 
851
 
   [ABNF]             Crocker, D., Ed. and P. Overell, "Augmented BNF
852
 
                      for Syntax Specifications: ABNF", STD 68,
853
 
                      RFC 5234, January 2008.
854
 
 
855
 
   [Kwds]             Bradner, S., "Key words for use in RFCs to
856
 
                      Indicate Requirement Levels", BCP 14, RFC 2119,
857
 
                      March 1997.
858
 
 
859
 
   [MailTo]           Leiba, B. and M. Haardt, "Sieve Notification
860
 
                      Mechanism: mailto", RFC 5436, January 2009.
861
 
 
862
 
   [Relational]       Segmuller, W. and B. Leiba, "Sieve Extension:
863
 
                      Relational Tests", RFC 5231, January 2008.
864
 
 
865
 
   [Sieve]            Guenther, P., Ed. and T. Showalter, Ed., "Sieve:
866
 
                      An Email Filtering Language", RFC 5228,
867
 
                      January 2008.
868
 
 
869
 
   [URI]              Berners-Lee, T., Fielding, R., and L. Masinter,
870
 
                      "Uniform Resource Identifier (URI): Generic
871
 
                      Syntax", STD 66, RFC 3986, January 2005.
872
 
 
873
 
   [Variables]        Homme, K., "Sieve Extension: Variables", RFC 5229,
874
 
                      January 2008.
875
 
 
876
 
11.2.  Informative References
877
 
 
878
 
   [ACAP]             Newman, C. and J. Myers, "ACAP -- Application
879
 
                      Configuration Access Protocol", RFC 2244,
880
 
                      November 1997.
881
 
 
882
 
   [IANA-GUIDELINES]  Narten, T. and H. Alvestrand, "Guidelines for
883
 
                      Writing an IANA Considerations Section in RFCs",
884
 
                      BCP 26, RFC 5226, May 2008.
885
 
 
886
 
   [TEL-URI]          Schulzrinne, H., "The tel URI for Telephone
887
 
                      Numbers", RFC 3966, December 2004.
888
 
 
889
 
   [XMPP]             Saint-Andre, Ed., P., "Extensible Messaging and
890
 
                      Presence Protocol (XMPP): Core", RFC 3920,
891
 
                      October 2004.
892
 
 
893
 
 
894
 
 
895
 
 
896
 
 
897
 
 
898
 
Melnikov, et al.            Standards Track                    [Page 16]
899
 
 
900
 
RFC 5435             Sieve Extension: Notifications         January 2009
901
 
 
902
 
 
903
 
   [XMPP-URI]         Saint-Andre, P., "Internationalized Resource
904
 
                      Identifiers (IRIs) and Uniform Resource
905
 
                      Identifiers (URIs) for the Extensible Messaging
906
 
                      and Presence Protocol (XMPP)", RFC 5122,
907
 
                      February 2008.
908
 
 
909
 
Authors' Addresses
910
 
 
911
 
   Alexey Melnikov (editor)
912
 
   Isode Limited
913
 
   5 Castle Business Village
914
 
   36 Station Road
915
 
   Hampton, Middlesex  TW12 2BX
916
 
   UK
917
 
 
918
 
   EMail: Alexey.Melnikov@isode.com
919
 
 
920
 
 
921
 
   Barry Leiba (editor)
922
 
   IBM T.J. Watson Research Center
923
 
   19 Skyline Drive
924
 
   Hawthorne, NY  10532
925
 
   US
926
 
 
927
 
   Phone: +1 914 784 7941
928
 
   EMail: leiba@watson.ibm.com
929
 
 
930
 
 
931
 
   Wolfgang Segmuller
932
 
   IBM T.J. Watson Research Center
933
 
   19 Skyline Drive
934
 
   Hawthorne, NY  10532
935
 
   US
936
 
 
937
 
   Phone: +1 914 784 7408
938
 
   EMail: werewolf@us.ibm.com
939
 
 
940
 
 
941
 
   Tim Martin
942
 
   Endless Crossword
943
 
   672 Haight st.
944
 
   San Francisco, CA  94117
945
 
   US
946
 
 
947
 
   Phone: +1 510 260-4175
948
 
   EMail: timmartin@alumni.cmu.edu
949
 
 
950
 
 
951
 
 
952
 
 
953
 
 
954
 
Melnikov, et al.            Standards Track                    [Page 17]
955