changeset 21784:b7f788e99e86

doveadm: Send and receive exit codes correctly The old code would assume TEMPFAIL for almost everything.
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Wed, 22 Mar 2017 09:03:20 +0200
parents d0a35b1482d6
children 22764c03b37c
files src/doveadm/client-connection.c src/doveadm/server-connection.c
diffstat 2 files changed, 6 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- 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));
--- 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;
 			}