]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
login-proxy: Add event to login_proxy
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 9 Apr 2020 19:57:49 +0000 (22:57 +0300)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Fri, 24 Apr 2020 08:02:40 +0000 (08:02 +0000)
src/login-common/client-common-auth.c
src/login-common/login-proxy.c
src/login-common/login-proxy.h

index a3c830fa64d54db54cde7bf83cb3a7c78c95599e..50d3cfca1071fa5613cb0a5e5ed43c0f49bf1c92 100644 (file)
@@ -421,6 +421,7 @@ static int proxy_start(struct client *client,
 {
        struct login_proxy_settings proxy_set;
        const struct dsasl_client_mech *sasl_mech = NULL;
+       struct event *event;
 
        i_assert(reply->destuser != NULL);
        i_assert(client->refcount > 1);
@@ -429,9 +430,13 @@ static int proxy_start(struct client *client,
 
        client->proxy_mech = NULL;
        client->v.proxy_reset(client);
+       event = event_create(client->event);
+       event_set_append_log_prefix(event, t_strdup_printf(
+               "proxy(%s): ", client->virtual_user));
 
        if (!proxy_check_start(client, reply, &sasl_mech)) {
                client_proxy_error(client, PROXY_FAILURE_MSG);
+               event_unref(&event);
                return -1;
        }
 
@@ -456,10 +461,12 @@ static int proxy_start(struct client *client,
        proxy_set.notify_refresh_secs = reply->proxy_refresh_secs;
        proxy_set.ssl_flags = reply->ssl_flags;
 
-       if (login_proxy_new(client, &proxy_set, proxy_input) < 0) {
+       if (login_proxy_new(client, event, &proxy_set, proxy_input) < 0) {
+               event_unref(&event);
                client_proxy_error(client, PROXY_FAILURE_MSG);
                return -1;
        }
+       event_unref(&event);
 
        client->proxy_mech = sasl_mech;
        client->proxy_user = i_strdup(reply->destuser);
index 57d778a4049cc0fe2c12d9a374d1691423d38fa1..2807b74c9ed6024a394992ef5c47a612550e543e 100644 (file)
@@ -41,6 +41,7 @@ struct login_proxy {
        struct login_proxy *prev, *next;
 
        struct client *client;
+       struct event *event;
        int server_fd;
        struct io *client_wait_io, *server_io;
        struct istream *client_input, *server_input;
@@ -323,7 +324,7 @@ static int login_proxy_connect(struct login_proxy *proxy)
        return 0;
 }
 
-int login_proxy_new(struct client *client,
+int login_proxy_new(struct client *client, struct event *event,
                    const struct login_proxy_settings *set,
                    proxy_callback_t *callback)
 {
@@ -334,6 +335,7 @@ int login_proxy_new(struct client *client,
        if (set->host == NULL || *set->host == '\0') {
                e_error(client->event,
                        "proxy(%s): host not given", client->virtual_user);
+               event_unref(&event);
                return -1;
        }
 
@@ -341,11 +343,13 @@ int login_proxy_new(struct client *client,
                e_error(client->event,
                        "proxy(%s): TTL reached zero - "
                        "proxies appear to be looping?", client->virtual_user);
+               event_unref(&event);
                return -1;
        }
 
        proxy = i_new(struct login_proxy, 1);
        proxy->client = client;
+       proxy->event = event;
        proxy->server_fd = -1;
        proxy->created = ioloop_timeval;
        proxy->ip = set->ip;
@@ -358,6 +362,7 @@ int login_proxy_new(struct client *client,
        proxy->state_rec = login_proxy_state_get(proxy_state, &proxy->ip,
                                                 proxy->port);
        client_ref(client);
+       event_ref(proxy->event);
 
        if (login_proxy_connect(proxy) < 0) {
                login_proxy_free(&proxy);
@@ -414,6 +419,7 @@ static void login_proxy_free_final(struct login_proxy *proxy)
        i_stream_destroy(&proxy->client_input);
        o_stream_destroy(&proxy->client_output);
        client_unref(&proxy->client);
+       event_unref(&proxy->event);
        i_free(proxy->host);
        i_free(proxy);
 }
index 7848ae51d1ea48882e0acafdbf014eb096da35f3..1cb9ddcbf4369267546884144ebe4b256a7cf2f3 100644 (file)
@@ -38,7 +38,7 @@ typedef void proxy_callback_t(struct client *client);
 
 /* Create a proxy to given host. Returns NULL if failed. Given callback is
    called when new input is available from proxy. */
-int login_proxy_new(struct client *client,
+int login_proxy_new(struct client *client, struct event *event,
                    const struct login_proxy_settings *set,
                    proxy_callback_t *callback);
 /* Free the proxy. This should be called if authentication fails. */