Skip to content

Commit

Permalink
quota: Mark noenforcing quotas with unlimited quota
Browse files Browse the repository at this point in the history
This allows quota to be properly updated for unenforced quotas
so they can be used for tracking only.

This fixes issue where using noenforcing would not update quota
during mail save, but requires a manual quota update.
  • Loading branch information
cmouse committed Aug 28, 2018
1 parent 6e8f15f commit 08726df
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions src/plugins/quota/quota.c
Expand Up @@ -935,12 +935,15 @@ int quota_transaction_set_limits(struct quota_transaction_context *ctx,
roots = array_get(&ctx->quota->roots, &count);
for (i = 0; i < count; i++) {
if (!quota_root_is_visible(roots[i], ctx->box) ||
roots[i]->no_enforcing)
(roots[i]->no_enforcing && ctx->auto_updating))
continue;

if (quota_root_get_rule_limits(roots[i], mailbox_name,
&bytes_limit, &count_limit,
&ignored, &error) < 0) {
else if (roots[i]->no_enforcing) {
bytes_limit = (uint64_t)-1;
count_limit = (uint64_t)-1;
ignored = FALSE;
} else if (quota_root_get_rule_limits(roots[i], mailbox_name,
&bytes_limit, &count_limit,
&ignored, &error) < 0) {
ctx->failed = TRUE;
*error_result_r = QUOTA_GET_RESULT_INTERNAL_ERROR;
*error_r = t_strdup_printf(
Expand All @@ -955,7 +958,10 @@ int quota_transaction_set_limits(struct quota_transaction_context *ctx,
ret = quota_get_resource(roots[i], mailbox_name,
QUOTA_NAME_STORAGE_BYTES,
&current, &limit, &error);
if (ret == QUOTA_GET_RESULT_LIMITED) {
if (roots[i]->no_enforcing) {
ctx->bytes_ceil = (uint64_t)-1;
ctx->bytes_ceil2 = (uint64_t)-1;
} else if (ret == QUOTA_GET_RESULT_LIMITED) {
if (limit <= current) {
/* over quota */
ctx->bytes_ceil = 0;
Expand Down Expand Up @@ -987,7 +993,9 @@ int quota_transaction_set_limits(struct quota_transaction_context *ctx,
ret = quota_get_resource(roots[i], mailbox_name,
QUOTA_NAME_MESSAGES,
&current, &limit, &error);
if (ret == QUOTA_GET_RESULT_LIMITED) {
if (roots[i]->no_enforcing) {
ctx->count_ceil = (uint64_t)-1;
} else if (ret == QUOTA_GET_RESULT_LIMITED) {
if (limit <= current) {
/* over quota */
ctx->count_ceil = 0;
Expand Down

0 comments on commit 08726df

Please sign in to comment.