Merge pull request #7947 from sleuthkit/release-4.22.0

Release 4.22.0 into develop
This commit is contained in:
Mark McKinnon 2025-03-13 10:24:26 -04:00 committed by GitHub
commit 2f24fc0458
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
23 changed files with 119 additions and 45 deletions

View File

@ -2,7 +2,7 @@ Manifest-Version: 1.0
OpenIDE-Module: org.sleuthkit.autopsy.core/10
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/core/Bundle.properties
OpenIDE-Module-Layer: org/sleuthkit/autopsy/core/layer.xml
OpenIDE-Module-Implementation-Version: 38
OpenIDE-Module-Implementation-Version: 39
OpenIDE-Module-Requires: org.openide.windows.WindowManager
AutoUpdate-Show-In-Client: true
AutoUpdate-Essential-Module: true

View File

@ -93,8 +93,8 @@ file.reference.okio-jvm-3.6.0.jar=release/modules/ext/okio-jvm-3.6.0.jar
file.reference.postgresql-42.7.3.jar=release/modules/ext/postgresql-42.7.3.jar
file.reference.sevenzipjbinding-AllPlatforms.jar=release/modules/ext/sevenzipjbinding-AllPlatforms.jar
file.reference.sevenzipjbinding.jar=release/modules/ext/sevenzipjbinding.jar
file.reference.sleuthkit-4.12.1.jar=release/modules/ext/sleuthkit-4.12.1.jar
file.reference.sleuthkit-caseuco-4.12.1.jar=release/modules/ext/sleuthkit-caseuco-4.12.1.jar
file.reference.sleuthkit-4.13.0.jar=release/modules/ext/sleuthkit-4.13.0.jar
file.reference.sleuthkit-caseuco-4.13.0.jar=release/modules/ext/sleuthkit-caseuco-4.13.0.jar
file.reference.slf4j-api-1.7.30.jar=release/modules/ext/slf4j-api-1.7.30.jar
file.reference.snakeyaml-2.3.jar=release/modules/ext/snakeyaml-2.3.jar
file.reference.spotbugs-annotations-4.8.6.jar=release/modules/ext/spotbugs-annotations-4.8.6.jar
@ -113,4 +113,4 @@ license.file=../LICENSE-2.0.txt
nbm.homepage=http\://www.sleuthkit.org/
nbm.module.author=Brian Carrier
nbm.needs.restart=true
spec.version.base=10.25
spec.version.base=10.26

View File

@ -742,12 +742,12 @@
<binary-origin>release/modules/ext/sevenzipjbinding.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sleuthkit-4.12.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sleuthkit-4.12.1.jar</binary-origin>
<runtime-relative-path>ext/sleuthkit-4.13.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sleuthkit-4.13.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sleuthkit-caseuco-4.12.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sleuthkit-caseuco-4.12.1.jar</binary-origin>
<runtime-relative-path>ext/sleuthkit-caseuco-4.13.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sleuthkit-caseuco-4.13.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/slf4j-api-1.7.30.jar</runtime-relative-path>

View File

@ -6,6 +6,15 @@
package org.sleuthkit.autopsy.casemodule.services;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonSyntaxException;
import java.lang.reflect.Type;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
@ -17,13 +26,19 @@ import java.util.List;
import javax.annotation.concurrent.Immutable;
import java.io.FileFilter;
import java.io.FileReader;
import java.util.logging.Level;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
import org.sleuthkit.datamodel.TagName;
import org.sleuthkit.datamodel.TskData;
/**
* Definition of a tag set.
*/
@Immutable
final public class TagSetDefinition {
private static final Logger LOGGER = Logger.getLogger(TagSetDefinition.class.getName());
private final static String FILE_NAME_TEMPLATE = "%s-tag-set.json";
private final static Path TAGS_USER_CONFIG_DIR = Paths.get(PlatformUtil.getUserConfigDirectory(), "tags");
@ -102,10 +117,24 @@ final public class TagSetDefinition {
}
File[] fileList = dir.listFiles(new TagSetJsonFileFilter());
Gson gson = new Gson();
if (fileList == null) {
return tagSetList;
}
Gson gson = new GsonBuilder()
.registerTypeAdapter(TagSetDefinition.class, new TagSetDefinitionDeserializer()) // Use custom deserializer
.create();
for (File file : fileList) {
try (FileReader reader = new FileReader(file)) {
tagSetList.add(gson.fromJson(reader, TagSetDefinition.class));
TagSetDefinition tagSet = gson.fromJson(reader, TagSetDefinition.class);
if (tagSet != null) {
tagSetList.add(tagSet);
}
} catch (JsonSyntaxException e) {
LOGGER.log(Level.SEVERE, "Skipping invalid JSON file: " + file.getName() + " - " + e.getMessage());
} catch (IOException e) {
LOGGER.log(Level.SEVERE, "Error reading file: " + file.getName() + " - " + e.getMessage());
}
}
@ -132,4 +161,56 @@ final public class TagSetDefinition {
}
}
// Custom JSON Deserializer for TagSetDefinition to support legacy user tags and tag set JSON files.
// In TSK release 4.13.0 and Autopsy release 4.22.0 we:
// 1) renamed "TskData.KnownStatus" to "TskData.TagType"
// 2) renamed "TagSetDefinition.knownStatus" to "TagSetDefinition.tagType"
// 3) "TskData.KnownStatus" of "unknown" used to carry a score of "suspicious".
// Now "TskData.TagType" of "unknown" carries a score of "unknown".
//
private static class TagSetDefinitionDeserializer implements JsonDeserializer<TagSetDefinition> {
@Override
public TagSetDefinition deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject jsonObject = json.getAsJsonObject();
String name = jsonObject.has("name") ? jsonObject.get("name").getAsString() : null;
JsonArray tagArray = jsonObject.has("tagNameDefinitionList") ? jsonObject.getAsJsonArray("tagNameDefinitionList") : new JsonArray();
List<TagNameDefinition> tagNameDefinitions = new ArrayList<>();
for (JsonElement element : tagArray) {
JsonObject tagObject = element.getAsJsonObject();
String displayName = tagObject.has("displayName") ? tagObject.get("displayName").getAsString() : null;
String description = tagObject.has("description") ? tagObject.get("description").getAsString() : null;
TagName.HTML_COLOR color = context.deserialize(tagObject.get("color"), TagName.HTML_COLOR.class);
TskData.TagType tagType = null;
// Handle tagType vs knownStatus
if (tagObject.has("tagType") && !tagObject.get("tagType").isJsonNull()) {
tagType = context.deserialize(tagObject.get("tagType"), TskData.TagType.class);
} else if (tagObject.has("knownStatus") && !tagObject.get("knownStatus").isJsonNull()) {
TskData.TagType legacyStatus = context.deserialize(tagObject.get("knownStatus"), TskData.TagType.class);
// "UNKNOWN" tag type used to carry an automatic "SUSPICIOUS" score.
// If knownStatus was "UNKNOWN", use "SUSPICIOUS" instead
if (legacyStatus == TskData.TagType.UNKNOWN) {
tagType = TskData.TagType.SUSPICIOUS;
} else {
tagType = legacyStatus;
}
}
if (tagType == null) {
LOGGER.log(Level.SEVERE, "Failed to initialize tagType for tag: {0}. Skipping entry.", displayName);
continue;
}
tagNameDefinitions.add(new TagNameDefinition(displayName, description, color, tagType));
}
return new TagSetDefinition(name, tagNameDefinitions);
}
}
}

View File

@ -45,10 +45,10 @@
<EmptySpace max="-2" attributes="0"/>
<Component id="logoLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="jScrollPane3" min="-2" pref="140" max="-2" attributes="2"/>
<Component id="jScrollPane3" pref="184" max="32767" attributes="2"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="jScrollPane2" min="-2" pref="130" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="jScrollPane2" min="-2" pref="139" max="-2" attributes="0"/>
<EmptySpace type="separate" max="32767" attributes="0"/>
<Component id="verboseLoggingButton" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" pref="18" max="-2" attributes="0"/>
<Component id="jButton2" min="-2" max="-2" attributes="0"/>
@ -119,9 +119,6 @@
</Container>
<Component class="javax.swing.JButton" name="verboseLoggingButton">
<Properties>
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="ff" green="ff" red="ff" type="rgb"/>
</Property>
<Property name="text" type="java.lang.String" value="Activate verbose logging"/>
</Properties>
<Events>
@ -130,9 +127,6 @@
</Component>
<Component class="javax.swing.JButton" name="jButton2">
<Properties>
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="ff" green="ff" red="ff" type="rgb"/>
</Property>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/netbeans/core/ui/Bundle.properties" key="LBL_Close" replaceFormat="NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>

View File

@ -139,7 +139,6 @@ public final class AboutWindowPanel extends JPanel implements HyperlinkListener
description.setContentType("text/html"); // NOI18N
jScrollPane2.setViewportView(description);
verboseLoggingButton.setBackground(new java.awt.Color(255, 255, 255));
verboseLoggingButton.setText("Activate verbose logging");
verboseLoggingButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
@ -147,7 +146,6 @@ public final class AboutWindowPanel extends JPanel implements HyperlinkListener
}
});
jButton2.setBackground(new java.awt.Color(255, 255, 255));
jButton2.setText(NbBundle.getMessage(AboutWindowPanel.class, "LBL_Close")); // NOI18N
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
@ -178,10 +176,10 @@ public final class AboutWindowPanel extends JPanel implements HyperlinkListener
.addContainerGap()
.addComponent(logoLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, Short.MAX_VALUE)
.addComponent(verboseLoggingButton)
.addGap(18, 18, 18)
.addComponent(jButton2)

View File

@ -17,7 +17,7 @@ DataContentViewerHex.pageLabel2.text=Page
# Product Information panel
LBL_Description=<div style=\"font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif;\">\n <b>Product Version:</b> {0} ({9}) <br><b>Sleuth Kit Version:</b> {7} <br><b>Netbeans RCP Build:</b> {8} <br> <b>Java:</b> {1}; {2}<br> <b>System:</b> {3}; {4}; {5}<br><b>Userdir:</b> {6}</div>
Format_OperatingSystem_Value={0} version {1} running on {2}
LBL_Copyright=<div style\="font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; ">Autopsy&trade; is a digital forensics platform based on The Sleuth Kit&trade; and other tools. <br><ul><li>General Information: <a style\="color: \#1E2A60;" href\="http://www.sleuthkit.org">http://www.sleuthkit.org</a>.</li><li>Training: <a style\="color: \#1E2A60;" href\="https://www.autopsy.com/support/training/">https://www.autopsy.com/support/training/</a></li><li>Support: <a style\="color: \#1E2A60;" href\="https://www.sleuthkit.org/support.php">https://www.sleuthkit.org/support.php</a></li></ul>Copyright &copy; 2003-2020. </div>
LBL_Copyright=<div style\="font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; ">Autopsy&trade; is a digital forensics platform based on The Sleuth Kit&trade; and other tools. <br><ul><li>General Information: <a style\="color: \#1E2A60;" href\="http://www.autopsy.com">http://www.autopsy.com</a>.</li><li>Training: <a style\="color: \#1E2A60;" href\="https://www.autopsy.com/support/training/">https://www.autopsy.com/support/training/</a></li><li>Support: <a style\="color: \#1E2A60;" href\="https://www.autopsy.com/community/">https://www.autopsy.com/community/</a></li></ul>Copyright &copy; 2003-2025 Sleuth Kit Labs, Inc. <br><br> Maintained by: Sleuth Kit Labs <a style\="color: \#1E2A60;" href\="https://www.sleuthkitlabs.com">https://www.sleuthkitlabs.com</a><br><br> Sponsored by: Cyber Triage <a style\="color: \#1E2A60;" href\="https://www.cybertriage.com">https://www.cybertriage.com</a></div>
URL_ON_IMG=http://www.sleuthkit.org/
FILE_FOR_LOCAL_HELP=file:///
INDEX_FOR_LOCAL_HELP=/docs/index.html

View File

@ -26,6 +26,7 @@ AutopsyOptionsPanel_storeTempDir_onError_title=Error Saving Temporary Directory
# {0} - path
AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_description=Unable to create temporary directory within specified path: {0}
AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_title=Path cannot be used
CTL_CustomAboutAction=About
CTL_DataContentAction=DataContent
CTL_DataContentTopComponent=Data Content
CTL_OfflineHelpAction=Offline Autopsy Documentation
@ -77,7 +78,7 @@ DataContentViewerHex.pageLabel2.text=Page
# Product Information panel
LBL_Description=<div style=\"font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif;\">\n <b>Product Version:</b> {0} ({9}) <br><b>Sleuth Kit Version:</b> {7} <br><b>Netbeans RCP Build:</b> {8} <br> <b>Java:</b> {1}; {2}<br> <b>System:</b> {3}; {4}; {5}<br><b>Userdir:</b> {6}</div>
Format_OperatingSystem_Value={0} version {1} running on {2}
LBL_Copyright=<div style\="font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; ">Autopsy&trade; is a digital forensics platform based on The Sleuth Kit&trade; and other tools. <br><ul><li>General Information: <a style\="color: \#1E2A60;" href\="http://www.sleuthkit.org">http://www.sleuthkit.org</a>.</li><li>Training: <a style\="color: \#1E2A60;" href\="https://www.autopsy.com/support/training/">https://www.autopsy.com/support/training/</a></li><li>Support: <a style\="color: \#1E2A60;" href\="https://www.sleuthkit.org/support.php">https://www.sleuthkit.org/support.php</a></li></ul>Copyright &copy; 2003-2020. </div>
LBL_Copyright=<div style\="font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; ">Autopsy&trade; is a digital forensics platform based on The Sleuth Kit&trade; and other tools. <br><ul><li>General Information: <a style\="color: \#1E2A60;" href\="http://www.autopsy.com">http://www.autopsy.com</a>.</li><li>Training: <a style\="color: \#1E2A60;" href\="https://www.autopsy.com/support/training/">https://www.autopsy.com/support/training/</a></li><li>Support: <a style\="color: \#1E2A60;" href\="https://www.autopsy.com/community/">https://www.autopsy.com/community/</a></li></ul>Copyright &copy; 2003-2025 Sleuth Kit Labs, Inc. <br><br> Maintained by: Sleuth Kit Labs <a style\="color: \#1E2A60;" href\="https://www.sleuthkitlabs.com">https://www.sleuthkitlabs.com</a><br><br> Sponsored by: Cyber Triage <a style\="color: \#1E2A60;" href\="https://www.cybertriage.com">https://www.cybertriage.com</a></div>
SortChooser.dialogTitle=Choose Sort Criteria
ThumbnailViewChildren.progress.cancelling=(Cancelling)
# {0} - file name

View File

@ -1,7 +1,7 @@
Manifest-Version: 1.0
AutoUpdate-Show-In-Client: true
OpenIDE-Module: org.sleuthkit.autopsy.experimental/1
OpenIDE-Module-Implementation-Version: 1
OpenIDE-Module-Implementation-Version: 2
OpenIDE-Module-Layer: org/sleuthkit/autopsy/experimental/autoingest/layer.xml
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties
OpenIDE-Module-Requires: org.openide.windows.WindowManager

View File

@ -1,4 +1,4 @@
file.reference.jtidy-r938.jar=release/modules/ext/jtidy-r938.jar
javac.compilerargs=-Xlint -Xlint\:-serial
javac.source=17
spec.version.base=1.0
spec.version.base=1.1

View File

@ -144,7 +144,7 @@
<compile-dependency/>
<run-dependency>
<release-version>10</release-version>
<specification-version>10.25</specification-version>
<specification-version>10.26</specification-version>
</run-dependency>
</dependency>
<dependency>

View File

@ -127,7 +127,7 @@
<compile-dependency/>
<run-dependency>
<release-version>10</release-version>
<specification-version>10.25</specification-version>
<specification-version>10.26</specification-version>
</run-dependency>
</dependency>
<dependency>

View File

@ -128,7 +128,7 @@
<compile-dependency/>
<run-dependency>
<release-version>10</release-version>
<specification-version>10.25</specification-version>
<specification-version>10.26</specification-version>
</run-dependency>
</dependency>
<dependency>

View File

@ -1,6 +1,6 @@
Manifest-Version: 1.0
OpenIDE-Module: org.sleuthkit.autopsy.recentactivity/6
OpenIDE-Module-Implementation-Version: 20
OpenIDE-Module-Implementation-Version: 21
OpenIDE-Module-Layer: org/sleuthkit/autopsy/recentactivity/layer.xml
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/recentactivity/Bundle.properties
OpenIDE-Module-Requires:

View File

@ -69,7 +69,7 @@
<compile-dependency/>
<run-dependency>
<release-version>10</release-version>
<specification-version>10.24</specification-version>
<specification-version>10.26</specification-version>
</run-dependency>
</dependency>
<dependency>

View File

@ -1,3 +1,3 @@
<project name="TSK_VERSION">
<property name="TSK_VERSION" value="4.12.1"/>
<property name="TSK_VERSION" value="4.13.0"/>
</project>

View File

@ -47,7 +47,7 @@
<compile-dependency/>
<run-dependency>
<release-version>10</release-version>
<specification-version>10.25</specification-version>
<specification-version>10.26</specification-version>
</run-dependency>
</dependency>
<dependency>

View File

@ -1,4 +1,4 @@
#Updated by build script
#Fri, 03 Jan 2025 17:15:38 -0500
CTL_MainWindow_Title=Autopsy 4.21.0
CTL_MainWindow_Title_No_Project=Autopsy 4.21.0
#Thu, 27 Feb 2025 16:58:14 -0500
CTL_MainWindow_Title=Autopsy 4.22.0
CTL_MainWindow_Title_No_Project=Autopsy 4.22.0

View File

@ -38,7 +38,7 @@ PROJECT_NAME = "Autopsy User Documentation"
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = 4.21.0
PROJECT_NUMBER = 4.22.0
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
@ -1025,7 +1025,7 @@ GENERATE_HTML = YES
# The default directory is: html.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_OUTPUT = 4.21.0
HTML_OUTPUT = 4.22.0
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
# generated HTML page (for example: .htm, .php, .asp).

View File

@ -38,7 +38,7 @@ PROJECT_NAME = "Autopsy"
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = 4.21.0
PROJECT_NUMBER = 4.22.0
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears a the top of each page and should give viewer a
@ -1066,7 +1066,7 @@ GENERATE_HTML = YES
# The default directory is: html.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_OUTPUT = api-docs/4.21.0/
HTML_OUTPUT = api-docs/4.22.0/
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
# generated HTML page (for example: .htm, .php, .asp).

View File

@ -4,7 +4,7 @@ app.title=Autopsy
### lowercase version of above
app.name=${branding.token}
### if left unset, version will default to today's date
app.version=4.21.0
app.version=4.22.0
### build.type must be one of: DEVELOPMENT, RELEASE
#build.type=RELEASE
build.type=DEVELOPMENT

View File

@ -54,7 +54,7 @@
<compile-dependency/>
<run-dependency>
<release-version>10</release-version>
<specification-version>10.25</specification-version>
<specification-version>10.26</specification-version>
</run-dependency>
</dependency>
<dependency>

View File

@ -5,7 +5,7 @@
# NOTE: update_sleuthkit_version.pl updates this value and relies
# on it keeping the same name and whitespace. Don't change it.
TSK_VERSION=4.12.1
TSK_VERSION=4.13.0
usage() {