return -1;
}
-static ssize_t skel_vfs_read(vfs_handle_struct *handle, files_struct *fsp,
- void *data, size_t n)
-{
- errno = ENOSYS;
- return -1;
-}
-
static ssize_t skel_pread(vfs_handle_struct *handle, files_struct *fsp,
void *data, size_t n, off_t offset)
{
return -1;
}
-static ssize_t skel_write(vfs_handle_struct *handle, files_struct *fsp,
- const void *data, size_t n)
-{
- errno = ENOSYS;
- return -1;
-}
-
static ssize_t skel_pwrite(vfs_handle_struct *handle, files_struct *fsp,
const void *data, size_t n, off_t offset)
{
return -1;
}
-static int skel_fsync(vfs_handle_struct *handle, files_struct *fsp)
-{
- errno = ENOSYS;
- return -1;
-}
-
static struct tevent_req *skel_fsync_send(struct vfs_handle_struct *handle,
TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
return NT_STATUS_NOT_IMPLEMENTED;
}
-static int skel_chmod_acl(vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- mode_t mode)
-{
- errno = ENOSYS;
- return -1;
-}
-
-static int skel_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp,
- mode_t mode)
-{
- errno = ENOSYS;
- return -1;
-}
-
static SMB_ACL_T skel_sys_acl_get_file(vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
SMB_ACL_TYPE_T type,
{
errno = ENOSYS;
return -1;
- return SMB_VFS_NEXT_FREMOVEXATTR(handle, fsp, name);
}
static int skel_setxattr(vfs_handle_struct *handle,
return false;
}
+static NTSTATUS skel_audit_file(struct vfs_handle_struct *handle,
+ struct smb_filename *file,
+ struct security_acl *sacl,
+ uint32_t access_requested,
+ uint32_t access_denied)
+{
+ return NT_STATUS_NOT_IMPLEMENTED;
+}
+
+static NTSTATUS skel_durable_cookie(struct vfs_handle_struct *handle,
+ struct files_struct *fsp,
+ TALLOC_CTX *mem_ctx,
+ DATA_BLOB *cookie)
+{
+ return NT_STATUS_NOT_IMPLEMENTED;
+}
+
+static NTSTATUS skel_durable_disconnect(struct vfs_handle_struct *handle,
+ struct files_struct *fsp,
+ const DATA_BLOB old_cookie,
+ TALLOC_CTX *mem_ctx,
+ DATA_BLOB *new_cookie)
+{
+ return NT_STATUS_NOT_IMPLEMENTED;
+}
+
+static NTSTATUS skel_durable_reconnect(struct vfs_handle_struct *handle,
+ struct smb_request *smb1req,
+ struct smbXsrv_open *op,
+ const DATA_BLOB old_cookie,
+ TALLOC_CTX *mem_ctx,
+ struct files_struct **fsp,
+ DATA_BLOB *new_cookie)
+{
+ return NT_STATUS_NOT_IMPLEMENTED;
+}
+
/* VFS operations structure */
struct vfs_fn_pointers skel_opaque_fns = {
.open_fn = skel_open,
.create_file_fn = skel_create_file,
.close_fn = skel_close_fn,
- .read_fn = skel_vfs_read,
.pread_fn = skel_pread,
.pread_send_fn = skel_pread_send,
.pread_recv_fn = skel_pread_recv,
- .write_fn = skel_write,
.pwrite_fn = skel_pwrite,
.pwrite_send_fn = skel_pwrite_send,
.pwrite_recv_fn = skel_pwrite_recv,
.sendfile_fn = skel_sendfile,
.recvfile_fn = skel_recvfile,
.rename_fn = skel_rename,
- .fsync_fn = skel_fsync,
.fsync_send_fn = skel_fsync_send,
.fsync_recv_fn = skel_fsync_recv,
.stat_fn = skel_stat,
.translate_name_fn = skel_translate_name,
.fsctl_fn = skel_fsctl,
.readdir_attr_fn = skel_readdir_attr,
+ .audit_file_fn = skel_audit_file,
/* DOS attributes. */
.get_dos_attributes_fn = skel_get_dos_attributes,
/* POSIX ACL operations. */
- .chmod_acl_fn = skel_chmod_acl,
- .fchmod_acl_fn = skel_fchmod_acl,
-
.sys_acl_get_file_fn = skel_sys_acl_get_file,
.sys_acl_get_fd_fn = skel_sys_acl_get_fd,
.sys_acl_blob_get_file_fn = skel_sys_acl_blob_get_file,
/* aio operations */
.aio_force_fn = skel_aio_force,
+
+ /* durable handle operations */
+ .durable_cookie_fn = skel_durable_cookie,
+ .durable_disconnect_fn = skel_durable_disconnect,
+ .durable_reconnect_fn = skel_durable_reconnect,
};
static_decl_vfs;
NTSTATUS vfs_skel_opaque_init(TALLOC_CTX *ctx)
{
+ /*
+ * smb_vfs_assert_all_fns() makes sure every
+ * call is implemented.
+ *
+ * An opaque module requires this!
+ */
+ smb_vfs_assert_all_fns(&skel_opaque_fns, "skel_opaque");
return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "skel_opaque",
&skel_opaque_fns);
}