From: Volker Lendecke Date: Tue, 19 Nov 2024 10:48:12 +0000 (+0100) Subject: smbd: Revert "smbd: Simplify filename_convert_dirfsp()" X-Git-Tag: tdb-1.4.13~490 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=76f5156906139559d4414fe9bf1b4938780000c5;p=thirdparty%2Fsamba.git smbd: Revert "smbd: Simplify filename_convert_dirfsp()" This reverts commit bd30c9c128c203c3ed4b123b651862a9953f6cf2. While this does indeed slightly simplify code, it simplifies too much: Soon we will need filename_convert_dirfsp_nosymlink raw without looking at UCF_LCOMP_LNK_OK. So in hindsight this went too far. Signed-off-by: Volker Lendecke Reviewed-by: Ralph Boehme --- diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c index 6b31670eff3..b4d58f5ba79 100644 --- a/source3/smbd/filename.c +++ b/source3/smbd/filename.c @@ -1041,13 +1041,6 @@ static NTSTATUS filename_convert_dirfsp_nosymlink( } done: - if (S_ISLNK(smb_fname->st.st_ex_mode) && - !(ucf_flags & UCF_LCOMP_LNK_OK)) { - status = NT_STATUS_STOPPED_ON_SYMLINK; - *_symlink_err = symlink_err; - goto fail; - } - *_dirfsp = smb_dirname->fsp; *_smb_fname = smb_fname; *_symlink_err = symlink_err; @@ -1109,6 +1102,18 @@ next: _smb_fname_rel, &symlink_err); + if (NT_STATUS_IS_OK(status) && S_ISLNK((*_smb_fname)->st.st_ex_mode)) { + /* + * lcomp is a symlink + */ + if (ucf_flags & UCF_LCOMP_LNK_OK) { + TALLOC_FREE(symlink_err); + return NT_STATUS_OK; + } + close_file_free(NULL, _dirfsp, ERROR_CLOSE); + status = NT_STATUS_STOPPED_ON_SYMLINK; + } + if (!NT_STATUS_EQUAL(status, NT_STATUS_STOPPED_ON_SYMLINK)) { return status; }