From: Timo Sirainen Date: Tue, 8 Dec 2009 22:50:37 +0000 (-0500) Subject: Maildir++ quota: % limits weren't updated when limits were read from maildirsize. X-Git-Tag: 2.0.beta1~46 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d761c26f2bbf514e0fc0c6ed9bc52627a4179eab;p=thirdparty%2Fdovecot%2Fcore.git Maildir++ quota: % limits weren't updated when limits were read from maildirsize. --HG-- branch : HEAD --- diff --git a/src/plugins/quota/quota-maildir.c b/src/plugins/quota/quota-maildir.c index 3eac07737c..588f7e47b7 100644 --- a/src/plugins/quota/quota-maildir.c +++ b/src/plugins/quota/quota-maildir.c @@ -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) { diff --git a/src/plugins/quota/quota-private.h b/src/plugins/quota/quota-private.h index f545f92c5e..13c8cafdbf 100644 --- a/src/plugins/quota/quota-private.h +++ b/src/plugins/quota/quota-private.h @@ -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 diff --git a/src/plugins/quota/quota.c b/src/plugins/quota/quota.c index 2924e0b5cb..cc6861845b 100644 --- a/src/plugins/quota/quota.c +++ b/src/plugins/quota/quota.c @@ -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",