diff options
author | Jakob Unterwurzacher | 2021-06-02 19:10:36 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2021-06-02 19:10:36 +0200 |
commit | a38e5988bae3319a2c1c6745064f5785a0971d05 (patch) | |
tree | 6ae7645bba6d4f1b265b6dc859db6c7bbce7165f /internal/fusefrontend/node_xattr.go | |
parent | b23e21f61fc51ffa9c1c823778553925e1cc115e (diff) |
fusefrontend: run acl Setxattr in user context
The result of setting an acl depends on who runs the
operation!
Fixes fuse-xfstests generic/375
(see https://github.com/rfjakob/fuse-xfstests/wiki/results_2021-05-19)
Diffstat (limited to 'internal/fusefrontend/node_xattr.go')
-rw-r--r-- | internal/fusefrontend/node_xattr.go | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/internal/fusefrontend/node_xattr.go b/internal/fusefrontend/node_xattr.go index 925dcbf..ceb10f1 100644 --- a/internal/fusefrontend/node_xattr.go +++ b/internal/fusefrontend/node_xattr.go @@ -7,6 +7,8 @@ import ( "strings" "syscall" + "github.com/hanwen/go-fuse/v2/fuse" + "github.com/rfjakob/gocryptfs/internal/tlog" ) @@ -90,7 +92,12 @@ func (n *Node) Setxattr(ctx context.Context, attr string, data []byte, flags uin // ACLs are passed through without encryption if isAcl(attr) { - return n.setXAttr(attr, data, flags) + // result of setting an acl depends on the user doing it + var context *fuse.Context + if rn.args.PreserveOwner { + context = toFuseCtx(ctx) + } + return n.setXAttr(context, attr, data, flags) } cAttr, err := rn.encryptXattrName(attr) @@ -98,7 +105,7 @@ func (n *Node) Setxattr(ctx context.Context, attr string, data []byte, flags uin return syscall.EINVAL } cData := rn.encryptXattrValue(data) - return n.setXAttr(cAttr, cData, flags) + return n.setXAttr(nil, cAttr, cData, flags) } // RemoveXAttr - FUSE call. |