github.com/nextlinux/gosbom@v0.81.1-0.20230627115839-1ff50c281391/gosbom/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/nextlinux/gosbom/gosbom/pkg"
    10  	"github.com/nextlinux/gosbom/gosbom/pkg/cataloger/generic"
    11  	"github.com/nextlinux/gosbom/internal/log"
    12  )
    13  
    14  // NewRpmDBCataloger returns a new RPM DB cataloger object.
    15  func NewRpmDBCataloger() *generic.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  // NewFileCataloger returns a new RPM file cataloger object.
    27  func NewFileCataloger() *generic.Cataloger {
    28  	return generic.NewCataloger("rpm-file-cataloger").
    29  		WithParserByGlobs(parseRpm, "**/*.rpm")
    30  }
    31  
    32  func isSqliteDriverAvailable() bool {
    33  	_, err := sql.Open("sqlite", ":memory:")
    34  	return err == nil
    35  }