diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index 794d27a745..f59272635f 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -331,7 +331,10 @@ public class Case implements SleuthkitCase.ErrorObserver { String caseDir = xmlcm.getCaseDirectory(); String dbPath = caseDir + File.separator + "autopsy.db"; SleuthkitCase db = SleuthkitCase.openCase(dbPath); - + if (null != db.getBackupDatabasePath()) { + JOptionPane.showMessageDialog(null, "Updated case database schema.\nA backup copy of the database with the following path has been made:\n " + db.getBackupDatabasePath(), "Case Database Schema Update", JOptionPane.INFORMATION_MESSAGE); + } + checkImagesExist(db); Case openedCase = new Case(caseName, caseNumber, examiner, configFilePath, xmlcm, db); diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java index 02a3a351fa..2178d3be0e 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java @@ -29,6 +29,7 @@ import org.openide.nodes.Children; import org.openide.nodes.Sheet; import org.openide.util.Lookup; import org.openide.util.lookup.Lookups; +import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardAttribute; import org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE; @@ -129,13 +130,13 @@ public class BlackboardArtifactNode extends DisplayableItemNode { // If mismatch, add props for extension and file type if (artifactTypeId == BlackboardArtifact.ARTIFACT_TYPE.TSK_EXT_MISMATCH_DETECTED.getTypeID()) { - String actualExt = ""; - int i = associated.getName().lastIndexOf("."); - if ((i > -1) && ((i + 1) < associated.getName().length())) { - actualExt = associated.getName().substring(i + 1).toLowerCase(); - } - ss.put(new NodeProperty("Extension", "Extension", NO_DESCR, actualExt)); - + String ext = ""; + if (associated instanceof AbstractFile) { + AbstractFile af = (AbstractFile) associated; + ext = af.getNameExtension(); + } + ss.put(new NodeProperty("Extension", "Extension", NO_DESCR, ext)); + try { String actualMimeType = ""; ArrayList artList = associated.getAllArtifacts(); diff --git a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/Bundle.properties b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/Bundle.properties index 0172466a3d..c31389a1dd 100644 --- a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/Bundle.properties +++ b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/Bundle.properties @@ -16,3 +16,4 @@ FileExtMismatchConfigPanel.mimeRemoveErrLabel.text=\ FileExtMismatchConfigPanel.extRemoveErrLabel.text=\ FileExtMismatchConfigPanel.saveMsgLabel.text=\ FileExtMismatchSimpleConfigPanel.skipNoExtCheckBox.text=Skip Files Without Extensions +FileExtMismatchSimpleConfigPanel.SkipTextPlain.text=Skip text/plain MIME type diff --git a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchConfigPanel.java b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchConfigPanel.java index 2b2ca04ae1..7102d10377 100644 --- a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchConfigPanel.java +++ b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchConfigPanel.java @@ -392,7 +392,11 @@ public final class FileExtMismatchConfigPanel extends javax.swing.JPanel impleme mimeErrLabel.setText("MIME type text is empty!"); return; } - + if (newMime.equals( "application/octet-stream")){ + mimeErrLabel.setForeground(Color.red); + mimeErrLabel.setText("MIME type not supported!"); + return; + } if (mimeList.contains(newMime)) { mimeErrLabel.setForeground(Color.red); mimeErrLabel.setText("MIME type already exists!"); diff --git a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchIngestModule.java b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchIngestModule.java index 9037b9756c..f4167f758b 100644 --- a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchIngestModule.java +++ b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchIngestModule.java @@ -60,7 +60,8 @@ public class FileExtMismatchIngestModule extends org.sleuthkit.autopsy.ingest.In private static long numFiles = 0; private static boolean skipKnown = false; private static boolean skipNoExt = true; - + private static boolean skipTextPlain = false; + private int attrId = -1; private int attrId2 = -1; private FileExtMismatchSimpleConfigPanel simpleConfigPanel; @@ -132,12 +133,8 @@ public class FileExtMismatchIngestModule extends org.sleuthkit.autopsy.ingest.In private boolean compareSigTypeToExt(AbstractFile abstractFile) { try { - currActualExt = ""; - int i = abstractFile.getName().lastIndexOf("."); - if ((i > -1) && ((i + 1) < abstractFile.getName().length())) { - currActualExt = abstractFile.getName().substring(i + 1).toLowerCase(); - } - + currActualExt = abstractFile.getNameExtension(); + // If we are skipping names with no extension if (skipNoExt && currActualExt.isEmpty()) { return false; @@ -152,7 +149,13 @@ public class FileExtMismatchIngestModule extends org.sleuthkit.autopsy.ingest.In for (BlackboardAttribute att : atrList) { if (att.getAttributeTypeID() == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_FILE_TYPE_SIG.getTypeID()) { currActualSigType = att.getValueString(); - + if (skipTextPlain) + { + if (!currActualExt.isEmpty()&&currActualSigType.equals("text/plain")) + { + return false; + } + } //get known allowed values from the map for this type String[] slist = SigTypeToExtMap.get(att.getValueString()); if (slist != null) { @@ -262,6 +265,8 @@ public class FileExtMismatchIngestModule extends org.sleuthkit.autopsy.ingest.In public static void setSkipNoExt(boolean flag) { skipNoExt = flag; } - + public static void setSkipTextPlain(boolean flag) { + skipTextPlain = flag; + } } diff --git a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchSimpleConfigPanel.form b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchSimpleConfigPanel.form index a112c72b72..21d366a524 100644 --- a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchSimpleConfigPanel.form +++ b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchSimpleConfigPanel.form @@ -16,24 +16,26 @@ - - - - - + + + + + + - + - - - - + + + + + @@ -64,5 +66,15 @@ + + + + + + + + + + diff --git a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchSimpleConfigPanel.java b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchSimpleConfigPanel.java index 526fef6f9b..6974f95959 100644 --- a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchSimpleConfigPanel.java +++ b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchSimpleConfigPanel.java @@ -46,6 +46,7 @@ public class FileExtMismatchSimpleConfigPanel extends javax.swing.JPanel { skipKnownCheckBox = new javax.swing.JCheckBox(); skipNoExtCheckBox = new javax.swing.JCheckBox(); + skipTextPlain = new javax.swing.JCheckBox(); skipKnownCheckBox.setSelected(true); skipKnownCheckBox.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchSimpleConfigPanel.class, "FileExtMismatchSimpleConfigPanel.skipKnownCheckBox.text")); // NOI18N @@ -64,25 +65,34 @@ public class FileExtMismatchSimpleConfigPanel extends javax.swing.JPanel { } }); + skipTextPlain.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchSimpleConfigPanel.class, "FileExtMismatchSimpleConfigPanel.skipTextPlain.text")); // NOI18N + skipTextPlain.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + skipTextPlainActionPerformed(evt); + } + }); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addGap(10, 10, 10) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(skipKnownCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(skipNoExtCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addContainerGap(127, Short.MAX_VALUE)) + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(skipTextPlain) + .addComponent(skipNoExtCheckBox) + .addComponent(skipKnownCheckBox, javax.swing.GroupLayout.PREFERRED_SIZE, 165, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(0, 327, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addGap(11, 11, 11) - .addComponent(skipKnownCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(skipNoExtCheckBox) - .addContainerGap(152, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(skipTextPlain) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(skipKnownCheckBox) + .addContainerGap(72, Short.MAX_VALUE)) ); }// //GEN-END:initComponents @@ -94,8 +104,14 @@ public class FileExtMismatchSimpleConfigPanel extends javax.swing.JPanel { FileExtMismatchIngestModule.setSkipNoExt(skipNoExtCheckBox.isSelected()); }//GEN-LAST:event_skipNoExtCheckBoxActionPerformed + private void skipTextPlainActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_skipTextPlainActionPerformed + FileExtMismatchIngestModule.setSkipTextPlain(skipTextPlain.isSelected()); + + }//GEN-LAST:event_skipTextPlainActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JCheckBox skipKnownCheckBox; private javax.swing.JCheckBox skipNoExtCheckBox; + private javax.swing.JCheckBox skipTextPlain; // End of variables declaration//GEN-END:variables } diff --git a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchXML.java b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchXML.java index 8de27f4b6f..4eb27b85c1 100644 --- a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchXML.java +++ b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchXML.java @@ -54,7 +54,7 @@ public class FileExtMismatchXML { private static final String EXT_EL = "ext"; private static final String SIG_MIMETYPE_ATTR = "mimetype"; - private static final String DEFAULT_CONFIG_FILE_NAME = "mismatch_config.xml"; + private static final String DEFAULT_CONFIG_FILE_NAME = "mismatch_config.xml"; protected String filePath; @@ -79,7 +79,7 @@ public class FileExtMismatchXML { } return defaultInstance; } - + /** * Load and parse XML * @@ -111,7 +111,7 @@ public class FileExtMismatchXML { for(int sigIndex = 0; sigIndex < numSigs; ++sigIndex) { Element sigEl = (Element)sigNList.item(sigIndex); final String mimetype = sigEl.getAttribute(SIG_MIMETYPE_ATTR); - + NodeList extNList = sigEl.getElementsByTagName(EXT_EL); final int numExts = extNList.getLength(); @@ -181,4 +181,6 @@ public class FileExtMismatchXML { } return success; } + } + \ No newline at end of file diff --git a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/mismatch_config.xml b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/mismatch_config.xml index 7b5c0dbb1c..8c88fcb430 100644 --- a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/mismatch_config.xml +++ b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/mismatch_config.xml @@ -1,5 +1,6 @@ + txt ini @@ -112,7 +113,45 @@ winprf winprf_backup svg - + psp + jsp + oem + map + det + ins + ph + prx + sif + idl + isl + nld + sve + ita + fra + esn + enu + deu + sep + sve + cht + chs + psm + rq0 + old + eng + dlg + org + ic + ths + sig + std + cmp + stp + rst + lng + xdc + tha + sys doc docx @@ -222,10 +261,22 @@ hta wpl htt - + shtml + + jpg - jpeg + jpeg + jpe + jif + jfif + jfi + + + psd + + + nef tif @@ -247,14 +298,19 @@ ico + mp4 + m4r mov qt mp4 - + + + rm + 3gp @@ -271,6 +327,7 @@ wmv asf + wma wma @@ -279,10 +336,17 @@ mpg mpeg + m1v + m2v + mpe + mpv flv - + + + m4v + rm @@ -291,5 +355,90 @@ swf - + + + + aif + aiff + + + aif + aiff + + + flac + + + wav + + + m4a + mp4 + + + mp2 + mp3 + mpa + m2a + + + aac + + + mp2 + mp3 + mpa + m2a + + + mp2 + mp3 + mpa + m2a + + + m3u + + + mid + midi + + + ogg + + + + rar + + + arj + + + tar + + + gz + gzip + tgz + + + bzip + bz + + + cab + + + jar + + + bzip2 + + + cpio + + + + exe + \ No newline at end of file diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManager.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManager.java index 3dd27307e7..cb67028c88 100755 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManager.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManager.java @@ -72,7 +72,6 @@ public class HashDbManager implements PropertyChangeListener { private static final String ALWAYS_CALCULATE_HASHES_ELEMENT = "hash_calculate"; private static final String VALUE_ATTRIBUTE = "value"; private static final String HASH_DATABASE_FILE_EXTENSON = "kdb"; - private static final String LEGACY_INDEX_FILE_EXTENSION = "-md5.idx"; private static HashDbManager instance = null; private final String configFilePath = PlatformUtil.getUserConfigDirectory() + File.separator + CONFIG_FILE_NAME; private List knownHashSets = new ArrayList<>(); @@ -627,13 +626,6 @@ public class HashDbManager implements PropertyChangeListener { if (database.exists()) { return configuredPath; } - - // Try a path that could be in an older version of the configuration file. - String legacyPath = configuredPath + LEGACY_INDEX_FILE_EXTENSION; - database = new File(legacyPath); - if (database.exists()) { - return legacyPath; - } // Give the user an opportunity to find the desired file. String newPath = null;