From 34c81934ad1d56cb8e34a79580ea9f924cab87fc Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Tue, 11 Jun 2013 16:46:25 +0200 Subject: [PATCH] TODO smb1cli_tcon_set_optional support etc. --- libcli/smb/smbXcli_base.c | 35 ++++++++++++++++++++++++++++++++--- source3/libsmb/cliconnect.c | 1 + 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c index b62e81d98b3..45fad761536 100644 --- a/libcli/smb/smbXcli_base.c +++ b/libcli/smb/smbXcli_base.c @@ -2471,11 +2471,40 @@ bool smbXcli_conn_has_async_calls(struct smbXcli_conn *conn) bool smbXcli_conn_dfs_supported(struct smbXcli_conn *conn) { - if(conn->protocol >= PROTOCOL_SMB2_02) { - return (smb2cli_conn_server_capabilities(conn) & SMB2_CAP_DFS); + if (conn->protocol >= PROTOCOL_SMB2_02) { + if (smb2cli_conn_server_capabilities(conn) & SMB2_CAP_DFS) { + return true; + } + + return false; + } + + if (smb1cli_conn_capabilities(conn) & CAP_DFS) { + return true; + } + + return false; +} + +bool smbXcli_tcon_is_dfsroot(struct smbXcli_tcon *tcon) +{ + return tcon->is_dfsroot; +} + +void smb1cli_tcon_set_optional_support(struct smbXcli_tcon *tcon, + uint16_t optional) +{ + if (tcon->conn == NULL) { + return; } - return (smb1cli_conn_capabilities(conn) & CAP_DFS); + if (optional & SMB_SHARE_IN_DFS) { + tcon->is_dfsroot = true; + } + + if (!(smb1cli_conn_capabilities(tcon->conn) & CAP_DFS)) { + tcon->is_dfsroot = false; + } } uint32_t smb2cli_conn_server_capabilities(struct smbXcli_conn *conn) diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index 7179c4f209d..ac6ab5a7600 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -2578,6 +2578,7 @@ static void cli_tcon_andx_done(struct tevent_req *subreq) } cli_state_set_tid(cli, SVAL(inhdr, HDR_TID)); + smb1cli_tcon_set_optional_support(cli->tcon, optional_support); tevent_req_done(req); } -- 2.34.1