github.com/lineaje-labs/syft@v0.98.1-0.20231227153149-9e393f60ff1b/syft/pkg/cataloger/redhat/cataloger.go (about)

     1  /*
     2  Package redhat provides a concrete DBCataloger implementation relating to packages within the RedHat linux distribution.
     3  */
     4  package redhat
     5  
     6  import (
     7  	"database/sql"
     8  
     9  	"github.com/anchore/syft/syft/pkg"
    10  	"github.com/anchore/syft/syft/pkg/cataloger/generic"
    11  	"github.com/lineaje-labs/syft/internal/log"
    12  )
    13  
    14  // NewDBCataloger returns a new RPM DB cataloger object.
    15  func NewDBCataloger() pkg.Cataloger {
    16  	// check if a sqlite driver is available
    17  	if !isSqliteDriverAvailable() {
    18  		log.Warnf("sqlite driver is not available, newer RPM databases might not be cataloged")
    19  	}
    20  
    21  	return generic.NewCataloger("rpm-db-cataloger").
    22  		WithParserByGlobs(parseRpmDB, pkg.RpmDBGlob).
    23  		WithParserByGlobs(parseRpmManifest, pkg.RpmManifestGlob)
    24  }
    25  
    26  // NewArchiveCataloger returns a new RPM file cataloger object.
    27  func NewArchiveCataloger() pkg.Cataloger {
    28  	return generic.NewCataloger("rpm-archive-cataloger").
    29  		WithParserByGlobs(parseRpmArchive, "**/*.rpm")
    30  }
    31  
    32  func isSqliteDriverAvailable() bool {
    33  	_, err := sql.Open("sqlite", ":memory:")
    34  	return err == nil
    35  }