summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/Plugins/Bugzilla.cpp107
-rw-r--r--lib/Plugins/Bugzilla.h3
-rw-r--r--lib/Plugins/Catcut.cpp3
-rw-r--r--lib/Plugins/Catcut.h1
-rw-r--r--lib/Plugins/KerneloopsReporter.cpp4
-rw-r--r--lib/Plugins/KerneloopsReporter.h1
-rw-r--r--lib/Plugins/Logger.cpp3
-rw-r--r--lib/Plugins/Logger.h1
-rw-r--r--lib/Plugins/Mailx.cpp3
-rw-r--r--lib/Plugins/Mailx.h1
-rw-r--r--lib/Plugins/TicketUploader.cpp3
-rw-r--r--lib/Plugins/TicketUploader.h1
-rw-r--r--lib/Utils/Reporter.h1
-rw-r--r--src/Daemon/CommLayerServerDBus.cpp15
-rw-r--r--src/Daemon/CommLayerServerSocket.cpp11
-rw-r--r--src/Daemon/MiddleWare.cpp9
-rw-r--r--src/Daemon/MiddleWare.h1
17 files changed, 142 insertions, 26 deletions
diff --git a/lib/Plugins/Bugzilla.cpp b/lib/Plugins/Bugzilla.cpp
index 84c79347..6a547cf1 100644
--- a/lib/Plugins/Bugzilla.cpp
+++ b/lib/Plugins/Bugzilla.cpp
@@ -39,6 +39,68 @@ static void get_product_and_version(const std::string& pRelease,
std::string& pProduct,
std::string& pVersion);
+map_plugin_settings_t CReporterBugzilla::parse_settings(const map_plugin_settings_t& pSettings)
+{
+ map_plugin_settings_t plugin_settings;
+ map_plugin_settings_t::const_iterator it;
+ map_plugin_settings_t::const_iterator end = pSettings.end();
+
+ std::string BugzillaURL;
+ std::string BugzillaXMLRPC;
+
+ it = pSettings.find("BugzillaURL");
+ if (it != end)
+ {
+ BugzillaURL = it->second;
+ //remove the /xmlrpc.cgi part from old settings
+ //FIXME: can be removed after users are informed about new config format
+ std::string::size_type pos = BugzillaURL.find(XML_RPC_SUFFIX);
+ if (pos != std::string::npos)
+ {
+ BugzillaURL.erase(pos);
+ }
+ //remove the trailing '/'
+ while (BugzillaURL[BugzillaURL.length() - 1] == '/')
+ {
+ BugzillaURL.erase(BugzillaURL.length() - 1);
+ }
+ plugin_settings["BugzillaXMLRPC"] = BugzillaURL + XML_RPC_SUFFIX;
+ plugin_settings["BugzillaURL"] = BugzillaURL;
+ }
+ it = pSettings.find("Login");
+ if (it != end)
+ {
+ plugin_settings["Login"] = it->second;
+ }
+ else
+ {
+ /* if any of the option is not set we use the defaults for everything */
+ plugin_settings.clear();
+ return plugin_settings;
+ }
+ it = pSettings.find("Password");
+ if (it != end)
+ {
+ plugin_settings["Password"] = it->second;
+ }
+ else
+ {
+ plugin_settings.clear();
+ return plugin_settings;
+ }
+ it = pSettings.find("NoSSLVerify");
+ if (it != end)
+ {
+ plugin_settings["NoSSLVerify"] = (it->second == "yes");
+ }
+ else
+ {
+ plugin_settings.clear();
+ return plugin_settings;
+ }
+ VERB1 log("User settings ok, using it instead of defaults");
+ return plugin_settings;
+}
// FIXME: we still leak memmory if this function detects a fault:
// many instances when we leave non-freed or non-xmlrpc_DECREF'ed data behind.
@@ -384,36 +446,61 @@ static void add_attachments(const std::string& pBugId, const map_crash_report_t&
}
}
-std::string CReporterBugzilla::Report(const map_crash_report_t& pCrashReport, const std::string& pArgs)
+std::string CReporterBugzilla::Report(const map_crash_report_t& pCrashReport,
+ const map_plugin_settings_t& pSettings,
+ const std::string& pArgs)
{
int32_t bug_id = -1;
-
+ std::string Login;
+ std::string Password;
+ std::string BugzillaXMLRPC;
+ std::string BugzillaURL;
+ bool NoSSLVerify;
+ map_plugin_settings_t settings = parse_settings(pSettings);
+ /* if parse_settings fails it returns an empty map so we need to use defaults*/
+ if(!settings.empty())
+ {
+ Login = settings["Login"];
+ Password = settings["Password"];
+ BugzillaXMLRPC = settings["BugzillaXMLRPC"];
+ BugzillaURL = settings["BugzillaURL"];
+ NoSSLVerify = settings["NoSSLVerify"] == "yes";
+ }
+ else
+ {
+ Login = m_sLogin;
+ Password = m_sPassword;
+ BugzillaXMLRPC = m_sBugzillaXMLRPC;
+ BugzillaURL = m_sBugzillaURL;
+ NoSSLVerify = m_bNoSSLVerify;
+ }
+
std::string component = pCrashReport.find(FILENAME_COMPONENT)->second[CD_CONTENT];
std::string uuid = pCrashReport.find(CD_UUID)->second[CD_CONTENT];
try
{
- new_xmlrpc_client(m_sBugzillaXMLRPC.c_str(), m_bNoSSLVerify);
+ new_xmlrpc_client(BugzillaXMLRPC.c_str(), NoSSLVerify);
update_client(_("Checking for duplicates..."));
bug_id = check_uuid_in_bugzilla(component.c_str(), uuid.c_str());
update_client(_("Logging into bugzilla..."));
- if ((m_sLogin == "") && (m_sPassword == ""))
+ if ((Login == "") && (Password == ""))
{
VERB3 log("Empty login and password");
throw CABRTException(EXCEP_PLUGIN, std::string(_("Empty login and password. Please check Bugzilla.conf")));
}
- login(m_sLogin.c_str(), m_sPassword.c_str());
+ login(Login.c_str(), Password.c_str());
if (bug_id > 0)
{
update_client(_("Checking CC..."));
- if (!check_cc_and_reporter(bug_id, m_sLogin.c_str()))
+ if (!check_cc_and_reporter(bug_id, Login.c_str()))
{
- add_plus_one_cc(bug_id, m_sLogin.c_str());
+ add_plus_one_cc(bug_id, Login.c_str());
}
destroy_xmlrpc_client();
- return m_sBugzillaURL + "/show_bug.cgi?id="+to_string(bug_id);
+ return BugzillaURL + "/show_bug.cgi?id="+to_string(bug_id);
}
update_client(_("Creating new bug..."));
@@ -433,10 +520,10 @@ std::string CReporterBugzilla::Report(const map_crash_report_t& pCrashReport, co
if (bug_id > 0)
{
- return m_sBugzillaURL + "/show_bug.cgi?id="+to_string(bug_id);
+ return BugzillaURL + "/show_bug.cgi?id="+to_string(bug_id);
}
- return m_sBugzillaURL + "/show_bug.cgi?id=";
+ return BugzillaURL + "/show_bug.cgi?id=";
}
void CReporterBugzilla::SetSettings(const map_plugin_settings_t& pSettings)
diff --git a/lib/Plugins/Bugzilla.h b/lib/Plugins/Bugzilla.h
index 17864650..702eead2 100644
--- a/lib/Plugins/Bugzilla.h
+++ b/lib/Plugins/Bugzilla.h
@@ -14,6 +14,8 @@ class CReporterBugzilla : public CReporter
std::string m_sLogin;
std::string m_sPassword;
std::string m_sAttchmentInBase64;
+
+ map_plugin_settings_t parse_settings(const map_plugin_settings_t& pSettings);
public:
CReporterBugzilla();
@@ -21,6 +23,7 @@ class CReporterBugzilla : public CReporter
virtual void SetSettings(const map_plugin_settings_t& pSettings);
virtual map_plugin_settings_t GetSettings();
virtual std::string Report(const map_crash_report_t& pCrashReport,
+ const map_plugin_settings_t& pSettings,
const std::string& pArgs);
};
diff --git a/lib/Plugins/Catcut.cpp b/lib/Plugins/Catcut.cpp
index c833a577..5f0583f4 100644
--- a/lib/Plugins/Catcut.cpp
+++ b/lib/Plugins/Catcut.cpp
@@ -298,7 +298,8 @@ CReporterCatcut::CReporterCatcut() :
CReporterCatcut::~CReporterCatcut()
{}
-string CReporterCatcut::Report(const map_crash_report_t& pCrashReport, const string& pArgs)
+string CReporterCatcut::Report(const map_crash_report_t& pCrashReport,
+ const map_plugin_settings_t& pSettings, const string& pArgs)
{
update_client(_("Creating new bug..."));
try
diff --git a/lib/Plugins/Catcut.h b/lib/Plugins/Catcut.h
index 69380387..40ef399d 100644
--- a/lib/Plugins/Catcut.h
+++ b/lib/Plugins/Catcut.h
@@ -20,6 +20,7 @@ class CReporterCatcut : public CReporter
virtual map_plugin_settings_t GetSettings();
virtual std::string Report(const map_crash_report_t& pCrashReport,
+ const map_plugin_settings_t& pSettings,
const std::string& pArgs);
};
diff --git a/lib/Plugins/KerneloopsReporter.cpp b/lib/Plugins/KerneloopsReporter.cpp
index 8344b810..c57a1ef8 100644
--- a/lib/Plugins/KerneloopsReporter.cpp
+++ b/lib/Plugins/KerneloopsReporter.cpp
@@ -93,7 +93,9 @@ CKerneloopsReporter::CKerneloopsReporter() :
m_sSubmitURL("http://submit.kerneloops.org/submitoops.php")
{}
-std::string CKerneloopsReporter::Report(const map_crash_report_t& pCrashReport, const std::string& pArgs)
+std::string CKerneloopsReporter::Report(const map_crash_report_t& pCrashReport,
+ const map_plugin_settings_t& pSettings,
+ const std::string& pArgs)
{
int ret = -1;
map_crash_report_t::const_iterator it;
diff --git a/lib/Plugins/KerneloopsReporter.h b/lib/Plugins/KerneloopsReporter.h
index f1b427f8..3c165920 100644
--- a/lib/Plugins/KerneloopsReporter.h
+++ b/lib/Plugins/KerneloopsReporter.h
@@ -43,6 +43,7 @@ class CKerneloopsReporter : public CReporter
virtual void SetSettings(const map_plugin_settings_t& pSettings);
virtual map_plugin_settings_t GetSettings();
virtual std::string Report(const map_crash_report_t& pCrashReport,
+ const map_plugin_settings_t& pSettings,
const std::string& pArgs);
};
diff --git a/lib/Plugins/Logger.cpp b/lib/Plugins/Logger.cpp
index eb9c2404..81787940 100644
--- a/lib/Plugins/Logger.cpp
+++ b/lib/Plugins/Logger.cpp
@@ -53,7 +53,8 @@ map_plugin_settings_t CLogger::GetSettings()
return ret;
}
-std::string CLogger::Report(const map_crash_report_t& pCrashReport, const std::string& pArgs)
+std::string CLogger::Report(const map_crash_report_t& pCrashReport,
+ const map_plugin_settings_t& pSettings, const std::string& pArgs)
{
update_client(_("Creating a report..."));
diff --git a/lib/Plugins/Logger.h b/lib/Plugins/Logger.h
index 60c76e4a..33f957db 100644
--- a/lib/Plugins/Logger.h
+++ b/lib/Plugins/Logger.h
@@ -37,6 +37,7 @@ class CLogger : public CReporter
virtual void SetSettings(const map_plugin_settings_t& pSettings);
virtual map_plugin_settings_t GetSettings();
virtual std::string Report(const map_crash_report_t& pCrashReport,
+ const map_plugin_settings_t& pSettings,
const std::string& pArgs);
};
diff --git a/lib/Plugins/Mailx.cpp b/lib/Plugins/Mailx.cpp
index f7a86fd0..ef3a8d2a 100644
--- a/lib/Plugins/Mailx.cpp
+++ b/lib/Plugins/Mailx.cpp
@@ -118,7 +118,8 @@ void CMailx::SendEmail(const std::string& pSubject, const std::string& pText, co
ExecMailx(atoi(pUID.c_str()), pText);
}
-std::string CMailx::Report(const map_crash_report_t& pCrashReport, const std::string& pArgs)
+std::string CMailx::Report(const map_crash_report_t& pCrashReport,
+ const map_plugin_settings_t& pSettings, const std::string& pArgs)
{
update_client(_("Creating a report..."));
diff --git a/lib/Plugins/Mailx.h b/lib/Plugins/Mailx.h
index fd00bb8b..e3c86e73 100644
--- a/lib/Plugins/Mailx.h
+++ b/lib/Plugins/Mailx.h
@@ -49,6 +49,7 @@ class CMailx : public CReporter
virtual void SetSettings(const map_plugin_settings_t& pSettings);
virtual map_plugin_settings_t GetSettings();
virtual std::string Report(const map_crash_report_t& pCrashReport,
+ const map_plugin_settings_t& pSettings,
const std::string& pArgs);
};
diff --git a/lib/Plugins/TicketUploader.cpp b/lib/Plugins/TicketUploader.cpp
index 69243cd9..179ccc07 100644
--- a/lib/Plugins/TicketUploader.cpp
+++ b/lib/Plugins/TicketUploader.cpp
@@ -218,7 +218,8 @@ void CTicketUploader::SendFile(const std::string& pURL,
}
-string CTicketUploader::Report(const map_crash_report_t& pCrashReport, const std::string& pArgs)
+string CTicketUploader::Report(const map_crash_report_t& pCrashReport,
+ const map_plugin_settings_t& pSettings, const std::string& pArgs)
{
string ret;
update_client(_("Creating an TicketUploader report..."));
diff --git a/lib/Plugins/TicketUploader.h b/lib/Plugins/TicketUploader.h
index 68a29638..92e33872 100644
--- a/lib/Plugins/TicketUploader.h
+++ b/lib/Plugins/TicketUploader.h
@@ -65,6 +65,7 @@ class CTicketUploader : public CReporter
virtual void SetSettings(const map_plugin_settings_t& pSettings);
virtual string Report(const map_crash_report_t& pCrashReport,
+ const map_plugin_settings_t& pSettings,
const std::string& pArgs);
diff --git a/lib/Utils/Reporter.h b/lib/Utils/Reporter.h
index c74a10c3..f2788993 100644
--- a/lib/Utils/Reporter.h
+++ b/lib/Utils/Reporter.h
@@ -41,6 +41,7 @@ class CReporter : public CPlugin
* @retun A message which can be displayed after a report is created.
*/
virtual std::string Report(const map_crash_report_t& pCrashReport,
+ const map_plugin_settings_t& pSettings,
const std::string& pArgs) = 0;
};
diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp
index cc98fc2c..dd904e4f 100644
--- a/src/Daemon/CommLayerServerDBus.cpp
+++ b/src/Daemon/CommLayerServerDBus.cpp
@@ -250,12 +250,10 @@ static int handle_Report(DBusMessage* call, DBusMessage* reply)
if (!user_conf_data.empty())
{
std::string PluginName;
- map_plugin_settings_t plugin_settings;
map_map_string_t::const_iterator it_user_conf_data = user_conf_data.begin();
for (; it_user_conf_data != user_conf_data.end(); it_user_conf_data++)
{
PluginName = it_user_conf_data->first;
- plugin_settings = it_user_conf_data->second;
#if DEBUG
std::cout << "plugin name: " << it_user_conf_data->first;
map_string_t::const_iterator it_plugin_config;
@@ -266,16 +264,16 @@ static int handle_Report(DBusMessage* call, DBusMessage* reply)
std::cout << " key: " << it_plugin_config->first << " value: " << it_plugin_config->second << std::endl;
}
#endif
- g_pPluginManager->SetPluginSettings(PluginName, sender, plugin_settings);
+ // this would overwrite the default settings
+ //g_pPluginManager->SetPluginSettings(PluginName, sender, plugin_settings);
}
}
-//so far, user_conf_data is unused
long unix_uid = get_remote_uid(call);
report_status_t argout1;
try
{
- argout1 = Report(argin1, to_string(unix_uid));
+ argout1 = Report(argin1, user_conf_data, to_string(unix_uid));
}
catch (CABRTException &e)
{
@@ -377,7 +375,12 @@ static int handle_SetPluginSettings(DBusMessage* call, DBusMessage* reply)
long unix_uid = get_remote_uid(call);
VERB1 log("got %s('%s',...) call from uid %ld", "SetPluginSettings", PluginName.c_str(), unix_uid);
- g_pPluginManager->SetPluginSettings(PluginName, to_string(unix_uid), plugin_settings);
+ /* Disabled, as we don't use it, we use only temporary user settings while reporting
+ this method should be used to change the default setting and thus should
+ be protected by polkit
+ */
+ //FIXME: protect with polkit
+// g_pPluginManager->SetPluginSettings(PluginName, to_string(unix_uid), plugin_settings);
send_flush_and_unref(reply);
return 0;
diff --git a/src/Daemon/CommLayerServerSocket.cpp b/src/Daemon/CommLayerServerSocket.cpp
index 6b62928b..7afe4b6e 100644
--- a/src/Daemon/CommLayerServerSocket.cpp
+++ b/src/Daemon/CommLayerServerSocket.cpp
@@ -138,7 +138,9 @@ void CCommLayerServerSocket::ProcessMessage(const std::string& pMessage, GIOChan
{
std::string message = pMessage.substr(sizeof(MESSAGE_REPORT) - 1);
map_crash_report_t report = string_to_crash_report(message);
- Report(report, UID);
+ map_plugin_settings_t plugin_settings;
+ //FIXME: another hack to make this compile
+// Report(report, plugin_settings, UID);
}
else if (!strncmp(pMessage.c_str(), MESSAGE_CREATE_REPORT, sizeof(MESSAGE_CREATE_REPORT) - 1))
{
@@ -227,7 +229,12 @@ vector_crash_infos_t CCommLayerServerSocket::GetCrashInfos(const std::string &pS
report_status_t CCommLayerServerSocket::Report(const map_crash_report_t& pReport, const std::string& pSender)
{
report_status_t rs;
- rs = ::Report(pReport, pSender);
+ //FIXME: a hack to make this compile, but we don't use sockets anyway
+ /* we could probably remove the sockets and rely only on dbus,
+ as it will become mandatory even on servers, but this needs some investigation
+ and more opinions
+ */
+ //rs = ::Report(pReport, pSettings, pSender);
return rs;
}
diff --git a/src/Daemon/MiddleWare.cpp b/src/Daemon/MiddleWare.cpp
index 2fd4f259..932db53d 100644
--- a/src/Daemon/MiddleWare.cpp
+++ b/src/Daemon/MiddleWare.cpp
@@ -273,6 +273,7 @@ void RunAction(const std::string& pActionDir,
void RunActionsAndReporters(const std::string& pDebugDumpDir)
{
vector_pair_string_string_t::iterator it_ar = s_vectorActionsAndReporters.begin();
+ map_plugin_settings_t plugin_settings;
for (; it_ar != s_vectorActionsAndReporters.end(); it_ar++)
{
try
@@ -283,7 +284,7 @@ void RunActionsAndReporters(const std::string& pDebugDumpDir)
map_crash_report_t crashReport;
DebugDumpToCrashReport(pDebugDumpDir, crashReport);
- reporter->Report(crashReport, (*it_ar).second);
+ reporter->Report(crashReport, plugin_settings, (*it_ar).second);
}
else if (g_pPluginManager->GetPluginType((*it_ar).first) == ACTION)
{
@@ -336,7 +337,8 @@ static bool CheckReport(const map_crash_report_t& pCrashReport)
}
report_status_t Report(const map_crash_report_t& pCrashReport,
- const std::string& pUID)
+ map_map_string_t& pSettings,
+ const std::string& pUID)
{
report_status_t ret;
@@ -409,7 +411,8 @@ report_status_t Report(const map_crash_report_t& pCrashReport,
}
}
#endif
- std::string res = reporter->Report(pCrashReport, it_r->second);
+ map_plugin_settings_t plugin_settings = pSettings[pluginName];
+ std::string res = reporter->Report(pCrashReport, plugin_settings, it_r->second);
#if 0 /* Using ~user/.abrt/ is bad wrt security */
if (home != "")
diff --git a/src/Daemon/MiddleWare.h b/src/Daemon/MiddleWare.h
index fab822fe..c78d4d95 100644
--- a/src/Daemon/MiddleWare.h
+++ b/src/Daemon/MiddleWare.h
@@ -93,6 +93,7 @@ void RunActionsAndReporters(const std::string& pDebugDumpDir);
* @return A report status, which reporters ends successfuly with messages.
*/
report_status_t Report(const map_crash_report_t& pCrashReport,
+ map_map_string_t& pSettings,
const std::string& pUID);
/**
* Get debugdump direcotory. If debugdump is not found