diff options
-rw-r--r-- | lib/MiddleWare/Plugin.cpp | 62 | ||||
-rw-r--r-- | lib/MiddleWare/Plugin.h | 9 | ||||
-rw-r--r-- | lib/Plugins/CCpp.cpp | 8 | ||||
-rw-r--r-- | lib/Plugins/CCpp.h | 1 | ||||
-rw-r--r-- | lib/Plugins/FileTransfer.cpp | 8 | ||||
-rw-r--r-- | lib/Plugins/FileTransfer.h | 1 | ||||
-rw-r--r-- | lib/Plugins/KerneloopsReporter.cpp | 8 | ||||
-rw-r--r-- | lib/Plugins/KerneloopsReporter.h | 1 | ||||
-rw-r--r-- | lib/Plugins/KerneloopsScanner.cpp | 8 | ||||
-rw-r--r-- | lib/Plugins/KerneloopsScanner.h | 1 | ||||
-rw-r--r-- | lib/Plugins/Logger.cpp | 8 | ||||
-rw-r--r-- | lib/Plugins/Logger.h | 1 | ||||
-rw-r--r-- | lib/Plugins/Mailx.cpp | 8 | ||||
-rw-r--r-- | lib/Plugins/Mailx.h | 1 | ||||
-rw-r--r-- | lib/Plugins/SQLite3.cpp | 8 | ||||
-rw-r--r-- | lib/Plugins/SQLite3.h | 1 | ||||
-rw-r--r-- | src/Daemon/CrashWatcher.cpp | 15 | ||||
-rw-r--r-- | src/Daemon/CrashWatcher.h | 2 | ||||
-rw-r--r-- | src/Daemon/MiddleWare.cpp | 40 | ||||
-rw-r--r-- | src/Daemon/MiddleWare.h | 28 | ||||
-rw-r--r-- | src/Daemon/PluginManager.cpp | 122 | ||||
-rw-r--r-- | src/Daemon/PluginManager.h | 30 |
22 files changed, 187 insertions, 184 deletions
diff --git a/lib/MiddleWare/Plugin.cpp b/lib/MiddleWare/Plugin.cpp index cf2dff61..161ead8a 100644 --- a/lib/MiddleWare/Plugin.cpp +++ b/lib/MiddleWare/Plugin.cpp @@ -18,72 +18,10 @@ */ #include "Plugin.h" -#include <fstream> /* class CPlugin's virtuals */ CPlugin::~CPlugin() {} void CPlugin::Init() {} void CPlugin::DeInit() {} -void CPlugin::LoadSettings(const std::string& pPath) {} void CPlugin::SetSettings(const map_plugin_settings_t& pSettings) {} map_plugin_settings_t CPlugin::GetSettings() {return map_plugin_settings_t();} - -void plugin_load_settings(const std::string& path, map_plugin_settings_t& settings) -{ - std::ifstream fIn; - fIn.open(path.c_str()); - if (fIn.is_open()) - { - std::string line; - while (!fIn.eof()) - { - getline(fIn, line); - - int ii; - bool is_value = false; - bool valid = false; - bool in_quote = false; - std::string key = ""; - std::string value = ""; - for (ii = 0; ii < line.length(); ii++) - { - if (line[ii] == '\"') - { - in_quote = in_quote == true ? false : true; - } - if (isspace(line[ii]) && !in_quote) - { - continue; - } - if (line[ii] == '#' && !in_quote) - { - break; - } - else if (line[ii] == '=' && !in_quote) - { - is_value = true; - } - else if (line[ii] == '=' && is_value && !in_quote) - { - key = ""; - value = ""; - break; - } - else if (!is_value) - { - key += line[ii]; - } - else - { - valid = true; - value += line[ii]; - } - } - if (valid && !in_quote) - { - settings[key] = value; - } - } - fIn.close(); - } -} diff --git a/lib/MiddleWare/Plugin.h b/lib/MiddleWare/Plugin.h index d615fc8d..a0b64aea 100644 --- a/lib/MiddleWare/Plugin.h +++ b/lib/MiddleWare/Plugin.h @@ -26,7 +26,7 @@ #include <string> #include <map> -#define PLUGINS_MAGIC_NUMBER 4 +#define PLUGINS_MAGIC_NUMBER 5 #define PLUGINS_CONF_EXTENSION "conf" #define PLUGINS_LIB_EXTENSION "so" @@ -54,11 +54,6 @@ class CPlugin */ virtual void DeInit(); /** - * A method, which loads a plugin settings from a file. It is not mandatory method. - * @param pPath A path to plugin configuration file. - */ - virtual void LoadSettings(const std::string& pPath); - /** * A method, which takes a settings and apply them. It is not a mandatory method. * @param pSettings Plugin's settings */ @@ -112,6 +107,4 @@ typedef struct SPluginInfo PLUGINS_MAGIC_NUMBER,\ }; -void plugin_load_settings(const std::string& path, map_plugin_settings_t& settings); - #endif /* PLUGIN_H_ */ diff --git a/lib/Plugins/CCpp.cpp b/lib/Plugins/CCpp.cpp index 657e372b..80727dd3 100644 --- a/lib/Plugins/CCpp.cpp +++ b/lib/Plugins/CCpp.cpp @@ -552,14 +552,6 @@ void CAnalyzerCCpp::DeInit() } } -void CAnalyzerCCpp::LoadSettings(const std::string& pPath) -{ - map_plugin_settings_t settings; - plugin_load_settings(pPath, settings); - - SetSettings(settings); -} - void CAnalyzerCCpp::SetSettings(const map_plugin_settings_t& pSettings) { if (pSettings.find("MemoryMap") != pSettings.end()) diff --git a/lib/Plugins/CCpp.h b/lib/Plugins/CCpp.h index b14a90fa..b428a8ad 100644 --- a/lib/Plugins/CCpp.h +++ b/lib/Plugins/CCpp.h @@ -40,7 +40,6 @@ class CAnalyzerCCpp : public CAnalyzer virtual void CreateReport(const std::string& pDebugDumpDir); virtual void Init(); virtual void DeInit(); - virtual void LoadSettings(const std::string& pPath); virtual void SetSettings(const map_plugin_settings_t& pSettings); virtual map_plugin_settings_t GetSettings(); }; diff --git a/lib/Plugins/FileTransfer.cpp b/lib/Plugins/FileTransfer.cpp index 1aa724d6..981e574d 100644 --- a/lib/Plugins/FileTransfer.cpp +++ b/lib/Plugins/FileTransfer.cpp @@ -222,14 +222,6 @@ void CFileTransfer::Run(const std::string& pActiveDir, const std::string& pArgs) } } -void CFileTransfer::LoadSettings(const std::string& pPath) -{ - map_plugin_settings_t settings; - plugin_load_settings(pPath, settings); - - SetSettings(settings); -} - void CFileTransfer::SetSettings(const map_plugin_settings_t& pSettings) { if (pSettings.find("URL") != pSettings.end()) diff --git a/lib/Plugins/FileTransfer.h b/lib/Plugins/FileTransfer.h index 3f8be474..943c52f4 100644 --- a/lib/Plugins/FileTransfer.h +++ b/lib/Plugins/FileTransfer.h @@ -49,7 +49,6 @@ class CFileTransfer : public CAction m_nRetryDelay(20) {} - virtual void LoadSettings(const std::string& pPath); virtual void SetSettings(const map_plugin_settings_t& pSettings); virtual map_plugin_settings_t GetSettings(); virtual void Run(const std::string& pActiveDir, diff --git a/lib/Plugins/KerneloopsReporter.cpp b/lib/Plugins/KerneloopsReporter.cpp index d0aedb7f..1860fd8b 100644 --- a/lib/Plugins/KerneloopsReporter.cpp +++ b/lib/Plugins/KerneloopsReporter.cpp @@ -113,14 +113,6 @@ void CKerneloopsReporter::Report(const map_crash_report_t& pCrashReport, const s comm_layer_inner_status("Report has not been sent..."); } -void CKerneloopsReporter::LoadSettings(const std::string& pPath) -{ - map_plugin_settings_t settings; - plugin_load_settings(pPath, settings); - - SetSettings(settings); -} - void CKerneloopsReporter::SetSettings(const map_plugin_settings_t& pSettings) { if (pSettings.find("SubmitURL") != pSettings.end()) diff --git a/lib/Plugins/KerneloopsReporter.h b/lib/Plugins/KerneloopsReporter.h index 7dcd0e0c..c8295a7a 100644 --- a/lib/Plugins/KerneloopsReporter.h +++ b/lib/Plugins/KerneloopsReporter.h @@ -40,7 +40,6 @@ class CKerneloopsReporter : public CReporter public: CKerneloopsReporter(); - virtual void LoadSettings(const std::string& pPath); virtual void SetSettings(const map_plugin_settings_t& pSettings); virtual map_plugin_settings_t GetSettings(); virtual void Report(const map_crash_report_t& pCrashReport, diff --git a/lib/Plugins/KerneloopsScanner.cpp b/lib/Plugins/KerneloopsScanner.cpp index bab9e65b..32289f3b 100644 --- a/lib/Plugins/KerneloopsScanner.cpp +++ b/lib/Plugins/KerneloopsScanner.cpp @@ -169,14 +169,6 @@ int CKerneloopsScanner::ScanSysLogFile(const char *filename) return cnt_FoundOopses; } -void CKerneloopsScanner::LoadSettings(const std::string& pPath) -{ - map_plugin_settings_t settings; - plugin_load_settings(pPath, settings); - - SetSettings(settings); -} - void CKerneloopsScanner::SetSettings(const map_plugin_settings_t& pSettings) { if (pSettings.find("SysLogFile") != pSettings.end()) diff --git a/lib/Plugins/KerneloopsScanner.h b/lib/Plugins/KerneloopsScanner.h index 5ec5fbea..ca19a3a4 100644 --- a/lib/Plugins/KerneloopsScanner.h +++ b/lib/Plugins/KerneloopsScanner.h @@ -51,7 +51,6 @@ class CKerneloopsScanner : public CAction {} virtual void Run(const std::string& pActionDir, const std::string& pArgs); - virtual void LoadSettings(const std::string& pPath); virtual void SetSettings(const map_plugin_settings_t& pSettings); virtual map_plugin_settings_t GetSettings(); }; diff --git a/lib/Plugins/Logger.cpp b/lib/Plugins/Logger.cpp index 1dd5a28d..cb702276 100644 --- a/lib/Plugins/Logger.cpp +++ b/lib/Plugins/Logger.cpp @@ -30,14 +30,6 @@ CLogger::CLogger() : m_bAppendLogs(true) {} -void CLogger::LoadSettings(const std::string& pPath) -{ - map_plugin_settings_t settings; - plugin_load_settings(pPath, settings); - - SetSettings(settings); -} - void CLogger::SetSettings(const map_plugin_settings_t& pSettings) { if (pSettings.find("LogPath") != pSettings.end()) diff --git a/lib/Plugins/Logger.h b/lib/Plugins/Logger.h index 0c31dca9..c838b3cb 100644 --- a/lib/Plugins/Logger.h +++ b/lib/Plugins/Logger.h @@ -34,7 +34,6 @@ class CLogger : public CReporter public: CLogger(); - virtual void LoadSettings(const std::string& pPath); virtual void SetSettings(const map_plugin_settings_t& pSettings); virtual map_plugin_settings_t GetSettings(); virtual void Report(const map_crash_report_t& pCrashReport, diff --git a/lib/Plugins/Mailx.cpp b/lib/Plugins/Mailx.cpp index d017d53f..5ee6b65d 100644 --- a/lib/Plugins/Mailx.cpp +++ b/lib/Plugins/Mailx.cpp @@ -137,14 +137,6 @@ void CMailx::Report(const map_crash_report_t& pCrashReport, const std::string& p } } -void CMailx::LoadSettings(const std::string& pPath) -{ - map_plugin_settings_t settings; - plugin_load_settings(pPath, settings); - - SetSettings(settings); -} - void CMailx::SetSettings(const map_plugin_settings_t& pSettings) { if (pSettings.find("Subject") != pSettings.end()) diff --git a/lib/Plugins/Mailx.h b/lib/Plugins/Mailx.h index 3cd88db4..b5d78364 100644 --- a/lib/Plugins/Mailx.h +++ b/lib/Plugins/Mailx.h @@ -42,7 +42,6 @@ class CMailx : public CReporter public: CMailx(); - virtual void LoadSettings(const std::string& pPath); virtual void SetSettings(const map_plugin_settings_t& pSettings); virtual map_plugin_settings_t GetSettings(); virtual void Report(const map_crash_report_t& pCrashReport, diff --git a/lib/Plugins/SQLite3.cpp b/lib/Plugins/SQLite3.cpp index ecf848e7..7720c409 100644 --- a/lib/Plugins/SQLite3.cpp +++ b/lib/Plugins/SQLite3.cpp @@ -267,14 +267,6 @@ const database_row_t CSQLite3::GetUUIDData(const std::string& pUUID, const std:: return table[0]; } -void CSQLite3::LoadSettings(const std::string& pPath) -{ - map_plugin_settings_t settings; - plugin_load_settings(pPath, settings); - - SetSettings(settings); -} - void CSQLite3::SetSettings(const map_plugin_settings_t& pSettings) { if (pSettings.find("DBPath") != pSettings.end()) diff --git a/lib/Plugins/SQLite3.h b/lib/Plugins/SQLite3.h index 99c3a8f8..987512e7 100644 --- a/lib/Plugins/SQLite3.h +++ b/lib/Plugins/SQLite3.h @@ -57,7 +57,6 @@ class CSQLite3 : public CDatabase virtual const vector_database_rows_t GetUIDData(const std::string& pUID); virtual const database_row_t GetUUIDData(const std::string& pUUID, const std::string& pUID); - virtual void LoadSettings(const std::string& pPath); virtual void SetSettings(const map_plugin_settings_t& pSettings); virtual map_plugin_settings_t GetSettings(); }; diff --git a/src/Daemon/CrashWatcher.cpp b/src/Daemon/CrashWatcher.cpp index 0b98454e..4c0ba64e 100644 --- a/src/Daemon/CrashWatcher.cpp +++ b/src/Daemon/CrashWatcher.cpp @@ -820,16 +820,7 @@ bool CCrashWatcher::Report(map_crash_report_t pReport, const std::string& pUID) //} try { - struct passwd* pw = getpwuid(atoi(pUID.c_str())); - std::string home = pw ? pw->pw_dir : ""; - if (home != "") - { - m_pMW->Report(pReport, home + "/.abrt/"); - } - else - { - m_pMW->Report(pReport); - } + m_pMW->Report(pReport, pUID); } catch (CABRTException& e) { @@ -893,11 +884,11 @@ vector_map_string_string_t CCrashWatcher::GetPluginsInfo() return vector_map_string_string_t(); } -map_plugin_settings_t CCrashWatcher::GetPluginSettings(const std::string& pName) +map_plugin_settings_t CCrashWatcher::GetPluginSettings(const std::string& pName, const std::string& pUID) { try { - return m_pMW->GetPluginSettings(pName); + return m_pMW->GetPluginSettings(pName, pUID); } catch(CABRTException &e) { diff --git a/src/Daemon/CrashWatcher.h b/src/Daemon/CrashWatcher.h index 689d2108..bc8c6f64 100644 --- a/src/Daemon/CrashWatcher.h +++ b/src/Daemon/CrashWatcher.h @@ -132,7 +132,7 @@ class CCrashWatcher virtual map_crash_report_t GetJobResult(uint64_t pJobID, const std::string& pSender); /* plugins related */ virtual vector_map_string_string_t GetPluginsInfo(); - virtual map_plugin_settings_t GetPluginSettings(const std::string& pName); + virtual map_plugin_settings_t GetPluginSettings(const std::string& pName, const std::string& pUID); void RegisterPlugin(const std::string& pName); void UnRegisterPlugin(const std::string& pName); diff --git a/src/Daemon/MiddleWare.cpp b/src/Daemon/MiddleWare.cpp index 6ebeffda..80380555 100644 --- a/src/Daemon/MiddleWare.cpp +++ b/src/Daemon/MiddleWare.cpp @@ -110,14 +110,16 @@ void CMiddleWare::UnRegisterPlugin(const std::string& pName) } void CMiddleWare::SetPluginSettings(const std::string& pName, + const std::string& pUID, const map_plugin_settings_t& pSettings) { - m_pPluginManager->SetPluginSettings(pName, pSettings); + m_pPluginManager->SetPluginSettings(pName, pUID, pSettings); } -map_plugin_settings_t CMiddleWare::GetPluginSettings(const std::string& pName) +map_plugin_settings_t CMiddleWare::GetPluginSettings(const std::string& pName, + const std::string& pUID) { - return m_pPluginManager->GetPluginSettings(pName); + return m_pPluginManager->GetPluginSettings(pName, pUID); } std::string CMiddleWare::GetLocalUUID(const std::string& pAnalyzer, @@ -245,13 +247,8 @@ void CMiddleWare::RunActionsAndReporters(const std::string& pDebugDumpDir) } } -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) + const std::string& pUID) { if (pCrashReport.find(CD_MWANALYZER) == pCrashReport.end() || pCrashReport.find(CD_MWUID) == pCrashReport.end() || @@ -275,16 +272,29 @@ void CMiddleWare::Report(const map_crash_report_t& pCrashReport, if (m_pPluginManager->GetPluginType((*it_r).first) == REPORTER) { CReporter* reporter = m_pPluginManager->GetReporter((*it_r).first); + std::string home = ""; + map_plugin_settings_t oldSettings; + map_plugin_settings_t newSettings; - if (pPluginsConfDir == m_sPluginsConfDir) + if (pUID != "") { - reporter->Report(pCrashReport, (*it_r).second); + home = get_home_dir(atoi(pUID.c_str())); + if (home != "") + { + oldSettings = reporter->GetSettings(); + + if (m_pPluginManager->LoadPluginSettings(home + "/.abrt/" + (*it_r).first + "." + PLUGINS_CONF_EXTENSION, newSettings)) + { + reporter->SetSettings(newSettings); + } + } } - else + + reporter->Report(pCrashReport, (*it_r).second); + + if (home != "") { - 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); + reporter->SetSettings(oldSettings); } } } diff --git a/src/Daemon/MiddleWare.h b/src/Daemon/MiddleWare.h index c9fc73a9..bb845435 100644 --- a/src/Daemon/MiddleWare.h +++ b/src/Daemon/MiddleWare.h @@ -199,23 +199,28 @@ class CMiddleWare */ void UnRegisterPlugin(const std::string& pName); /** - * A method, which sets up a plugin. + * A method, which sets up a plugin. The settings are also saved in home + * directory of an user. * @param pName A plugin name. + * @param pUID An uid of user. * @param pSettings A plugin's settings. */ void SetPluginSettings(const std::string& pName, + const std::string& pUID, const map_plugin_settings_t& pSettings); /** - * A method, which returns plugin's settings. + * A method, which returns plugin's settings according to user. * @param pName A plugin name. - * @return Plugin's settings + * @param pUID An uid of user. + * @return Plugin's settings accorting to user. */ - map_plugin_settings_t GetPluginSettings(const std::string& pName); + map_plugin_settings_t GetPluginSettings(const std::string& pName, + const std::string& pUID); /** * 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> + * @return A vector of maps <key, vaule>. */ vector_map_string_string_t GetPluginsInfo(); /** @@ -247,19 +252,16 @@ class CMiddleWare */ 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, + * takes an user uid, tries to find user config file and load it. If it + * fails, then default config is used. If pUID is emply string, default + * config is used. * ...). * @param pCrashReport A crash report. - * @param pSettingsPath A path to setting files. + * @param pUID An user uid */ void Report(const map_crash_report_t& pCrashReport, - const std::string& pSettingsPath); + const std::string& pUID); /** * A method, which deletes particular debugdump directory. * @param pDebugDumpDir A debugdump directory. diff --git a/src/Daemon/PluginManager.cpp b/src/Daemon/PluginManager.cpp index b0ba0dba..06db64a7 100644 --- a/src/Daemon/PluginManager.cpp +++ b/src/Daemon/PluginManager.cpp @@ -26,6 +26,9 @@ #include <dirent.h> #include <stdio.h> #include <sys/types.h> +#include <stdlib.h> +#include "abrtlib.h" +#include <fstream> /** * Text representation of plugin types. @@ -130,18 +133,20 @@ void CPluginManager::RegisterPlugin(const std::string& pName) { if (m_mapPlugins.find(pName) == m_mapPlugins.end()) { - std::string path = m_sPluginsConfDir + "/" + pName + "." + PLUGINS_CONF_EXTENSION; CPlugin* plugin = m_mapABRTPlugins[pName]->PluginNew(); + map_plugin_settings_t pluginSettings; + + LoadPluginSettings(m_sPluginsConfDir + "/" + pName + "." + PLUGINS_CONF_EXTENSION, pluginSettings); try { plugin->Init(); - plugin->LoadSettings(path); + plugin->SetSettings(pluginSettings); } - catch (std::string sError) + catch (CABRTException& e) { comm_layer_inner_warning("Can not initialize plugin " + pName + "(" + std::string(plugin_type_str_t[m_mapABRTPlugins[pName]->GetType()]) - + ")"); + + "): " + e.what()); UnLoadPlugin(pName); return; } @@ -262,6 +267,7 @@ vector_map_string_string_t CPluginManager::GetPluginsInfo() } void CPluginManager::SetPluginSettings(const std::string& pName, + const std::string& pUID, const map_plugin_settings_t& pSettings) { if (m_mapABRTPlugins.find(pName) != m_mapABRTPlugins.end()) @@ -269,19 +275,123 @@ void CPluginManager::SetPluginSettings(const std::string& pName, if (m_mapPlugins.find(pName) != m_mapPlugins.end()) { m_mapPlugins[pName]->SetSettings(pSettings); + + if (m_mapABRTPlugins[pName]->GetType() == REPORTER) + { + std::string home = get_home_dir(atoi(pUID.c_str())); + if (home != "") + { + SavePluginSettings(home + "/.abrt/" + pName + "." + PLUGINS_CONF_EXTENSION, pSettings); + } + } } } } -map_plugin_settings_t CPluginManager::GetPluginSettings(const std::string& pName) +map_plugin_settings_t CPluginManager::GetPluginSettings(const std::string& pName, + const std::string& pUID) { map_plugin_settings_t ret; if (m_mapABRTPlugins.find(pName) != m_mapABRTPlugins.end()) { if (m_mapPlugins.find(pName) != m_mapPlugins.end()) { - ret = m_mapPlugins[pName]->GetSettings(); + if (m_mapABRTPlugins[pName]->GetType() == REPORTER) + { + std::string home = get_home_dir(atoi(pUID.c_str())); + if (home != "") + { + comm_layer_inner_debug("home: " + home); + if (LoadPluginSettings(home + "/.abrt/" + pName + "." + PLUGINS_CONF_EXTENSION, ret)) + { + comm_layer_inner_debug("success"); + return ret; + } + } + } + return m_mapPlugins[pName]->GetSettings(); } } return ret; } + +bool CPluginManager::LoadPluginSettings(const std::string& pPath, map_plugin_settings_t& pSettings) +{ + std::ifstream fIn; + fIn.open(pPath.c_str()); + if (fIn.is_open()) + { + std::string line; + while (!fIn.eof()) + { + getline(fIn, line); + + int ii; + bool is_value = false; + bool valid = false; + bool in_quote = false; + std::string key = ""; + std::string value = ""; + for (ii = 0; ii < line.length(); ii++) + { + if (line[ii] == '\"') + { + in_quote = in_quote == true ? false : true; + } + if (isspace(line[ii]) && !in_quote) + { + continue; + } + if (line[ii] == '#' && !in_quote) + { + break; + } + else if (line[ii] == '=' && !in_quote) + { + is_value = true; + } + else if (line[ii] == '=' && is_value && !in_quote) + { + key = ""; + value = ""; + break; + } + else if (!is_value) + { + key += line[ii]; + } + else + { + valid = true; + value += line[ii]; + } + } + if (valid && !in_quote) + { + pSettings[key] = value; + } + } + fIn.close(); + return true; + } + return false; + +} + +bool CPluginManager::SavePluginSettings(const std::string& pPath, const map_plugin_settings_t& pSettings) +{ + std::ofstream fOut; + fOut.open(pPath.c_str()); + if (fOut.is_open()) + { + fOut << "Settings were written by abrt." << std::endl; + map_plugin_settings_t::const_iterator it; + for (it = pSettings.begin(); it != pSettings.end(); it++) + { + fOut << it->first << " = " << it->second << std::endl; + } + fOut.close(); + return true; + } + return false; +} diff --git a/src/Daemon/PluginManager.h b/src/Daemon/PluginManager.h index 53ec77c9..47487d68 100644 --- a/src/Daemon/PluginManager.h +++ b/src/Daemon/PluginManager.h @@ -139,18 +139,40 @@ class CPluginManager */ vector_map_string_string_t GetPluginsInfo(); /** - * A method, which sets up a plugin. + * A method, which sets up a plugin. The settings are also saved in home + * directory of an user. * @param pName A plugin name. + * @param pUID An uid of user. * @param pSettings A plugin's settings. */ void SetPluginSettings(const std::string& pName, + const std::string& pUID, const map_plugin_settings_t& pSettings); /** - * A method, which returns plugin's settings. + * A method, which returns plugin's settings according to user. * @param pName A plugin name. - * @return Plugin's settings + * @param pUID An uid of user. + * @return Plugin's settings accorting to user. */ - map_plugin_settings_t GetPluginSettings(const std::string& pName); + map_plugin_settings_t GetPluginSettings(const std::string& pName, + const std::string& pUID); + /** + * A function. It loads settings and store it in second parameter. On success it + * returns true, otherwise returns false. + * @param path A path of config file. + * @param settings A readed plugin's settings. + * @return if it success it returns true, otherwise it returns false. + */ + bool LoadPluginSettings(const std::string& pPath, + map_plugin_settings_t& pSettings); + /** + * A function. It saves settings. On success it returns true, otherwise returns false. + * @param path A path of config file. + * @param settings Plugin's settings. + * @return if it success it returns true, otherwise it returns false. + */ + bool SavePluginSettings(const std::string& pPath, + const map_plugin_settings_t& pSettings); }; #endif /*PLUGINMANAGER_H_*/ |