[Dovecot] New generic userdb lookup api

Sascha Wilde wilde at intevation.de
Sun Oct 26 19:33:05 EET 2008


Timo Sirainen <tss at iki.fi> writes:
> On Fri, 2008-10-24 at 16:19 +0200, Sascha Wilde wrote:
>> Ok, I used auth-master.* -- the new code is in changeset f5ce17153a3d in
>> my kolab-branch at
>> http://hg.intevation.org/kolab/dovecot-1.2_kolab-branch/ and I made
>> deliver use it in 94b00e377a25.
>> 
>> I had no time for thorough testing, but in my test-setup it seems to
>> work like before, so at least I didn't break it completely...  ;-)
>
> A couple of things:
>
> 1. It disconnects after each lookup. Not good if multiple lookups are
> done. Then again it probably shouldn't keep the connection alive forever
> since the imap connections can run for ages and most of the necessary
> lookups are probably done close to each others. Maybe timeout after 1
> minute of idling?

I agree that this is something that should be optimized, but I was under
the impression, that the current behavior of deliver was just like that
-- maybe I'm mistaken, I haven't double-checked that... 

> 2. conn->to is for auth request timeout. It should be removed after
> io_loop_run() so if 1. is fixed it won't leak timeouts.
> (The same conn->to could actually be used for the two timeouts - one
> value when looking up, another value when idling.)

Ack.  Unfortunately I'll have to put a working prototype of the
"%%h"-feature together before I'll have time to look into that...

> 3. Would be nice to get rid of the getenv()s :) The MAIL_CHROOT handling
> could be moved to deliver (use it if reply->chroot == NULL). The debug
> could be a parameter to auth_master_init().

You are right, and as I moved/left most of the env stuff in
deliver/auth-client anyway it is only consequent to handle those two the
same -- I'll make this change.

> 4. You're leaking memory.

Um, yes. *blush* -- at least I added the free for the connection shortly
after my announcement...  ;-)

> Cleanest fix would be to add pool_t pool parameter to
> auth_master_user_lookup() and allocate memory only from it

I think a free_auth_user_reply function might be preferable.

But I have to admit, that I didn't look deeply enough into the memory
pool management in dovecot to really know whats The Right Thing To
Do[tm].

Btw, on dedicated vs. default resources, I wasn't quite sure if it was a
good idea to use the default ioloop.  Any thoughts on that?

> (also p_array_init(&reply->extra_fields) would be cleaner to do inside
> the lookup code than require it to be done externally).

Hmm, the idea was to only fill the extra_fields array when it was
initialized, but maybe it isn't worth the trouble...

cheers
sascha
-- 
Sascha Wilde                                          OpenPGP key: 4BB86568
http://www.intevation.de/~wilde/                  http://www.intevation.de/
Intevation GmbH, Neuer Graben 17, 49074 Osnabrück; AG Osnabrück, HR B 18998
Geschäftsführer:   Frank Koormann,  Bernhard Reiter,  Dr. Jan-Oliver Wagner
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 188 bytes
Desc: not available
Url : http://dovecot.org/pipermail/dovecot/attachments/20081026/0857268a/attachment.bin 


More information about the dovecot mailing list