Mercurial > dovecot > original-hg > dovecot-1.2
changeset 9498:a9b469e1c8de HEAD
Maildir++ quota: % limits weren't updated when limits were read from maildirsize.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 08 Dec 2009 17:52:10 -0500 |
parents | b348632b11e2 |
children | 58650eedc4fd |
files | src/plugins/quota/quota-maildir.c src/plugins/quota/quota-private.h src/plugins/quota/quota.c |
diffstat | 3 files changed, 23 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/quota/quota-maildir.c Tue Dec 08 13:52:14 2009 -0500 +++ b/src/plugins/quota/quota-maildir.c Tue Dec 08 17:52:10 2009 -0500 @@ -469,7 +469,9 @@ /* 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) {
--- a/src/plugins/quota/quota-private.h Tue Dec 08 13:52:14 2009 -0500 +++ b/src/plugins/quota/quota-private.h Tue Dec 08 17:52:10 2009 -0500 @@ -145,7 +145,9 @@ 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
--- a/src/plugins/quota/quota.c Tue Dec 08 13:52:14 2009 -0500 +++ b/src/plugins/quota/quota.c Tue Dec 08 17:52:10 2009 -0500 @@ -262,19 +262,17 @@ 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; - } - if (rule->count_percent > 0) { - rule->count_limit = default_rule->count_limit * - rule->count_percent / 100; - } + if (rule->bytes_percent > 0) + rule->bytes_limit = bytes_limit * rule->bytes_percent / 100; + if (rule->count_percent > 0) + 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 *rules; struct quota_warning_rule *warning_rules; @@ -282,14 +280,14 @@ rules = array_get_modifiable(&root_set->rules, &count); for (i = 0; i < count; i++) { - quota_rule_recalculate_relative_rules(&rules[i], - &root_set->default_rule); + quota_rule_recalculate_relative_rules(&rules[i], bytes_limit, + count_limit); } warning_rules = array_get_modifiable(&root_set->warning_rules, &count); for (i = 0; i < count; i++) { quota_rule_recalculate_relative_rules(&warning_rules[i].rule, - &root_set->default_rule); + bytes_limit, count_limit); } } @@ -419,7 +417,9 @@ 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_info("Quota rule: root=%s mailbox=%s " "bytes=%lld%s messages=%lld%s", root_set->name, @@ -580,7 +580,9 @@ 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_info("Quota warning: bytes=%llu%s " "messages=%llu%s command=%s",