From: Timo Sirainen Date: Sun, 12 Apr 2020 08:51:31 +0000 (+0300) Subject: lib-imap-client: Remove unnecessary "Authentication failed: disconnected" errors X-Git-Tag: 2.3.13~579 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cf04833d7c5e25a86cd74296dfbfc32f2a4c9718;p=thirdparty%2Fdovecot%2Fcore.git lib-imap-client: Remove unnecessary "Authentication failed: disconnected" errors If connection failed during login, there were always two log lines logged. The first line is enough. --- diff --git a/src/lib-imap-client/imapc-connection.c b/src/lib-imap-client/imapc-connection.c index dab0fe5440..eca81648ca 100644 --- a/src/lib-imap-client/imapc-connection.c +++ b/src/lib-imap-client/imapc-connection.c @@ -172,11 +172,12 @@ imapc_auth_failed(struct imapc_connection *conn, const struct imapc_command_repl { struct imapc_command_reply reply = *_reply; - if (reply.state != IMAPC_COMMAND_STATE_DISCONNECTED) - reply.state = IMAPC_COMMAND_STATE_AUTH_FAILED; reply.text_without_resp = reply.text_full = t_strdup_printf("Authentication failed: %s", error); - i_error("imapc(%s): %s", conn->name, reply.text_full); + if (reply.state != IMAPC_COMMAND_STATE_DISCONNECTED) { + reply.state = IMAPC_COMMAND_STATE_AUTH_FAILED; + i_error("imapc(%s): %s", conn->name, reply.text_full); + } imapc_login_callback(conn, &reply); if (conn->client->state_change_callback == NULL) diff --git a/src/lib-imap-client/test-imapc-client.c b/src/lib-imap-client/test-imapc-client.c index b905916334..8918900e1a 100644 --- a/src/lib-imap-client/test-imapc-client.c +++ b/src/lib-imap-client/test-imapc-client.c @@ -309,12 +309,12 @@ static void test_imapc_login_hangs_client(void) imapc_login_callback, NULL); imapc_client_login(imapc_client); /* run the first login */ - test_expect_errors(2); + test_expect_error_string("Authentication timed out"); imapc_client_run(imapc_client); test_expect_no_more_errors(); /* imapc_login_callback() has stopped us. run the second reconnect login. */ - test_expect_errors(2); + test_expect_error_string("Authentication timed out"); imapc_client_run(imapc_client); test_expect_no_more_errors(); test_assert(imapc_login_last_reply == IMAPC_COMMAND_STATE_DISCONNECTED); @@ -345,6 +345,35 @@ static void test_imapc_login_hangs(void) test_end(); } +static void test_imapc_login_fails_client(void) +{ + imapc_client_set_login_callback(imapc_client, + imapc_login_callback, NULL); + imapc_client_login(imapc_client); + test_expect_error_string("Authentication failed: Test login failed"); + imapc_client_run(imapc_client); + test_expect_no_more_errors(); + test_assert(imapc_login_last_reply == IMAPC_COMMAND_STATE_AUTH_FAILED); +} + +static void test_imapc_login_fails_server(void) +{ + test_server_wait_connection(&server, TRUE); + test_assert(test_imapc_server_expect( + "1 LOGIN \"testuser\" \"testpass\"")); + o_stream_nsend_str(server.output, "1 NO Test login failed\r\n"); +} + +static void test_imapc_login_fails(void) +{ + struct imapc_client_settings set = test_imapc_default_settings; + + test_begin("imapc login fails"); + test_run_client_server(&set, test_imapc_login_fails_client, + test_imapc_login_fails_server); + test_end(); +} + static void test_imapc_reconnect_client(void) { struct imapc_command *cmd; @@ -640,7 +669,7 @@ static void test_imapc_client_get_capabilities_reconnected_client(void) { enum imapc_capability capabilities; - test_expect_errors(2); + test_expect_error_string("Server disconnected unexpectedly"); test_assert(imapc_client_get_capabilities(imapc_client, &capabilities) == 0); test_assert(capabilities == (IMAPC_CAPABILITY_IMAP4REV1 | IMAPC_CAPABILITY_UNSELECT | @@ -677,7 +706,7 @@ static void test_imapc_client_get_capabilities_disconnected_client(void) { enum imapc_capability capabilities; - test_expect_errors(4); + test_expect_errors(2); test_assert(imapc_client_get_capabilities(imapc_client, &capabilities) < 0); test_expect_no_more_errors(); } @@ -705,6 +734,7 @@ int main(int argc ATTR_UNUSED, char *argv[]) test_imapc_connect_failed, test_imapc_banner_hangs, test_imapc_login_hangs, + test_imapc_login_fails, test_imapc_reconnect, test_imapc_reconnect_resend_commands, test_imapc_reconnect_resend_commands_failed,