From 3f1b81a4c35940fb47dd91e3d193a0342fc3e3a1 Mon Sep 17 00:00:00 2001 From: adam-m Date: Sun, 28 Jul 2013 15:13:41 -0400 Subject: [PATCH] Fix bug when free disk space during ingest cannot be detected as is reporting 0 (on some network file systems) and ingest is stopped --- .../autopsy/ingest/IngestMonitor.java | 31 +++++++++++++++---- .../sevenzip/SevenZipIngestModule.java | 3 +- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestMonitor.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestMonitor.java index 365a07902c..dd059b271e 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestMonitor.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestMonitor.java @@ -43,6 +43,7 @@ public class IngestMonitor { private Timer timer; private static final java.util.logging.Logger MONITOR_LOGGER = java.util.logging.Logger.getLogger("monitor"); private MonitorAction monitor; + public static final int DISK_FREE_SPACE_UNKNOWN = -1; IngestMonitor() { @@ -101,7 +102,7 @@ public class IngestMonitor { return monitor.getFreeSpace(); } catch (SecurityException e) { logger.log(Level.WARNING, "Error checking for free disk space on ingest data drive", e); - return -1; + return DISK_FREE_SPACE_UNKNOWN; } } @@ -109,7 +110,7 @@ public class IngestMonitor { private class MonitorAction implements ActionListener { private final static long MIN_FREE_DISK_SPACE = 100L * 1024 * 1024; //100MB - private File root = new File(File.separator); //default, roto dir where autopsy runs + private File root = new File(File.separator); //default, root dir where autopsy runs MonitorAction() { //find drive where case is located @@ -170,12 +171,25 @@ public class IngestMonitor { } /** - * Get free space in bytes of the drive where case dir resides + * Get free space in bytes of the drive where case dir resides, or -1 if + * unknown * * @return free space in bytes */ private long getFreeSpace() throws SecurityException { - return root.getFreeSpace(); + final long freeSpace = root.getFreeSpace(); + + if (freeSpace == 0) { + //check if network drive, some network filesystems always return 0 + final String monitoredPath = root.getAbsolutePath(); + if (monitoredPath.startsWith("\\\\") || monitoredPath.startsWith("//")) { + return DISK_FREE_SPACE_UNKNOWN; + + } + } + + return freeSpace; + } /** @@ -191,8 +205,13 @@ public class IngestMonitor { logger.log(Level.WARNING, "Unable to check for free disk space (permission issue)", e); return true; //OK } - //logger.log(Level.INFO, "Checking free disk apce: " + freeSpace + " need: " + Long.toString(MIN_FREE_DISK_SPACE)); - return freeSpace > MIN_FREE_DISK_SPACE; + + if (freeSpace == DISK_FREE_SPACE_UNKNOWN) { + return true; + } else { + //logger.log(Level.INFO, "Checking free disk apce: " + freeSpace + " need: " + Long.toString(MIN_FREE_DISK_SPACE)); + return freeSpace > MIN_FREE_DISK_SPACE; + } } /** diff --git a/SevenZip/src/org/sleuthkit/autopsy/sevenzip/SevenZipIngestModule.java b/SevenZip/src/org/sleuthkit/autopsy/sevenzip/SevenZipIngestModule.java index 6dc203c612..26a863f4c7 100644 --- a/SevenZip/src/org/sleuthkit/autopsy/sevenzip/SevenZipIngestModule.java +++ b/SevenZip/src/org/sleuthkit/autopsy/sevenzip/SevenZipIngestModule.java @@ -49,6 +49,7 @@ import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.services.FileManager; import org.sleuthkit.autopsy.ingest.PipelineContext; import org.sleuthkit.autopsy.ingest.IngestMessage; +import org.sleuthkit.autopsy.ingest.IngestMonitor; import org.sleuthkit.autopsy.ingest.ModuleContentEvent; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE; @@ -426,7 +427,7 @@ public final class SevenZipIngestModule extends IngestModuleAbstractFile { //check if unpacking this file will result in out of disk space //this is additional to zip bomb prevention mechanism - if (freeDiskSpace != -1 && size > 0) { //if known free space and file not empty + if (freeDiskSpace != IngestMonitor.DISK_FREE_SPACE_UNKNOWN && size > 0) { //if known free space and file not empty long newDiskSpace = freeDiskSpace - size; if (newDiskSpace < MIN_FREE_DISK_SPACE) { String msg = "Not enough disk space to unpack archive item: " + archiveFile.getName() + ", " + fileName;