]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: smtp-client-connection - Record login reply.
authorStephan Bosch <stephan.bosch@open-xchange.com>
Fri, 1 May 2020 11:02:57 +0000 (13:02 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 27 May 2020 05:32:15 +0000 (05:32 +0000)
src/lib-smtp/smtp-client-connection.c
src/lib-smtp/smtp-client-private.h

index 876a81a25ff76999619546efde88911634e3f27b..c14ee644792b92be8f2ee71245468031b7a5aff5 100644 (file)
@@ -131,6 +131,11 @@ smtp_client_connection_login_callback(struct smtp_client_connection *conn,
        smtp_client_command_callback_t *callback = conn->login_callback;
        void *context = conn->login_context;
 
+       if (conn->state_data.login_reply == NULL) {
+               conn->state_data.login_reply =
+                       smtp_reply_clone(conn->state_pool, reply);
+       }
+
        conn->login_callback = NULL;
        conn->login_context = NULL;
 
@@ -1491,6 +1496,10 @@ smtp_client_connection_do_connect(struct smtp_client_connection *conn)
        if (conn->closed || conn->failing)
                return;
 
+       /* Clear state data */
+       i_zero(&conn->state_data);
+       p_clear(conn->state_pool);
+
        if (connection_client_connect(&conn->conn) < 0) {
                smtp_client_connection_connected(&conn->conn, FALSE);
                return;
@@ -1860,6 +1869,8 @@ smtp_client_connection_do_create(struct smtp_client *client, const char *name,
        conn->caps.standard = conn->set.forced_capabilities;
        conn->cap_pool = pool_alloconly_create(
                "smtp client connection capabilities", 128);
+       conn->state_pool = pool_alloconly_create(
+               "smtp client connection state", 256);
 
        if (set != NULL && set->event_parent != NULL)
                conn_event = event_create(set->event_parent);
@@ -1988,6 +1999,7 @@ void smtp_client_connection_unref(struct smtp_client_connection **_conn)
 
        i_free(conn->ips);
        pool_unref(&conn->cap_pool);
+       pool_unref(&conn->state_pool);
        pool_unref(&conn->pool);
 }
 
index 201350860eb8b738f240a82c10cb446c48ec6ce5..67216c5ad9b634c3abc2977d50ca1186993e3660 100644 (file)
@@ -194,6 +194,10 @@ struct smtp_client_connection {
        struct ssl_iostream *ssl_iostream;
 
        enum smtp_client_connection_state state;
+       pool_t state_pool;
+       struct {
+               struct smtp_reply *login_reply;
+       } state_data;
 
        smtp_client_command_callback_t *login_callback;
        void *login_context;