Quota ===== There are different quota backends that Dovecot can use: * <fs> [Quota.FS.txt]: Filesystem quota. * <dirsize> [Quota.Dirsize.txt]: The simplest, but sometimes slow, quota backend. It scans all the files from mail directories to calculate the quota. * <dict> [Quota.Dict.txt]: Store quota in a dictionary (table). * <maildir> [Quota.Maildir.txt]: Maildir++ quota. There are currently two quota related plugins: * quota: Implements the actual quota handling and includes also all the quota backends. * imap_quota: For reporting quota information via IMAP. Usually you'd enable these by adding them to the 'mail_plugins' settings in the config file: ---%<------------------------------------------------------------------------- protocol imap { mail_plugins = quota imap_quota } protocol pop3 { mail_plugins = quota } # In case you're using deliver: protocol lda { mail_plugins = quota } ---%<------------------------------------------------------------------------- Most of the quota backends have a few things in common: You can set the quota as kilobytes (called *storage*) and/or as number of messages (called *messages*). Usually only the *storage* quota is used. These limits can be given to the quota backend as parameters, e.g.: ---%<------------------------------------------------------------------------- plugin { # 10 MB quota limit quota = maildir:storage=10240 # 1000 messages quota limit quota = maildir:messages=1000 # 10 MB + 1000 messages quota limit quota = maildir:storage=10240:messages=1000 } ---%<------------------------------------------------------------------------- The above example shows how to set the same quota globally for everyone. You can override this for one or all users by returning a 'quota' <extra field> [UserDatabase.ExtraFields.txt] from the user database (in the exact same format as above). See<UserDatabase.txt> for more information about how to set them for the user database you are using. Examples -------- SQL --- ---%<------------------------------------------------------------------------- # MySQL: user_query = SELECT home, uid, gid, concat('maildir:storage=', quota_kb) AS quota FROM users WHERE userid = '%u' # PostgreSQL, SQLite: user_query = SELECT home, uid, gid, 'maildir:storage=' || quota_kb AS quota FROM users WHERE userid = '%u' ---%<------------------------------------------------------------------------- LDAP ---- ---%<------------------------------------------------------------------------- # quotaStorage must be in the format mentioned above # For example: maildir:storage=10240 user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid,quotaStorage=quota # If you have the quota already as kilobytes in LDAP, there's a kludgy way to use it directly: user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid,quotaStorage=quota=maildir:storage ---%<------------------------------------------------------------------------- If you have the quota stored as bytes, you'll need to use a <post-login scripting> [PostLoginScripting.txt] trick to use them. Something like: ---%<------------------------------------------------------------------------- # quotaStorage contains the quota in bytes. It's exported into # $QUOTA_BYTES environment. user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid,quotaStorage=quota_bytes ---%<------------------------------------------------------------------------- And make imap's 'mail_executable' point to a script: ---%<------------------------------------------------------------------------- #!/bin/sh export QUOTA=maildir:storage=`expr $QUOTA_BYTES / 1024` exec /usr/local/libexec/dovecot/imap ---%<------------------------------------------------------------------------- (This file was created from the wiki on 2007-06-15 04:42)