got a problem when configured passdb with username_filter — looks like the 
option doesn't work
OS: FreeBSD 13 and 14. Dovecot version: 2.3.21
Part of config:
passdb {
  args = /usr/local/bin/php /usr/local/dovecot/bin/checkpassword.php
  driver = checkpassword
}
passdb {
  args = /usr/local/bin/php /usr/local/dovecot/bin/checkpassword.php
  driver = checkpassword
  username_filter = us...@postmaster.local.one 
  default_fields = domain=local.one
  override_fields = user=postmas...@local.one
}
passdb {
  args = /usr/local/bin/php /usr/local/dovecot/bin/checkpassword.php
  driver = checkpassword
  username_filter = us...@user2.local.one 
  default_fields = domain=local.one
  override_fields = user=us...@local.one
}

When I try command "doveadm auth test us...@postmaster.local.one" and enter a 
password of user1 — it works as planned — change us...@postmaster.local.one to 
us...@local.one check it's password and override user to postmas...@local.one
But when I try "doveadm auth test us...@user2.local.one" — it also change 
us...@user2.local.one to us...@local.one, and after password check — override 
it to postmas...@local.one

Debug logs, when I try "doveadm auth test us...@user2.local.one":

Aug  1 11:01:03 auth: Debug: Loading modules from directory: 
/usr/local/lib/dovecot/auth
Aug  1 11:01:03 auth: Debug: Module loaded: 
/usr/local/lib/dovecot/auth/lib20_auth_var_expand_crypt.so
Aug  1 11:01:03 auth: Debug: Read auth token secret from 
/var/run/dovecot/auth-token-secret.dat
Aug  1 11:01:03 auth: Debug: passwd-file /usr/local/etc/dovecot.users.list:Read 
7 users in 0 secs
Aug  1 11:01:03 auth: Debug: auth client connected (pid=0)
Aug  1 11:01:03 auth: Debug: client in: AUTH   1       PLAIN       
service=doveadm debug   resp=<hidden>
Aug  1 11:01:03 auth: Debug: checkpassword(us...@user2.local.one): Performing 
passdb lookup
Aug  1 11:01:03 auth: Debug: checkpassword(us...@user2.local.one): execute: 
/usr/local/bin/php /usr/local/dovecot/bin/checkpassword.php 
/usr/local/libexec/dovecot/checkpassword-reply
Aug  1 11:01:03 auth: Debug: checkpassword(us...@user2.local.one): Received 
input:
Aug  1 11:01:03 auth: Debug: checkpassword(us...@user2.local.one): exit_status=1
Aug  1 11:01:03 auth: checkpassword(us...@user2.local.one): Login failed 
(status=1)
Aug  1 11:01:03 auth: Debug: checkpassword(us...@user2.local.one): Finished 
passdb lookup
Aug  1 11:01:03 auth: Debug: checkpassword(us...@user2.local.one): Performing 
passdb lookup
Aug  1 11:01:03 auth: Debug: checkpassword(us...@user2.local.one): username 
changed us...@user2.local.one -> us...@local.one
Aug  1 11:01:03 auth: Debug: checkpassword(us...@local.one): execute: 
/usr/local/bin/php /usr/local/dovecot/bin/checkpassword.php 
/usr/local/libexec/dovecot/checkpassword-reply
Aug  1 11:01:03 auth: Debug: checkpassword(us...@local.one): Received input: 
user=us...@local.one  userdb_home=/var/spool/mail/    userdb_uid=dovecot 
userdb_gid=dovecot
Aug  1 11:01:03 auth: Debug: checkpassword(us...@local.one): exit_status=0
Aug  1 11:01:03 auth: Debug: checkpassword(us...@local.one): username changed 
us...@local.one -> postmas...@local.one
Aug  1 11:01:03 auth: Debug: checkpassword(postmas...@local.one): Finished 
passdb lookup
Aug  1 11:01:03 auth: Debug: auth(postmas...@local.one): Auth request finished
Aug  1 11:01:03 auth: Debug: client passdb out: OK     1  
user=postmas...@local.one                original_user=us...@user2.local.one

I've checked sources and find in " core/src/auth/auth-request.c (from line 617) 
" code that check username_filter and should send "skipping passdb: username 
filtered" message in debug, but it doesn't do it. 

Is it a bug or I've missed something in setup?
_______________________________________________
dovecot mailing list -- dovecot@dovecot.org
To unsubscribe send an email to dovecot-le...@dovecot.org

Reply via email to