I've made some progress, but quota 'Limit' is still not fully
functioning for me.
A couple of changes have helped:
Specifying a "%u% as username format,
/etc/dovecot/conf.d/90-quota.conf
plugin {
- quota = dict:User Quota::proxy::quota
+ quota = dict:User Quota:%u:proxy::quota
quota_rule = *:bytes=1073741824:messages=10000
quota_rule2 = Trash:storage=+10%%
}
using 'username' rather than 'user' in the user iteration query
/etc/dovecot/sql/virtmail-userdb-sql.cf
driver = mysql
connect = host=/var/run/mysql/mysql.sock dbname=my_db
user=my_user
password=my_pass
user_query = CALL UserDBQuery('%n','%d');
- iterate_query = SELECT `MAILBOX_user_domain` AS user FROM
`PARAMS`;
+ iterate_query = SELECT `MAILBOX_user_domain` AS username FROM
`PARAMS`;
and adding to my user_query,
CREATE PROCEDURE `UserDBQuery`(
...
SELECT ...
concat('*:bytes=', quota_bytes, ':messages=10000') AS
quota_rule,
...
Now, at init,
doveadm quota get -A
Username Quota name Type Value
Limit %
[email protected] User quota STORAGE 0
0 0
[email protected] User quota MESSAGE 0
10000 0
[email protected] User quota STORAGE 0
0 0
[email protected] User quota MESSAGE 0
10000 0
mysql> select * from PARAMS;
+----+------------------------+------------+-------------+
| ai | MAILBOX_user_domain | quota_bytes | quota_msgs |
+----+------------------------+-------------+------------+
| 1 | [email protected] | 0 | 0 |
| 2 | [email protected] | 0 | 0 |
+----+------------------------+------------+-------------+
2 rows in set (0.00 sec)
and, after sending a single message to '[email protected]', I do see
that Dovecot now recognizes/calculates a quota change, and only for
one domain,
doveadm quota get -A
Username Quota name Type Value
Limit %
[email protected] User quota STORAGE 3
3 100
[email protected] User quota MESSAGE 1
10000 0
[email protected] User quota STORAGE 0
0 0
[email protected] User quota MESSAGE 0
10000 0
mysql> select * from PARAMS;
+----+------------------------+------------+-------------+
| ai | MAILBOX_user_domain | quota_bytes | quota_msgs |
+----+------------------------+-------------+------------+
| 1 | [email protected] | 3269 | 1 |
| 2 | [email protected] | 0 | 0 |
+----+------------------------+------------+-------------+
2 rows in set (0.00 sec)
But, the Limit's wrong. It's not picking up the global Limit from
/etc/dovecot/conf.d/90-quota.conf
...
--> quota_rule = *:bytes=1073741824:messages=10000
...
and once a message quota Value is calculated, the Limit is set ==
Value, resulting in an incorrrect quota %-age of 100%.
Is Limit supposed to be specified per-user?
Rich