s3:libsmb: move cli->cnum to cli->smb1.tid and hide it behind cli_state_[g|s]et_tid()
authorStefan Metzmacher <metze@samba.org>
Tue, 19 Jul 2011 14:25:52 +0000 (16:25 +0200)
committerStefan Metzmacher <metze@samba.org>
Wed, 20 Jul 2011 13:56:27 +0000 (15:56 +0200)
metze

source3/include/client.h
source3/libsmb/async_smb.c
source3/libsmb/cliconnect.c
source3/libsmb/clidfs.c
source3/libsmb/clientgen.c
source3/libsmb/libsmb_server.c
source3/libsmb/proto.h
source3/torture/torture.c
source3/utils/net_rpc.c
source3/utils/smbcacls.c

index 67c858f76f69fdef879f763a86a4454d450c49bc..5e4e0a36906c9d23a644f8e500e9b82d990fe7bf 100644 (file)
@@ -52,7 +52,6 @@ struct cli_state {
         */
         struct cli_state *prev, *next;
        int fd;
-       uint16 cnum;
        uint16 vuid;
        int protocol;
        int sec_mode;
@@ -135,6 +134,7 @@ struct cli_state {
                uint16_t mid;
                uint16_t pid;
                uint16_t vc_num;
+               uint16_t tid;
        } smb1;
 
        struct {
index 2c42cec6b907eda587b3d41abf3ae8c6ee22423c..b621919dbd1f819160c7999151facca66447afaa 100644 (file)
@@ -317,7 +317,7 @@ struct tevent_req *cli_smb_req_create(TALLOC_CTX *mem_ctx,
 
        cli_setup_packet_buf(cli, (char *)state->header);
        SCVAL(state->header, smb_com, smb_command);
-       SSVAL(state->header, smb_tid, cli->cnum);
+       SSVAL(state->header, smb_tid, cli->smb1.tid);
        SCVAL(state->header, smb_wct, wct);
 
        state->vwv = vwv;
index 03251f965bd52f742aab9ddd6efe83bd7213cb49..4e3e47f5123061aa61f0cf2a4bf7234639a8d2ff 100644 (file)
@@ -2405,7 +2405,7 @@ static void cli_tcon_andx_done(struct tevent_req *subreq)
                cli->dfsroot = ((SVAL(vwv+2, 0) & SMB_SHARE_IN_DFS) != 0);
        }
 
-       cli->cnum = SVAL(inbuf,smb_tid);
+       cli->smb1.tid = SVAL(inbuf,smb_tid);
        tevent_req_done(req);
 }
 
@@ -2498,7 +2498,7 @@ static void cli_tdis_done(struct tevent_req *subreq)
                tevent_req_nterror(req, status);
                return;
        }
-       state->cli->cnum = -1;
+       state->cli->smb1.tid = UINT16_MAX;
        tevent_req_done(req);
 }
 
@@ -2551,7 +2551,6 @@ struct tevent_req *cli_negprot_send(TALLOC_CTX *mem_ctx,
        struct cli_negprot_state *state;
        uint8_t *bytes = NULL;
        int numprots;
-       uint16_t cnum;
 
        req = tevent_req_create(mem_ctx, &state, struct cli_negprot_state);
        if (req == NULL) {
@@ -2582,12 +2581,8 @@ struct tevent_req *cli_negprot_send(TALLOC_CTX *mem_ctx,
                }
        }
 
-       cnum = cli->cnum;
-
-       cli->cnum = 0;
        subreq = cli_smb_send(state, ev, cli, SMBnegprot, 0, 0, NULL,
                              talloc_get_size(bytes), bytes);
-       cli->cnum = cnum;
 
        if (tevent_req_nomem(subreq, req)) {
                return tevent_req_post(req, ev);
index a0d503a802d66a3f378e5ebe25d9f02730156e73..d677f9e0ac320cb54b733bfb1ed7ea7f9265a07a 100644 (file)
@@ -1031,7 +1031,7 @@ bool cli_check_msdfs_proxy(TALLOC_CTX *ctx,
                return false;
        }
 
-       cnum = cli->cnum;
+       cnum = cli_state_get_tid(cli);
 
        /* special case.  never check for a referral on the IPC$ share */
 
@@ -1072,7 +1072,7 @@ bool cli_check_msdfs_proxy(TALLOC_CTX *ctx,
                return false;
        }
 
-       cli->cnum = cnum;
+       cli_state_set_tid(cli, cnum);
 
        if (!res || !num_refs) {
                return false;
index 67e8e06d1a645220b1953d6af7d9ef864efb446d..0ee361f8626b534839ab5f3d8d0526a65b37223d 100644 (file)
@@ -184,7 +184,6 @@ struct cli_state *cli_initialise_ex(int signing_state)
        }
        cli->fd = -1;
        cli->raw_status = NT_STATUS_INTERNAL_ERROR;
-       cli->cnum = -1;
        cli->vuid = UID_FIELD_INVALID;
        cli->protocol = PROTOCOL_NT1;
        cli->timeout = 20000; /* Timeout is in milliseconds. */
@@ -241,6 +240,7 @@ struct cli_state *cli_initialise_ex(int signing_state)
        cli->smb1.mid = 1;
        cli->smb1.pid = (uint16_t)sys_getpid();
        cli->smb1.vc_num = cli->smb1.pid;
+       cli->smb1.tid = UINT16_MAX;
 
        return cli;
 
@@ -287,7 +287,7 @@ static void _cli_shutdown(struct cli_state *cli)
         * later.  This tree disconnect forces the peer to clean up, since the
         * connection will be going away.
         */
-       if (cli->cnum != (uint16)-1) {
+       if (cli_state_has_tcon(cli)) {
                cli_tdis(cli);
        }
         
@@ -364,6 +364,27 @@ uint16_t cli_getpid(struct cli_state *cli)
        return cli->smb1.pid;
 }
 
+bool cli_state_has_tcon(struct cli_state *cli)
+{
+       if (cli->smb1.tid == UINT16_MAX) {
+               return false;
+       }
+
+       return true;
+}
+
+uint16_t cli_state_get_tid(struct cli_state *cli)
+{
+       return cli->smb1.tid;
+}
+
+uint16_t cli_state_set_tid(struct cli_state *cli, uint16_t tid)
+{
+       uint16_t ret = cli->smb1.tid;
+       cli->smb1.tid = tid;
+       return ret;
+}
+
 /****************************************************************************
  Set the case sensitivity flag on the packets. Returns old state.
 ****************************************************************************/
index 49018a832067d6a4bab4ab605ea2e3eac8e252cc..760bd9a8d3c5e2f47510a6e0e58580328f93a052 100644 (file)
@@ -289,7 +289,7 @@ SMBC_server_internal(TALLOC_CTX *ctx,
                 * i.e., a normal share or a referred share from
                 * 'msdfs proxy' share.
                 */
-                if (srv->cli->cnum == (uint16) -1) {
+                if (!cli_state_has_tcon(srv->cli)) {
                         /* Ensure we have accurate auth info */
                        SMBC_call_auth_fn(ctx, context,
                                          srv->cli->desthost,
index 9775bd775d3f07e43ef24098d7e4ad363b6d4a7b..fe30509bb6ea531e56590d471d302fe9a67a6a2e 100644 (file)
@@ -167,6 +167,9 @@ void cli_sockopt(struct cli_state *cli, const char *options);
 uint16_t cli_state_get_vc_num(struct cli_state *cli);
 uint16 cli_setpid(struct cli_state *cli, uint16 pid);
 uint16_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);
 bool cli_set_case_sensitive(struct cli_state *cli, bool case_sensitive);
 struct tevent_req *cli_echo_send(TALLOC_CTX *mem_ctx, struct event_context *ev,
                                 struct cli_state *cli, uint16_t num_echos,
index e0e7275e8bababdcdd78bb45315264b9d17ea943..6e66d9d53fc1668e961b5d86dab088ab59c69ecb 100644 (file)
@@ -1355,7 +1355,7 @@ static bool run_tcon_test(int dummy)
                return False;
        }
 
-       cnum1 = cli->cnum;
+       cnum1 = cli_state_get_tid(cli);
        vuid1 = cli->vuid;
 
        status = cli_writeall(cli, fnum1, 0, (uint8_t *)buf, 130, 4, NULL);
@@ -1373,12 +1373,12 @@ static bool run_tcon_test(int dummy)
                return False;
        }
 
-       cnum2 = cli->cnum;
+       cnum2 = cli_state_get_tid(cli);
        cnum3 = MAX(cnum1, cnum2) + 1; /* any invalid number */
        vuid2 = cli->vuid + 1;
 
        /* try a write with the wrong tid */
-       cli->cnum = cnum2;
+       cli_state_set_tid(cli, cnum2);
 
        status = cli_writeall(cli, fnum1, 0, (uint8_t *)buf, 130, 4, NULL);
        if (NT_STATUS_IS_OK(status)) {
@@ -1391,7 +1391,7 @@ static bool run_tcon_test(int dummy)
 
 
        /* try a write with an invalid tid */
-       cli->cnum = cnum3;
+       cli_state_set_tid(cli, cnum3);
 
        status = cli_writeall(cli, fnum1, 0, (uint8_t *)buf, 130, 4, NULL);
        if (NT_STATUS_IS_OK(status)) {
@@ -1404,7 +1404,7 @@ static bool run_tcon_test(int dummy)
 
        /* try a write with an invalid vuid */
        cli->vuid = vuid2;
-       cli->cnum = cnum1;
+       cli_state_set_tid(cli, cnum1);
 
        status = cli_writeall(cli, fnum1, 0, (uint8_t *)buf, 130, 4, NULL);
        if (NT_STATUS_IS_OK(status)) {
@@ -1415,7 +1415,7 @@ static bool run_tcon_test(int dummy)
                       nt_errstr(status));
        }
 
-       cli->cnum = cnum1;
+       cli_state_set_tid(cli, cnum1);
        cli->vuid = vuid1;
 
        status = cli_close(cli, fnum1);
@@ -1424,7 +1424,7 @@ static bool run_tcon_test(int dummy)
                return False;
        }
 
-       cli->cnum = cnum2;
+       cli_state_set_tid(cli, cnum2);
 
        status = cli_tdis(cli);
        if (!NT_STATUS_IS_OK(status)) {
@@ -1432,7 +1432,7 @@ static bool run_tcon_test(int dummy)
                return False;
        }
 
-       cli->cnum = cnum1;
+       cli_state_set_tid(cli, cnum1);
 
        if (!torture_close_connection(cli)) {
                return False;
@@ -2724,7 +2724,7 @@ static bool run_fdpasstest(int dummy)
        }
 
        cli2->vuid = cli1->vuid;
-       cli2->cnum = cli1->cnum;
+       cli_state_set_tid(cli2, cli_state_get_tid(cli1));
        cli_setpid(cli2, cli_getpid(cli1));
 
        if (cli_read(cli2, fnum1, buf, 0, 13) == 13) {
@@ -2765,11 +2765,11 @@ static bool run_fdsesstest(int dummy)
        if (!torture_cli_session_setup2(cli, &new_vuid))
                return False;
 
-       saved_cnum = cli->cnum;
+       saved_cnum = cli_state_get_tid(cli);
        if (!NT_STATUS_IS_OK(cli_tcon_andx(cli, share, "?????", "", 1)))
                return False;
-       new_cnum = cli->cnum;
-       cli->cnum = saved_cnum;
+       new_cnum = cli_state_get_tid(cli);
+       cli_state_set_tid(cli, saved_cnum);
 
        printf("starting fdsesstest\n");
 
@@ -2811,7 +2811,7 @@ static bool run_fdsesstest(int dummy)
        cli->vuid = saved_vuid;
 
        /* Try with same vuid, different cnum. */
-       cli->cnum = new_cnum;
+       cli_state_set_tid(cli, new_cnum);
 
        if (cli_read(cli, fnum1, buf, 0, 13) == 13) {
                printf("read succeeded with different cnum![%s]\n",
@@ -2819,7 +2819,7 @@ static bool run_fdsesstest(int dummy)
                ret = False;
        }
 
-       cli->cnum = saved_cnum;
+       cli_state_set_tid(cli, saved_cnum);
        cli_close(cli, fnum1);
        cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
@@ -7109,7 +7109,7 @@ static bool run_uid_regression_test(int dummy)
                }
        }
 
-       old_cnum = cli->cnum;
+       old_cnum = cli_state_get_tid(cli);
 
        /* Now try a SMBtdis with the invald vuid set to zero. */
        cli->vuid = 0;
@@ -7126,7 +7126,7 @@ static bool run_uid_regression_test(int dummy)
        }
 
        cli->vuid = old_vuid;
-       cli->cnum = old_cnum;
+       cli_state_set_tid(cli, old_cnum);
 
        /* This should fail. */
        status = cli_tdis(cli);
index 5952f4fe32b14228b5a3d846a263c1741c440395..d0cc2d1043a33c200e032d9aa1b06f6475f3912c 100644 (file)
@@ -4855,7 +4855,7 @@ static void show_userlist(struct rpc_pipe_client *pipe_hnd,
                          netname));
        }
 
-       cnum = cli->cnum;
+       cnum = cli_state_get_tid(cli);
 
        if (!NT_STATUS_IS_OK(cli_tcon_andx(cli, netname, "A:", "", 0))) {
                return;
@@ -4899,7 +4899,7 @@ static void show_userlist(struct rpc_pipe_client *pipe_hnd,
        if (fnum != (uint16_t)-1)
                cli_close(cli, fnum);
        cli_tdis(cli);
-       cli->cnum = cnum;
+       cli_state_set_tid(cli, cnum);
        
        return;
 }
index d226c84b9a7a7f03287ff1052b438d9b2dc9c364..208f4e0c64780d5f913ec33e42360123286ad25c 100644 (file)
@@ -77,7 +77,7 @@ static NTSTATUS cli_lsa_lookup_sid(struct cli_state *cli,
                                   enum lsa_SidType *type,
                                   char **domain, char **name)
 {
-       uint16 orig_cnum = cli->cnum;
+       uint16 orig_cnum = cli_state_get_tid(cli);
        struct rpc_pipe_client *p = NULL;
        struct policy_handle handle;
        NTSTATUS status;
@@ -117,7 +117,7 @@ static NTSTATUS cli_lsa_lookup_sid(struct cli_state *cli,
  fail:
        TALLOC_FREE(p);
        cli_tdis(cli);
-       cli->cnum = orig_cnum;
+       cli_state_set_tid(cli, orig_cnum);
        TALLOC_FREE(frame);
        return status;
 }
@@ -127,7 +127,7 @@ static NTSTATUS cli_lsa_lookup_name(struct cli_state *cli,
                                    enum lsa_SidType *type,
                                    struct dom_sid *sid)
 {
-       uint16 orig_cnum = cli->cnum;
+       uint16 orig_cnum = cli_state_get_tid(cli);
        struct rpc_pipe_client *p;
        struct policy_handle handle;
        NTSTATUS status;
@@ -165,7 +165,7 @@ static NTSTATUS cli_lsa_lookup_name(struct cli_state *cli,
  fail:
        TALLOC_FREE(p);
        cli_tdis(cli);
-       cli->cnum = orig_cnum;
+       cli_state_set_tid(cli, orig_cnum);
        TALLOC_FREE(frame);
        return status;
 }