From 41f9c49eec2ed6a9a796064349d06c38bc1477fc Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 5 Sep 2019 10:33:38 -0700 Subject: [PATCH] s3: VFS: vfs_snapper. Implement mkdirat(). Currently identical to mkdir(). Signed-off-by: Jeremy Allison Reviewed-by: Ralph Boehme --- source3/modules/vfs_snapper.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/source3/modules/vfs_snapper.c b/source3/modules/vfs_snapper.c index 79107b39997..1274f1f14a2 100644 --- a/source3/modules/vfs_snapper.c +++ b/source3/modules/vfs_snapper.c @@ -2562,6 +2562,27 @@ static int snapper_gmt_mkdir(vfs_handle_struct *handle, return SMB_VFS_NEXT_MKDIR(handle, fname, mode); } +static int snapper_gmt_mkdirat(vfs_handle_struct *handle, + struct files_struct *dirfsp, + const struct smb_filename *fname, + mode_t mode) +{ + time_t timestamp = 0; + + if (!snapper_gmt_strip_snapshot(talloc_tos(), handle, fname->base_name, + ×tamp, NULL)) { + return -1; + } + if (timestamp != 0) { + errno = EROFS; + return -1; + } + return SMB_VFS_NEXT_MKDIRAT(handle, + dirfsp, + fname, + mode); +} + static int snapper_gmt_rmdir(vfs_handle_struct *handle, const struct smb_filename *fname) { @@ -2903,6 +2924,7 @@ static struct vfs_fn_pointers snapper_fns = { .get_nt_acl_fn = snapper_gmt_get_nt_acl, .fget_nt_acl_fn = snapper_gmt_fget_nt_acl, .mkdir_fn = snapper_gmt_mkdir, + .mkdirat_fn = snapper_gmt_mkdirat, .rmdir_fn = snapper_gmt_rmdir, .getxattr_fn = snapper_gmt_getxattr, .getxattrat_send_fn = vfs_not_implemented_getxattrat_send, -- 2.47.3