diff --git a/syft/pkg/cataloger/binary/cataloger_test.go b/syft/pkg/cataloger/binary/cataloger_test.go index 46c4d40e3..ab70b4c26 100644 --- a/syft/pkg/cataloger/binary/cataloger_test.go +++ b/syft/pkg/cataloger/binary/cataloger_test.go @@ -19,6 +19,62 @@ func TestClassifierCataloger_DefaultClassifiers_PositiveCases(t *testing.T) { fixtureDir string expected pkg.Package }{ + { + name: "positive-postgresql-15beta4", + fixtureDir: "test-fixtures/classifiers/positive/postgresql-15beta4", + expected: pkg.Package{ + Name: "postgresql", + Version: "15beta4", + Type: "binary", + PURL: "pkg:generic/postgresql@15beta4", + Locations: singleLocation("postgres"), + Metadata: pkg.BinaryMetadata{ + Classifier: "postgresql-binary", + }, + }, + }, + { + name: "positive-postgresql-15.1", + fixtureDir: "test-fixtures/classifiers/positive/postgresql-15.1", + expected: pkg.Package{ + Name: "postgresql", + Version: "15.1", + Type: "binary", + PURL: "pkg:generic/postgresql@15.1", + Locations: singleLocation("postgres"), + Metadata: pkg.BinaryMetadata{ + Classifier: "postgresql-binary", + }, + }, + }, + { + name: "positive-postgresql-9.6.24", + fixtureDir: "test-fixtures/classifiers/positive/postgresql-9.6.24", + expected: pkg.Package{ + Name: "postgresql", + Version: "9.6.24", + Type: "binary", + PURL: "pkg:generic/postgresql@9.6.24", + Locations: singleLocation("postgres"), + Metadata: pkg.BinaryMetadata{ + Classifier: "postgresql-binary", + }, + }, + }, + { + name: "positive-postgresql-9.5alpha1", + fixtureDir: "test-fixtures/classifiers/positive/postgresql-9.5alpha1", + expected: pkg.Package{ + Name: "postgresql", + Version: "9.5alpha1", + Type: "binary", + PURL: "pkg:generic/postgresql@9.5alpha1", + Locations: singleLocation("postgres"), + Metadata: pkg.BinaryMetadata{ + Classifier: "postgresql-binary", + }, + }, + }, { name: "positive-traefik-2.9.6", fixtureDir: "test-fixtures/classifiers/positive/traefik-2.9.6", diff --git a/syft/pkg/cataloger/binary/default_classifiers.go b/syft/pkg/cataloger/binary/default_classifiers.go index f9d333438..77e048d9b 100644 --- a/syft/pkg/cataloger/binary/default_classifiers.go +++ b/syft/pkg/cataloger/binary/default_classifiers.go @@ -175,4 +175,16 @@ var defaultClassifiers = []classifier{ Package: "traefik", PURL: mustPURL("pkg:generic/traefik@version"), }, + { + Class: "postgresql-binary", + FileGlob: "**/postgres", + EvidenceMatcher: fileContentsVersionMatcher( + // [NUL]PostgreSQL 15beta4 + // [NUL]PostgreSQL 15.1 + // [NUL]PostgreSQL 9.6.24 + // ?PostgreSQL 9.5alpha1 + `(?m)(\x00|\?)PostgreSQL (?P[0-9]+(\.[0-9]+)?(\.[0-9]+)?(alpha[0-9]|beta[0-9]|rc[0-9])?)`), + Package: "postgresql", + PURL: mustPURL("pkg:generic/postgresql@version"), + }, } diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-15.1/postgres b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-15.1/postgres new file mode 100644 index 000000000..149da9050 Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-15.1/postgres differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-15beta4/postgres b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-15beta4/postgres new file mode 100755 index 000000000..50f6b3d2d Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-15beta4/postgres differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-9.5alpha1/postgres b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-9.5alpha1/postgres new file mode 100644 index 000000000..1188fb403 --- /dev/null +++ b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-9.5alpha1/postgres @@ -0,0 +1,5 @@ +byteaout +byteain +?PostgreSQL 9.5alpha1 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit +/tmp/buildd/postgresql-9.5-9.5~alpha1/build/../src/backend/utils/adt/windowfuncs.c +argument of ntile must be greater than zero diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-9.6.24/postgres b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-9.6.24/postgres new file mode 100644 index 000000000..cc29b7ae8 Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-9.6.24/postgres differ