github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/syft/pkg/cataloger/rpm/cataloger.go (about) 1 /* 2 Package rpm provides a concrete DBCataloger implementation for RPM "Package" DB files and a FileCataloger for RPM files. 3 */ 4 package rpm 5 6 import ( 7 "database/sql" 8 9 "github.com/anchore/syft/internal/log" 10 "github.com/anchore/syft/syft/pkg" 11 "github.com/anchore/syft/syft/pkg/cataloger/generic" 12 ) 13 14 const ( 15 dbCatalogerName = "rpm-db-cataloger" 16 fileCatalogerName = "rpm-file-cataloger" 17 ) 18 19 // NewRpmDBCataloger returns a new RPM DB cataloger object. 20 func NewRpmDBCataloger() *generic.Cataloger { 21 // check if a sqlite driver is available 22 if !isSqliteDriverAvailable() { 23 log.Warnf("sqlite driver is not available, newer RPM databases might not be cataloged") 24 } 25 26 return generic.NewCataloger(dbCatalogerName). 27 WithParserByGlobs(parseRpmDB, pkg.RpmDBGlob). 28 WithParserByGlobs(parseRpmManifest, pkg.RpmManifestGlob) 29 } 30 31 // NewFileCataloger returns a new RPM file cataloger object. 32 func NewFileCataloger() *generic.Cataloger { 33 return generic.NewCataloger(fileCatalogerName). 34 WithParserByGlobs(parseRpm, "**/*.rpm") 35 } 36 37 func isSqliteDriverAvailable() bool { 38 _, err := sql.Open("sqlite", ":memory:") 39 return err == nil 40 }