github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/fanal/analyzer/os/redhatbase/rocky.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 rockyAnalyzerVersion = 1 18 19 func init() { 20 analyzer.RegisterAnalyzer(&rockyOSAnalyzer{}) 21 } 22 23 type rockyOSAnalyzer struct{} 24 25 func (a rockyOSAnalyzer) 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("rocky: invalid rocky-release") 32 } 33 34 switch strings.ToLower(result[1]) { 35 case "rocky", "rocky linux": 36 return &analyzer.AnalysisResult{ 37 OS: types.OS{ 38 Family: types.Rocky, 39 Name: result[2], 40 }, 41 }, nil 42 } 43 } 44 45 return nil, xerrors.Errorf("rocky: %w", fos.AnalyzeOSError) 46 } 47 48 func (a rockyOSAnalyzer) Required(filePath string, _ os.FileInfo) bool { 49 return utils.StringInSlice(filePath, a.requiredFiles()) 50 } 51 52 func (a rockyOSAnalyzer) requiredFiles() []string { 53 return []string{"etc/rocky-release"} 54 } 55 56 func (a rockyOSAnalyzer) Type() analyzer.Type { 57 return analyzer.TypeRocky 58 } 59 60 func (a rockyOSAnalyzer) Version() int { 61 return rockyAnalyzerVersion 62 }