@@ -14,52 +14,31 @@ import (
1414 "github.com/aquasecurity/trivy/pkg/iac/rego"
1515 "github.com/aquasecurity/trivy/pkg/iac/rules"
1616 "github.com/aquasecurity/trivy/pkg/iac/scan"
17- "github.com/aquasecurity/trivy/pkg/iac/severity"
18- "github.com/aquasecurity/trivy/pkg/iac/state"
1917 "github.com/aquasecurity/trivy/pkg/iac/terraform"
2018 "github.com/aquasecurity/trivy/pkg/iac/types"
2119)
2220
2321// Executor scans HCL blocks by running all registered rules against them
2422type Executor struct {
25- enableIgnores bool
26- excludedRuleIDs []string
27- includedRuleIDs []string
28- ignoreCheckErrors bool
29- workspaceName string
30- useSingleThread bool
31- debug debug.Logger
32- resultsFilters []func (scan.Results ) scan.Results
33- severityOverrides map [string ]string
34- regoScanner * rego.Scanner
35- regoOnly bool
36- stateFuncs []func (* state.State )
37- frameworks []framework.Framework
23+ workspaceName string
24+ debug debug.Logger
25+ resultsFilters []func (scan.Results ) scan.Results
26+ regoScanner * rego.Scanner
27+ regoOnly bool
28+ frameworks []framework.Framework
3829}
3930
4031// New creates a new Executor
4132func New (options ... Option ) * Executor {
4233 s := & Executor {
43- ignoreCheckErrors : true ,
44- enableIgnores : true ,
45- regoOnly : false ,
34+ regoOnly : false ,
4635 }
4736 for _ , option := range options {
4837 option (s )
4938 }
5039 return s
5140}
5241
53- // Find element in list
54- func checkInList (id string , list []string ) bool {
55- for _ , codeIgnored := range list {
56- if codeIgnored == id {
57- return true
58- }
59- }
60- return false
61- }
62-
6342func (e * Executor ) Execute (modules terraform.Modules ) (scan.Results , error ) {
6443
6544 e .debug .Log ("Adapting modules..." )
@@ -70,90 +49,46 @@ func (e *Executor) Execute(modules terraform.Modules) (scan.Results, error) {
7049 if threads > 1 {
7150 threads --
7251 }
73- if e .useSingleThread {
74- threads = 1
75- }
76- e .debug .Log ("Using max routines of %d" , threads )
7752
78- e .debug .Log ("Applying state modifier functions..." )
79- for _ , f := range e .stateFuncs {
80- f (infra )
81- }
53+ e .debug .Log ("Using max routines of %d" , threads )
8254
8355 registeredRules := rules .GetRegistered (e .frameworks ... )
8456 e .debug .Log ("Initialized %d rule(s)." , len (registeredRules ))
8557
86- pool := NewPool (threads , registeredRules , modules , infra , e .ignoreCheckErrors , e . regoScanner , e .regoOnly )
58+ pool := NewPool (threads , registeredRules , modules , infra , e .regoScanner , e .regoOnly )
8759 e .debug .Log ("Created pool with %d worker(s) to apply rules." , threads )
60+
8861 results , err := pool .Run ()
8962 if err != nil {
9063 return nil , err
9164 }
92- e .debug .Log ("Finished applying rules." )
9365
94- if e .enableIgnores {
95- e .debug .Log ("Applying ignores..." )
96- var ignores ignore.Rules
97- for _ , module := range modules {
98- ignores = append (ignores , module .Ignores ()... )
99- }
66+ e .debug .Log ("Finished applying rules." )
10067
101- ignorers := map [string ]ignore.Ignorer {
102- "ws" : workspaceIgnorer (e .workspaceName ),
103- "ignore" : attributeIgnorer (modules ),
104- }
68+ e .debug .Log ("Applying ignores..." )
69+ var ignores ignore.Rules
70+ for _ , module := range modules {
71+ ignores = append (ignores , module .Ignores ()... )
72+ }
10573
106- results .Ignore (ignores , ignorers )
74+ ignorers := map [string ]ignore.Ignorer {
75+ "ws" : workspaceIgnorer (e .workspaceName ),
76+ "ignore" : attributeIgnorer (modules ),
77+ }
10778
108- for _ , ignored := range results .GetIgnored () {
109- e .debug .Log ("Ignored '%s' at '%s'." , ignored .Rule ().LongID (), ignored .Range ())
110- }
79+ results .Ignore (ignores , ignorers )
11180
112- } else {
113- e .debug .Log ("Ignores are disabled." )
81+ for _ , ignored := range results . GetIgnored () {
82+ e .debug .Log ("Ignored '%s' at '%s'." , ignored . Rule (). LongID (), ignored . Range () )
11483 }
11584
116- results = e .updateSeverity (results )
11785 results = e .filterResults (results )
11886
11987 e .sortResults (results )
12088 return results , nil
12189}
12290
123- func (e * Executor ) updateSeverity (results []scan.Result ) scan.Results {
124- if len (e .severityOverrides ) == 0 {
125- return results
126- }
127-
128- var overriddenResults scan.Results
129- for _ , res := range results {
130- for code , sev := range e .severityOverrides {
131- if res .Rule ().LongID () != code {
132- continue
133- }
134-
135- overrides := scan .Results ([]scan.Result {res })
136- override := res .Rule ()
137- override .Severity = severity .Severity (sev )
138- overrides .SetRule (override )
139- res = overrides [0 ]
140- }
141- overriddenResults = append (overriddenResults , res )
142- }
143-
144- return overriddenResults
145- }
146-
14791func (e * Executor ) filterResults (results scan.Results ) scan.Results {
148- includedOnly := len (e .includedRuleIDs ) > 0
149- for i , result := range results {
150- id := result .Rule ().LongID ()
151- if (includedOnly && ! checkInList (id , e .includedRuleIDs )) || checkInList (id , e .excludedRuleIDs ) {
152- e .debug .Log ("Excluding '%s' at '%s'." , result .Rule ().LongID (), result .Range ())
153- results [i ].OverrideStatus (scan .StatusIgnored )
154- }
155- }
156-
15792 if len (e .resultsFilters ) > 0 && len (results ) > 0 {
15893 before := len (results .GetIgnored ())
15994 e .debug .Log ("Applying %d results filters to %d results..." , len (results ), before )
0 commit comments