From f25b8df784216d8b5023b021bcb8eaef7b68e48f Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Fri, 18 Jul 2025 14:14:34 +0300 Subject: [PATCH] login-common: Handle different dsasl_client_results failures better --- src/login-common/login-proxy.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/login-common/login-proxy.c b/src/login-common/login-proxy.c index 87cecdceea..5d655ff1d1 100644 --- a/src/login-common/login-proxy.c +++ b/src/login-common/login-proxy.c @@ -880,7 +880,16 @@ int login_proxy_sasl_step(struct client *client, string_t *str) sasl_res = dsasl_client_output(client->proxy_sasl_client, &data, &data_len, &error); } - if (sasl_res != DSASL_CLIENT_RESULT_OK) { + switch (sasl_res) { + case DSASL_CLIENT_RESULT_OK: + break; + case DSASL_CLIENT_RESULT_AUTH_FAILED: + login_proxy_failed(client->login_proxy, + login_proxy_get_event(client->login_proxy), + LOGIN_PROXY_FAILURE_TYPE_AUTH_NOT_REPLIED, + error); + return -1; + case DSASL_CLIENT_RESULT_ERR_PROTOCOL: { const char *reason = t_strdup_printf( "Invalid authentication data: %s", error); login_proxy_failed(client->login_proxy, @@ -888,6 +897,12 @@ int login_proxy_sasl_step(struct client *client, string_t *str) LOGIN_PROXY_FAILURE_TYPE_PROTOCOL, reason); return -1; } + case DSASL_CLIENT_RESULT_ERR_INTERNAL: + login_proxy_failed(client->login_proxy, + login_proxy_get_event(client->login_proxy), + LOGIN_PROXY_FAILURE_TYPE_INTERNAL, error); + return -1; + } str_truncate(str, 0); base64_encode(data, data_len, str); return 0; -- 2.47.3