summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZdenek Prikryl <zdeny@dhcp-lab-218.englab.brq.redhat.com>2009-08-11 18:37:33 +0200
committerZdenek Prikryl <zdeny@dhcp-lab-218.englab.brq.redhat.com>2009-08-11 18:37:33 +0200
commit3335a8cc4e772ed027e400cfac10b17c1536ad9f (patch)
tree5a5dca74ecd6b2ea5376f4ee9b73510b68cfa3db
parentc0a64f7f5ed5abc1f729177da84d496a49e10081 (diff)
downloadabrt-3335a8cc4e772ed027e400cfac10b17c1536ad9f.tar.gz
abrt-3335a8cc4e772ed027e400cfac10b17c1536ad9f.tar.xz
abrt-3335a8cc4e772ed027e400cfac10b17c1536ad9f.zip
moved LoadSettings from plugins into PluginManager
-rw-r--r--lib/MiddleWare/Plugin.cpp62
-rw-r--r--lib/MiddleWare/Plugin.h9
-rw-r--r--lib/Plugins/CCpp.cpp8
-rw-r--r--lib/Plugins/CCpp.h1
-rw-r--r--lib/Plugins/FileTransfer.cpp8
-rw-r--r--lib/Plugins/FileTransfer.h1
-rw-r--r--lib/Plugins/KerneloopsReporter.cpp8
-rw-r--r--lib/Plugins/KerneloopsReporter.h1
-rw-r--r--lib/Plugins/KerneloopsScanner.cpp8
-rw-r--r--lib/Plugins/KerneloopsScanner.h1
-rw-r--r--lib/Plugins/Logger.cpp8
-rw-r--r--lib/Plugins/Logger.h1
-rw-r--r--lib/Plugins/Mailx.cpp8
-rw-r--r--lib/Plugins/Mailx.h1
-rw-r--r--lib/Plugins/SQLite3.cpp8
-rw-r--r--lib/Plugins/SQLite3.h1
-rw-r--r--src/Daemon/CrashWatcher.cpp15
-rw-r--r--src/Daemon/CrashWatcher.h2
-rw-r--r--src/Daemon/MiddleWare.cpp40
-rw-r--r--src/Daemon/MiddleWare.h28
-rw-r--r--src/Daemon/PluginManager.cpp122
-rw-r--r--src/Daemon/PluginManager.h30
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_*/