diff --git a/go.mod b/go.mod index 8ee98b358..2aaf087ed 100644 --- a/go.mod +++ b/go.mod @@ -67,7 +67,7 @@ require ( github.com/opencloud-eu/reva/v2 v2.34.0 github.com/orcaman/concurrent-map v1.0.0 github.com/pkg/errors v0.9.1 - github.com/pkg/xattr v0.4.11 + github.com/pkg/xattr v0.4.12 github.com/prometheus/client_golang v1.22.0 github.com/r3labs/sse/v2 v2.10.0 github.com/riandyrn/otelchi v0.12.1 diff --git a/go.sum b/go.sum index f7e006cd5..ef64ad99b 100644 --- a/go.sum +++ b/go.sum @@ -904,8 +904,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= -github.com/pkg/xattr v0.4.11 h1:DA7usy0rTMNMGvm06b5LhZUwiPj708D89S8DkXpMB1E= -github.com/pkg/xattr v0.4.11/go.mod h1:di8WF84zAKk8jzR1UBTEWh9AUlIZZ7M/JNt8e9B6ktU= +github.com/pkg/xattr v0.4.12 h1:rRTkSyFNTRElv6pkA3zpjHpQ90p/OdHQC1GmGh1aTjM= +github.com/pkg/xattr v0.4.12/go.mod h1:di8WF84zAKk8jzR1UBTEWh9AUlIZZ7M/JNt8e9B6ktU= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/vendor/github.com/pkg/xattr/xattr_darwin.go b/vendor/github.com/pkg/xattr/xattr_darwin.go index ee7a501da..5ff3839e9 100644 --- a/vendor/github.com/pkg/xattr/xattr_darwin.go +++ b/vendor/github.com/pkg/xattr/xattr_darwin.go @@ -6,6 +6,7 @@ package xattr import ( "os" "syscall" + "unsafe" "golang.org/x/sys/unix" ) @@ -37,7 +38,11 @@ func lgetxattr(path string, name string, data []byte) (int, error) { } func fgetxattr(f *os.File, name string, data []byte) (int, error) { - return getxattr(f.Name(), name, data) + path, err := getPath(f) + if err != nil { + return 0, err + } + return getxattr(path, name, data) } func setxattr(path string, name string, data []byte, flags int) error { @@ -49,7 +54,11 @@ func lsetxattr(path string, name string, data []byte, flags int) error { } func fsetxattr(f *os.File, name string, data []byte, flags int) error { - return setxattr(f.Name(), name, data, flags) + path, err := getPath(f) + if err != nil { + return err + } + return setxattr(path, name, data, flags) } func removexattr(path string, name string) error { @@ -61,7 +70,11 @@ func lremovexattr(path string, name string) error { } func fremovexattr(f *os.File, name string) error { - return removexattr(f.Name(), name) + path, err := getPath(f) + if err != nil { + return err + } + return removexattr(path, name) } func listxattr(path string, data []byte) (int, error) { @@ -73,7 +86,28 @@ func llistxattr(path string, data []byte) (int, error) { } func flistxattr(f *os.File, data []byte) (int, error) { - return listxattr(f.Name(), data) + path, err := getPath(f) + if err != nil { + return 0, err + } + return listxattr(path, data) +} + +// getPath returns the full path to the specified file. +func getPath(f *os.File) (string, error) { + var buf [unix.PathMax]byte + _, _, err := unix.Syscall(unix.SYS_FCNTL, + uintptr(int(f.Fd())), + uintptr(unix.F_GETPATH), + uintptr(unsafe.Pointer(&buf[0]))) + if err != 0 { + return "", err + } + n := 0 + for n < len(buf) && buf[n] != 0 { + n++ + } + return string(buf[:n]), nil } // stringsFromByteSlice converts a sequence of attributes to a []string. diff --git a/vendor/modules.txt b/vendor/modules.txt index 9c6a37000..51d46b94a 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1637,7 +1637,7 @@ github.com/pjbgf/sha1cd/ubc # github.com/pkg/errors v0.9.1 ## explicit github.com/pkg/errors -# github.com/pkg/xattr v0.4.11 +# github.com/pkg/xattr v0.4.12 ## explicit; go 1.14 github.com/pkg/xattr # github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2