github.com/anchore/syft@v1.4.2-0.20240516191711-1bec1fc5d397/syft/pkg/alpm.go (about) 1 package pkg 2 3 import ( 4 "sort" 5 "time" 6 7 "github.com/scylladb/go-set/strset" 8 9 "github.com/anchore/syft/syft/file" 10 ) 11 12 var _ FileOwner = (*AlpmDBEntry)(nil) 13 14 const AlpmDBGlob = "**/var/lib/pacman/local/**/desc" 15 16 // AlpmDBEntry is a struct that represents the package data stored in the pacman fla-filet stores for arch linux. 17 type AlpmDBEntry struct { 18 BasePackage string `mapstructure:"base" json:"basepackage" cyclonedx:"basepackage"` 19 Package string `mapstructure:"name" json:"package" cyclonedx:"package"` 20 Version string `mapstructure:"version" json:"version" cyclonedx:"version"` 21 Description string `mapstructure:"desc" json:"description" cyclonedx:"description"` 22 Architecture string `mapstructure:"arch" json:"architecture" cyclonedx:"architecture"` 23 Size int `mapstructure:"size" json:"size" cyclonedx:"size"` 24 Packager string `mapstructure:"packager" json:"packager"` 25 URL string `mapstructure:"url" json:"url"` 26 Validation string `mapstructure:"validation" json:"validation"` 27 Reason int `mapstructure:"reason" json:"reason"` 28 Files []AlpmFileRecord `mapstructure:"files" json:"files"` 29 Backup []AlpmFileRecord `mapstructure:"backup" json:"backup"` 30 Provides []string `mapstructure:"provides" json:"provides,omitempty"` 31 Depends []string `mapstructure:"depends" json:"depends,omitempty"` 32 } 33 34 type AlpmFileRecord struct { 35 Path string `mapstruture:"path" json:"path,omitempty"` 36 Type string `mapstructure:"type" json:"type,omitempty"` 37 UID string `mapstructure:"uid" json:"uid,omitempty"` 38 GID string `mapstructure:"gid" json:"gid,omitempty"` 39 Time time.Time `mapstructure:"time" json:"time,omitempty"` 40 Size string `mapstructure:"size" json:"size,omitempty"` 41 Link string `mapstructure:"link" json:"link,omitempty"` 42 Digests []file.Digest `mapstructure:"digests" json:"digest,omitempty"` 43 } 44 45 func (m AlpmDBEntry) OwnedFiles() (result []string) { 46 s := strset.New() 47 for _, f := range m.Files { 48 if f.Path != "" { 49 s.Add(f.Path) 50 } 51 } 52 result = s.List() 53 sort.Strings(result) 54 return result 55 }