[Dovecot] Re: %d empty even though username has @domain

dovecot-ri dovecot-ri at scientician.org
Mon Mar 27 00:00:01 EEST 2006


Daniel Watts wrote:
> William Ross wrote:
> > hello,
> >
> > Sorry to jump straight in with a question, but I've searched the
> > archive[0] and I'm pretty sure the answer's not there.
> >
> > I'm using dovecot to replace courier imap, so authentication is by
> > vpopmail and the Maildirs are stored in the usual domains/domain/user/
> > Maildir. Everything seems to work very well, and setting it up has  been
> > easy, so thank you very much for that.
> >
> > I have only one problem left: %d is empty when interpolated into
> > default_mail_env. I expect there's something obvious I'm doing wrong,
> > but it's hard to tell because the wiki isn't always up to date (i'd  be
> > happy to update the vpopmail sections once this is working):
> >
> > Config has this [1]:
> >
> >     default_mail_env = maildir:/home/vpopmail/domains/%d/%n/Maildir
> >
> > and i log in over imaps with the account i'm using for testing:
> >
> >     username: sysadmin at spanner.org
> >     password: ...
> >
> > Authentication seems to work perfectly, but then the logs show:
> >
> > dovecot: Dec 05 12:24:59 Info: imap(sysadmin): maildir: root=/home/
> > vpopmail/domains//sysadmin/Maildir, index=/home/vpopmail/domains//
> > sysadmin/Maildir, control=, inbox=
> >
> > any suggestions, please?
> >
> > thank you,
> >
> > will
> >
> 
> Will, Timo,
> 
> [CCed to Timo as he implemented a solution to a related problem].
> 
> Digging this up from the archives - I have the same problem and can't
> find the solution. However: I've traced the problem through my mail logs:
> 
> Mar 22 18:16:43 tg1 dovecot: auth(default): client in: AUTH     1 PLAIN
> service=IMAP    lip=xxx.xxx.35.122       rip=xxx.xxx.32.85
> resp=AGRhbkBhbHVtaW5hdGkubmV0AHBhc3Mx
> Mar 22 18:16:43 tg1 dovecot: auth-worker(default):
> sql(dan at domain.net,xxx.xxx.32.85): query: SELECT username as user,
> password, mailenv as userdb_mail, uid as userdb_uid, gid as userdb_gid
> FROM users WHERE username = 'dan' AND domain = 'domain.net'
> Mar 22 18:16:43 tg1 dovecot: auth-worker(default):
> auth(dan at domain.net,xxx.xxx.32.85): username changed dan at domain.net -> dan
> Mar 22 18:16:43 tg1 dovecot: auth(default):
> auth(dan at domain.net,xxx.xxx.32.85): username changed dan at domain.net -> dan
> Mar 22 18:16:43 tg1 dovecot: auth(default): client out: OK      1 user=dan
> Mar 22 18:16:43 tg1 dovecot: auth(default): master in: REQUEST  1 24736
> 1
> 
> 
> The line to look for says:
> 
> username changed dan at domain.net -> dan
> 
> After this point %d is empty which is a problem if you use it in any
> configuration settings (which I'm trying to do).
> 
> The login now works because I use the prefetch to fetch the mail and
> home directory informatin out of the database (rather than dynamically
> work it out) but there are some other settings (ie namespaces) where I
> wan to use %d.
> 
> Can anyone suggest how to maintain the information in %d?
> Particularly why does it shorten the username to "dan"?
> 
> Daniel


Your SQL query is not returning the domain part in the "user" field.  The name returned in the "user" field replaces the IMAP username for all future stuff.  Change your SQL query like this (assuming MySQL):

SELECT
  CONCAT(username, '@', domain) as user,
  password,
  mailenv as userdb_mail,
  uid as userdb_uid,
  gid as userdb_gid
FROM
  users
WHERE
  username = 'dan' AND domain = 'domain.net';

This same issue tripped me up for quite a while until I finally figured it out.  Virtual users with a user part that matched a local username were accessing the local user's e-mail, not their own.  This was because the SQL passdb was authenticating them but the passwd userdb was returning the home directory.

Hope this helps!



More information about the dovecot mailing list