From: Timo Sirainen Date: Fri, 4 May 2018 10:07:50 +0000 (+0300) Subject: lib-master: Keep linked list of master_login_clients per connection X-Git-Tag: 2.2.36~12 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c3221c0f9f19afcba4a9322fc2733fbf48003236;p=thirdparty%2Fdovecot%2Fcore.git lib-master: Keep linked list of master_login_clients per connection This allows improving logging on connection errors. --- diff --git a/src/lib-master/master-login.c b/src/lib-master/master-login.c index c1206450d3..3e9fa9e6bc 100644 --- a/src/lib-master/master-login.c +++ b/src/lib-master/master-login.c @@ -24,6 +24,7 @@ struct master_login_connection { struct master_login_connection *prev, *next; struct master_login *login; + struct master_login_client *clients; int refcount; int fd; struct io *io; @@ -192,6 +193,7 @@ static void master_login_client_free(struct master_login_client **_client) i_assert(client->conn->refcount > 1); client->conn->refcount--; } + DLLIST_REMOVE(&client->conn->clients, client); master_login_conn_unref(&client->conn); i_free(client->session_id); i_free(client); @@ -444,6 +446,7 @@ static void master_login_conn_input(struct master_login_connection *conn) client->session_id = i_strndup(data, session_len); memcpy(client->data, data+i, req.data_size); conn->refcount++; + DLLIST_PREPEND(&conn->clients, client); master_login_auth_request(login->auth, &req, master_login_auth_callback, client); @@ -491,6 +494,7 @@ static void master_login_conn_unref(struct master_login_connection **_conn) return; *_conn = NULL; + i_assert(conn->clients == NULL); master_login_conn_close(conn); o_stream_unref(&conn->output); diff --git a/src/lib-master/master-login.h b/src/lib-master/master-login.h index 1b9014a4a3..e77ad04978 100644 --- a/src/lib-master/master-login.h +++ b/src/lib-master/master-login.h @@ -6,6 +6,7 @@ #define MASTER_POSTLOGIN_TIMEOUT_DEFAULT 60 struct master_login_client { + struct master_login_client *prev, *next; struct master_login_connection *conn; int fd;