]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-imap-client: Remove unnecessary "Authentication failed: disconnected" errors
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Sun, 12 Apr 2020 08:51:31 +0000 (11:51 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Mon, 25 May 2020 18:20:52 +0000 (18:20 +0000)
If connection failed during login, there were always two log lines logged.
The first line is enough.

src/lib-imap-client/imapc-connection.c
src/lib-imap-client/test-imapc-client.c

index dab0fe5440e0fb499f4c6e9de619576e1899d67c..eca81648cabc5901f50d8a4d6d9e746ff9c24aa6 100644 (file)
@@ -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)
index b9059163342b8d00606ed8ea2778cc243ed63649..8918900e1a362cb3c51b48f14a486987250c1702 100644 (file)
@@ -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,