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