The branch, master has been updated via 7fe39391c05 vfs: update status of SMB_VFS_LINKAT() via 6f4a013677d s3: smbd: Change hardlink_internals() to use a real directory fsp for SMB_VFS_LINKAT(). via 4fd18c27556 s3: smbd: Centralize error exits to an 'out' label in hardlink_internals(). via 11ea133e73e s3: VFS: syncops: Fix syncops_linkat() to cope with real directory fsps. via a3f6495002d s3: VFS: unityed_media: Fix um_linkat() to cope with real directory fsps. via 005cbeae174 s3: VFS: time_audit: Fix smb_time_audit_linkat() to cope with real directory fsps. via 035909ec590 s3: VFS: media_harmony: Fix mh_linkat() to cope with real directory fsps. via 2952cfe0eda s3: VFS: full_audit: Fix smb_full_audit_linkat() to cope with real directory fsps. via 2d6011e8c85 s3: VFS: gluster: Fix vfs_gluster_linkat() to cope with real directory fsps. via ea027e314ab s3: VFS: ceph: Fix cephwrap_linkat() to cope with real directory fsps. via 422da56fcb4 s3: VFS: cap: Fix cap_linkat() to cope with real directory fsps. via 6aa371b3940 Revert "VFS: shadow_copy2: Fixup shadow_copy2_mknodat() to correctly use the dirfsp path." via 557b968b5a3 Revert "VFS: shadow_copy2: Fixup shadow_copy2_symlinkat() to correctly use the dirfsp path." from d6f9172c929 samba-tool: Add a gpo command for removing VGP Files Group Policy
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 7fe39391c053ecd0cc2acc632498b9b93e9edc2a Author: Jeremy Allison <j...@samba.org> Date: Tue Jan 19 12:58:09 2021 -0800 vfs: update status of SMB_VFS_LINKAT() Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> Autobuild-User(master): Jeremy Allison <j...@samba.org> Autobuild-Date(master): Tue Feb 9 01:15:58 UTC 2021 on sn-devel-184 commit 6f4a013677d499b91a103c4f33d8f200e27e44aa Author: Jeremy Allison <j...@samba.org> Date: Tue Jan 19 12:57:51 2021 -0800 s3: smbd: Change hardlink_internals() to use a real directory fsp for SMB_VFS_LINKAT(). New VFS change. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> commit 4fd18c2755691f1343788d4a87ce000c7d84456f Author: Jeremy Allison <j...@samba.org> Date: Tue Jan 19 12:49:40 2021 -0800 s3: smbd: Centralize error exits to an 'out' label in hardlink_internals(). Makes it easier to add TALLOC_FREE's that are always called. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> commit 11ea133e73e3157ec6fac4629e0438fa3118dbca Author: Jeremy Allison <j...@samba.org> Date: Fri Feb 5 14:19:21 2021 -0800 s3: VFS: syncops: Fix syncops_linkat() to cope with real directory fsps. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> commit a3f6495002d8022ee873d599305a4565ff276bc3 Author: Jeremy Allison <j...@samba.org> Date: Wed Feb 3 14:45:36 2021 -0800 s3: VFS: unityed_media: Fix um_linkat() to cope with real directory fsps. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> commit 005cbeae174a94d981c56b73ec616e9598a7efc5 Author: Jeremy Allison <j...@samba.org> Date: Wed Feb 3 13:59:00 2021 -0800 s3: VFS: time_audit: Fix smb_time_audit_linkat() to cope with real directory fsps. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> commit 035909ec590c1bdbfe3f21c5f1a0d47b74e55f17 Author: Jeremy Allison <j...@samba.org> Date: Wed Feb 3 12:36:27 2021 -0800 s3: VFS: media_harmony: Fix mh_linkat() to cope with real directory fsps. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> commit 2952cfe0edaaec44ee1fbd1966fb9a50a9122399 Author: Jeremy Allison <j...@samba.org> Date: Mon Feb 1 13:08:46 2021 -0800 s3: VFS: full_audit: Fix smb_full_audit_linkat() to cope with real directory fsps. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> commit 2d6011e8c85d1cadf7ea951aa76a0dfc64017002 Author: Jeremy Allison <j...@samba.org> Date: Tue Jan 19 11:54:51 2021 -0800 s3: VFS: gluster: Fix vfs_gluster_linkat() to cope with real directory fsps. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> commit ea027e314ab2e9fc62ece7ef77bc9d03942cad70 Author: Jeremy Allison <j...@samba.org> Date: Tue Jan 19 11:04:12 2021 -0800 s3: VFS: ceph: Fix cephwrap_linkat() to cope with real directory fsps. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> commit 422da56fcb49f8c150c9ff068cfcbea1f9ade1a8 Author: Jeremy Allison <j...@samba.org> Date: Mon Feb 1 13:04:34 2021 -0800 s3: VFS: cap: Fix cap_linkat() to cope with real directory fsps. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> commit 6aa371b39406aa93ff7a05737ef5f12f3493d992 Author: Jeremy Allison <j...@samba.org> Date: Wed Feb 3 13:55:12 2021 -0800 Revert "VFS: shadow_copy2: Fixup shadow_copy2_mknodat() to correctly use the dirfsp path." This isn't needed as the existing code will refuse a new name with a non-zero twp in the target name. This reverts commit 2f74056a916aef9925cae76016378b993560e22b. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> commit 557b968b5a35e91262d65c40db79c81ce79f0d25 Author: Jeremy Allison <j...@samba.org> Date: Wed Feb 3 13:52:33 2021 -0800 Revert "VFS: shadow_copy2: Fixup shadow_copy2_symlinkat() to correctly use the dirfsp path." This isn't needed as the existing code will refuse a new name with a non-zero twp in the target name. This reverts commit ec27c4c44d1e9035639e033689fa739518f17132. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> ----------------------------------------------------------------------- Summary of changes: source3/modules/The_New_VFS.org | 2 +- source3/modules/The_New_VFS.txt | 2 +- source3/modules/vfs_cap.c | 62 ++++++++++++++++++++------- source3/modules/vfs_ceph.c | 30 ++++++++++---- source3/modules/vfs_full_audit.c | 22 +++++++++- source3/modules/vfs_glusterfs.c | 26 ++++++++++-- source3/modules/vfs_media_harmony.c | 36 +++++++++++++--- source3/modules/vfs_shadow_copy2.c | 25 +---------- source3/modules/vfs_syncops.c | 24 ++++++++--- source3/modules/vfs_time_audit.c | 12 +++++- source3/modules/vfs_unityed_media.c | 32 +++++++++++--- source3/smbd/trans2.c | 83 ++++++++++++++++++++++++++----------- 12 files changed, 259 insertions(+), 97 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/modules/The_New_VFS.org b/source3/modules/The_New_VFS.org index ca8ce7dc747..e6e9b155f95 100644 --- a/source3/modules/The_New_VFS.org +++ b/source3/modules/The_New_VFS.org @@ -252,7 +252,7 @@ whenever VFS access is done in a piecemeal fashion. | SMB_VFS_GETXATTRAT_SEND() | [[Enum][Enum]] | - | | SMB_VFS_KERNEL_FLOCK() | [[fsp][fsp]] | - | | SMB_VFS_LCHOWN() | [[Path][Path]] | Todo | -| SMB_VFS_LINKAT() | [[NsC][NsC]] | Todo | +| SMB_VFS_LINKAT() | [[NsC][NsC]] | - | | SMB_VFS_LINUX_SETLEASE() | [[fsp][fsp]] | - | | SMB_VFS_LISTXATTR() | [[Path][Path]] | Todo | | SMB_VFS_LOCK() | [[fsp][fsp]] | - | diff --git a/source3/modules/The_New_VFS.txt b/source3/modules/The_New_VFS.txt index 93b6d764779..f0a84731810 100644 --- a/source3/modules/The_New_VFS.txt +++ b/source3/modules/The_New_VFS.txt @@ -320,7 +320,7 @@ Table of Contents SMB_VFS_GETXATTRAT_SEND() [Enum] - SMB_VFS_KERNEL_FLOCK() [fsp] - SMB_VFS_LCHOWN() [Path] Todo - SMB_VFS_LINKAT() [NsC] Todo + SMB_VFS_LINKAT() [NsC] - SMB_VFS_LINUX_SETLEASE() [fsp] - SMB_VFS_LISTXATTR() [Path] Todo SMB_VFS_LOCK() [fsp] - diff --git a/source3/modules/vfs_cap.c b/source3/modules/vfs_cap.c index c2df73a7fe4..0975742598c 100644 --- a/source3/modules/vfs_cap.c +++ b/source3/modules/vfs_cap.c @@ -596,17 +596,27 @@ static int cap_linkat(vfs_handle_struct *handle, const struct smb_filename *new_smb_fname, int flags) { - char *capold = capencode(talloc_tos(), old_smb_fname->base_name); - char *capnew = capencode(talloc_tos(), new_smb_fname->base_name); + struct smb_filename *old_full_fname = NULL; + struct smb_filename *new_full_fname = NULL; + char *capold = NULL; + char *capnew = NULL; struct smb_filename *old_cap_smb_fname = NULL; struct smb_filename *new_cap_smb_fname = NULL; int saved_errno = 0; int ret; - if (!capold || !capnew) { - errno = ENOMEM; - return -1; + /* Process 'old' name. */ + old_full_fname = full_path_from_dirfsp_atname(talloc_tos(), + srcfsp, + old_smb_fname); + if (old_full_fname == NULL) { + goto nomem_out; + } + capold = capencode(talloc_tos(), old_full_fname->base_name); + if (capold == NULL) { + goto nomem_out; } + TALLOC_FREE(old_full_fname); old_cap_smb_fname = synthetic_smb_fname(talloc_tos(), capold, NULL, @@ -614,11 +624,21 @@ static int cap_linkat(vfs_handle_struct *handle, old_smb_fname->twrp, old_smb_fname->flags); if (old_cap_smb_fname == NULL) { - TALLOC_FREE(capold); - TALLOC_FREE(capnew); - errno = ENOMEM; - return -1; + goto nomem_out; + } + + /* Process 'new' name. */ + new_full_fname = full_path_from_dirfsp_atname(talloc_tos(), + dstfsp, + new_smb_fname); + if (new_full_fname == NULL) { + goto nomem_out; + } + capnew = capencode(talloc_tos(), new_full_fname->base_name); + if (capnew == NULL) { + goto nomem_out; } + TALLOC_FREE(new_full_fname); new_cap_smb_fname = synthetic_smb_fname(talloc_tos(), capnew, NULL, @@ -626,21 +646,20 @@ static int cap_linkat(vfs_handle_struct *handle, new_smb_fname->twrp, new_smb_fname->flags); if (new_cap_smb_fname == NULL) { - TALLOC_FREE(capold); - TALLOC_FREE(capnew); - TALLOC_FREE(old_cap_smb_fname); - errno = ENOMEM; - return -1; + goto nomem_out; } + ret = SMB_VFS_NEXT_LINKAT(handle, - srcfsp, + handle->conn->cwd_fsp, old_cap_smb_fname, - dstfsp, + handle->conn->cwd_fsp, new_cap_smb_fname, flags); if (ret == -1) { saved_errno = errno; } + TALLOC_FREE(old_full_fname); + TALLOC_FREE(old_full_fname); TALLOC_FREE(capold); TALLOC_FREE(capnew); TALLOC_FREE(old_cap_smb_fname); @@ -649,6 +668,17 @@ static int cap_linkat(vfs_handle_struct *handle, errno = saved_errno; } return ret; + + nomem_out: + + TALLOC_FREE(old_full_fname); + TALLOC_FREE(old_full_fname); + TALLOC_FREE(capold); + TALLOC_FREE(capnew); + TALLOC_FREE(old_cap_smb_fname); + TALLOC_FREE(new_cap_smb_fname); + errno = ENOMEM; + return -1; } static int cap_mknodat(vfs_handle_struct *handle, diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c index a34ed8eab14..9da074a31ce 100644 --- a/source3/modules/vfs_ceph.c +++ b/source3/modules/vfs_ceph.c @@ -1108,18 +1108,34 @@ static int cephwrap_linkat(struct vfs_handle_struct *handle, const struct smb_filename *new_smb_fname, int flags) { + struct smb_filename *full_fname_old = NULL; + struct smb_filename *full_fname_new = NULL; int result = -1; - DBG_DEBUG("[CEPH] link(%p, %s, %s)\n", handle, - old_smb_fname->base_name, - new_smb_fname->base_name); - SMB_ASSERT(srcfsp == srcfsp->conn->cwd_fsp); - SMB_ASSERT(dstfsp == dstfsp->conn->cwd_fsp); + full_fname_old = full_path_from_dirfsp_atname(talloc_tos(), + srcfsp, + old_smb_fname); + if (full_fname_old == NULL) { + return -1; + } + full_fname_new = full_path_from_dirfsp_atname(talloc_tos(), + dstfsp, + new_smb_fname); + if (full_fname_new == NULL) { + TALLOC_FREE(full_fname_old); + return -1; + } + + DBG_DEBUG("[CEPH] link(%p, %s, %s)\n", handle, + full_fname_old->base_name, + full_fname_new->base_name); result = ceph_link(handle->data, - old_smb_fname->base_name, - new_smb_fname->base_name); + full_fname_old->base_name, + full_fname_new->base_name); DBG_DEBUG("[CEPH] link(...) = %d\n", result); + TALLOC_FREE(full_fname_old); + TALLOC_FREE(full_fname_new); WRAP_RETURN(result); } diff --git a/source3/modules/vfs_full_audit.c b/source3/modules/vfs_full_audit.c index 71577c8aaeb..7d47871680d 100644 --- a/source3/modules/vfs_full_audit.c +++ b/source3/modules/vfs_full_audit.c @@ -1870,8 +1870,23 @@ static int smb_full_audit_linkat(vfs_handle_struct *handle, const struct smb_filename *new_smb_fname, int flags) { + struct smb_filename *old_full_fname = NULL; + struct smb_filename *new_full_fname = NULL; int result; + old_full_fname = full_path_from_dirfsp_atname(talloc_tos(), + srcfsp, + old_smb_fname); + if (old_full_fname == NULL) { + return -1; + } + new_full_fname = full_path_from_dirfsp_atname(talloc_tos(), + dstfsp, + new_smb_fname); + if (new_full_fname == NULL) { + TALLOC_FREE(old_full_fname); + return -1; + } result = SMB_VFS_NEXT_LINKAT(handle, srcfsp, old_smb_fname, @@ -1883,8 +1898,11 @@ static int smb_full_audit_linkat(vfs_handle_struct *handle, (result >= 0), handle, "%s|%s", - smb_fname_str_do_log(handle->conn, old_smb_fname), - smb_fname_str_do_log(handle->conn, new_smb_fname)); + smb_fname_str_do_log(handle->conn, old_full_fname), + smb_fname_str_do_log(handle->conn, new_full_fname)); + + TALLOC_FREE(old_full_fname); + TALLOC_FREE(new_full_fname); return result; } diff --git a/source3/modules/vfs_glusterfs.c b/source3/modules/vfs_glusterfs.c index 25ff945f5f1..b1fd2a7f098 100644 --- a/source3/modules/vfs_glusterfs.c +++ b/source3/modules/vfs_glusterfs.c @@ -1894,15 +1894,33 @@ static int vfs_gluster_linkat(struct vfs_handle_struct *handle, int flags) { int ret; + struct smb_filename *full_fname_old = NULL; + struct smb_filename *full_fname_new = NULL; START_PROFILE(syscall_linkat); - SMB_ASSERT(srcfsp == srcfsp->conn->cwd_fsp); - SMB_ASSERT(dstfsp == dstfsp->conn->cwd_fsp); + full_fname_old = full_path_from_dirfsp_atname(talloc_tos(), + srcfsp, + old_smb_fname); + if (full_fname_old == NULL) { + END_PROFILE(syscall_linkat); + return -1; + } + full_fname_new = full_path_from_dirfsp_atname(talloc_tos(), + dstfsp, + new_smb_fname); + if (full_fname_new == NULL) { + TALLOC_FREE(full_fname_old); + END_PROFILE(syscall_linkat); + return -1; + } ret = glfs_link(handle->data, - old_smb_fname->base_name, - new_smb_fname->base_name); + full_fname_old->base_name, + full_fname_new->base_name); + + TALLOC_FREE(full_fname_old); + TALLOC_FREE(full_fname_new); END_PROFILE(syscall_linkat); return ret; diff --git a/source3/modules/vfs_media_harmony.c b/source3/modules/vfs_media_harmony.c index 307d7afa963..fb5a082c98e 100644 --- a/source3/modules/vfs_media_harmony.c +++ b/source3/modules/vfs_media_harmony.c @@ -1721,12 +1721,34 @@ static int mh_linkat(vfs_handle_struct *handle, int flags) { int status; + struct smb_filename *old_full_fname = NULL; struct smb_filename *oldclientFname = NULL; + struct smb_filename *new_full_fname = NULL; struct smb_filename *newclientFname = NULL; DEBUG(MH_INFO_DEBUG, ("Entering mh_linkat\n")); - if (!is_in_media_files(old_smb_fname->base_name) && - !is_in_media_files(new_smb_fname->base_name)) { + + old_full_fname = full_path_from_dirfsp_atname(talloc_tos(), + srcfsp, + old_smb_fname); + if (old_full_fname == NULL) { + status = -1; + goto err; + } + + new_full_fname = full_path_from_dirfsp_atname(talloc_tos(), + dstfsp, + new_smb_fname); + if (new_full_fname == NULL) { + status = -1; + goto err; + } + + if (!is_in_media_files(old_full_fname->base_name) && + !is_in_media_files(new_full_fname->base_name)) { + TALLOC_FREE(old_full_fname); + TALLOC_FREE(new_full_fname); + status = SMB_VFS_NEXT_LINKAT(handle, srcfsp, old_smb_fname, @@ -1737,24 +1759,26 @@ static int mh_linkat(vfs_handle_struct *handle, } if ((status = alloc_get_client_smb_fname(handle, talloc_tos(), - old_smb_fname, + old_full_fname, &oldclientFname))) { goto err; } if ((status = alloc_get_client_smb_fname(handle, talloc_tos(), - new_smb_fname, + new_full_fname, &newclientFname))) { goto err; } status = SMB_VFS_NEXT_LINKAT(handle, - srcfsp, + handle->conn->cwd_fsp, oldclientFname, - dstfsp, + handle->conn->cwd_fsp, newclientFname, flags); err: + TALLOC_FREE(old_full_fname); + TALLOC_FREE(new_full_fname); TALLOC_FREE(newclientFname); TALLOC_FREE(oldclientFname); out: diff --git a/source3/modules/vfs_shadow_copy2.c b/source3/modules/vfs_shadow_copy2.c index ae8afec11b1..227ac148260 100644 --- a/source3/modules/vfs_shadow_copy2.c +++ b/source3/modules/vfs_shadow_copy2.c @@ -1076,7 +1076,6 @@ static int shadow_copy2_symlinkat(vfs_handle_struct *handle, struct files_struct *dirfsp, const struct smb_filename *new_smb_fname) { - struct smb_filename *full_fname = NULL; time_t timestamp_old = 0; time_t timestamp_new = 0; char *snappath_old = NULL; @@ -1091,25 +1090,15 @@ static int shadow_copy2_symlinkat(vfs_handle_struct *handle, NULL)) { return -1; } - - full_fname = full_path_from_dirfsp_atname(talloc_tos(), - dirfsp, - new_smb_fname); - if (full_fname == NULL) { - return -1; - } - if (!shadow_copy2_strip_snapshot_internal(talloc_tos(), handle, - full_fname, + new_smb_fname, ×tamp_new, NULL, &snappath_new, NULL)) { - TALLOC_FREE(full_fname); return -1; } - TALLOC_FREE(full_fname); if ((timestamp_old != 0) || (timestamp_new != 0)) { errno = EROFS; return -1; @@ -1636,23 +1625,13 @@ static int shadow_copy2_mknodat(vfs_handle_struct *handle, mode_t mode, SMB_DEV_T dev) { - struct smb_filename *full_fname = NULL; time_t timestamp = 0; - full_fname = full_path_from_dirfsp_atname(talloc_tos(), - dirfsp, - smb_fname); - if (full_fname == NULL) { - return -1; - } - if (!shadow_copy2_strip_snapshot(talloc_tos(), handle, - full_fname, + smb_fname, ×tamp, NULL)) { - TALLOC_FREE(full_fname); return -1; } - TALLOC_FREE(full_fname); if (timestamp != 0) { errno = EROFS; return -1; diff --git a/source3/modules/vfs_syncops.c b/source3/modules/vfs_syncops.c index 9c633456ad1..e36cb79e64d 100644 --- a/source3/modules/vfs_syncops.c +++ b/source3/modules/vfs_syncops.c @@ -196,14 +196,26 @@ static int syncops_linkat(vfs_handle_struct *handle, { int ret; struct syncops_config_data *config; + struct smb_filename *old_full_fname = NULL; + struct smb_filename *new_full_fname = NULL; SMB_VFS_HANDLE_GET_DATA(handle, config, struct syncops_config_data, return -1); - SMB_ASSERT(srcfsp == srcfsp->conn->cwd_fsp); - SMB_ASSERT(dstfsp == dstfsp->conn->cwd_fsp); - + old_full_fname = full_path_from_dirfsp_atname(talloc_tos(), + srcfsp, + old_smb_fname); + if (old_full_fname == NULL) { + return -1; + } + new_full_fname = full_path_from_dirfsp_atname(talloc_tos(), + dstfsp, + new_smb_fname); + if (new_full_fname == NULL) { + TALLOC_FREE(old_full_fname); + return -1; + } ret = SMB_VFS_NEXT_LINKAT(handle, srcfsp, old_smb_fname, @@ -212,9 +224,11 @@ static int syncops_linkat(vfs_handle_struct *handle, flags); if (ret == 0 && config->onmeta && !config->disable) { - syncops_two_names(old_smb_fname->base_name, - new_smb_fname->base_name); + syncops_two_names(old_full_fname->base_name, + new_full_fname->base_name); } + TALLOC_FREE(old_full_fname); + TALLOC_FREE(new_full_fname); return ret; } diff --git a/source3/modules/vfs_time_audit.c b/source3/modules/vfs_time_audit.c index a56839c77ad..db9e9d3cf12 100644 --- a/source3/modules/vfs_time_audit.c +++ b/source3/modules/vfs_time_audit.c @@ -1497,10 +1497,19 @@ static int smb_time_audit_linkat(vfs_handle_struct *handle, const struct smb_filename *new_smb_fname, int flags) { + struct smb_filename *new_full_fname = NULL; int result; struct timespec ts1,ts2; double timediff; + new_full_fname = full_path_from_dirfsp_atname(talloc_tos(), + dstfsp, + new_smb_fname); + if (new_full_fname == NULL) { + errno = ENOMEM; + return -1; + } + clock_gettime_mono(&ts1); result = SMB_VFS_NEXT_LINKAT(handle, srcfsp, @@ -1513,9 +1522,10 @@ static int smb_time_audit_linkat(vfs_handle_struct *handle, if (timediff > audit_timeout) { smb_time_audit_log_fname("linkat", timediff, - new_smb_fname->base_name); + new_full_fname->base_name); } + TALLOC_FREE(new_full_fname); return result; } diff --git a/source3/modules/vfs_unityed_media.c b/source3/modules/vfs_unityed_media.c index 4ad2d2bb656..fea026e82c9 100644 --- a/source3/modules/vfs_unityed_media.c +++ b/source3/modules/vfs_unityed_media.c @@ -1358,12 +1358,30 @@ static int um_linkat(vfs_handle_struct *handle, int flags) { int status; + struct smb_filename *old_full_fname = NULL; + struct smb_filename *new_full_fname = NULL; struct smb_filename *old_client_fname = NULL; struct smb_filename *new_client_fname = NULL; + old_full_fname = full_path_from_dirfsp_atname(talloc_tos(), + srcfsp, -- Samba Shared Repository