From: Volker Lendecke Date: Tue, 20 Dec 2022 13:38:02 +0000 (+0100) Subject: smbd: Simplify filename_convert_dirfsp_nosymlink() X-Git-Tag: talloc-2.4.0~154 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aff8b4fde761dc31dd5a0043ff18abec19db9c07;p=thirdparty%2Fsamba.git smbd: Simplify filename_convert_dirfsp_nosymlink() Factor out the symlink-case into a more obvious if-statement with less indentation. Review with git show -b Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c index 406618c0af7..a7cf7a14d92 100644 --- a/source3/smbd/filename.c +++ b/source3/smbd/filename.c @@ -1230,46 +1230,49 @@ static NTSTATUS filename_convert_dirfsp_nosymlink( status = openat_pathref_fsp_case_insensitive( smb_dirname->fsp, smb_fname_rel, ucf_flags); - if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND)) { - - char *normalized = NULL; + if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND) && + VALID_STAT(smb_fname_rel->st) && + S_ISLNK(smb_fname_rel->st.st_ex_mode)) { - if (VALID_STAT(smb_fname_rel->st)) { - /* - * If we're on an MSDFS share, see if this is - * an MSDFS link. - */ - if (lp_host_msdfs() && - lp_msdfs_root(SNUM(conn)) && - S_ISLNK(smb_fname_rel->st.st_ex_mode) && - is_msdfs_link(smb_dirname->fsp, smb_fname_rel)) - { - status = NT_STATUS_PATH_NOT_COVERED; - goto fail; - } + /* + * If we're on an MSDFS share, see if this is + * an MSDFS link. + */ + if (lp_host_msdfs() && + lp_msdfs_root(SNUM(conn)) && + is_msdfs_link(smb_dirname->fsp, smb_fname_rel)) + { + status = NT_STATUS_PATH_NOT_COVERED; + goto fail; + } #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; + /* + * 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) { + 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 + } + + if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND)) { + + char *normalized = NULL; + + if (VALID_STAT(smb_fname_rel->st)) { /* * NT_STATUS_OBJECT_NAME_NOT_FOUND is * misleading: The object exists but might be