dovecot-2.2: doveadm: If we get disconnected from server, log th...
dovecot at dovecot.org
dovecot at dovecot.org
Tue Aug 6 15:11:24 EEST 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/07557a9c59b1
changeset: 16667:07557a9c59b1
user: Timo Sirainen <tss at iki.fi>
date: Tue Aug 06 15:11:14 2013 +0300
description:
doveadm: If we get disconnected from server, log the reason.
diffstat:
src/doveadm/doveadm-mail-server.c | 6 ++++--
src/doveadm/dsync/doveadm-dsync.c | 6 ++++--
src/doveadm/server-connection.c | 22 ++++++++++++++++------
src/doveadm/server-connection.h | 3 ++-
4 files changed, 26 insertions(+), 11 deletions(-)
diffs (123 lines):
diff -r 58be84a381e5 -r 07557a9c59b1 src/doveadm/doveadm-mail-server.c
--- a/src/doveadm/doveadm-mail-server.c Tue Aug 06 14:53:23 2013 +0300
+++ b/src/doveadm/doveadm-mail-server.c Tue Aug 06 15:11:14 2013 +0300
@@ -81,7 +81,8 @@
return FALSE;
}
-static void doveadm_cmd_callback(int exit_code, void *context)
+static void doveadm_cmd_callback(int exit_code, const char *error,
+ void *context)
{
struct doveadm_mail_server_cmd *servercmd = context;
struct doveadm_server *server =
@@ -95,7 +96,8 @@
case 0:
break;
case SERVER_EXIT_CODE_DISCONNECTED:
- i_error("%s: Internal failure for %s", server->name, username);
+ i_error("%s: Internal failure for %s: %s",
+ server->name, username, error);
internal_failure = TRUE;
master_service_stop(master_service);
return;
diff -r 58be84a381e5 -r 07557a9c59b1 src/doveadm/dsync/doveadm-dsync.c
--- a/src/doveadm/dsync/doveadm-dsync.c Tue Aug 06 14:53:23 2013 +0300
+++ b/src/doveadm/dsync/doveadm-dsync.c Tue Aug 06 15:11:14 2013 +0300
@@ -621,7 +621,8 @@
return ret;
}
-static void dsync_connected_callback(int exit_code, void *context)
+static void dsync_connected_callback(int exit_code, const char *error,
+ void *context)
{
struct dsync_cmd_context *ctx = context;
@@ -632,7 +633,8 @@
&ctx->output, &ctx->ssl_iostream);
break;
case SERVER_EXIT_CODE_DISCONNECTED:
- ctx->error = "Disconnected from remote";
+ ctx->error = p_strdup_printf(ctx->ctx.pool,
+ "Disconnected from remote: %s", error);
break;
case EX_NOUSER:
ctx->error = "Unknown user in remote";
diff -r 58be84a381e5 -r 07557a9c59b1 src/doveadm/server-connection.c
--- a/src/doveadm/server-connection.c Tue Aug 06 14:53:23 2013 +0300
+++ b/src/doveadm/server-connection.c Tue Aug 06 15:11:14 2013 +0300
@@ -79,12 +79,13 @@
}
static void
-server_connection_callback(struct server_connection *conn, int exit_code)
+server_connection_callback(struct server_connection *conn,
+ int exit_code, const char *error)
{
server_cmd_callback_t *callback = conn->callback;
conn->callback = NULL;
- callback(exit_code, conn->context);
+ callback(exit_code, error, conn->context);
}
static void stream_data(string_t *str, const unsigned char *data, size_t size)
@@ -266,7 +267,7 @@
if (line == NULL)
return;
if (line[0] == '+')
- server_connection_callback(conn, 0);
+ server_connection_callback(conn, 0, "");
else if (line[0] == '-') {
line++;
if (strcmp(line, "NOUSER") == 0)
@@ -275,7 +276,7 @@
/* old doveadm-server */
exit_code = EX_TEMPFAIL;
}
- server_connection_callback(conn, exit_code);
+ server_connection_callback(conn, exit_code, line);
} else {
i_error("doveadm server sent broken input "
"(expected cmd reply): %s", line);
@@ -405,6 +406,7 @@
{
struct server_connection *conn = *_conn;
struct server_connection *const *conns;
+ const char *error;
unsigned int i, count;
*_conn = NULL;
@@ -417,8 +419,16 @@
}
}
- if (conn->callback != NULL)
- server_connection_callback(conn, SERVER_EXIT_CODE_DISCONNECTED);
+ if (conn->callback != NULL) {
+ error = conn->ssl_iostream == NULL ? NULL :
+ ssl_iostream_get_last_error(conn->ssl_iostream);
+ if (error == NULL) {
+ error = conn->input->stream_errno == 0 ? "EOF" :
+ strerror(conn->input->stream_errno);
+ }
+ server_connection_callback(conn, SERVER_EXIT_CODE_DISCONNECTED,
+ error);
+ }
if (printing_conn == conn)
print_connection_released();
diff -r 58be84a381e5 -r 07557a9c59b1 src/doveadm/server-connection.h
--- a/src/doveadm/server-connection.h Tue Aug 06 14:53:23 2013 +0300
+++ b/src/doveadm/server-connection.h Tue Aug 06 15:11:14 2013 +0300
@@ -7,7 +7,8 @@
struct server_connection;
struct ssl_iostream;
-typedef void server_cmd_callback_t(int exit_code, void *context);
+typedef void server_cmd_callback_t(int exit_code, const char *error,
+ void *context);
int server_connection_create(struct doveadm_server *server,
struct server_connection **conn_r);
More information about the dovecot-cvs
mailing list