From 150bbe05f7dfabda16e124b23ec19a1b364d9582 Mon Sep 17 00:00:00 2001 From: Green Sky Date: Wed, 25 Oct 2023 02:44:30 +0200 Subject: [PATCH] config --- src/CMakeLists.txt | 2 +- src/solanaceae/clamav/clamav_module.cpp | 11 ++++++++++- src/solanaceae/clamav/clamav_module.hpp | 4 +++- src/solanaceae/clamav/test_exe.cpp | 7 ++++++- src/solanaceae/clamav/test_lib.cpp | 1 - 5 files changed, 20 insertions(+), 5 deletions(-) delete mode 100644 src/solanaceae/clamav/test_lib.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 906abf3..c2d9178 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,7 +10,7 @@ target_include_directories(solanaceae_clamav PUBLIC .) target_compile_features(solanaceae_clamav PUBLIC cxx_std_17) target_link_libraries(solanaceae_clamav PUBLIC EXT_SOL::libclamav - #solanaceae_util + solanaceae_util ) add_executable(solanaceae_clamav_test diff --git a/src/solanaceae/clamav/clamav_module.cpp b/src/solanaceae/clamav/clamav_module.cpp index 87abefe..d012583 100644 --- a/src/solanaceae/clamav/clamav_module.cpp +++ b/src/solanaceae/clamav/clamav_module.cpp @@ -1,5 +1,7 @@ #include "./clamav_module.hpp" +#include + #include #include @@ -9,7 +11,7 @@ extern "C" { void sol_cl_msg_cb(enum cl_msg severity, const char *fullmsg, const char *msg, void *context); }; -ClamAVModule::ClamAVModule(void) { +ClamAVModule::ClamAVModule(ConfigModelI& conf) : _conf(conf) { if (cl_init(CL_INIT_DEFAULT) != CL_SUCCESS) { throw std::domain_error("clamav cl_init() failed"); } @@ -35,8 +37,12 @@ bool ClamAVModule::startEngine(void) { return false; } + std::string db_dir; // TODO: load from config + if (_conf.has_string("ClamAVModule", "database_dir")) { + db_dir = _conf.get_string("ClamAVModule", "database_dir").value(); + } unsigned int signo = 0; @@ -65,6 +71,9 @@ bool ClamAVModule::startEngine(void) { } } + // TODO: dont reset if not changed + _conf.set("ClamAVModule", "database_dir", db_dir); + std::cout << "signatures loaded: " << signo << "\n"; if (cl_engine_compile(_clamav_engine) != CL_SUCCESS) { diff --git a/src/solanaceae/clamav/clamav_module.hpp b/src/solanaceae/clamav/clamav_module.hpp index f952f1e..00dbc99 100644 --- a/src/solanaceae/clamav/clamav_module.hpp +++ b/src/solanaceae/clamav/clamav_module.hpp @@ -5,15 +5,17 @@ extern "C" { struct cl_engine; } +struct ConfigModelI; // blocking class ClamAVModule : public ClamAVModuleInterface { + ConfigModelI& _conf; cl_engine* _clamav_engine {nullptr}; bool startEngine(void); public: - ClamAVModule(void); + ClamAVModule(ConfigModelI& conf); ~ClamAVModule(void); ScanResult scanFilePath(std::string_view path); diff --git a/src/solanaceae/clamav/test_exe.cpp b/src/solanaceae/clamav/test_exe.cpp index 9b64d35..771dddc 100644 --- a/src/solanaceae/clamav/test_exe.cpp +++ b/src/solanaceae/clamav/test_exe.cpp @@ -1,10 +1,13 @@ #include "./clamav_module.hpp" +#include + #include int main(void) { + SimpleConfigModel scm; - ClamAVModule clamav; + ClamAVModule clamav{scm}; auto [is_virus, virus_string] = clamav.scanFilePath("/home/green/Downloads/mal/f8c08d00ff6e8c6adb1a93cd133b19302d0b651afd73ccb54e3b6ac6c60d99c6"); if (is_virus) { @@ -13,6 +16,8 @@ int main(void) { std::cout << "not virus: " << virus_string << "\n"; } + scm.dump(); + return 0; } diff --git a/src/solanaceae/clamav/test_lib.cpp b/src/solanaceae/clamav/test_lib.cpp deleted file mode 100644 index 9f0a279..0000000 --- a/src/solanaceae/clamav/test_lib.cpp +++ /dev/null @@ -1 +0,0 @@ -#include