From 5801a4b8b5e45a83f8ed2168a1601631ca852565 Mon Sep 17 00:00:00 2001 From: zhijian Date: Fri, 27 Sep 2024 11:45:04 +0800 Subject: [PATCH 1/5] add the XattrNoSecurity flag to enable mac os Finder to set extended attributes --- pkg/meta/base.go | 2 +- pkg/meta/utils_darwin.go | 1 + pkg/meta/utils_linux.go | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/meta/base.go b/pkg/meta/base.go index c9a4eea7dd4d..ebc1dce82155 100644 --- a/pkg/meta/base.go +++ b/pkg/meta/base.go @@ -1669,7 +1669,7 @@ func (m *baseMeta) SetXattr(ctx Context, inode Ino, name string, value []byte, f return syscall.EINVAL } switch flags { - case 0, XattrCreate, XattrReplace: + case 0, XattrCreate, XattrReplace, XattrNoSecurity: default: return syscall.EINVAL } diff --git a/pkg/meta/utils_darwin.go b/pkg/meta/utils_darwin.go index 30b1ccb89fd4..fea6806da62c 100644 --- a/pkg/meta/utils_darwin.go +++ b/pkg/meta/utils_darwin.go @@ -17,4 +17,5 @@ const ( XattrCreateOrReplace = 0 XattrCreate = sys.XATTR_CREATE XattrReplace = sys.XATTR_REPLACE + XattrNoSecurity = sys.XATTR_NOSECURITY ) diff --git a/pkg/meta/utils_linux.go b/pkg/meta/utils_linux.go index 39d26708c246..bc4ca9d460b8 100644 --- a/pkg/meta/utils_linux.go +++ b/pkg/meta/utils_linux.go @@ -17,4 +17,5 @@ const ( XattrCreateOrReplace = 0 XattrCreate = sys.XATTR_CREATE XattrReplace = sys.XATTR_REPLACE + XattrNoSecurity = 8 ) From 6ff2fc24623d27c4786034b2e3e34392d09d1652 Mon Sep 17 00:00:00 2001 From: zhijian Date: Fri, 27 Sep 2024 13:34:49 +0800 Subject: [PATCH 2/5] fix window build --- pkg/meta/utils_windows.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/meta/utils_windows.go b/pkg/meta/utils_windows.go index 5157b99e33d8..be0fade5711a 100644 --- a/pkg/meta/utils_windows.go +++ b/pkg/meta/utils_windows.go @@ -30,4 +30,5 @@ const ( XattrCreateOrReplace = 0 XattrCreate = 1 XattrReplace = 2 + XattrNoSecurity = 8 ) From d17a848882ca201f51a5e90547d731dc837b818a Mon Sep 17 00:00:00 2001 From: zhijian Date: Fri, 27 Sep 2024 14:27:59 +0800 Subject: [PATCH 3/5] fix --- pkg/meta/base.go | 5 ++++- pkg/meta/redis.go | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/meta/base.go b/pkg/meta/base.go index ebc1dce82155..b2b31190d927 100644 --- a/pkg/meta/base.go +++ b/pkg/meta/base.go @@ -1669,8 +1669,11 @@ func (m *baseMeta) SetXattr(ctx Context, inode Ino, name string, value []byte, f return syscall.EINVAL } switch flags { - case 0, XattrCreate, XattrReplace, XattrNoSecurity: + case 0, XattrCreate, XattrReplace: default: + if runtime.GOOS == "darwin" && flags == XattrNoSecurity { + break + } return syscall.EINVAL } diff --git a/pkg/meta/redis.go b/pkg/meta/redis.go index 24f84d8e0c11..12e47c1a4eaa 100644 --- a/pkg/meta/redis.go +++ b/pkg/meta/redis.go @@ -3343,7 +3343,7 @@ func (m *redisMeta) doSetXattr(ctx Context, inode Ino, name string, value []byte return nil }) return err - default: // XattrCreateOrReplace + default: // XattrCreateOrReplace XattrNoSecurity _, err := tx.HSet(ctx, key, name, value).Result() return err } From fec1d07735217faf77b673a25fe124abc2da9593 Mon Sep 17 00:00:00 2001 From: zhijian Date: Fri, 27 Sep 2024 15:08:27 +0800 Subject: [PATCH 4/5] fix --- pkg/meta/base.go | 3 --- pkg/meta/redis.go | 2 +- pkg/vfs/vfs.go | 4 ++++ 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pkg/meta/base.go b/pkg/meta/base.go index b2b31190d927..c9a4eea7dd4d 100644 --- a/pkg/meta/base.go +++ b/pkg/meta/base.go @@ -1671,9 +1671,6 @@ func (m *baseMeta) SetXattr(ctx Context, inode Ino, name string, value []byte, f switch flags { case 0, XattrCreate, XattrReplace: default: - if runtime.GOOS == "darwin" && flags == XattrNoSecurity { - break - } return syscall.EINVAL } diff --git a/pkg/meta/redis.go b/pkg/meta/redis.go index 12e47c1a4eaa..24f84d8e0c11 100644 --- a/pkg/meta/redis.go +++ b/pkg/meta/redis.go @@ -3343,7 +3343,7 @@ func (m *redisMeta) doSetXattr(ctx Context, inode Ino, name string, value []byte return nil }) return err - default: // XattrCreateOrReplace XattrNoSecurity + default: // XattrCreateOrReplace _, err := tx.HSet(ctx, key, name, value).Result() return err } diff --git a/pkg/vfs/vfs.go b/pkg/vfs/vfs.go index 45db3fe2980f..d1d2172149f2 100644 --- a/pkg/vfs/vfs.go +++ b/pkg/vfs/vfs.go @@ -1072,6 +1072,10 @@ func (v *VFS) SetXattr(ctx Context, ino Ino, name string, value []byte, flags ui err = v.Meta.SetFacl(ctx, ino, aclType, rule) v.invalidateAttr(ino) } else { + // ignore NoSecurity flag + if (flags & meta.XattrNoSecurity) != 0 { + flags &= ^uint32(meta.XattrNoSecurity) + } err = v.Meta.SetXattr(ctx, ino, name, value, flags) } return From a0b2b60d76255b7f801d675c7aa16140095d57f6 Mon Sep 17 00:00:00 2001 From: zhijian Date: Sun, 29 Sep 2024 12:03:19 +0800 Subject: [PATCH 5/5] fix --- pkg/vfs/vfs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/vfs/vfs.go b/pkg/vfs/vfs.go index d1d2172149f2..8a7937129f71 100644 --- a/pkg/vfs/vfs.go +++ b/pkg/vfs/vfs.go @@ -1073,7 +1073,7 @@ func (v *VFS) SetXattr(ctx Context, ino Ino, name string, value []byte, flags ui v.invalidateAttr(ino) } else { // ignore NoSecurity flag - if (flags & meta.XattrNoSecurity) != 0 { + if runtime.GOOS == "darwin" && (flags&meta.XattrNoSecurity) != 0 { flags &= ^uint32(meta.XattrNoSecurity) } err = v.Meta.SetXattr(ctx, ino, name, value, flags)