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)
.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,
return SMB_VFS_NEXT_FGETXATTR(handle, fsp, name, value, size);
}
-static ssize_t skel_listxattr(vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size)
-{
- return SMB_VFS_NEXT_LISTXATTR(handle, smb_fname, list, size);
-}
-
static ssize_t skel_flistxattr(vfs_handle_struct *handle,
struct files_struct *fsp, char *list,
size_t size)
.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,
* Version 44 - Replace SMB_VFS_GET_COMPRESSION() with SMB_VFS_FGET_COMPRESSION()
* Version 44 - Add type argument to SMB_VFS_SYS_ACL_SET_FD()
* Version 44 - Remove SMB_VFS_SYS_ACL_SET_FILE()
+ * Change to Version 45 - will ship with 4.15
+ * Version 45 - Remove SMB_VFS_LISTXATTR
*/
-#define SMB_VFS_INTERFACE_VERSION 44
+#define SMB_VFS_INTERFACE_VERSION 45
/*
All intercepted VFS operations must be declared as static functions inside module source
TALLOC_CTX *mem_ctx,
uint8_t **xattr_value);
ssize_t (*fgetxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, void *value, size_t size);
- ssize_t (*listxattr_fn)(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size);
ssize_t (*flistxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size);
int (*removexattr_fn)(struct vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
ssize_t smb_vfs_call_fgetxattr(struct vfs_handle_struct *handle,
struct files_struct *fsp, const char *name,
void *value, size_t size);
-ssize_t smb_vfs_call_listxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size);
ssize_t smb_vfs_call_flistxattr(struct vfs_handle_struct *handle,
struct files_struct *fsp, char *list,
size_t size);
#define SMB_VFS_NEXT_FGETXATTR(handle,fsp,name,value,size) \
smb_vfs_call_fgetxattr((handle)->next,(fsp),(name),(value),(size))
-#define SMB_VFS_LISTXATTR(conn,smb_fname,list,size) \
- smb_vfs_call_listxattr((conn)->vfs_handles,(smb_fname),(list),(size))
-#define SMB_VFS_NEXT_LISTXATTR(handle,smb_fname,list,size) \
- smb_vfs_call_listxattr((handle)->next,(smb_fname),(list),(size))
-
#define SMB_VFS_FLISTXATTR(fsp,list,size) \
smb_vfs_call_flistxattr((fsp)->conn->vfs_handles, (fsp), (list),(size))
#define SMB_VFS_NEXT_FLISTXATTR(handle,fsp,list,size) \
return SMB_VFS_NEXT_FGETXATTR(handle, fsp, cappath, value, size);
}
-static ssize_t cap_listxattr(vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size)
-{
- struct smb_filename *cap_smb_fname = NULL;
- char *cappath = capencode(talloc_tos(), smb_fname->base_name);
- ssize_t ret;
- int saved_errno = 0;
-
- if (!cappath) {
- errno = ENOMEM;
- return -1;
- }
- cap_smb_fname = synthetic_smb_fname(talloc_tos(),
- cappath,
- NULL,
- NULL,
- smb_fname->twrp,
- smb_fname->flags);
- if (cap_smb_fname == NULL) {
- TALLOC_FREE(cappath);
- errno = ENOMEM;
- return -1;
- }
- ret = SMB_VFS_NEXT_LISTXATTR(handle, cap_smb_fname, list, size);
- if (ret == -1) {
- saved_errno = errno;
- }
- TALLOC_FREE(cappath);
- TALLOC_FREE(cap_smb_fname);
- if (saved_errno) {
- errno = saved_errno;
- }
- return ret;
-}
-
static int cap_removexattr(vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
const char *name)
.getxattrat_send_fn = vfs_not_implemented_getxattrat_send,
.getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv,
.fgetxattr_fn = cap_fgetxattr,
- .listxattr_fn = cap_listxattr,
.removexattr_fn = cap_removexattr,
.fremovexattr_fn = cap_fremovexattr,
.setxattr_fn = cap_setxattr,
return ret;
}
-static ssize_t
-catia_listxattr(vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list, size_t size)
-{
- struct smb_filename *mapped_smb_fname = NULL;
- char *mapped_name = NULL;
- NTSTATUS status;
- ssize_t ret;
- int saved_errno = 0;
-
- status = catia_string_replace_allocate(handle->conn,
- smb_fname->base_name,
- &mapped_name,
- vfs_translate_to_unix);
- if (!NT_STATUS_IS_OK(status)) {
- errno = map_errno_from_nt_status(status);
- return -1;
- }
-
- mapped_smb_fname = synthetic_smb_fname(talloc_tos(),
- mapped_name,
- NULL,
- &smb_fname->st,
- smb_fname->twrp,
- smb_fname->flags);
- if (mapped_smb_fname == NULL) {
- TALLOC_FREE(mapped_name);
- errno = ENOMEM;
- return -1;
- }
-
- ret = SMB_VFS_NEXT_LISTXATTR(handle, mapped_smb_fname, list, size);
- if (ret == -1) {
- saved_errno = errno;
- }
- TALLOC_FREE(mapped_name);
- TALLOC_FREE(mapped_smb_fname);
- if (saved_errno != 0) {
- errno = saved_errno;
- }
-
- return ret;
-}
-
static int
catia_removexattr(vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
.getxattr_fn = catia_getxattr,
.getxattrat_send_fn = vfs_not_implemented_getxattrat_send,
.getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv,
- .listxattr_fn = catia_listxattr,
.removexattr_fn = catia_removexattr,
.setxattr_fn = catia_setxattr,
.fgetxattr_fn = catia_fgetxattr,
return (ssize_t)ret;
}
-static ssize_t cephwrap_listxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size)
-{
- int ret;
- DBG_DEBUG("[CEPH] listxattr(%p, %s, %p, %llu)\n", handle,
- smb_fname->base_name, list, llu(size));
- ret = ceph_listxattr(handle->data, smb_fname->base_name, list, size);
- DBG_DEBUG("[CEPH] listxattr(...) = %d\n", ret);
- if (ret < 0) {
- WRAP_RETURN(ret);
- }
- return (ssize_t)ret;
-}
-
static ssize_t cephwrap_flistxattr(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size)
{
int ret;
.getxattrat_send_fn = vfs_not_implemented_getxattrat_send,
.getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv,
.fgetxattr_fn = cephwrap_fgetxattr,
- .listxattr_fn = cephwrap_listxattr,
.flistxattr_fn = cephwrap_flistxattr,
.removexattr_fn = cephwrap_removexattr,
.fremovexattr_fn = cephwrap_fremovexattr,
return ret;
}
-static ssize_t ceph_snap_gmt_listxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *csmb_fname,
- char *list, size_t size)
-{
- time_t timestamp = 0;
- char stripped[PATH_MAX + 1];
- char conv[PATH_MAX + 1];
- int ret;
- struct smb_filename *new_fname;
- int saved_errno;
-
- ret = ceph_snap_gmt_strip_snapshot(handle,
- csmb_fname,
- ×tamp, stripped, sizeof(stripped));
- if (ret < 0) {
- errno = -ret;
- return -1;
- }
- if (timestamp == 0) {
- return SMB_VFS_NEXT_LISTXATTR(handle, csmb_fname, list, size);
- }
- ret = ceph_snap_gmt_convert(handle, stripped,
- timestamp, conv, sizeof(conv));
- if (ret < 0) {
- errno = -ret;
- return -1;
- }
- new_fname = cp_smb_filename(talloc_tos(), csmb_fname);
- if (new_fname == NULL) {
- errno = ENOMEM;
- return -1;
- }
- new_fname->base_name = conv;
-
- ret = SMB_VFS_NEXT_LISTXATTR(handle, new_fname, list, size);
- saved_errno = errno;
- TALLOC_FREE(new_fname);
- errno = saved_errno;
- return ret;
-}
-
static int ceph_snap_gmt_removexattr(vfs_handle_struct *handle,
const struct smb_filename *csmb_fname,
const char *aname)
.getxattr_fn = ceph_snap_gmt_getxattr,
.getxattrat_send_fn = vfs_not_implemented_getxattrat_send,
.getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv,
- .listxattr_fn = ceph_snap_gmt_listxattr,
.removexattr_fn = ceph_snap_gmt_removexattr,
.setxattr_fn = ceph_snap_gmt_setxattr,
.chflags_fn = ceph_snap_gmt_chflags,
return getxattr(fsp->fsp_name->base_name, name, value, size);
}
-static ssize_t vfswrap_listxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size)
-{
- return listxattr(smb_fname->base_name, list, size);
-}
-
static ssize_t vfswrap_flistxattr(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size)
{
int fd = fsp_get_pathref_fd(fsp);
.getxattrat_send_fn = vfswrap_getxattrat_send,
.getxattrat_recv_fn = vfswrap_getxattrat_recv,
.fgetxattr_fn = vfswrap_fgetxattr,
- .listxattr_fn = vfswrap_listxattr,
.flistxattr_fn = vfswrap_flistxattr,
.removexattr_fn = vfswrap_removexattr,
.fremovexattr_fn = vfswrap_fremovexattr,
SMB_VFS_OP_GETXATTRAT_SEND,
SMB_VFS_OP_GETXATTRAT_RECV,
SMB_VFS_OP_FGETXATTR,
- SMB_VFS_OP_LISTXATTR,
SMB_VFS_OP_FLISTXATTR,
SMB_VFS_OP_REMOVEXATTR,
SMB_VFS_OP_FREMOVEXATTR,
{ SMB_VFS_OP_GETXATTRAT_SEND, "getxattrat_send" },
{ SMB_VFS_OP_GETXATTRAT_RECV, "getxattrat_recv" },
{ SMB_VFS_OP_FGETXATTR, "fgetxattr" },
- { SMB_VFS_OP_LISTXATTR, "listxattr" },
{ SMB_VFS_OP_FLISTXATTR, "flistxattr" },
{ SMB_VFS_OP_REMOVEXATTR, "removexattr" },
{ SMB_VFS_OP_FREMOVEXATTR, "fremovexattr" },
return result;
}
-static ssize_t smb_full_audit_listxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size)
-{
- ssize_t result;
-
- result = SMB_VFS_NEXT_LISTXATTR(handle, smb_fname, list, size);
-
- do_log(SMB_VFS_OP_LISTXATTR,
- (result >= 0),
- handle,
- "%s",
- smb_fname_str_do_log(handle->conn, smb_fname));
-
- return result;
-}
-
static ssize_t smb_full_audit_flistxattr(struct vfs_handle_struct *handle,
struct files_struct *fsp, char *list,
size_t size)
.getxattrat_send_fn = smb_full_audit_getxattrat_send,
.getxattrat_recv_fn = smb_full_audit_getxattrat_recv,
.fgetxattr_fn = smb_full_audit_fgetxattr,
- .listxattr_fn = smb_full_audit_listxattr,
.flistxattr_fn = smb_full_audit_flistxattr,
.removexattr_fn = smb_full_audit_removexattr,
.fremovexattr_fn = smb_full_audit_fremovexattr,
return glfs_fgetxattr(glfd, name, value, size);
}
-static ssize_t vfs_gluster_listxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size)
-{
- return glfs_listxattr(handle->data, smb_fname->base_name, list, size);
-}
-
static ssize_t vfs_gluster_flistxattr(struct vfs_handle_struct *handle,
files_struct *fsp, char *list,
size_t size)
.getxattrat_send_fn = vfs_not_implemented_getxattrat_send,
.getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv,
.fgetxattr_fn = vfs_gluster_fgetxattr,
- .listxattr_fn = vfs_gluster_listxattr,
.flistxattr_fn = vfs_gluster_flistxattr,
.removexattr_fn = vfs_gluster_removexattr,
.fremovexattr_fn = vfs_gluster_fremovexattr,
return ret;
}
-/*
- * Success: return positive number
- * Failure: set errno, return -1
- */
-static ssize_t mh_listxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size)
-{
- ssize_t ret;
- struct smb_filename *clientFname = NULL;
- int status;
-
- DEBUG(MH_INFO_DEBUG, ("Entering mh_listxattr\n"));
- if (!is_in_media_files(smb_fname->base_name)) {
- ret = SMB_VFS_NEXT_LISTXATTR(handle, smb_fname, list, size);
- goto out;
- }
-
- status = alloc_get_client_smb_fname(handle,
- talloc_tos(),
- smb_fname,
- &clientFname);
- if (status != 0) {
- ret = -1;
- goto err;
- }
-
- ret = SMB_VFS_NEXT_LISTXATTR(handle, clientFname, list, size);
-err:
- TALLOC_FREE(clientFname);
-out:
- return ret;
-}
-
/*
* Success: return 0
* Failure: set errno, return -1
.getxattr_fn = mh_getxattr,
.getxattrat_send_fn = vfs_not_implemented_getxattrat_send,
.getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv,
- .listxattr_fn = mh_listxattr,
.removexattr_fn = mh_removexattr,
.setxattr_fn = mh_setxattr,
return -1;
}
-ssize_t vfs_not_implemented_listxattr(vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size)
-{
- errno = ENOSYS;
- return -1;
-}
-
ssize_t vfs_not_implemented_flistxattr(vfs_handle_struct *handle,
struct files_struct *fsp, char *list,
size_t size)
.getxattrat_send_fn = vfs_not_implemented_getxattrat_send,
.getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv,
.fgetxattr_fn = vfs_not_implemented_fgetxattr,
- .listxattr_fn = vfs_not_implemented_listxattr,
.flistxattr_fn = vfs_not_implemented_flistxattr,
.removexattr_fn = vfs_not_implemented_removexattr,
.fremovexattr_fn = vfs_not_implemented_fremovexattr,
return blob.length;
}
-static ssize_t posix_eadb_listxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size)
-{
- struct tdb_wrap *db;
-
- SMB_VFS_HANDLE_GET_DATA(handle, db, struct tdb_wrap, return -1);
-
- return posix_eadb_listattr(db, smb_fname->base_name, -1, list, size);
-}
-
static ssize_t posix_eadb_flistxattr(struct vfs_handle_struct *handle,
struct files_struct *fsp, char *list,
size_t size)
.fgetxattr_fn = posix_eadb_fgetxattr,
.setxattr_fn = posix_eadb_setxattr,
.fsetxattr_fn = posix_eadb_fsetxattr,
- .listxattr_fn = posix_eadb_listxattr,
.flistxattr_fn = posix_eadb_flistxattr,
.removexattr_fn = posix_eadb_removexattr,
.fremovexattr_fn = posix_eadb_fremovexattr,
return ret;
}
-static ssize_t shadow_copy2_listxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list, size_t size)
-{
- time_t timestamp = 0;
- char *stripped = NULL;
- ssize_t ret;
- int saved_errno = 0;
- char *conv;
- struct smb_filename *conv_smb_fname = NULL;
-
- if (!shadow_copy2_strip_snapshot(talloc_tos(),
- handle,
- smb_fname,
- ×tamp,
- &stripped)) {
- return -1;
- }
- if (timestamp == 0) {
- return SMB_VFS_NEXT_LISTXATTR(handle, smb_fname, list, size);
- }
- conv = shadow_copy2_convert(talloc_tos(), handle, stripped, timestamp);
- TALLOC_FREE(stripped);
- if (conv == NULL) {
- return -1;
- }
- conv_smb_fname = synthetic_smb_fname(talloc_tos(),
- conv,
- NULL,
- NULL,
- 0,
- smb_fname->flags);
- if (conv_smb_fname == NULL) {
- TALLOC_FREE(conv);
- return -1;
- }
- ret = SMB_VFS_NEXT_LISTXATTR(handle, conv_smb_fname, list, size);
- if (ret == -1) {
- saved_errno = errno;
- }
- TALLOC_FREE(conv_smb_fname);
- TALLOC_FREE(conv);
- if (saved_errno != 0) {
- errno = saved_errno;
- }
- return ret;
-}
-
static int shadow_copy2_removexattr(vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
const char *aname)
.getxattr_fn = shadow_copy2_getxattr,
.getxattrat_send_fn = vfs_not_implemented_getxattrat_send,
.getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv,
- .listxattr_fn = shadow_copy2_listxattr,
.removexattr_fn = shadow_copy2_removexattr,
.setxattr_fn = shadow_copy2_setxattr,
.chflags_fn = shadow_copy2_chflags,
return ret;
}
-static ssize_t snapper_gmt_listxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list, size_t size)
-{
- time_t timestamp = 0;
- char *stripped = NULL;
- ssize_t ret;
- int saved_errno = 0;
- char *conv = NULL;
- struct smb_filename *conv_smb_fname = NULL;
-
- if (!snapper_gmt_strip_snapshot(talloc_tos(),
- handle,
- smb_fname,
- ×tamp,
- &stripped)) {
- return -1;
- }
- if (timestamp == 0) {
- return SMB_VFS_NEXT_LISTXATTR(handle, smb_fname, list, size);
- }
- conv = snapper_gmt_convert(talloc_tos(), handle, stripped, timestamp);
- TALLOC_FREE(stripped);
- if (conv == NULL) {
- return -1;
- }
- conv_smb_fname = synthetic_smb_fname(talloc_tos(),
- conv,
- NULL,
- NULL,
- 0,
- smb_fname->flags);
- TALLOC_FREE(conv);
- if (conv_smb_fname == NULL) {
- errno = ENOMEM;
- return -1;
- }
- ret = SMB_VFS_NEXT_LISTXATTR(handle, conv_smb_fname, list, size);
- if (ret == -1) {
- saved_errno = errno;
- }
- TALLOC_FREE(conv_smb_fname);
- TALLOC_FREE(conv);
- if (saved_errno != 0) {
- errno = saved_errno;
- }
- return ret;
-}
-
static int snapper_gmt_removexattr(vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
const char *aname)
.getxattr_fn = snapper_gmt_getxattr,
.getxattrat_send_fn = vfs_not_implemented_getxattrat_send,
.getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv,
- .listxattr_fn = snapper_gmt_listxattr,
.removexattr_fn = snapper_gmt_removexattr,
.setxattr_fn = snapper_gmt_setxattr,
.chflags_fn = snapper_gmt_chflags,
return result;
}
-static ssize_t smb_time_audit_listxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size)
-{
- ssize_t result;
- struct timespec ts1,ts2;
- double timediff;
-
- clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_LISTXATTR(handle, smb_fname, list, size);
- clock_gettime_mono(&ts2);
- timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
-
- if (timediff > audit_timeout) {
- smb_time_audit_log_fname("listxattr", timediff,
- smb_fname->base_name);
- }
-
- return result;
-}
-
static ssize_t smb_time_audit_flistxattr(struct vfs_handle_struct *handle,
struct files_struct *fsp, char *list,
size_t size)
.getxattrat_send_fn = smb_time_audit_getxattrat_send,
.getxattrat_recv_fn = smb_time_audit_getxattrat_recv,
.fgetxattr_fn = smb_time_audit_fgetxattr,
- .listxattr_fn = smb_time_audit_listxattr,
.flistxattr_fn = smb_time_audit_flistxattr,
.removexattr_fn = smb_time_audit_removexattr,
.fremovexattr_fn = smb_time_audit_fremovexattr,
return ret;
}
-static ssize_t um_listxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size)
-{
- ssize_t ret;
- struct smb_filename *client_fname = NULL;
- int status;
-
- DEBUG(10, ("Entering um_listxattr\n"));
-
- if (!is_in_media_files(smb_fname->base_name)) {
- return SMB_VFS_NEXT_LISTXATTR(handle, smb_fname, list, size);
- }
-
- status = alloc_get_client_smb_fname(handle,
- talloc_tos(),
- smb_fname,
- &client_fname);
- if (status != 0) {
- ret = -1;
- goto err;
- }
-
- ret = SMB_VFS_NEXT_LISTXATTR(handle, client_fname, list, size);
-
-err:
- TALLOC_FREE(client_fname);
- return ret;
-}
-
static int um_removexattr(struct vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
const char *name)
.getxattr_fn = um_getxattr,
.getxattrat_send_fn = vfs_not_implemented_getxattrat_send,
.getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv,
- .listxattr_fn = um_listxattr,
.removexattr_fn = um_removexattr,
.setxattr_fn = um_setxattr,
};
return size;
}
-static ssize_t vxfs_listxattr(vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size)
-{
- ssize_t result;
-
- result = vxfs_listxattr_path(smb_fname->base_name, list, size);
- if (result >= 0 || ((errno != ENOTSUP) && (errno != ENOSYS))) {
- return result;
- }
-
- result = SMB_VFS_NEXT_LISTXATTR(handle, smb_fname, list, size);
-
- if (result <= 0) {
- return result;
- }
-
- /* Remove any XATTR_USER_NTACL elements from the returned list. */
- result = vxfs_filter_list(list, result);
-
- return result;
-}
-
static ssize_t vxfs_flistxattr(struct vfs_handle_struct *handle,
struct files_struct *fsp, char *list,
size_t size)
.getxattrat_send_fn = vfs_not_implemented_getxattrat_send,
.getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv,
.fgetxattr_fn = vxfs_fget_xattr,
- .listxattr_fn = vxfs_listxattr,
.flistxattr_fn = vxfs_flistxattr,
.removexattr_fn = vxfs_remove_xattr,
.fremovexattr_fn = vxfs_fremove_xattr,
}
-static ssize_t xattr_tdb_listxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size)
-{
- struct file_id id;
- struct db_context *db;
- int ret;
- TALLOC_CTX *frame = talloc_stackframe();
-
- SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context,
- if (!xattr_tdb_init(-1, frame, &db))
- {
- TALLOC_FREE(frame); return -1;
- });
-
- ret = xattr_tdb_get_file_id(handle, smb_fname->base_name, &id);
- if (ret == -1) {
- TALLOC_FREE(frame);
- return -1;
- }
-
- ret = xattr_tdb_listattr(db, &id, list, size);
- TALLOC_FREE(frame);
- return ret;
-
-}
-
static ssize_t xattr_tdb_flistxattr(struct vfs_handle_struct *handle,
struct files_struct *fsp, char *list,
size_t size)
.fgetxattr_fn = xattr_tdb_fgetxattr,
.setxattr_fn = xattr_tdb_setxattr,
.fsetxattr_fn = xattr_tdb_fsetxattr,
- .listxattr_fn = xattr_tdb_listxattr,
.flistxattr_fn = xattr_tdb_flistxattr,
.removexattr_fn = xattr_tdb_removexattr,
.fremovexattr_fn = xattr_tdb_fremovexattr,
return handle->fns->fgetxattr_fn(handle, fsp, name, value, size);
}
-ssize_t smb_vfs_call_listxattr(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- char *list,
- size_t size)
-{
- VFS_FIND(listxattr);
- return handle->fns->listxattr_fn(handle, smb_fname, list, size);
-}
-
ssize_t smb_vfs_call_flistxattr(struct vfs_handle_struct *handle,
struct files_struct *fsp, char *list,
size_t size)