This documentation is for Dovecot v2.x, see wiki1 for v1.x documentation.
Differences between revisions 14 and 15
Revision 14 as of 2007-07-15 20:52:53
Size: 3093
Editor: h-235-0
Comment:
Revision 15 as of 2007-07-26 14:26:23
Size: 3522
Editor: TimoSirainen
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:
Or to also convert bytes to Kbytes:
# MySQL, quota in bytes:
Line 55: Line 63:
# PostgreSQL, SQLite: # PostgreSQL, SQLite, quota in kilobytes:
Line 61: 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 62: Line 72:
# quotaStorage must be in the format mentioned above
# For example: maildir:storage=10240
Line 65: Line 73:
}}}
Line 66: 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 74: 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

None: Quota (last edited 2018-07-27 07:33:57 by 2001:2060:49:110:b60:5467:7acd:478d)