VFS: Add SMB_VFS_FNTIMES
[samba.git] / examples / VFS / skel_opaque.c
index 603ddd46446f7f80094ba2ca8d5513548062a0ac..a8deb8a6da622bcb797c900deb23fb2a95a02d37 100644 (file)
@@ -103,12 +103,23 @@ static NTSTATUS skel_get_dfs_referrals(struct vfs_handle_struct *handle,
        return NT_STATUS_NOT_IMPLEMENTED;
 }
 
-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 NULL;
+       return NT_STATUS_NOT_IMPLEMENTED;
+}
+
+static NTSTATUS skel_read_dfs_pathat(struct vfs_handle_struct *handle,
+                               TALLOC_CTX *mem_ctx,
+                               struct files_struct *dirfsp,
+                               struct smb_filename *smb_fname,
+                               struct referral **ppreflist,
+                               size_t *preferral_count)
+{
+       return NT_STATUS_NOT_IMPLEMENTED;
 }
 
 static NTSTATUS skel_snap_check_path(struct vfs_handle_struct *handle,
@@ -145,7 +156,9 @@ static DIR *skel_fdopendir(vfs_handle_struct *handle, files_struct *fsp,
 }
 
 static struct dirent *skel_readdir(vfs_handle_struct *handle,
-                                  DIR *dirp, SMB_STRUCT_STAT *sbuf)
+                                  struct files_struct *dirfsp,
+                                  DIR *dirp,
+                                  SMB_STRUCT_STAT *sbuf)
 {
        return NULL;
 }
@@ -165,7 +178,8 @@ static void skel_rewind_dir(vfs_handle_struct *handle, DIR *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)
 {
@@ -173,21 +187,18 @@ static int skel_mkdir(vfs_handle_struct *handle,
        return -1;
 }
 
-static int skel_rmdir(vfs_handle_struct *handle,
-               const struct smb_filename *smb_fname)
-{
-       errno = ENOSYS;
-       return -1;
-}
-
 static int skel_closedir(vfs_handle_struct *handle, DIR *dir)
 {
        errno = ENOSYS;
        return -1;
 }
 
-static int skel_open(vfs_handle_struct *handle, struct smb_filename *smb_fname,
-                    files_struct *fsp, int flags, mode_t mode)
+static int skel_openat(struct vfs_handle_struct *handle,
+                      const struct files_struct *dirfsp,
+                      const struct smb_filename *smb_fname,
+                      struct files_struct *fsp,
+                      int flags,
+                      mode_t mode)
 {
        errno = ENOSYS;
        return -1;
@@ -195,7 +206,6 @@ static int skel_open(vfs_handle_struct *handle, struct smb_filename *smb_fname,
 
 static NTSTATUS skel_create_file(struct vfs_handle_struct *handle,
                                 struct smb_request *req,
-                                uint16_t root_dir_fid,
                                 struct smb_filename *smb_fname,
                                 uint32_t access_mask,
                                 uint32_t share_access,
@@ -343,16 +353,10 @@ static uint64_t skel_get_alloc_size(struct vfs_handle_struct *handle,
        return -1;
 }
 
-static int skel_unlink(vfs_handle_struct *handle,
-                      const struct smb_filename *smb_fname)
-{
-       errno = ENOSYS;
-       return -1;
-}
-
-static int skel_chmod(vfs_handle_struct *handle,
+static int skel_unlinkat(vfs_handle_struct *handle,
+                       struct files_struct *dirfsp,
                        const struct smb_filename *smb_fname,
-                       mode_t mode)
+                       int flags)
 {
        errno = ENOSYS;
        return -1;
@@ -365,15 +369,6 @@ static int skel_fchmod(vfs_handle_struct *handle, files_struct *fsp,
        return -1;
 }
 
-static int skel_chown(vfs_handle_struct *handle,
-                       const struct smb_filename *smb_fname,
-                       uid_t uid,
-                       gid_t gid)
-{
-       errno = ENOSYS;
-       return -1;
-}
-
 static int skel_fchown(vfs_handle_struct *handle, files_struct *fsp,
                       uid_t uid, gid_t gid)
 {
@@ -412,6 +407,14 @@ static int skel_ntimes(vfs_handle_struct *handle,
        return -1;
 }
 
+static int skel_fntimes(vfs_handle_struct *handle,
+                       files_struct *fsp,
+                       struct smb_file_time *ft)
+{
+       errno = ENOSYS;
+       return -1;
+}
+
 static int skel_ftruncate(vfs_handle_struct *handle, files_struct *fsp,
                          off_t offset)
 {
@@ -441,6 +444,13 @@ static int skel_kernel_flock(struct vfs_handle_struct *handle,
        return -1;
 }
 
+static int skel_fcntl(struct vfs_handle_struct *handle,
+                     struct files_struct *fsp, int cmd, va_list cmd_arg)
+{
+       errno = ENOSYS;
+       return -1;
+}
+
 static int skel_linux_setlease(struct vfs_handle_struct *handle,
                               struct files_struct *fsp, int leasetype)
 {
@@ -456,25 +466,17 @@ static bool skel_getlock(vfs_handle_struct *handle, files_struct *fsp,
        return false;
 }
 
-static int skel_symlink(vfs_handle_struct *handle,
-                       const char *link_contents,
+static int skel_symlinkat(vfs_handle_struct *handle,
+                       const struct smb_filename *link_contents,
+                       struct files_struct *dirfsp,
                        const struct smb_filename *new_smb_fname)
 {
        errno = ENOSYS;
        return -1;
 }
 
-static int skel_vfs_readlink(vfs_handle_struct *handle,
-                       const struct smb_filename *smb_fname,
-                       char *buf,
-                       size_t bufsiz)
-{
-       errno = ENOSYS;
-       return -1;
-}
-
 static int skel_vfs_readlinkat(vfs_handle_struct *handle,
-                       files_struct *dirfsp,
+                       const struct files_struct *dirfsp,
                        const struct smb_filename *smb_fname,
                        char *buf,
                        size_t bufsiz)
@@ -618,10 +620,9 @@ static NTSTATUS skel_offload_write_recv(struct vfs_handle_struct *handle,
        return NT_STATUS_OK;
 }
 
-static NTSTATUS skel_get_compression(struct vfs_handle_struct *handle,
+static NTSTATUS skel_fget_compression(struct vfs_handle_struct *handle,
                                     TALLOC_CTX *mem_ctx,
                                     struct files_struct *fsp,
-                                    struct smb_filename *smb_fname,
                                     uint16_t *_compression_fmt)
 {
        return NT_STATUS_INVALID_DEVICE_REQUEST;
@@ -646,7 +647,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)
 {
@@ -713,13 +714,6 @@ static NTSTATUS skel_readdir_attr(struct vfs_handle_struct *handle,
        return NT_STATUS_NOT_IMPLEMENTED;
 }
 
-static NTSTATUS skel_get_dos_attributes(struct vfs_handle_struct *handle,
-                               struct smb_filename *smb_fname,
-                               uint32_t *dosmode)
-{
-       return NT_STATUS_NOT_IMPLEMENTED;
-}
-
 struct skel_get_dos_attributes_state {
        struct vfs_aio_state aio_state;
        uint32_t dosmode;
@@ -772,13 +766,6 @@ static NTSTATUS skel_fget_dos_attributes(struct vfs_handle_struct *handle,
        return NT_STATUS_NOT_IMPLEMENTED;
 }
 
-static NTSTATUS skel_set_dos_attributes(struct vfs_handle_struct *handle,
-                               const struct smb_filename *smb_fname,
-                               uint32_t dosmode)
-{
-       return NT_STATUS_NOT_IMPLEMENTED;
-}
-
 static NTSTATUS skel_fset_dos_attributes(struct vfs_handle_struct *handle,
                                struct files_struct *fsp,
                                uint32_t dosmode)
@@ -794,7 +781,8 @@ static NTSTATUS skel_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
        return NT_STATUS_NOT_IMPLEMENTED;
 }
 
-static NTSTATUS skel_get_nt_acl(vfs_handle_struct *handle,
+static NTSTATUS skel_get_nt_acl_at(vfs_handle_struct *handle,
+                               struct files_struct *dirfsp,
                                const struct smb_filename *smb_fname,
                                uint32_t security_info,
                                TALLOC_CTX *mem_ctx,
@@ -844,16 +832,9 @@ static int skel_sys_acl_blob_get_fd(vfs_handle_struct *handle,
        return -1;
 }
 
-static int skel_sys_acl_set_file(vfs_handle_struct *handle,
-                               const struct smb_filename *smb_fname,
-                               SMB_ACL_TYPE_T acltype,
-                               SMB_ACL_T theacl)
-{
-       errno = ENOSYS;
-       return -1;
-}
-
-static int skel_sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
+static int skel_sys_acl_set_fd(vfs_handle_struct *handle,
+                              struct files_struct *fsp,
+                              SMB_ACL_TYPE_T type,
                               SMB_ACL_T theacl)
 {
        errno = ENOSYS;
@@ -937,15 +918,6 @@ static ssize_t skel_fgetxattr(vfs_handle_struct *handle,
        return -1;
 }
 
-static ssize_t skel_listxattr(vfs_handle_struct *handle,
-                               const struct smb_filename *smb_fname,
-                               char *list,
-                               size_t size)
-{
-       errno = ENOSYS;
-       return -1;
-}
-
 static ssize_t skel_flistxattr(vfs_handle_struct *handle,
                               struct files_struct *fsp, char *list,
                               size_t size)
@@ -954,14 +926,6 @@ static ssize_t skel_flistxattr(vfs_handle_struct *handle,
        return -1;
 }
 
-static int skel_removexattr(vfs_handle_struct *handle,
-                       const struct smb_filename *smb_fname,
-                       const char *name)
-{
-       errno = ENOSYS;
-       return -1;
-}
-
 static int skel_fremovexattr(vfs_handle_struct *handle,
                             struct files_struct *fsp, const char *name)
 {
@@ -969,17 +933,6 @@ static int skel_fremovexattr(vfs_handle_struct *handle,
        return -1;
 }
 
-static int skel_setxattr(vfs_handle_struct *handle,
-                       const struct smb_filename *smb_fname,
-                       const char *name,
-                       const void *value,
-                       size_t size,
-                       int flags)
-{
-       errno = ENOSYS;
-       return -1;
-}
-
 static int skel_fsetxattr(vfs_handle_struct *handle, struct files_struct *fsp,
                          const char *name, const void *value, size_t size,
                          int flags)
@@ -1046,25 +999,25 @@ static struct vfs_fn_pointers skel_opaque_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 */
 
-       .open_fn = skel_open,
+       .openat_fn = skel_openat,
        .create_file_fn = skel_create_file,
        .close_fn = skel_close_fn,
        .pread_fn = skel_pread,
@@ -1083,23 +1036,22 @@ static struct vfs_fn_pointers skel_opaque_fns = {
        .fstat_fn = skel_fstat,
        .lstat_fn = skel_lstat,
        .get_alloc_size_fn = skel_get_alloc_size,
-       .unlink_fn = skel_unlink,
-       .chmod_fn = skel_chmod,
+       .unlinkat_fn = skel_unlinkat,
        .fchmod_fn = skel_fchmod,
-       .chown_fn = skel_chown,
        .fchown_fn = skel_fchown,
        .lchown_fn = skel_lchown,
        .chdir_fn = skel_chdir,
        .getwd_fn = skel_getwd,
        .ntimes_fn = skel_ntimes,
+       .fntimes_fn = skel_fntimes,
        .ftruncate_fn = skel_ftruncate,
        .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,
+       .symlinkat_fn = skel_symlinkat,
        .readlinkat_fn = skel_vfs_readlinkat,
        .linkat_fn = skel_linkat,
        .mknodat_fn = skel_mknodat,
@@ -1111,7 +1063,7 @@ static struct vfs_fn_pointers skel_opaque_fns = {
        .offload_read_recv_fn = skel_offload_read_recv,
        .offload_write_send_fn = skel_offload_write_send,
        .offload_write_recv_fn = skel_offload_write_recv,
-       .get_compression_fn = skel_get_compression,
+       .fget_compression_fn = skel_fget_compression,
        .set_compression_fn = skel_set_compression,
 
        .streaminfo_fn = skel_streaminfo,
@@ -1126,17 +1078,15 @@ static struct vfs_fn_pointers skel_opaque_fns = {
        .audit_file_fn = skel_audit_file,
 
        /* DOS attributes. */
-       .get_dos_attributes_fn = skel_get_dos_attributes,
        .get_dos_attributes_send_fn = skel_get_dos_attributes_send,
        .get_dos_attributes_recv_fn = skel_get_dos_attributes_recv,
        .fget_dos_attributes_fn = skel_fget_dos_attributes,
-       .set_dos_attributes_fn = skel_set_dos_attributes,
        .fset_dos_attributes_fn = skel_fset_dos_attributes,
 
        /* NT ACL operations. */
 
        .fget_nt_acl_fn = skel_fget_nt_acl,
-       .get_nt_acl_fn = skel_get_nt_acl,
+       .get_nt_acl_at_fn = skel_get_nt_acl_at,
        .fset_nt_acl_fn = skel_fset_nt_acl,
 
        /* POSIX ACL operations. */
@@ -1145,7 +1095,6 @@ static struct vfs_fn_pointers skel_opaque_fns = {
        .sys_acl_get_fd_fn = skel_sys_acl_get_fd,
        .sys_acl_blob_get_file_fn = skel_sys_acl_blob_get_file,
        .sys_acl_blob_get_fd_fn = skel_sys_acl_blob_get_fd,
-       .sys_acl_set_file_fn = skel_sys_acl_set_file,
        .sys_acl_set_fd_fn = skel_sys_acl_set_fd,
        .sys_acl_delete_def_file_fn = skel_sys_acl_delete_def_file,
 
@@ -1154,11 +1103,8 @@ static struct vfs_fn_pointers skel_opaque_fns = {
        .getxattrat_send_fn = skel_getxattrat_send,
        .getxattrat_recv_fn = skel_getxattrat_recv,
        .fgetxattr_fn = skel_fgetxattr,
-       .listxattr_fn = skel_listxattr,
        .flistxattr_fn = skel_flistxattr,
-       .removexattr_fn = skel_removexattr,
        .fremovexattr_fn = skel_fremovexattr,
-       .setxattr_fn = skel_setxattr,
        .fsetxattr_fn = skel_fsetxattr,
 
        /* aio operations */