summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Moskovcak <jmoskovc@localhost.localdomain>2009-12-03 10:53:05 +0100
committerJiri Moskovcak <jmoskovc@localhost.localdomain>2009-12-03 10:53:05 +0100
commitb3ccd7f6d9a716e30039cdac92b338d1f70d9f8c (patch)
tree6f845dce471f62a2252041a4209a4addf2406785
parent583279ade87eaf1472585a4a110b323fdb7ec142 (diff)
parent1da902012534b13f228ea8000a2660ca7c0c1319 (diff)
downloadabrt-b3ccd7f6d9a716e30039cdac92b338d1f70d9f8c.tar.gz
abrt-b3ccd7f6d9a716e30039cdac92b338d1f70d9f8c.tar.xz
abrt-b3ccd7f6d9a716e30039cdac92b338d1f70d9f8c.zip
Merge branch 'master' of ssh://git.fedorahosted.org/git/abrt
-rw-r--r--abrt.spec31
-rw-r--r--src/Daemon/Daemon.cpp24
-rw-r--r--src/Daemon/PluginManager.cpp28
-rw-r--r--src/Daemon/PluginManager.h2
4 files changed, 50 insertions, 35 deletions
diff --git a/abrt.spec b/abrt.spec
index 0007d4b7..6ea48237 100644
--- a/abrt.spec
+++ b/abrt.spec
@@ -58,15 +58,12 @@ Group: User Interface/Desktops
Requires: %{name} = %{version}-%{release}
Requires: dbus-python, pygtk2, pygtk2-libglade,
Requires: gnome-python2-gnomevfs, gnome-python2-gnomekeyring
-# only if gtk2 version < 2.17
+# only if gtk2 version < 2.17:
#Requires: python-sexy
+# we used to have abrt-applet, now abrt-gui includes it:
Provides: abrt-applet = %{version}-%{release}
Obsoletes: abrt-applet < 0.0.5
Conflicts: abrt-applet < 0.0.5
-Obsoletes: bug-buddy
-Provides: bug-buddy
-#FIXME: upgrade workaround
-Requires: abrt-desktop
%description gui
GTK+ wizard for convenient bug reporting.
@@ -104,9 +101,9 @@ Obsoletes: abrt-plugin-kerneloops
Obsoletes: abrt-plugin-kerneloopsreporter
%description addon-kerneloops
-This package contains plugins for kernel crashes information collecting and
- reporter plugin, that sends, collected by %{name}'s kerneloops
-addon, information about kernel crashes to specified server, e.g. kerneloops.org.
+This package contains plugin for collecting kernel crash information
+and reporter plugin which sends this information to specified server,
+usually to kerneloops.org.
%package plugin-logger
Summary: %{name}'s logger reporter plugin
@@ -114,7 +111,7 @@ Group: System Environment/Libraries
Requires: %{name} = %{version}-%{release}
%description plugin-logger
-The simple reporter plugin, which writes a report to a specified file.
+The simple reporter plugin which writes a report to a specified file.
%package plugin-mailx
Summary: %{name}'s mailx reporter plugin
@@ -123,8 +120,8 @@ Requires: %{name} = %{version}-%{release}
Requires: mailx
%description plugin-mailx
-The simple reporter plugin, which sends a report via mailx to a specified
-email.
+The simple reporter plugin which sends a report via mailx to a specified
+email address.
%package plugin-runapp
Summary: %{name}'s runapp plugin
@@ -196,13 +193,19 @@ the sockets.
%package desktop
Summary: Virtual package to install all necessary packages for usage from desktop environment
Group: User Interface/Desktops
+# This package gets installed when anything requests bug-buddy -
+# happens when users upgrade Fn to Fn+1;
+# or if user just wants "typical desktop installation".
+# Installing abrt-desktop should result in the abrt which works without
+# any tweaking in abrt.conf (IOW: all plugins mentioned there must be installed)
Requires: %{name} = %{version}-%{release}
-Requires: %{name}-plugin-bugzilla, %{name}-plugin-logger
-#workaround for broken upgrade, remove!
-#Requires: %{name}-gui
Requires: %{name}-addon-kerneloops
Requires: %{name}-addon-ccpp, %{name}-addon-python
+Requires: %{name}-gui
+Requires: %{name}-plugin-bugzilla, %{name}-plugin-logger, %{name}-plugin-runapp
#Requires: %{name}-plugin-firefox
+Obsoletes: bug-buddy
+Provides: bug-buddy
%description desktop
Virtual package to make easy default instalation on desktop environments.
diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp
index 3a11a3ad..c2d22656 100644
--- a/src/Daemon/Daemon.cpp
+++ b/src/Daemon/Daemon.cpp
@@ -161,7 +161,7 @@ static gboolean cron_activation_reshedule_cb(gpointer data)
return FALSE;
}
-static void SetUpMW()
+static int SetUpMW()
{
set_string_t::iterator it_k = g_settings_setOpenGPGPublicKeys.begin();
for (; it_k != g_settings_setOpenGPGPublicKeys.end(); it_k++)
@@ -177,7 +177,8 @@ 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->c_str());
+ if (g_pPluginManager->RegisterPlugin(it_p->c_str()) != 0)
+ return -1;
}
VERB1 log("Adding actions or reporters");
vector_pair_string_string_t::iterator it_ar = g_settings_vectorActionsAndReporters.begin();
@@ -195,6 +196,7 @@ static void SetUpMW()
AddAnalyzerActionOrReporter(it_aar->first.c_str(), it_ar->first.c_str(), it_ar->second.c_str());
}
}
+ return 0;
}
static int SetUpCron()
@@ -779,9 +781,11 @@ int main(int argc, char** argv)
xmlrpc_client_setup_global_const(&env);
if (env.fault_occurred)
error_msg_and_die("XML-RPC Fault: %s(%d)", env.fault_string, env.fault_code);
+
VERB1 log("Creating glib main loop");
pMainloop = g_main_loop_new(NULL, FALSE);
/* Watching DEBUG_DUMPS_DIR for new files... */
+
VERB1 log("Initializing inotify");
sanitize_dump_dir_rights();
errno = 0;
@@ -790,14 +794,19 @@ int main(int argc, char** argv)
perror_msg_and_die("inotify_init failed");
if (inotify_add_watch(inotify_fd, DEBUG_DUMPS_DIR, IN_CREATE) == -1)
perror_msg_and_die("inotify_add_watch failed on '%s'", DEBUG_DUMPS_DIR);
- VERB1 log("Loading settings");
- LoadSettings();
- VERB1 log("Loading plugins");
+
+ VERB1 log("Loading all plugins in "PLUGINS_LIB_DIR);
g_pPluginManager = new CPluginManager();
g_pPluginManager->LoadPlugins();
- SetUpMW(); /* logging is inside */
+
+ VERB1 log("Loading settings");
+ LoadSettings();
+
+ if (SetUpMW() != 0) /* logging is inside */
+ throw 1;
if (SetUpCron() != 0)
throw 1;
+
#if 1 //def ENABLE_DBUS
VERB1 log("Initializing dbus");
g_pCommLayer = new CCommLayerServerDBus();
@@ -806,14 +815,17 @@ int main(int argc, char** argv)
#endif
if (g_pCommLayer->m_init_error)
throw 1;
+
VERB1 log("Adding inotify watch to glib main loop");
pGiochannel_inotify = g_io_channel_unix_new(inotify_fd);
g_io_add_watch(pGiochannel_inotify, G_IO_IN, handle_inotify_cb, NULL);
/* Add an event source which waits for INT/TERM signal */
+
VERB1 log("Adding signal pipe watch to glib main loop");
pGiochannel_signal = g_io_channel_unix_new(s_signal_pipe[0]);
g_io_add_watch(pGiochannel_signal, G_IO_IN, handle_signal_cb, NULL);
/* Mark the territory */
+
VERB1 log("Creating lock file");
if (Lock() != 0)
throw 1;
diff --git a/src/Daemon/PluginManager.cpp b/src/Daemon/PluginManager.cpp
index 1e26ec2d..58151b29 100644
--- a/src/Daemon/PluginManager.cpp
+++ b/src/Daemon/PluginManager.cpp
@@ -132,17 +132,13 @@ void CPluginManager::LoadPlugins()
struct dirent *dent;
while ((dent = readdir(dir)) != NULL)
{
- if (is_regular_file(dent, PLUGINS_LIB_DIR))
- {
- std::string name = dent->d_name;
- std::string extension = name.substr(name.length() - sizeof(PLUGINS_LIB_EXTENSION) + 1);
- if (extension == PLUGINS_LIB_EXTENSION)
- {
- name.erase(0, sizeof(PLUGINS_LIB_PREFIX) - 1);
- name.erase(name.length() - sizeof(PLUGINS_LIB_EXTENSION));
- LoadPlugin(name.c_str());
- }
- }
+ if (!is_regular_file(dent, PLUGINS_LIB_DIR))
+ continue;
+ char *ext = strrchr(dent->d_name, '.');
+ if (!ext || strcmp(ext + 1, PLUGINS_LIB_EXTENSION) != 0)
+ continue;
+ *ext = '\0';
+ LoadPlugin(dent->d_name + sizeof(PLUGINS_LIB_PREFIX)-1);
}
closedir(dir);
}
@@ -195,13 +191,14 @@ void CPluginManager::UnLoadPlugin(const char *pName)
}
}
-void CPluginManager::RegisterPlugin(const char *pName)
+int CPluginManager::RegisterPlugin(const char *pName)
{
map_abrt_plugins_t::iterator abrt_plugin = m_mapABRTPlugins.find(pName);
if (abrt_plugin != m_mapABRTPlugins.end())
{
if (m_mapPlugins.find(pName) == m_mapPlugins.end())
{
+ /* Loaded, but not registered yet */
CPlugin* plugin = abrt_plugin->second->PluginNew();
map_plugin_settings_t pluginSettings;
@@ -224,18 +221,21 @@ void CPluginManager::RegisterPlugin(const char *pName)
}
catch (CABRTException& e)
{
- log("Can't initialize plugin %s(%s): %s",
+ error_msg("Can't initialize plugin %s(%s): %s",
pName,
plugin_type_str[abrt_plugin->second->GetType()],
e.what()
);
UnLoadPlugin(pName);
- return;
+ return -1; /* failure */
}
m_mapPlugins[pName] = plugin;
log("Registered plugin %s(%s)", pName, plugin_type_str[abrt_plugin->second->GetType()]);
}
+ return 0; /* success */
}
+ error_msg("Can't initialize plugin %s: no such plugin installed", pName);
+ return -1; /* failure */
}
void CPluginManager::RegisterPluginDBUS(const char *pName, const char *pDBUSSender)
diff --git a/src/Daemon/PluginManager.h b/src/Daemon/PluginManager.h
index 0d3400b2..301d0910 100644
--- a/src/Daemon/PluginManager.h
+++ b/src/Daemon/PluginManager.h
@@ -84,7 +84,7 @@ class CPluginManager
* A method, which registers particular plugin.
* @param pName A plugin name.
*/
- void RegisterPlugin(const char *pName);
+ int RegisterPlugin(const char *pName);
/**
* A method, which unregister particular plugin.
* @param pName A plugin name.