diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesByMimeType.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesByMimeType.java index bbd46ddd12..cbe842ec70 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesByMimeType.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesByMimeType.java @@ -1,15 +1,15 @@ /* * Autopsy Forensic Browser - * + * * Copyright 2011-2016 Basis Technology Corp. * Contact: carrier sleuthkit org - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -46,6 +46,7 @@ import org.sleuthkit.datamodel.Directory; import org.sleuthkit.datamodel.File; import org.sleuthkit.datamodel.LayoutFile; import org.sleuthkit.datamodel.LocalFile; +import org.sleuthkit.datamodel.SlackFile; import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskData; @@ -75,8 +76,8 @@ public final class FileTypesByMimeType extends Observable implements AutopsyVisi } /* - * The pcl is in the class because it has the easiest mechanisms to add - * and remove itself during its life cycles. + * The pcl is in the class because it has the easiest mechanisms to add and + * remove itself during its life cycles. */ private final PropertyChangeListener pcl = (PropertyChangeEvent evt) -> { String eventType = evt.getPropertyName(); @@ -108,7 +109,7 @@ public final class FileTypesByMimeType extends Observable implements AutopsyVisi * Retrieve the media types by retrieving the keyset from the hashmap. * * @return mediaTypes - a list of strings representing all distinct media - * types of files for this case + * types of files for this case */ private List getMediaTypeList() { synchronized (existingMimeTypes) { @@ -129,6 +130,9 @@ public final class FileTypesByMimeType extends Observable implements AutopsyVisi allDistinctMimeTypesQuery.append(" AND (type IN (").append(TskData.TSK_DB_FILES_TYPE_ENUM.FS.ordinal()).append(","); //NON-NLS allDistinctMimeTypesQuery.append(TskData.TSK_DB_FILES_TYPE_ENUM.CARVED.ordinal()).append(","); allDistinctMimeTypesQuery.append(TskData.TSK_DB_FILES_TYPE_ENUM.DERIVED.ordinal()).append(","); + if (!UserPreferences.hideSlackFilesInViewsTree()) { + allDistinctMimeTypesQuery.append(TskData.TSK_DB_FILES_TYPE_ENUM.SLACK.ordinal()).append(","); + } allDistinctMimeTypesQuery.append(TskData.TSK_DB_FILES_TYPE_ENUM.LOCAL.ordinal()).append("))"); synchronized (existingMimeTypes) { existingMimeTypes.clear(); @@ -178,8 +182,9 @@ public final class FileTypesByMimeType extends Observable implements AutopsyVisi * empty. * * @param node the Node which you wish to check. + * * @return True if originNode is an instance of ByMimeTypeNode and is empty, - * false otherwise. + * false otherwise. */ public static boolean isEmptyMimeTypeNode(Node node) { boolean isEmptyMimeNode = false; @@ -346,7 +351,7 @@ public final class FileTypesByMimeType extends Observable implements AutopsyVisi * of files which it represents. * * @param mimeType - the complete MimeType, needed for accurate query - * results + * results */ private void updateDisplayName(String mimeType) { @@ -401,7 +406,7 @@ public final class FileTypesByMimeType extends Observable implements AutopsyVisi * Get children count without actually loading all nodes * * @return count(*) - the number of items that will be shown in this - * items Directory Listing + * items Directory Listing */ private long calculateItems(SleuthkitCase sleuthkitCase, String mime_type) { try { @@ -418,7 +423,8 @@ public final class FileTypesByMimeType extends Observable implements AutopsyVisi * which match this mime type and their information. * * @param list - will contain all files and their attributes from the - * tsk_files table where mime_type matches the one specified + * tsk_files table where mime_type matches the one specified + * * @return true */ @Override @@ -439,8 +445,9 @@ public final class FileTypesByMimeType extends Observable implements AutopsyVisi * tsk_files. * * @param mimeType - the complete mimetype of the file mediatype/subtype + * * @return query.toString - portion of SQL query which will follow a - * WHERE clause. + * WHERE clause. */ private String createQuery(String mime_type) { StringBuilder query = new StringBuilder(); @@ -448,6 +455,9 @@ public final class FileTypesByMimeType extends Observable implements AutopsyVisi query.append(" AND (type IN (").append(TskData.TSK_DB_FILES_TYPE_ENUM.FS.ordinal()).append(","); //NON-NLS query.append(TskData.TSK_DB_FILES_TYPE_ENUM.CARVED.ordinal()).append(","); query.append(TskData.TSK_DB_FILES_TYPE_ENUM.DERIVED.ordinal()).append(","); + if (!UserPreferences.hideSlackFilesInViewsTree()) { + query.append(TskData.TSK_DB_FILES_TYPE_ENUM.SLACK.ordinal()).append(","); + } query.append(TskData.TSK_DB_FILES_TYPE_ENUM.LOCAL.ordinal()).append("))"); if (UserPreferences.hideKnownFilesInViewsTree()) { query.append(" AND (known IS NULL OR known != ").append(TskData.FileKnown.KNOWN.getFileKnownValue()).append(")"); //NON-NLS @@ -466,6 +476,7 @@ public final class FileTypesByMimeType extends Observable implements AutopsyVisi * each file * * @param key + * * @return */ @Override @@ -496,6 +507,11 @@ public final class FileTypesByMimeType extends Observable implements AutopsyVisi return new LocalFileNode(lf); } + @Override + public SlackFileNode visit(SlackFile sf) { + return new SlackFileNode(sf, false); + } + @Override protected AbstractNode defaultVisit(Content di) { throw new UnsupportedOperationException(NbBundle.getMessage(this.getClass(), "FileTypeChildren.exception.notSupported.msg", di.toString())); diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestTasksScheduler.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestTasksScheduler.java index 834f475ffd..f22ef93d94 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestTasksScheduler.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestTasksScheduler.java @@ -400,6 +400,7 @@ final class IngestTasksScheduler { // Skip the task if the file is actually the pseudo-file for the parent // or current directory. String fileName = file.getName(); + if (fileName.equals(".") || fileName.equals("..")) { return false; } @@ -409,7 +410,7 @@ final class IngestTasksScheduler { * applied to the current run of ingest, checks if unallocated space * should be processed inside call to fileIsMemberOf */ - if ((task.getIngestJob().getFileIngestFilter().fileIsMemberOf(file)) == null) { + if (file.isFile() && task.getIngestJob().getFileIngestFilter().fileIsMemberOf(file) == null) { return false; } diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties index 52aede37df..e5ae1eb726 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties @@ -65,7 +65,6 @@ FilesSetDefsPanel.jLabel1.text=Rule Details FilesSetDefsPanel.dirsRadioButton.text=Directories FilesSetDefsPanel.jLabel2.text=File Type: FilesSetDefsPanel.deleteRuleButton.text=Delete Rule -FilesSetDefsPanel.bothRadioButton.text=Files and Directories FilesSetDefsPanel.fileNameRegexCheckbox.text=Regex FilesSetDefsPanel.ignoreKnownFilesCheckbox.text=Ignore Known Files FilesSetDefsPanel.rulePathConditionTextField.text= @@ -81,3 +80,4 @@ FilesSetRulePanel.allRadioButton.text=All FilesSetDefsPanel.ingoreUnallocCheckbox.text=Ignore Unallocated Space FilesSetDefsPanel.ingoreUnallocCheckbox.toolTipText=Ignores unallocated space, such as deleted files. May run faster but produce less complete results. FilesSetDefsPanel.ingestWarningLabel.text=Ingest is ongoing, some settings will be unavailable until it finishes. +FilesSetDefsPanel.allRadioButton.text=All diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle_ja.properties index 2010d61f65..e370bb9dd7 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle_ja.properties @@ -39,7 +39,6 @@ FilesSetDefsPanel.jLabel1.text=\u30eb\u30fc\u30eb\u8a73\u7d30 FilesSetDefsPanel.dirsRadioButton.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea FilesSetDefsPanel.jLabel2.text=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\uff1a FilesSetDefsPanel.deleteRuleButton.text=\u30eb\u30fc\u30eb\u3092\u524a\u9664 -FilesSetDefsPanel.bothRadioButton.text=\u30d5\u30a1\u30a4\u30eb\u304a\u3088\u3073\u30c7\u30a3\u30ec\u30af\u30c8\u30ea FilesSetDefsPanel.fileNameRegexCheckbox.text=\u6b63\u898f\u8868\u73fe FilesSetDefsPanel.ignoreKnownFilesCheckbox.text=\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb\u3092\u7121\u8996 FilesSetDefsPanel.fileNameRadioButton.text=\u30d5\u30a1\u30a4\u30eb\u540d diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSet.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSet.java index 89a01c1bdd..cbb3576b41 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSet.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSet.java @@ -535,7 +535,7 @@ public final class FilesSet implements Serializable { public boolean passes(AbstractFile file) { switch (this.type) { case FILES: - return file.getMetaType() == TskData.TSK_FS_META_TYPE_ENUM.TSK_FS_META_TYPE_REG; + return file.isFile(); case DIRECTORIES: return file.getMetaType() == TskData.TSK_FS_META_TYPE_ENUM.TSK_FS_META_TYPE_DIR; case FILES_AND_DIRECTORIES: diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.form b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.form index 29bd143b28..d777ba80c0 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.form @@ -88,7 +88,7 @@ - + @@ -236,7 +236,7 @@ - + @@ -603,18 +603,18 @@ - + - + - + diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java index 7251e152d9..2b378cb4f7 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java @@ -98,6 +98,10 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp this.jLabel8.setVisible(false); this.equalitySignComboBox.setVisible(false); this.ignoreKnownFilesCheckbox.setVisible(false); + this.jLabel2.setVisible(false); + this.filesRadioButton.setVisible(false); + this.dirsRadioButton.setVisible(false); + this.allRadioButton.setVisible(false); this.jTextArea1.setText(org.openide.util.NbBundle.getMessage(FilesSetDefsPanel.class, "FilesSetDefsPanel.ingest.jTextArea1.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(setsListLabel, org.openide.util.NbBundle.getMessage(FilesSetDefsPanel.class, "FilesSetDefsPanel.ingest.setsListLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(editSetButton, org.openide.util.NbBundle.getMessage(FilesSetDefsPanel.class, "FilesSetDefsPanel.ingest.editSetButton.text")); // NOI18N @@ -343,7 +347,7 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp FilesSetDefsPanel.this.dirsRadioButton.setSelected(true); break; case FILES_AND_DIRECTORIES: - FilesSetDefsPanel.this.bothRadioButton.setSelected(true); + FilesSetDefsPanel.this.allRadioButton.setSelected(true); break; } if (pathCondition != null) { @@ -556,7 +560,7 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp fileNameRegexCheckbox = new javax.swing.JCheckBox(); separator = new javax.swing.JSeparator(); setsListLabel = new javax.swing.JLabel(); - bothRadioButton = new javax.swing.JRadioButton(); + allRadioButton = new javax.swing.JRadioButton(); deleteSetButton = new javax.swing.JButton(); deleteRuleButton = new javax.swing.JButton(); newSetButton = new javax.swing.JButton(); @@ -686,10 +690,10 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp setsListLabel.setFont(setsListLabel.getFont().deriveFont(setsListLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11)); org.openide.awt.Mnemonics.setLocalizedText(setsListLabel, org.openide.util.NbBundle.getMessage(FilesSetDefsPanel.class, "FilesSetDefsPanel.interesting.setsListLabel.text")); // NOI18N - typeButtonGroup.add(bothRadioButton); - bothRadioButton.setFont(bothRadioButton.getFont().deriveFont(bothRadioButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11)); - org.openide.awt.Mnemonics.setLocalizedText(bothRadioButton, org.openide.util.NbBundle.getMessage(FilesSetDefsPanel.class, "FilesSetDefsPanel.bothRadioButton.text")); // NOI18N - bothRadioButton.setEnabled(false); + typeButtonGroup.add(allRadioButton); + allRadioButton.setFont(allRadioButton.getFont().deriveFont(allRadioButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11)); + org.openide.awt.Mnemonics.setLocalizedText(allRadioButton, org.openide.util.NbBundle.getMessage(FilesSetDefsPanel.class, "FilesSetDefsPanel.allRadioButton.text")); // NOI18N + allRadioButton.setEnabled(false); deleteSetButton.setFont(deleteSetButton.getFont().deriveFont(deleteSetButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11)); deleteSetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete16.png"))); // NOI18N @@ -802,7 +806,7 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(dirsRadioButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(bothRadioButton)) + .addComponent(allRadioButton)) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(105, 105, 105) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -921,7 +925,7 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp .addComponent(jLabel2) .addComponent(filesRadioButton) .addComponent(dirsRadioButton) - .addComponent(bothRadioButton)) + .addComponent(allRadioButton)) .addGap(16, 16, 16) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) @@ -1023,7 +1027,7 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp }//GEN-LAST:event_newRuleButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JRadioButton bothRadioButton; + private javax.swing.JRadioButton allRadioButton; private javax.swing.JButton deleteRuleButton; private javax.swing.JButton deleteSetButton; private javax.swing.JRadioButton dirsRadioButton; diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetPanel.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetPanel.java index 733902b1ec..4c47601b68 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetPanel.java @@ -28,8 +28,9 @@ import org.sleuthkit.autopsy.modules.interestingitems.FilesSetDefsPanel.PANEL_TY * definitions. */ public class FilesSetPanel extends javax.swing.JPanel { - @NbBundle.Messages({"FilesSetPanel.ingest.title=File Ingest Filter", "FilesSetPanel.ingest.createNewFilter=Create new file ingest filter..."}) - + + @NbBundle.Messages({"FilesSetPanel.ingest.title=File Ingest Filter", "FilesSetPanel.ingest.createNewFilter=Create/edit file ingest filter(s)..."}) + private static final String CREATE_NEW_FILE_INGEST_FILTER = Bundle.FilesSetPanel_ingest_createNewFilter(); /** @@ -39,7 +40,6 @@ public class FilesSetPanel extends javax.swing.JPanel { return CREATE_NEW_FILE_INGEST_FILTER; } - /** * Construct a files set panel in create mode. */ diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetRulePanel.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetRulePanel.java index f53700c34e..822c24dfeb 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetRulePanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetRulePanel.java @@ -39,8 +39,7 @@ import org.sleuthkit.autopsy.modules.filetypeid.FileTypeDetector; import org.sleuthkit.autopsy.modules.interestingitems.FilesSetDefsPanel.PANEL_TYPE; /** - * A panel that allows a user to create and edit files set - * membership rules. + * A panel that allows a user to create and edit files set membership rules. */ final class FilesSetRulePanel extends javax.swing.JPanel { @@ -75,6 +74,10 @@ final class FilesSetRulePanel extends javax.swing.JPanel { fileSizeCheck.setVisible(false); equalitySymbolComboBox.setVisible(false); fileSizeSpinner.setVisible(false); + jLabel1.setVisible(false); + filesRadioButton.setVisible(false); + dirsRadioButton.setVisible(false); + allRadioButton.setVisible(false); org.openide.awt.Mnemonics.setLocalizedText(jLabel5, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.ingest.jLabel5.text")); // NOI18N } else { @@ -98,6 +101,10 @@ final class FilesSetRulePanel extends javax.swing.JPanel { fileSizeCheck.setVisible(false); equalitySymbolComboBox.setVisible(false); fileSizeSpinner.setVisible(false); + jLabel1.setVisible(false); + filesRadioButton.setVisible(false); + dirsRadioButton.setVisible(false); + allRadioButton.setVisible(false); } else { populateMimeTypesComboBox(); populateMimeConditionComponents(rule); @@ -295,8 +302,8 @@ final class FilesSetRulePanel extends javax.swing.JPanel { /** * Returns whether or not the data entered in the panel constitutes a valid - * files set membership rule definition, displaying a dialog - * explaining the deficiency if the definition is invalid. + * files set membership rule definition, displaying a dialog explaining the + * deficiency if the definition is invalid. * * @return True if the definition is valid, false otherwise. */ @@ -559,7 +566,6 @@ final class FilesSetRulePanel extends javax.swing.JPanel { this.fileSizeCheck.setSelected(false); this.mimeCheck.setEnabled(false); this.mimeCheck.setSelected(false); - } else { if (this.nameCheck.isSelected()) { this.extensionRadioButton.setEnabled(true);