summaryrefslogtreecommitdiffstats
path: root/src/Daemon
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-03-05 17:03:32 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2010-03-05 17:03:32 +0100
commitdbbc2df18f5441d7b298c5d32e4199aa56f08ce0 (patch)
treeadf4bce0a6a02d29da010f91c8264c4dd38ca465 /src/Daemon
parent9e7602b032c2187887c8164fa23c37d6daf28ac0 (diff)
downloadabrt-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.h2
-rw-r--r--src/Daemon/CommLayerServerDBus.cpp10
-rw-r--r--src/Daemon/CommLayerServerDBus.h2
-rw-r--r--src/Daemon/MiddleWare.cpp34
-rw-r--r--src/Daemon/Settings.cpp7
-rw-r--r--src/Daemon/Settings.h1
-rw-r--r--src/Daemon/abrt.conf2
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]