]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Maildir++ quota: % limits weren't updated when limits were read from maildirsize.
authorTimo Sirainen <tss@iki.fi>
Tue, 8 Dec 2009 22:50:37 +0000 (17:50 -0500)
committerTimo Sirainen <tss@iki.fi>
Tue, 8 Dec 2009 22:50:37 +0000 (17:50 -0500)
--HG--
branch : HEAD

src/plugins/quota/quota-maildir.c
src/plugins/quota/quota-private.h
src/plugins/quota/quota.c

index 3eac07737cf24602b6e5f1cc2d7ad509cd85373d..588f7e47b747d67b3c84e3b0767a65b1b56a3009 100644 (file)
@@ -467,7 +467,9 @@ static int maildirsize_parse(struct maildir_quota_root *root,
                /* we're using limits from the file. */
                root->root.bytes_limit = message_bytes_limit;
                root->root.count_limit = message_count_limit;
-               quota_root_recalculate_relative_rules(root->root.set);
+               quota_root_recalculate_relative_rules(root->root.set,
+                                                     message_bytes_limit,
+                                                     message_count_limit);
        }
 
        if (*lines == NULL) {
index f545f92c5e2634b20667e42c7cc1ea5581febd58..13c8cafdbf4c6af25c4a1cbd3163505684df0b52 100644 (file)
@@ -146,7 +146,9 @@ bool quota_root_is_namespace_visible(struct quota_root *root,
 struct quota_rule *
 quota_root_rule_find(struct quota_root_settings *root_set, const char *name);
 
-void quota_root_recalculate_relative_rules(struct quota_root_settings *root_set);
+void quota_root_recalculate_relative_rules(struct quota_root_settings *root_set,
+                                          int64_t bytes_limit,
+                                          int64_t count_limit);
 int quota_count(struct quota_root *root, uint64_t *bytes_r, uint64_t *count_r);
 
 #endif
index 2924e0b5cba7aca2e5ca3d54f82d1cf1d1182249..cc6861845b607e3744e5ba82e390f5bd90f0ed65 100644 (file)
@@ -323,31 +323,32 @@ quota_rule_parse_percentage(struct quota_root_settings *root_set,
 
 static void
 quota_rule_recalculate_relative_rules(struct quota_rule *rule,
-                                     const struct quota_rule *default_rule)
+                                     int64_t bytes_limit, int64_t count_limit)
 {
        if (rule->bytes_percent > 0) {
-               rule->bytes_limit = default_rule->bytes_limit *
-                       rule->bytes_percent / 100;
+               rule->bytes_limit = bytes_limit * rule->bytes_percent / 100;
        }
        if (rule->count_percent > 0) {
-               rule->count_limit = default_rule->count_limit *
+               rule->count_limit = count_limit *
                        rule->count_percent / 100;
        }
 }
 
-void quota_root_recalculate_relative_rules(struct quota_root_settings *root_set)
+void quota_root_recalculate_relative_rules(struct quota_root_settings *root_set,
+                                          int64_t bytes_limit,
+                                          int64_t count_limit)
 {
        struct quota_rule *rule;
        struct quota_warning_rule *warning_rule;
 
        array_foreach_modifiable(&root_set->rules, rule) {
-               quota_rule_recalculate_relative_rules(rule,
-                                                     &root_set->default_rule);
+               quota_rule_recalculate_relative_rules(rule, bytes_limit,
+                                                     count_limit);
        }
 
        array_foreach_modifiable(&root_set->warning_rules, warning_rule) {
                quota_rule_recalculate_relative_rules(&warning_rule->rule,
-                                                     &root_set->default_rule);
+                                                     bytes_limit, count_limit);
        }
 }
 
@@ -477,7 +478,9 @@ int quota_root_add_rule(struct quota_root_settings *root_set,
                        ret = -1;
        }
 
-       quota_root_recalculate_relative_rules(root_set);
+       quota_root_recalculate_relative_rules(root_set,
+                                             root_set->default_rule.bytes_limit,
+                                             root_set->default_rule.count_limit);
        if (root_set->set->debug) {
                i_debug("Quota rule: root=%s mailbox=%s "
                        "bytes=%lld%s messages=%lld%s", root_set->name,
@@ -623,7 +626,9 @@ int quota_root_add_warning_rule(struct quota_root_settings *root_set,
        warning->command = i_strdup(p+1);
        warning->rule = rule;
 
-       quota_root_recalculate_relative_rules(root_set);
+       quota_root_recalculate_relative_rules(root_set,
+                                             root_set->default_rule.bytes_limit,
+                                             root_set->default_rule.count_limit);
        if (root_set->set->debug) {
                i_debug("Quota warning: bytes=%llu%s "
                        "messages=%llu%s command=%s",