Skip to content

Commit

Permalink
doveadm: Send and receive exit codes correctly
Browse files Browse the repository at this point in the history
The old code would assume TEMPFAIL for almost everything.
  • Loading branch information
cmouse committed Mar 22, 2017
1 parent c466bbc commit 89387c6
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 23 deletions.
22 changes: 2 additions & 20 deletions src/doveadm/client-connection.c
Expand Up @@ -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));
Expand Down
7 changes: 4 additions & 3 deletions src/doveadm/server-connection.c
Expand Up @@ -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"
Expand Down Expand Up @@ -384,9 +385,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;
}
Expand Down

0 comments on commit 89387c6

Please sign in to comment.