github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/fanal/analyzer/os/redhatbase/fedora.go (about)

     1  package redhatbase
     2  
     3  import (
     4  	"bufio"
     5  	"context"
     6  	"os"
     7  	"strings"
     8  
     9  	"golang.org/x/xerrors"
    10  
    11  	"github.com/devseccon/trivy/pkg/fanal/analyzer"
    12  	fos "github.com/devseccon/trivy/pkg/fanal/analyzer/os"
    13  	"github.com/devseccon/trivy/pkg/fanal/types"
    14  	"github.com/devseccon/trivy/pkg/fanal/utils"
    15  )
    16  
    17  const fedoraAnalyzerVersion = 1
    18  
    19  func init() {
    20  	analyzer.RegisterAnalyzer(&fedoraOSAnalyzer{})
    21  }
    22  
    23  type fedoraOSAnalyzer struct{}
    24  
    25  func (a fedoraOSAnalyzer) Analyze(_ context.Context, input analyzer.AnalysisInput) (*analyzer.AnalysisResult, error) {
    26  	scanner := bufio.NewScanner(input.Content)
    27  	for scanner.Scan() {
    28  		line := scanner.Text()
    29  		result := redhatRe.FindStringSubmatch(strings.TrimSpace(line))
    30  		if len(result) != 3 {
    31  			return nil, xerrors.New("fedora: Invalid fedora-release")
    32  		}
    33  
    34  		switch strings.ToLower(result[1]) {
    35  		case "fedora", "fedora linux":
    36  			return &analyzer.AnalysisResult{
    37  				OS: types.OS{
    38  					Family: types.Fedora,
    39  					Name:   result[2],
    40  				},
    41  			}, nil
    42  		}
    43  	}
    44  	return nil, xerrors.Errorf("fedora: %w", fos.AnalyzeOSError)
    45  }
    46  
    47  func (a fedoraOSAnalyzer) Required(filePath string, _ os.FileInfo) bool {
    48  	return utils.StringInSlice(filePath, a.requiredFiles())
    49  }
    50  
    51  func (a fedoraOSAnalyzer) requiredFiles() []string {
    52  	return []string{
    53  		"etc/fedora-release",
    54  		"usr/lib/fedora-release",
    55  	}
    56  }
    57  
    58  func (a fedoraOSAnalyzer) Type() analyzer.Type {
    59  	return analyzer.TypeFedora
    60  }
    61  
    62  func (a fedoraOSAnalyzer) Version() int {
    63  	return fedoraAnalyzerVersion
    64  }