changeset 21603:6d50f63cfa67

lib-storage: Add MAIL_ERROR_LIMIT
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Fri, 17 Feb 2017 18:56:23 +0200
parents 9aac2a64e5c2
children fb8ef6e2c2fe
files src/doveadm/doveadm-mail.c src/imap/imap-commands-util.c src/lib-storage/index/dbox-multi/mdbox-map.c src/lib-storage/index/imapc/imapc-storage.c src/lib-storage/mail-error.h
diffstat 5 files changed, 11 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/doveadm/doveadm-mail.c	Fri Feb 17 18:32:05 2017 +0200
+++ b/src/doveadm/doveadm-mail.c	Fri Feb 17 18:56:23 2017 +0200
@@ -53,13 +53,12 @@
 void doveadm_mail_failed_error(struct doveadm_mail_cmd_context *ctx,
 			       enum mail_error error)
 {
-	int exit_code = 0;
+	int exit_code = EX_TEMPFAIL;
 
 	switch (error) {
 	case MAIL_ERROR_NONE:
 		i_unreached();
 	case MAIL_ERROR_TEMP:
-		exit_code = EX_TEMPFAIL;
 		break;
 	case MAIL_ERROR_NOTPOSSIBLE:
 	case MAIL_ERROR_EXISTS:
@@ -81,7 +80,9 @@
 		break;
 	case MAIL_ERROR_EXPUNGED:
 	case MAIL_ERROR_INUSE:
-		exit_code = EX_TEMPFAIL;
+		break;
+	case MAIL_ERROR_LIMIT:
+		exit_code = DOVEADM_EX_NOTPOSSIBLE;
 		break;
 	}
 	/* tempfail overrides all other exit codes, otherwise use whatever
--- a/src/imap/imap-commands-util.c	Fri Feb 17 18:32:05 2017 +0200
+++ b/src/imap/imap-commands-util.c	Fri Feb 17 18:56:23 2017 +0200
@@ -169,6 +169,9 @@
 	case MAIL_ERROR_CONVERSION:
 	case MAIL_ERROR_INVALIDDATA:
 		break;
+	case MAIL_ERROR_LIMIT:
+		resp_code = IMAP_RESP_CODE_LIMIT;
+		break;
 	}
 	if (resp_code == NULL || *error_string == '[')
 		return t_strconcat("NO ", error_string, NULL);
--- a/src/lib-storage/index/dbox-multi/mdbox-map.c	Fri Feb 17 18:32:05 2017 +0200
+++ b/src/lib-storage/index/dbox-multi/mdbox-map.c	Fri Feb 17 18:56:23 2017 +0200
@@ -674,7 +674,7 @@
 		/* we're getting close to the 64k limit. fail early
 		   to make it less likely that two processes increase
 		   the refcount enough times to cross the limit */
-		mail_storage_set_error(MAP_STORAGE(map), MAIL_ERROR_NOTPOSSIBLE,
+		mail_storage_set_error(MAP_STORAGE(map), MAIL_ERROR_LIMIT,
 			t_strdup_printf("Message has been copied too many times (%d + %d)",
 					old_diff, new_diff));
 		return -1;
--- a/src/lib-storage/index/imapc/imapc-storage.c	Fri Feb 17 18:32:05 2017 +0200
+++ b/src/lib-storage/index/imapc/imapc-storage.c	Fri Feb 17 18:56:23 2017 +0200
@@ -45,7 +45,7 @@
 	{ IMAP_RESP_CODE_SERVERBUG, MAIL_ERROR_TEMP },
 	/* { IMAP_RESP_CODE_CLIENTBUG, 0 }, */
 	{ IMAP_RESP_CODE_CANNOT, MAIL_ERROR_NOTPOSSIBLE },
-	{ IMAP_RESP_CODE_LIMIT, MAIL_ERROR_NOTPOSSIBLE },
+	{ IMAP_RESP_CODE_LIMIT, MAIL_ERROR_LIMIT },
 	{ IMAP_RESP_CODE_OVERQUOTA, MAIL_ERROR_NOQUOTA },
 	{ IMAP_RESP_CODE_ALREADYEXISTS, MAIL_ERROR_EXISTS },
 	{ IMAP_RESP_CODE_NONEXISTENT, MAIL_ERROR_NOTFOUND }
--- a/src/lib-storage/mail-error.h	Fri Feb 17 18:32:05 2017 +0200
+++ b/src/lib-storage/mail-error.h	Fri Feb 17 18:56:23 2017 +0200
@@ -49,6 +49,8 @@
 	/* Can't do the requested data conversion because the original data
 	   isn't valid. */
 	MAIL_ERROR_INVALIDDATA,
+	/* Operation ran against some kind of a limit. */
+	MAIL_ERROR_LIMIT,
 
 	/* FIXME: Obsolete - remove in v2.3 */
 	MAIL_ERROR_NOSPACE = MAIL_ERROR_NOQUOTA