changeset 14990:578b911f355b

quota-status: Added quota_status_toolarge message for mails larger than user's quota limit. Based on patch by Ulrich Zehl
author Timo Sirainen <tss@iki.fi>
date Fri, 02 Aug 2013 15:19:22 +0300
parents b73639f92610
children b986ac5e1d98
files src/plugins/quota/quota-status.c
diffstat 1 files changed, 11 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/quota/quota-status.c	Fri Aug 02 15:14:39 2013 +0300
+++ b/src/plugins/quota/quota-status.c	Fri Aug 02 15:19:22 2013 +0300
@@ -50,13 +50,13 @@
 }
 
 static int
-quota_check(struct mail_user *user, uoff_t mail_size, const char **error_r)
+quota_check(struct mail_user *user, uoff_t mail_size,
+	    const char **error_r, bool *too_large_r)
 {
 	struct quota_user *quser = QUOTA_USER_CONTEXT(user);
 	struct mail_namespace *ns;
 	struct mailbox *box;
 	struct quota_transaction_context *ctx;
-	bool too_large;
 	int ret;
 
 	if (quser == NULL) {
@@ -68,7 +68,7 @@
 	box = mailbox_alloc(ns->list, "INBOX", 0);
 
 	ctx = quota_transaction_begin(box);
-	ret = quota_test_alloc(ctx, I_MAX(1, mail_size), &too_large);
+	ret = quota_test_alloc(ctx, I_MAX(1, mail_size), too_large_r);
 	quota_transaction_rollback(&ctx);
 
 	mailbox_free(&box);
@@ -86,6 +86,7 @@
 	struct mail_storage_service_user *service_user;
 	struct mail_user *user;
 	const char *value = NULL, *error;
+	bool too_large;
 	int ret;
 
 	if (client->recipient == NULL) {
@@ -102,14 +103,18 @@
 	if (ret == 0) {
 		value = nouser_reply;
 	} else if (ret > 0) {
-		if ((ret = quota_check(user, client->size, &error)) > 0) {
+		if ((ret = quota_check(user, client->size, &error, &too_large)) > 0) {
 			/* under quota */
 			value = mail_user_plugin_getenv(user, "quota_status_success");
 			if (value == NULL)
 				value = "OK";
 		} else if (ret == 0) {
-			/* over quota */
-			value = mail_user_plugin_getenv(user, "quota_status_overquota");
+			if (too_large) {
+				/* even over maximum quota */
+				value = mail_user_plugin_getenv(user, "quota_status_toolarge");
+			}
+			if (value == NULL)
+				value = mail_user_plugin_getenv(user, "quota_status_overquota");
 			if (value == NULL)
 				value = t_strdup_printf("554 5.2.2 %s", error);
 		}