[Dovecot] New userdb backend for checkpassword like programs
Sascha Wilde
wilde at intevation.de
Thu Oct 23 17:18:24 EEST 2008
Sascha Wilde <wilde at intevation.de> writes:
> Timo Sirainen <tss at iki.fi> writes:
>> On Wed, 2008-10-22 at 16:15 +0200, Sascha Wilde wrote:
>>> There are more than 250LOC in deliver/auth-client.c and I wonder if
>>> there is already a higher level api for auth clients? I would have
>>> expected something like this in lib-auth, but the stuff in there seems
>>> not to be what I'm looking for. Any hints?
>>
>> plugins/expire-tool/auth-client.c has copy&pasted that code also.. So it
>> would be nice if it was put to lib-auth :)
>
> Ok, I'll consider doing so... :)
Having a first look it turns out to be less straight forward then I
hoped it would be. While there are significant amounts of code similar
in deliver/auth-client.c and expire/auth-client.c they differ in many
aspects:
1.) It seems that some code in deliver/auth-client.c has been revised
after it was copied to expire/auth-client.c, this is a small problem
as I would expect simply using the newer code to be the right
thing[tm].
2.) The exported interface in the respective auth-client.h files is
different. The solution would be to figure out what the right
interface would be and change the current code to use it. My
problem I'm not sure what the right interface would look like, for
my use the one in expire/auth-client.h looks more compelling, what
do you think?
3.) The deliver version does more than I need, and most certainly more
than it should in the generic case: the most obvious example is that
it sets up RESTRICT_* environment and calls
restrict_access_by_env(TRUE); which surely is nothing I want to
do in my code...
My current plan is to take only the code from deliver/auth-client and
check which parts I need, factor these out to new file in lib-auth
(unfortunately lib-auth/auth-client already exists) and finally ask the
author of the expire plugin to change his code so that it uses the new
stuff in lib-auth (I doubt that I will have the time to do this on my
own).
Obviously a god answer on 2. is badly needed... ;-)
One final question:
All the code saves the gathered user data by setting the environment
accordingly (especially HOME, which is the one of interest for my
code) -- but in my case I'm requesting the data for foreign user so
setting HOME wouldn't be good idea.
I see two possible solutions:
- Simple and stupid: save HOME, call the client-auth code, read HOME and
reset its value to the saved one.
- Clean but grows the API: export another function from auth-client,
which does not set env-vars but returns the requested data in some
struct.
Any thoughts on that?
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/20081023/60d22806/attachment.bin
More information about the dovecot
mailing list