return SMB_VFS_NEXT_CLOSE(handle, fsp);
}
-static ssize_t skel_vfs_read(vfs_handle_struct *handle, files_struct *fsp,
- void *data, size_t n)
-{
- return SMB_VFS_NEXT_READ(handle, fsp, data, n);
-}
-
static ssize_t skel_pread(vfs_handle_struct *handle, files_struct *fsp,
void *data, size_t n, off_t offset)
{
return state->ret;
}
-static ssize_t skel_write(vfs_handle_struct *handle, files_struct *fsp,
- const void *data, size_t n)
-{
- return SMB_VFS_NEXT_WRITE(handle, fsp, data, n);
-}
-
static ssize_t skel_pwrite(vfs_handle_struct *handle, files_struct *fsp,
const void *data, size_t n, off_t offset)
{
return SMB_VFS_NEXT_FSET_NT_ACL(handle, fsp, security_info_sent, psd);
}
-static int skel_chmod_acl(vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- mode_t mode)
-{
- return SMB_VFS_NEXT_CHMOD_ACL(handle, smb_fname, mode);
-}
-
-static int skel_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp,
- mode_t mode)
-{
- return SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, mode);
-}
-
static SMB_ACL_T skel_sys_acl_get_file(vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
SMB_ACL_TYPE_T type,
return SMB_VFS_NEXT_AIO_FORCE(handle, fsp);
}
+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 SMB_VFS_NEXT_AUDIT_FILE(handle,
+ file,
+ sacl,
+ access_requested,
+ access_denied);
+}
+
+static NTSTATUS skel_durable_cookie(struct vfs_handle_struct *handle,
+ struct files_struct *fsp,
+ TALLOC_CTX *mem_ctx,
+ DATA_BLOB *cookie)
+{
+ return SMB_VFS_NEXT_DURABLE_COOKIE(handle,
+ fsp,
+ mem_ctx,
+ cookie);
+}
+
+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 SMB_VFS_NEXT_DURABLE_DISCONNECT(handle,
+ fsp,
+ old_cookie,
+ mem_ctx,
+ new_cookie);
+}
+
+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 SMB_VFS_NEXT_DURABLE_RECONNECT(handle,
+ smb1req,
+ op,
+ old_cookie,
+ mem_ctx,
+ fsp,
+ new_cookie);
+}
+
/* VFS operations structure */
-struct vfs_fn_pointers skel_transparent_fns = {
+static struct vfs_fn_pointers skel_transparent_fns = {
/* Disk operations */
.connect_fn = skel_connect,
.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,
.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_transparent_init(TALLOC_CTX *ctx)
{
+ /*
+ * smb_vfs_assert_all_fns() is only needed in
+ * order to have a complete example.
+ *
+ * A transparent vfs module typically don't
+ * need to implement every calls.
+ */
+ smb_vfs_assert_all_fns(&skel_transparent_fns, "skel_transparent");
return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "skel_transparent",
&skel_transparent_fns);
}