****************************************************************************/
bool conn_close_all(struct smbd_server_connection *sconn)
{
- connection_struct *conn, *next;
- bool ret = false;
- for (conn=sconn->smb1.tcons.Connections;conn;conn=next) {
- next=conn->next;
- set_current_service(conn, 0, True);
- close_cnum(conn, conn->vuid);
- ret = true;
+ if (sconn->allow_smb2) {
+ /* SMB2 */
+ if (sconn->smb2.sessions.list &&
+ sconn->smb2.sessions.list->tcons.list) {
+ return true;
+ }
+ return false;
+ } else {
+ /* SMB1 */
+ connection_struct *conn, *next;
+ bool ret = false;
+
+ for (conn=sconn->smb1.tcons.Connections;conn;conn=next) {
+ next=conn->next;
+ set_current_service(conn, 0, True);
+ close_cnum(conn, conn->vuid);
+ ret = true;
+ }
+ return ret;
}
- return ret;
}
/****************************************************************************
fstring service;
int snum = -1;
struct smbd_smb2_tcon *tcon;
+ connection_struct *compat_conn = NULL;
int id;
NTSTATUS status;
tcon->session = req->session;
talloc_set_destructor(tcon, smbd_smb2_tcon_destructor);
- tcon->compat_conn = make_connection_snum(req->sconn,
+ compat_conn = make_connection_snum(req->sconn,
snum, req->session->compat_vuser,
data_blob_null, "???",
&status);
- if (tcon->compat_conn == NULL) {
+ if (compat_conn == NULL) {
TALLOC_FREE(tcon);
return status;
}
+ tcon->compat_conn = talloc_move(tcon, &compat_conn);
tcon->compat_conn->cnum = tcon->tid;
*out_share_type = 0x01;