[Dovecot] dovecot %u variable problem....

Kris weston.kris at ymail.com
Wed Apr 25 09:17:18 EEST 2012


Hi guys n gals, im on an ubuntu 11 VPS on linode (dovecot version 
2.013). ive spent a lot of time and googling trying to get postfix, 
dovecot, ssl, saslauthd and mysql to all play nice together and im quite 
close now but theres something going on i cant quite explain and id 
really appreciate some help. I have been going for ten hours on this 
today and it seems in direct conflict with what dovecot themselves say...

the problem is a variable in dovecot (%u) which is normally used as a 
full username in sql query strings (i.e. user at domain) and is simply 
dropping the domain for some reason...

 From dovecot docs (http://wiki2.dovecot.org/Variables):
The variables that work everywhere are:
     %u    user full username (e.g. user at domain)

so i have postfix and stuff set up ok to send at least and i know this 
because ive tested it by hard-coding the string in the sql query myself 
with a successful send...
but, anyway, the problem with the '%u' variable is it is doing stuff 
like this: (from mail.log and mysql.log)

localhost dovecot: auth: Debug: sql(admin at microhard.com,xx.xx.xx.xx): 
SELECT home,uid,gid FROM users WHERE id = 'admin at microhard.com'

this was derived from the following query in 
/etc/dovecot/dovecot-sql.conf.ext
user_query = SELECT home,uid,gid FROM users WHERE id = '%u'

so no problem there....

but then this happens when i attempt to send mail and this means the 
user gets rejected because dovecot cant find the user id in the db 
without the correct string (i.e. user at domain):
localhost dovecot: auth: Debug: sql(admin,xx.xx.xx.xx): query: SELECT id 
as user, crypt as password FROM users WHERE id= 'admin'
Query    SELECT id as user, crypt as password FROM users WHERE id= 'admin'
which is derived from the following query also in 
/etc/dovecot/dovecot-sql.conf.ext
password_query = SELECT id as user, crypt as password FROM users WHERE 
id= '%u'

and to further confuse me, this 'unchangeable' variable sometimes 
decides to right itself without any obvious reason...
localhost dovecot: auth: Debug: sql(admin at microhard.com,xx.xx.xx.xx): 
query: SELECT id as user, crypt as password FROM users WHERE id= 
'admin at microhard.com'

im wondering if its something to do with my client dropping the domain, 
or whether dovecot has an error, or some other thing ive overlooked...

my dovecot.conf looks a lot like this:

# 2.0.13: dovecot.conf
# OS: Linux 3.0.18-x86_64-linode24 x86_64 Ubuntu 11.10 ext3
first_valid_uid = 5000
last_valid_uid = 5000
login_greeting = I likes my ducks n geese I do.
mail_location = maildir:/var/spool/mail/virtual/%u

#enables logging all failed authentication attempts.
auth_verbose=yes

#enables all authentication debug logging (also enables auth_verbose). 
Passwords are logged as <hidden>.
auth_debug=yes

#does everything that auth_debug=yes does, but it also removes password 
hiding.
auth_debug_passwords=yes

#enables all kinds of mail related debug logging, such as showing where 
Dovecot is looking for mails.
mail_debug=yes

#enables logging SSL errors and warnings. Even without this setting if 
connection is closed because of an SSL error, the error is logged as the 
disconnection reason (v1.1+).
verbose_ssl=yes

passdb {
   args = /etc/dovecot/dovecot-sql.conf.ext
   driver = sql
}
plugin {
   acl = vfile:/etc/dovecot/acls
   #quota = maildir:storage=10240:messages=1000
   trash = /etc/dovecot/trash.conf
}
protocols = " imap"
service auth {
   unix_listener /var/spool/postfix/private/auth {
     group = postfix
     mode = 0660
     user = postfix
   }
   unix_listener auth-master {
     group = dovecot
     mode = 0660
     user = dovecot
   }
   user = dovecot
}

ssl_ca = /etc/pki/dovecot/certs/ca-bundle.crt
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem

userdb {
   args = /etc/dovecot/dovecot-sql.conf.ext
   driver = sql
}

userdb {
   driver = prefetch
}
userdb {
   driver = passwd
}
protocol imap {
   mail_plugins = quota imap_quota
}
protocol pop3 {
   mail_plugins = quota
   pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
protocol lda {
   info_log_path = /var/log/dovecot-deliver.log
   log_path = /var/log/dovecot-deliver.log
   mail_plugins = quota
   postmaster_address = admin at microhard.com
}

any help *much* appreciated!

cheerz

Kris


More information about the dovecot mailing list