mirror of
https://github.com/anchore/syft.git
synced 2025-11-19 09:23:15 +01:00
* feat: add Debian archive (.deb) file cataloger Add a cataloger that parses Debian package (.deb) archive files directly, allowing Syft to discover packages from .deb files without requiring them to be installed on the system. This implements issue #3315. Key features: - Parse .deb AR archives to extract package metadata - Support for gzip, xz, and zstd compressed control files - Extract package metadata from control files - Process file information from md5sums files - Mark configuration files from conffiles entries - Handle trailing slashes in archive member names Signed-off-by: Alan Pope <alan.pope@anchore.com> * chore: run go mod tidy to fix failing workflow Signed-off-by: Alan Pope <alan.pope@anchore.com> * add license processing to dpkg archive cataloger + add tests Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * update json schema with dpkg archive type Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * update comments Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> --------- Signed-off-by: Alan Pope <alan.pope@anchore.com> Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> Co-authored-by: Alex Goodman <wagoodman@users.noreply.github.com>
67 lines
1.3 KiB
Go
67 lines
1.3 KiB
Go
package pkg
|
|
|
|
import (
|
|
"sort"
|
|
"strings"
|
|
|
|
"github.com/anchore/packageurl-go"
|
|
"github.com/anchore/syft/syft/linux"
|
|
)
|
|
|
|
const (
|
|
PURLQualifierArch = "arch"
|
|
PURLQualifierDistro = "distro"
|
|
PURLQualifierEpoch = "epoch"
|
|
PURLQualifierVCSURL = "vcs_url"
|
|
|
|
// PURLQualifierUpstream this qualifier is not in the pURL spec, but is used by grype to perform indirect matching based on source information
|
|
PURLQualifierUpstream = "upstream"
|
|
|
|
purlCargoPkgType = "cargo"
|
|
purlGradlePkgType = "gradle"
|
|
)
|
|
|
|
func PURLQualifiers(vars map[string]string, release *linux.Release) (q packageurl.Qualifiers) {
|
|
keys := make([]string, 0, len(vars))
|
|
for k := range vars {
|
|
keys = append(keys, k)
|
|
}
|
|
sort.Strings(keys)
|
|
|
|
for _, k := range keys {
|
|
val := vars[k]
|
|
if val == "" {
|
|
continue
|
|
}
|
|
q = append(q, packageurl.Qualifier{
|
|
Key: k,
|
|
Value: vars[k],
|
|
})
|
|
}
|
|
|
|
var distroQualifiers []string
|
|
|
|
if release == nil {
|
|
return q
|
|
}
|
|
|
|
if release.ID != "" {
|
|
distroQualifiers = append(distroQualifiers, release.ID)
|
|
}
|
|
|
|
if release.VersionID != "" {
|
|
distroQualifiers = append(distroQualifiers, release.VersionID)
|
|
} else if release.BuildID != "" {
|
|
distroQualifiers = append(distroQualifiers, release.BuildID)
|
|
}
|
|
|
|
if len(distroQualifiers) > 0 {
|
|
q = append(q, packageurl.Qualifier{
|
|
Key: PURLQualifierDistro,
|
|
Value: strings.Join(distroQualifiers, "-"),
|
|
})
|
|
}
|
|
|
|
return q
|
|
}
|