summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-09-24 16:43:31 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2009-09-24 16:43:31 +0200
commit42da1ce16cd602b8387a4672cd42b0799a1a1284 (patch)
tree76efdd140ea256457924570dff50ce562f980cd4 /src
parenteff2909c3bda95c32b30726685988d357cf4a320 (diff)
downloadabrt-42da1ce16cd602b8387a4672cd42b0799a1a1284.tar.gz
abrt-42da1ce16cd602b8387a4672cd42b0799a1a1284.tar.xz
abrt-42da1ce16cd602b8387a4672cd42b0799a1a1284.zip
abrtd: add an optional 2nd parameter to Report dbus call
Also, simplified dbus code a bit. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'src')
-rw-r--r--src/Applet/Applet.cpp21
-rw-r--r--src/CLI/CLI.cpp8
-rw-r--r--src/Daemon/CommLayerServerDBus.cpp145
-rw-r--r--src/Daemon/Daemon.cpp7
4 files changed, 70 insertions, 111 deletions
diff --git a/src/Applet/Applet.cpp b/src/Applet/Applet.cpp
index 4d46e2d7..9d7be5fc 100644
--- a/src/Applet/Applet.cpp
+++ b/src/Applet/Applet.cpp
@@ -45,12 +45,7 @@ static void Crash(DBusMessage* signal)
{
int r;
DBusMessageIter in_iter;
- if (!dbus_message_iter_init(signal, &in_iter))
- {
- /* signal has no parameters */
- error_msg("dbus signal %s: parameter type mismatch", __func__);
- return;
- }
+ dbus_message_iter_init(signal, &in_iter);
const char* progname;
r = load_val(&in_iter, progname);
if (r != ABRT_DBUS_MORE_FIELDS)
@@ -84,12 +79,7 @@ static void QuotaExceed(DBusMessage* signal)
{
int r;
DBusMessageIter in_iter;
- if (!dbus_message_iter_init(signal, &in_iter))
- {
- /* signal has no parameters */
- error_msg("dbus signal %s: parameter type mismatch", __func__);
- return;
- }
+ dbus_message_iter_init(signal, &in_iter);
const char* str;
r = load_val(&in_iter, str);
if (r != ABRT_DBUS_LAST_FIELD)
@@ -108,12 +98,7 @@ static void NameOwnerChanged(DBusMessage* signal)
{
int r;
DBusMessageIter in_iter;
- if (!dbus_message_iter_init(signal, &in_iter))
- {
- /* signal has no parameters */
- error_msg("dbus signal %s: parameter type mismatch", __func__);
- return;
- }
+ dbus_message_iter_init(signal, &in_iter);
const char* name;
r = load_val(&in_iter, name);
if (r != ABRT_DBUS_MORE_FIELDS)
diff --git a/src/CLI/CLI.cpp b/src/CLI/CLI.cpp
index 1fd09301..3c38508b 100644
--- a/src/CLI/CLI.cpp
+++ b/src/CLI/CLI.cpp
@@ -92,8 +92,7 @@ static vector_crash_infos_t call_GetCrashInfos()
vector_crash_infos_t argout;
DBusMessageIter in_iter;
- if (!dbus_message_iter_init(reply, &in_iter)) /* no values */
- error_msg_and_die("dbus call %s: return type mismatch", "GetCrashInfos");
+ dbus_message_iter_init(reply, &in_iter);
int r = load_val(&in_iter, argout);
if (r != ABRT_DBUS_LAST_FIELD) /* more values present, or bad type */
error_msg_and_die("dbus call %s: return type mismatch", "GetCrashInfos");
@@ -103,6 +102,8 @@ static vector_crash_infos_t call_GetCrashInfos()
static map_crash_report_t call_CreateReport(const char* uuid)
{
+ /* Yes, call name is not "CreateReport" but "GetJobResult".
+ * We need to clean up the names one day. */
DBusMessage* msg = new_call_msg("GetJobResult");
dbus_message_append_args(msg,
DBUS_TYPE_STRING, &uuid,
@@ -112,8 +113,7 @@ static map_crash_report_t call_CreateReport(const char* uuid)
map_crash_report_t argout;
DBusMessageIter in_iter;
- if (!dbus_message_iter_init(reply, &in_iter)) /* no values */
- error_msg_and_die("dbus call %s: return type mismatch", "GetJobResult");
+ dbus_message_iter_init(reply, &in_iter);
int r = load_val(&in_iter, argout);
if (r != ABRT_DBUS_LAST_FIELD) /* more values present, or bad type */
error_msg_and_die("dbus call %s: return type mismatch", "GetJobResult");
diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp
index f710fd9f..7ff5972f 100644
--- a/src/Daemon/CommLayerServerDBus.cpp
+++ b/src/Daemon/CommLayerServerDBus.cpp
@@ -52,7 +52,7 @@ void CCommLayerServerDBus::QuotaExceed(const char* str)
dbus_message_append_args(msg,
DBUS_TYPE_STRING, &str,
DBUS_TYPE_INVALID);
- VERB2 log("Quota exceeded");
+ VERB2 log("Sending signal QuotaExceed('%s')", str);
send_flush_and_unref(msg);
}
@@ -126,7 +126,6 @@ static long get_remote_uid(DBusMessage* call, const char** ppSender = NULL)
static int handle_GetCrashInfos(DBusMessage* call, DBusMessage* reply)
{
long unix_uid = get_remote_uid(call);
- VERB1 log("got %s() call from uid %ld", "GetCrashInfos", unix_uid);
vector_crash_infos_t argout1 = GetCrashInfos(to_string(unix_uid));
DBusMessageIter iter;
@@ -139,24 +138,19 @@ static int handle_GetCrashInfos(DBusMessage* call, DBusMessage* reply)
static int handle_CreateReport(DBusMessage* call, DBusMessage* reply)
{
- const char* pUUID;
+ int r;
DBusMessageIter in_iter;
- if (!dbus_message_iter_init(call, &in_iter))
- {
- error_msg("dbus call %s: no parameters", "CreateReport");
- return -1;
- }
- int r = load_val(&in_iter, pUUID);
+ dbus_message_iter_init(call, &in_iter);
+ const char* pUUID;
+ r = load_val(&in_iter, pUUID);
if (r != ABRT_DBUS_LAST_FIELD)
{
- if (r == ABRT_DBUS_MORE_FIELDS)
- error_msg("dbus call %s: extra parameters", "CreateReport");
+ error_msg("dbus call %s: parameter type mismatch", __func__ + 7);
return -1;
}
const char* sender;
long unix_uid = get_remote_uid(call, &sender);
- VERB1 log("got %s('%s') call from sender '%s' uid %ld", "CreateReport", pUUID, sender, unix_uid);
if (CreateReportThread(pUUID, to_string(unix_uid).c_str(), sender) != 0)
return -1; /* can't create thread (err msg is already logged) */
@@ -170,23 +164,18 @@ static int handle_CreateReport(DBusMessage* call, DBusMessage* reply)
static int handle_GetJobResult(DBusMessage* call, DBusMessage* reply)
{
- const char* pUUID;
+ int r;
DBusMessageIter in_iter;
- if (!dbus_message_iter_init(call, &in_iter))
- {
- error_msg("dbus call %s: no parameters", "GetJobResult");
- return -1;
- }
- int r = load_val(&in_iter, pUUID);
+ dbus_message_iter_init(call, &in_iter);
+ const char* pUUID;
+ r = load_val(&in_iter, pUUID);
if (r != ABRT_DBUS_LAST_FIELD)
{
- if (r == ABRT_DBUS_MORE_FIELDS)
- error_msg("dbus call %s: extra parameters", "GetJobResult");
+ error_msg("dbus call %s: parameter type mismatch", __func__ + 7);
return -1;
}
long unix_uid = get_remote_uid(call);
- VERB1 log("got %s('%s') call from uid %ld", "GetJobResult", pUUID, unix_uid);
map_crash_report_t report = GetJobResult(pUUID, to_string(unix_uid).c_str());
DBusMessageIter out_iter;
@@ -199,23 +188,30 @@ static int handle_GetJobResult(DBusMessage* call, DBusMessage* reply)
static int handle_Report(DBusMessage* call, DBusMessage* reply)
{
- map_crash_report_t argin1;
+ int r;
DBusMessageIter in_iter;
- if (!dbus_message_iter_init(call, &in_iter))
+ dbus_message_iter_init(call, &in_iter);
+ map_crash_report_t argin1;
+ r = load_val(&in_iter, argin1);
+ if (r == ABRT_DBUS_ERROR)
{
- error_msg("dbus call %s: no parameters", "Report");
+ error_msg("dbus call %s: parameter type mismatch", __func__ + 7);
return -1;
}
- int r = load_val(&in_iter, argin1);
- if (r != ABRT_DBUS_LAST_FIELD)
+ /* Second parameter is optional */
+ map_map_string_t user_conf_data;
+ if (r == ABRT_DBUS_MORE_FIELDS)
{
- if (r == ABRT_DBUS_MORE_FIELDS)
- error_msg("dbus call %s: extra parameters", "Report");
- return -1;
+ r = load_val(&in_iter, user_conf_data);
+ if (r != ABRT_DBUS_LAST_FIELD)
+ {
+ error_msg("dbus call %s: parameter type mismatch", __func__ + 7);
+ return -1;
+ }
}
+//so far, user_conf_data is unused
long unix_uid = get_remote_uid(call);
- VERB1 log("got %s(...) call from uid %ld", "Report", unix_uid);
report_status_t argout1;
try
{
@@ -241,23 +237,18 @@ static int handle_Report(DBusMessage* call, DBusMessage* reply)
static int handle_DeleteDebugDump(DBusMessage* call, DBusMessage* reply)
{
- const char* argin1;
+ int r;
DBusMessageIter in_iter;
- if (!dbus_message_iter_init(call, &in_iter))
- {
- error_msg("dbus call %s: no parameters", "DeleteDebugDump");
- return -1;
- }
- int r = load_val(&in_iter, argin1);
+ dbus_message_iter_init(call, &in_iter);
+ const char* argin1;
+ r = load_val(&in_iter, argin1);
if (r != ABRT_DBUS_LAST_FIELD)
{
- if (r == ABRT_DBUS_MORE_FIELDS)
- error_msg("dbus call %s: extra parameters", "DeleteDebugDump");
+ error_msg("dbus call %s: parameter type mismatch", __func__ + 7);
return -1;
}
long unix_uid = get_remote_uid(call);
- VERB1 log("got %s('%s') call from uid %ld", "DeleteDebugDump", argin1, unix_uid);
bool argout1 = DeleteDebugDump(argin1, to_string(unix_uid));
dbus_message_append_args(reply,
@@ -282,18 +273,14 @@ static int handle_GetPluginsInfo(DBusMessage* call, DBusMessage* reply)
static int handle_GetPluginSettings(DBusMessage* call, DBusMessage* reply)
{
- const char* PluginName;
+ int r;
DBusMessageIter in_iter;
- if (!dbus_message_iter_init(call, &in_iter))
- {
- error_msg("dbus call %s: no parameters", "GetPluginSettings");
- return -1;
- }
- int r = load_val(&in_iter, PluginName);
+ dbus_message_iter_init(call, &in_iter);
+ const char* PluginName;
+ r = load_val(&in_iter, PluginName);
if (r != ABRT_DBUS_LAST_FIELD)
{
- if (r == ABRT_DBUS_MORE_FIELDS)
- error_msg("dbus call %s: extra parameters", "GetPluginSettings");
+ error_msg("dbus call %s: parameter type mismatch", __func__ + 7);
return -1;
}
@@ -310,26 +297,21 @@ static int handle_GetPluginSettings(DBusMessage* call, DBusMessage* reply)
static int handle_SetPluginSettings(DBusMessage* call, DBusMessage* reply)
{
+ int r;
DBusMessageIter in_iter;
- if (!dbus_message_iter_init(call, &in_iter))
- {
- error_msg("dbus call %s: no parameters", "SetPluginSettings");
- return -1;
- }
+ dbus_message_iter_init(call, &in_iter);
std::string PluginName;
- int r = load_val(&in_iter, PluginName);
+ r = load_val(&in_iter, PluginName);
if (r != ABRT_DBUS_MORE_FIELDS)
{
- if (r == ABRT_DBUS_LAST_FIELD)
- error_msg("dbus call %s: too few parameters", "SetPluginSettings");
+ error_msg("dbus call %s: parameter type mismatch", __func__ + 7);
return -1;
}
map_plugin_settings_t plugin_settings;
r = load_val(&in_iter, plugin_settings);
if (r != ABRT_DBUS_LAST_FIELD)
{
- if (r == ABRT_DBUS_MORE_FIELDS)
- error_msg("dbus call %s: extra parameters", "SetPluginSettings");
+ error_msg("dbus call %s: parameter type mismatch", __func__ + 7);
return -1;
}
@@ -343,18 +325,14 @@ static int handle_SetPluginSettings(DBusMessage* call, DBusMessage* reply)
static int handle_RegisterPlugin(DBusMessage* call, DBusMessage* reply)
{
+ int r;
DBusMessageIter in_iter;
- if (!dbus_message_iter_init(call, &in_iter))
- {
- error_msg("dbus call %s: no parameters", "RegisterPlugin");
- return -1;
- }
+ dbus_message_iter_init(call, &in_iter);
const char* PluginName;
- int r = load_val(&in_iter, PluginName);
+ r = load_val(&in_iter, PluginName);
if (r != ABRT_DBUS_LAST_FIELD)
{
- if (r == ABRT_DBUS_MORE_FIELDS)
- error_msg("dbus call %s: extra parameters", "RegisterPlugin");
+ error_msg("dbus call %s: parameter type mismatch", __func__ + 7);
return -1;
}
@@ -367,18 +345,14 @@ static int handle_RegisterPlugin(DBusMessage* call, DBusMessage* reply)
static int handle_UnRegisterPlugin(DBusMessage* call, DBusMessage* reply)
{
+ int r;
DBusMessageIter in_iter;
- if (!dbus_message_iter_init(call, &in_iter))
- {
- error_msg("dbus call %s: no parameters", "UnRegisterPlugin");
- return -1;
- }
+ dbus_message_iter_init(call, &in_iter);
const char* PluginName;
- int r = load_val(&in_iter, PluginName);
+ r = load_val(&in_iter, PluginName);
if (r != ABRT_DBUS_LAST_FIELD)
{
- if (r == ABRT_DBUS_MORE_FIELDS)
- error_msg("dbus call %s: extra parameters", "UnRegisterPlugin");
+ error_msg("dbus call %s: parameter type mismatch", __func__ + 7);
return -1;
}
@@ -402,18 +376,14 @@ static int handle_GetSettings(DBusMessage* call, DBusMessage* reply)
static int handle_SetSettings(DBusMessage* call, DBusMessage* reply)
{
+ int r;
DBusMessageIter in_iter;
- if (!dbus_message_iter_init(call, &in_iter))
- {
- error_msg("dbus call %s: no parameters", "SetSettings");
- return -1;
- }
+ dbus_message_iter_init(call, &in_iter);
map_abrt_settings_t param1;
- int r = load_val(&in_iter, param1);
+ r = load_val(&in_iter, param1);
if (r != ABRT_DBUS_LAST_FIELD)
{
- if (r == ABRT_DBUS_MORE_FIELDS)
- error_msg("dbus call %s: extra parameters", "SetSettings");
+ error_msg("dbus call %s: parameter type mismatch", __func__ + 7);
return -1;
}
@@ -433,7 +403,7 @@ static int handle_SetSettings(DBusMessage* call, DBusMessage* reply)
static DBusHandlerResult message_received(DBusConnection* conn, DBusMessage* msg, void* data)
{
const char* member = dbus_message_get_member(msg);
- log("%s(method:'%s')", __func__, member);
+ VERB1 log("%s(method:'%s')", __func__, member);
set_client_name(dbus_message_get_sender(msg));
@@ -471,11 +441,14 @@ static DBusHandlerResult message_received(DBusConnection* conn, DBusMessage* msg
// "</node>\n"
// Apart from a warning from abrt-gui, just sending error back works as well.
// NB2: we may want to handle "Disconnected" here too.
- if (r < 0) /* error */
+
+ if (r < 0)
{
+ /* handle_XXX experienced an error (and did not send any reply) */
dbus_message_unref(reply);
if (dbus_message_get_type(msg) == DBUS_MESSAGE_TYPE_METHOD_CALL)
{
+ /* Create and send error reply */
reply = dbus_message_new_error(msg, DBUS_ERROR_FAILED, "not supported");
if (!reply)
die_out_of_memory();
diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp
index ade419ae..6445b6c3 100644
--- a/src/Daemon/Daemon.cpp
+++ b/src/Daemon/Daemon.cpp
@@ -56,9 +56,10 @@
* After it returns, when report creation thread has finished,
* JobDone(client_dbus_ID,UUID) dbus signal is emitted.
* - GetJobResult(UUID): returns map_crash_report_t (map_vector_string_t)
- * - Report(map_crash_report_t (map_vector_string_t)):
- * "Please report this crash": calls Report() of all registered reporter plugins
- * Returns report_status_t (map_vector_string_t) - the status of each call
+ * - Report(map_crash_report_t (map_vector_string_t[, map_map_string_t])):
+ * "Please report this crash": calls Report() of all registered reporter plugins.
+ * Returns report_status_t (map_vector_string_t) - the status of each call.
+ * 2nd parameter is the contents of user's abrt.conf.
* - DeleteDebugDump(UUID): delete corresponding /var/cache/abrt/DIR. Returns bool
* - GetPluginsInfo(): returns vector_map_string_t
* - GetPluginSettings(PluginName): returns map_plugin_settings_t (map_string_t)