[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Tue May 17 20:21:02 UTC 2022
The branch, master has been updated
via 0633d8837ce vfs_glusterfs: Fix fdopendir implementation
via 767ede0064c vfs_glusterfs: Fix get_real_filename_at implementation
from d3c678233c4 s3:smbd: Covscan: remove dead code
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 0633d8837ce4ddcf7f46c5f320e8d0b3142177fa
Author: Anoop C S <anoopcs at samba.org>
Date: Fri May 13 16:46:01 2022 +0530
vfs_glusterfs: Fix fdopendir implementation
Directory stream returned for fdopendir() within vfs_glusterfs doesn't
correctly point to required directory fd. Since GlusterFS still don't
support *at() variant syscalls we will have to rely on full path/name
constructed out of fsp.
Signed-off-by: Anoop C S <anoopcs at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Tue May 17 20:20:05 UTC 2022 on sn-devel-184
commit 767ede0064ce9a9d0576a337b2059f4ba3a6adeb
Author: Anoop C S <anoopcs at samba.org>
Date: Mon May 2 15:15:53 2022 +0530
vfs_glusterfs: Fix get_real_filename_at implementation
glfd(gluster fd) used in glfs_fgetxattr() for get_real_filename_at()
implementation doesn't correctly point to required directory fd. Since
GlusterFS still don't support *at() variant syscalls we will have to
rely on full path/name constructed out of dirfsp.
Signed-off-by: Anoop C S <anoopcs at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source3/modules/vfs_glusterfs.c | 72 ++++++++++++++++++++++++++++++++++++-----
1 file changed, 64 insertions(+), 8 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/modules/vfs_glusterfs.c b/source3/modules/vfs_glusterfs.c
index f526d413373..c06829a1799 100644
--- a/source3/modules/vfs_glusterfs.c
+++ b/source3/modules/vfs_glusterfs.c
@@ -625,12 +625,39 @@ static DIR *vfs_gluster_fdopendir(struct vfs_handle_struct *handle,
files_struct *fsp, const char *mask,
uint32_t attributes)
{
- glfs_fd_t *glfd = vfs_gluster_fetch_glfd(handle, fsp);
+ glfs_fd_t *glfd = NULL;
+ struct smb_filename *full_fname = NULL;
+ struct smb_filename *smb_fname_dot = NULL;
+
+ smb_fname_dot = synthetic_smb_fname(fsp->fsp_name,
+ ".",
+ NULL,
+ NULL,
+ 0,
+ 0);
+
+ if (smb_fname_dot == NULL) {
+ return NULL;
+ }
+
+ full_fname = full_path_from_dirfsp_atname(talloc_tos(),
+ fsp,
+ smb_fname_dot);
+ if (full_fname == NULL) {
+ TALLOC_FREE(smb_fname_dot);
+ return NULL;
+ }
+
+ glfd = glfs_opendir(handle->data, full_fname->base_name);
if (glfd == NULL) {
- DBG_ERR("Failed to fetch gluster fd\n");
+ TALLOC_FREE(full_fname);
+ TALLOC_FREE(smb_fname_dot);
return NULL;
}
+ TALLOC_FREE(full_fname);
+ TALLOC_FREE(smb_fname_dot);
+
return (DIR *)glfd;
}
@@ -2006,31 +2033,60 @@ static NTSTATUS vfs_gluster_get_real_filename_at(
TALLOC_CTX *mem_ctx,
char **found_name)
{
- glfs_fd_t *glfd = vfs_gluster_fetch_glfd(handle, dirfsp);
int ret;
char key_buf[GLUSTER_NAME_MAX + 64];
char val_buf[GLUSTER_NAME_MAX + 1];
+ NTSTATUS status = NT_STATUS_OK;
+ struct smb_filename *smb_fname_dot = NULL;
+ struct smb_filename *full_fname = NULL;
+
+ smb_fname_dot = synthetic_smb_fname(mem_ctx,
+ ".",
+ NULL,
+ NULL,
+ 0,
+ 0);
+ if (smb_fname_dot == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ full_fname = full_path_from_dirfsp_atname(talloc_tos(),
+ dirfsp,
+ smb_fname_dot);
+ if (full_fname == NULL) {
+ TALLOC_FREE(smb_fname_dot);
+ return NT_STATUS_NO_MEMORY;
+ }
if (strlen(name) >= GLUSTER_NAME_MAX) {
- return NT_STATUS_OBJECT_NAME_INVALID;
+ status = NT_STATUS_OBJECT_NAME_INVALID;
+ goto out;
}
snprintf(key_buf, GLUSTER_NAME_MAX + 64,
"glusterfs.get_real_filename:%s", name);
- ret = glfs_fgetxattr(glfd, key_buf, val_buf, GLUSTER_NAME_MAX + 1);
+ ret = glfs_getxattr(handle->data, full_fname->base_name,
+ key_buf, val_buf, GLUSTER_NAME_MAX + 1);
if (ret == -1) {
if (errno == ENOATTR) {
errno = ENOENT;
}
- return map_nt_error_from_unix(errno);
+ status = map_nt_error_from_unix(errno);
+ goto out;
}
*found_name = talloc_strdup(mem_ctx, val_buf);
if (found_name[0] == NULL) {
- return NT_STATUS_NO_MEMORY;
+ status = NT_STATUS_NO_MEMORY;
+ goto out;
}
- return NT_STATUS_OK;
+
+out:
+ TALLOC_FREE(smb_fname_dot);
+ TALLOC_FREE(full_fname);
+
+ return status;
}
static const char *vfs_gluster_connectpath(struct vfs_handle_struct *handle,
--
Samba Shared Repository
More information about the samba-cvs
mailing list