From: Jeremy Allison Date: Thu, 5 Sep 2019 17:33:38 +0000 (-0700) Subject: s3: VFS: vfs_snapper. Implement mkdirat(). X-Git-Tag: talloc-2.3.1~895 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=41f9c49eec2ed6a9a796064349d06c38bc1477fc;p=thirdparty%2Fsamba.git s3: VFS: vfs_snapper. Implement mkdirat(). Currently identical to mkdir(). Signed-off-by: Jeremy Allison Reviewed-by: Ralph Boehme --- 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,