Hello Timo,
Dispite the heat out here, I managed to come up with a new version of the managesieve patch for dovecot-1.0rc2:
- Fixed the bug (missing CRLF) in the authenticate command
- Modified the sieve storage library making the interface much less crude.
- The scripts put on the server using the putscript command are now checked before they are accepted.
- The reported SIEVE capability is now directly read from the sieve implementation (in this case cmu), listing much more than "FILEINTO VACATION".
- Fixed some minor bugs in the putscript command
Considering the dovecot-sieve plugin, I noticed that you obviously do not want to include the cmu sieve code in the main dovecot source tree. Unfortunately I did not see any other way but to include this library in my patch to make it support checking the uploaded scripts (for now).
There are a few alternatives to solve this issue. We could combine de dovecot-sieve plugin with the managesieve patch yielding a single large sieve plugin. However, this would require some means to let the master know about the new managesieve process type. This could be achieved with some more plugin magic.
Another way to solve this problem is by truly only excluding the cmu source from the main dovecot tree. If the interface of the sieve implementation is abstracted somehow, one could build a plugin interface for sieve implementations. This sieve interface would be common to dovecot-deliver and the managesieve daemon. This way, it does not matter how the sieve language is implemented (dovecot could even implement its own and still support cmu and others). I saw a hint to this solution in your original dovecot-lda plugin (i.e. sieve-mailutils.c etc), so you must have been playing with this idea as well.
I took the liberty to define an example interface for the sieve implementations in the src/lib-sieve directory. It was concieved very quickly and it is far from complete, but it should support the current features of the delivery process. It is only tested for the managesieve putscript verification (no script was ever run though this interface). I am also not quite happy with the error reporting scheme of this interface. This needs more work and if you don't like it you can of course discard it entirely and define your own.
Currently, I am also testing other sieve implementations. I am experimenting with libsieve2 (libsieve.sourceforge.net) and with building a wrapper around 'exim -bf'. This last solution is of course not useful for dovecot-lda, but I think the managesieve daemon is not only useful for dovecot itself. Support for these implementations is not yet included in this patch.
The patch can be downloaded at:
http://sinas.rename-it.nl/~sirius/dovecot-1.0.rc2-MANAGESIEVE-v2.diff.gz
(Simply apply it (-p0) to a clean 1.0rc2 source tree and run autogen.sh etc.)
For testing, I have tried other client implementations than horde-ingo, but somehow everyone is very focused on the timsieve daemon and they tend to require its protocol specifics. The only other implementation I got working is smartsieve. The others either crashed or produced protocol errors (i.e. sieveshell). I hope I can get more client implementations to work to ensure the incompatibilies are not my fault.
I am very eager to know what you think about the sieve implementation ideas and what you think of the new managesieve patch.
Regards,
-- Stephan Bosch stephan@rename-it.nl