diff --git a/tools/logicalimager/LogicalImagerConfiguration.cpp b/tools/logicalimager/LogicalImagerConfiguration.cpp index a6d599125428e5d835c58d05c03f2986398e2e15..9307755835c53942e8431243f321d1db21ce4b50 100644 --- a/tools/logicalimager/LogicalImagerConfiguration.cpp +++ b/tools/logicalimager/LogicalImagerConfiguration.cpp @@ -24,6 +24,7 @@ #include "LogicalImagerConfiguration.h" #include "LogicalImagerRuleSet.h" +#include "Version.h" /** * Implement the logical imager configuration. @@ -214,11 +215,25 @@ LogicalImagerConfiguration::LogicalImagerConfiguration(const std::string &config else if (it.key() == "finalize-image-writer") { it.value().get_to(m_finalizeImageWriter); } + else if (it.key() == "version") { + it.value().get_to(m_version); + } } if (hasError) { throw std::logic_error("ERROR: parsing configuration file " + configFilename + newline + errorStr); } + + // check version + Version currentVersion(m_currentVersion); + Version version(m_version); + + if (!(version == currentVersion || version < currentVersion)) { + throw std::logic_error("ERROR: unsupported configuration version " + m_version + + ". Supported version is " + + m_currentVersion + " or less."); + } + } /** diff --git a/tools/logicalimager/LogicalImagerConfiguration.h b/tools/logicalimager/LogicalImagerConfiguration.h index e4ff251d16c51d297132156a81808ce954f118a2..d64deba040afaf6727957fb69e4d1f965483a628 100644 --- a/tools/logicalimager/LogicalImagerConfiguration.h +++ b/tools/logicalimager/LogicalImagerConfiguration.h @@ -38,11 +38,15 @@ class LogicalImagerConfiguration TSK_RETVAL_ENUM matches(TSK_FS_FILE *fs_file, const char *path) const; const std::vector<std::pair<const RuleMatchResult *, std::list<std::string>>> getFullFilePaths() const; bool getFinalizeImagerWriter() { return m_finalizeImageWriter; } + std::string getVersion() { return m_version; } private: LogicalImagerConfiguration(const LogicalImagerConfiguration &) = delete; std::vector<LogicalImagerRuleSet *> m_ruleSets; bool m_finalizeImageWriter = false; + std::string m_version; LogicalImagerRuleSet::matchCallback m_callbackFunc; + + const std::string m_currentVersion = std::string("1.0"); }; diff --git a/tools/logicalimager/Version.h b/tools/logicalimager/Version.h new file mode 100644 index 0000000000000000000000000000000000000000..7451982a3b814ed058679f06384312e8b18b7fc4 --- /dev/null +++ b/tools/logicalimager/Version.h @@ -0,0 +1,58 @@ +/* +** The Sleuth Kit +** +** Brian Carrier [carrier <at> sleuthkit [dot] org] +** Copyright (c) 2010-2019 Brian Carrier. All Rights reserved +** +** This software is distributed under the Common Public License 1.0 +** +*/ + +/** +* \file Version.h +* Contains the class definitions for the Version class +*/ + +#pragma once + +#include <string> + +/** +* Implement the major and minor version. +* +*/ +class Version { +public: + + Version(std::string version) + { + int status = std::sscanf(version.c_str(), "%d.%d", &m_major, &m_minor); + if (status != 2) { + throw std::logic_error("ERROR: Invalid version " + version + ". Expected major.minor"); + } + } + + bool operator < (const Version& rhs) const { + if (m_major < rhs.m_major) + return true; + if (m_minor < rhs.m_minor) + return true; + return false; + } + + bool operator == (const Version& other) const { + return m_major == other.m_major + && m_minor == other.m_minor; + } + + friend std::ostream& operator << (std::ostream& stream, const Version& ver) { + stream << ver.m_major; + stream << '.'; + stream << ver.m_minor; + return stream; + } + +private: + int m_major = 0; + int m_minor = 0; +}; \ No newline at end of file diff --git a/tools/logicalimager/tsk_logical_imager.cpp b/tools/logicalimager/tsk_logical_imager.cpp index d339d0511066ae674012ebe0f36dd2ec02c60e79..b81424f0b1df2f23ea569aafa4f4369f57ea0070 100644 --- a/tools/logicalimager/tsk_logical_imager.cpp +++ b/tools/logicalimager/tsk_logical_imager.cpp @@ -909,13 +909,6 @@ main(int argc, char **argv1) } printDebug("Using config file %s", TskHelper::toNarrow(configFilename).c_str()); - // create a directory with hostname_timestamp - std::string directoryPath; - if (createDirectory(directoryPath) == -1) { - exit(1); - } - fprintf(stdout, "Created directory %s\n", directoryPath.c_str()); - std::wstring wImgPathName; std::vector<std::wstring> drivesToProcess; @@ -942,6 +935,14 @@ main(int argc, char **argv1) exit(1); } + // create a directory with hostname_timestamp + std::string directoryPath; + if (createDirectory(directoryPath) == -1) { + fprintf(stderr, "Failed to create directory %s\n", directoryPath.c_str()); + exit(1); + } + fprintf(stdout, "Created directory %s\n", directoryPath.c_str()); + std::string alertFileName = directoryPath + "/alert.txt"; openAlert(alertFileName); diff --git a/win32/tsk_logical_imager/tsk_logical_imager.vcxproj b/win32/tsk_logical_imager/tsk_logical_imager.vcxproj index 15d74717664ff4768f9c935eb0ade897098b37dd..ec90958cc79406d805e696941e50b3b8ab177be3 100755 --- a/win32/tsk_logical_imager/tsk_logical_imager.vcxproj +++ b/win32/tsk_logical_imager/tsk_logical_imager.vcxproj @@ -464,6 +464,7 @@ <ClInclude Include="..\..\tools\logicalimager\RuleMatchResult.h" /> <ClInclude Include="..\..\tools\logicalimager\TskFindFiles.h" /> <ClInclude Include="..\..\tools\logicalimager\TskHelper.h" /> + <ClInclude Include="..\..\tools\logicalimager\Version.h" /> </ItemGroup> <ItemGroup> <ClCompile Include="..\..\tools\logicalimager\LogicalImagerConfiguration.cpp" /> diff --git a/win32/tsk_logical_imager/tsk_logical_imager.vcxproj.filters b/win32/tsk_logical_imager/tsk_logical_imager.vcxproj.filters index 212045af79dbe2bd8054b9e67a52b9c4b72bd3f7..226006fdc90f7a6146d21989353c90de02e8fb23 100755 --- a/win32/tsk_logical_imager/tsk_logical_imager.vcxproj.filters +++ b/win32/tsk_logical_imager/tsk_logical_imager.vcxproj.filters @@ -71,6 +71,9 @@ <ClInclude Include="..\..\tools\logicalimager\LogicalImagerConfiguration.h"> <Filter>Header Files</Filter> </ClInclude> + <ClInclude Include="..\..\tools\logicalimager\Version.h"> + <Filter>Header Files</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="..\..\tools\logicalimager\LogicalImagerDateRule.cpp">