no login with MySQL

Christian Kivalo ml+dovecot at valo.at
Sun Sep 13 20:08:04 UTC 2015



On 2015-09-13 21:05, Andreas Meyer wrote:
> Hello!
> 
> Christian Kivalo <ml+dovecot at valo.at> schrieb am 13.09.15 um 19:51:38 
> Uhr:
> 
>> > Sep 13 11:55:49 imap(a.meyer at nimmini.de): Error: user
>> > a.meyer at nimmini.de: Initialization failed: Namespace '': Home
>> > directory not set for user. Can't expand ~/ for mail root dir in: ~/
>> > Sep 13 11:55:49 imap(a.meyer at nimmini.de): Error: Invalid user
>> > settings. Refer to server log for more information.
>> 
>> i see an error here "Error: Invalid user settings" relating to the 
>> users
>> mail_location direcory.
>> 
>> Is "mail_location" (and not so important "mail_home") defined?
> 
> In dovecot.conf mail_location = maildir:~/ is set. This works with
> the system-users defined in the passwd file.
> 
> I think the query-string für MySQL would overwrite this mail_location,
> right? But how do I define it in the query?

yes thats how it should work but your query (looking at the query result 
from your first email) overwrites the mail_location with 
"/var/spool/vhosts/nimmini.de/" without a username.

>> With my setup "mail" and "home" is returned from the userdb query from
>> mysql
>> 
>> home: /srv/mail/%u
>> mail: /srv/mail/%u/Maildir
> 
> The query-strings for virtual users look like this:
> 
> password_query = SELECT username AS username, password FROM mailbox
> WHERE username = '%u' AND active = 1
> user_query = SELECT maildir, uid, gid, concat('*:storage=', quota) AS
> quota_rule, concat('Trash:storage=+', quota_trash) AS quota_rule2 FROM
> mailbox WHERE username = '%u'

what about
user_query = SELECT CONCAT(maildir, SUBSTRING_INDEX(username,'@',+1)) as 
mail, uid, gid, concat('*:storage=', quota) AS quota_rule, 
concat('Trash:storage=+', quota_trash) AS quota_rule2 FROM mailbox WHERE 
username = '%u'

The SUBSTRING_INDEX returns everything left of the '@' from field 
username, that should give you something like

+--------------------------------------+------+------+-------------------+--------------------+
| mail                                 | uid  | gid  | quota_rule        
| quota_rule2        |
+--------------------------------------+------+------+-------------------+--------------------+
| /var/spool/vhosts/nimmini.de/a.meyer | 5000 | 5000 | *:storage=5242880 
| Trash:storage=+100 |
+--------------------------------------+------+------+-------------------+--------------------+

which hopefully is the path to your maildir.

> There is no mail_loation defined. I thought if maildir is queried, the 
> %u
> would expand to the mail_location of the user. Where the users only 
> with
> the local part of the address exist in the filesystem.

I don't know a setting called "maildir" dovecot expects a field "mail" 
to be returned by your sql query or uses the default one (set in 
10-mail.conf).

maybe even this works, but it too will only return the path without the 
username
user_query = SELECT maildir AS mail, uid, gid, concat('*:storage=', 
quota) AS quota_rule, concat('Trash:storage=+', quota_trash) AS 
quota_rule2 FROM mailbox WHERE username = '%u'

%u is the user at domain username
%n is the username without the @domain part

> /var/spool/vhosts/nimmini.de/a.meyer
> 
> whereas /var/spool/vhosts is a symlink to /home/vhosts.
> 
> This setup worked fine sometime ago and I wanted to reactivate MySQL
> for dovecot. Now the query doesn't work anymore, the location seems
> to be invalid.
> 
> location=maildir:~/
> instead of
> /var/spool/vhosts/nimmini.de/%u.
> 
>> > Sep 13 11:55:49 imap(a.meyer at nimmini.de): Debug: Namespace inbox:
>> > type=private, prefix=, sep=/, inbox=yes, hidden=no, list=yes,
>> > subscriptions=yes location=maildir:~/
>> 
>> on one of my accounts this same line looks like this:
>> imap(aaa at kivalo.at): Debug: Namespace inbox: type=private, prefix=,
>> sep=/, inbox=yes, hidden=no, list=yes, subscriptions=yes
>> location=maildir:/srv/mail/aaa at kivalo.at/Maildir:LAYOUT=fs
>> 
>> where location is the "mail_location" setting from 10-mail.conf and is
>> overridden by the userdb from sql for every user.
>> 
>> it's probably enough to set the option mail_location in 10-mail.conf 
>> to
>> an absolute path.
> 
> I cannot set the absolute path in mail_location, because I have
> systemusers and virtual users.
> 
> Don't know how to set mail_location in the query-string for MySQL,
> if the expandation of %u is not enough. %u would expand to the full
> address a.meyer at nimmini.de whereas the location looks like
> /var/spool/vhosts/nimmini.de/a.meyer

> Don't know what to do.
> 
> Regards
> 
>   Andreas

- christian


More information about the dovecot mailing list