[Dovecot] [bug] Changing dovecot 'quota' Value incorrectly overwrites Limit with same value

Rich pgnet.dev+rich-dovecot at gmail.com
Mon Oct 24 21:14:25 EEST 2011


I'm able to consistently reproduce this problem/behavior, but not
workaround or fix it, yet.

Rich

On Wed, Oct 19, 2011 at 7:41 AM, Rich <pgnet.dev+rich-dovecot at gmail.com> wrote:
> 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   %
>                myuser at domain1.com      User quota      STORAGE         0       0       0
>                myuser at domain1.com      User quota      MESSAGE         0       10000   0
>                myuser at domain2.com      User quota      STORAGE         0       0       0
>                myuser at domain2.com      User quota      MESSAGE         0       10000   0
>
>        mysql> select * from PARAMS;
>                +----+------------------------+------------+-------------+
>                | ai | MAILBOX_user_domain    | quota_bytes | quota_msgs |
>                +----+------------------------+-------------+------------+
>                |  1 |  myuser at domain1.com    |           0 |          0 |
>                |  2 |  myuser at domain2.com    |           0 |          0 |
>                +----+------------------------+------------+-------------+
>                2 rows in set (0.00 sec)
>
> and, after sending a single message to 'myuser at domain1.com', 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   %
>                myuser at domain1.com      User quota      STORAGE         3       3       100
>                myuser at domain1.com      User quota      MESSAGE         1       10000   0
>                myuser at domain2.com      User quota      STORAGE         0       0       0
>                myuser at domain2.com      User quota      MESSAGE         0       10000   0
>
>        mysql> select * from PARAMS;
>                +----+------------------------+------------+-------------+
>                | ai | MAILBOX_user_domain    | quota_bytes | quota_msgs |
>                +----+------------------------+-------------+------------+
>                |  1 |  myuser at domain1.com    |        3269 |          1 |
>                |  2 |  myuser at domain2.com    |           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
>


More information about the dovecot mailing list