s3: libsmb: Add cli_state_save_tcon() / cli_state_restore_tcon().
authorJeremy Allison <jra@samba.org>
Tue, 13 Jun 2017 23:15:00 +0000 (16:15 -0700)
committerJeremy Allison <jra@samba.org>
Sat, 17 Jun 2017 04:39:19 +0000 (06:39 +0200)
Save and restore tcon pointers in smb1 or smb2 structs.

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>
source3/libsmb/clientgen.c
source3/libsmb/proto.h

index bc5c1b1ce3cd79347a991586c1311f7dc6aa3b0f..1aea4cf247e58c46ee0a6d1cf6606d85ee5ae948 100644 (file)
@@ -362,6 +362,26 @@ uint16_t cli_state_set_tid(struct cli_state *cli, uint16_t tid)
        return ret;
 }
 
+struct smbXcli_tcon *cli_state_save_tcon(struct cli_state *cli)
+{
+       if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) {
+               return smbXcli_tcon_copy(cli, cli->smb2.tcon);
+       } else {
+               return smbXcli_tcon_copy(cli, cli->smb1.tcon);
+       }
+}
+
+void cli_state_restore_tcon(struct cli_state *cli, struct smbXcli_tcon *tcon)
+{
+       if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) {
+               TALLOC_FREE(cli->smb2.tcon);
+               cli->smb2.tcon = tcon;
+       } else {
+               TALLOC_FREE(cli->smb1.tcon);
+               cli->smb1.tcon = tcon;
+       }
+}
+
 uint16_t cli_state_get_uid(struct cli_state *cli)
 {
        return smb1cli_session_current_id(cli->smb1.session);
index 137c35547714f780bc87f1e95e65e2c131c07458..3d545024d98cdd83b6550ce99103cf8e5da30c68 100644 (file)
@@ -196,6 +196,9 @@ 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);
+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);
 uint16_t cli_state_get_uid(struct cli_state *cli);
 uint16_t cli_state_set_uid(struct cli_state *cli, uint16_t uid);
 bool cli_set_case_sensitive(struct cli_state *cli, bool case_sensitive);