This documentation is for Dovecot v1.x, see wiki2 for v2.x documentation.

Dovecot v1.0 quota

Configuring quota

Most of the quota backends have very similar configuration. They support two kinds of quota limits:

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.



# 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'


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.

None: Quota/1.0 (last edited 2009-03-15 22:35:07 by localhost)