Current activities: * Rework string matching: - Give Sieve its own runtime string type, rather than (ab)using string_t. - Add support for stream matching for handling large values, e.g. from the body extension. - Improve efficiency of :matches and :contains match types. * Build proper comparator support: - Add normalize() method to comparators to normalize the string before matching (for efficiency). - Allow for the existence of dynamic comparators (i.e. specified by variables). - Implement comparator-i;unicode-casemap. Parallel plugin-based efforts (on hold at the moment): * Implement enotify xmpp method as a plugin. Next (mostly in order of descending priority/precedence): * Implement message modification and extraction API in order to: - Properly implement the interaction between editheader and foreverypart/mime. - Implement replace, enclose extensions. * Properly implement Sieve internationalization support (utf-8 handling), currently it is not complete: - Make this implementation fully conform section 2.7.2 of RFC5228 (Comparisons Across Character Sets). - Verify validity of utf8 where necessary. * Further develop regex extension and update it to the latest draft: - Implement the :quoteregex set modifier - Investigate the use of the TRE regexp library to gain UTF-8 capability (posix regexes actually do support utf8, but only when locale is set accordingly) * Finish LDAP Sieve script storage for read-only access. - Consolidate LDAP connections when more than a single Sieve script must be loaded from different storages linked to the same LDAP server. - Adjust Sieve script API to support asynchronous script retrieval to retrieve scripts in parallel when possible. * Improve error handling. - Implement dropping errors in the user's mailbox as a mail message. * Finish body extension: - Build test cases for decoding MIME encodings to UTF-8 * Cleanup the test suite - Restructure test scripts - Add more comment on purpose of tests * Finish the ereject extension * Vacation extension improvements: - Implement configurable sender exclusion list. - Implement mechanism for implicitly including an account's aliases in the vacation command's :addresses list. * Fix remaining RFC deviations: - Fix issues listed in doc/rfc/RFC-questions.txt based on answers - Verify outgoing mail addresses at runtime when necessary (e.g. after variables substitution) - Improve handling of invalid addresses in headers (requires Dovecot changes) * Improve sieve_extprograms plugin: - Redesign (forcible) local script termination. It should use SIGCHLD and a ioloop-based timeout. - Add facility to trigger a temporary failure condition when a program fails rather than an implicit keep. - Add a method to implicitly pass environment variables such as SENDER and RECIPIENT through the script socket service. * Make testsuite much more exhaustive: - Add support for testing the content of result actions - Test as many error/warning/info conditions as possible. - Review the specification documents and check whether the given requirements are tested at least once. * Fix ManageSieve proxy to recognize response codes from the backend and forward them to the user if appropriate/safe. Probably means implementing a proper ManageSieve client library. * Test ManageSieve behavior thoroughly: - Test pipelined behavior - Test proxy authentication * Code cleanup: - Make address handling more uniform. - Review all FIXMEs * Build a server with test mail accounts that processes lots and lots of mail (e.g. spam, mailing lists etc.) Low priority items: * Implement extlists extension as a plugin * Enotify extension: detect use of variable values extracted from the message that are used in the method argument. RFC reports this as a security issue. * Provide a solution for mail_get_headers_utf8 reparsing the whole message each time it is called (header and address test; Timo might provide solution from within Dovecot) * Warn during compile if using non-existent folders. * Variables extension: implement compile time evaluation of constant values - Detect assignment of too large constant values to variables at compile time. * Add development documentation, i.e. comment on library functions and document the binary and byte-code format. * Implement sip-message notify mechanism.