[Dovecot] per-user quotas

Daniel Parthey daniel.parthey at informatik.tu-chemnitz.de
Fri Oct 12 03:15:39 EEST 2012


Hi Dave,

David Mehler wrote:
> I've got quotas set up on an all-user basis on my system, it's a
> Postfix, Dovecot, Mysql virtual users setup. Currently I have each
> user getting a 1GB quota with these settings in 90-quota.conf:
> 
> plugin {
>   quota_rule = *:storage=1G
>   quota_rule2 = Trash:storage=+100M
> }
> plugin {
>   quota = maildir:User quota
> }
> 
> While this works it's not what I want for all users. Say I add a
> virtual user called user1 to the mysql database but he's a test user
> and I only want that user to have 25 megabytes of storage, reading the
> wiki on quotas per-user items such as for example in a database
> overrides the global items above, is this right?
> 
> If so, I'm hoping I'm not going to have to redo my entire user
> database, some users will have per-user quotas while I'll let others
> have the global quota.

You can just make your SQL query a bit more sophisticated in
order to fit your needs.

MySQL supports SQL CASE statement and default value with ELSE:
http://dev.mysql.com/doc/refman/5.1/en/case.html

This example sets quota to unlimited if mail comes in via port 20025,
otherwise is uses the quota_bytes and quota_message columns:

user_query = SELECT username AS user, \
        home as home, \
        uid as uid, \
        gid as gid, \
        CASE '%a' \
                WHEN '20025' THEN '*:bytes=0:messages=0' \
        ELSE \
                CONCAT('*:bytes=', CAST(quota_bytes AS CHAR), ':messages=', CAST(quota_message AS CHAR)) \
        END AS `quota_rule` \
        FROM dovecot_users \
        WHERE username='%u'

Regards
Daniel
-- 
https://plus.google.com/103021802792276734820


More information about the dovecot mailing list