fusefs: don't send the namespace during listextattr
The FUSE_LISTXATTR operation always returns the full list of a file's extended attributes, in all namespaces. There's no way to filter the list server-side. However, currently FreeBSD's fusefs driver sends a namespace string with the FUSE_LISTXATTR request. That behavior was probably copied from fuse_vnop_getextattr, which has an attribute name argument. It's been there ever since extended attribute support was added in r324620. This commit removes it. Reviewed by: cem MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D21280
This commit is contained in:
parent
2194393787
commit
3a79e8e772
@ -2246,9 +2246,7 @@ fuse_vnop_listextattr(struct vop_listextattr_args *ap)
|
||||
struct mount *mp = vnode_mount(vp);
|
||||
struct thread *td = ap->a_td;
|
||||
struct ucred *cred = ap->a_cred;
|
||||
size_t len;
|
||||
char *prefix;
|
||||
char *attr_str;
|
||||
char *bsd_list = NULL;
|
||||
char *linux_list;
|
||||
int bsd_list_len;
|
||||
@ -2274,9 +2272,7 @@ fuse_vnop_listextattr(struct vop_listextattr_args *ap)
|
||||
else
|
||||
prefix = EXTATTR_NAMESPACE_USER_STRING;
|
||||
|
||||
len = strlen(prefix) + sizeof(extattr_namespace_separator) + 1;
|
||||
|
||||
fdisp_init(&fdi, sizeof(*list_xattr_in) + len);
|
||||
fdisp_init(&fdi, sizeof(*list_xattr_in));
|
||||
fdisp_make_vp(&fdi, FUSE_LISTXATTR, vp, td, cred);
|
||||
|
||||
/*
|
||||
@ -2284,8 +2280,6 @@ fuse_vnop_listextattr(struct vop_listextattr_args *ap)
|
||||
*/
|
||||
list_xattr_in = fdi.indata;
|
||||
list_xattr_in->size = 0;
|
||||
attr_str = (char *)fdi.indata + sizeof(*list_xattr_in);
|
||||
snprintf(attr_str, len, "%s%c", prefix, extattr_namespace_separator);
|
||||
|
||||
err = fdisp_wait_answ(&fdi);
|
||||
if (err != 0) {
|
||||
@ -2310,8 +2304,6 @@ fuse_vnop_listextattr(struct vop_listextattr_args *ap)
|
||||
fdisp_refresh_vp(&fdi, FUSE_LISTXATTR, vp, td, cred);
|
||||
list_xattr_in = fdi.indata;
|
||||
list_xattr_in->size = linux_list_len + sizeof(*list_xattr_out);
|
||||
attr_str = (char *)fdi.indata + sizeof(*list_xattr_in);
|
||||
snprintf(attr_str, len, "%s%c", prefix, extattr_namespace_separator);
|
||||
|
||||
err = fdisp_wait_answ(&fdi);
|
||||
if (err != 0)
|
||||
|
@ -554,16 +554,13 @@ void MockFS::audit_request(const mockfs_buf_in &in) {
|
||||
"Missing request attribute name";
|
||||
break;
|
||||
case FUSE_GETXATTR:
|
||||
ASSERT_GE(inlen, fih + sizeof(in.body.setxattr)) <<
|
||||
ASSERT_GE(inlen, fih + sizeof(in.body.getxattr)) <<
|
||||
"Missing request body";
|
||||
ASSERT_GT(inlen, fih + sizeof(in.body.setxattr)) <<
|
||||
ASSERT_GT(inlen, fih + sizeof(in.body.getxattr)) <<
|
||||
"Missing request attribute name";
|
||||
break;
|
||||
case FUSE_LISTXATTR:
|
||||
ASSERT_GE(inlen, fih + sizeof(in.body.listxattr)) <<
|
||||
"Missing request body";
|
||||
ASSERT_GT(inlen, fih + sizeof(in.body.listxattr)) <<
|
||||
"Missing namespace";
|
||||
ASSERT_EQ(inlen, fih + sizeof(in.body.listxattr));
|
||||
break;
|
||||
case FUSE_REMOVEXATTR:
|
||||
ASSERT_GT(inlen, fih) << "Missing request attribute name";
|
||||
|
Loading…
Reference in New Issue
Block a user