diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-03-05 17:03:32 +0100 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-03-05 17:03:32 +0100 |
| commit | dbbc2df18f5441d7b298c5d32e4199aa56f08ce0 (patch) | |
| tree | adf4bce0a6a02d29da010f91c8264c4dd38ca465 /src/Daemon | |
| parent | 9e7602b032c2187887c8164fa23c37d6daf28ac0 (diff) | |
| download | abrt-dbbc2df18f5441d7b298c5d32e4199aa56f08ce0.tar.gz abrt-dbbc2df18f5441d7b298c5d32e4199aa56f08ce0.tar.xz abrt-dbbc2df18f5441d7b298c5d32e4199aa56f08ce0.zip | |
add ProcessUnpackaged option to abrt.conf
Based on patch by Pekka Pietikainen <pp@ee.oulu.fi>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'src/Daemon')
| -rw-r--r-- | src/Daemon/CommLayerServer.h | 2 | ||||
| -rw-r--r-- | src/Daemon/CommLayerServerDBus.cpp | 10 | ||||
| -rw-r--r-- | src/Daemon/CommLayerServerDBus.h | 2 | ||||
| -rw-r--r-- | src/Daemon/MiddleWare.cpp | 34 | ||||
| -rw-r--r-- | src/Daemon/Settings.cpp | 7 | ||||
| -rw-r--r-- | src/Daemon/Settings.h | 1 | ||||
| -rw-r--r-- | src/Daemon/abrt.conf | 2 |
7 files changed, 44 insertions, 14 deletions
diff --git a/src/Daemon/CommLayerServer.h b/src/Daemon/CommLayerServer.h index 6e593d29..2daaf93a 100644 --- a/src/Daemon/CommLayerServer.h +++ b/src/Daemon/CommLayerServer.h @@ -30,7 +30,7 @@ class CCommLayerServer { virtual ~CCommLayerServer(); /* just stubs to be called when not implemented in specific comm layer */ - virtual void Crash(const char *progname, const char *uid_str) {} + virtual void Crash(const char *package_name, const char *uid_str) {} virtual void JobDone(const char* peer) = 0; virtual void QuotaExceed(const char* str) {} diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp index 6dcb8e45..517a9e2a 100644 --- a/src/Daemon/CommLayerServerDBus.cpp +++ b/src/Daemon/CommLayerServerDBus.cpp @@ -64,23 +64,23 @@ static void send_flush_and_unref(DBusMessage* msg) } /* Notify the clients (UI) about a new crash */ -void CCommLayerServerDBus::Crash(const char *progname, const char *uid_str) +void CCommLayerServerDBus::Crash(const char *package_name, const char *uid_str) { DBusMessage* msg = new_signal_msg("Crash"); if (uid_str) { dbus_message_append_args(msg, - DBUS_TYPE_STRING, &progname, + DBUS_TYPE_STRING, &package_name, DBUS_TYPE_STRING, &uid_str, DBUS_TYPE_INVALID); - VERB2 log("Sending signal Crash('%s','%s')", progname, uid_str); + VERB2 log("Sending signal Crash('%s','%s')", package_name, uid_str); } else { dbus_message_append_args(msg, - DBUS_TYPE_STRING, &progname, + DBUS_TYPE_STRING, &package_name, DBUS_TYPE_INVALID); - VERB2 log("Sending signal Crash('%s')", progname); + VERB2 log("Sending signal Crash('%s')", package_name); } send_flush_and_unref(msg); } diff --git a/src/Daemon/CommLayerServerDBus.h b/src/Daemon/CommLayerServerDBus.h index 91ec0919..c62d9a9f 100644 --- a/src/Daemon/CommLayerServerDBus.h +++ b/src/Daemon/CommLayerServerDBus.h @@ -29,7 +29,7 @@ class CCommLayerServerDBus virtual ~CCommLayerServerDBus(); /* DBus signal senders */ - virtual void Crash(const char *progname, const char *uid_str); + virtual void Crash(const char *package_name, const char *uid_str); virtual void JobDone(const char* peer); virtual void QuotaExceed(const char* str); diff --git a/src/Daemon/MiddleWare.cpp b/src/Daemon/MiddleWare.cpp index 1ed13e86..770ed927 100644 --- a/src/Daemon/MiddleWare.cpp +++ b/src/Daemon/MiddleWare.cpp @@ -654,19 +654,41 @@ static mw_result_t SavePackageDescriptionToDebugDump( { std::string package; std::string packageName; + std::string component; std::string scriptName; /* only if "interpreter /path/to/script" */ if (strcmp(pExecutable, "kernel") == 0) { - packageName = package = "kernel"; + component = packageName = package = "kernel"; } else { char *rpm_pkg = GetPackage(pExecutable); if (rpm_pkg == NULL) { - log("Executable '%s' doesn't belong to any package", pExecutable); - return MW_PACKAGE_ERROR; + if (g_settings_bProcessUnpackaged) + { + VERB2 log("Crash in unpackaged executable '%s', proceeding without packaging information", pExecutable); + try + { + CDebugDump dd; + dd.Open(pDebugDumpDir); + dd.SaveText(FILENAME_PACKAGE, ""); + dd.SaveText(FILENAME_COMPONENT, ""); + dd.SaveText(FILENAME_DESCRIPTION, "Crashed executable does not belong to any installed package"); + return MW_OK; + } + catch (CABRTException& e) + { + error_msg("%s", e.what()); + return MW_ERROR; + } + } + else + { + log("Executable '%s' doesn't belong to any package", pExecutable); + return MW_PACKAGE_ERROR; + } } /* Check well-known interpreter names */ @@ -738,19 +760,17 @@ static mw_result_t SavePackageDescriptionToDebugDump( } */ } + component = GetComponent(pExecutable); } std::string description = GetDescription(packageName.c_str()); - std::string component = GetComponent(pExecutable); try { CDebugDump dd; dd.Open(pDebugDumpDir); dd.SaveText(FILENAME_PACKAGE, package.c_str()); dd.SaveText(FILENAME_DESCRIPTION, description.c_str()); - /* For oopses, pExecutable == "kernel" gives "" here. Don't write it */ - if (component.size() != 0) - dd.SaveText(FILENAME_COMPONENT, component.c_str()); + dd.SaveText(FILENAME_COMPONENT, component.c_str()); } catch (CABRTException& e) { diff --git a/src/Daemon/Settings.cpp b/src/Daemon/Settings.cpp index 5644d370..b8bdc9c6 100644 --- a/src/Daemon/Settings.cpp +++ b/src/Daemon/Settings.cpp @@ -56,6 +56,8 @@ set_string_t g_settings_setOpenGPGPublicKeys; set_string_t g_settings_mapBlackList; std::string g_settings_sDatabase; unsigned int g_settings_nMaxCrashReportsSize = 1000; +bool g_settings_bProcessUnpackaged = false; + /* one line: "ActionsAndReporters = aa_first,bb_first(bb_second),cc_first" */ vector_pair_string_string_t g_settings_vectorActionsAndReporters; /* [ AnalyzerActionsAndReporters ] */ @@ -188,6 +190,11 @@ static void ParseCommon() { g_settings_vectorActionsAndReporters = ParseListWithArgs(it->second.c_str()); } + it = s_mapSectionCommon.find("ProcessUnpackaged"); + if (it != end) + { + g_settings_bProcessUnpackaged = string_to_bool(it->second.c_str()); + } } static void ParseCron() diff --git a/src/Daemon/Settings.h b/src/Daemon/Settings.h index cd3179d2..fda1b0d8 100644 --- a/src/Daemon/Settings.h +++ b/src/Daemon/Settings.h @@ -29,6 +29,7 @@ extern set_string_t g_settings_setOpenGPGPublicKeys; extern set_string_t g_settings_mapBlackList; extern unsigned int g_settings_nMaxCrashReportsSize; extern bool g_settings_bOpenGPGCheck; +extern bool g_settings_bProcessUnpackaged; extern std::string g_settings_sDatabase; extern map_cron_t g_settings_mapCron; extern vector_pair_string_string_t g_settings_vectorActionsAndReporters; diff --git a/src/Daemon/abrt.conf b/src/Daemon/abrt.conf index 32ba2111..4dc47fb2 100644 --- a/src/Daemon/abrt.conf +++ b/src/Daemon/abrt.conf @@ -6,6 +6,8 @@ OpenGPGCheck = yes # Blacklisted packages BlackList = nspluginwrapper, valgrind, strace, avant-window-navigator +# Process crashes in executables which do not belong to any package? +ProcessUnpackaged = no # Which database plugin to use Database = SQLite3 # Max size for crash storage [MiB] |
