mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
smb: client: don't trust DFSREF_STORAGE_SERVER bit
Some servers don't respect the DFSREF_STORAGE_SERVER bit, so unconditionally tree connect to DFS link target and then decide whether or not continue chasing DFS referrals for DFS interlinks. Otherwise the client would fail to mount such shares. Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.com> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
2014c95afe
commit
77c2e45dbf
|
|
@ -150,25 +150,27 @@ static int __dfs_referral_walk(struct dfs_ref_walk *rw)
|
|||
if (rc)
|
||||
continue;
|
||||
|
||||
if (tgt.flags & DFSREF_STORAGE_SERVER) {
|
||||
rc = cifs_mount_get_tcon(mnt_ctx);
|
||||
if (!rc)
|
||||
rc = cifs_is_path_remote(mnt_ctx);
|
||||
rc = cifs_mount_get_tcon(mnt_ctx);
|
||||
if (rc) {
|
||||
if (tgt.server_type == DFS_TYPE_LINK &&
|
||||
DFS_INTERLINK(tgt.flags))
|
||||
rc = -EREMOTE;
|
||||
} else {
|
||||
rc = cifs_is_path_remote(mnt_ctx);
|
||||
if (!rc) {
|
||||
ref_walk_set_tgt_hint(rw);
|
||||
break;
|
||||
}
|
||||
if (rc != -EREMOTE)
|
||||
continue;
|
||||
}
|
||||
|
||||
rc = ref_walk_advance(rw);
|
||||
if (!rc) {
|
||||
rc = setup_dfs_ref(&tgt, rw);
|
||||
if (rc)
|
||||
break;
|
||||
ref_walk_mark_end(rw);
|
||||
goto again;
|
||||
if (rc == -EREMOTE) {
|
||||
rc = ref_walk_advance(rw);
|
||||
if (!rc) {
|
||||
rc = setup_dfs_ref(&tgt, rw);
|
||||
if (rc)
|
||||
break;
|
||||
ref_walk_mark_end(rw);
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (rc && ref_walk_descend(rw));
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user