]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Send and receive exit codes correctly
authorAki Tuomi <aki.tuomi@dovecot.fi>
Wed, 22 Mar 2017 07:03:20 +0000 (09:03 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 27 Mar 2017 09:41:37 +0000 (12:41 +0300)
The old code would assume TEMPFAIL for almost everything.

src/doveadm/client-connection.c
src/doveadm/server-connection.c

index 97700e7bfe53c16d45a3745836bb6a831c745101..7e64827a23b0e480a90ba22aa9f9f96182789bfc 100644 (file)
 
 #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));
index bb25512575396f0c68523c84a15888d3b79ff98c..cc2badcf00744e0556be9549f77cb34984366549 100644 (file)
@@ -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;
                        }