s3: libsmb: Widen cli_state_get_tid() / cli_state_set_tid() to 32-bits.
authorJeremy Allison <jra@samba.org>
Tue, 13 Jun 2017 23:26:00 +0000 (16:26 -0700)
committerKarolin Seeger <kseeger@samba.org>
Fri, 30 Jun 2017 08:46:22 +0000 (10:46 +0200)
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>
(cherry picked from commit 93fa0c8660e47cb2605d70dac1156576ab719d64)

source3/client/client.c
source3/lib/util_sd.c
source3/libsmb/clidfs.c
source3/libsmb/clientgen.c
source3/libsmb/proto.h
source3/torture/torture.c

index e7531d347aa9f7da3b92b2766490f8f642364dba..c173cf4f00705958609d30546bfe85711c613e24 100644 (file)
@@ -4673,7 +4673,10 @@ static int cmd_tid(void)
                        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);
        }
 
index 9a7b34fa5d79d1ccf1ea1047f50913db995a5287..ca699a948a8406f02f3ab81d60ff3315bc56d1ee 100644 (file)
@@ -84,7 +84,7 @@ static NTSTATUS cli_lsa_lookup_sid(struct cli_state *cli,
                                   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;
@@ -165,7 +165,7 @@ static NTSTATUS cli_lsa_lookup_name(struct cli_state *cli,
                                    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;
index d2a4c194f44986782c34de18ba334619df80f330..5d29314d4ab3afa50d10cd3c5137f1eaaba5cc92 100644 (file)
@@ -1179,7 +1179,7 @@ bool cli_check_msdfs_proxy(TALLOC_CTX *ctx,
        size_t consumed = 0;
        char *fullpath = NULL;
        bool res;
-       uint16_t cnum;
+       uint32_t cnum;
        char *newextrapath = NULL;
        NTSTATUS status;
        const char *remote_name;
index 1aea4cf247e58c46ee0a6d1cf6606d85ee5ae948..25f7299195677244ab59411f81eeb5264529231c 100644 (file)
@@ -341,7 +341,7 @@ uint32_t cli_getpid(struct cli_state *cli)
 
 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;
@@ -350,15 +350,25 @@ bool cli_state_has_tcon(struct cli_state *cli)
        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;
 }
 
index 225da0727685c212b61b149fafc6c076eb6ba415..340cd225ea0661e70689fc7df399f3feed9bd69a 100644 (file)
@@ -175,8 +175,8 @@ uint16_t cli_state_get_vc_num(struct cli_state *cli);
 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);
index f8567c67089be72be4306136a8556248910496de..d895f6ac73f611cb00bdf14370dac1404068afe0 100644 (file)
@@ -1309,7 +1309,7 @@ static bool run_tcon_test(int dummy)
        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;
@@ -2769,8 +2769,8 @@ static bool run_fdsesstest(int dummy)
        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;
@@ -8873,7 +8873,7 @@ static bool run_uid_regression_test(int dummy)
 {
        static struct cli_state *cli;
        int16_t old_vuid;
-       int16_t old_cnum;
+       int32_t old_cnum;
        bool correct = True;
        NTSTATUS status;