return -1;
}
-static ssize_t skel_getxattr(vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- const char *name,
- void *value,
- size_t size)
-{
- errno = ENOSYS;
- return -1;
-}
-
struct skel_getxattrat_state {
struct vfs_aio_state aio_state;
ssize_t xattr_size;
.sys_acl_delete_def_fd_fn = skel_sys_acl_delete_def_fd,
/* EA operations. */
- .getxattr_fn = skel_getxattr,
.getxattrat_send_fn = skel_getxattrat_send,
.getxattrat_recv_fn = skel_getxattrat_recv,
.fgetxattr_fn = skel_fgetxattr,
return SMB_VFS_NEXT_SYS_ACL_DELETE_DEF_FD(handle, fsp);
}
-static ssize_t skel_getxattr(vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- const char *name,
- void *value,
- size_t size)
-{
- return SMB_VFS_NEXT_GETXATTR(handle, smb_fname, name, value, size);
-}
-
struct skel_getxattrat_state {
struct vfs_aio_state aio_state;
ssize_t xattr_size;
.sys_acl_delete_def_fd_fn = skel_sys_acl_delete_def_fd,
/* EA operations. */
- .getxattr_fn = skel_getxattr,
.getxattrat_send_fn = skel_getxattrat_send,
.getxattrat_recv_fn = skel_getxattrat_recv,
.fgetxattr_fn = skel_fgetxattr,
* Version 45 - Remove SYS_ACL_GET_FILE
* Version 45 - Remove SYS_ACL_BLOB_GET_FILE
* Version 45 - Add SMB_VFS_FCHFLAGS
+ * Version 45 - Remove SMB_VFS_GETXATTR
*/
#define SMB_VFS_INTERFACE_VERSION 45
struct files_struct *fsp);
/* EA operations. */
- ssize_t (*getxattr_fn)(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- const char *name,
- void *value,
- size_t size);
struct tevent_req *(*getxattrat_send_fn)(
TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
SMB_ACL_T theacl);
int smb_vfs_call_sys_acl_delete_def_fd(struct vfs_handle_struct *handle,
struct files_struct *fsp);
-ssize_t smb_vfs_call_getxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- const char *name,
- void *value,
- size_t size);
struct tevent_req *smb_vfs_call_getxattrat_send(
TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
SMB_ACL_T theacl);
int vfs_not_implemented_sys_acl_delete_def_fd(vfs_handle_struct *handle,
files_struct *fsp);
-ssize_t vfs_not_implemented_getxattr(vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- const char *name,
- void *value,
- size_t size);
struct tevent_req *vfs_not_implemented_getxattrat_send(
TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
#define SMB_VFS_NEXT_SYS_ACL_DELETE_DEF_FD(handle, fsp) \
smb_vfs_call_sys_acl_delete_def_fd((handle)->next, (fsp))
-#define SMB_VFS_GETXATTR(conn,smb_fname,name,value,size) \
- smb_vfs_call_getxattr((conn)->vfs_handles,(smb_fname),(name),(value),(size))
-#define SMB_VFS_NEXT_GETXATTR(handle,smb_fname,name,value,size) \
- smb_vfs_call_getxattr((handle)->next,(smb_fname),(name),(value),(size))
-
#define SMB_VFS_GETXATTRAT_SEND(mem_ctx,ev,dir_fsp,smb_fname, \
xattr_name, alloc_hint) \
smb_vfs_call_getxattrat_send((mem_ctx),(ev), \
Extended attribute operations.
*****************************************************************/
-static ssize_t vfswrap_getxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- const char *name,
- void *value,
- size_t size)
-{
- return getxattr(smb_fname->base_name, name, value, size);
-}
-
struct vfswrap_getxattrat_state {
struct tevent_context *ev;
files_struct *dir_fsp;
.sys_acl_delete_def_fd_fn = vfswrap_sys_acl_delete_def_fd,
/* EA operations. */
- .getxattr_fn = vfswrap_getxattr,
.getxattrat_send_fn = vfswrap_getxattrat_send,
.getxattrat_recv_fn = vfswrap_getxattrat_recv,
.fgetxattr_fn = vfswrap_fgetxattr,
SMB_VFS_OP_SYS_ACL_DELETE_DEF_FD,
/* EA operations. */
- SMB_VFS_OP_GETXATTR,
SMB_VFS_OP_GETXATTRAT_SEND,
SMB_VFS_OP_GETXATTRAT_RECV,
SMB_VFS_OP_FGETXATTR,
{ SMB_VFS_OP_SYS_ACL_BLOB_GET_FD, "sys_acl_blob_get_fd" },
{ SMB_VFS_OP_SYS_ACL_SET_FD, "sys_acl_set_fd" },
{ SMB_VFS_OP_SYS_ACL_DELETE_DEF_FD, "sys_acl_delete_def_fd" },
- { SMB_VFS_OP_GETXATTR, "getxattr" },
{ SMB_VFS_OP_GETXATTRAT_SEND, "getxattrat_send" },
{ SMB_VFS_OP_GETXATTRAT_RECV, "getxattrat_recv" },
{ SMB_VFS_OP_FGETXATTR, "fgetxattr" },
return result;
}
-static ssize_t smb_full_audit_getxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- const char *name, void *value, size_t size)
-{
- ssize_t result;
-
- result = SMB_VFS_NEXT_GETXATTR(handle, smb_fname, name, value, size);
-
- do_log(SMB_VFS_OP_GETXATTR,
- (result >= 0),
- handle,
- "%s|%s",
- smb_fname_str_do_log(handle->conn, smb_fname),
- name);
-
- return result;
-}
-
struct smb_full_audit_getxattrat_state {
struct vfs_aio_state aio_state;
vfs_handle_struct *handle;
.sys_acl_blob_get_fd_fn = smb_full_audit_sys_acl_blob_get_fd,
.sys_acl_set_fd_fn = smb_full_audit_sys_acl_set_fd,
.sys_acl_delete_def_fd_fn = smb_full_audit_sys_acl_delete_def_fd,
- .getxattr_fn = smb_full_audit_getxattr,
.getxattrat_send_fn = smb_full_audit_getxattrat_send,
.getxattrat_recv_fn = smb_full_audit_getxattrat_recv,
.fgetxattr_fn = smb_full_audit_fgetxattr,
return -1;
}
-ssize_t vfs_not_implemented_getxattr(vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- const char *name,
- void *value,
- size_t size)
-{
- errno = ENOSYS;
- return -1;
-}
-
struct vfs_not_implemented_getxattrat_state {
struct vfs_aio_state aio_state;
ssize_t xattr_size;
.sys_acl_delete_def_fd_fn = vfs_not_implemented_sys_acl_delete_def_fd,
/* EA operations. */
- .getxattr_fn = vfs_not_implemented_getxattr,
.getxattrat_send_fn = vfs_not_implemented_getxattrat_send,
.getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv,
.fgetxattr_fn = vfs_not_implemented_fgetxattr,
return result;
}
-static ssize_t smb_time_audit_getxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- const char *name,
- void *value,
- size_t size)
-{
- ssize_t result;
- struct timespec ts1,ts2;
- double timediff;
-
- clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_GETXATTR(handle, smb_fname, name, value, size);
- clock_gettime_mono(&ts2);
- timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
-
- if (timediff > audit_timeout) {
- smb_time_audit_log_fname("getxattr", timediff,
- smb_fname->base_name);
- }
-
- return result;
-}
-
struct smb_time_audit_getxattrat_state {
struct vfs_aio_state aio_state;
files_struct *dir_fsp;
.sys_acl_blob_get_fd_fn = smb_time_audit_sys_acl_blob_get_fd,
.sys_acl_set_fd_fn = smb_time_audit_sys_acl_set_fd,
.sys_acl_delete_def_fd_fn = smb_time_audit_sys_acl_delete_def_fd,
- .getxattr_fn = smb_time_audit_getxattr,
.getxattrat_send_fn = smb_time_audit_getxattrat_send,
.getxattrat_recv_fn = smb_time_audit_getxattrat_recv,
.fgetxattr_fn = smb_time_audit_fgetxattr,
return handle->fns->sys_acl_delete_def_fd_fn(handle, fsp);
}
-ssize_t smb_vfs_call_getxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- const char *name,
- void *value,
- size_t size)
-{
- VFS_FIND(getxattr);
- return handle->fns->getxattr_fn(handle, smb_fname, name, value, size);
-}
-
-
struct smb_vfs_call_getxattrat_state {
files_struct *dir_fsp;
ssize_t (*recv_fn)(struct tevent_req *req,