From: Timo Sirainen Date: Wed, 11 Nov 2015 15:35:10 +0000 (+0200) Subject: login proxy: Include some extra information in disconnect log lines. X-Git-Tag: 2.2.20.rc1~101 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9940125bee5440a185c1fe1befa804f5cce8d0ea;p=thirdparty%2Fdovecot%2Fcore.git login proxy: Include some extra information in disconnect log lines. --- diff --git a/src/login-common/login-proxy.c b/src/login-common/login-proxy.c index ebac09a1bf..1a1354ed96 100644 --- a/src/login-common/login-proxy.c +++ b/src/login-common/login-proxy.c @@ -79,18 +79,32 @@ static void login_proxy_free_delayed(struct login_proxy **_proxy, const char *reason) ATTR_NULL(2); -static void login_proxy_free_errno(struct login_proxy **proxy, +static void login_proxy_free_errno(struct login_proxy **_proxy, int err, bool server) { - const char *reason, *who = server ? "server" : "client"; - - reason = err == 0 || err == EPIPE ? - t_strdup_printf("Disconnected by %s", who) : - t_strdup_printf("Disconnected by %s: %s", who, strerror(errno)); + struct login_proxy *proxy = *_proxy; + string_t *reason = t_str_new(128); + + str_printfa(reason, "Disconnected by %s", server ? "server" : "client"); + if (err != 0 && err != EPIPE) + str_printfa(reason, ": %s", strerror(errno)); + + str_printfa(reason, "(%ds idle, in=%"PRIuUOFF_T", out=%"PRIuUOFF_T, + (int)(ioloop_time - proxy->last_io), + proxy->server_output->offset, proxy->client_output->offset); + if (o_stream_get_buffer_used_size(proxy->client_output) > 0) { + str_printfa(reason, "+%"PRIuSIZE_T, + o_stream_get_buffer_used_size(proxy->client_output)); + } + if (proxy->server_io == NULL) + str_append(reason, ", client output blocked"); + if (proxy->client_io == NULL) + str_append(reason, ", server output blocked"); + str_append_c(reason, ')'); if (server) - login_proxy_free_delayed(proxy, reason); + login_proxy_free_delayed(_proxy, str_c(reason)); else - login_proxy_free_reason(proxy, reason); + login_proxy_free_reason(_proxy, str_c(reason)); } static void server_input(struct login_proxy *proxy)