diff options
Diffstat (limited to 'source3/smbd/conn.c')
-rw-r--r-- | source3/smbd/conn.c | 114 |
1 files changed, 30 insertions, 84 deletions
diff --git a/source3/smbd/conn.c b/source3/smbd/conn.c index e17d3744e5..12002e37a2 100644 --- a/source3/smbd/conn.c +++ b/source3/smbd/conn.c @@ -37,7 +37,6 @@ void conn_init(struct smbd_server_connection *sconn) { - sconn->smb1.tcons.Connections = NULL; sconn->smb1.tcons.bmap = bitmap_talloc(sconn, BITMAP_BLOCK_SZ); } @@ -47,7 +46,7 @@ void conn_init(struct smbd_server_connection *sconn) int conn_num_open(struct smbd_server_connection *sconn) { - return sconn->num_tcons_open; + return sconn->num_connections; } /**************************************************************************** @@ -57,29 +56,14 @@ int conn_num_open(struct smbd_server_connection *sconn) bool conn_snum_used(struct smbd_server_connection *sconn, int snum) { - if (sconn->using_smb2) { - /* SMB2 */ - struct smbd_smb2_session *sess; - for (sess = sconn->smb2.sessions.list; sess; sess = sess->next) { - struct smbd_smb2_tcon *ptcon; - - for (ptcon = sess->tcons.list; ptcon; ptcon = ptcon->next) { - if (ptcon->compat_conn && - ptcon->compat_conn->params && - (ptcon->compat_conn->params->service == snum)) { - return true; - } - } - } - } else { - /* SMB1 */ - connection_struct *conn; - for (conn=sconn->smb1.tcons.Connections;conn;conn=conn->next) { - if (conn->params->service == snum) { - return true; - } + struct connection_struct *conn; + + for (conn=sconn->connections; conn; conn=conn->next) { + if (conn->params->service == snum) { + return true; } } + return false; } @@ -89,31 +73,15 @@ bool conn_snum_used(struct smbd_server_connection *sconn, connection_struct *conn_find(struct smbd_server_connection *sconn,unsigned cnum) { - if (sconn->using_smb2) { - /* SMB2 */ - struct smbd_smb2_session *sess; - for (sess = sconn->smb2.sessions.list; sess; sess = sess->next) { - struct smbd_smb2_tcon *ptcon; - - for (ptcon = sess->tcons.list; ptcon; ptcon = ptcon->next) { - if (ptcon->compat_conn && - ptcon->compat_conn->cnum == cnum) { - return ptcon->compat_conn; - } - } - } - } else { - /* SMB1 */ - int count=0; - connection_struct *conn; - for (conn=sconn->smb1.tcons.Connections;conn;conn=conn->next,count++) { - if (conn->cnum == cnum) { - if (count > 10) { - DLIST_PROMOTE(sconn->smb1.tcons.Connections, - conn); - } - return conn; + size_t count=0; + struct connection_struct *conn; + + for (conn=sconn->connections; conn; conn=conn->next,count++) { + if (conn->cnum == cnum) { + if (count > 10) { + DLIST_PROMOTE(sconn->connections, conn); } + return conn; } } @@ -141,6 +109,10 @@ connection_struct *conn_new(struct smbd_server_connection *sconn) return NULL; } conn->sconn = sconn; + + DLIST_ADD(sconn->connections, conn); + sconn->num_connections++; + return conn; } @@ -201,12 +173,11 @@ find_again: bitmap_set(sconn->smb1.tcons.bmap, i); - sconn->num_tcons_open++; - string_set(&conn->connectpath,""); string_set(&conn->origpath,""); - DLIST_ADD(sconn->smb1.tcons.Connections, conn); + DLIST_ADD(sconn->connections, conn); + sconn->num_connections++; return conn; } @@ -264,29 +235,11 @@ void conn_clear_vuid_caches(struct smbd_server_connection *sconn,uint16_t vuid) { connection_struct *conn; - if (sconn->using_smb2) { - /* SMB2 */ - struct smbd_smb2_session *sess; - for (sess = sconn->smb2.sessions.list; sess; sess = sess->next) { - struct smbd_smb2_tcon *ptcon; - - for (ptcon = sess->tcons.list; ptcon; ptcon = ptcon->next) { - if (ptcon->compat_conn) { - if (ptcon->compat_conn->vuid == vuid) { - ptcon->compat_conn->vuid = UID_FIELD_INVALID; - } - conn_clear_vuid_cache(ptcon->compat_conn, vuid); - } - } - } - } else { - /* SMB1 */ - for (conn=sconn->smb1.tcons.Connections;conn;conn=conn->next) { - if (conn->vuid == vuid) { - conn->vuid = UID_FIELD_INVALID; - } - conn_clear_vuid_cache(conn, vuid); + for (conn=sconn->connections; conn;conn=conn->next) { + if (conn->vuid == vuid) { + conn->vuid = UID_FIELD_INVALID; } + conn_clear_vuid_cache(conn, vuid); } } @@ -339,16 +292,8 @@ void conn_free(connection_struct *conn) return; } - if (conn->sconn->using_smb2) { - /* SMB2 */ - conn_free_internal(conn); - return; - } - - /* SMB1 */ - DLIST_REMOVE(conn->sconn->smb1.tcons.Connections, conn); - - if (conn->sconn->smb1.tcons.bmap != NULL) { + if (!conn->sconn->using_smb2 && + conn->sconn->smb1.tcons.bmap != NULL) { /* * Can be NULL for fake connections created by * create_conn_struct() @@ -356,8 +301,9 @@ void conn_free(connection_struct *conn) bitmap_clear(conn->sconn->smb1.tcons.bmap, conn->cnum); } - SMB_ASSERT(conn->sconn->num_tcons_open > 0); - conn->sconn->num_tcons_open--; + DLIST_REMOVE(conn->sconn->connections, conn); + SMB_ASSERT(conn->sconn->num_connections > 0); + conn->sconn->num_connections--; conn_free_internal(conn); } |