add disableXAttr in mount option

This commit is contained in:
ningfd
2022-06-06 11:27:12 +08:00
parent 4a046e4de7
commit f32142f6f5
4 changed files with 23 additions and 1 deletions

View File

@@ -40,6 +40,7 @@ type Option struct {
DataCenter string
Umask os.FileMode
Quota int64
DisableXAttr bool
MountUid uint32
MountGid uint32

View File

@@ -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
}