From: Ralph Boehme Date: Wed, 29 Apr 2020 08:09:16 +0000 (+0200) Subject: smbd: pass dirname as struct smb_filename to is_visible_file() X-Git-Tag: ldb-2.2.0~813 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4cc86556a8323d4bd08bf0c93b971919e96a2a19;p=thirdparty%2Fsamba.git smbd: pass dirname as struct smb_filename to is_visible_file() Signed-off-by: Ralph Boehme Reviewed-by: Jeremy Allison --- diff --git a/source3/smbd/close.c b/source3/smbd/close.c index 7ad50aa325a..8ad8a6b5188 100644 --- a/source3/smbd/close.c +++ b/source3/smbd/close.c @@ -832,7 +832,7 @@ bool recursive_rmdir(TALLOC_CTX *ctx, continue; } - if (!is_visible_file(conn, smb_dname->base_name, dname, &st, + if (!is_visible_file(conn, smb_dname, dname, &st, false)) { TALLOC_FREE(talloced); continue; @@ -969,7 +969,7 @@ static NTSTATUS rmdir_internals(TALLOC_CTX *ctx, files_struct *fsp) TALLOC_FREE(talloced); continue; } - if (!is_visible_file(conn, smb_dname->base_name, dname, + if (!is_visible_file(conn, smb_dname, dname, &st, false)) { TALLOC_FREE(talloced); continue; @@ -1004,7 +1004,7 @@ static NTSTATUS rmdir_internals(TALLOC_CTX *ctx, files_struct *fsp) TALLOC_FREE(talloced); continue; } - if (!is_visible_file(conn, smb_dname->base_name, dname, + if (!is_visible_file(conn, smb_dname, dname, &st, false)) { TALLOC_FREE(talloced); continue; diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c index 8846012cc73..7f5af0e37d3 100644 --- a/source3/smbd/dir.c +++ b/source3/smbd/dir.c @@ -408,7 +408,7 @@ static const char *dptr_normal_ReadDirName(struct dptr_struct *dptr, while ((name = ReadDirName(dptr->dir_hnd, poffset, pst, &talloced)) != NULL) { if (is_visible_file(dptr->conn, - dptr->smb_dname->base_name, + dptr->smb_dname, name, pst, true)) { @@ -466,7 +466,7 @@ static char *dptr_ReadDirName(TALLOC_CTX *ctx, /* First check if it should be visible. */ if (!is_visible_file(dptr->conn, - dptr->smb_dname->base_name, + dptr->smb_dname, dptr->wcard, pst, true)) { @@ -1209,7 +1209,7 @@ static bool file_is_special(connection_struct *conn, ********************************************************************/ bool is_visible_file(connection_struct *conn, - const char *dir_path, + struct smb_filename *dir_path, const char *name, SMB_STRUCT_STAT *pst, bool use_veto) @@ -1237,7 +1237,10 @@ bool is_visible_file(connection_struct *conn, hide_special || (hide_new_files_timeout != 0)) { - entry = talloc_asprintf(talloc_tos(), "%s/%s", dir_path, name); + entry = talloc_asprintf(talloc_tos(), + "%s/%s", + dir_path->base_name, + name); if (!entry) { ret = false; goto out; @@ -1735,7 +1738,6 @@ NTSTATUS can_delete_directory_fsp(files_struct *fsp) NTSTATUS status = NT_STATUS_OK; long dirpos = 0; const char *dname = NULL; - const char *dirname = fsp->fsp_name->base_name; char *talloced = NULL; SMB_STRUCT_STAT st; struct connection_struct *conn = fsp->conn; @@ -1758,7 +1760,7 @@ NTSTATUS can_delete_directory_fsp(files_struct *fsp) } } - if (!is_visible_file(conn, dirname, dname, &st, True)) { + if (!is_visible_file(conn, fsp->fsp_name, dname, &st, True)) { TALLOC_FREE(talloced); continue; } diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h index fed6fb05c14..f4163aee3fd 100644 --- a/source3/smbd/proto.h +++ b/source3/smbd/proto.h @@ -225,7 +225,7 @@ bool get_dir_entry(TALLOC_CTX *ctx, bool check_descend, bool ask_sharemode); bool is_visible_file(connection_struct *conn, - const char *dir_path, + struct smb_filename *dir_path, const char *name, SMB_STRUCT_STAT *pst, bool use_veto); diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 7f4860c421f..2fa1d9f5dd1 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -3469,7 +3469,7 @@ NTSTATUS unlink_internals(connection_struct *conn, struct smb_request *req, &smb_fname->st, &talloced))) { TALLOC_CTX *frame = talloc_stackframe(); - if (!is_visible_file(conn, fname_dir, dname, + if (!is_visible_file(conn, smb_fname_dir, dname, &smb_fname->st, true)) { TALLOC_FREE(frame); TALLOC_FREE(talloced); @@ -8143,7 +8143,7 @@ NTSTATUS rename_internals(TALLOC_CTX *ctx, } } - if (!is_visible_file(conn, fname_src_dir, dname, + if (!is_visible_file(conn, smb_fname_src_dir, dname, &smb_fname_src->st, false)) { TALLOC_FREE(talloced); continue; @@ -8885,7 +8885,7 @@ void reply_copy(struct smb_request *req) continue; } - if (!is_visible_file(conn, fname_src_dir, dname, + if (!is_visible_file(conn, smb_fname_src_dir, dname, &smb_fname_src->st, false)) { TALLOC_FREE(talloced); continue;