| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- package smb
- import (
- "strings"
- "github.com/kormoc/xattr"
- )
- // https://developer.apple.com/documentation/coreservices/file_metadata/mditem/common_metadata_attribute_keys
- type XATTR_Key string
- const (
- /** Extended Attributes Constants **/
- // XATTR_MAX_EMBEDDED_SIZE XATTR_Key = 3804 // = 3 Ki + 732
- // XATTR_APFS_COW_EXEMPT_COUNT_NAME XATTR_Key = "com.apple.fs.cow-exempt-file-count"
- // XATTR_DB_REBUILD_IN_PROGRESS_EA_NAME XATTR_Key = "com.apple.assetsd.dbRebuildInProgress"
- // XATTR_DB_REBUILD_UUID_EA_NAME XATTR_Key = "com.apple.assetsd.dbRebuildUuid"
- // XATTR_THUMBNAIL_CAMERA_PREVIEW_IMAGE_ASSETID_EA_NAME XATTR_Key= "com.apple.assetsd.thumbnailCameraPreviewImageAssetID"
- // XATTR_UUID_EA_NAME XATTR_Key= "com.apple.assetsd.UUID"
- // XATTR_DECMPFS_EA_NAME XATTR_Key = "com.apple.decmpfs"
- XATTR_FINDER_INFO_EA_NAME XATTR_Key = "com.apple.FinderInfo"
- // XATTR_SYMLINK_EA_NAME XATTR_Key = "com.apple.fs.symlink"
- // XATTR_FIRMLINK_EA_NAME XATTR_Key = "com.apple.fs.firmlink"
- // XATTR_INFO_EA_NAME XATTR_Key = "com.apple.genstore.info"
- // XATTR_ORIG_DISPLAY_NAME_EA_NAME XATTR_Key = "com.apple.genstore.origdisplayname"
- // XATTR_ORIG_PERMS_V1_EA_NAME XATTR_Key = "com.apple.genstore.orig_perms_v1"
- // XATTR_ORIG_POSIX_NAME_EA_NAME XATTR_Key = "com.apple.genstore.origposixname"
- // XATTR_SHA1_EA_NAME XATTR_Key = "com.apple.GeoServices.SHA1"
- // XATTR_INSTALL_TYPE_EA_NAME XATTR_Key = "com.apple.installd.installType"
- // XATTR_UNIQUE_INSTALLID_EA_NAME XATTR_Key = "com.apple.installd.uniqueInstallID"
- XATTR_PS_EA_NAME XATTR_Key = "com.apple.lastuseddate#PS"
- XATTR_KMD_ITEM_USER_TAGS_EA_NAME XATTR_Key = "com.apple.metadata:_kMDItemUserTags"
- // XATTR_COM_APPLE_BACKUP_EXCLUDEITEM_EA_NAME XATTR_Key = "com.apple.metadata:com_apple_backup_excludeItem"
- // XATTR_KMD_ITEM_DOWNLOADED_DATE_EA_NAME XATTR_Key = "com.apple.metadata:kMDItemDownloadedDate"
- // XATTR_KMD_ITEM_WHERE_FROMS_EA_NAME XATTR_Key = "com.apple.metadata:kMDItemWhereFroms"
- // XATTR_KMD_LABEL_EA_NAME XATTR_Key = "com.apple.metadata:kMDLabel_fwlfb7nbt2o7degof3q2o2btjy"
- // XATTR_QUARANTINE_EA_NAME XATTR_Key = "com.apple.quarantine"
- // XATTR_RESOURCEFORK_EA_NAME XATTR_Key = "com.apple.ResourceFork"
- // XATTR_ROOTLESS_EA_NAME XATTR_Key = "com.apple.rootless"
- // XATTR_SECURITY_EA_NAME XATTR_Key = "com.apple.system.Security"
- // XATTR_TEXT_ENCODING_EA_NAME XATTR_Key = "com.apple.TextEncoding"
- // XATTR_LAST_UPGRADE_CHECK_EA_NAME XATTR_Key = "LastUpgradeCheck"
- // XATTR_LOCK_EA_NAME XATTR_Key = "lock"
- // XATTR_CRASHPAD_DB_INITIALIZED_EA_NAME XATTR_Key = "org.chromium.crashpad.database.initialized"
- )
- func IsXAttr(name string) (bool, string, string) {
- index := strings.Index(name, ":")
- if index >= 0 {
- path := name[:index]
- xatrr := name[index:]
- if strings.Contains(xatrr, ":com.apple.") {
- return true, path, xatrr[1:]
- }
- }
- return false, "", ""
- }
- func XAttrSet(name string, key string, value []byte) error {
- err := xattr.SetBytes(name, key, value)
- return err
- }
- func XAttrGet(name string, key string) (value []byte, err error) {
- value, err = xattr.GetBytes(name, key)
- return
- }
- func XAttrDel(name string, key string) (err error) {
- err = xattr.Remove(name, key)
- return
- }
- func XAttrClear(name string) (err error) {
- keys, err := XAttrGetKeys(name)
- if err != nil {
- return
- }
- for _, key := range keys {
- err = xattr.Remove(name, key)
- if err != nil {
- return
- }
- }
- return nil
- }
- func XAttrGetKeys(name string) (keys []string, err error) {
- defer func() {
- if cerr := recover(); cerr != nil {
- err = nil
- }
- }()
- keysBuf, err := xattr.ListBytes(name)
- if err != nil {
- return nil, err
- }
- keys = strings.Split(string(keysBuf), "\x00")
- if len(keys[len(keys)-1]) == 0 {
- keys = keys[:len(keys)-1]
- }
- return
- }
|