diff options
author | Jakob Unterwurzacher | 2018-06-12 21:07:00 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2018-06-12 23:05:53 +0200 |
commit | bfa50517e9b0b3afe98084cc9ba105caba45b540 (patch) | |
tree | 7abb65c768b7c380283a7ac0ff16c2badb0d4832 /internal/fusefrontend | |
parent | bde7ba57b06eb46f8901454e12524a74a8c3b6e8 (diff) |
xattr: return EOPNOTSUPP instead of ENODATA in GetXattr
Reading system.posix_acl_access and system.posix_acl_default
should return EOPNOTSUPP to inform user-space that we do not
support ACLs.
xftestest essientially does
chacl -l | grep "Operation not supported"
to determine if the filesystem supports ACLs, and used to
wrongly believe that gocryptfs does.
Diffstat (limited to 'internal/fusefrontend')
-rw-r--r-- | internal/fusefrontend/xattr.go | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/internal/fusefrontend/xattr.go b/internal/fusefrontend/xattr.go index 9300fe8..2bbdf41 100644 --- a/internal/fusefrontend/xattr.go +++ b/internal/fusefrontend/xattr.go @@ -13,7 +13,10 @@ import ( "github.com/rfjakob/gocryptfs/internal/tlog" ) +const _EOPNOTSUPP = fuse.Status(syscall.EOPNOTSUPP) + // xattr names are encrypted like file names, but with a fixed IV. +// Padded with "_xx" for length 16. var xattrNameIV = []byte("xattr_name_iv_xx") // We store encrypted xattrs under this prefix plus the base64-encoded @@ -27,9 +30,7 @@ func (fs *FS) GetXAttr(path string, attr string, context *fuse.Context) ([]byte, return nil, fuse.EPERM } if disallowedXAttrName(attr) { - // "ls -l" queries security.selinux, system.posix_acl_access, system.posix_acl_default - // and throws error messages if it gets something else than ENODATA. - return nil, fuse.ENODATA + return nil, _EOPNOTSUPP } cAttr := fs.encryptXattrName(attr) cPath, err := fs.getBackingPath(path) @@ -48,8 +49,6 @@ func (fs *FS) GetXAttr(path string, attr string, context *fuse.Context) ([]byte, return data, fuse.OK } -const _EOPNOTSUPP = fuse.Status(syscall.EOPNOTSUPP) - // SetXAttr implements pathfs.Filesystem. func (fs *FS) SetXAttr(path string, attr string, data []byte, flags int, context *fuse.Context) fuse.Status { if fs.isFiltered(path) { |