diff --git a/syft/pkg/cataloger/binary/cataloger_test.go b/syft/pkg/cataloger/binary/cataloger_test.go index a2c37c3ba..7a5209074 100644 --- a/syft/pkg/cataloger/binary/cataloger_test.go +++ b/syft/pkg/cataloger/binary/cataloger_test.go @@ -17,6 +17,76 @@ func TestClassifierCataloger_DefaultClassifiers_PositiveCases(t *testing.T) { fixtureDir string expected pkg.Package }{ + { + name: "positive-redis-2.8.23", + fixtureDir: "test-fixtures/classifiers/positive/redis-server-2.8.23", + expected: pkg.Package{ + Name: "redis", + Version: "2.8.23", + Type: "binary", + PURL: "pkg:generic/redis@2.8.23", + Locations: singleLocation("redis-server"), + Metadata: pkg.BinaryMetadata{ + Classifier: "redis-binary", + }, + }, + }, + { + name: "positive-redis-4.0.11", + fixtureDir: "test-fixtures/classifiers/positive/redis-server-4.0.11", + expected: pkg.Package{ + Name: "redis", + Version: "4.0.11", + Type: "binary", + PURL: "pkg:generic/redis@4.0.11", + Locations: singleLocation("redis-server"), + Metadata: pkg.BinaryMetadata{ + Classifier: "redis-binary", + }, + }, + }, + { + name: "positive-redis-5.0.0", + fixtureDir: "test-fixtures/classifiers/positive/redis-server-5.0.0", + expected: pkg.Package{ + Name: "redis", + Version: "5.0.0", + Type: "binary", + PURL: "pkg:generic/redis@5.0.0", + Locations: singleLocation("redis-server"), + Metadata: pkg.BinaryMetadata{ + Classifier: "redis-binary", + }, + }, + }, + { + name: "positive-redis-6.0.16", + fixtureDir: "test-fixtures/classifiers/positive/redis-server-6.0.16", + expected: pkg.Package{ + Name: "redis", + Version: "6.0.16", + Type: "binary", + PURL: "pkg:generic/redis@6.0.16", + Locations: singleLocation("redis-server"), + Metadata: pkg.BinaryMetadata{ + Classifier: "redis-binary", + }, + }, + }, + { + name: "positive-redis-7.0.0", + fixtureDir: "test-fixtures/classifiers/positive/redis-server-7.0.0", + expected: pkg.Package{ + Name: "redis", + Version: "7.0.0", + Type: "binary", + PURL: "pkg:generic/redis@7.0.0", + Locations: singleLocation("redis-server"), + Metadata: pkg.BinaryMetadata{ + Classifier: "redis-binary", + }, + }, + }, { name: "positive-libpython3.7.so", fixtureDir: "test-fixtures/classifiers/positive", diff --git a/syft/pkg/cataloger/binary/default_classifiers.go b/syft/pkg/cataloger/binary/default_classifiers.go index 0456d526e..6a3b9b95c 100644 --- a/syft/pkg/cataloger/binary/default_classifiers.go +++ b/syft/pkg/cataloger/binary/default_classifiers.go @@ -38,6 +38,15 @@ var defaultClassifiers = []classifier{ PURL: mustPURL("pkg:generic/go@version"), CPEs: singleCPE("cpe:2.3:a:golang:go:*:*:*:*:*:*:*:*"), }, + { + Class: "redis-binary", + FileGlob: "**/redis-server", + EvidenceMatcher: fileContentsVersionMatcher( + `(?s)payload %5.*(?P\d.\d\.\d\d*?)[a-z0-9]{12}-[0-9]{19}`), + Package: "redis", + PURL: mustPURL("pkg:generic/redis@version"), + CPEs: singleCPE("cpe:2.3:a:redislabs:redis:*:*:*:*:*:*:*:*"), + }, { Class: "java-binary-openjdk", FileGlob: "**/java", diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-2.8.23/redis-server b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-2.8.23/redis-server new file mode 100755 index 000000000..f56e59bbf Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-2.8.23/redis-server differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-4.0.11/redis-server b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-4.0.11/redis-server new file mode 100755 index 000000000..12aaf0ef1 Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-4.0.11/redis-server differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-5.0.0/redis-server b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-5.0.0/redis-server new file mode 100755 index 000000000..124d42a59 Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-5.0.0/redis-server differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-6.0.16/redis-server b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-6.0.16/redis-server new file mode 100755 index 000000000..e5ac2d8b8 Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-6.0.16/redis-server differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.0.0/redis-server b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.0.0/redis-server new file mode 100755 index 000000000..075de6e52 Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.0.0/redis-server differ