diff options
-rw-r--r-- | abrt.spec | 31 | ||||
-rw-r--r-- | src/Daemon/Daemon.cpp | 24 | ||||
-rw-r--r-- | src/Daemon/PluginManager.cpp | 28 | ||||
-rw-r--r-- | src/Daemon/PluginManager.h | 2 |
4 files changed, 50 insertions, 35 deletions
@@ -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. |