Skip to content

Commit caafcc9

Browse files
committed
Add trivy image --skip-analyzers option
Allows disabling analyzers from outside. Mainly to disable jar analyzer which can go to network which may be undesired and introduce scan flakiness. But sounds generic enough to have other uses too. related to #1191 and #1233
1 parent 31c45ff commit caafcc9

File tree

5 files changed

+27
-7
lines changed

5 files changed

+27
-7
lines changed

pkg/commands/app.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,12 @@ var (
225225
EnvVars: []string{"TRIVY_SKIP_DIRS"},
226226
}
227227

228+
skipAnalyzers = cli.StringSliceFlag{
229+
Name: "skip-analyzers",
230+
Usage: "specify analyzers to skip",
231+
EnvVars: []string{"TRIVY_SKIP_ANALYZERS"},
232+
}
233+
228234
// For misconfigurations
229235
configPolicy = cli.StringSliceFlag{
230236
Name: "config-policy",
@@ -311,6 +317,7 @@ var (
311317
&cacheBackendFlag,
312318
stringSliceFlag(skipFiles),
313319
stringSliceFlag(skipDirs),
320+
stringSliceFlag(skipAnalyzers),
314321
}
315322

316323
// deprecated options
@@ -488,6 +495,7 @@ func NewFilesystemCommand() *cli.Command {
488495
&listAllPackages,
489496
stringSliceFlag(skipFiles),
490497
stringSliceFlag(skipDirs),
498+
stringSliceFlag(skipAnalyzers),
491499
stringSliceFlag(configPolicy),
492500
stringSliceFlag(configData),
493501
stringSliceFlag(policyNamespaces),
@@ -525,6 +533,7 @@ func NewRepositoryCommand() *cli.Command {
525533
&listAllPackages,
526534
stringSliceFlag(skipFiles),
527535
stringSliceFlag(skipDirs),
536+
stringSliceFlag(skipAnalyzers),
528537
},
529538
}
530539
}
@@ -620,6 +629,7 @@ func NewConfigCommand() *cli.Command {
620629
&timeoutFlag,
621630
stringSliceFlag(skipFiles),
622631
stringSliceFlag(skipDirs),
632+
stringSliceFlag(skipAnalyzers),
623633
stringSliceFlag(configPolicyAlias),
624634
stringSliceFlag(configDataAlias),
625635
stringSliceFlag(policyNamespaces),

pkg/commands/artifact/run.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ func scan(ctx context.Context, opt Option, initializeScanner InitializeScanner,
148148
ListAllPackages: opt.ListAllPkgs,
149149
SkipFiles: opt.SkipFiles,
150150
SkipDirs: opt.SkipDirs,
151+
SkipAnalyzers: opt.SkipAnalyzers,
151152
}
152153
log.Logger.Debugf("Vulnerability type: %s", scanOptions.VulnType)
153154

@@ -156,6 +157,9 @@ func scan(ctx context.Context, opt Option, initializeScanner InitializeScanner,
156157
if opt.ScanRemovedPkgs {
157158
disabledAnalyzers = []analyzer.Type{}
158159
}
160+
for a := range opt.SkipAnalyzers {
161+
disabledAnalyzers = append(disabledAnalyzers, analyzer.Type(a))
162+
}
159163

160164
// ScannerOptions is filled only when config scanning is enabled.
161165
var configScannerOptions config.ScannerOption

pkg/commands/client/run.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ func initializeScanner(ctx context.Context, opt Option) (scanner.Scanner, func()
123123
if opt.ScanRemovedPkgs {
124124
disabledAnalyzers = []analyzer.Type{}
125125
}
126+
for a := range opt.SkipAnalyzers {
127+
disabledAnalyzers = append(disabledAnalyzers, analyzer.Type(a))
128+
}
126129

127130
// ScannerOptions is filled only when config scanning is enabled.
128131
var configScannerOptions config.ScannerOption

pkg/commands/option/artifact.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ type ArtifactOption struct {
1515
Timeout time.Duration
1616
ClearCache bool
1717

18-
SkipDirs []string
19-
SkipFiles []string
18+
SkipDirs []string
19+
SkipFiles []string
20+
SkipAnalyzers []string
2021

2122
// this field is populated in Init()
2223
Target string
@@ -25,11 +26,12 @@ type ArtifactOption struct {
2526
// NewArtifactOption is the factory method to return artifact option
2627
func NewArtifactOption(c *cli.Context) ArtifactOption {
2728
return ArtifactOption{
28-
Input: c.String("input"),
29-
Timeout: c.Duration("timeout"),
30-
ClearCache: c.Bool("clear-cache"),
31-
SkipFiles: c.StringSlice("skip-files"),
32-
SkipDirs: c.StringSlice("skip-dirs"),
29+
Input: c.String("input"),
30+
Timeout: c.Duration("timeout"),
31+
ClearCache: c.Bool("clear-cache"),
32+
SkipFiles: c.StringSlice("skip-files"),
33+
SkipDirs: c.StringSlice("skip-dirs"),
34+
SkipAnalyzers: c.StringSlice("skip-analyzers"),
3335
}
3436
}
3537

pkg/types/scanoptions.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ type ScanOptions struct {
88
ListAllPackages bool
99
SkipFiles []string
1010
SkipDirs []string
11+
SkipAnalyzers []string
1112
}

0 commit comments

Comments
 (0)