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  }