Copes with SMB2 connections.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12831
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Richard Sharpe <realrichardsharpe@gmail.com>
d_printf("no tcon currently\n");
}
} else {
- uint16_t tid = atoi(tid_str);
+ uint32_t tid = atoi(tid_str);
+ if (!cli_state_has_tcon(cli)) {
+ d_printf("no tcon currently\n");
+ }
cli_state_set_tid(cli, tid);
}
enum lsa_SidType *type,
char **domain, char **name)
{
- uint16_t orig_cnum = cli_state_get_tid(cli);
+ uint32_t orig_cnum = cli_state_get_tid(cli);
struct rpc_pipe_client *p = NULL;
struct policy_handle handle;
NTSTATUS status;
enum lsa_SidType *type,
struct dom_sid *sid)
{
- uint16_t orig_cnum = cli_state_get_tid(cli);
+ uint32_t orig_cnum = cli_state_get_tid(cli);
struct rpc_pipe_client *p;
struct policy_handle handle;
NTSTATUS status;
size_t consumed = 0;
char *fullpath = NULL;
bool res;
- uint16_t cnum;
+ uint32_t cnum;
char *newextrapath = NULL;
NTSTATUS status;
const char *remote_name;
bool cli_state_has_tcon(struct cli_state *cli)
{
- uint16_t tid = cli_state_get_tid(cli);
+ uint32_t tid = cli_state_get_tid(cli);
if (tid == UINT16_MAX) {
return false;
return true;
}
-uint16_t cli_state_get_tid(struct cli_state *cli)
+uint32_t cli_state_get_tid(struct cli_state *cli)
{
- return smb1cli_tcon_current_id(cli->smb1.tcon);
+ if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) {
+ return smb2cli_tcon_current_id(cli->smb2.tcon);
+ } else {
+ return (uint32_t)smb1cli_tcon_current_id(cli->smb1.tcon);
+ }
}
-uint16_t cli_state_set_tid(struct cli_state *cli, uint16_t tid)
+uint32_t cli_state_set_tid(struct cli_state *cli, uint32_t tid)
{
- uint16_t ret = smb1cli_tcon_current_id(cli->smb1.tcon);
- smb1cli_tcon_set_id(cli->smb1.tcon, tid);
+ uint32_t ret;
+ if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) {
+ ret = smb2cli_tcon_current_id(cli->smb2.tcon);
+ smb2cli_tcon_set_id(cli->smb1.tcon, tid);
+ } else {
+ ret = smb1cli_tcon_current_id(cli->smb1.tcon);
+ smb1cli_tcon_set_id(cli->smb1.tcon, tid);
+ }
return ret;
}
uint32_t cli_setpid(struct cli_state *cli, uint32_t pid);
uint32_t cli_getpid(struct cli_state *cli);
bool cli_state_has_tcon(struct cli_state *cli);
-uint16_t cli_state_get_tid(struct cli_state *cli);
-uint16_t cli_state_set_tid(struct cli_state *cli, uint16_t tid);
+uint32_t cli_state_get_tid(struct cli_state *cli);
+uint32_t cli_state_set_tid(struct cli_state *cli, uint32_t tid);
struct smbXcli_tcon;
struct smbXcli_tcon *cli_state_save_tcon(struct cli_state *cli);
void cli_state_restore_tcon(struct cli_state *cli, struct smbXcli_tcon *tcon);
static struct cli_state *cli;
const char *fname = "\\tcontest.tmp";
uint16_t fnum1;
- uint16_t cnum1, cnum2, cnum3;
+ uint32_t cnum1, cnum2, cnum3;
uint16_t vuid1, vuid2;
char buf[4];
bool ret = True;
struct cli_state *cli;
uint16_t new_vuid;
uint16_t saved_vuid;
- uint16_t new_cnum;
- uint16_t saved_cnum;
+ uint32_t new_cnum;
+ uint32_t saved_cnum;
const char *fname = "\\fdsess.tst";
const char *fname1 = "\\fdsess1.tst";
uint16_t fnum1;
{
static struct cli_state *cli;
int16_t old_vuid;
- int16_t old_cnum;
+ int32_t old_cnum;
bool correct = True;
NTSTATUS status;