mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 16:33:21 +01:00
better binary cataloger description
Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>
This commit is contained in:
parent
02f61abc62
commit
95ba1b04a4
@ -115,10 +115,19 @@ func renderCatalogerInfoJSON(doc *capabilities.Document, catalogers []capabiliti
|
||||
Fields []configFieldInfo `json:"fields,omitempty"`
|
||||
}
|
||||
|
||||
type detectorPackageInfo struct {
|
||||
Class string `json:"class"`
|
||||
Name string `json:"name"`
|
||||
PURL string `json:"purl"`
|
||||
CPEs []string `json:"cpes"`
|
||||
Type string `json:"type"`
|
||||
}
|
||||
|
||||
type patternInfo struct {
|
||||
Method string `json:"method"`
|
||||
Criteria []string `json:"criteria"`
|
||||
Conditions []capabilities.DetectorCondition `json:"conditions,omitempty"`
|
||||
Packages []detectorPackageInfo `json:"packages,omitempty"`
|
||||
Comment string `json:"comment,omitempty"`
|
||||
Capabilities capabilities.CapabilitySet `json:"capabilities,omitempty"`
|
||||
}
|
||||
@ -146,10 +155,23 @@ func renderCatalogerInfoJSON(doc *capabilities.Document, catalogers []capabiliti
|
||||
}
|
||||
|
||||
for _, parser := range cat.Parsers {
|
||||
// convert detector packages
|
||||
var pkgs []detectorPackageInfo
|
||||
for _, pkg := range parser.Detector.Packages {
|
||||
pkgs = append(pkgs, detectorPackageInfo{
|
||||
Class: pkg.Class,
|
||||
Name: pkg.Name,
|
||||
PURL: pkg.PURL,
|
||||
CPEs: pkg.CPEs,
|
||||
Type: pkg.Type,
|
||||
})
|
||||
}
|
||||
|
||||
pi := patternInfo{
|
||||
Method: string(parser.Detector.Method),
|
||||
Criteria: parser.Detector.Criteria,
|
||||
Conditions: parser.Detector.Conditions,
|
||||
Packages: pkgs,
|
||||
Comment: parser.Detector.Comment,
|
||||
Capabilities: parser.Capabilities,
|
||||
}
|
||||
@ -161,10 +183,23 @@ func renderCatalogerInfoJSON(doc *capabilities.Document, catalogers []capabiliti
|
||||
info.Capabilities = cat.Capabilities
|
||||
|
||||
for _, det := range cat.Detectors {
|
||||
// convert detector packages
|
||||
var pkgs []detectorPackageInfo
|
||||
for _, pkg := range det.Packages {
|
||||
pkgs = append(pkgs, detectorPackageInfo{
|
||||
Class: pkg.Class,
|
||||
Name: pkg.Name,
|
||||
PURL: pkg.PURL,
|
||||
CPEs: pkg.CPEs,
|
||||
Type: pkg.Type,
|
||||
})
|
||||
}
|
||||
|
||||
pi := patternInfo{
|
||||
Method: string(det.Method),
|
||||
Criteria: det.Criteria,
|
||||
Conditions: det.Conditions,
|
||||
Packages: pkgs,
|
||||
Comment: det.Comment,
|
||||
}
|
||||
info.Patterns = append(info.Patterns, pi)
|
||||
|
||||
@ -8,7 +8,6 @@ import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/anchore/syft/internal/capabilities"
|
||||
@ -650,24 +649,10 @@ func RepoRoot() (string, error) {
|
||||
return absRepoRoot, nil
|
||||
}
|
||||
|
||||
// extractBinaryClassifierGlobs extracts all FileGlob patterns from binary classifiers
|
||||
func extractBinaryClassifierGlobs() []string {
|
||||
// extractBinaryClassifiers extracts all binary classifiers with their full information
|
||||
func extractBinaryClassifiers() []binary.Classifier {
|
||||
classifiers := binary.DefaultClassifiers()
|
||||
|
||||
// extract all unique FileGlob values
|
||||
globs := make(map[string]bool)
|
||||
for _, classifier := range classifiers {
|
||||
if classifier.FileGlob != "" {
|
||||
globs[classifier.FileGlob] = true
|
||||
}
|
||||
}
|
||||
|
||||
// convert to sorted slice
|
||||
result := make([]string, 0, len(globs))
|
||||
for glob := range globs {
|
||||
result = append(result, glob)
|
||||
}
|
||||
sort.Strings(result)
|
||||
|
||||
return result
|
||||
// return all classifiers (already sorted by the default function)
|
||||
return classifiers
|
||||
}
|
||||
|
||||
@ -7,10 +7,20 @@ import (
|
||||
"github.com/scylladb/go-set/strset"
|
||||
|
||||
"github.com/anchore/syft/internal/capabilities"
|
||||
"github.com/anchore/syft/syft/pkg/cataloger/binary"
|
||||
)
|
||||
|
||||
const genericCatalogerType = "generic"
|
||||
|
||||
// stripPURLVersion removes the @version suffix from a PURL string
|
||||
// e.g., "pkg:generic/python@version" -> "pkg:generic/python"
|
||||
func stripPURLVersion(purl string) string {
|
||||
if idx := strings.LastIndex(purl, "@"); idx != -1 {
|
||||
return purl[:idx]
|
||||
}
|
||||
return purl
|
||||
}
|
||||
|
||||
// catalogerTypeOverrides specifies catalogers that should have their type manually controlled
|
||||
// rather than determined from the discovered cataloger structure.
|
||||
// This is useful when a cataloger is discovered as "generic" but should be treated as "custom"
|
||||
@ -71,10 +81,10 @@ func RegenerateCapabilities(yamlPath string, repoRoot string) (*Statistics, erro
|
||||
}
|
||||
fmt.Println(" done")
|
||||
|
||||
// 1b. Extract binary classifier globs
|
||||
fmt.Print(" → Extracting binary classifier globs...")
|
||||
binaryClassifierGlobs := extractBinaryClassifierGlobs()
|
||||
fmt.Printf(" found %d globs\n", len(binaryClassifierGlobs))
|
||||
// 1b. Extract binary classifiers
|
||||
fmt.Print(" → Extracting binary classifiers...")
|
||||
binaryClassifiers := extractBinaryClassifiers()
|
||||
fmt.Printf(" found %d classifiers\n", len(binaryClassifiers))
|
||||
|
||||
// Count parser functions
|
||||
for _, disc := range discovered {
|
||||
@ -205,7 +215,7 @@ func RegenerateCapabilities(yamlPath string, repoRoot string) (*Statistics, erro
|
||||
discovered,
|
||||
customCatalogerMetadata,
|
||||
customCatalogerPackageTypes,
|
||||
binaryClassifierGlobs,
|
||||
binaryClassifiers,
|
||||
allCatalogers,
|
||||
existing,
|
||||
discoveredConfigs,
|
||||
@ -286,19 +296,19 @@ func (r *CatalogerRegistry) AllCatalogers() []capabilities.CatalogerInfo {
|
||||
return r.all
|
||||
}
|
||||
|
||||
// EnrichmentData encapsulates metadata enrichment information (metadata types, package types, binary classifier globs)
|
||||
// EnrichmentData encapsulates metadata enrichment information (metadata types, package types, binary classifiers)
|
||||
type EnrichmentData struct {
|
||||
metadata map[string][]string
|
||||
packageTypes map[string][]string
|
||||
binaryClassifierGlobs []string
|
||||
metadata map[string][]string
|
||||
packageTypes map[string][]string
|
||||
binaryClassifiers []binary.Classifier
|
||||
}
|
||||
|
||||
// NewEnrichmentData creates a new enrichment data container
|
||||
func NewEnrichmentData(metadata, packageTypes map[string][]string, binaryClassifierGlobs []string) *EnrichmentData {
|
||||
func NewEnrichmentData(metadata, packageTypes map[string][]string, binaryClassifiers []binary.Classifier) *EnrichmentData {
|
||||
return &EnrichmentData{
|
||||
metadata: metadata,
|
||||
packageTypes: packageTypes,
|
||||
binaryClassifierGlobs: binaryClassifierGlobs,
|
||||
metadata: metadata,
|
||||
packageTypes: packageTypes,
|
||||
binaryClassifiers: binaryClassifiers,
|
||||
}
|
||||
}
|
||||
|
||||
@ -326,16 +336,36 @@ func (e *EnrichmentData) EnrichEntry(catalogerName string, entry *capabilities.C
|
||||
}
|
||||
}
|
||||
|
||||
// EnrichWithBinaryClassifier enriches an entry with binary classifier globs if it's the binary-classifier-cataloger
|
||||
// EnrichWithBinaryClassifier enriches an entry with binary classifier detectors if it's the binary-classifier-cataloger
|
||||
func (e *EnrichmentData) EnrichWithBinaryClassifier(catalogerName string, entry *capabilities.CatalogerEntry) {
|
||||
// special handling for binary-classifier-cataloger: auto-generate detectors from classifier globs
|
||||
if catalogerName == "binary-classifier-cataloger" && len(e.binaryClassifierGlobs) > 0 {
|
||||
entry.Detectors = []capabilities.Detector{
|
||||
{
|
||||
// special handling for binary-classifier-cataloger: auto-generate one detector per classifier
|
||||
if catalogerName == "binary-classifier-cataloger" && len(e.binaryClassifiers) > 0 {
|
||||
var detectors []capabilities.Detector
|
||||
for _, classifier := range e.binaryClassifiers {
|
||||
// convert CPEs to strings
|
||||
cpeStrings := make([]string, len(classifier.CPEs))
|
||||
for i, c := range classifier.CPEs {
|
||||
cpeStrings[i] = c.Attributes.BindToFmtString()
|
||||
}
|
||||
|
||||
// strip @version from PURL
|
||||
purlStr := stripPURLVersion(classifier.PURL.String())
|
||||
|
||||
detectors = append(detectors, capabilities.Detector{
|
||||
Method: "glob",
|
||||
Criteria: e.binaryClassifierGlobs,
|
||||
},
|
||||
Criteria: []string{classifier.FileGlob},
|
||||
Packages: []capabilities.DetectorPackageInfo{
|
||||
{
|
||||
Class: classifier.Class,
|
||||
Name: classifier.Package,
|
||||
PURL: purlStr,
|
||||
CPEs: cpeStrings,
|
||||
Type: "BinaryPkg",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
entry.Detectors = detectors
|
||||
}
|
||||
}
|
||||
|
||||
@ -512,7 +542,7 @@ func mergeDiscoveredWithExisting(
|
||||
discovered map[string]DiscoveredCataloger,
|
||||
customMetadata map[string][]string,
|
||||
customPackageTypes map[string][]string,
|
||||
binaryClassifierGlobs []string,
|
||||
binaryClassifiers []binary.Classifier,
|
||||
allCatalogers []capabilities.CatalogerInfo,
|
||||
existing *capabilities.Document,
|
||||
configs map[string]capabilities.CatalogerConfigEntry,
|
||||
@ -520,7 +550,7 @@ func mergeDiscoveredWithExisting(
|
||||
catalogerConfigMappings map[string]string,
|
||||
) (*capabilities.Document, []orphanInfo, *mergeStatistics) {
|
||||
registry := NewCatalogerRegistry(discovered, allCatalogers)
|
||||
enrichment := NewEnrichmentData(customMetadata, customPackageTypes, binaryClassifierGlobs)
|
||||
enrichment := NewEnrichmentData(customMetadata, customPackageTypes, binaryClassifiers)
|
||||
merger := NewCatalogerMerger(registry, enrichment, existing, catalogerConfigMappings)
|
||||
|
||||
// set the AUTO-GENERATED config sections
|
||||
|
||||
@ -7,6 +7,7 @@ import (
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/anchore/syft/internal/capabilities"
|
||||
"github.com/anchore/syft/syft/pkg/cataloger/binary"
|
||||
)
|
||||
|
||||
func TestMergeConfigSections(t *testing.T) {
|
||||
@ -113,7 +114,7 @@ func TestMergeConfigSections(t *testing.T) {
|
||||
map[string]DiscoveredCataloger{},
|
||||
map[string][]string{},
|
||||
map[string][]string{},
|
||||
[]string{},
|
||||
[]binary.Classifier{},
|
||||
[]capabilities.CatalogerInfo{},
|
||||
tt.existingDoc,
|
||||
tt.newConfigs,
|
||||
@ -250,7 +251,7 @@ func TestMergePreservesManualCapabilities(t *testing.T) {
|
||||
discovered,
|
||||
map[string][]string{},
|
||||
map[string][]string{},
|
||||
[]string{},
|
||||
[]binary.Classifier{},
|
||||
[]capabilities.CatalogerInfo{
|
||||
{Name: "test-cataloger", Selectors: []string{"test"}},
|
||||
},
|
||||
@ -337,7 +338,7 @@ func TestCatalogerConfigFieldUpdatedForNewCatalogers(t *testing.T) {
|
||||
discovered,
|
||||
map[string][]string{},
|
||||
map[string][]string{},
|
||||
[]string{},
|
||||
[]binary.Classifier{},
|
||||
[]capabilities.CatalogerInfo{
|
||||
{Name: tt.catalogerName, Selectors: []string{"test"}},
|
||||
},
|
||||
@ -357,7 +358,7 @@ func TestCatalogerConfigFieldUpdatedForNewCatalogers(t *testing.T) {
|
||||
map[string]DiscoveredCataloger{},
|
||||
map[string][]string{},
|
||||
map[string][]string{},
|
||||
[]string{},
|
||||
[]binary.Classifier{},
|
||||
[]capabilities.CatalogerInfo{
|
||||
{Name: tt.catalogerName, Selectors: []string{"test"}},
|
||||
},
|
||||
|
||||
@ -49,9 +49,19 @@ type Detector struct {
|
||||
Method ArtifactDetectionMethod `yaml:"method" json:"method"` // AUTO-GENERATED
|
||||
Criteria []string `yaml:"criteria" json:"criteria"` // AUTO-GENERATED
|
||||
Conditions []DetectorCondition `yaml:"conditions,omitempty" json:"conditions,omitempty"` // MANUAL - when this detector should be active
|
||||
Packages []DetectorPackageInfo `yaml:"packages,omitempty" json:"packages,omitempty"` // AUTO-GENERATED for binary-classifier-cataloger
|
||||
Comment string `yaml:"comment,omitempty" json:"comment,omitempty"` // MANUAL - explanation of this detector
|
||||
}
|
||||
|
||||
// DetectorPackageInfo describes package information that a detector can produce
|
||||
type DetectorPackageInfo struct {
|
||||
Class string `yaml:"class" json:"class"` // classifier class (e.g., "python-binary-lib")
|
||||
Name string `yaml:"name" json:"name"` // package name (e.g., "python")
|
||||
PURL string `yaml:"purl" json:"purl"` // package URL without version (e.g., "pkg:generic/python")
|
||||
CPEs []string `yaml:"cpes" json:"cpes"` // CPE strings
|
||||
Type string `yaml:"type" json:"type"` // package type (e.g., "BinaryPkg")
|
||||
}
|
||||
|
||||
// DetectorCondition specifies when a detector should be active based on configuration
|
||||
type DetectorCondition struct {
|
||||
// When specifies config field names and their required values (all must match - AND logic)
|
||||
|
||||
@ -328,6 +328,7 @@ catalogers:
|
||||
- linux
|
||||
- os
|
||||
- package
|
||||
- pacman
|
||||
parsers: # AUTO-GENERATED structure
|
||||
- function: parseAlpmDB # AUTO-GENERATED
|
||||
detector: # AUTO-GENERATED
|
||||
@ -426,61 +427,578 @@ catalogers:
|
||||
detectors: # AUTO-GENERATED
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/VERSION*'
|
||||
- '**/arangosh'
|
||||
- '**/bash'
|
||||
- '**/beam.smp'
|
||||
- '**/busybox'
|
||||
- '**/cabal'
|
||||
- '**/chrome'
|
||||
- '**/composer*'
|
||||
- '**/consul'
|
||||
- '**/curl'
|
||||
- '**/dart'
|
||||
- '**/erlexec'
|
||||
- '**/ffmpeg'
|
||||
- '**/fluent-bit'
|
||||
- '**/gcc'
|
||||
- '**/getopt'
|
||||
- '**/ghc*'
|
||||
- '**/go'
|
||||
- '**/gzip'
|
||||
- '**/haproxy'
|
||||
- '**/helm'
|
||||
- '**/httpd'
|
||||
- '**/java'
|
||||
- '**/jdb'
|
||||
- '**/jq'
|
||||
- '**/libav*'
|
||||
- '**/liberts_internal.a'
|
||||
- '**/libjulia-internal.so'
|
||||
- '**/libpypy*.so*'
|
||||
- '**/libpython*.so*'
|
||||
- '**/libstd-????????????????.dylib'
|
||||
- '**/libstd-????????????????.so'
|
||||
- '**/libswresample*'
|
||||
- '**/lighttpd'
|
||||
- '**/memcached'
|
||||
- '**/mysql'
|
||||
- '**/nginx'
|
||||
- '**/node'
|
||||
- '**/openssl'
|
||||
- '**/perl'
|
||||
- '**/postgres'
|
||||
- '**/proftpd'
|
||||
- '**/python*'
|
||||
packages:
|
||||
- class: python-binary
|
||||
name: python
|
||||
purl: pkg:generic/python
|
||||
cpes:
|
||||
- cpe:2.3:a:python_software_foundation:python:*:*:*:*:*:*:*:*
|
||||
- cpe:2.3:a:python:python:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/libpython*.so*'
|
||||
packages:
|
||||
- class: python-binary-lib
|
||||
name: python
|
||||
purl: pkg:generic/python
|
||||
cpes:
|
||||
- cpe:2.3:a:python_software_foundation:python:*:*:*:*:*:*:*:*
|
||||
- cpe:2.3:a:python:python:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/libpypy*.so*'
|
||||
packages:
|
||||
- class: pypy-binary-lib
|
||||
name: pypy
|
||||
purl: pkg:generic/pypy
|
||||
cpes: []
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/go'
|
||||
packages:
|
||||
- class: go-binary
|
||||
name: go
|
||||
purl: pkg:generic/go
|
||||
cpes:
|
||||
- cpe:2.3:a:golang:go:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/libjulia-internal.so'
|
||||
packages:
|
||||
- class: julia-binary
|
||||
name: julia
|
||||
purl: pkg:generic/julia
|
||||
cpes:
|
||||
- cpe:2.3:a:julialang:julia:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/helm'
|
||||
packages:
|
||||
- class: helm
|
||||
name: helm
|
||||
purl: pkg:golang/helm.sh/helm
|
||||
cpes:
|
||||
- cpe:2.3:a:helm:helm:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/redis-server'
|
||||
- '**/ruby'
|
||||
- '**/sqlcipher'
|
||||
- '**/stack'
|
||||
- '**/swipl'
|
||||
packages:
|
||||
- class: redis-binary
|
||||
name: redis
|
||||
purl: pkg:generic/redis
|
||||
cpes:
|
||||
- cpe:2.3:a:redislabs:redis:*:*:*:*:*:*:*:*
|
||||
- cpe:2.3:a:redis:redis:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/node'
|
||||
packages:
|
||||
- class: nodejs-binary
|
||||
name: node
|
||||
purl: pkg:generic/node
|
||||
cpes:
|
||||
- cpe:2.3:a:nodejs:node.js:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/VERSION*'
|
||||
packages:
|
||||
- class: go-binary-hint
|
||||
name: go
|
||||
purl: pkg:generic/go
|
||||
cpes:
|
||||
- cpe:2.3:a:golang:go:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/busybox'
|
||||
packages:
|
||||
- class: busybox-binary
|
||||
name: busybox
|
||||
purl: pkg:generic/busybox
|
||||
cpes:
|
||||
- cpe:2.3:a:busybox:busybox:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/getopt'
|
||||
packages:
|
||||
- class: util-linux-binary
|
||||
name: util-linux
|
||||
purl: pkg:generic/util-linux
|
||||
cpes:
|
||||
- cpe:2.3:a:kernel:util-linux:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/haproxy'
|
||||
packages:
|
||||
- class: haproxy-binary
|
||||
name: haproxy
|
||||
purl: pkg:generic/haproxy
|
||||
cpes:
|
||||
- cpe:2.3:a:haproxy:haproxy:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/perl'
|
||||
packages:
|
||||
- class: perl-binary
|
||||
name: perl
|
||||
purl: pkg:generic/perl
|
||||
cpes:
|
||||
- cpe:2.3:a:perl:perl:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/composer*'
|
||||
packages:
|
||||
- class: php-composer-binary
|
||||
name: composer
|
||||
purl: pkg:generic/composer
|
||||
cpes:
|
||||
- cpe:2.3:a:getcomposer:composer:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/httpd'
|
||||
packages:
|
||||
- class: httpd-binary
|
||||
name: httpd
|
||||
purl: pkg:generic/httpd
|
||||
cpes:
|
||||
- cpe:2.3:a:apache:http_server:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/memcached'
|
||||
packages:
|
||||
- class: memcached-binary
|
||||
name: memcached
|
||||
purl: pkg:generic/memcached
|
||||
cpes:
|
||||
- cpe:2.3:a:memcached:memcached:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/traefik'
|
||||
- '**/vault'
|
||||
- '**/wp'
|
||||
packages:
|
||||
- class: traefik-binary
|
||||
name: traefik
|
||||
purl: pkg:generic/traefik
|
||||
cpes:
|
||||
- cpe:2.3:a:traefik:traefik:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/arangosh'
|
||||
packages:
|
||||
- class: arangodb-binary
|
||||
name: arangodb
|
||||
purl: pkg:generic/arangodb
|
||||
cpes:
|
||||
- cpe:2.3:a:arangodb:arangodb:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/postgres'
|
||||
packages:
|
||||
- class: postgresql-binary
|
||||
name: postgresql
|
||||
purl: pkg:generic/postgresql
|
||||
cpes:
|
||||
- cpe:2.3:a:postgresql:postgresql:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/mysql'
|
||||
packages:
|
||||
- class: mysql-binary
|
||||
name: mysql
|
||||
purl: pkg:generic/mysql
|
||||
cpes:
|
||||
- cpe:2.3:a:oracle:mysql:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/mysql'
|
||||
packages:
|
||||
- class: mysql-binary
|
||||
name: percona-server
|
||||
purl: pkg:generic/percona-server
|
||||
cpes:
|
||||
- cpe:2.3:a:oracle:mysql:*:*:*:*:*:*:*:*
|
||||
- cpe:2.3:a:percona:percona_server:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/mysql'
|
||||
packages:
|
||||
- class: mysql-binary
|
||||
name: percona-xtradb-cluster
|
||||
purl: pkg:generic/percona-xtradb-cluster
|
||||
cpes:
|
||||
- cpe:2.3:a:oracle:mysql:*:*:*:*:*:*:*:*
|
||||
- cpe:2.3:a:percona:percona_server:*:*:*:*:*:*:*:*
|
||||
- cpe:2.3:a:percona:xtradb_cluster:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/xtrabackup'
|
||||
- '**/xz'
|
||||
- '**/zstd'
|
||||
packages:
|
||||
- class: xtrabackup-binary
|
||||
name: percona-xtrabackup
|
||||
purl: pkg:generic/percona-xtrabackup
|
||||
cpes:
|
||||
- cpe:2.3:a:percona:xtrabackup:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/{mariadb,mysql}'
|
||||
packages:
|
||||
- class: mariadb-binary
|
||||
name: mariadb
|
||||
purl: pkg:generic/mariadb
|
||||
cpes:
|
||||
- cpe:2.3:a:mariadb:mariadb:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/libstd-????????????????.so'
|
||||
packages:
|
||||
- class: rust-standard-library-linux
|
||||
name: rust
|
||||
purl: pkg:generic/rust
|
||||
cpes:
|
||||
- cpe:2.3:a:rust-lang:rust:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/libstd-????????????????.dylib'
|
||||
packages:
|
||||
- class: rust-standard-library-macos
|
||||
name: rust
|
||||
purl: pkg:generic/rust
|
||||
cpes:
|
||||
- cpe:2.3:a:rust-lang:rust:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/ruby'
|
||||
packages:
|
||||
- class: ruby-binary
|
||||
name: ruby
|
||||
purl: pkg:generic/ruby
|
||||
cpes:
|
||||
- cpe:2.3:a:ruby-lang:ruby:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/erlexec'
|
||||
packages:
|
||||
- class: erlang-binary
|
||||
name: erlang
|
||||
purl: pkg:generic/erlang
|
||||
cpes:
|
||||
- cpe:2.3:a:erlang:erlang/otp:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/beam.smp'
|
||||
packages:
|
||||
- class: erlang-alpine-binary
|
||||
name: erlang
|
||||
purl: pkg:generic/erlang
|
||||
cpes:
|
||||
- cpe:2.3:a:erlang:erlang/otp:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/liberts_internal.a'
|
||||
packages:
|
||||
- class: erlang-library
|
||||
name: erlang
|
||||
purl: pkg:generic/erlang
|
||||
cpes:
|
||||
- cpe:2.3:a:erlang:erlang/otp:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/swipl'
|
||||
packages:
|
||||
- class: swipl-binary
|
||||
name: swipl
|
||||
purl: pkg:generic/swipl
|
||||
cpes:
|
||||
- cpe:2.3:a:erlang:erlang/otp:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/dart'
|
||||
packages:
|
||||
- class: dart-binary
|
||||
name: dart
|
||||
purl: pkg:generic/dart
|
||||
cpes:
|
||||
- cpe:2.3:a:dart:dart_software_development_kit:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/ghc*'
|
||||
packages:
|
||||
- class: haskell-ghc-binary
|
||||
name: haskell/ghc
|
||||
purl: pkg:generic/haskell/ghc
|
||||
cpes:
|
||||
- cpe:2.3:a:haskell:ghc:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/cabal'
|
||||
packages:
|
||||
- class: haskell-cabal-binary
|
||||
name: haskell/cabal
|
||||
purl: pkg:generic/haskell/cabal
|
||||
cpes:
|
||||
- cpe:2.3:a:haskell:cabal:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/stack'
|
||||
packages:
|
||||
- class: haskell-stack-binary
|
||||
name: haskell/stack
|
||||
purl: pkg:generic/haskell/stack
|
||||
cpes:
|
||||
- cpe:2.3:a:haskell:stack:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/consul'
|
||||
packages:
|
||||
- class: consul-binary
|
||||
name: consul
|
||||
purl: pkg:golang/github.com/hashicorp/consul
|
||||
cpes:
|
||||
- cpe:2.3:a:hashicorp:consul:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/vault'
|
||||
packages:
|
||||
- class: hashicorp-vault-binary
|
||||
name: github.com/hashicorp/vault
|
||||
purl: pkg:golang/github.com/hashicorp/vault
|
||||
cpes:
|
||||
- cpe:2.3:a:hashicorp:vault:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/nginx'
|
||||
packages:
|
||||
- class: nginx-binary
|
||||
name: nginx
|
||||
purl: pkg:generic/nginx
|
||||
cpes:
|
||||
- cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*
|
||||
- cpe:2.3:a:nginx:nginx:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/bash'
|
||||
packages:
|
||||
- class: bash-binary
|
||||
name: bash
|
||||
purl: pkg:generic/bash
|
||||
cpes:
|
||||
- cpe:2.3:a:gnu:bash:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/openssl'
|
||||
packages:
|
||||
- class: openssl-binary
|
||||
name: openssl
|
||||
purl: pkg:generic/openssl
|
||||
cpes:
|
||||
- cpe:2.3:a:openssl:openssl:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/gcc'
|
||||
packages:
|
||||
- class: gcc-binary
|
||||
name: gcc
|
||||
purl: pkg:generic/gcc
|
||||
cpes:
|
||||
- cpe:2.3:a:gnu:gcc:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/fluent-bit'
|
||||
packages:
|
||||
- class: fluent-bit-binary
|
||||
name: fluent-bit
|
||||
purl: pkg:github/fluent/fluent-bit
|
||||
cpes:
|
||||
- cpe:2.3:a:treasuredata:fluent_bit:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/wp'
|
||||
packages:
|
||||
- class: wordpress-cli-binary
|
||||
name: wp-cli
|
||||
purl: pkg:generic/wp-cli
|
||||
cpes:
|
||||
- cpe:2.3:a:wp-cli:wp-cli:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/curl'
|
||||
packages:
|
||||
- class: curl-binary
|
||||
name: curl
|
||||
purl: pkg:generic/curl
|
||||
cpes:
|
||||
- cpe:2.3:a:haxx:curl:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/lighttpd'
|
||||
packages:
|
||||
- class: lighttpd-binary
|
||||
name: lighttpd
|
||||
purl: pkg:generic/lighttpd
|
||||
cpes:
|
||||
- cpe:2.3:a:lighttpd:lighttpd:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/proftpd'
|
||||
packages:
|
||||
- class: proftpd-binary
|
||||
name: proftpd
|
||||
purl: pkg:generic/proftpd
|
||||
cpes:
|
||||
- cpe:2.3:a:proftpd:proftpd:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/zstd'
|
||||
packages:
|
||||
- class: zstd-binary
|
||||
name: zstd
|
||||
purl: pkg:generic/zstd
|
||||
cpes:
|
||||
- cpe:2.3:a:facebook:zstandard:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/xz'
|
||||
packages:
|
||||
- class: xz-binary
|
||||
name: xz
|
||||
purl: pkg:generic/xz
|
||||
cpes:
|
||||
- cpe:2.3:a:tukaani:xz:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/gzip'
|
||||
packages:
|
||||
- class: gzip-binary
|
||||
name: gzip
|
||||
purl: pkg:generic/gzip
|
||||
cpes:
|
||||
- cpe:2.3:a:gnu:gzip:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/sqlcipher'
|
||||
packages:
|
||||
- class: sqlcipher-binary
|
||||
name: sqlcipher
|
||||
purl: pkg:generic/sqlcipher
|
||||
cpes:
|
||||
- cpe:2.3:a:zetetic:sqlcipher:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/jq'
|
||||
packages:
|
||||
- class: jq-binary
|
||||
name: jq
|
||||
purl: pkg:generic/jq
|
||||
cpes:
|
||||
- cpe:2.3:a:jqlang:jq:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/chrome'
|
||||
packages:
|
||||
- class: chrome-binary
|
||||
name: chrome
|
||||
purl: pkg:generic/chrome
|
||||
cpes:
|
||||
- cpe:2.3:a:google:chrome:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/ffmpeg'
|
||||
packages:
|
||||
- class: ffmpeg-binary
|
||||
name: ffmpeg
|
||||
purl: pkg:generic/ffmpeg
|
||||
cpes:
|
||||
- cpe:2.3:a:ffmpeg:ffmpeg:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/libav*'
|
||||
packages:
|
||||
- class: ffmpeg-library
|
||||
name: ffmpeg
|
||||
purl: pkg:generic/ffmpeg
|
||||
cpes:
|
||||
- cpe:2.3:a:ffmpeg:ffmpeg:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/libswresample*'
|
||||
packages:
|
||||
- class: ffmpeg-library
|
||||
name: ffmpeg
|
||||
purl: pkg:generic/ffmpeg
|
||||
cpes:
|
||||
- cpe:2.3:a:ffmpeg:ffmpeg:*:*:*:*:*:*:*:*
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/java'
|
||||
packages:
|
||||
- class: java-binary
|
||||
name: ""
|
||||
purl: pkg:/
|
||||
cpes: []
|
||||
type: BinaryPkg
|
||||
- method: glob
|
||||
criteria:
|
||||
- '**/jdb'
|
||||
packages:
|
||||
- class: java-jdb-binary
|
||||
name: ""
|
||||
purl: pkg:/
|
||||
cpes: []
|
||||
type: BinaryPkg
|
||||
metadata_types: # AUTO-GENERATED
|
||||
- pkg.BinarySignature
|
||||
package_types: # AUTO-GENERATED
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user