diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java index 4d5e3eac36..a1629609ce 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java @@ -193,7 +193,7 @@ public class LocalFilesDSProcessor implements DataSourceProcessor, AutoIngestDat List command = new ArrayList<>(); for (final String l01Path : logicalEvidenceFilePaths) { command.clear(); - command.add(ewfexportPath.toAbsolutePath().toString()); + command.add(String.format("\"%s\"", ewfexportPath.toAbsolutePath().toString())); command.add("-f"); command.add("files"); command.add("-t"); @@ -203,8 +203,8 @@ public class LocalFilesDSProcessor implements DataSourceProcessor, AutoIngestDat } Path dirPath = Paths.get(FilenameUtils.getBaseName(l01Path) + UNIQUENESS_CONSTRAINT_SEPERATOR + System.currentTimeMillis()); - command.add(dirPath.toString()); - command.add(l01Path); + command.add(String.format("\"%s\"", dirPath.toString())); + command.add(String.format("\"%s\"", l01Path)); ProcessBuilder processBuilder = new ProcessBuilder(command); processBuilder.directory(l01Dir); try { diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/UnpackagePortableCaseProgressDialog.java b/Core/src/org/sleuthkit/autopsy/casemodule/UnpackagePortableCaseProgressDialog.java index b5f495806b..dd535b268d 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/UnpackagePortableCaseProgressDialog.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/UnpackagePortableCaseProgressDialog.java @@ -173,10 +173,10 @@ class UnpackagePortableCaseProgressDialog extends javax.swing.JDialog implements throw new TskCoreException("Error finding 7-Zip executable"); // NON-NLS } - String outputFolderSwitch = "-o" + outputFolder; // NON-NLS + String outputFolderSwitch = "-o" + String.format("\"%s\"",outputFolder); // NON-NLS ProcessBuilder procBuilder = new ProcessBuilder(); procBuilder.command( - sevenZipExe.getAbsolutePath(), + String.format("\"%s\"",sevenZipExe.getAbsolutePath()), "x", // Extract packagedCase, outputFolderSwitch diff --git a/Core/src/org/sleuthkit/autopsy/modules/ileappanalyzer/ILeappAnalyzerIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/ileappanalyzer/ILeappAnalyzerIngestModule.java index 1651a32977..a0f18656c5 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/ileappanalyzer/ILeappAnalyzerIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/ileappanalyzer/ILeappAnalyzerIngestModule.java @@ -210,8 +210,8 @@ public class ILeappAnalyzerIngestModule implements DataSourceIngestModule { ProcessBuilder processBuilder = buildProcessWithRunAsInvoker( "\"" + iLeappExecutable + "\"", //NON-NLS "-t", iLeappFileSystemType, //NON-NLS - "-i", sourceFilePath, //NON-NLS - "-o", moduleOutputPath.toString() + "-i", String.format("\"%s\"",sourceFilePath), //NON-NLS + "-o", String.format("\"%s\"",moduleOutputPath.toString()) ); processBuilder.redirectError(moduleOutputPath.resolve("iLeapp_err.txt").toFile()); //NON-NLS processBuilder.redirectOutput(moduleOutputPath.resolve("iLeapp_out.txt").toFile()); //NON-NLS diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java index 1033c60dda..7b518da9c4 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2018 Basis Technology Corp. + * Copyright 2011-2020 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -46,6 +46,7 @@ import org.openide.windows.WindowManager; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; +import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.autopsy.guiutils.SimpleListCellRenderer; import org.sleuthkit.autopsy.ingest.IngestManager; import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; @@ -88,6 +89,14 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp private final String filterDialogTitle; private final String ruleDialogTitle; private boolean canBeEnabled = true; + + private static final String XML_EXTENSION = "xml"; + + private final JFileChooser importFileChooser; + private static final String LAST_IMPORT_PATH_KEY = "InterestingFilesRuleSetLastImport"; + + private final JFileChooser exportFileChooser; + private static final String LAST_EXPORT_PATH_KEY = "InterestingFilesRuleSetLastExport"; // The following is a map of interesting files set names to interesting // files set definitions. It is a snapshot of the files set definitions @@ -146,6 +155,22 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp enableButtons(); }); canBeEnabled = !IngestManager.getInstance().isIngestRunning(); + + this.importFileChooser = new JFileChooser(); + this.exportFileChooser = new JFileChooser(); + configureFileChooser(importFileChooser); + configureFileChooser(exportFileChooser); + } + + /** + * Configure the file chooser for rule set imports and exports. + */ + private void configureFileChooser(JFileChooser fileChooser) { + FileNameExtensionFilter autopsyFilter = new FileNameExtensionFilter( + NbBundle.getMessage(this.getClass(), "FilesSetDefsPanel.interesting.fileExtensionFilterLbl"), XML_EXTENSION); + fileChooser.addChoosableFileFilter(autopsyFilter); + fileChooser.setAcceptAllFileFilterUsed(false); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); } @NbBundle.Messages({"FilesSetDefsPanel.Interesting.Title=Global Interesting Items Settings", @@ -1131,16 +1156,13 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp private void importSetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_importSetButtonActionPerformed //save currently selected value as default value to select FilesSet selectedSet = this.setsList.getSelectedValue(); - JFileChooser chooser = new JFileChooser(); - final String EXTENSION = "xml"; //NON-NLS - FileNameExtensionFilter autopsyFilter = new FileNameExtensionFilter( - NbBundle.getMessage(this.getClass(), "FilesSetDefsPanel.interesting.fileExtensionFilterLbl"), EXTENSION); - chooser.addChoosableFileFilter(autopsyFilter); - chooser.setAcceptAllFileFilterUsed(false); - chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - int returnVal = chooser.showOpenDialog(this); + + File lastFolder = getLastUsedDirectory(LAST_IMPORT_PATH_KEY); + importFileChooser.setCurrentDirectory(lastFolder); + + int returnVal = importFileChooser.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { - File selFile = chooser.getSelectedFile(); + File selFile = importFileChooser.getSelectedFile(); if (selFile == null) { JOptionPane.showMessageDialog(this, Bundle.FilesSetDefsPanel_importSetButtonActionPerformed_noFilesSelected(), @@ -1149,6 +1171,9 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp logger.warning("Selected file was null, when trying to import interesting files set definitions"); return; } + + ModuleSettings.setConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_IMPORT_PATH_KEY, selFile.getParent()); + Collection importedSets; try { importedSets = InterestingItemsFilesSetSettings.readDefinitionsXML(selFile).values(); //read the xml from that path @@ -1191,6 +1216,27 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp }//GEN-LAST:event_importSetButtonActionPerformed + /** + * Get the last used directory from ModuleSettings, using the value + * associated with the input key as the directory path. + * + * @param key The input key to search in module settings. + * @return A directory instance if a value was found and the path is still + * valid, or null otherwise. + */ + private File getLastUsedDirectory(String key) { + File lastFolder = null; + if (ModuleSettings.settingExists(ModuleSettings.MAIN_SETTINGS, key)) { + final String lastDirectory = ModuleSettings.getConfigSetting(ModuleSettings.MAIN_SETTINGS, key); + File lastDirectoryFile = new File(lastDirectory); + // Only select it if it exists. + if (lastDirectoryFile.exists()) { + lastFolder = lastDirectoryFile; + } + } + return lastFolder; + } + /** * From the files sets that can be imported, this method rectifies any * conflicts that may occur. @@ -1420,18 +1466,16 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp private void exportSetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportSetButtonActionPerformed //display warning that existing filessets with duplicate names will be overwritten //create file chooser to get xml filefinal String FEATURE_NAME = NbBundle.getMessage(this.getClass(), - JFileChooser chooser = new JFileChooser(); - final String EXTENSION = "xml"; //NON-NLS - FileNameExtensionFilter autopsyFilter = new FileNameExtensionFilter( - NbBundle.getMessage(this.getClass(), "FilesSetDefsPanel.interesting.fileExtensionFilterLbl"), EXTENSION); - chooser.addChoosableFileFilter(autopsyFilter); - chooser.setSelectedFile(new File(this.setsList.getSelectedValue().getName())); - chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - int returnVal = chooser.showSaveDialog(this); + exportFileChooser.setSelectedFile(new File(this.setsList.getSelectedValue().getName())); + + final File lastDirectory = getLastUsedDirectory(LAST_EXPORT_PATH_KEY); + exportFileChooser.setCurrentDirectory(lastDirectory); + + int returnVal = exportFileChooser.showSaveDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { final String FEATURE_NAME = NbBundle.getMessage(this.getClass(), "FilesSetDefsPanel.interesting.exportButtonAction.featureName"); - File selFile = chooser.getSelectedFile(); + File selFile = exportFileChooser.getSelectedFile(); if (selFile == null) { JOptionPane.showMessageDialog(this, NbBundle.getMessage(this.getClass(), "FilesSetDefsPanel.interesting.failExportMsg"), @@ -1440,10 +1484,13 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp logger.warning("Selected file was null, when trying to export interesting files set definitions"); return; } + + ModuleSettings.setConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_EXPORT_PATH_KEY, selFile.getParent()); + //force append extension if not given String fileAbs = selFile.getAbsolutePath(); - if (!fileAbs.endsWith("." + EXTENSION)) { - fileAbs = fileAbs + "." + EXTENSION; + if (!fileAbs.endsWith("." + XML_EXTENSION)) { + fileAbs = fileAbs + "." + XML_EXTENSION; selFile = new File(fileAbs); } if (selFile.exists()) { diff --git a/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverFileIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverFileIngestModule.java index 1b42cc7f47..d887f3ba4c 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverFileIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverFileIngestModule.java @@ -321,9 +321,9 @@ final class PhotoRecCarverFileIngestModule implements FileIngestModule { ProcessBuilder processAndSettings = new ProcessBuilder( executableFile.toString(), "/d", // NON-NLS - outputDirPath.toAbsolutePath().toString() + File.separator + PHOTOREC_RESULTS_BASE, + String.format("\"%s\"", Paths.get(outputDirPath.toAbsolutePath().toString(), PHOTOREC_RESULTS_BASE).toString()), "/cmd", // NON-NLS - tempFilePath.toFile().toString()); + String.format("\"%s\"",tempFilePath.toFile().toString())); processAndSettings.command().add(this.optionsString); diff --git a/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/HEICProcessor.java b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/HEICProcessor.java index 8d4588aa98..0b3296be97 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/HEICProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/HEICProcessor.java @@ -48,6 +48,7 @@ import org.sleuthkit.autopsy.coreutils.ExecUtil; import org.sleuthkit.autopsy.coreutils.FileUtil; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.PlatformUtil; +import org.sleuthkit.autopsy.ingest.FileIngestModuleProcessTerminator; import org.sleuthkit.autopsy.ingest.IngestJobContext; import org.sleuthkit.autopsy.ingest.IngestServices; import org.sleuthkit.autopsy.ingest.ModuleContentEvent; @@ -71,7 +72,7 @@ public class HEICProcessor implements PictureProcessor { private static final int EXIT_SUCCESS = 0; private static final String HEIC_MODULE_FOLDER = "HEIC"; - private static final long TIMEOUT_IN_MS = TimeUnit.MILLISECONDS.convert(2, TimeUnit.MINUTES); + private static final long TIMEOUT_IN_SEC = TimeUnit.SECONDS.convert(2, TimeUnit.MINUTES); // Windows location private static final String IMAGE_MAGICK_FOLDER = "ImageMagick-7.0.10-27-portable-Q16-x64"; @@ -188,16 +189,13 @@ public class HEICProcessor implements PictureProcessor { // Any additional images found within the HEIC container will be // formatted as fileName-1.jpg, fileName-2.jpg, etc. final ProcessBuilder processBuilder = new ProcessBuilder() - .command(IMAGE_MAGICK_PATH.toString(), - localDiskCopy.toString(), - outputFile.toString()); + .command(String.format("\"%s\"",IMAGE_MAGICK_PATH.toString()), + String.format("\"%s\"",localDiskCopy.toString()), + String.format("\"%s\"",outputFile.toString())); processBuilder.redirectError(imageMagickErrorOutput.toFile()); - final long startTime = System.currentTimeMillis(); - final int exitStatus = ExecUtil.execute(processBuilder, () -> { - return context.fileIngestIsCancelled() || System.currentTimeMillis() - startTime >= TIMEOUT_IN_MS; - }); + final int exitStatus = ExecUtil.execute(processBuilder, new FileIngestModuleProcessTerminator(context, TIMEOUT_IN_SEC)); if (context.fileIngestIsCancelled()) { return; diff --git a/Core/src/org/sleuthkit/autopsy/modules/plaso/PlasoIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/plaso/PlasoIngestModule.java index d359332f84..d1838c2798 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/plaso/PlasoIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/plaso/PlasoIngestModule.java @@ -235,8 +235,8 @@ public class PlasoIngestModule implements DataSourceIngestModule { "--parsers", "\"" + parsersString + "\"",//NON-NLS "--no_dependencies_check", //NON-NLS "--workers", String.valueOf(LOG2TIMELINE_WORKERS),//NON-NLS - moduleOutputPath.resolve(PLASO).toString(), - image.getPaths()[0] + String.format("\"%s\"",moduleOutputPath.resolve(PLASO).toString()), + String.format("\"%s\"",image.getPaths()[0]) ); processBuilder.redirectError(moduleOutputPath.resolve("log2timeline_err.txt").toFile()); //NON-NLS return processBuilder; @@ -256,8 +256,8 @@ public class PlasoIngestModule implements DataSourceIngestModule { ProcessBuilder processBuilder = buildProcessWithRunAsInvoker( "\"" + psortExecutable + "\"", //NON-NLS "-o", "4n6time_sqlite", //NON-NLS - "-w", moduleOutputPath.resolve("plasodb.db3").toString(), //NON-NLS - moduleOutputPath.resolve(PLASO).toString() + "-w", String.format("\"%s\"",moduleOutputPath.resolve("plasodb.db3").toString()), //NON-NLS + String.format("\"%s\"",moduleOutputPath.resolve(PLASO).toString()) ); processBuilder.redirectOutput(moduleOutputPath.resolve("psort_output.txt").toFile()); //NON-NLS diff --git a/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModule.java b/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModule.java index 83bfb2fdae..29dc530aa0 100644 --- a/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModule.java +++ b/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModule.java @@ -1329,10 +1329,10 @@ public class PortableCaseReportModule implements ReportModule { File zipFile = Paths.get(tempZipFolder.getAbsolutePath(), caseName + ".zip").toFile(); // NON-NLS ProcessBuilder procBuilder = new ProcessBuilder(); procBuilder.command( - sevenZipExe.getAbsolutePath(), + String.format("\"%s\"",sevenZipExe.getAbsolutePath()), "a", // Add to archive - zipFile.getAbsolutePath(), - dirToCompress.toAbsolutePath().toString(), + String.format("\"%s\"",zipFile.getAbsolutePath()), + String.format("\"%s\"",dirToCompress.toAbsolutePath().toString()), chunkOption ); diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/volatilityDSP/VolatilityProcessor.java b/Experimental/src/org/sleuthkit/autopsy/experimental/volatilityDSP/VolatilityProcessor.java index 9282362c1c..d68493e59a 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/volatilityDSP/VolatilityProcessor.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/volatilityDSP/VolatilityProcessor.java @@ -196,7 +196,7 @@ class VolatilityProcessor { List commandLine = new ArrayList<>(); commandLine.add("\"" + executableFile + "\""); //NON-NLS File memoryImage = new File(memoryImagePath); - commandLine.add("--filename=" + memoryImage.getName()); //NON-NLS + commandLine.add("--filename=" + String.format("\"%s\"",memoryImage.getName())); //NON-NLS if (!profile.isEmpty()) { commandLine.add("--profile=" + profile); //NON-NLS } @@ -213,7 +213,7 @@ class VolatilityProcessor { if (!directory.exists()) { directory.mkdirs(); } - commandLine.add("--dump-dir=" + outputDir); //NON-NLS + commandLine.add("--dump-dir=" + String.format("\"%s\"",outputDir)); //NON-NLS break; default: break; diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractEdge.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractEdge.java index aeb2b27954..d9f8278a1b 100755 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractEdge.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractEdge.java @@ -575,10 +575,10 @@ final class ExtractEdge extends Extract { List commandLine = new ArrayList<>(); commandLine.add(dumperPath); commandLine.add("/table"); //NON-NLS - commandLine.add(inputFilePath); + commandLine.add(String.format("\"%s\"",inputFilePath)); commandLine.add("*"); //NON-NLS commandLine.add("/scomma"); //NON-NLS - commandLine.add(outputDir + "\\" + "*.csv"); //NON-NLS + commandLine.add(String.format("\"%s\"",outputDir + "\\" + "*.csv")); //NON-NLS ProcessBuilder processBuilder = new ProcessBuilder(commandLine); processBuilder.redirectOutput(outputFilePath.toFile()); diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java index d128c09dc7..576a02a393 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java @@ -400,7 +400,7 @@ class ExtractIE extends Extract { List commandLine = new ArrayList<>(); commandLine.add(JAVA_PATH); commandLine.add("-cp"); //NON-NLS - commandLine.add(PASCO_LIB_PATH); + commandLine.add(String.format("\"%s\"",PASCO_LIB_PATH)); commandLine.add("isi.pasco2.Main"); //NON-NLS commandLine.add("-T"); //NON-NLS commandLine.add("history"); //NON-NLS diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractPrefetch.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractPrefetch.java index 4771b76223..88f0019209 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractPrefetch.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractPrefetch.java @@ -177,9 +177,9 @@ final class ExtractPrefetch extends Extract { final Path errFilePath = Paths.get(tempOutPath, PREFETCH_ERROR_FILE_NAME); List commandLine = new ArrayList<>(); - commandLine.add(prefetchExePath); - commandLine.add(prefetchDir); //NON-NLS - commandLine.add(tempOutFile); + commandLine.add(String.format("\"%s\"",prefetchExePath)); + commandLine.add(String.format("\"%s\"",prefetchDir)); //NON-NLS + commandLine.add(String.format("\"%s\"",tempOutFile)); ProcessBuilder processBuilder = new ProcessBuilder(commandLine); processBuilder.redirectOutput(outputFilePath.toFile()); diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java index 9d232cdc84..d4cf0e9c66 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java @@ -472,7 +472,7 @@ class ExtractRegistry extends Extract { commandLine.add(cmd); } commandLine.add("-r"); //NON-NLS - commandLine.add(hiveFilePath); + commandLine.add(String.format("\"%s\"",hiveFilePath)); commandLine.add("-f"); //NON-NLS commandLine.add(hiveFileType); diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractSru.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractSru.java index fb85593953..2f6cf0a303 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractSru.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractSru.java @@ -247,10 +247,10 @@ final class ExtractSru extends Extract { final Path errFilePath = Paths.get(tempOutPath, SRU_ERROR_FILE_NAME); List commandLine = new ArrayList<>(); - commandLine.add(sruExePath); + commandLine.add(String.format("\"%s\"",sruExePath)); commandLine.add(sruFile); //NON-NLS commandLine.add(softwareHiveFile); - commandLine.add(tempOutFile); + commandLine.add(String.format("\"%s\"",tempOutFile)); ProcessBuilder processBuilder = new ProcessBuilder(commandLine); processBuilder.redirectOutput(outputFilePath.toFile()); diff --git a/docs/doxygen-user/images/portable_case_open_bat.png b/docs/doxygen-user/images/portable_case_open_bat.png new file mode 100644 index 0000000000..57e0985562 Binary files /dev/null and b/docs/doxygen-user/images/portable_case_open_bat.png differ diff --git a/docs/doxygen-user/images/portable_case_report_panel.png b/docs/doxygen-user/images/portable_case_report_panel.png index e0a8a00513..0919d68d62 100644 Binary files a/docs/doxygen-user/images/portable_case_report_panel.png and b/docs/doxygen-user/images/portable_case_report_panel.png differ diff --git a/docs/doxygen-user/portable_case.dox b/docs/doxygen-user/portable_case.dox index de90443026..02a0fc81b9 100644 --- a/docs/doxygen-user/portable_case.dox +++ b/docs/doxygen-user/portable_case.dox @@ -33,7 +33,9 @@ You can tag any additional files you want to include in the portable case. See t \image html portable_case_tags.png -Portable cases are created through the \ref reporting_page feature. The Generate Report dialog will display a list of all tags and interesting file sets that are in use in the current case and you can choose which ones you would like to include. At the bottom you can choose to optionally package the case. Choosing to package the case without chunking will simply compress the portable case in a single archive that can be extracted with common compression programs. If you choose split the packaged case into multiple files, you will need to use the "Unpack and Open Portable Case" option to open it. This will be discussed in the next section. +Portable cases are created through the \ref reporting_page feature. The Generate Report dialog will display a list of all tags and interesting file sets that are in use in the current case and you can choose which ones you would like to include. At the bottom you can choose to optionally package the case or to include the Autopsy application. Choosing to package the case without chunking will simply compress the portable case in a single archive that can be extracted with common compression programs. If you choose split the packaged case into multiple files, you will need to use the "Unpack and Open Portable Case" option to open it. You can not include the application if you use this option. Unpacking a portable case will be discussed in the next section. + +If the recipient of the portable case does not have Autopsy, you can choose to include the Autopsy application in the portable case. This will allow the recipient to open the portable case without installing any other software. You may choose to package the case without chunking. If you do, the recipient will have to decompress it before opening Autopsy. The portable case will be placed in the "Reports" folder in the current case. @@ -49,7 +51,11 @@ If you packaged the portable case but did not choose to split it into chunks, yo \section portable_case_usage Using a Portable Case -Unpackaged portable cases can be opened like any other case through Case->Open Case. If your portable case was packaged, you'll need to use the unpack option to open it. Open the "Case" menu and then select "Unpack and Open Portable Case" option. This will bring up a dialog where you can browse to your packaged case and select where to extract it to. The case will also open. Note that any changes made to the case at this point will be saved to the unpacked location, and next time you open it you will need to browse to the unpacked folder. +If the Autopsy application was included in the portable case, it can be opened by double-clicking on the "open.bat" file. + +\image html portable_case_open_bat.png + +Otherwise, you'll start by opening the Autopsy application. Unpackaged portable cases can be opened like any other case through Case->Open Case. If your portable case was packaged, you'll need to use the unpack option to open it. Open the "Case" menu and then select "Unpack and Open Portable Case" option. This will bring up a dialog where you can browse to your packaged case and select where to extract it to. The case will also open. Note that any changes made to the case at this point will be saved to the unpacked location, and next time you open it you will need to browse to the unpacked folder. \image html portable_case_unpackage.png