The branch, master has been updated via 0c113e652fe s3: smbd: Rename OpenDir_ntstatus() -> OpenDir(). via c0bbf6f4119 s3: smbd: Remove now unused OpenDir(). via b331082b01a s3: torture: In cmd_vfs, Move two more uses of OpenDir() -> OpenDir_nstatus(). via e66be49a52e s3: smbd: In form_junctions(), Move one more use of OpenDir() -> OpenDir_nstatus() via 2aff668e1c5 s3: smbd: In count_dfs_links(), Move one more use of OpenDir() -> OpenDir_nstatus() via 535b29afdeb s3: smbd: In rmdir_internals(), Move one more use of OpenDir() -> OpenDir_nstatus() via 51b7475d394 s3: smbd: In recursive_rmdir(), Move one more use of OpenDir() -> OpenDir_nstatus() via bc9439a41ee s3: VFS: syncops: Move one more use of OpenDir() -> OpenDir_nstatus(). via a138d0f2d98 s3: VFS: shadow_copy: Move one more use of OpenDir() -> OpenDir_nstatus(). via a1f4d74a1a0 s3: VFS: fruit: Move two more uses of OpenDir() -> OpenDir_nstatus(). via 751237a28c3 s3: VFS: ceph_snapshots: Move two more uses of OpenDir() -> OpenDir_nstatus(). from 791be84c3ee s4:kdc: hdb_samba4_audit() is only called once per request
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 0c113e652fea17cbbf7644e469abe0980789cf9c Author: Jeremy Allison <j...@samba.org> Date: Mon Feb 28 14:34:48 2022 -0800 s3: smbd: Rename OpenDir_ntstatus() -> OpenDir(). We now have a single OpenDir() function that returns an NTSTATUS. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> Autobuild-User(master): Volker Lendecke <v...@samba.org> Autobuild-Date(master): Wed Mar 2 21:58:32 UTC 2022 on sn-devel-184 commit c0bbf6f41195dd2af08f303ce3feef3becd79af1 Author: Jeremy Allison <j...@samba.org> Date: Mon Feb 28 14:30:27 2022 -0800 s3: smbd: Remove now unused OpenDir(). Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit b331082b01a51d57a52b9c2e994724def528c8b4 Author: Jeremy Allison <j...@samba.org> Date: Mon Feb 28 14:28:19 2022 -0800 s3: torture: In cmd_vfs, Move two more uses of OpenDir() -> OpenDir_nstatus(). Now we can replace OpenDir() with OpenDir_ntatatus(). Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit e66be49a52e19551edea6b336fbbb46f6a97f3c7 Author: Jeremy Allison <j...@samba.org> Date: Mon Feb 28 14:25:25 2022 -0800 s3: smbd: In form_junctions(), Move one more use of OpenDir() -> OpenDir_nstatus() Eventually we can replace OpenDir() with OpenDir_ntatatus(). Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit 2aff668e1c5f31d950e30d175b9affe36bb4766f Author: Jeremy Allison <j...@samba.org> Date: Mon Feb 28 14:24:19 2022 -0800 s3: smbd: In count_dfs_links(), Move one more use of OpenDir() -> OpenDir_nstatus() Eventually we can replace OpenDir() with OpenDir_ntatatus(). Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit 535b29afdebc2bff1a587a1d5966c789fb6aab42 Author: Jeremy Allison <j...@samba.org> Date: Mon Feb 28 14:22:03 2022 -0800 s3: smbd: In rmdir_internals(), Move one more use of OpenDir() -> OpenDir_nstatus() Eventually we can replace OpenDir() with OpenDir_ntatatus(). Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit 51b7475d394ab04f73bdc054382f0814a41aaa74 Author: Jeremy Allison <j...@samba.org> Date: Mon Feb 28 14:20:37 2022 -0800 s3: smbd: In recursive_rmdir(), Move one more use of OpenDir() -> OpenDir_nstatus() Eventually we can replace OpenDir() with OpenDir_ntatatus(). Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit bc9439a41eea66e50ea76275c324596e26999888 Author: Jeremy Allison <j...@samba.org> Date: Mon Feb 28 14:13:04 2022 -0800 s3: VFS: syncops: Move one more use of OpenDir() -> OpenDir_nstatus(). Eventually we can replace OpenDir() with OpenDir_ntatatus(). Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit a138d0f2d986a8d05ea2e4172871701bdb187770 Author: Jeremy Allison <j...@samba.org> Date: Mon Feb 28 14:11:04 2022 -0800 s3: VFS: shadow_copy: Move one more use of OpenDir() -> OpenDir_nstatus(). Eventually we can replace OpenDir() with OpenDir_ntatatus(). Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit a1f4d74a1a00aa9d91393b0c6f975ffb3db03d55 Author: Jeremy Allison <j...@samba.org> Date: Mon Feb 28 14:08:40 2022 -0800 s3: VFS: fruit: Move two more uses of OpenDir() -> OpenDir_nstatus(). Eventually we can replace OpenDir() with OpenDir_ntatatus(). Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit 751237a28c3c8feee24818dea0525771e70dd08b Author: Jeremy Allison <j...@samba.org> Date: Mon Feb 28 13:28:30 2022 -0800 s3: VFS: ceph_snapshots: Move two more uses of OpenDir() -> OpenDir_nstatus(). Eventually we can replace OpenDir() with OpenDir_ntatatus(). Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> ----------------------------------------------------------------------- Summary of changes: source3/modules/vfs_ceph_snapshots.c | 22 ++++++++++++++++------ source3/modules/vfs_fruit.c | 22 ++++++++++++++++++---- source3/modules/vfs_shadow_copy.c | 11 +++++++++-- source3/modules/vfs_streams_depot.c | 2 +- source3/modules/vfs_syncops.c | 17 ++++++++++------- source3/smbd/close.c | 27 ++++++++++++++++++++++----- source3/smbd/dir.c | 33 +++++++-------------------------- source3/smbd/filename.c | 2 +- source3/smbd/msdfs.c | 20 ++++++++++++++++---- source3/smbd/proto.h | 17 ++++++----------- source3/torture/cmd_vfs.c | 31 +++++++++++++++++++++---------- 11 files changed, 127 insertions(+), 77 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/modules/vfs_ceph_snapshots.c b/source3/modules/vfs_ceph_snapshots.c index dd7c431dd9e..d533b9479a3 100644 --- a/source3/modules/vfs_ceph_snapshots.c +++ b/source3/modules/vfs_ceph_snapshots.c @@ -236,9 +236,14 @@ static int ceph_snap_enum_snapdir(struct vfs_handle_struct *handle, * via readdir. */ - dir_hnd = OpenDir(frame, handle->conn, snaps_dname, NULL, 0); - if (dir_hnd == NULL) { - ret = -errno; + status = OpenDir(frame, + handle->conn, + snaps_dname, + NULL, + 0, + &dir_hnd); + if (!NT_STATUS_IS_OK(status)) { + ret = -map_errno_from_nt_status(status); goto err_out; } @@ -559,9 +564,14 @@ static int ceph_snap_gmt_convert_dir(struct vfs_handle_struct *handle, DBG_DEBUG("enumerating shadow copy dir at %s\n", snaps_dname->base_name); - dir_hnd = OpenDir(tmp_ctx, handle->conn, snaps_dname, NULL, 0); - if (dir_hnd == NULL) { - ret = -errno; + status = OpenDir(tmp_ctx, + handle->conn, + snaps_dname, + NULL, + 0, + &dir_hnd); + if (!NT_STATUS_IS_OK(status)) { + ret = -map_errno_from_nt_status(status); goto err_out; } diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c index e54e0903c40..75ddf3226b7 100644 --- a/source3/modules/vfs_fruit.c +++ b/source3/modules/vfs_fruit.c @@ -5055,6 +5055,7 @@ static bool fruit_get_num_bands(vfs_handle_struct *handle, char *talloced = NULL; long offset = 0; size_t nbands; + NTSTATUS status; path = talloc_asprintf(talloc_tos(), "%s/%s/bands", @@ -5075,9 +5076,15 @@ static bool fruit_get_num_bands(vfs_handle_struct *handle, return false; } - dir_hnd = OpenDir(talloc_tos(), handle->conn, bands_dir, NULL, 0); - if (dir_hnd == NULL) { + status = OpenDir(talloc_tos(), + handle->conn, + bands_dir, + NULL, + 0, + &dir_hnd); + if (!NT_STATUS_IS_OK(status)) { TALLOC_FREE(bands_dir); + errno = map_errno_from_nt_status(status); return false; } @@ -5198,6 +5205,7 @@ static uint64_t fruit_disk_free(vfs_handle_struct *handle, uint64_t dfree; uint64_t dsize; bool ok; + NTSTATUS status; SMB_VFS_HANDLE_GET_DATA(handle, config, struct fruit_config_data, @@ -5213,8 +5221,14 @@ static uint64_t fruit_disk_free(vfs_handle_struct *handle, _dsize); } - dir_hnd = OpenDir(talloc_tos(), handle->conn, smb_fname, NULL, 0); - if (dir_hnd == NULL) { + status = OpenDir(talloc_tos(), + handle->conn, + smb_fname, + NULL, + 0, + &dir_hnd); + if (!NT_STATUS_IS_OK(status)) { + errno = map_errno_from_nt_status(status); return UINT64_MAX; } diff --git a/source3/modules/vfs_shadow_copy.c b/source3/modules/vfs_shadow_copy.c index 37c4657e79b..29163b179f7 100644 --- a/source3/modules/vfs_shadow_copy.c +++ b/source3/modules/vfs_shadow_copy.c @@ -179,6 +179,7 @@ static int shadow_copy_get_shadow_copy_data(vfs_handle_struct *handle, const char *dname = NULL; char *talloced = NULL; long offset = 0; + NTSTATUS status; struct smb_filename *smb_fname = synthetic_smb_fname(talloc_tos(), fsp->conn->connectpath, NULL, @@ -190,10 +191,16 @@ static int shadow_copy_get_shadow_copy_data(vfs_handle_struct *handle, return -1; } - dir_hnd = OpenDir(talloc_tos(), handle->conn, smb_fname, NULL, 0); + status = OpenDir(talloc_tos(), + handle->conn, + smb_fname, + NULL, + 0, + &dir_hnd); TALLOC_FREE(smb_fname); - if (dir_hnd == NULL) { + if (!NT_STATUS_IS_OK(status)) { DBG_ERR("OpenDir() failed for [%s]\n", fsp->conn->connectpath); + errno = map_errno_from_nt_status(status); return -1; } diff --git a/source3/modules/vfs_streams_depot.c b/source3/modules/vfs_streams_depot.c index f1ec5b9748a..3016cfcf19c 100644 --- a/source3/modules/vfs_streams_depot.c +++ b/source3/modules/vfs_streams_depot.c @@ -595,7 +595,7 @@ static NTSTATUS walk_streams(vfs_handle_struct *handle, orig_connectpath = handle->conn->connectpath; handle->conn->connectpath = rootdir; - status = OpenDir_ntstatus( + status = OpenDir( talloc_tos(), handle->conn, dir_smb_fname, NULL, 0, &dir_hnd); if (!NT_STATUS_IS_OK(status)) { handle->conn->connectpath = orig_connectpath; diff --git a/source3/modules/vfs_syncops.c b/source3/modules/vfs_syncops.c index 679d8b06dcb..14c860127b3 100644 --- a/source3/modules/vfs_syncops.c +++ b/source3/modules/vfs_syncops.c @@ -77,13 +77,16 @@ static void syncops_sync_directory(connection_struct *conn, struct smb_Dir *dir_hnd = NULL; struct files_struct *dirfsp = NULL; struct smb_filename smb_dname = { .base_name = dname }; - - dir_hnd = OpenDir(talloc_tos(), - conn, - &smb_dname, - "*", - 0); - if (dir_hnd == NULL) { + NTSTATUS status; + + status = OpenDir(talloc_tos(), + conn, + &smb_dname, + "*", + 0, + &dir_hnd); + if (!NT_STATUS_IS_OK(status)) { + errno = map_errno_from_nt_status(status); return; } diff --git a/source3/smbd/close.c b/source3/smbd/close.c index 4ad8e42f319..798a28c324c 100644 --- a/source3/smbd/close.c +++ b/source3/smbd/close.c @@ -848,16 +848,23 @@ bool recursive_rmdir(TALLOC_CTX *ctx, bool ret = True; long offset = 0; SMB_STRUCT_STAT st; - struct smb_Dir *dir_hnd; + struct smb_Dir *dir_hnd = NULL; struct files_struct *dirfsp = NULL; int retval; NTSTATUS status; SMB_ASSERT(!is_ntfs_stream_smb_fname(smb_dname)); - dir_hnd = OpenDir(talloc_tos(), conn, smb_dname, NULL, 0); - if (dir_hnd == NULL) + status = OpenDir(talloc_tos(), + conn, + smb_dname, + NULL, + 0, + &dir_hnd); + if (!NT_STATUS_IS_OK(status)) { + errno = map_errno_from_nt_status(status); return False; + } dirfsp = dir_hnd_fetch_fsp(dir_hnd); @@ -1045,8 +1052,18 @@ static NTSTATUS rmdir_internals(TALLOC_CTX *ctx, struct files_struct *fsp) * files non-visible to the client. If not, fail the delete. */ - dir_hnd = OpenDir(talloc_tos(), conn, smb_dname, NULL, 0); - if (dir_hnd == NULL) { + status = OpenDir(talloc_tos(), + conn, + smb_dname, + NULL, + 0, + &dir_hnd); + if (!NT_STATUS_IS_OK(status)) { + /* + * Note, we deliberately squash the error here + * to avoid leaking information about what we + * can't delete. + */ errno = ENOTEMPTY; goto err; } diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c index c9cc6b73e58..431d4d72b5d 100644 --- a/source3/smbd/dir.c +++ b/source3/smbd/dir.c @@ -1477,12 +1477,12 @@ static int smb_Dir_OpenDir_destructor(struct smb_Dir *dir_hnd) return 0; } -NTSTATUS OpenDir_ntstatus(TALLOC_CTX *mem_ctx, - connection_struct *conn, - const struct smb_filename *smb_dname, - const char *mask, - uint32_t attr, - struct smb_Dir **_dir_hnd) +NTSTATUS OpenDir(TALLOC_CTX *mem_ctx, + connection_struct *conn, + const struct smb_filename *smb_dname, + const char *mask, + uint32_t attr, + struct smb_Dir **_dir_hnd) { struct files_struct *fsp = NULL; struct smb_Dir *dir_hnd = NULL; @@ -1511,25 +1511,6 @@ NTSTATUS OpenDir_ntstatus(TALLOC_CTX *mem_ctx, return NT_STATUS_OK; } -struct smb_Dir *OpenDir(TALLOC_CTX *mem_ctx, - connection_struct *conn, - const struct smb_filename *smb_dname, - const char *mask, - uint32_t attr) -{ - struct smb_Dir *dir_hnd = NULL; - NTSTATUS status; - - status = OpenDir_ntstatus( - mem_ctx, conn, smb_dname, mask, attr, &dir_hnd); - if (!NT_STATUS_IS_OK(status)) { - /* Ensure we return the actual error from status in errno. */ - errno = map_errno_from_nt_status(status); - return NULL; - } - - return dir_hnd; -} /******************************************************************* Open a directory from an fsp. ********************************************************************/ @@ -1917,7 +1898,7 @@ NTSTATUS can_delete_directory_fsp(files_struct *fsp) struct connection_struct *conn = fsp->conn; struct smb_Dir *dir_hnd = NULL; - status = OpenDir_ntstatus( + status = OpenDir( talloc_tos(), conn, fsp->fsp_name, NULL, 0, &dir_hnd); if (!NT_STATUS_IS_OK(status)) { return status; diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c index 123fe951639..84548dce21d 100644 --- a/source3/smbd/filename.c +++ b/source3/smbd/filename.c @@ -1606,7 +1606,7 @@ int get_real_filename_full_scan(connection_struct *conn, } /* open the directory */ - status = OpenDir_ntstatus( + status = OpenDir( talloc_tos(), conn, smb_fname, NULL, 0, &cur_dir); if (!NT_STATUS_IS_OK(status)) { DBG_NOTICE("scan dir didn't open dir [%s]: %s\n", diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c index c003b442baa..86dc3f4dd74 100644 --- a/source3/smbd/msdfs.c +++ b/source3/smbd/msdfs.c @@ -1647,8 +1647,14 @@ static size_t count_dfs_links(TALLOC_CTX *ctx, } /* Now enumerate all dfs links */ - dir_hnd = OpenDir(frame, conn, smb_fname, NULL, 0); - if (dir_hnd == NULL) { + status = OpenDir(frame, + conn, + smb_fname, + NULL, + 0, + &dir_hnd); + if (!NT_STATUS_IS_OK(status)) { + errno = map_errno_from_nt_status(status); goto out; } @@ -1784,8 +1790,14 @@ static int form_junctions(TALLOC_CTX *ctx, } /* Now enumerate all dfs links */ - dir_hnd = OpenDir(frame, conn, smb_fname, NULL, 0); - if (dir_hnd == NULL) { + status = OpenDir(frame, + conn, + smb_fname, + NULL, + 0, + &dir_hnd); + if (!NT_STATUS_IS_OK(status)) { + errno = map_errno_from_nt_status(status); goto out; } diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h index 6ca5e125aaf..63f78024101 100644 --- a/source3/smbd/proto.h +++ b/source3/smbd/proto.h @@ -231,17 +231,12 @@ bool get_dir_entry(TALLOC_CTX *ctx, bool ask_sharemode); struct smb_Dir; bool is_visible_fsp(files_struct *fsp); -NTSTATUS OpenDir_ntstatus(TALLOC_CTX *mem_ctx, - connection_struct *conn, - const struct smb_filename *smb_dname, - const char *mask, - uint32_t attr, - struct smb_Dir **_dir_hnd); -struct smb_Dir *OpenDir(TALLOC_CTX *mem_ctx, - connection_struct *conn, - const struct smb_filename *smb_fname, - const char *mask, - uint32_t attr); +NTSTATUS OpenDir(TALLOC_CTX *mem_ctx, + connection_struct *conn, + const struct smb_filename *smb_dname, + const char *mask, + uint32_t attr, + struct smb_Dir **_dir_hnd); const char *ReadDirName(struct smb_Dir *dir_hnd, long *poffset, SMB_STRUCT_STAT *sbuf, char **talloced); void RewindDir(struct smb_Dir *dir_hnd, long *poffset); diff --git a/source3/torture/cmd_vfs.c b/source3/torture/cmd_vfs.c index fd40acc6795..303d80fc766 100644 --- a/source3/torture/cmd_vfs.c +++ b/source3/torture/cmd_vfs.c @@ -149,6 +149,7 @@ static NTSTATUS cmd_disk_free(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int ar static NTSTATUS cmd_opendir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, const char **argv) { struct smb_filename *smb_fname = NULL; + NTSTATUS status; if (argc != 2) { printf("Usage: opendir <fname>\n"); @@ -165,10 +166,17 @@ static NTSTATUS cmd_opendir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc return NT_STATUS_NO_MEMORY; } - vfs->currentdir = OpenDir(vfs->conn, vfs->conn, smb_fname, NULL, 0); - if (vfs->currentdir == NULL) { - printf("opendir error=%d (%s)\n", errno, strerror(errno)); + status = OpenDir(vfs->conn, + vfs->conn, + smb_fname, + NULL, + 0, + &vfs->currentdir); + if (!NT_STATUS_IS_OK(status)) { + int err = map_errno_from_nt_status(status); + printf("opendir error=%d (%s)\n", err, strerror(err)); TALLOC_FREE(smb_fname); + errno = err; return NT_STATUS_UNSUCCESSFUL; } @@ -2103,15 +2111,18 @@ static NTSTATUS cmd_translate_name(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, return NT_STATUS_NO_MEMORY; } - vfs->currentdir = OpenDir(talloc_tos(), - vfs->conn, - smb_fname, - NULL, - 0); - if (vfs->currentdir == NULL) { + status = OpenDir(vfs->conn, + vfs->conn, + smb_fname, + NULL, + 0, + &vfs->currentdir); + if (!NT_STATUS_IS_OK(status)) { + int err = map_errno_from_nt_status(status); DEBUG(0, ("cmd_translate_name: opendir error=%d (%s)\n", - errno, strerror(errno))); + err, strerror(err))); TALLOC_FREE(smb_fname); + errno = err; return NT_STATUS_UNSUCCESSFUL; } vfs->currentdir_offset = 0; -- Samba Shared Repository