xattr: added passing of a "flags" parameter
Pass the "flags" parameter to the lower layer syscall. This makes Apple applications being able to successfully save data.
This commit is contained in:
parent
95964fb5f0
commit
5ccc06d5cb
@ -54,14 +54,12 @@ func (fs *FS) SetXAttr(path string, attr string, data []byte, flags int, context
|
||||
if fs.isFiltered(path) {
|
||||
return fuse.EPERM
|
||||
}
|
||||
if flags != 0 {
|
||||
// Drop this once https://github.com/pkg/xattr/pull/26 is merged
|
||||
return fuse.ENOSYS
|
||||
}
|
||||
if disallowedXAttrName(attr) {
|
||||
return fuse.EPERM
|
||||
}
|
||||
|
||||
flags = filterXattrSetFlags(flags)
|
||||
|
||||
cPath, err := fs.getBackingPath(path)
|
||||
if err != nil {
|
||||
return fuse.ToStatus(err)
|
||||
@ -69,7 +67,7 @@ func (fs *FS) SetXAttr(path string, attr string, data []byte, flags int, context
|
||||
cAttr := fs.encryptXattrName(attr)
|
||||
// xattr data is encrypted like a symlink target
|
||||
cData64 := []byte(fs.encryptSymlinkTarget(string(data)))
|
||||
return unpackXattrErr(xattr.Set(cPath, cAttr, cData64))
|
||||
return unpackXattrErr(xattr.SetWithFlags(cPath, cAttr, cData64, flags))
|
||||
}
|
||||
|
||||
// RemoveXAttr implements pathfs.Filesystem.
|
||||
|
15
internal/fusefrontend/xattr_darwin.go
Normal file
15
internal/fusefrontend/xattr_darwin.go
Normal file
@ -0,0 +1,15 @@
|
||||
// +build darwin
|
||||
|
||||
// Package fusefrontend interfaces directly with the go-fuse library.
|
||||
package fusefrontend
|
||||
|
||||
import "github.com/pkg/xattr"
|
||||
|
||||
func disallowedXAttrName(attr string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// On Darwin it is needed to unset XATTR_NOSECURITY 0x0008
|
||||
func filterXattrSetFlags(flags int) int {
|
||||
return flags &^ xattr.XATTR_NOSECURITY
|
||||
}
|
@ -13,3 +13,7 @@ const xattrUserPrefix = "user."
|
||||
func disallowedXAttrName(attr string) bool {
|
||||
return !strings.HasPrefix(attr, xattrUserPrefix)
|
||||
}
|
||||
|
||||
func filterXattrSetFlags(flags int) int {
|
||||
return flags
|
||||
}
|
||||
|
@ -1,8 +0,0 @@
|
||||
// +build !linux
|
||||
|
||||
// Package fusefrontend interfaces directly with the go-fuse library.
|
||||
package fusefrontend
|
||||
|
||||
func disallowedXAttrName(attr string) bool {
|
||||
return false
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user