mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 08:23:15 +01:00
* add documentation to key fields Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * regenerate json schema Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> --------- Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>
99 lines
3.7 KiB
Go
99 lines
3.7 KiB
Go
package pkg
|
|
|
|
import (
|
|
"sort"
|
|
"time"
|
|
|
|
"github.com/scylladb/go-set/strset"
|
|
|
|
"github.com/anchore/syft/syft/file"
|
|
)
|
|
|
|
var _ FileOwner = (*AlpmDBEntry)(nil)
|
|
|
|
const AlpmDBGlob = "**/var/lib/pacman/local/**/desc"
|
|
|
|
// AlpmDBEntry is a struct that represents the package data stored in the pacman flat-file stores for arch linux.
|
|
type AlpmDBEntry struct {
|
|
// BasePackage is the base package name this package was built from (source package in Arch build system)
|
|
BasePackage string `mapstructure:"base" json:"basepackage" cyclonedx:"basepackage"`
|
|
|
|
// Package is the package name as found in the desc file
|
|
Package string `mapstructure:"name" json:"package" cyclonedx:"package"`
|
|
|
|
// Version is the package version as found in the desc file
|
|
Version string `mapstructure:"version" json:"version" cyclonedx:"version"`
|
|
|
|
// Description is a human-readable package description
|
|
Description string `mapstructure:"desc" json:"description" cyclonedx:"description"`
|
|
|
|
// Architecture is the target CPU architecture as defined in Arch architecture spec (e.g. x86_64, aarch64, or "any" for arch-independent packages)
|
|
Architecture string `mapstructure:"arch" json:"architecture" cyclonedx:"architecture"`
|
|
|
|
// Size is the installed size in bytes
|
|
Size int `mapstructure:"size" json:"size" cyclonedx:"size"`
|
|
|
|
// Packager is the name and email of the person who packaged this (RFC822 format)
|
|
Packager string `mapstructure:"packager" json:"packager"`
|
|
|
|
// URL is the upstream project URL
|
|
URL string `mapstructure:"url" json:"url"`
|
|
|
|
// Validation is the validation method used for package integrity (e.g. pgp signature, sha256 checksum)
|
|
Validation string `mapstructure:"validation" json:"validation"`
|
|
|
|
// Reason is the installation reason tracked by pacman (0=explicitly installed by user, 1=installed as dependency)
|
|
Reason int `mapstructure:"reason" json:"reason"`
|
|
|
|
// Files are the files installed by this package
|
|
Files []AlpmFileRecord `mapstructure:"files" json:"files"`
|
|
|
|
// Backup is the list of configuration files that pacman backs up before upgrades
|
|
Backup []AlpmFileRecord `mapstructure:"backup" json:"backup"`
|
|
|
|
// Provides are virtual packages provided by this package (allows other packages to depend on capabilities rather than specific packages)
|
|
Provides []string `mapstructure:"provides" json:"provides,omitempty"`
|
|
|
|
// Depends are the runtime dependencies required by this package
|
|
Depends []string `mapstructure:"depends" json:"depends,omitempty"`
|
|
}
|
|
|
|
// AlpmFileRecord represents a single file entry within an Arch Linux package with its associated metadata tracked by pacman.
|
|
type AlpmFileRecord struct {
|
|
// Path is the file path relative to the filesystem root
|
|
Path string `mapstruture:"path" json:"path,omitempty"`
|
|
|
|
// Type is the file type (e.g. regular file, directory, symlink)
|
|
Type string `mapstructure:"type" json:"type,omitempty"`
|
|
|
|
// UID is the file owner user ID as recorded by pacman
|
|
UID string `mapstructure:"uid" json:"uid,omitempty"`
|
|
|
|
// GID is the file owner group ID as recorded by pacman
|
|
GID string `mapstructure:"gid" json:"gid,omitempty"`
|
|
|
|
// Time is the file modification timestamp
|
|
Time time.Time `mapstructure:"time" json:"time,omitempty"`
|
|
|
|
// Size is the file size in bytes
|
|
Size string `mapstructure:"size" json:"size,omitempty"`
|
|
|
|
// Link is the symlink target path if this is a symlink
|
|
Link string `mapstructure:"link" json:"link,omitempty"`
|
|
|
|
// Digests contains file content hashes for integrity verification
|
|
Digests []file.Digest `mapstructure:"digests" json:"digest,omitempty"`
|
|
}
|
|
|
|
func (m AlpmDBEntry) OwnedFiles() (result []string) {
|
|
s := strset.New()
|
|
for _, f := range m.Files {
|
|
if f.Path != "" {
|
|
s.Add(f.Path)
|
|
}
|
|
}
|
|
result = s.List()
|
|
sort.Strings(result)
|
|
return result
|
|
}
|