diff options
author | Jeremy Allison <jra@samba.org> | 2019-08-09 15:36:52 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2019-08-16 19:52:34 +0000 |
commit | 7978814d3b5a0b41b00b7c6043b9a12b88ca5b12 (patch) | |
tree | 9486e985267e36b539c4fe366873c3bda17e7136 /source3/modules/vfs_unityed_media.c | |
parent | 16a455d3c3816a0a0fa82af8b04fa1c6fe6947a1 (diff) | |
download | samba-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.c | 59 |
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, |