diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index ef03da17eec..6803d0274a8 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -1945,6 +1945,13 @@ struct tevent_req *cli_tcon_andx_create(TALLOC_CTX *mem_ctx, state->cli = cli; vwv = state->vwv; + TALLOC_FREE(cli->smb1.tcon); + cli->smb1.tcon = smbXcli_tcon_create(cli); + if (tevent_req_nomem(cli->smb1.tcon, req)) { + return tevent_req_post(req, ev); + } + smb1cli_tcon_set_id(cli->smb1.tcon, UINT16_MAX); + cli->share = talloc_strdup(cli, share); if (!cli->share) { return NULL; @@ -2254,6 +2261,7 @@ static struct tevent_req *cli_tree_connect_send( if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) { char *unc; + TALLOC_FREE(cli->smb2.tcon); cli->smb2.tcon = smbXcli_tcon_create(cli); if (tevent_req_nomem(cli->smb2.tcon, req)) { return tevent_req_post(req, ev); @@ -2426,7 +2434,7 @@ static void cli_tdis_done(struct tevent_req *subreq) tevent_req_nterror(req, status); return; } - cli_state_set_tid(state->cli, UINT16_MAX); + TALLOC_FREE(state->cli->smb1.tcon); tevent_req_done(req); } @@ -2442,10 +2450,14 @@ NTSTATUS cli_tdis(struct cli_state *cli) NTSTATUS status = NT_STATUS_NO_MEMORY; if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) { - return smb2cli_tdis(cli->conn, + status = smb2cli_tdis(cli->conn, cli->timeout, cli->smb2.session, cli->smb2.tcon); + if (NT_STATUS_IS_OK(status)) { + TALLOC_FREE(cli->smb2.tcon); + } + return status; } if (smbXcli_conn_has_async_calls(cli->conn)) { @@ -3619,6 +3631,13 @@ static struct tevent_req *cli_raw_tcon_send( return tevent_req_post(req, ev); } + TALLOC_FREE(cli->smb1.tcon); + cli->smb1.tcon = smbXcli_tcon_create(cli); + if (tevent_req_nomem(cli->smb1.tcon, req)) { + return tevent_req_post(req, ev); + } + smb1cli_tcon_set_id(cli->smb1.tcon, UINT16_MAX); + bytes = talloc_array(state, uint8_t, 0); bytes = smb_bytes_push_bytes(bytes, 4, NULL, 0); bytes = smb_bytes_push_str(bytes, smbXcli_conn_use_unicode(cli->conn), diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c index 4541763ea3f..2b53a930809 100644 --- a/source3/libsmb/clientgen.c +++ b/source3/libsmb/clientgen.c @@ -227,11 +227,6 @@ struct cli_state *cli_state_create(TALLOC_CTX *mem_ctx, cli->smb1.pid = (uint32_t)getpid(); cli->smb1.vc_num = cli->smb1.pid; - cli->smb1.tcon = smbXcli_tcon_create(cli); - if (cli->smb1.tcon == NULL) { - goto error; - } - smb1cli_tcon_set_id(cli->smb1.tcon, UINT16_MAX); cli->smb1.session = smbXcli_session_create(cli, cli->conn); if (cli->smb1.session == NULL) { goto error;