Hi!

Thanks John for triage, we'll take a look at this.

Aki

> On 05/08/2024 05:50 EEST John Fawcett via dovecot <dovecot@dovecot.org> wrote:
> 
>  
> Hi
> 
> in my opinion you found a bug. In the function passdb_preinit(..) in 
> file src/auth/passdb.c the username_filters are copied from 
> set->username_filter to passdb->username_filter. However that code only 
> gets to be executed if this line returns NULL
> 
> passdb = passdb_find(set->driver, set->args, &idx);
> 
> For some reason this code finds a match (i.e. != NULL) for your second 
> passdb (postmasterfilter) so it never reaches the code to setup the 
> filter correctly. Strange to say for the third db it doesn't find a 
> match and does setup the filter.
> 
> I would guess that the main reason this hasn't been noticed is that most 
> use cases of multiple passdb's use different drivers. Either this should 
> be treated as a bug or the documentation should be updated to state that 
> multiple passdb's should not use the same driver.
> 
> As a workaround to this problem, given that you are handing off 
> authentication to a php script, my suggestion would be to update that 
> script so that it handles all the use cases directly. In Dovecot you 
> will only need to define one passdb that calls the script.
> 
> John
> 
> On 01/08/2024 15:17, zaxwat93--- via dovecot wrote:
> > added names:
> > passdb allusers {
> >   ...
> > }
> > passdb postmasterfilter {
> >    ...
> >    username_filter =us...@postmaster.local.one  
> >    ...
> > }
> > passdb user2filter {
> >    ....
> >    username_filter =us...@user2.local.one  
> >    ,,,
> > }
> >
> > try "doveadm auth testus...@user2.local.one" and got logs:
> > Aug  1 16:08:02 auth: Debug: auth client connected (pid=0)
> > Aug  1 16:08:02 auth: Debug: client in: AUTH   1       PLAIN       
> > service=doveadm debug   resp=<hidden>
> > Aug  1 16:08:02 auth: Debug: allusers(us...@user2.local.one): Performing 
> > passdb lookup
> > Aug  1 16:08:02 auth: Debug: allusers(us...@user2.local.one): execute: 
> > /usr/local/bin/php /usr/local/dovecot/bin/checkpassword.php 
> > /usr/local/libexec/dovecot/checkpassword-reply
> > Aug  1 16:08:02 auth: Debug: allusers(us...@user2.local.one): Received 
> > input:
> > Aug  1 16:08:02 auth: Debug: allusers(us...@user2.local.one): exit_status=1
> > Aug  1 16:08:02 auth: allusers(us...@user2.local.one): Login failed 
> > (status=1)
> > Aug  1 16:08:02 auth: Debug: allusers(us...@user2.local.one): Finished 
> > passdb lookup
> > Aug  1 16:08:02 auth: Debug: postmasterfilter(us...@user2.local.one): 
> > Performing passdb lookup
> > Aug  1 16:08:02 auth: Debug: postmasterfilter(us...@user2.local.one): 
> > username changedus...@user2.local.one  ->us...@local.one
> > Aug  1 16:08:02 auth: Debug: postmasterfilter(us...@local.one): execute: 
> > /usr/local/bin/php /usr/local/dovecot/bin/checkpassword.php 
> > /usr/local/libexec/dovecot/checkpassword-reply
> > Aug  1 16:08:02 auth: Debug: postmasterfilter(us...@local.one): Received 
> > input:user=us...@local.one        userdb_home=/var/spool/mail/    
> > userdb_uid=dovecot  userdb_gid=dovecot
> > Aug  1 16:08:02 auth: Debug: postmasterfilter(us...@local.one): 
> > exit_status=0
> > Aug  1 16:08:02 auth: Debug: postmasterfilter(us...@local.one): username 
> > changedus...@local.one  ->postmas...@local.one
> > Aug  1 16:08:02 auth: Debug: postmasterfilter(postmas...@local.one): 
> > Finished passdb lookup
> > Aug  1 16:08:02 auth: Debug: auth(postmas...@local.one): Auth request 
> > finished
> > Aug  1 16:08:02 auth: Debug: client passdb out: OK     
> > 1user=postmas...@local.one                 
> > original_user=us...@user2.local.one
> >
> > Same result: it should skip postmasterfilter passdb and work with 
> > user2filter, but it didn't
> > _______________________________________________
> > dovecot mailing list --dovecot@dovecot.org
> > To unsubscribe send an email todovecot-le...@dovecot.org
> _______________________________________________
> dovecot mailing list -- dovecot@dovecot.org
> To unsubscribe send an email to dovecot-le...@dovecot.org
_______________________________________________
dovecot mailing list -- dovecot@dovecot.org
To unsubscribe send an email to dovecot-le...@dovecot.org

Reply via email to