From: Volker Lendecke Date: Sun, 4 Feb 2024 17:07:19 +0000 (+0100) Subject: smbd: Remove struct open_symlink_err X-Git-Tag: tdb-1.4.11~1304 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=18d9b1b17cfee79b8d2b78ac99ca31600b002a6e;p=thirdparty%2Fsamba.git smbd: Remove struct open_symlink_err This was just a wrapper for a single pointer, remove it Signed-off-by: Volker Lendecke Reviewed-by: Andreas Schneider --- diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c index 92194a37143..4370d733048 100644 --- a/source3/smbd/filename.c +++ b/source3/smbd/filename.c @@ -737,12 +737,12 @@ static NTSTATUS filename_convert_dirfsp_nosymlink( NTTIME twrp, struct files_struct **_dirfsp, struct smb_filename **_smb_fname, - struct open_symlink_err **_symlink_err) + struct reparse_data_buffer **_symlink_err) { struct smb_filename *smb_dirname = NULL; struct smb_filename *smb_fname_rel = NULL; struct smb_filename *smb_fname = NULL; - struct open_symlink_err *symlink_err = NULL; + struct reparse_data_buffer *symlink_err = NULL; const bool posix = (ucf_flags & UCF_POSIX_PATHNAMES); char *dirname = NULL; const char *fname_rel = NULL; @@ -847,7 +847,7 @@ static NTSTATUS filename_convert_dirfsp_nosymlink( if (NT_STATUS_EQUAL(status, NT_STATUS_STOPPED_ON_SYMLINK)) { struct symlink_reparse_struct - *lnk = &symlink_err->reparse->parsed.lnk; + *lnk = &symlink_err->parsed.lnk; size_t unparsed = lnk->unparsed_path_length; size_t name_in_len, dirname_len; @@ -960,10 +960,10 @@ static NTSTATUS filename_convert_dirfsp_nosymlink( * Upper layers might need the link target. Here we * still have the relname around, get the symlink err. */ - status = create_open_symlink_err(mem_ctx, - smb_dirname->fsp, - smb_fname_rel, - &symlink_err); + status = read_symlink_reparse(mem_ctx, + smb_dirname->fsp, + smb_fname_rel, + &symlink_err); if (!NT_STATUS_IS_OK(status)) { DBG_DEBUG("Could not read symlink for %s: %s\n", smb_fname_str_dbg( @@ -1136,7 +1136,7 @@ NTSTATUS filename_convert_dirfsp( struct files_struct **_dirfsp, struct smb_filename **_smb_fname) { - struct open_symlink_err *symlink_err = NULL; + struct reparse_data_buffer *symlink_err = NULL; struct symlink_reparse_struct *lnk = NULL; NTSTATUS status; char *target = NULL; @@ -1172,7 +1172,7 @@ next: if (!NT_STATUS_EQUAL(status, NT_STATUS_STOPPED_ON_SYMLINK)) { return status; } - lnk = &symlink_err->reparse->parsed.lnk; + lnk = &symlink_err->parsed.lnk; /* * If we're on an MSDFS share, see if this is diff --git a/source3/smbd/files.c b/source3/smbd/files.c index e223034acc0..046b58023bd 100644 --- a/source3/smbd/files.c +++ b/source3/smbd/files.c @@ -816,29 +816,6 @@ static bool full_path_extend(char **dir, const char *atname) return (*dir) != NULL; } -NTSTATUS create_open_symlink_err(TALLOC_CTX *mem_ctx, - files_struct *dirfsp, - struct smb_filename *smb_relname, - struct open_symlink_err **_err) -{ - struct open_symlink_err *err = NULL; - NTSTATUS status; - - err = talloc_zero(mem_ctx, struct open_symlink_err); - if (err == NULL) { - return NT_STATUS_NO_MEMORY; - } - - status = read_symlink_reparse(err, dirfsp, smb_relname, &err->reparse); - if (!NT_STATUS_IS_OK(status)) { - TALLOC_FREE(err); - return status; - } - - *_err = err; - return NT_STATUS_OK; -} - /* * Create the memcache-key for GETREALFILENAME_CACHE: This supplements * the stat cache for the last component to be looked up. Cache @@ -1017,14 +994,15 @@ lookup: return fd; } -NTSTATUS openat_pathref_fsp_nosymlink(TALLOC_CTX *mem_ctx, - struct connection_struct *conn, - struct files_struct *in_dirfsp, - const char *path_in, - NTTIME twrp, - bool posix, - struct smb_filename **_smb_fname, - struct open_symlink_err **_symlink_err) +NTSTATUS openat_pathref_fsp_nosymlink( + TALLOC_CTX *mem_ctx, + struct connection_struct *conn, + struct files_struct *in_dirfsp, + const char *path_in, + NTTIME twrp, + bool posix, + struct smb_filename **_smb_fname, + struct reparse_data_buffer **_symlink_err) { struct files_struct *dirfsp = in_dirfsp; struct smb_filename full_fname = { @@ -1038,7 +1016,7 @@ NTSTATUS openat_pathref_fsp_nosymlink(TALLOC_CTX *mem_ctx, .flags = full_fname.flags, }; struct smb_filename *result = NULL; - struct open_symlink_err *symlink_err = NULL; + struct reparse_data_buffer *symlink_err = NULL; struct files_struct *fsp = NULL; char *path = NULL, *next = NULL; bool ok, is_toplevel; @@ -1234,12 +1212,12 @@ next: * below. */ - status = create_open_symlink_err(mem_ctx, - dirfsp, - &rel_fname, - &symlink_err); + status = read_symlink_reparse(mem_ctx, + dirfsp, + &rel_fname, + &symlink_err); if (!NT_STATUS_IS_OK(status)) { - DBG_DEBUG("create_open_symlink_err failed: %s\n", + DBG_DEBUG("read_symlink_reparse failed: %s\n", nt_errstr(status)); goto fail; } @@ -1301,13 +1279,13 @@ next: * freadlink. */ - status = create_open_symlink_err(mem_ctx, - dirfsp, - NULL, - &symlink_err); + status = read_symlink_reparse(mem_ctx, + dirfsp, + NULL, + &symlink_err); if (!NT_STATUS_IS_OK(status)) { - DBG_DEBUG("create_open_symlink_err failed: %s\n", + DBG_DEBUG("read_symlink_reparse failed: %s\n", nt_errstr(status)); status = NT_STATUS_NOT_A_DIRECTORY; goto fail; @@ -1322,8 +1300,7 @@ next: goto fail; } - symlink_err->reparse->parsed.lnk - .unparsed_path_length = unparsed; + symlink_err->parsed.lnk.unparsed_path_length = unparsed; status = NT_STATUS_STOPPED_ON_SYMLINK; goto fail; @@ -1401,10 +1378,10 @@ done: * Last component was a symlink we opened with O_PATH, fail it * here. */ - status = create_open_symlink_err(mem_ctx, - fsp, - NULL, - &symlink_err); + status = read_symlink_reparse(mem_ctx, + fsp, + NULL, + &symlink_err); if (!NT_STATUS_IS_OK(status)) { return status; } diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h index c668a62b6e6..4f0b7ac35da 100644 --- a/source3/smbd/proto.h +++ b/source3/smbd/proto.h @@ -377,23 +377,17 @@ NTSTATUS open_stream_pathref_fsp( struct files_struct **_base_fsp, struct smb_filename *smb_fname); -struct open_symlink_err { - struct reparse_data_buffer *reparse; -}; +struct reparse_data_buffer; -NTSTATUS create_open_symlink_err(TALLOC_CTX *mem_ctx, - files_struct *dirfsp, - struct smb_filename *smb_relname, - struct open_symlink_err **_err); - -NTSTATUS openat_pathref_fsp_nosymlink(TALLOC_CTX *mem_ctx, - struct connection_struct *conn, - struct files_struct *dirfsp, - const char *path_in, - NTTIME twrp, - bool posix, - struct smb_filename **_smb_fname, - struct open_symlink_err **_symlink_err); +NTSTATUS openat_pathref_fsp_nosymlink( + TALLOC_CTX *mem_ctx, + struct connection_struct *conn, + struct files_struct *dirfsp, + const char *path_in, + NTTIME twrp, + bool posix, + struct smb_filename **_smb_fname, + struct reparse_data_buffer **_symlink_err); NTSTATUS openat_pathref_fsp_lcomp(struct files_struct *dirfsp, struct smb_filename *smb_fname_rel, uint32_t ucf_flags); @@ -403,8 +397,6 @@ NTSTATUS readlink_talloc( struct smb_filename *smb_relname, char **_substitute); -struct reparse_data_buffer; - NTSTATUS read_symlink_reparse(TALLOC_CTX *mem_ctx, struct files_struct *dirfsp, struct smb_filename *smb_relname,