diff --git a/commands/audit/audit.go b/commands/audit/audit.go index 5a0803b36..b22dfc9cb 100644 --- a/commands/audit/audit.go +++ b/commands/audit/audit.go @@ -421,6 +421,11 @@ func initAuditCmdResults(params *AuditParams) (cmdResults *results.SecurityComma cmdResults.SetEntitledForJas(entitledForJas) } if entitledForJas { + if utils.IsJASRequested(cmdResults.CmdType, params.ScansToPerform()...) { + if err = jas.ValidateRequiredInstalledSoftware(); err != nil { + return cmdResults.AddGeneralError(err, false) + } + } cmdResults.SetSecretValidation(jas.CheckForSecretValidation(xrayManager, params.GetXrayVersion(), slices.Contains(params.ScansToPerform(), utils.SecretTokenValidationScan))) } return diff --git a/commands/scan/scan.go b/commands/scan/scan.go index 582a97af9..a48c811c9 100644 --- a/commands/scan/scan.go +++ b/commands/scan/scan.go @@ -338,6 +338,11 @@ func (scanCmd *ScanCommand) initScanCmdResults(cmdType utils.CommandType) (xrayM } else { cmdResults.SetEntitledForJas(entitledForJas) if entitledForJas { + if utils.IsJASRequested(cmdResults.CmdType, scanCmd.scansToPerform...) { + if err = jas.ValidateRequiredInstalledSoftware(); err != nil { + return xrayManager, cmdResults.AddGeneralError(err, false) + } + } cmdResults.SetSecretValidation(jas.CheckForSecretValidation(xrayManager, scanCmd.xrayVersion, scanCmd.validateSecrets)) } } diff --git a/jas/analyzermanager.go b/jas/analyzermanager.go index 21a6659a2..3411479c4 100644 --- a/jas/analyzermanager.go +++ b/jas/analyzermanager.go @@ -60,6 +60,10 @@ const ( type JasDiffScanEnvValue string +var scannersRequiredInstalledSoftware = []string{ + "git", "unzip", "curl", +} + var exitCodeErrorsMap = map[int]string{ notEntitledExitCode: "got not entitled error from analyzer manager", unsupportedCommandExitCode: "got unsupported scan command error from analyzer manager", @@ -327,3 +331,12 @@ func RunAnalyzerManagerWithPipesAndDownload(envVars map[string]string, cmd strin } return RunAnalyzerManagerWithPipes(envVars, cmd, inputPipe, outputPipe, errorPipe, timeout, args...) } + +func ValidateRequiredInstalledSoftware() (err error) { + for _, software := range scannersRequiredInstalledSoftware { + if softwarePath, e := exec.LookPath(software); e != nil || softwarePath == "" { + err = errors.Join(err, fmt.Errorf("could not find the required '%s' executable in the system PATH to run the Advanced Security Scans", software)) + } + } + return +}