TODO smb1cli_tcon_set_optional support etc. luk-master
authorMichael Adam <obnox@samba.org>
Tue, 11 Jun 2013 14:46:25 +0000 (16:46 +0200)
committerMichael Adam <obnox@samba.org>
Tue, 11 Jun 2013 14:46:25 +0000 (16:46 +0200)
libcli/smb/smbXcli_base.c
source3/libsmb/cliconnect.c

index b62e81d98b3615dbf3d399d231d6da083ea762e4..45fad761536509f89a6a077391b904c0aee9b31e 100644 (file)
@@ -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)
index 7179c4f209dbc442d9a86f6bb54841e11520e557..ac6ab5a7600fe21414bcf6515d49037b1ffcdf43 100644 (file)
@@ -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);
 }