From: Timo Sirainen Date: Thu, 20 May 2010 08:02:11 +0000 (+0200) Subject: quota: Added ignoreunlimited option to quota roots to disable tracking users with... X-Git-Tag: 2.0.beta6~182 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d19d3aa4eafa34b48b7d7d311c9db31e1898576a;p=thirdparty%2Fdovecot%2Fcore.git quota: Added ignoreunlimited option to quota roots to disable tracking users with unlimited quota. --HG-- branch : HEAD --- diff --git a/src/plugins/quota/quota-dict.c b/src/plugins/quota/quota-dict.c index 8a5be534c0..083920aeda 100644 --- a/src/plugins/quota/quota-dict.c +++ b/src/plugins/quota/quota-dict.c @@ -50,6 +50,11 @@ static int dict_quota_init(struct quota_root *_root, const char *args) args += 12; continue; } + if (strncmp(args, "ignoreunlimited:", 16) == 0) { + _root->disable_unlimited_tracking = TRUE; + args += 16; + continue; + } if (strncmp(args, "ns=", 3) == 0) { p = strchr(args, ':'); if (p == NULL) diff --git a/src/plugins/quota/quota-maildir.c b/src/plugins/quota/quota-maildir.c index 6f003e18b7..dfcdc2f04a 100644 --- a/src/plugins/quota/quota-maildir.c +++ b/src/plugins/quota/quota-maildir.c @@ -715,6 +715,8 @@ static int maildir_quota_init(struct quota_root *_root, const char *args) for (tmp = t_strsplit(args, ":"); *tmp != NULL; tmp++) { if (strcmp(*tmp, "noenforcing") == 0) _root->no_enforcing = TRUE; + else if (strcmp(*tmp, "ignoreunlimited") == 0) + _root->disable_unlimited_tracking = TRUE; else if (strncmp(*tmp, "ns=", 3) == 0) _root->ns_prefix = p_strdup(_root->pool, *tmp + 3); else { diff --git a/src/plugins/quota/quota-private.h b/src/plugins/quota/quota-private.h index 13c8cafdbf..fbab6054a9 100644 --- a/src/plugins/quota/quota-private.h +++ b/src/plugins/quota/quota-private.h @@ -117,6 +117,8 @@ struct quota_root { /* don't enforce quota when saving */ unsigned int no_enforcing:1; + /* If user has unlimited quota, disable quota tracking */ + unsigned int disable_unlimited_tracking:1; }; struct quota_transaction_context { diff --git a/src/plugins/quota/quota.c b/src/plugins/quota/quota.c index fec8cd79da..ed9558788a 100644 --- a/src/plugins/quota/quota.c +++ b/src/plugins/quota/quota.c @@ -224,6 +224,8 @@ quota_root_init(struct quota_root_settings *root_set, struct quota *quota) for (; *tmp != NULL; tmp++) { if (strcmp(*tmp, "noenforcing") == 0) root->no_enforcing = TRUE; + else if (strcmp(*tmp, "ignoreunlimited") == 0) + root->disable_unlimited_tracking = TRUE; else break; } @@ -233,6 +235,10 @@ quota_root_init(struct quota_root_settings *root_set, struct quota *quota) root_set->name, root->backend.name, *tmp); } } + if (root_set->default_rule.bytes_limit == 0 && + root_set->default_rule.count_limit == 0 && + root->disable_unlimited_tracking) + return NULL; return root; } @@ -261,7 +267,8 @@ struct quota *quota_init(struct quota_settings *quota_set, i_array_init("a->namespaces, count); for (i = 0; i < count; i++) { root = quota_root_init(root_sets[i], quota); - array_append("a->roots, &root, 1); + if (root != NULL) + array_append("a->roots, &root, 1); } return quota; }