Size: 2931
Comment:
|
Size: 3522
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 6: | Line 6: |
* [wiki:Quota/Dirsize dirsize]: The simplest, but sometimes slow, quota backend. It scans all the files from mail directories to calculate the quota. * [wiki:Quota/Dict dict]: Store quota in a dictionary (table). * [wiki:Quota/Maildir maildir]: Maildir++ quota. |
* [wiki:Quota/Dirsize dirsize]: The simplest and slowest quota backend. * [wiki:Quota/Dict dict]: Store quota in a dictionary (e.g. SQL). * [wiki:Quota/Maildir maildir]: Maildir++ quota. This is the most commonly used quota for virtual users. == Enabling quota plugins == |
Line 29: | Line 31: |
Most of the quota backends have a few things in common: | == Configuring quota == |
Line 31: | Line 33: |
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.: | 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 [:UserDatabase:userdb] return the quota setting as an [:UserDatabase/ExtraFields: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: |
Line 35: | Line 46: |
# 10 MB quota limit quota = maildir:storage=10240 # 1000 messages quota limit quota = maildir:messages=1000 |
|
Line 43: | Line 50: |
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` [:UserDatabase/ExtraFields:extra field] from the user database (in the exact same format as above). See UserDatabase for more information about how to set them for the user database you are using. | 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. |
Line 50: | Line 57: |
# MySQL: | # MySQL, quota in kilobytes: |
Line 52: | Line 59: |
# PostgreSQL, SQLite: | # 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: |
Line 58: | Line 69: |
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: |
|
Line 59: | Line 72: |
# quotaStorage must be in the format mentioned above # For example: maildir:storage=10240 |
|
Line 62: | Line 73: |
}}} | |
Line 63: | Line 75: |
# 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 }}} |
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 }}} |
Line 71: | Line 86: |
user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid,quotaStorage=quota_bytes | user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid,quotaBytes=quota_bytes |
Quota
There are different quota backends that Dovecot can use:
- [wiki:Quota/FS fs]: Filesystem quota.
- [wiki:Quota/Dirsize dirsize]: The simplest and slowest quota backend.
- [wiki:Quota/Dict dict]: Store quota in a dictionary (e.g. SQL).
- [wiki:Quota/Maildir maildir]: Maildir++ quota. This is the most commonly used quota for virtual users.
Enabling quota plugins
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 }
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 [:UserDatabase:userdb] return the quota setting as an [:UserDatabase/ExtraFields: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,quotaStorage=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 [:PostLoginScripting:post-login scripting] 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,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