mirror of
https://github.com/torvalds/linux.git
synced 2025-01-01 15:51:46 +00:00
cifs: fix source pathname comparison of dfs supers
We store the TCP_Server_Info::origin_fullpath path canonicalised (e.g. with '\\' path separators), so ignore separators when comparing it with smb3_fs_context::source. Signed-off-by: Paulo Alcantara (SUSE) <pc@cjr.nz> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
a85ceafd41
commit
466611e4af
@ -1412,6 +1412,20 @@ match_security(struct TCP_Server_Info *server, struct smb3_fs_context *ctx)
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool dfs_src_pathname_equal(const char *s1, const char *s2)
|
||||
{
|
||||
if (strlen(s1) != strlen(s2))
|
||||
return false;
|
||||
for (; *s1; s1++, s2++) {
|
||||
if (*s1 == '/' || *s1 == '\\') {
|
||||
if (*s2 != '/' && *s2 != '\\')
|
||||
return false;
|
||||
} else if (tolower(*s1) != tolower(*s2))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* this function must be called with srv_lock held */
|
||||
static int match_server(struct TCP_Server_Info *server, struct smb3_fs_context *ctx,
|
||||
bool dfs_super_cmp)
|
||||
@ -1449,7 +1463,7 @@ static int match_server(struct TCP_Server_Info *server, struct smb3_fs_context *
|
||||
*/
|
||||
if (dfs_super_cmp) {
|
||||
if (!ctx->source || !server->origin_fullpath ||
|
||||
strcasecmp(server->origin_fullpath, ctx->source))
|
||||
!dfs_src_pathname_equal(server->origin_fullpath, ctx->source))
|
||||
return 0;
|
||||
} else {
|
||||
/* Skip addr, hostname and port matching for DFS connections */
|
||||
|
Loading…
Reference in New Issue
Block a user