]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
login-common: Add proxying events
authorSiavash Tavakoli <siavash.tavakoli@open-xchange.com>
Thu, 30 Sep 2021 15:19:58 +0000 (16:19 +0100)
committerSiavash Tavakoli <siavash.tavakoli@open-xchange.com>
Mon, 25 Oct 2021 11:24:12 +0000 (12:24 +0100)
- 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.

src/login-common/client-common-auth.c
src/login-common/login-proxy.c

index 2d4346c3bb6f52938261dc2dcd5ac5c00845a68f..fe72c297dde748e2cd980d3a2046854137e5729a 100644 (file)
@@ -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);
 }
index c4561815256ad7fe67d68f1c4fef1642707b3cad..65133b4a025d5add893206ec6575150f023624bb 100644 (file)
@@ -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: