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;
/* 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) {
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;
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));
}
/* 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;
}