]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
vfs_glusterfs: Use glfs_readlinkat() for SMB_VFS_READ_DFS_PATHAT
authorAnoop C S <anoopcs@samba.org>
Fri, 19 Aug 2022 07:38:42 +0000 (13:08 +0530)
committerJeremy Allison <jra@samba.org>
Fri, 26 Aug 2022 16:31:38 +0000 (16:31 +0000)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15157

Signed-off-by: Anoop C S <anoopcs@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/modules/vfs_glusterfs.c

index c47089d5d4d19a07275469377fc016d631bddeba..1ecf21387a2003954489451a9affa53ffa124c02 100644 (file)
@@ -2479,6 +2479,9 @@ static NTSTATUS vfs_gluster_read_dfs_pathat(struct vfs_handle_struct *handle,
        struct stat st;
        struct smb_filename *full_fname = NULL;
        int ret;
+#ifdef HAVE_GFAPI_VER_7_11
+       glfs_fd_t *pglfd = NULL;
+#endif
 
        if (is_named_stream(smb_fname)) {
                status = NT_STATUS_OBJECT_NAME_NOT_FOUND;
@@ -2514,10 +2517,23 @@ static NTSTATUS vfs_gluster_read_dfs_pathat(struct vfs_handle_struct *handle,
                goto err;
        }
 
+#ifdef HAVE_GFAPI_VER_7_11
+       pglfd = vfs_gluster_fetch_glfd(handle, dirfsp);
+       if (pglfd == NULL) {
+               DBG_ERR("Failed to fetch gluster fd\n");
+               return NT_STATUS_OBJECT_NAME_NOT_FOUND;
+       }
+
+       referral_len = glfs_readlinkat(pglfd,
+                                      smb_fname->base_name,
+                                      link_target,
+                                      bufsize - 1);
+#else
        referral_len = glfs_readlink(handle->data,
                                full_fname->base_name,
                                link_target,
                                bufsize - 1);
+#endif
        if (referral_len < 0) {
                if (errno == EINVAL) {
                        DBG_INFO("%s is not a link.\n", full_fname->base_name);