This is fixed in main with 
https://github.com/dovecot/core/commit/7bad6a24160e34bce8f10e73dbbf9e5fbbcd1904.patch

and will be fixed in 2.4.0

Aki

> On 05/08/2024 09:07 EEST Aki Tuomi via dovecot <dovecot@dovecot.org> wrote:
> 
>  
> 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
_______________________________________________
dovecot mailing list -- dovecot@dovecot.org
To unsubscribe send an email to dovecot-le...@dovecot.org

Reply via email to