From 39026f1c5dbb83120b70b3d9131138a9c2344ba6 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 13 Jun 2017 16:15:00 -0700 Subject: [PATCH] s3: libsmb: Add cli_state_save_tcon() / cli_state_restore_tcon(). 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 Reviewed-by: Richard Sharpe --- source3/libsmb/clientgen.c | 20 ++++++++++++++++++++ source3/libsmb/proto.h | 3 +++ 2 files changed, 23 insertions(+) diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c index bc5c1b1ce3c..1aea4cf247e 100644 --- a/source3/libsmb/clientgen.c +++ b/source3/libsmb/clientgen.c @@ -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); diff --git a/source3/libsmb/proto.h b/source3/libsmb/proto.h index 137c3554771..3d545024d98 100644 --- a/source3/libsmb/proto.h +++ b/source3/libsmb/proto.h @@ -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); -- 2.34.1