]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
maildir++ quota: Fixed relative quota_grace when taking limit from maildirsize file
authorTimo Sirainen <tss@iki.fi>
Thu, 28 Mar 2013 09:37:07 +0000 (11:37 +0200)
committerTimo Sirainen <tss@iki.fi>
Thu, 28 Mar 2013 09:37:07 +0000 (11:37 +0200)
src/plugins/quota/quota-private.h
src/plugins/quota/quota.c

index 1e95481804c6969fe47f4ddd26fc92aba692fa35..1f219903114d686b75dd076da88822e1641652b3 100644 (file)
@@ -90,6 +90,7 @@ struct quota_root_settings {
        /* If user is under quota before saving a mail, allow the last mail to
           bring the user over quota by this many bytes. */
        uint64_t last_mail_max_extra_bytes;
+       struct quota_rule grace_rule;
 
        /* Limits in default_rule override backend's quota limits */
        unsigned int force_default_rule:1;
index e9342075ae088cde6ed591e001567836470e3520..39e52131afa112c6b175f25aa5eaafe20c3d2958 100644 (file)
@@ -451,6 +451,9 @@ void quota_root_recalculate_relative_rules(struct quota_root_settings *root_set,
                quota_rule_recalculate_relative_rules(&warning_rule->rule,
                                                      bytes_limit, count_limit);
        }
+       quota_rule_recalculate_relative_rules(&root_set->grace_rule,
+                                             bytes_limit, 0);
+       root_set->last_mail_max_extra_bytes = root_set->grace_rule.bytes_limit;
 }
 
 static int
@@ -610,7 +613,6 @@ quota_root_parse_grace(struct mail_user *user, const char *root_name,
 {
        const char *set_name, *value, *error;
        char *p;
-       struct quota_rule rule;
 
        set_name = t_strconcat(root_name, "_grace", NULL);
        value = mail_user_plugin_getenv(user, set_name);
@@ -619,18 +621,17 @@ quota_root_parse_grace(struct mail_user *user, const char *root_name,
                value = QUOTA_DEFAULT_GRACE;
        }
 
-       memset(&rule, 0, sizeof(rule));
-       rule.bytes_limit = strtoll(value, &p, 10);
+       root_set->grace_rule.bytes_limit = strtoll(value, &p, 10);
 
-       if (quota_limit_parse(root_set, &rule, p, 1,
-                             &rule.bytes_limit, &error) < 0) {
+       if (quota_limit_parse(root_set, &root_set->grace_rule, p, 1,
+                             &root_set->grace_rule.bytes_limit, &error) < 0) {
                *error_r = p_strdup_printf(root_set->set->pool,
                        "Invalid %s value '%s': %s", set_name, value, error);
                return -1;
        }
-       quota_rule_recalculate_relative_rules(&rule,
+       quota_rule_recalculate_relative_rules(&root_set->grace_rule,
                root_set->default_rule.bytes_limit, 0);
-       root_set->last_mail_max_extra_bytes = rule.bytes_limit;
+       root_set->last_mail_max_extra_bytes = root_set->grace_rule.bytes_limit;
        return 0;
 }