Pigeonhole – Sieve support for Dovecot
Pigeonhole is the name of the project that adds support for the Sieve language (RFC 5228) and the ManageSieve protocol (RFC 5804) to the Dovecot Secure IMAP Server. In the literal sense, a pigeonhole is a a hole or recess inside a dovecot for pigeons to nest in. It is, however, also the name for one of a series of small, open compartments in a cabinet used for filing or sorting mail. As a verb, it describes the act of putting an item into one of those pigeonholes. The name `Pigeonhole’ therefore well describes an important part of the functionality that this project adds to Dovecot: sorting and filing e-mail messages.
The Sieve language is used to specify how e-mail needs to be processed. By writing Sieve scripts, users can customize how messages are delivered, e.g. whether they are forwarded or stored in special folders. Unwanted messages can be discarded or rejected, and, when the user is not available, the Sieve interpreter can send an automated reply. Above all, the Sieve language is meant to be simple, extensible and system independent.
And, unlike most other mail filtering script languages, it does not allow users to execute arbitrary programs. This is particularly useful to prevent virtual users from having full access to the mail store. The intention of the language is to make it impossible for users to do anything more complex (and dangerous) than write simple mail filters.
Using the ManageSieve protocol, users can upload their Sieve scripts remotely, without needing direct filesystem access through FTP or SCP. Additionally, a ManageSieve server always makes sure that uploaded scripts are valid, preventing compile failures at mail delivery.
The Pigeonhole project provides Sieve support as a plugin to Dovecot’s Local Delivery Agent (LDA). The ManageSieve protocol is provided is an additional service, next to Dovecot’s own POP3 and IMAP services.
- The Pigeonhole Sieve implementation aims to be admin- and user-friendly. Much like Dovecot, common error messages are made as easily understandable as possible. Any crash, no matter how it happened, is considered a bug that will be fixed. The compiler does not bail on the first error, but it looks for more script errors to make debugging more efficient.
- The Pigeonhole Sieve implementation is, much like the language itself, highly extensible with new Sieve capabilities. This includes support for third-party plugins. It should eventually provide the necessary infrastructure for at least all currently known relevant (proposed) Sieve extensions. The goal is to keep the extension interface provided by the Sieve implementation as generic as possible, i.e. without explicit support for specific extensions. New similar extensions can then use the same interface methods without changes to the Sieve engine code. If an extension is not loaded using the require command, the compiler truly does not know of its existence.
- The Pigeonhole Sieve plugin is backwards compatible with the old CMUSieve plugin. All Sieve extensions supported by the old plugin are also supported by the Pigeonhole Sieve plugin, including those that are now considered to be deprecated.
- The Pigeonhole Sieve implementation supports executing multiple Sieve scripts sequentially. Using this feature it is possible to execute administrator-controlled Sieve scripts before and after the user’s personal Sieve script, guaranteeing that responses and message deliveries are never duplicated. This implementation is based on a draft specification, which defines the Sieve behavior when multiple scripts are executed sequentially on the same message.
- The Pigeonhole Sieve implementation includes a test suite to automatically assess whether the compiled Sieve engine works correctly. The test suite is an extension to the Sieve language and is therefore easily extended with new tests. Currently, the test suite is mostly limited to testing script processing. The performed actions are not tested fully yet.
- The Pigeonhole Sieve implementation supports the new and very useful variables extension.
- The Pigeonhole Sieve plugin is distributed with a sieve-test tool that simplifies testing Sieve scripts and provides additional debugging facilities.