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  }