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 }