smbd: pass dirname as struct smb_filename to is_visible_file()
authorRalph Boehme <slow@samba.org>
Wed, 29 Apr 2020 08:09:16 +0000 (10:09 +0200)
committerJeremy Allison <jra@samba.org>
Wed, 29 Apr 2020 16:39:41 +0000 (16:39 +0000)
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/close.c
source3/smbd/dir.c
source3/smbd/proto.h
source3/smbd/reply.c

index 7ad50aa325a5c6aee032b62bc6120c3e74810016..8ad8a6b51885dd1610c5aa651e6b456dc17e4313 100644 (file)
@@ -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;
index 8846012cc735f543f62c15c79c4861886336c061..7f5af0e37d382c4b719b33c7946eb251e26acc1b 100644 (file)
@@ -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;
                }
index fed6fb05c1476b56c497454a72059d814f745f68..f4163aee3fd5ada52232d2cef0df186d9b1a664a 100644 (file)
@@ -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);
index 7f4860c421f2e6a1ac566a6be5fb6abea860c2b7..2fa1d9f5dd1d19479f166b23d35fb88e39ad2e69 100644 (file)
@@ -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;