s3: VFS: Complete the removal of SMB_VFS_CHOWN()
[samba.git] / examples / VFS / skel_transparent.c
index 9b294ec6877a76e767ab4e9c711763a29cd86515..fd19e433ba3752d7efb412ef6601cbb1f974f1f2 100644 (file)
@@ -164,17 +164,15 @@ static void skel_rewind_dir(vfs_handle_struct *handle, DIR *dirp)
        SMB_VFS_NEXT_REWINDDIR(handle, dirp);
 }
 
-static int skel_mkdir(vfs_handle_struct *handle,
+static int skel_mkdirat(vfs_handle_struct *handle,
+               struct files_struct *dirfsp,
                const struct smb_filename *smb_fname,
                mode_t mode)
 {
-       return SMB_VFS_NEXT_MKDIR(handle, smb_fname, mode);
-}
-
-static int skel_rmdir(vfs_handle_struct *handle,
-               const struct smb_filename *smb_fname)
-{
-       return SMB_VFS_NEXT_RMDIR(handle, smb_fname);
+       return SMB_VFS_NEXT_MKDIRAT(handle,
+                       dirfsp,
+                       smb_fname,
+                       mode);
 }
 
 static int skel_closedir(vfs_handle_struct *handle, DIR *dir)
@@ -458,10 +456,15 @@ static uint64_t skel_get_alloc_size(struct vfs_handle_struct *handle,
        return SMB_VFS_NEXT_GET_ALLOC_SIZE(handle, fsp, sbuf);
 }
 
-static int skel_unlink(vfs_handle_struct *handle,
-                      const struct smb_filename *smb_fname)
+static int skel_unlinkat(vfs_handle_struct *handle,
+                       struct files_struct *dirfsp,
+                       const struct smb_filename *smb_fname,
+                       int flags)
 {
-       return SMB_VFS_NEXT_UNLINK(handle, smb_fname);
+       return SMB_VFS_NEXT_UNLINKAT(handle,
+                       dirfsp,
+                       smb_fname,
+                       flags);
 }
 
 static int skel_chmod(vfs_handle_struct *handle,
@@ -477,14 +480,6 @@ static int skel_fchmod(vfs_handle_struct *handle, files_struct *fsp,
        return SMB_VFS_NEXT_FCHMOD(handle, fsp, mode);
 }
 
-static int skel_chown(vfs_handle_struct *handle,
-                       const struct smb_filename *smb_fname,
-                       uid_t uid,
-                       gid_t gid)
-{
-       return SMB_VFS_NEXT_CHOWN(handle, smb_fname, uid, gid);
-}
-
 static int skel_fchown(vfs_handle_struct *handle, files_struct *fsp,
                       uid_t uid, gid_t gid)
 {
@@ -543,6 +538,21 @@ static int skel_kernel_flock(struct vfs_handle_struct *handle,
        return SMB_VFS_NEXT_KERNEL_FLOCK(handle, fsp, share_mode, access_mask);
 }
 
+static int skel_fcntl(struct vfs_handle_struct *handle,
+                     struct files_struct *fsp, int cmd, va_list cmd_arg)
+{
+       void *arg;
+       va_list dup_cmd_arg;
+       int result;
+
+       va_copy(dup_cmd_arg, cmd_arg);
+       arg = va_arg(dup_cmd_arg, void *);
+       result = SMB_VFS_NEXT_FCNTL(handle, fsp, cmd, arg);
+       va_end(dup_cmd_arg);
+
+       return result;
+}
+
 static int skel_linux_setlease(struct vfs_handle_struct *handle,
                               struct files_struct *fsp, int leasetype)
 {
@@ -556,26 +566,28 @@ static bool skel_getlock(vfs_handle_struct *handle, files_struct *fsp,
        return SMB_VFS_NEXT_GETLOCK(handle, fsp, poffset, pcount, ptype, ppid);
 }
 
-static int skel_symlink(vfs_handle_struct *handle,
+static int skel_symlinkat(vfs_handle_struct *handle,
                        const char *link_contents,
+                       struct files_struct *dirfsp,
                        const struct smb_filename *new_smb_fname)
 {
-       return SMB_VFS_NEXT_SYMLINK(handle, link_contents, new_smb_fname);
+       return SMB_VFS_NEXT_SYMLINKAT(handle,
+                               link_contents,
+                               dirfsp,
+                               new_smb_fname);
 }
 
-static int skel_vfs_readlink(vfs_handle_struct *handle,
+static int skel_vfs_readlinkat(vfs_handle_struct *handle,
+                       files_struct *dirfsp,
                        const struct smb_filename *smb_fname,
                        char *buf,
                        size_t bufsiz)
 {
-       return SMB_VFS_NEXT_READLINK(handle, smb_fname, buf, bufsiz);
-}
-
-static int skel_link(vfs_handle_struct *handle,
-                       const struct smb_filename *old_smb_fname,
-                       const struct smb_filename *new_smb_fname)
-{
-       return SMB_VFS_NEXT_LINK(handle, old_smb_fname, new_smb_fname);
+       return SMB_VFS_NEXT_READLINKAT(handle,
+                       dirfsp,
+                       smb_fname,
+                       buf,
+                       bufsiz);
 }
 
 static int skel_linkat(vfs_handle_struct *handle,
@@ -593,12 +605,17 @@ static int skel_linkat(vfs_handle_struct *handle,
                        flags);
 }
 
-static int skel_mknod(vfs_handle_struct *handle,
+static int skel_mknodat(vfs_handle_struct *handle,
+                       files_struct *dirfsp,
                        const struct smb_filename *smb_fname,
                        mode_t mode,
                        SMB_DEV_T dev)
 {
-       return SMB_VFS_NEXT_MKNOD(handle, smb_fname, mode, dev);
+       return SMB_VFS_NEXT_MKNODAT(handle,
+                       dirfsp,
+                       smb_fname,
+                       mode,
+                       dev);
 }
 
 static struct smb_filename *skel_realpath(vfs_handle_struct *handle,
@@ -1325,8 +1342,7 @@ static struct vfs_fn_pointers skel_transparent_fns = {
        .seekdir_fn = skel_seekdir,
        .telldir_fn = skel_telldir,
        .rewind_dir_fn = skel_rewind_dir,
-       .mkdir_fn = skel_mkdir,
-       .rmdir_fn = skel_rmdir,
+       .mkdirat_fn = skel_mkdirat,
        .closedir_fn = skel_closedir,
 
        /* File operations */
@@ -1350,10 +1366,9 @@ static struct vfs_fn_pointers skel_transparent_fns = {
        .fstat_fn = skel_fstat,
        .lstat_fn = skel_lstat,
        .get_alloc_size_fn = skel_get_alloc_size,
-       .unlink_fn = skel_unlink,
+       .unlinkat_fn = skel_unlinkat,
        .chmod_fn = skel_chmod,
        .fchmod_fn = skel_fchmod,
-       .chown_fn = skel_chown,
        .fchown_fn = skel_fchown,
        .lchown_fn = skel_lchown,
        .chdir_fn = skel_chdir,
@@ -1363,13 +1378,13 @@ static struct vfs_fn_pointers skel_transparent_fns = {
        .fallocate_fn = skel_fallocate,
        .lock_fn = skel_lock,
        .kernel_flock_fn = skel_kernel_flock,
+       .fcntl_fn = skel_fcntl,
        .linux_setlease_fn = skel_linux_setlease,
        .getlock_fn = skel_getlock,
-       .symlink_fn = skel_symlink,
-       .readlink_fn = skel_vfs_readlink,
-       .link_fn = skel_link,
+       .symlinkat_fn = skel_symlinkat,
+       .readlinkat_fn = skel_vfs_readlinkat,
        .linkat_fn = skel_linkat,
-       .mknod_fn = skel_mknod,
+       .mknodat_fn = skel_mknodat,
        .realpath_fn = skel_realpath,
        .chflags_fn = skel_chflags,
        .file_id_create_fn = skel_file_id_create,