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

Reply via email to