s3/libsmb: make use of smbXcli_tcon_is_dfs_share()
authorStefan Metzmacher <metze@samba.org>
Fri, 27 Sep 2013 03:44:33 +0000 (05:44 +0200)
committerMichael Adam <obnox@samba.org>
Thu, 17 Oct 2013 14:17:27 +0000 (16:17 +0200)
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>
source3/libsmb/clidfs.c
source3/libsmb/libsmb_stat.c

index 83bfdcf17ed855835b14caa2a28625bf7ce2d7e1..2e4a3b8ef126c9e0d92be72d4b23c5ab90b087ef 100644 (file)
@@ -822,6 +822,8 @@ NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
        SMB_STRUCT_STAT sbuf;
        uint32 attributes;
        NTSTATUS status;
+       struct smbXcli_tcon *root_tcon = NULL;
+       struct smbXcli_tcon *target_tcon = NULL;
 
        if ( !rootcli || !path || !targetcli ) {
                return NT_STATUS_INVALID_PARAMETER;
@@ -829,7 +831,13 @@ NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
 
        /* Don't do anything if this is not a DFS root. */
 
-       if ( !rootcli->dfsroot) {
+       if (smbXcli_conn_protocol(rootcli->conn) >= PROTOCOL_SMB2_02) {
+               root_tcon = rootcli->smb2.tcon;
+       } else {
+               root_tcon = rootcli->smb1.tcon;
+       }
+
+       if (!smbXcli_tcon_is_dfs_share(root_tcon)) {
                *targetcli = rootcli;
                *pp_targetpath = talloc_strdup(ctx, path);
                if (!*pp_targetpath) {
@@ -1029,8 +1037,14 @@ NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
 
   done:
 
+       if (smbXcli_conn_protocol((*targetcli)->conn) >= PROTOCOL_SMB2_02) {
+               target_tcon = (*targetcli)->smb2.tcon;
+       } else {
+               target_tcon = (*targetcli)->smb1.tcon;
+       }
+
        /* If returning true ensure we return a dfs root full path. */
-       if ((*targetcli)->dfsroot) {
+       if (smbXcli_tcon_is_dfs_share(target_tcon)) {
                dfs_path = talloc_strdup(ctx, *pp_targetpath);
                if (!dfs_path) {
                        return NT_STATUS_NO_MEMORY;
index dc59f9cc82fc27fca31095484b90ed3bf5d04a80..94449e0d86aa17a43064a443d86b2dffb1d1adfb 100644 (file)
@@ -364,6 +364,13 @@ SMBC_fstatvfs_ctx(SMBCCTX *context,
         unsigned long flags = 0;
        uint32 fs_attrs = 0;
        struct cli_state *cli = file->srv->cli;
+       struct smbXcli_tcon *tcon;
+
+       if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) {
+               tcon = cli->smb2.tcon;
+       } else {
+               tcon = cli->smb1.tcon;
+       }
 
         /* Initialize all fields (at least until we actually use them) */
         memset(st, 0, sizeof(*st));
@@ -469,7 +476,9 @@ SMBC_fstatvfs_ctx(SMBCCTX *context,
         }
 
         /* See if DFS is supported */
-       if (smbXcli_conn_dfs_supported(cli->conn) &&  cli->dfsroot) {
+       if (smbXcli_conn_dfs_supported(cli->conn) &&
+           smbXcli_tcon_is_dfs_share(tcon))
+       {
                 flags |= SMBC_VFS_FEATURE_DFS;
         }