xattrs.go 802 B

12345678910111213141516171819202122232425262728293031323334
  1. // +build selinux,linux
  2. package selinux
  3. import (
  4. "golang.org/x/sys/unix"
  5. )
  6. // Returns a []byte slice if the xattr is set and nil otherwise
  7. // Requires path and its attribute as arguments
  8. func lgetxattr(path string, attr string) ([]byte, error) {
  9. // Start with a 128 length byte array
  10. dest := make([]byte, 128)
  11. sz, errno := unix.Lgetxattr(path, attr, dest)
  12. if errno == unix.ERANGE {
  13. // Buffer too small, get the real size first
  14. sz, errno = unix.Lgetxattr(path, attr, []byte{})
  15. if errno != nil {
  16. return nil, errno
  17. }
  18. dest = make([]byte, sz)
  19. sz, errno = unix.Lgetxattr(path, attr, dest)
  20. }
  21. if errno != nil {
  22. return nil, errno
  23. }
  24. return dest[:sz], nil
  25. }
  26. func lsetxattr(path string, attr string, data []byte, flags int) error {
  27. return unix.Lsetxattr(path, attr, data, flags)
  28. }