From: Aki Tuomi Date: Wed, 22 Mar 2017 07:03:20 +0000 (+0200) Subject: doveadm: Send and receive exit codes correctly X-Git-Tag: 2.2.29.rc1~124 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0a812a18bab1acfc42e84cb45b2cd99846a10332;p=thirdparty%2Fdovecot%2Fcore.git doveadm: Send and receive exit codes correctly The old code would assume TEMPFAIL for almost everything. --- diff --git a/src/doveadm/client-connection.c b/src/doveadm/client-connection.c index 97700e7bfe..7e64827a23 100644 --- a/src/doveadm/client-connection.c +++ b/src/doveadm/client-connection.c @@ -25,38 +25,20 @@ #define MAX_INBUF_SIZE (1024*1024) -static struct { - int code; - const char *str; -} exit_code_strings[] = { - { EX_TEMPFAIL, "TEMPFAIL" }, - { EX_USAGE, "USAGE" }, - { EX_NOUSER, "NOUSER" }, - { EX_NOPERM, "NOPERM" }, - { EX_PROTOCOL, "PROTOCOL" }, - { EX_DATAERR, "DATAERR" }, - { DOVEADM_EX_NOTFOUND, "NOTFOUND" } -}; - static void client_connection_input(struct client_connection *conn); static void doveadm_cmd_server_post(struct client_connection *conn, const char *cmd_name) { const char *str = NULL; - unsigned int i; if (doveadm_exit_code == 0) { o_stream_nsend(conn->output, "\n+\n", 3); return; } - for (i = 0; i < N_ELEMENTS(exit_code_strings); i++) { - if (exit_code_strings[i].code == doveadm_exit_code) { - str = exit_code_strings[i].str; - break; - } - } + str = doveadm_exit_code_to_str(doveadm_exit_code); + if (str != NULL) { o_stream_nsend_str(conn->output, t_strdup_printf("\n-%s\n", str)); diff --git a/src/doveadm/server-connection.c b/src/doveadm/server-connection.c index bb25512575..cc2badcf00 100644 --- a/src/doveadm/server-connection.c +++ b/src/doveadm/server-connection.c @@ -14,6 +14,7 @@ #include "master-service.h" #include "master-service-settings.h" #include "settings-parser.h" +#include "doveadm.h" #include "doveadm-print.h" #include "doveadm-util.h" #include "doveadm-server.h" @@ -372,9 +373,9 @@ static bool server_connection_input_one(struct server_connection *conn) server_connection_callback(conn, 0, ""); else if (line[0] == '-') { line++; - if (strcmp(line, "NOUSER") == 0) - exit_code = EX_NOUSER; - else if (str_to_int(line, &exit_code) < 0) { + exit_code = doveadm_str_to_exit_code(line); + if (exit_code == DOVEADM_EX_UNKNOWN && + str_to_int(line, &exit_code) < 0) { /* old doveadm-server */ exit_code = EX_TEMPFAIL; }