1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-22 02:50:28 +03:00

s3: smbd: In filename_convert_dirfsp_nosymlink(), in SMB1-only POSIX mode, allow a pathname referencing a symlink to be returned.

Doesn't contain a valid smb_fname->fsp pointer of course,
and is only used by the SMB1 code to take a reference to
a smylink name for manipulation (unlinkat, readlinkat etc.).

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
This commit is contained in:
Jeremy Allison 2022-08-01 14:24:31 -07:00
parent 6fd8f7fd18
commit 5249cb3d0f

View File

@ -2907,6 +2907,28 @@ static NTSTATUS filename_convert_dirfsp_nosymlink(
char *normalized = NULL;
if (VALID_STAT(smb_fname_rel->st)) {
#if defined(WITH_SMB1SERVER)
/*
* In SMB1 posix mode, if this is a symlink,
* allow access to the name with a NULL smb_fname->fsp.
*/
if (!conn->sconn->using_smb2 &&
posix &&
S_ISLNK(smb_fname_rel->st.st_ex_mode)) {
SMB_ASSERT(smb_fname_rel->fsp == NULL);
SMB_ASSERT(streamname == NULL);
smb_fname = full_path_from_dirfsp_atname(
mem_ctx,
smb_dirname->fsp,
smb_fname_rel);
if (smb_fname == NULL) {
status = NT_STATUS_NO_MEMORY;
goto fail;
}
goto done;
}
#endif
/*
* NT_STATUS_OBJECT_NAME_NOT_FOUND is
* misleading: The object exists but might be