libcli/smb: add smbXcli_tcon_is_dfs_share()
authorStefan Metzmacher <metze@samba.org>
Fri, 13 Sep 2013 09:07:32 +0000 (11:07 +0200)
committerKarolin Seeger <kseeger@samba.org>
Mon, 10 Mar 2014 15:12:18 +0000 (16:12 +0100)
Bug: https://bugzilla.samba.org/show_bug.cgi?id=10200

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
(cherry picked from commit e0fe97c543b2845e3515ffc2c638e4252164beed)

libcli/smb/smbXcli_base.c
libcli/smb/smbXcli_base.h

index 84f5dfd0794915b3baeb9703d3a0bc9ff6e15a2a..616e373330f07a870bdf1b8f2c86a39ba8711872 100644 (file)
@@ -167,6 +167,8 @@ struct smbXcli_session {
 };
 
 struct smbXcli_tcon {
+       bool is_smb1;
+
        struct {
                uint16_t tcon_id;
                uint16_t optional_support;
@@ -5023,6 +5025,27 @@ struct smbXcli_tcon *smbXcli_tcon_create(TALLOC_CTX *mem_ctx)
        return tcon;
 }
 
+bool smbXcli_tcon_is_dfs_share(struct smbXcli_tcon *tcon)
+{
+       if (tcon == NULL) {
+               return false;
+       }
+
+       if (tcon->is_smb1) {
+               if (tcon->smb1.optional_support & SMB_SHARE_IN_DFS) {
+                       return true;
+               }
+
+               return false;
+       }
+
+       if (tcon->smb2.capabilities & SMB2_SHARE_CAP_DFS) {
+               return true;
+       }
+
+       return false;
+}
+
 uint16_t smb1cli_tcon_current_id(struct smbXcli_tcon *tcon)
 {
        return tcon->smb1.tcon_id;
@@ -5030,6 +5053,7 @@ uint16_t smb1cli_tcon_current_id(struct smbXcli_tcon *tcon)
 
 void smb1cli_tcon_set_id(struct smbXcli_tcon *tcon, uint16_t tcon_id)
 {
+       tcon->is_smb1 = true;
        tcon->smb1.tcon_id = tcon_id;
 }
 
@@ -5041,6 +5065,7 @@ bool smb1cli_tcon_set_values(struct smbXcli_tcon *tcon,
                             const char *service,
                             const char *fs_type)
 {
+       tcon->is_smb1 = true;
        tcon->smb1.tcon_id = tcon_id;
        tcon->smb1.optional_support = optional_support;
        tcon->smb1.maximal_access = maximal_access;
@@ -5079,6 +5104,7 @@ void smb2cli_tcon_set_values(struct smbXcli_tcon *tcon,
                             uint32_t capabilities,
                             uint32_t maximal_access)
 {
+       tcon->is_smb1 = false;
        tcon->smb2.tcon_id = tcon_id;
        tcon->smb2.type = type;
        tcon->smb2.flags = flags;
index 93dec59e6e1bb0c74443bc99520c8d2b4d1b27b2..7fab374c2387d06bac80da5caf3597e55bbf3c9a 100644 (file)
@@ -299,6 +299,7 @@ NTSTATUS smb2cli_session_set_channel_key(struct smbXcli_session *session,
 NTSTATUS smb2cli_session_encryption_on(struct smbXcli_session *session);
 
 struct smbXcli_tcon *smbXcli_tcon_create(TALLOC_CTX *mem_ctx);
+bool smbXcli_tcon_is_dfs_share(struct smbXcli_tcon *tcon);
 uint16_t smb1cli_tcon_current_id(struct smbXcli_tcon *tcon);
 void smb1cli_tcon_set_id(struct smbXcli_tcon *tcon, uint16_t tcon_id);
 bool smb1cli_tcon_set_values(struct smbXcli_tcon *tcon,