diff --git a/syft/pkg/cataloger/binary/capabilities.yaml b/syft/pkg/cataloger/binary/capabilities.yaml index 5331d74c9..6a1ef1d2d 100644 --- a/syft/pkg/cataloger/binary/capabilities.yaml +++ b/syft/pkg/cataloger/binary/capabilities.yaml @@ -423,6 +423,16 @@ catalogers: cpes: - cpe:2.3:a:openssl:openssl:*:*:*:*:*:*:*:* type: BinaryPkg + - method: glob + criteria: + - '**/ldapsearch' + packages: + - class: openldap-search-binary + name: openldap + purl: pkg:generic/openldap + cpes: + - cpe:2.3:a:openldap:openldap:*:*:*:*:*:*:*:* + type: BinaryPkg - method: glob criteria: - '**/libQt*Core.so*' diff --git a/syft/pkg/cataloger/binary/classifier_cataloger_test.go b/syft/pkg/cataloger/binary/classifier_cataloger_test.go index 95b8487ea..bc49f22b3 100644 --- a/syft/pkg/cataloger/binary/classifier_cataloger_test.go +++ b/syft/pkg/cataloger/binary/classifier_cataloger_test.go @@ -1342,6 +1342,17 @@ func Test_Cataloger_PositiveCases(t *testing.T) { Metadata: metadata("openssl-binary"), }, }, + { + logicalFixture: "openldap/2.6.10/linux-amd64", + expected: pkg.Package{ + Name: "openldap", + Version: "2.6.10", + Type: "binary", + PURL: "pkg:generic/openldap@2.6.10", + Locations: locations("ldapsearch"), + Metadata: metadata("openldap-search-binary"), + }, + }, { logicalFixture: "qt/4.8.6/linux-amd64", expected: pkg.Package{ diff --git a/syft/pkg/cataloger/binary/classifiers.go b/syft/pkg/cataloger/binary/classifiers.go index 53f902c0d..4f394828e 100644 --- a/syft/pkg/cataloger/binary/classifiers.go +++ b/syft/pkg/cataloger/binary/classifiers.go @@ -516,6 +516,17 @@ func DefaultClassifiers() []binutils.Classifier { PURL: mustPURL("pkg:generic/openssl@version"), CPEs: singleCPE("cpe:2.3:a:openssl:openssl:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource), }, + { + Class: "openldap-search-binary", + FileGlob: "**/ldapsearch", + EvidenceMatcher: m.FileContentsVersionMatcher( + // $OpenLDAP: ldapsearch 2.4.45' + `\$OpenLDAP:\sldapsearch\s(?P[0-9]+\.[0-9]+\.[0-9]+)`, + ), + Package: "openldap", + PURL: mustPURL("pkg:generic/openldap@version"), + CPEs: singleCPE("cpe:2.3:a:openldap:openldap:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource), + }, { Class: "qt-qtbase-lib", FileGlob: "**/libQt*Core.so*", diff --git a/syft/pkg/cataloger/binary/testdata/classifiers/snippets/openldap/2.6.10/linux-amd64/ldapsearch b/syft/pkg/cataloger/binary/testdata/classifiers/snippets/openldap/2.6.10/linux-amd64/ldapsearch new file mode 100644 index 000000000..1da49a0e8 Binary files /dev/null and b/syft/pkg/cataloger/binary/testdata/classifiers/snippets/openldap/2.6.10/linux-amd64/ldapsearch differ diff --git a/syft/pkg/cataloger/binary/testdata/config.yaml b/syft/pkg/cataloger/binary/testdata/config.yaml index 1f363bca8..cbf3d71f1 100644 --- a/syft/pkg/cataloger/binary/testdata/config.yaml +++ b/syft/pkg/cataloger/binary/testdata/config.yaml @@ -823,6 +823,14 @@ from-images: paths: - /usr/local/openresty/openssl/bin/openssl + - name: openldap + version: 2.6.10 + images: + - ref: bitnamilegacy/openldap:2.6.10-debian-12-r4@sha256:966fd39ed25813890e9bd57dac56def163bbcfe64967e0bae59ab018d505bd93 + platform: linux/amd64 + paths: + - /opt/bitnami/openldap/bin/ldapsearch + - name: curl version: 8.9.1 images: