# HG changeset patch # User Timo Sirainen # Date 1487350583 -7200 # Node ID 6d50f63cfa671b982349735e82cf601f3be1f0fe # Parent 9aac2a64e5c26963cd2b12c436526d883930e551 lib-storage: Add MAIL_ERROR_LIMIT diff -r 9aac2a64e5c2 -r 6d50f63cfa67 src/doveadm/doveadm-mail.c --- 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 diff -r 9aac2a64e5c2 -r 6d50f63cfa67 src/imap/imap-commands-util.c --- 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); diff -r 9aac2a64e5c2 -r 6d50f63cfa67 src/lib-storage/index/dbox-multi/mdbox-map.c --- 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; diff -r 9aac2a64e5c2 -r 6d50f63cfa67 src/lib-storage/index/imapc/imapc-storage.c --- 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 } diff -r 9aac2a64e5c2 -r 6d50f63cfa67 src/lib-storage/mail-error.h --- 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