diff options
-rw-r--r-- | lib/MiddleWare/Makefile.am | 35 | ||||
-rw-r--r-- | lib/MiddleWare/MiddleWare.cpp | 615 | ||||
-rw-r--r-- | lib/MiddleWare/MiddleWare.h | 349 | ||||
-rw-r--r-- | src/Daemon/Makefile.am | 1 |
4 files changed, 19 insertions, 981 deletions
diff --git a/lib/MiddleWare/Makefile.am b/lib/MiddleWare/Makefile.am index 10a74cf..3e270c8 100644 --- a/lib/MiddleWare/Makefile.am +++ b/lib/MiddleWare/Makefile.am @@ -1,7 +1,6 @@ lib_LTLIBRARIES = libABRTMiddleWare.la libABRTMiddleWare_la_SOURCES = \ - MiddleWare.cpp MiddleWare.h \ PluginManager.cpp PluginManager.h \ ABRTPlugin.cpp ABRTPlugin.h \ DynamicLibrary.cpp DynamicLibrary.h \ @@ -19,19 +18,21 @@ libABRTMiddleWare_la_CPPFLAGS = \ -I$(srcdir)/../CommLayer \ $(RPM_CFLAGS) -check_PROGRAMS = test - -test_SOURCES = test.cpp -test_LDADD = \ - ../Utils/libABRTUtils.la \ - ../CommLayer/libABRTCommLayer.la \ - libABRTMiddleWare.la \ - $(DL_LIBS) $(RPM_LIBS) -test_CPPFLAGS = \ - -I$(srcdir)/../../inc \ - -I$(srcdir)/../Utils \ - -I$(srcdir)/../CommLayer\ - -DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \ - -DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \ - -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \ - -DCONF_DIR=\"$(CONF_DIR)\" +# disabled: MiddleWare.* is moved to src/Daemon/ now +# +#check_PROGRAMS = test +# +#test_SOURCES = test.cpp +#test_LDADD = \ +# ../Utils/libABRTUtils.la \ +# ../CommLayer/libABRTCommLayer.la \ +# libABRTMiddleWare.la \ +# $(DL_LIBS) $(RPM_LIBS) +#test_CPPFLAGS = \ +# -I$(srcdir)/../../inc \ +# -I$(srcdir)/../Utils \ +# -I$(srcdir)/../CommLayer\ +# -DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \ +# -DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \ +# -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \ +# -DCONF_DIR=\"$(CONF_DIR)\" diff --git a/lib/MiddleWare/MiddleWare.cpp b/lib/MiddleWare/MiddleWare.cpp deleted file mode 100644 index 7f1250c..0000000 --- a/lib/MiddleWare/MiddleWare.cpp +++ /dev/null @@ -1,615 +0,0 @@ -/* - MiddleWare.cpp - - Copyright (C) 2009 Zdenek Prikryl (zprikryl@redhat.com) - Copyright (C) 2009 RedHat inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "MiddleWare.h" -#include "DebugDump.h" -#include "ABRTException.h" -#include "CommLayerInner.h" - -CMiddleWare::CMiddleWare(const std::string& pPluginsConfDir, - const std::string& pPluginsLibDir) : - m_pPluginManager(NULL), - m_bOpenGPGCheck(true), - m_sPluginsConfDir(pPluginsConfDir) -{ - m_pPluginManager = new CPluginManager(pPluginsConfDir, pPluginsLibDir); - m_pPluginManager->LoadPlugins(); -} - -CMiddleWare::~CMiddleWare() -{ - m_pPluginManager->UnLoadPlugins(); - delete m_pPluginManager; -} - -void CMiddleWare::DebugDumpToCrashReport(const std::string& pDebugDumpDir, map_crash_report_t& pCrashReport) -{ - std::string fileName; - std::string content; - bool isTextFile; - CDebugDump dd; - dd.Open(pDebugDumpDir); - - if (!dd.Exist(FILENAME_ARCHITECTURE) || - !dd.Exist(FILENAME_KERNEL) || - !dd.Exist(FILENAME_PACKAGE) || - !dd.Exist(FILENAME_RELEASE) || - !dd.Exist(FILENAME_EXECUTABLE)) - { - dd.Close(); - throw CABRTException(EXCEP_ERROR, "CMiddleWare::DebugDumpToCrashReport(): One or more of important file(s)'re missing."); - } - pCrashReport.clear(); - dd.InitGetNextFile(); - while (dd.GetNextFile(fileName, content, isTextFile)) - { - if (!isTextFile) - { - add_crash_data_to_crash_report(pCrashReport, - fileName, - CD_BIN, - CD_ISNOTEDITABLE, - pDebugDumpDir + "/" + fileName); - } - else - { - if (fileName == FILENAME_ARCHITECTURE || - fileName == FILENAME_KERNEL || - fileName == FILENAME_PACKAGE || - fileName == FILENAME_RELEASE || - fileName == FILENAME_EXECUTABLE) - { - add_crash_data_to_crash_report(pCrashReport, fileName, CD_TXT, CD_ISNOTEDITABLE, content); - } - else if (fileName != FILENAME_UID && - fileName != FILENAME_ANALYZER && - fileName != FILENAME_TIME && - fileName != FILENAME_DESCRIPTION ) - { - if (content.length() < CD_ATT_SIZE) - { - add_crash_data_to_crash_report(pCrashReport, fileName, CD_TXT, CD_ISEDITABLE, content); - } - else - { - add_crash_data_to_crash_report(pCrashReport, fileName, CD_ATT, CD_ISEDITABLE, content); - } - } - } - } - dd.Close(); -} - -void CMiddleWare::RegisterPlugin(const std::string& pName) -{ - m_pPluginManager->RegisterPlugin(pName); -} - -void CMiddleWare::UnRegisterPlugin(const std::string& pName) -{ - m_pPluginManager->UnRegisterPlugin(pName); -} - -void CMiddleWare::SetPluginSettings(const std::string& pName, - const map_plugin_settings_t& pSettings) -{ - m_pPluginManager->SetPluginSettings(pName, pSettings); -} - -map_plugin_settings_t CMiddleWare::GetPluginSettings(const std::string& pName) -{ - return m_pPluginManager->GetPluginSettings(pName); -} - -std::string CMiddleWare::GetLocalUUID(const std::string& pAnalyzer, - const std::string& pDebugDumpDir) -{ - CAnalyzer* analyzer = m_pPluginManager->GetAnalyzer(pAnalyzer); - return analyzer->GetLocalUUID(pDebugDumpDir); -} - -std::string CMiddleWare::GetGlobalUUID(const std::string& pAnalyzer, - const std::string& pDebugDumpDir) -{ - CAnalyzer* analyzer = m_pPluginManager->GetAnalyzer(pAnalyzer); - return analyzer->GetGlobalUUID(pDebugDumpDir); -} - -void CMiddleWare::CreateReport(const std::string& pAnalyzer, - const std::string& pDebugDumpDir) -{ - CAnalyzer* analyzer = m_pPluginManager->GetAnalyzer(pAnalyzer); - analyzer->CreateReport(pDebugDumpDir); -} - -CMiddleWare::mw_result_t CMiddleWare::CreateCrashReport(const std::string& pUUID, - const std::string& pUID, - map_crash_report_t& pCrashReport) -{ - CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); - database_row_t row; - database->Connect(); - row = database->GetUUIDData(pUUID, pUID); - database->DisConnect(); - CDebugDump dd; - - if (pUUID == "" || row.m_sUUID != pUUID) - { - comm_layer_inner_warning("CMiddleWare::CreateCrashReport(): UUID '"+pUUID+"' is not in database."); - return MW_IN_DB_ERROR; - } - - try - { - std::string analyzer; - std::string gUUID; - - dd.Open(row.m_sDebugDumpDir); - dd.LoadText(FILENAME_ANALYZER, analyzer); - dd.Close(); - - CreateReport(analyzer, row.m_sDebugDumpDir); - - gUUID = GetGlobalUUID(analyzer, row.m_sDebugDumpDir); - - RunAnalyzerActions(analyzer, row.m_sDebugDumpDir); - DebugDumpToCrashReport(row.m_sDebugDumpDir, pCrashReport); - - add_crash_data_to_crash_report(pCrashReport, CD_UUID, CD_TXT, CD_ISNOTEDITABLE, gUUID); - add_crash_data_to_crash_report(pCrashReport, CD_MWANALYZER, CD_SYS, CD_ISNOTEDITABLE, analyzer); - add_crash_data_to_crash_report(pCrashReport, CD_MWUID, CD_SYS, CD_ISNOTEDITABLE, pUID); - add_crash_data_to_crash_report(pCrashReport, CD_MWUUID, CD_SYS, CD_ISNOTEDITABLE, pUUID); - add_crash_data_to_crash_report(pCrashReport, CD_COMMENT, CD_TXT, CD_ISEDITABLE, ""); - add_crash_data_to_crash_report(pCrashReport, CD_REPRODUCE, CD_TXT, CD_ISEDITABLE, "1.\n2.\n3.\n"); - } - catch (CABRTException& e) - { - comm_layer_inner_warning("CMiddleWare::CreateCrashReport(): " + e.what()); - if (e.type() == EXCEP_DD_OPEN) - { - return MW_ERROR; - } - else if (e.type() == EXCEP_DD_LOAD) - { - return MW_FILE_ERROR; - } - return MW_CORRUPTED; - } - - return MW_OK; -} - -void CMiddleWare::RunAction(const std::string& pActionDir, - const std::string& pPluginName, - const std::string& pPluginArgs) -{ - try - { - CAction* action = m_pPluginManager->GetAction(pPluginName); - - action->Run(pActionDir, pPluginArgs); - } - catch (CABRTException& e) - { - comm_layer_inner_warning("CMiddleWare::RunAction(): " + e.what()); - comm_layer_inner_status("Execution of '"+pPluginName+"' was not successful: " + e.what()); - } - -} - -void CMiddleWare::RunActionsAndReporters(const std::string& pDebugDumpDir) -{ - vector_actions_and_reporters_t::iterator it_ar; - for (it_ar = m_vectorActionsAndReporters.begin(); it_ar != m_vectorActionsAndReporters.end(); it_ar++) - { - try - { - if (m_pPluginManager->GetPluginType((*it_ar).first) == REPORTER) - { - CReporter* reporter = m_pPluginManager->GetReporter((*it_ar).first); - - map_crash_report_t crashReport; - DebugDumpToCrashReport(pDebugDumpDir, crashReport); - reporter->Report(crashReport, (*it_ar).second); - } - else if (m_pPluginManager->GetPluginType((*it_ar).first) == ACTION) - { - CAction* action = m_pPluginManager->GetAction((*it_ar).first); - action->Run(pDebugDumpDir, (*it_ar).second); - } - } - catch (CABRTException& e) - { - comm_layer_inner_warning("CMiddleWare::RunActionsAndReporters(): " + e.what()); - comm_layer_inner_status("Activation of plugin '"+(*it_ar).first+"' was not successful: " + e.what()); - } - } -} - -void CMiddleWare::Report(const map_crash_report_t& pCrashReport) -{ - Report(pCrashReport, m_sPluginsConfDir); -} - -void CMiddleWare::Report(const map_crash_report_t& pCrashReport, - const std::string& pPluginsConfDir) -{ - if (pCrashReport.find(CD_MWANALYZER) == pCrashReport.end() || - pCrashReport.find(CD_MWUID) == pCrashReport.end() || - pCrashReport.find(CD_MWUUID) == pCrashReport.end()) - { - throw CABRTException(EXCEP_ERROR, "CMiddleWare::Report(): System data are missing in crash report."); - } - std::string analyzer = pCrashReport.find(CD_MWANALYZER)->second[CD_CONTENT]; - std::string UID = pCrashReport.find(CD_MWUID)->second[CD_CONTENT]; - std::string UUID = pCrashReport.find(CD_MWUUID)->second[CD_CONTENT]; - - if (m_mapAnalyzerActionsAndReporters.find(analyzer) != m_mapAnalyzerActionsAndReporters.end()) - { - vector_actions_and_reporters_t::iterator it_r; - for (it_r = m_mapAnalyzerActionsAndReporters[analyzer].begin(); - it_r != m_mapAnalyzerActionsAndReporters[analyzer].end(); - it_r++) - { - try - { - if (m_pPluginManager->GetPluginType((*it_r).first) == REPORTER) - { - CReporter* reporter = m_pPluginManager->GetReporter((*it_r).first); - - if (pPluginsConfDir == m_sPluginsConfDir) - { - reporter->Report(pCrashReport, (*it_r).second); - } - else - { - reporter->LoadSettings(pPluginsConfDir + "/" + (*it_r).first + "." + PLUGINS_CONF_EXTENSION); - reporter->Report(pCrashReport, (*it_r).second); - reporter->LoadSettings(m_sPluginsConfDir + "/" + (*it_r).first + "." + PLUGINS_CONF_EXTENSION); - } - } - } - catch (CABRTException& e) - { - comm_layer_inner_warning("CMiddleWare::Report(): " + e.what()); - comm_layer_inner_status("Reporting via '"+(*it_r).first+"' was not successful: " + e.what()); - } - } - } - - CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); - database->Connect(); - database->SetReported(UUID, UID); - database->DisConnect(); -} - -void CMiddleWare::DeleteDebugDumpDir(const std::string& pDebugDumpDir) -{ - CDebugDump dd; - dd.Open(pDebugDumpDir); - dd.Delete(); - dd.Close(); -} - -std::string CMiddleWare::DeleteCrashInfo(const std::string& pUUID, - const std::string& pUID) -{ - database_row_t row; - CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); - database->Connect(); - row = database->GetUUIDData(pUUID, pUID); - database->Delete(pUUID, pUID); - database->DisConnect(); - - return row.m_sDebugDumpDir; -} - - -bool CMiddleWare::IsDebugDumpSaved(const std::string& pUID, - const std::string& pDebugDumpDir) -{ - CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); - vector_database_rows_t rows; - database->Connect(); - rows = database->GetUIDData(pUID); - database->DisConnect(); - - int ii; - bool found = false; - for (ii = 0; ii < rows.size(); ii++) - { - if (rows[ii].m_sDebugDumpDir == pDebugDumpDir) - { - found = true; - break; - } - } - - return found; -} - -CMiddleWare::mw_result_t CMiddleWare::SavePackageDescriptionToDebugDump(const std::string& pExecutable, - const std::string& pDebugDumpDir) -{ - std::string package; - std::string packageName; - - if (pExecutable == "kernel") - { - packageName = package = "kernel"; - } - else - { - package = m_RPM.GetPackage(pExecutable); - packageName = package.substr(0, package.rfind("-", package.rfind("-") - 1)); - if (packageName == "" || - (m_setBlackList.find(packageName) != m_setBlackList.end())) - { - if (packageName == "") - { - comm_layer_inner_debug("Executable doesn't belong to any package"); - return MW_PACKAGE_ERROR; - } - comm_layer_inner_debug("Blacklisted package"); - return MW_BLACKLISTED; - } - if (m_bOpenGPGCheck) - { - if (!m_RPM.CheckFingerprint(packageName) || - !m_RPM.CheckHash(packageName, pExecutable)) - { - comm_layer_inner_debug("Can not find package"); - return MW_GPG_ERROR; - } - } - } - - std::string description = m_RPM.GetDescription(packageName); - - CDebugDump dd; - try - { - dd.Open(pDebugDumpDir); - dd.SaveText(FILENAME_PACKAGE, package); - dd.SaveText(FILENAME_DESCRIPTION, description); - dd.Close(); - } - catch (CABRTException& e) - { - comm_layer_inner_warning("CMiddleWare::SavePackageDescriptionToDebugDump(): " + e.what()); - if (e.type() == EXCEP_DD_SAVE) - { - dd.Close(); - return MW_FILE_ERROR; - } - return MW_ERROR; - } - - return MW_OK; -} - -void CMiddleWare::RunAnalyzerActions(const std::string& pAnalyzer, const std::string& pDebugDumpDir) -{ - if (m_mapAnalyzerActionsAndReporters.find(pAnalyzer) != m_mapAnalyzerActionsAndReporters.end()) - { - vector_actions_and_reporters_t::iterator it_a; - for (it_a = m_mapAnalyzerActionsAndReporters[pAnalyzer].begin(); - it_a != m_mapAnalyzerActionsAndReporters[pAnalyzer].end(); - it_a++) - { - try - { - if (m_pPluginManager->GetPluginType((*it_a).first) == ACTION) - { - CAction* action = m_pPluginManager->GetAction((*it_a).first); - - action->Run(pDebugDumpDir, (*it_a).second); - } - } - catch (CABRTException& e) - { - comm_layer_inner_warning("CMiddleWare::RunAnalyzerActions(): " + e.what()); - comm_layer_inner_status("Action performed by '"+(*it_a).first+"' was not successful: " + e.what()); - } - } - } -} - -CMiddleWare::mw_result_t CMiddleWare::SaveDebugDumpToDatabase(const std::string& pUUID, - const std::string& pUID, - const std::string& pTime, - const std::string& pDebugDumpDir, - map_crash_info_t& pCrashInfo) -{ - mw_result_t res; - CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); - database_row_t row; - database->Connect(); - database->Insert(pUUID, pUID, pDebugDumpDir, pTime); - row = database->GetUUIDData(pUUID, pUID); - database->DisConnect(); - res = GetCrashInfo(pUUID, pUID, pCrashInfo); - if (row.m_sReported == "1") - { - comm_layer_inner_debug("Crash is already reported"); - return MW_REPORTED; - } - if (row.m_sCount != "1") - { - comm_layer_inner_debug("Crash is in database already"); - return MW_OCCURED; - } - return res; -} - -CMiddleWare::mw_result_t CMiddleWare::SaveDebugDump(const std::string& pDebugDumpDir) -{ - map_crash_info_t info; - return SaveDebugDump(pDebugDumpDir, info); -} - -CMiddleWare::mw_result_t CMiddleWare::SaveDebugDump(const std::string& pDebugDumpDir, - map_crash_info_t& pCrashInfo) -{ - std::string lUUID; - std::string UID; - std::string time; - std::string analyzer; - std::string executable; - CDebugDump dd; - mw_result_t res; - - try - { - dd.Open(pDebugDumpDir); - dd.LoadText(FILENAME_TIME, time); - dd.LoadText(FILENAME_UID, UID); - dd.LoadText(FILENAME_ANALYZER, analyzer); - dd.LoadText(FILENAME_EXECUTABLE, executable); - dd.Close(); - } - catch (CABRTException& e) - { - comm_layer_inner_warning("CMiddleWare::SaveDebugDump(): " + e.what()); - if (e.type() == EXCEP_DD_SAVE) - { - dd.Close(); - return MW_FILE_ERROR; - } - return MW_ERROR; - } - - if (IsDebugDumpSaved(UID, pDebugDumpDir)) - { - return MW_IN_DB; - } - if ((res = SavePackageDescriptionToDebugDump(executable, pDebugDumpDir)) != MW_OK) - { - return res; - } - - lUUID = GetLocalUUID(analyzer, pDebugDumpDir); - - return SaveDebugDumpToDatabase(lUUID, UID, time, pDebugDumpDir, pCrashInfo); -} - -CMiddleWare::mw_result_t CMiddleWare::GetCrashInfo(const std::string& pUUID, - const std::string& pUID, - map_crash_info_t& pCrashInfo) -{ - pCrashInfo.clear(); - CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); - database_row_t row; - database->Connect(); - row = database->GetUUIDData(pUUID, pUID); - database->DisConnect(); - - CDebugDump dd; - std::string package; - std::string executable; - std::string description; - - try - { - dd.Open(row.m_sDebugDumpDir); - dd.LoadText(FILENAME_EXECUTABLE, executable); - dd.LoadText(FILENAME_PACKAGE, package); - dd.LoadText(FILENAME_DESCRIPTION, description); - dd.Close(); - } - catch (CABRTException& e) - { - comm_layer_inner_warning("CMiddleWare::GetCrashInfo(): " + e.what()); - if (e.type() == EXCEP_DD_LOAD) - { - dd.Close(); - return MW_FILE_ERROR; - } - return MW_ERROR; - } - add_crash_data_to_crash_info(pCrashInfo, CD_EXECUTABLE, executable); - add_crash_data_to_crash_info(pCrashInfo, CD_PACKAGE, package); - add_crash_data_to_crash_info(pCrashInfo, CD_DESCRIPTION, description); - add_crash_data_to_crash_info(pCrashInfo, CD_UUID, row.m_sUUID); - add_crash_data_to_crash_info(pCrashInfo, CD_UID, row.m_sUID); - add_crash_data_to_crash_info(pCrashInfo, CD_COUNT, row.m_sCount); - add_crash_data_to_crash_info(pCrashInfo, CD_TIME, row.m_sTime); - add_crash_data_to_crash_info(pCrashInfo, CD_REPORTED, row.m_sReported); - add_crash_data_to_crash_info(pCrashInfo, CD_MWDDD, row.m_sDebugDumpDir); - - return MW_OK; -} - -vector_pair_string_string_t CMiddleWare::GetUUIDsOfCrash(const std::string& pUID) -{ - CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); - vector_database_rows_t rows; - database->Connect(); - rows = database->GetUIDData(pUID); - database->DisConnect(); - - vector_pair_string_string_t UUIDsUIDs; - int ii; - for (ii = 0; ii < rows.size(); ii++) - { - UUIDsUIDs.push_back(make_pair(rows[ii].m_sUUID, rows[ii].m_sUID)); - } - - return UUIDsUIDs; -} - -vector_map_string_string_t CMiddleWare::GetPluginsInfo() -{ - return m_pPluginManager->GetPluginsInfo(); -} - -void CMiddleWare::SetOpenGPGCheck(bool pCheck) -{ - m_bOpenGPGCheck = pCheck; -} - -void CMiddleWare::SetDatabase(const std::string& pDatabase) -{ - m_sDatabase = pDatabase; -} - -void CMiddleWare::AddOpenGPGPublicKey(const std::string& pKey) -{ - m_RPM.LoadOpenGPGPublicKey(pKey); -} - -void CMiddleWare::AddBlackListedPackage(const std::string& pPackage) -{ - m_setBlackList.insert(pPackage); -} - -void CMiddleWare::AddAnalyzerActionOrReporter(const std::string& pAnalyzer, - const std::string& pAnalyzerOrReporter, - const std::string& pArgs) -{ - m_mapAnalyzerActionsAndReporters[pAnalyzer].push_back(make_pair(pAnalyzerOrReporter, pArgs)); -} - -void CMiddleWare::AddActionOrReporter(const std::string& pActionOrReporter, - const std::string& pArgs) -{ - m_vectorActionsAndReporters.push_back(make_pair(pActionOrReporter, pArgs)); -} diff --git a/lib/MiddleWare/MiddleWare.h b/lib/MiddleWare/MiddleWare.h deleted file mode 100644 index 8b7376d..0000000 --- a/lib/MiddleWare/MiddleWare.h +++ /dev/null @@ -1,349 +0,0 @@ -/* - MiddleWare.h - header file for MiddleWare library. It wraps plugins and - take case of them. - - Copyright (C) 2009 Zdenek Prikryl (zprikryl@redhat.com) - Copyright (C) 2009 RedHat inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - - -#ifndef MIDDLEWARE_H_ -#define MIDDLEWARE_H_ - -#include "PluginManager.h" -#include "CrashTypes.h" -#include "MiddleWareTypes.h" -#include "RPM.h" - -/** - * A very important class :-). It manages part of user demands like creating - * reports, or reporting stuff somewhere etc. - */ -class CMiddleWare -{ - public: - /** - * An emun contains all return codes. - */ - typedef enum { MW_ERROR, /**< Common error.*/ - MW_OK, /**< No error.*/ - MW_BLACKLISTED, /**< Package is blacklisted.*/ - MW_CORRUPTED, /**< Debugdump directory is corrupted.*/ - MW_PACKAGE_ERROR, /**< Cannot determine package name.*/ - MW_GPG_ERROR, /**< Package is not signed properly.*/ - MW_REPORTED, /**< Crash is already reported.*/ - MW_OCCURED, /**< Crash occurred in the past, but it is not reported yet.*/ - MW_IN_DB, /**< Debugdump directory is already saved in a database.*/ - MW_IN_DB_ERROR, /**< Error while working with a database.*/ - MW_FILE_ERROR /**< Error when trying open debugdump directory or - when trying open file in debug dump directory..*/ - } mw_result_t; - - private: - typedef set_strings_t set_blacklist_t; - typedef set_strings_t set_enabled_plugins_t; - typedef std::vector<pair_string_string_t> vector_pairt_strings_t; - typedef vector_pairt_strings_t vector_actions_and_reporters_t; - typedef std::map<std::string, vector_actions_and_reporters_t> map_analyzer_actions_and_reporters_t; - - /** - * An instance of CPluginManager. When MiddleWare wants to do something - * with plugins, it calls the plugin manager. - * @see PluginManager.h - */ - CPluginManager* m_pPluginManager; - /** - * An instance of CRPM used for package checking. - * @see RPM.h - */ - CRPM m_RPM; - /** - * A set of blacklisted packages. - */ - set_blacklist_t m_setBlackList; - /** - * A name of database plugin, which is used for metadata. - */ - std::string m_sDatabase; - /** - * A map, which associates particular analyzer to one or more - * action or reporter plugins. These are activated when a crash, which - * is maintained by particular analyzer, occurs. - */ - map_analyzer_actions_and_reporters_t m_mapAnalyzerActionsAndReporters; - /** - * A vector of one or more action or reporter plugins. These are - * activated when any crash occurs. - */ - vector_actions_and_reporters_t m_vectorActionsAndReporters; - /** - * Plugins configuration directory (e.g. /etc/abrt/plugins, ...). - */ - std::string m_sPluginsConfDir; - /** - * Check GPG finger print? - */ - bool m_bOpenGPGCheck; - /** - * A method, which gets a local UUID from particular analyzer plugin. - * @param pAnalyzer A name of an analyzer plugin. - * @param pDebugDumpDir A debugdump dir containing all necessary data. - * @return A local UUID. - */ - std::string GetLocalUUID(const std::string& pAnalyzer, - const std::string& pDebugDumpDir); - /** - * A method, which gets a global UUID from particular analyzer plugin. - * @param pAnalyzer A name of an analyzer plugin. - * @param pDebugDumpDir A debugdump dir containing all necessary data. - * @return A global UUID. - */ - std::string GetGlobalUUID(const std::string& pAnalyzer, - const std::string& pDebugDumpDir); - /** - * A method, which takes care of getting all additional data needed - * for computing UUIDs and creating a report for particular analyzer - * plugin. This report could be send somewhere afterwards. - * @param pAnalyzer A name of an analyzer plugin. - * @param pDebugDumpPath A debugdump dir containing all necessary data. - */ - void CreateReport(const std::string& pAnalyzer, - const std::string& pDebugDumpDir); - /** - * A method, which executes all action plugins, which are associated to - * particular analyzer plugin. - * @param pAnalyzer A name of an analyzer plugin. - * @param pDebugDumpPath A debugdump dir containing all necessary data. - */ - void RunAnalyzerActions(const std::string& pAnalyzer, - const std::string& pDebugDumpDir); - /** - * A method, which transforms a debugdump direcortry to inner crash - * report form. This form is used for later reporting. - * @param pDebugDumpDir A debugdump dir containing all necessary data. - * @param pCrashReport A created crash report. - */ - void DebugDumpToCrashReport(const std::string& pDebugDumpDir, - map_crash_report_t& pCrashReport); - /** - * A method, which checks is particular debugdump directory is saved - * in database. This check is done together with an UID of an user. - * @param pUID an UID of an user. - * @param pDebugDumpDir A debugdump dir containing all necessary data. - * @return It returns true if debugdump dir is already saved, otherwise - * it returns false. - */ - bool IsDebugDumpSaved(const std::string& pUID, - const std::string& pDebugDumpDir); - /** - * A method, which gets a package name from executable name and saves - * package description to particular debugdump directory of a crash. - * @param pExecutable A name of crashed application. - * @param pDebugDumpDir A debugdump dir containing all necessary data. - * @return It return results of operation. See mw_result_t. - */ - mw_result_t SavePackageDescriptionToDebugDump(const std::string& pExecutable, - const std::string& pDebugDumpDir); - /** - * A method, which save a debugdump into database. If a saving is - * successful, then a crash info is filled. Otherwise the crash info is - * not changed. - * @param pUUID A local UUID of a crash. - * @param pUID An UID of an user. - * @param pTime Time when a crash occurs. - * @param pDebugDumpPath A debugdump path. - * @param pCrashInfo A filled crash info. - * @return It return results of operation. See mw_result_t. - */ - mw_result_t SaveDebugDumpToDatabase(const std::string& pUUID, - const std::string& pUID, - const std::string& pTime, - const std::string& pDebugDumpDir, - map_crash_info_t& pCrashInfo); - - public: - /** - * A constructor. - * @param pPluginsConfDir A plugins configuration directory. - * @param pPluginsLibDir A plugins library directory. - */ - CMiddleWare(const std::string& pPluginsConfDir, - const std::string& pPluginsLibDir); - /** - * A destructor. - */ - ~CMiddleWare(); - /** - * A method, which registers particular plugin. - * @param pName A plugin name. - */ - void RegisterPlugin(const std::string& pName); - /** - * A method, which unregister particular plugin. - * @param pName A plugin name. - */ - void UnRegisterPlugin(const std::string& pName); - /** - * A method, which sets up a plugin. - * @param pName A plugin name. - * @param pSettings A plugin's settings. - */ - void SetPluginSettings(const std::string& pName, - const map_plugin_settings_t& pSettings); - /** - * A method, which returns plugin's settings. - * @param pName A plugin name. - * @return Plugin's settings - */ - map_plugin_settings_t GetPluginSettings(const std::string& pName); - /** - * A method, which gets all plugins info (event those plugins which are - * disabled). It can be send via DBus to GUI and displayed to an user. - * Then a user can fill all needed informations like URLs etc. - * @return A vector of maps <key, vaule> - */ - vector_map_string_string_t GetPluginsInfo(); - /** - * A method, which takes care of getting all additional data needed - * for computing UUIDs and creating a report for particular analyzer - * plugin. This report could be send somewhere afterwards. If a creation - * is successful, then a crash report is filled. - * @param pAnalyzer A name of an analyzer plugin. - * @param pDebugDumpPath A debugdump dir containing all necessary data. - * @param pCrashReport A filled crash report. - * @return It return results of operation. See mw_result_t. - */ - mw_result_t CreateCrashReport(const std::string& pUUID, - const std::string& pUID, - map_crash_report_t& pCrashReport); - /** - * A method, which activate particular action plugin. - * @param pActionDir A directory, which is passed as working to a action plugin. - * @param pPluginName An action plugin name. - * @param pPluginArgs Action plugin's arguments. - */ - void RunAction(const std::string& pActionDir, - const std::string& pPluginName, - const std::string& pPluginArgs); - /** - * A method, which activate all action and reporter plugins when any - * crash occurs. - * @param pDebugDumpDir A debugdump dir containing all necessary data. - */ - void RunActionsAndReporters(const std::string& pDebugDumpDir); - /** - * A method, which reports a crash report to particular receiver. - * @param pCrashReport A crash report. - */ - void Report(const map_crash_report_t& pCrashReport); - /** - * A method, which reports a crash report to particular receiver. It - * takes a path where settings of reporter are stored (e.g. $HOME/.abrt, - * ...). - * @param pCrashReport A crash report. - * @param pSettingsPath A path to setting files. - */ - void Report(const map_crash_report_t& pCrashReport, - const std::string& pSettingsPath); - /** - * A method, which deletes particular debugdump directory. - * @param pDebugDumpDir A debugdump directory. - */ - void DeleteDebugDumpDir(const std::string& pDebugDumpDir); - /** - * A method, which delete a row from database. If a deleting is - * successfull, it returns a debugdump directort, which is not - * deleted. Otherwise, it returns empty string. - * @param pUUID A local UUID of a crash. - * @param pUID An UID of an user. - * @return A debugdump directory. - */ - std::string DeleteCrashInfo(const std::string& pUUID, - const std::string& pUID); - /** - * A method, whis saves debugdump into database. - * @param pDebugDumpDir A debugdump directory. - * @return It return results of operation. See mw_result_t. - */ - mw_result_t SaveDebugDump(const std::string& pDebugDumpDir); - /** - * A method, whis saves debugdump into database. If saving is sucessful - * it fills crash info. - * @param pDebugDumpDir A debugdump directory. - * @param pCrashInfo A crash info. - * @return It return results of operation. See mw_result_t. - */ - mw_result_t SaveDebugDump(const std::string& pDebugDumpDir, - map_crash_info_t& pCrashInfo); - /** - * A method, which gets one crash info. If a getting is successful, - * then a crash info is filled. - * @param pUUID A local UUID of a crash. - * @param pUID An UID of an user. - * @param pCrashInfo A crash info. - * @return It return results of operation. See mw_result_t. - */ - mw_result_t GetCrashInfo(const std::string& pUUID, - const std::string& pUID, - map_crash_info_t& pCrashInfo); - /** - * A method, which gets all local UUIDs and UIDs of crashes. These crashes - * occurred when a particular user was logged in. - * @param pUID an UID of an user. - * @return A vector of pairs (local UUID, UID). - */ - vector_pair_string_string_t GetUUIDsOfCrash(const std::string& pUID); - /** - * A method, which set a GPG finger print check. - * @param pCheck Is it enabled? - */ - void SetOpenGPGCheck(bool pCheck); - /** - * A method, which sets a name of database. - * @param pDatabase A database name. - */ - void SetDatabase(const std::string& pDatabase); - /** - * A method, which adds one path to a GPG public key into MW's set. - * @param pKey A path to a GPG public key. - */ - void AddOpenGPGPublicKey(const std::string& pKey); - /** - * A method, which adds one blacklisted package. - */ - void AddBlackListedPackage(const std::string& pPackage); - /** - * A method, which adds one association among alanyzer plugin and its - * action and reporter plugins. - * @param pAnalyzer A name of an analyzer plugin. - * @param pActionOrReporter A name of an action or reporter plugin. - * @param pArgs An arguments for action or reporter plugin. - */ - void AddAnalyzerActionOrReporter(const std::string& pAnalyzer, - const std::string& pActionOrReporter, - const std::string& pArgs); - /** - * A method, which adds action and reporter plugins, which are activated - * when any crash occurs. - * @param pActionOrReporter A name of an action or reporter plugin. - * @param pArgs An arguments for action or reporter plugin. - */ - void AddActionOrReporter(const std::string& pActionOrReporter, - const std::string& pArgs); -}; - -#endif /*MIDDLEWARE_H_*/ diff --git a/src/Daemon/Makefile.am b/src/Daemon/Makefile.am index 77c1b2a..194d013 100644 --- a/src/Daemon/Makefile.am +++ b/src/Daemon/Makefile.am @@ -1,6 +1,7 @@ sbin_PROGRAMS = abrt abrt_SOURCES = \ + MiddleWare.cpp MiddleWare.h \ CrashWatcher.cpp CrashWatcher.h \ Daemon.cpp \ DBusCommon.h \ |