@@ -30,6 +30,20 @@ var requiredFiles = []string{
30
30
}
31
31
var errUnexpectedNameFormat = xerrors .New ("unexpected name format" )
32
32
33
+ var osVendors = []string {
34
+ "Amazon Linux" , // Amazon Linux 1
35
+ "Amazon.com" , // Amazon Linux 2
36
+ "CentOS" , // CentOS
37
+ "Fedora Project" , // Fedora
38
+ "Oracle America" , // Oracle Linux
39
+ "Red Hat" , // Red Hat
40
+ "AlmaLinux" , // AlmaLinux
41
+ "CloudLinux" , // AlmaLinux
42
+ "VMware" , // Photon OS
43
+ "SUSE" , // SUSE Linux Enterprise
44
+ "openSUSE" , // openSUSE
45
+ }
46
+
33
47
type rpmPkgAnalyzer struct {}
34
48
35
49
func (a rpmPkgAnalyzer ) Analyze (_ context.Context , input analyzer.AnalysisInput ) (* analyzer.AnalysisResult , error ) {
@@ -104,9 +118,14 @@ func (a rpmPkgAnalyzer) parsePkgInfo(rc io.Reader) ([]types.Package, []string, e
104
118
}
105
119
}
106
120
107
- files , err := pkg .InstalledFiles ()
108
- if err != nil {
109
- return nil , nil , xerrors .Errorf ("unable to get installed files: %w" , err )
121
+ // Check if the package is vendor-provided.
122
+ // If the package is not provided by vendor, the installed files should not be skipped.
123
+ var files []string
124
+ if packageProvidedByVendor (pkg .Vendor ) {
125
+ files , err = pkg .InstalledFiles ()
126
+ if err != nil {
127
+ return nil , nil , xerrors .Errorf ("unable to get installed files: %w" , err )
128
+ }
110
129
}
111
130
112
131
p := types.Package {
@@ -171,3 +190,12 @@ func (a rpmPkgAnalyzer) Type() analyzer.Type {
171
190
func (a rpmPkgAnalyzer ) Version () int {
172
191
return version
173
192
}
193
+
194
+ func packageProvidedByVendor (pkgVendor string ) bool {
195
+ for _ , vendor := range osVendors {
196
+ if strings .HasPrefix (pkgVendor , vendor ) {
197
+ return true
198
+ }
199
+ }
200
+ return false
201
+ }
0 commit comments