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",