From: Timo Sirainen Date: Thu, 9 Apr 2020 19:57:49 +0000 (+0300) Subject: login-proxy: Add event to login_proxy X-Git-Tag: 2.3.11.2~213 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5c67fc523813ea79075c1ba1ec0c1b6f897b8107;p=thirdparty%2Fdovecot%2Fcore.git login-proxy: Add event to login_proxy --- diff --git a/src/login-common/client-common-auth.c b/src/login-common/client-common-auth.c index a3c830fa64..50d3cfca10 100644 --- a/src/login-common/client-common-auth.c +++ b/src/login-common/client-common-auth.c @@ -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); diff --git a/src/login-common/login-proxy.c b/src/login-common/login-proxy.c index 57d778a404..2807b74c9e 100644 --- a/src/login-common/login-proxy.c +++ b/src/login-common/login-proxy.c @@ -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); } diff --git a/src/login-common/login-proxy.h b/src/login-common/login-proxy.h index 7848ae51d1..1cb9ddcbf4 100644 --- a/src/login-common/login-proxy.h +++ b/src/login-common/login-proxy.h @@ -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. */