summaryrefslogtreecommitdiff
path: root/source3/modules/vfs_unityed_media.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2019-08-09 15:36:52 -0700
committerJeremy Allison <jra@samba.org>2019-08-16 19:52:34 +0000
commit7978814d3b5a0b41b00b7c6043b9a12b88ca5b12 (patch)
tree9486e985267e36b539c4fe366873c3bda17e7136 /source3/modules/vfs_unityed_media.c
parent16a455d3c3816a0a0fa82af8b04fa1c6fe6947a1 (diff)
downloadsamba-7978814d3b5a0b41b00b7c6043b9a12b88ca5b12.tar.gz
s3: VFS: vfs_unityed_media. Implement renameat().
Currently identical to rename(). Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
Diffstat (limited to 'source3/modules/vfs_unityed_media.c')
-rw-r--r--source3/modules/vfs_unityed_media.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/source3/modules/vfs_unityed_media.c b/source3/modules/vfs_unityed_media.c
index cc531d46701..27c6e5cb828 100644
--- a/source3/modules/vfs_unityed_media.c
+++ b/source3/modules/vfs_unityed_media.c
@@ -1040,6 +1040,64 @@ err:
return status;
}
+static int um_renameat(vfs_handle_struct *handle,
+ files_struct *srcfsp,
+ const struct smb_filename *smb_fname_src,
+ files_struct *dstfsp,
+ const struct smb_filename *smb_fname_dst)
+{
+ int status;
+ struct smb_filename *src_client_fname = NULL;
+ struct smb_filename *dst_client_fname = NULL;
+
+ DEBUG(10, ("Entering with "
+ "smb_fname_src->base_name '%s', "
+ "smb_fname_dst->base_name '%s'\n",
+ smb_fname_src->base_name,
+ smb_fname_dst->base_name));
+
+ if (!is_in_media_files(smb_fname_src->base_name)
+ &&
+ !is_in_media_files(smb_fname_dst->base_name)) {
+ return SMB_VFS_NEXT_RENAMEAT(handle,
+ srcfsp,
+ smb_fname_src,
+ dstfsp,
+ smb_fname_dst);
+ }
+
+ status = alloc_get_client_smb_fname(handle, talloc_tos(),
+ smb_fname_src,
+ &src_client_fname);
+ if (status != 0) {
+ goto err;
+ }
+
+ status = alloc_get_client_smb_fname(handle, talloc_tos(),
+ smb_fname_dst,
+ &dst_client_fname);
+
+ if (status != 0) {
+ goto err;
+ }
+
+ status = SMB_VFS_NEXT_RENAMEAT(handle,
+ srcfsp,
+ src_client_fname,
+ dstfsp,
+ dst_client_fname);
+
+err:
+ TALLOC_FREE(dst_client_fname);
+ TALLOC_FREE(src_client_fname);
+ DEBUG(10, ("Leaving with smb_fname_src->base_name '%s',"
+ " smb_fname_dst->base_name '%s'\n",
+ smb_fname_src->base_name,
+ smb_fname_dst->base_name));
+ return status;
+}
+
+
/*
* Success: return 0
* Failure: set errno, return -1
@@ -1882,6 +1940,7 @@ static struct vfs_fn_pointers vfs_um_fns = {
.open_fn = um_open,
.create_file_fn = um_create_file,
.rename_fn = um_rename,
+ .renameat_fn = um_renameat,
.stat_fn = um_stat,
.lstat_fn = um_lstat,
.fstat_fn = um_fstat,