On 2011-08-14 22:56, Timo Sirainen wrote:
On Mon, 2011-08-08 at 14:04 +0200, Peter Mogensen wrote:
I'm writing an passdb/userdb plugin to authenticate against an external daemon listening on a UNIX socket.
The connection to the daemon is 1 request at a time and thus blocking (unlike passdb-ldap), but the daemon is preforking, so it can handle more connections at a time.
You're talking to it via UNIX socket, so you can talk to it with non-blocking sockets.
Yes... but a single connection can still only handle one request at a time. It's not the socket, which is blocking - it's the server end of the connection.
But I also have the option, to let the passdb/userdb plugin maintain a pools of used/idle connections to the daemon and just pick a idle connection and moving it to the used pool on each auth_request. Which would save me the auth worker processes.
This would be more efficient. (I wonder if you could make your external daemon talk auth-worker protocol and Dovecot would do this pooling automatically by thinking it's talking to its own workers?)
We actually considered replacing the entire dovecot-auth process with a re-write of the daemon, which we had done with courier. But the courier-auth process is simpler, so we decided to go for a plugin to dovecot-auth.
/Peter