From: Siavash Tavakoli Date: Thu, 30 Sep 2021 15:19:58 +0000 (+0100) Subject: login-common: Add proxying events X-Git-Tag: 2.3.18~186 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=dbf7ed69c3fa71341bcccc0543ab83b43c90aa92;p=thirdparty%2Fdovecot%2Fcore.git login-common: Add proxying events - proxy_session_started: Emitted before connecting to remote - proxy_session_established: Emitted after connection to remote is established and user is successfully logged in to the backend. - proxy_session_finished: Emitted when proxying has ended. Either successfully or with error. --- diff --git a/src/login-common/client-common-auth.c b/src/login-common/client-common-auth.c index 2d4346c3bb..fe72c297dd 100644 --- a/src/login-common/client-common-auth.c +++ b/src/login-common/client-common-auth.c @@ -305,8 +305,11 @@ void client_proxy_finish_destroy_client(struct client *client) client_proxy_append_conn_info(str, client); + struct event *proxy_event = login_proxy_get_event(client->login_proxy); login_proxy_append_success_log_info(client->login_proxy, str); - e_info(login_proxy_get_event(client->login_proxy), "%s", str_c(str)); + struct event_passthrough *e = event_create_passthrough(proxy_event)-> + set_name("proxy_session_established"); + e_info(e->event(), "%s", str_c(str)); login_proxy_detach(client->login_proxy); client_destroy_success(client, NULL); } diff --git a/src/login-common/login-proxy.c b/src/login-common/login-proxy.c index c456181525..65133b4a02 100644 --- a/src/login-common/login-proxy.c +++ b/src/login-common/login-proxy.c @@ -306,6 +306,11 @@ static int login_proxy_connect(struct login_proxy *proxy) { struct login_proxy_record *rec = proxy->state_rec; + struct event_passthrough *e = event_create_passthrough(proxy->event)-> + set_name("proxy_session_started"); + e_debug(e->event(), "Connecting to <%s>", + login_proxy_get_ip_str(proxy->client->login_proxy)); + /* this needs to be done early, since login_proxy_free() shrinks num_waiting_connections. */ proxy->num_waiting_connections_updated = FALSE; @@ -531,6 +536,9 @@ login_proxy_free_full(struct login_proxy **_proxy, const char *reason, /* we'll disconnect server side in any case. */ login_proxy_disconnect(proxy); + struct event_passthrough *e = event_create_passthrough(proxy->event)-> + set_name("proxy_session_finished"); + if (proxy->detached) { /* detached proxy */ i_assert(reason != NULL || proxy->client->destroyed); @@ -540,17 +548,22 @@ login_proxy_free_full(struct login_proxy **_proxy, const char *reason, delay_ms = login_proxy_delay_disconnect(proxy); if (delay_ms == 0) - e_info(proxy->event, "%s", reason); + e_info(e->event(), "%s", reason); else { - e_info(proxy->event, "%s - disconnecting client in %ums", + e_info(e->add_int("delay_ms", delay_ms)->event(), + "%s - disconnecting client in %ums", reason, delay_ms); } - i_assert(detached_login_proxies_count > 0); detached_login_proxies_count--; } else { i_assert(proxy->client_input == NULL); i_assert(proxy->client_output == NULL); + if (reason != NULL) + e_debug(e->event(), "%s", reason); + else + e_debug(e->event(), "Failed to connect to %s", + login_proxy_get_ip_str(proxy)); DLLIST_REMOVE(&login_proxies_pending, proxy); } @@ -579,6 +592,7 @@ bool login_proxy_failed(struct login_proxy *proxy, struct event *event, { const char *log_prefix; bool try_reconnect = TRUE; + event_add_str(event, "error", reason); switch (type) { case LOGIN_PROXY_FAILURE_TYPE_INTERNAL: