[Dovecot] MANAGESIEVE patch v3 for dovecot 1.0.rc28

Stephan Bosch stephan at rename-it.nl
Mon Mar 26 22:59:20 EEST 2007


Hello Timo,

Thanks for reviewing the managesieve patch.

Timo Sirainen schreef:
> On Mon, 2007-03-26 at 18:34 +0200, Stephan Bosch wrote:
>> http://sinas.rename-it.nl/~sirius/dovecot-1.0.rc28-MANAGESIEVE-v3.diff.gz
> 
> I finally took a look at this. The biggest problem is that there's way
> too much duplicated code.
I agree. This would make updating the various protocol implementations 
tedious and error prone (to say the least). My initial goal was to write 
   a working non-intrusive managesieve patch for dovecot, to be fully 
merged with dovecot later.

>  - lib-managesieve: Is the only thing different from lib-imap that it
> does UTF8 validation? Then rather add some utf8-flag to the imap-parser.
> Or maybe add some string validation callback which does it in
> lib-managesieve.
It has been 6 months since I adapted this code for managesieve. I'll do 
a quick review and check whether these two libraries can be merged 
easily, but I believe they can.

>  - managesieve: I guess the commands-common.c could be put somewhere..
> Hmm. Also client.c has a lot of copy&pasted code. I'm not sure what's
> the right place for these though.
> 
>  - login: There is still too much duplication in the login code (also
> for imap/pop3). I'm thinking about cleaning this up after v1.0. Wonder
> if there should exist just one login binary which can handle multiple
> protocols (and support plugins)..
That's a nice idea.

> 
>  - Sieve plugin would need to be merged somehow to this to avoid adding
> lib-sieve/cmu.
I coined this in my previous e-mail: if the master process could provide 
some means of dynamically registering new process types (protocols), 
e.g. through plugins, it should not be difficult to incorporate this 
managesieve implementation in dovecot-sieve entirely. Also, this plugin 
solution could be implemented/complemented by your single-login-process 
idea.

Within the dovecot-sieve plugin package, a common sieve library would 
then solve the lib-sieve/cmu duplication problem.

> 
> There's also one bug:
> 
> 	/* FIXME: Is this buffer on the stack method allowable for 
> 	 * dovecot at all or do we need to define some t_buffer?
> 	 */
> 	static const int bufsize = 255;
> 	char linkbuf[bufsize];
> 
> 	ret = readlink(storage->active_path, linkbuf, bufsize-1);
> 	linkbuf[ret] = '\0'; //// ret can be -1
> ..
> 	return t_strdup(linkbuf);
> 
> Change rather to something like:
> 
> 	char linkbuf[PATH_MAX];
> 	ret = readlink(storage->active_path, linkbuf, sizeof(linkbuf));
> ..
> 	return t_strndup(linkbuf, ret);
Nice one, also with respect to the buffer size. Apart from this real 
bug, there are currently still many more FIXMEs out there.

I'll fix the issues that I can fix right now. Most duplicate code 
problems will have to wait until you have the time to juggle around a 
bit with the dovecot(-sieve) code. Please notify my when you have 
changed anything with this respect.

Regards,

-- 
Stephan Bosch
stephan at rename-it.nl
IRC: Freenode, #dovecot, S[r]us








More information about the dovecot mailing list