From: Timo Sirainen Date: Thu, 23 Mar 2023 23:15:21 +0000 (+0200) Subject: imap: Disconnect imap-master client if it's not sending anything for 25 seconds X-Git-Tag: 2.4.0~2856 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=be910042740a864835c72932a10e6f72f213cbcd;p=thirdparty%2Fdovecot%2Fcore.git imap: Disconnect imap-master client if it's not sending anything for 25 seconds --- diff --git a/src/imap/imap-master-client.c b/src/imap/imap-master-client.c index a0f77c15b5..d4fa2af8c2 100644 --- a/src/imap/imap-master-client.c +++ b/src/imap/imap-master-client.c @@ -375,6 +375,16 @@ imap_master_client_input_line(struct connection *conn, const char *line) return ret; } +static void imap_master_client_idle_timeout(struct connection *conn) +{ + e_error(conn->event, "imap-master: Client didn't send any input for %" + PRIdTIME_T" seconds - disconnecting", + ioloop_time - conn->last_input_tv.tv_sec); + + conn->disconnect_reason = CONNECTION_DISCONNECT_IDLE_TIMEOUT; + conn->v.destroy(conn); +} + void imap_master_client_create(int fd) { struct imap_master_client *client; @@ -396,12 +406,16 @@ static struct connection_settings client_set = { .input_max_size = SIZE_MAX, .output_max_size = SIZE_MAX, - .client = FALSE + .client = FALSE, + + /* less than imap-hibernate's IMAP_MASTER_CONNECTION_TIMEOUT_MSECS */ + .input_idle_timeout_secs = 25, }; static const struct connection_vfuncs client_vfuncs = { .destroy = imap_master_client_destroy, - .input_line = imap_master_client_input_line + .input_line = imap_master_client_input_line, + .idle_timeout = imap_master_client_idle_timeout, }; void imap_master_clients_init(void)