1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01: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:
Paulo Alcantara 2025-02-05 13:03:33 -03:00 committed by Steve French
parent 2014c95afe
commit 77c2e45dbf

View file

@ -150,25 +150,27 @@ again:
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));