Dovecot v1.0 quota
Configuring quota
Most of the quota backends have very similar configuration. They support two kinds of quota limits:
storage: Quota limit in kilobytes.
messages: Quota limit in number of messages. This isn't probably very useful.
You can configure quota globally by placing the settings in plugin section in dovecot.conf and you can give per-user limits by having your userdb return the quota setting as an extra field. The userdb quota setting always overrides the global plugin setting.
The important thing to remember is to use the correct format for quota setting. You can't just return a numeric quota field from userdb and expect it to work. Dovecot wouldn't then know what quota backend to use.
Here is an example global quota configuration:
plugin {
# 10 MB + 1000 messages quota limit
quota = maildir:storage=10240:messages=1000
} Now if you want to override this for some users, make your userdb return quota field in the exact same format. See below for some examples.
Examples
SQL
# MySQL, quota in kilobytes:
user_query = SELECT home, uid, gid, concat('maildir:storage=', quota_kb) AS quota FROM users WHERE userid = '%u'
# MySQL, quota in bytes:
user_query = SELECT home, uid, gid, concat('maildir:storage=', floor(quota/1024)) AS quota FROM users WHERE userid = '%u'
# PostgreSQL, SQLite, quota in kilobytes:
user_query = SELECT home, uid, gid, 'maildir:storage=' || quota_kb AS quota FROM users WHERE userid = '%u'
LDAP
The easiest way from Dovecot's point of view is if you already have the quota in Dovecot's format in LDAP (e.g. maildir:storage=102400. Then you can use a configuration like this:
user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid,quotaDovecot=quota
Unfortunately usually this isn't the case. So if you have the quota in kilobytes in LDAP, you can use it in a bit kludgy way:
user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid,quotaKb=quota=maildir:storage
If you have the quota stored as bytes, you'll need to use a post-login scripting trick to use them. Something like:
# quotaBytes is exported to $QUOTA_BYTES environment user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid,quotaBytes=quota_bytes
And make imap's mail_executable point to a script:
export QUOTA=maildir:storage=`expr $QUOTA_BYTES / 1024` exec /usr/local/libexec/dovecot/imap
This post-login trick unfortunately doesn't work with deliver. If you need it, you're pretty much out of luck for now. v1.1 quota makes this possible.
