# HG changeset patch # User Aki Tuomi # Date 1490166200 -7200 # Node ID b7f788e99e8615b1861472ce6b11fbfa4b9e3c4f # Parent d0a35b1482d65d653e36257699406367d1e9a9f9 doveadm: Send and receive exit codes correctly The old code would assume TEMPFAIL for almost everything. diff -r d0a35b1482d6 -r b7f788e99e86 src/doveadm/client-connection.c --- a/src/doveadm/client-connection.c Wed Mar 22 19:21:55 2017 +0200 +++ b/src/doveadm/client-connection.c Wed Mar 22 09:03:20 2017 +0200 @@ -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 -r d0a35b1482d6 -r b7f788e99e86 src/doveadm/server-connection.c --- a/src/doveadm/server-connection.c Wed Mar 22 19:21:55 2017 +0200 +++ b/src/doveadm/server-connection.c Wed Mar 22 09:03:20 2017 +0200 @@ -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 @@ 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; }