smbd: vfs: convert link_contents arg of SMB_VFS_SYMLINKAT() to struct smb_filename
[samba.git] / examples / VFS / skel_transparent.c
index 654c0e6ca851d816e8e0cca028f2ba372cb9c2cf..235d4533df33753a1882a260ed141f1222a12153 100644 (file)
@@ -32,7 +32,7 @@
 /* If you take this file as template for your module
  * please make sure that you remove all skel_XXX() functions you don't
  * want to implement!! The passthrough operations are not
- * neccessary in a real module.
+ * necessary in a real module.
  *
  * --metze
  */
@@ -100,12 +100,32 @@ static NTSTATUS skel_get_dfs_referrals(struct vfs_handle_struct *handle,
        return SMB_VFS_NEXT_GET_DFS_REFERRALS(handle, r);
 }
 
-static DIR *skel_opendir(vfs_handle_struct *handle,
-                       const struct smb_filename *smb_fname,
-                       const char *mask,
-                       uint32_t attr)
+static NTSTATUS skel_create_dfs_pathat(struct vfs_handle_struct *handle,
+                               struct files_struct *dirfsp,
+                               const struct smb_filename *smb_fname,
+                               const struct referral *reflist,
+                               size_t referral_count)
+{
+       return SMB_VFS_NEXT_CREATE_DFS_PATHAT(handle,
+                                       dirfsp,
+                                       smb_fname,
+                                       reflist,
+                                       referral_count);
+}
+
+static NTSTATUS skel_read_dfs_pathat(struct vfs_handle_struct *handle,
+                               TALLOC_CTX *mem_ctx,
+                               struct files_struct *dirfsp,
+                               const struct smb_filename *smb_fname,
+                               struct referral **ppreflist,
+                               size_t *preferral_count)
 {
-       return SMB_VFS_NEXT_OPENDIR(handle, smb_fname, mask, attr);
+       return SMB_VFS_NEXT_READ_DFS_PATHAT(handle,
+                                       mem_ctx,
+                                       dirfsp,
+                                       smb_fname,
+                                       ppreflist,
+                                       preferral_count);
 }
 
 static NTSTATUS skel_snap_check_path(struct vfs_handle_struct *handle,
@@ -164,17 +184,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 +476,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 +500,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 +558,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)
 {
@@ -557,7 +587,7 @@ static bool skel_getlock(vfs_handle_struct *handle, files_struct *fsp,
 }
 
 static int skel_symlinkat(vfs_handle_struct *handle,
-                       const char *link_contents,
+                       const struct smb_filename *link_contents,
                        struct files_struct *dirfsp,
                        const struct smb_filename *new_smb_fname)
 {
@@ -830,7 +860,7 @@ static NTSTATUS skel_streaminfo(struct vfs_handle_struct *handle,
 }
 
 static int skel_get_real_filename(struct vfs_handle_struct *handle,
-                                 const char *path,
+                                 const struct smb_filename *path,
                                  const char *name,
                                  TALLOC_CTX *mem_ctx, char **found_name)
 {
@@ -1320,20 +1350,20 @@ static struct vfs_fn_pointers skel_transparent_fns = {
        .statvfs_fn = skel_statvfs,
        .fs_capabilities_fn = skel_fs_capabilities,
        .get_dfs_referrals_fn = skel_get_dfs_referrals,
+       .create_dfs_pathat_fn = skel_create_dfs_pathat,
+       .read_dfs_pathat_fn = skel_read_dfs_pathat,
        .snap_check_path_fn = skel_snap_check_path,
        .snap_create_fn = skel_snap_create,
        .snap_delete_fn = skel_snap_delete,
 
        /* Directory operations */
 
-       .opendir_fn = skel_opendir,
        .fdopendir_fn = skel_fdopendir,
        .readdir_fn = skel_readdir,
        .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 */
@@ -1357,10 +1387,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,
@@ -1370,6 +1399,7 @@ 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,
        .symlinkat_fn = skel_symlinkat,