diff options
Diffstat (limited to 'weed/mount/weedfs_xattr.go')
| -rw-r--r-- | weed/mount/weedfs_xattr.go | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/weed/mount/weedfs_xattr.go b/weed/mount/weedfs_xattr.go index 2fb2b0741..64cc0f6f0 100644 --- a/weed/mount/weedfs_xattr.go +++ b/weed/mount/weedfs_xattr.go @@ -20,6 +20,10 @@ const ( // with the required buffer size. func (wfs *WFS) GetXAttr(cancel <-chan struct{}, header *fuse.InHeader, attr string, dest []byte) (size uint32, code fuse.Status) { + if wfs.option.DisableXAttr { + return 0, fuse.Status(syscall.ENOTSUP) + } + //validate attr name if len(attr) > MAX_XATTR_NAME_SIZE { if runtime.GOOS == "darwin" { @@ -70,6 +74,10 @@ func (wfs *WFS) GetXAttr(cancel <-chan struct{}, header *fuse.InHeader, attr str // attribute does not already exist. func (wfs *WFS) SetXAttr(cancel <-chan struct{}, input *fuse.SetXAttrIn, attr string, data []byte) fuse.Status { + if wfs.option.DisableXAttr { + return fuse.Status(syscall.ENOTSUP) + } + if wfs.IsOverQuota { return fuse.Status(syscall.ENOSPC) } @@ -127,6 +135,11 @@ func (wfs *WFS) SetXAttr(cancel <-chan struct{}, input *fuse.SetXAttrIn, attr st // slice, and return the number of bytes. If the buffer is too // small, return ERANGE, with the required buffer size. func (wfs *WFS) ListXAttr(cancel <-chan struct{}, header *fuse.InHeader, dest []byte) (n uint32, code fuse.Status) { + + if wfs.option.DisableXAttr { + return 0, fuse.Status(syscall.ENOTSUP) + } + _, _, entry, status := wfs.maybeReadEntry(header.NodeId) if status != fuse.OK { return 0, status @@ -156,6 +169,11 @@ func (wfs *WFS) ListXAttr(cancel <-chan struct{}, header *fuse.InHeader, dest [] // RemoveXAttr removes an extended attribute. func (wfs *WFS) RemoveXAttr(cancel <-chan struct{}, header *fuse.InHeader, attr string) fuse.Status { + + if wfs.option.DisableXAttr { + return fuse.Status(syscall.ENOTSUP) + } + if len(attr) == 0 { return fuse.EINVAL } |
