Added updateOnly and the loading of user-supplied properties files to scan agent

This commit is contained in:
stevespringett
2017-09-05 22:52:00 -05:00
parent d8f79fa51d
commit c472608876

View File

@@ -18,9 +18,11 @@
package org.owasp.dependencycheck.agent; package org.owasp.dependencycheck.agent;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.List; import java.util.List;
import org.owasp.dependencycheck.Engine; import org.owasp.dependencycheck.Engine;
import org.owasp.dependencycheck.data.nvdcve.DatabaseException; import org.owasp.dependencycheck.data.nvdcve.DatabaseException;
import org.owasp.dependencycheck.data.update.exception.UpdateException;
import org.owasp.dependencycheck.dependency.Dependency; import org.owasp.dependencycheck.dependency.Dependency;
import org.owasp.dependencycheck.dependency.Identifier; import org.owasp.dependencycheck.dependency.Identifier;
import org.owasp.dependencycheck.dependency.Vulnerability; import org.owasp.dependencycheck.dependency.Vulnerability;
@@ -100,6 +102,11 @@ public class DependencyCheckScanAgent {
* recommended that this be turned to false. Default is true. * recommended that this be turned to false. Default is true.
*/ */
private boolean autoUpdate = true; private boolean autoUpdate = true;
/**
* Sets whether the data directory should be updated without performing a scan.
* Default is false.
*/
private boolean updateOnly = false;
/** /**
* flag indicating whether or not to generate a report of findings. * flag indicating whether or not to generate a report of findings.
*/ */
@@ -207,6 +214,12 @@ public class DependencyCheckScanAgent {
* The path to Mono for .NET assembly analysis on non-windows systems. * The path to Mono for .NET assembly analysis on non-windows systems.
*/ */
private String pathToMono; private String pathToMono;
/**
* The path to optional dependency-check properties file. This will be
* used to side-load additional user-defined properties.
* {@link Settings#mergeProperties(String)}
*/
private String propertiesFilePath;
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="getters/setters"> //<editor-fold defaultstate="collapsed" desc="getters/setters">
@@ -318,6 +331,24 @@ public class DependencyCheckScanAgent {
this.autoUpdate = autoUpdate; this.autoUpdate = autoUpdate;
} }
/**
* Get the value of updateOnly.
*
* @return the value of updateOnly
*/
public boolean isUpdateOnly() {
return updateOnly;
}
/**
* Set the value of updateOnly.
*
* @param updateOnly new value of updateOnly
*/
public void setUpdateOnly(boolean updateOnly) {
this.updateOnly = updateOnly;
}
/** /**
* Get the value of generateReport. * Get the value of generateReport.
* *
@@ -810,6 +841,24 @@ public class DependencyCheckScanAgent {
public void setPathToMono(String pathToMono) { public void setPathToMono(String pathToMono) {
this.pathToMono = pathToMono; this.pathToMono = pathToMono;
} }
/**
* Get the value of propertiesFilePath.
*
* @return the value of propertiesFilePath
*/
public String getPropertiesFilePath() {
return propertiesFilePath;
}
/**
* Set the value of propertiesFilePath.
*
* @param propertiesFilePath new value of propertiesFilePath
*/
public void setPropertiesFilePath(String propertiesFilePath) {
this.propertiesFilePath = propertiesFilePath;
}
//</editor-fold> //</editor-fold>
/** /**
@@ -827,8 +876,16 @@ public class DependencyCheckScanAgent {
} catch (DatabaseException ex) { } catch (DatabaseException ex) {
throw new ExceptionCollection(ex, true); throw new ExceptionCollection(ex, true);
} }
engine.setDependencies(this.dependencies); if (this.updateOnly) {
engine.analyzeDependencies(); try {
engine.doUpdates();
} catch (UpdateException ex) {
throw new ExceptionCollection("Unable to perform update", ex);
}
} else {
engine.setDependencies(this.dependencies);
engine.analyzeDependencies();
}
return engine; return engine;
} }
@@ -866,6 +923,17 @@ public class DependencyCheckScanAgent {
Settings.setString(Settings.KEYS.DATA_DIRECTORY, dataDir.getAbsolutePath()); Settings.setString(Settings.KEYS.DATA_DIRECTORY, dataDir.getAbsolutePath());
} }
if (propertiesFilePath != null) {
try {
Settings.mergeProperties(propertiesFilePath);
LOGGER.info("Successfully loaded user-defined properties");
} catch (IOException e) {
LOGGER.error("Unable to merge user-defined properties", e);
LOGGER.error("Continuing execution");
}
}
LOGGER.info("Populating settings");
Settings.setBoolean(Settings.KEYS.AUTO_UPDATE, autoUpdate); Settings.setBoolean(Settings.KEYS.AUTO_UPDATE, autoUpdate);
Settings.setStringIfNotEmpty(Settings.KEYS.PROXY_SERVER, proxyServer); Settings.setStringIfNotEmpty(Settings.KEYS.PROXY_SERVER, proxyServer);
Settings.setStringIfNotEmpty(Settings.KEYS.PROXY_PORT, proxyPort); Settings.setStringIfNotEmpty(Settings.KEYS.PROXY_PORT, proxyPort);
@@ -902,14 +970,16 @@ public class DependencyCheckScanAgent {
Engine engine = null; Engine engine = null;
try { try {
engine = executeDependencyCheck(); engine = executeDependencyCheck();
if (this.generateReport) { if (!this.updateOnly) {
generateExternalReports(engine, new File(this.reportOutputDirectory)); if (this.generateReport) {
} generateExternalReports(engine, new File(this.reportOutputDirectory));
if (this.showSummary) { }
showSummary(engine.getDependencies()); if (this.showSummary) {
} showSummary(engine.getDependencies());
if (this.failBuildOnCVSS <= 10) { }
checkForFailure(engine.getDependencies()); if (this.failBuildOnCVSS <= 10) {
checkForFailure(engine.getDependencies());
}
} }
} catch (ExceptionCollection ex) { } catch (ExceptionCollection ex) {
if (ex.isFatal()) { if (ex.isFatal()) {