1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-06 13:18:07 +03:00

s3: smbd: Fix "follow symlink = no" regression part 2.

Use the cwd_name parameter to reconstruct the original
client name for symlink testing.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=12721

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
(cherry picked from commit e182a4d39e)
This commit is contained in:
Jeremy Allison 2017-03-27 17:09:38 -07:00 committed by Karolin Seeger
parent 8e3e969eed
commit ed694d0680

View File

@ -1162,6 +1162,7 @@ NTSTATUS check_reduced_name(connection_struct *conn,
const char *fname)
{
char *resolved_name = NULL;
char *new_fname = NULL;
bool allow_symlinks = true;
bool allow_widelinks = false;
@ -1303,11 +1304,32 @@ NTSTATUS check_reduced_name(connection_struct *conn,
}
p++;
/*
* If cwd_name is present and not ".",
* then fname is relative to that, not
* the root of the share. Make sure the
* path we check is the one the client
* sent (cwd_name+fname).
*/
if (cwd_name != NULL && !ISDOT(cwd_name)) {
new_fname = talloc_asprintf(talloc_tos(),
"%s/%s",
cwd_name,
fname);
if (new_fname == NULL) {
SAFE_FREE(resolved_name);
return NT_STATUS_NO_MEMORY;
}
fname = new_fname;
}
if (strcmp(fname, p)!=0) {
DEBUG(2, ("check_reduced_name: Bad access "
"attempt: %s is a symlink to %s\n",
fname, p));
SAFE_FREE(resolved_name);
TALLOC_FREE(new_fname);
return NT_STATUS_ACCESS_DENIED;
}
}
@ -1317,6 +1339,7 @@ NTSTATUS check_reduced_name(connection_struct *conn,
DBG_INFO("%s reduced to %s\n", fname, resolved_name);
SAFE_FREE(resolved_name);
TALLOC_FREE(new_fname);
return NT_STATUS_OK;
}