summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJiri Moskovcak <jmoskovc@localhost.localdomain>2009-11-16 19:31:39 +0100
committerJiri Moskovcak <jmoskovc@localhost.localdomain>2009-11-16 19:31:39 +0100
commite02e60e8b1b3083ea13454c61460d72a0188517a (patch)
tree1679fa5bf56a00f9b6f3947cc2e1aef1f4c2559f /src
parent80a2d45c6ce729fc778d2ecc00569635cf886e7b (diff)
parentb69dd49d43a7c538c55e5cebab97c5f217cfe8fb (diff)
downloadabrt-e02e60e8b1b3083ea13454c61460d72a0188517a.tar.gz
abrt-e02e60e8b1b3083ea13454c61460d72a0188517a.tar.xz
abrt-e02e60e8b1b3083ea13454c61460d72a0188517a.zip
Merge branch 'master' of ssh://git.fedorahosted.org/git/abrt
Diffstat (limited to 'src')
-rw-r--r--src/Daemon/CommLayerServerDBus.cpp2
-rw-r--r--src/Daemon/CrashWatcher.cpp2
-rw-r--r--src/Daemon/Daemon.cpp2
-rw-r--r--src/Daemon/MiddleWare.cpp51
-rw-r--r--src/Daemon/PluginManager.cpp179
-rw-r--r--src/Daemon/PluginManager.h34
-rw-r--r--src/Daemon/Settings.cpp1
-rw-r--r--src/Daemon/abrt.conf7
8 files changed, 137 insertions, 141 deletions
diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp
index ed7e3858..2c2ca3a5 100644
--- a/src/Daemon/CommLayerServerDBus.cpp
+++ b/src/Daemon/CommLayerServerDBus.cpp
@@ -352,7 +352,7 @@ static int handle_GetPluginSettings(DBusMessage* call, DBusMessage* reply)
long unix_uid = get_remote_uid(call);
VERB1 log("got %s('%s') call from uid %ld", "GetPluginSettings", PluginName, unix_uid);
- map_plugin_settings_t plugin_settings = g_pPluginManager->GetPluginSettings(PluginName, to_string(unix_uid));
+ map_plugin_settings_t plugin_settings = g_pPluginManager->GetPluginSettings(PluginName, to_string(unix_uid).c_str());
DBusMessageIter iter;
dbus_message_iter_init_append(reply, &iter);
diff --git a/src/Daemon/CrashWatcher.cpp b/src/Daemon/CrashWatcher.cpp
index e684277c..f8595157 100644
--- a/src/Daemon/CrashWatcher.cpp
+++ b/src/Daemon/CrashWatcher.cpp
@@ -113,7 +113,7 @@ map_crash_report_t GetJobResult(const char* pUUID, const char* pUID, int force)
/* FIXME: starting from here, any shared data must be protected with a mutex.
* For example, CreateCrashReport does:
- * g_pPluginManager->GetDatabase(g_settings_sDatabase);
+ * g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str());
* which is unsafe wrt concurrent updates to g_pPluginManager state.
*/
mw_result_t res = CreateCrashReport(pUUID, pUID, force, crashReport);
diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp
index 53c44d3f..99f4af80 100644
--- a/src/Daemon/Daemon.cpp
+++ b/src/Daemon/Daemon.cpp
@@ -223,7 +223,7 @@ static void SetUpMW()
set_string_t::iterator it_p = g_settings_setEnabledPlugins.begin();
for (; it_p != g_settings_setEnabledPlugins.end(); it_p++)
{
- g_pPluginManager->RegisterPlugin(*it_p);
+ g_pPluginManager->RegisterPlugin(it_p->c_str());
}
VERB1 log("Adding actions or reporters");
vector_pair_string_string_t::iterator it_ar = g_settings_vectorActionsAndReporters.begin();
diff --git a/src/Daemon/MiddleWare.cpp b/src/Daemon/MiddleWare.cpp
index 0bc358e1..66bdea67 100644
--- a/src/Daemon/MiddleWare.cpp
+++ b/src/Daemon/MiddleWare.cpp
@@ -184,7 +184,7 @@ mw_result_t CreateCrashReport(const char *pUUID,
database_row_t row;
if (pUUID[0] != '\0')
{
- CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase);
+ CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str());
database->Connect();
row = database->GetUUIDData(pUUID, pUID);
database->DisConnect();
@@ -278,17 +278,21 @@ void RunActionsAndReporters(const char *pDebugDumpDir)
{
try
{
- if (g_pPluginManager->GetPluginType(it_ar->first) == REPORTER)
+ VERB3 log("RunActionsAndReporters: checking %s", it_ar->first.c_str());
+ plugin_type_t tp = g_pPluginManager->GetPluginType(it_ar->first.c_str());
+ if (tp == REPORTER)
{
- CReporter* reporter = g_pPluginManager->GetReporter(it_ar->first);
+ CReporter* reporter = g_pPluginManager->GetReporter(it_ar->first.c_str());
map_crash_report_t crashReport;
DebugDumpToCrashReport(pDebugDumpDir, crashReport);
+ VERB2 log("%s.Report(...)", it_ar->first.c_str());
reporter->Report(crashReport, plugin_settings, it_ar->second);
}
- else if (g_pPluginManager->GetPluginType(it_ar->first) == ACTION)
+ else if (tp == ACTION)
{
- CAction* action = g_pPluginManager->GetAction(it_ar->first);
+ CAction* action = g_pPluginManager->GetAction(it_ar->first.c_str());
+ VERB2 log("%s.Run('%s','%s')", it_ar->first.c_str(), pDebugDumpDir, it_ar->second.c_str());
action->Run(pDebugDumpDir, it_ar->second.c_str());
}
}
@@ -375,27 +379,31 @@ report_status_t Report(const map_crash_report_t& pCrashReport,
}
}
- // analyzer with package name (CCpp:xrog-x11-app) has higher priority
+ // analyzer with package name (CCpp:xorg-x11-app) has higher priority
std::string key = analyzer + ":" + packageName;
+ map_analyzer_actions_and_reporters_t::iterator end = s_mapAnalyzerActionsAndReporters.end();
map_analyzer_actions_and_reporters_t::iterator keyPtr = s_mapAnalyzerActionsAndReporters.find(key);
- if (keyPtr == s_mapAnalyzerActionsAndReporters.end())
+ if (keyPtr == end)
{
// if there is no such settings, then try default analyzer
keyPtr = s_mapAnalyzerActionsAndReporters.find(analyzer);
+ key = analyzer;
}
std::string message;
- if (keyPtr != s_mapAnalyzerActionsAndReporters.end())
+ if (keyPtr != end)
{
+ VERB2 log("Found AnalyzerActionsAndReporters for '%s'", key.c_str());
+
vector_pair_string_string_t::iterator it_r = keyPtr->second.begin();
for (; it_r != keyPtr->second.end(); it_r++)
{
std::string pluginName = it_r->first;
try
{
- if (g_pPluginManager->GetPluginType(pluginName) == REPORTER)
+ if (g_pPluginManager->GetPluginType(pluginName.c_str()) == REPORTER)
{
- CReporter* reporter = g_pPluginManager->GetReporter(pluginName);
+ CReporter* reporter = g_pPluginManager->GetReporter(pluginName.c_str());
#if 0 /* Using ~user/.abrt/ is bad wrt security */
std::string home = "";
map_plugin_settings_t oldSettings;
@@ -433,12 +441,12 @@ report_status_t Report(const map_crash_report_t& pCrashReport,
{
ret[pluginName].push_back("0");
ret[pluginName].push_back(e.what());
- update_client("Reporting via %s' was not successful: %s", pluginName.c_str(), e.what());
+ update_client("Reporting via '%s' was not successful: %s", pluginName.c_str(), e.what());
}
}
}
- CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase);
+ CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str());
database->Connect();
database->SetReported(UUID, UID, message);
database->DisConnect();
@@ -456,7 +464,7 @@ void DeleteDebugDumpDir(const char *pDebugDumpDir)
std::string DeleteCrashInfo(const char *pUUID,
const char *pUID)
{
- CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase);
+ CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str());
database->Connect();
database_row_t row = database->GetUUIDData(pUUID, pUID);
database->Delete(pUUID, pUID);
@@ -476,7 +484,7 @@ std::string DeleteCrashInfo(const char *pUUID,
static bool IsDebugDumpSaved(const char *pUID,
const char *pDebugDumpDir)
{
- CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase);
+ CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str());
database->Connect();
vector_database_rows_t rows = database->GetUIDData(pUID);
database->DisConnect();
@@ -604,9 +612,9 @@ static void RunAnalyzerActions(const char *pAnalyzer, const char *pDebugDumpDir)
std::string pluginName = it_a->first;
try
{
- if (g_pPluginManager->GetPluginType(pluginName) == ACTION)
+ if (g_pPluginManager->GetPluginType(pluginName.c_str()) == ACTION)
{
- CAction* action = g_pPluginManager->GetAction(pluginName);
+ CAction* action = g_pPluginManager->GetAction(pluginName.c_str());
action->Run(pDebugDumpDir, it_a->second.c_str());
}
}
@@ -635,7 +643,7 @@ static mw_result_t SaveDebugDumpToDatabase(const char *pUUID,
const char *pDebugDumpDir,
map_crash_info_t& pCrashInfo)
{
- CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase);
+ CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str());
database->Connect();
database->Insert(pUUID, pUID, pDebugDumpDir, pTime);
database_row_t row = database->GetUUIDData(pUUID, pUID);
@@ -657,7 +665,7 @@ static mw_result_t SaveDebugDumpToDatabase(const char *pUUID,
std::string getDebugDumpDir(const char *pUUID,
const char *pUID)
{
- CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase);
+ CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str());
database->Connect();
database_row_t row = database->GetUUIDData(pUUID, pUID);
database->DisConnect();
@@ -712,7 +720,7 @@ mw_result_t GetCrashInfo(const char *pUUID,
map_crash_info_t& pCrashInfo)
{
pCrashInfo.clear();
- CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase);
+ CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str());
database->Connect();
database_row_t row = database->GetUUIDData(pUUID, pUID);
database->DisConnect();
@@ -757,14 +765,14 @@ mw_result_t GetCrashInfo(const char *pUUID,
vector_pair_string_string_t GetUUIDsOfCrash(const char *pUID)
{
- CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase);
+ CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str());
vector_database_rows_t rows;
database->Connect();
rows = database->GetUIDData(pUID);
database->DisConnect();
vector_pair_string_string_t UUIDsUIDs;
- int ii;
+ unsigned ii;
for (ii = 0; ii < rows.size(); ii++)
{
UUIDsUIDs.push_back(make_pair(rows[ii].m_sUUID, rows[ii].m_sUID));
@@ -783,5 +791,6 @@ void AddAnalyzerActionOrReporter(const char *pAnalyzer,
void AddActionOrReporter(const char *pActionOrReporter,
const char *pArgs)
{
+ VERB3 log("AddActionOrReporter('%s','%s')", pActionOrReporter, pArgs);
s_vectorActionsAndReporters.push_back(make_pair(std::string(pActionOrReporter), std::string(pArgs)));
}
diff --git a/src/Daemon/PluginManager.cpp b/src/Daemon/PluginManager.cpp
index 5b871515..5865e42c 100644
--- a/src/Daemon/PluginManager.cpp
+++ b/src/Daemon/PluginManager.cpp
@@ -30,7 +30,7 @@
/**
* Text representation of plugin types.
*/
-static const char* const plugin_type_str[] = {
+static const char *const plugin_type_str[] = {
"Analyzer",
"Action",
"Reporter",
@@ -38,61 +38,60 @@ static const char* const plugin_type_str[] = {
};
-bool LoadPluginSettings(const std::string& pPath, map_plugin_settings_t& pSettings)
+bool LoadPluginSettings(const char *pPath, map_plugin_settings_t& pSettings)
{
std::ifstream fIn;
- fIn.open(pPath.c_str());
- if (fIn.is_open())
+ fIn.open(pPath);
+ if (!fIn.is_open())
+ return false;
+
+ std::string line;
+ while (!fIn.eof())
{
- 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++)
{
- 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] == '\"')
{
- if (line[ii] == '\"')
- {
- in_quote = in_quote == true ? false : true;
- }
- if (isspace(line[ii]) && !in_quote)
- {
- continue;
- }
- if (line[ii] == '#' && !in_quote && key == "")
- {
- break;
- }
- if (line[ii] == '=' && !in_quote)
- {
- is_value = true;
- continue;
- }
- if (!is_value)
- {
- key += line[ii];
- }
- else
- {
- valid = true;
- value += line[ii];
- }
+ in_quote = in_quote == true ? false : true;
}
- if (valid && !in_quote)
+ if (isspace(line[ii]) && !in_quote)
{
- pSettings[key] = value;
+ continue;
+ }
+ if (line[ii] == '#' && !in_quote && key == "")
+ {
+ break;
+ }
+ if (line[ii] == '=' && !in_quote)
+ {
+ is_value = true;
+ continue;
+ }
+ if (!is_value)
+ {
+ key += line[ii];
+ }
+ else
+ {
+ valid = true;
+ value += line[ii];
}
}
- fIn.close();
- return true;
+ if (valid && !in_quote)
+ {
+ pSettings[key] = value;
+ }
}
- return false;
+ fIn.close();
+ return true;
}
/**
@@ -101,9 +100,9 @@ bool LoadPluginSettings(const std::string& pPath, map_plugin_settings_t& pSettin
* @param settings Plugin's settings.
* @return if it success it returns true, otherwise it returns false.
*/
-static bool SavePluginSettings(const std::string& pPath, const map_plugin_settings_t& pSettings)
+static bool SavePluginSettings(const char *pPath, const map_plugin_settings_t& pSettings)
{
- FILE* fOut = fopen(pPath.c_str(), "w");
+ FILE* fOut = fopen(pPath, "w");
if (fOut)
{
fprintf(fOut, "# Settings were written by abrt\n");
@@ -141,7 +140,7 @@ void CPluginManager::LoadPlugins()
{
name.erase(0, sizeof(PLUGINS_LIB_PREFIX) - 1);
name.erase(name.length() - sizeof(PLUGINS_LIB_EXTENSION));
- LoadPlugin(name);
+ LoadPlugin(name.c_str());
}
}
}
@@ -151,40 +150,39 @@ void CPluginManager::LoadPlugins()
void CPluginManager::UnLoadPlugins()
{
- map_abrt_plugins_t::iterator it_p;
- while ((it_p = m_mapABRTPlugins.begin()) != m_mapABRTPlugins.end())
+ map_abrt_plugins_t::iterator it_p = m_mapABRTPlugins.begin();
+ while (it_p != m_mapABRTPlugins.end())
{
- std::string pluginName = it_p->first;
- UnLoadPlugin(pluginName);
+ UnLoadPlugin(it_p->first.c_str());
}
}
-void CPluginManager::LoadPlugin(const std::string& pName)
+void CPluginManager::LoadPlugin(const char *pName)
{
if (m_mapABRTPlugins.find(pName) == m_mapABRTPlugins.end())
{
CABRTPlugin* abrtPlugin = NULL;
try
{
- std::string libPath = PLUGINS_LIB_DIR"/"PLUGINS_LIB_PREFIX + pName + "."PLUGINS_LIB_EXTENSION;
+ std::string libPath = ssprintf(PLUGINS_LIB_DIR"/"PLUGINS_LIB_PREFIX"%s."PLUGINS_LIB_EXTENSION, pName);
abrtPlugin = new CABRTPlugin(libPath.c_str());
if (abrtPlugin->GetMagicNumber() != PLUGINS_MAGIC_NUMBER ||
(abrtPlugin->GetType() < ANALYZER && abrtPlugin->GetType() > DATABASE))
{
throw CABRTException(EXCEP_PLUGIN, "CPluginManager::LoadPlugin(): non-compatible plugin");
}
- log("Plugin %s (%s) succesfully loaded", pName.c_str(), abrtPlugin->GetVersion());
+ log("Plugin %s (%s) succesfully loaded", pName, abrtPlugin->GetVersion());
m_mapABRTPlugins[pName] = abrtPlugin;
}
catch (CABRTException& e)
{
delete abrtPlugin;
- error_msg("Failed to load plugin %s: %s", pName.c_str(), e.what());
+ error_msg("Failed to load plugin %s: %s", pName, e.what());
}
}
}
-void CPluginManager::UnLoadPlugin(const std::string& pName)
+void CPluginManager::UnLoadPlugin(const char *pName)
{
map_abrt_plugins_t::iterator abrt_plugin = m_mapABRTPlugins.find(pName);
if (abrt_plugin != m_mapABRTPlugins.end())
@@ -192,11 +190,11 @@ void CPluginManager::UnLoadPlugin(const std::string& pName)
UnRegisterPlugin(pName);
delete abrt_plugin->second;
m_mapABRTPlugins.erase(abrt_plugin);
- log("Plugin %s successfully unloaded", pName.c_str());
+ log("Plugin %s successfully unloaded", pName);
}
}
-void CPluginManager::RegisterPlugin(const std::string& pName)
+void CPluginManager::RegisterPlugin(const char *pName)
{
map_abrt_plugins_t::iterator abrt_plugin = m_mapABRTPlugins.find(pName);
if (abrt_plugin != m_mapABRTPlugins.end())
@@ -206,7 +204,7 @@ void CPluginManager::RegisterPlugin(const std::string& pName)
CPlugin* plugin = abrt_plugin->second->PluginNew();
map_plugin_settings_t pluginSettings;
- LoadPluginSettings(PLUGINS_CONF_DIR"/" + pName + "."PLUGINS_CONF_EXTENSION, pluginSettings);
+ LoadPluginSettings(ssprintf(PLUGINS_CONF_DIR"/%s."PLUGINS_CONF_EXTENSION, pName).c_str(), pluginSettings);
try
{
plugin->Init();
@@ -215,7 +213,7 @@ void CPluginManager::RegisterPlugin(const std::string& pName)
catch (CABRTException& e)
{
log("Can't initialize plugin %s(%s): %s",
- pName.c_str(),
+ pName,
plugin_type_str[abrt_plugin->second->GetType()],
e.what()
);
@@ -223,13 +221,12 @@ void CPluginManager::RegisterPlugin(const std::string& pName)
return;
}
m_mapPlugins[pName] = plugin;
- log("Registered plugin %s(%s)", pName.c_str(), plugin_type_str[abrt_plugin->second->GetType()]);
+ log("Registered plugin %s(%s)", pName, plugin_type_str[abrt_plugin->second->GetType()]);
}
}
}
-void CPluginManager::RegisterPluginDBUS(const std::string& pName,
- const char * pDBUSSender)
+void CPluginManager::RegisterPluginDBUS(const char *pName, const char *pDBUSSender)
{
int polkit_result = polkit_check_authorization(pDBUSSender,
"org.fedoraproject.abrt.change-daemon-settings");
@@ -242,7 +239,7 @@ void CPluginManager::RegisterPluginDBUS(const std::string& pName,
}
}
-void CPluginManager::UnRegisterPlugin(const std::string& pName)
+void CPluginManager::UnRegisterPlugin(const char *pName)
{
map_abrt_plugins_t::iterator abrt_plugin = m_mapABRTPlugins.find(pName);
if (abrt_plugin != m_mapABRTPlugins.end())
@@ -253,13 +250,12 @@ void CPluginManager::UnRegisterPlugin(const std::string& pName)
plugin->second->DeInit();
delete plugin->second;
m_mapPlugins.erase(plugin);
- log("UnRegistered plugin %s(%s)", pName.c_str(), plugin_type_str[abrt_plugin->second->GetType()]);
+ log("UnRegistered plugin %s(%s)", pName, plugin_type_str[abrt_plugin->second->GetType()]);
}
}
}
-void CPluginManager::UnRegisterPluginDBUS(const std::string& pName,
- const char * pDBUSSender)
+void CPluginManager::UnRegisterPluginDBUS(const char *pName, const char *pDBUSSender)
{
int polkit_result = polkit_check_authorization(pDBUSSender,
"org.fedoraproject.abrt.change-daemon-settings");
@@ -273,77 +269,68 @@ void CPluginManager::UnRegisterPluginDBUS(const std::string& pName,
}
-CAnalyzer* CPluginManager::GetAnalyzer(const std::string& pName)
+CAnalyzer* CPluginManager::GetAnalyzer(const char *pName)
{
map_plugins_t::iterator plugin = m_mapPlugins.find(pName);
if (plugin == m_mapPlugins.end())
{
- throw CABRTException(EXCEP_PLUGIN, "CPluginManager::GetAnalyzer():"
- "Analyzer plugin: '"+pName+"' is not registered.");
+ throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not registered", pName));
}
if (m_mapABRTPlugins[pName]->GetType() != ANALYZER)
{
- throw CABRTException(EXCEP_PLUGIN, "CPluginManager::GetAnalyzer():"
- "Plugin: '"+pName+"' is not analyzer plugin.");
+ throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not an analyzer plugin", pName));
}
return (CAnalyzer*)(plugin->second);
}
-CReporter* CPluginManager::GetReporter(const std::string& pName)
+CReporter* CPluginManager::GetReporter(const char *pName)
{
map_plugins_t::iterator plugin = m_mapPlugins.find(pName);
if (plugin == m_mapPlugins.end())
{
- throw CABRTException(EXCEP_PLUGIN, "CPluginManager::GetReporter():"
- "Reporter plugin: '"+pName+"' is not registered.");
+ throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not registered", pName));
}
if (m_mapABRTPlugins[pName]->GetType() != REPORTER)
{
- throw CABRTException(EXCEP_PLUGIN, "CPluginManager::GetReporter():"
- "Plugin: '"+pName+"' is not reporter plugin.");
+ throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not a reporter plugin", pName));
}
return (CReporter*)(plugin->second);
}
-CAction* CPluginManager::GetAction(const std::string& pName)
+CAction* CPluginManager::GetAction(const char *pName)
{
map_plugins_t::iterator plugin = m_mapPlugins.find(pName);
if (plugin == m_mapPlugins.end())
{
- throw CABRTException(EXCEP_PLUGIN, "CPluginManager::GetAction():"
- "Action plugin: '"+pName+"' is not registered.");
+ throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not registered", pName));
}
if (m_mapABRTPlugins[pName]->GetType() != ACTION)
{
- throw CABRTException(EXCEP_PLUGIN, "CPluginManager::GetAction():"
- "Plugin: '"+pName+"' is not action plugin.");
+ throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not an action plugin", pName));
}
return (CAction*)(plugin->second);
}
-CDatabase* CPluginManager::GetDatabase(const std::string& pName)
+CDatabase* CPluginManager::GetDatabase(const char *pName)
{
map_plugins_t::iterator plugin = m_mapPlugins.find(pName);
if (plugin == m_mapPlugins.end())
{
- throw CABRTException(EXCEP_PLUGIN, "CPluginManager::GetDatabase():"
- "Database plugin: '"+pName+"' is not registered.");
+ throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not registered", pName));
}
if (m_mapABRTPlugins[pName]->GetType() != DATABASE)
{
- throw CABRTException(EXCEP_PLUGIN, "CPluginManager::GetDatabase():"
- "Plugin: '"+pName+"' is not database plugin.");
+ throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not a database plugin", pName));
}
return (CDatabase*)(plugin->second);
}
-plugin_type_t CPluginManager::GetPluginType(const std::string& pName)
+plugin_type_t CPluginManager::GetPluginType(const char *pName)
{
map_plugins_t::iterator plugin = m_mapPlugins.find(pName);
if (plugin == m_mapPlugins.end())
{
- throw CABRTException(EXCEP_PLUGIN, "CPluginManager::GetPluginType():"
- "Plugin: '"+pName+"' is not registered.");
+ throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not registered", pName));
}
return m_mapABRTPlugins[pName]->GetType();
}
@@ -370,8 +357,8 @@ vector_map_string_t CPluginManager::GetPluginsInfo()
return ret;
}
-void CPluginManager::SetPluginSettings(const std::string& pName,
- const std::string& pUID,
+void CPluginManager::SetPluginSettings(const char *pName,
+ const char *pUID,
const map_plugin_settings_t& pSettings)
{
map_abrt_plugins_t::iterator abrt_plugin = m_mapABRTPlugins.find(pName);
@@ -444,8 +431,8 @@ void CPluginManager::SetPluginSettings(const std::string& pName,
#endif
}
-map_plugin_settings_t CPluginManager::GetPluginSettings(const std::string& pName,
- const std::string& pUID)
+map_plugin_settings_t CPluginManager::GetPluginSettings(const char *pName,
+ const char *pUID)
{
map_plugin_settings_t ret;
map_abrt_plugins_t::iterator abrt_plugin = m_mapABRTPlugins.find(pName);
diff --git a/src/Daemon/PluginManager.h b/src/Daemon/PluginManager.h
index d4914db6..0d3400b2 100644
--- a/src/Daemon/PluginManager.h
+++ b/src/Daemon/PluginManager.h
@@ -74,68 +74,66 @@ class CPluginManager
* A method, which loads particular plugin.
* @param pName A plugin name.
*/
- void LoadPlugin(const std::string& pName);
+ void LoadPlugin(const char *pName);
/**
* A method, which unloads particular plugin.
* @param pName A plugin name.
*/
- void UnLoadPlugin(const std::string& pName);
+ void UnLoadPlugin(const char *pName);
/**
* A method, which registers particular plugin.
* @param pName A plugin name.
*/
- void RegisterPlugin(const std::string& pName);
+ void RegisterPlugin(const char *pName);
/**
* A method, which unregister particular plugin.
* @param pName A plugin name.
*/
- void UnRegisterPlugin(const std::string& pName);
+ void UnRegisterPlugin(const char *pName);
/**
* A method, which registers particular plugin,
* called via DBUS
* @param pName A plugin name.
* @param pDBUSSender DBUS user identification
*/
- void RegisterPluginDBUS(const std::string& pName,
- const char * pDBUSSender);
+ void RegisterPluginDBUS(const char *pName, const char *pDBUSSender);
/**
* A method, which unregister particular plugin,
* called via DBUS
* @param pName A plugin name.
* @param pDBUSSender DBUS user identification
*/
- void UnRegisterPluginDBUS(const std::string& pName,
- const char * pDBUSSender);
+ void UnRegisterPluginDBUS(const char *pName, const char *pDBUSSender);
/**
* A method, which returns instance of particular analyzer plugin.
* @param pName A plugin name.
* @return An analyzer plugin.
*/
- CAnalyzer* GetAnalyzer(const std::string& pName);
+ CAnalyzer* GetAnalyzer(const char *pName);
/**
* A method, which returns instance of particular reporter plugin.
* @param pName A plugin name.
* @return A reporter plugin.
*/
- CReporter* GetReporter(const std::string& pName);
+ CReporter* GetReporter(const char *pName);
/**
* A method, which returns instance of particular action plugin.
* @param pName A plugin name.
* @return An action plugin.
*/
- CAction* GetAction(const std::string& pName);
+ CAction* GetAction(const char *pName);
/**
* A method, which returns instance of particular database plugin.
* @param pName A plugin name.
* @return A database plugin.
*/
- CDatabase* GetDatabase(const std::string& pName);
+ CDatabase* GetDatabase(const char *pName);
/**
* A method, which returns type of particular plugin.
* @param pName A plugin name.
* @return A plugin type.
*/
- plugin_type_t GetPluginType(const std::string& pName);
+ plugin_type_t GetPluginType(const char *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.
@@ -150,8 +148,8 @@ class CPluginManager
* @param pUID An uid of user.
* @param pSettings A plugin's settings.
*/
- void SetPluginSettings(const std::string& pName,
- const std::string& pUID,
+ void SetPluginSettings(const char *pName,
+ const char *pUID,
const map_plugin_settings_t& pSettings);
/**
* A method, which returns plugin's settings according to user.
@@ -159,8 +157,8 @@ class CPluginManager
* @param pUID An uid of user.
* @return Plugin's settings accorting to user.
*/
- map_plugin_settings_t GetPluginSettings(const std::string& pName,
- const std::string& pUID);
+ map_plugin_settings_t GetPluginSettings(const char *pName,
+ const char *pUID);
};
/**
@@ -170,6 +168,6 @@ class CPluginManager
* @param settings A readed plugin's settings.
* @return if it success it returns true, otherwise it returns false.
*/
-bool LoadPluginSettings(const std::string& pPath,
+bool LoadPluginSettings(const char *pPath,
map_plugin_settings_t& pSettings);
#endif /*PLUGINMANAGER_H_*/
diff --git a/src/Daemon/Settings.cpp b/src/Daemon/Settings.cpp
index cefd35a4..7f419ec5 100644
--- a/src/Daemon/Settings.cpp
+++ b/src/Daemon/Settings.cpp
@@ -228,6 +228,7 @@ static void ParseAnalyzerActionsAndReporters()
set_string_t::iterator it_keys = keys.begin();
for (; it_keys != keys.end(); it_keys++)
{
+ VERB2 log("AnalyzerActionsAndReporters['%s']=...", it_keys->c_str());
g_settings_mapAnalyzerActionsAndReporters[*it_keys] = actionsAndReporters;
}
}
diff --git a/src/Daemon/abrt.conf b/src/Daemon/abrt.conf
index e9845e58..f24ec4a8 100644
--- a/src/Daemon/abrt.conf
+++ b/src/Daemon/abrt.conf
@@ -10,20 +10,21 @@ OpenGPGPublicKeys = /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
# Blacklisted packages
BlackList = nspluginwrapper
# Enabled plugins. There has to be exactly one database plugin
-EnabledPlugins = SQLite3, CCpp, Logger, Kerneloops, KerneloopsScanner, KerneloopsReporter, Bugzilla, Python
+EnabledPlugins = SQLite3, CCpp, Logger, Kerneloops, KerneloopsScanner, KerneloopsReporter, Bugzilla, Python, RunApp
# Database
Database = SQLite3
# Max size for crash storage [MiB]
MaxCrashReportsSize = 1000
# Vector of actions and reporters which are activated immediately after a crash occurs
-# ActionsAndReporters = Mailx("[abrt] new crash was detected")
+#ActionsAndReporters = Mailx("[abrt] new crash was detected")
+# TODO: teach parser to escape \". Should be: x"`cat component`" = x"xorg-x11-server-Xorg"
+ActionsAndReporters = RunApp("test x`cat component` = xxorg-x11-server-Xorg && cp /var/log/Xorg*.log .")
# Reporters association with analyzers
[ AnalyzerActionsAndReporters ]
Kerneloops = KerneloopsReporter
CCpp = Bugzilla, Logger
Python = Bugzilla, Logger
-# CCpp : xorg-x11-apps = RunApp("date", "RunApp")
# Repeated calling of Action plugins
[ Cron ]