summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/Plugins/CCpp.conf3
-rw-r--r--lib/Plugins/CCpp.cpp16
-rw-r--r--lib/Plugins/CCpp.h1
-rw-r--r--src/Daemon/MiddleWare.cpp16
4 files changed, 32 insertions, 4 deletions
diff --git a/lib/Plugins/CCpp.conf b/lib/Plugins/CCpp.conf
index a18d56a3..82125813 100644
--- a/lib/Plugins/CCpp.conf
+++ b/lib/Plugins/CCpp.conf
@@ -12,6 +12,9 @@ SaveBinaryImage = no
# Generate backtrace
Backtrace = yes
+# Generate backtrace for remote crashes
+BacktraceRemotes = no
+
# Generate memory map too (IGNORED FOR NOW)
MemoryMap = no
diff --git a/lib/Plugins/CCpp.cpp b/lib/Plugins/CCpp.cpp
index 0fc229d3..2a329530 100644
--- a/lib/Plugins/CCpp.cpp
+++ b/lib/Plugins/CCpp.cpp
@@ -50,6 +50,7 @@ crash at the same time? This value has been recommended by nhorman
CAnalyzerCCpp::CAnalyzerCCpp() :
m_bBacktrace(true),
+ m_bBacktraceRemotes(false),
m_bMemoryMap(false),
m_bInstallDebugInfo(true),
m_nDebugInfoCacheMB(4000)
@@ -700,6 +701,16 @@ void CAnalyzerCCpp::CreateReport(const char *pDebugDumpDir, int force)
CDebugDump dd;
dd.Open(pDebugDumpDir);
+ /* Skip remote crashes. */
+ if (dd.Exist(FILENAME_REMOTE))
+ {
+ std::string remote_str;
+ dd.LoadText(FILENAME_REMOTE, remote_str);
+ bool remote = (remote_str.find('1') != std::string::npos);
+ if (remote && !m_bBacktraceRemotes)
+ return;
+ }
+
if (!m_bBacktrace)
return;
@@ -985,6 +996,11 @@ void CAnalyzerCCpp::SetSettings(const map_plugin_settings_t& pSettings)
{
m_bBacktrace = string_to_bool(it->second.c_str());
}
+ it = pSettings.find("BacktraceRemotes");
+ if (it != end)
+ {
+ m_bBacktraceRemotes = string_to_bool(it->second.c_str());
+ }
it = pSettings.find("MemoryMap");
if (it != end)
{
diff --git a/lib/Plugins/CCpp.h b/lib/Plugins/CCpp.h
index afdc2c6e..ce6ba7a5 100644
--- a/lib/Plugins/CCpp.h
+++ b/lib/Plugins/CCpp.h
@@ -30,6 +30,7 @@ class CAnalyzerCCpp : public CAnalyzer
{
private:
bool m_bBacktrace;
+ bool m_bBacktraceRemotes;
bool m_bMemoryMap;
bool m_bInstallDebugInfo;
unsigned m_nDebugInfoCacheMB;
diff --git a/src/Daemon/MiddleWare.cpp b/src/Daemon/MiddleWare.cpp
index 57b29677..8b3e7e39 100644
--- a/src/Daemon/MiddleWare.cpp
+++ b/src/Daemon/MiddleWare.cpp
@@ -659,6 +659,7 @@ static bool is_path_blacklisted(const char *path)
static mw_result_t SavePackageDescriptionToDebugDump(
const char *pExecutable,
const char *cmdline,
+ bool remote,
const char *pDebugDumpDir)
{
std::string package;
@@ -681,7 +682,7 @@ static mw_result_t SavePackageDescriptionToDebugDump(
char *rpm_pkg = GetPackage(pExecutable);
if (rpm_pkg == NULL)
{
- if (g_settings_bProcessUnpackaged)
+ if (g_settings_bProcessUnpackaged || remote)
{
VERB2 log("Crash in unpackaged executable '%s', proceeding without packaging information", pExecutable);
try
@@ -750,7 +751,7 @@ static mw_result_t SavePackageDescriptionToDebugDump(
free(script_name);
}
- if (!knownOrigin && !g_settings_bProcessUnpackaged)
+ if (!knownOrigin && !g_settings_bProcessUnpackaged && !remote)
{
log("Interpreter crashed, but no packaged script detected: '%s'", cmdline);
return MW_PACKAGE_ERROR;
@@ -767,7 +768,7 @@ static mw_result_t SavePackageDescriptionToDebugDump(
log("Blacklisted package '%s'", packageName.c_str());
return MW_BLACKLISTED;
}
- if (g_settings_bOpenGPGCheck)
+ if (g_settings_bOpenGPGCheck && !remote)
{
if (!s_RPM.CheckFingerprint(packageName.c_str()))
{
@@ -965,6 +966,7 @@ mw_result_t SaveDebugDump(const char *pDebugDumpDir,
std::string analyzer;
std::string executable;
std::string cmdline;
+ bool remote = false;
try
{
CDebugDump dd;
@@ -974,6 +976,12 @@ mw_result_t SaveDebugDump(const char *pDebugDumpDir,
dd.LoadText(FILENAME_ANALYZER, analyzer);
dd.LoadText(FILENAME_EXECUTABLE, executable);
dd.LoadText(FILENAME_CMDLINE, cmdline);
+ if (dd.Exist(FILENAME_REMOTE))
+ {
+ std:string remote_str;
+ dd.LoadText(FILENAME_REMOTE, remote_str);
+ remote = (remote_str.find('1') != std::string::npos);
+ }
}
catch (CABRTException& e)
{
@@ -998,7 +1006,7 @@ mw_result_t SaveDebugDump(const char *pDebugDumpDir,
return MW_IN_DB;
}
- mw_result_t res = SavePackageDescriptionToDebugDump(executable.c_str(), cmdline.c_str(), pDebugDumpDir);
+ mw_result_t res = SavePackageDescriptionToDebugDump(executable.c_str(), cmdline.c_str(), remote, pDebugDumpDir);
if (res != MW_OK)
{
return res;