summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-12-10 13:55:24 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2009-12-10 13:55:24 +0100
commitb07c8d78cbad077ea0596b90b370e2db0fe8b577 (patch)
tree4835acd8741a392833fc2969ec512b21c3f39584 /src
parentfc2c5e2f02e6da00e27d68a83277a61efdcc9f83 (diff)
downloadabrt-b07c8d78cbad077ea0596b90b370e2db0fe8b577.tar.gz
abrt-b07c8d78cbad077ea0596b90b370e2db0fe8b577.tar.xz
abrt-b07c8d78cbad077ea0596b90b370e2db0fe8b577.zip
make "abrt-cli --delete randomuuid" report that deletion failed. closes bug 59
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'src')
-rw-r--r--src/CLI/ABRTSocket.h2
-rw-r--r--src/CLI/CLI.cpp9
-rw-r--r--src/CLI/dbus.cpp58
-rw-r--r--src/CLI/dbus.h2
-rw-r--r--src/Daemon/CommLayerServerDBus.cpp32
-rw-r--r--src/Daemon/CrashWatcher.cpp6
-rw-r--r--src/Daemon/CrashWatcher.h2
7 files changed, 71 insertions, 40 deletions
diff --git a/src/CLI/ABRTSocket.h b/src/CLI/ABRTSocket.h
index 536e4b5..c3a63e5 100644
--- a/src/CLI/ABRTSocket.h
+++ b/src/CLI/ABRTSocket.h
@@ -23,7 +23,7 @@ class CABRTSocket
vector_crash_infos_t GetCrashInfos();
map_crash_report_t CreateReport(const char *pUUID);
void Report(const map_crash_report_t& pReport);
- void DeleteDebugDump(const char *pUUID);
+ int32_t DeleteDebugDump(const char *pUUID);
};
#endif /* ABRTSOCKET_H_ */
diff --git a/src/CLI/CLI.cpp b/src/CLI/CLI.cpp
index ac686ba..1f7e543 100644
--- a/src/CLI/CLI.cpp
+++ b/src/CLI/CLI.cpp
@@ -183,6 +183,7 @@ int main(int argc, char** argv)
ABRTDaemon.Connect(VAR_RUN"/abrt.socket");
#endif
+ int exitcode = 0;
switch (op)
{
case OPT_GET_LIST:
@@ -200,7 +201,11 @@ int main(int argc, char** argv)
break;
case OPT_DELETE:
{
- call_DeleteDebugDump(uuid);
+ if (call_DeleteDebugDump(uuid) != 0)
+ {
+ log("Can't delete debug dump with UUID '%s'", uuid);
+ exitcode = 1;
+ }
break;
}
}
@@ -209,5 +214,5 @@ int main(int argc, char** argv)
ABRTDaemon.Disconnect();
#endif
- return 0;
+ return exitcode;
}
diff --git a/src/CLI/dbus.cpp b/src/CLI/dbus.cpp
index 2da9d74..f25165b 100644
--- a/src/CLI/dbus.cpp
+++ b/src/CLI/dbus.cpp
@@ -106,41 +106,45 @@ static DBusMessage* send_get_reply_and_unref(DBusMessage* msg)
vector_crash_infos_t call_GetCrashInfos()
{
- DBusMessage* msg = new_call_msg("GetCrashInfos");
+ DBusMessage* msg = new_call_msg(__func__ + 5);
DBusMessage *reply = send_get_reply_and_unref(msg);
- vector_crash_infos_t argout;
DBusMessageIter in_iter;
dbus_message_iter_init(reply, &in_iter);
+
+ vector_crash_infos_t argout;
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");
+ error_msg_and_die("dbus call %s: return type mismatch", __func__ + 5);
+
dbus_message_unref(reply);
return argout;
}
map_crash_report_t call_CreateReport(const char* uuid)
{
- DBusMessage* msg = new_call_msg("CreateReport");
+ DBusMessage* msg = new_call_msg(__func__ + 5);
dbus_message_append_args(msg,
DBUS_TYPE_STRING, &uuid,
DBUS_TYPE_INVALID);
DBusMessage *reply = send_get_reply_and_unref(msg);
- map_crash_report_t argout;
DBusMessageIter in_iter;
dbus_message_iter_init(reply, &in_iter);
+
+ map_crash_report_t argout;
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", "CreateReport");
+ error_msg_and_die("dbus call %s: return type mismatch", __func__ + 5);
+
dbus_message_unref(reply);
return argout;
}
void call_Report(const map_crash_report_t& report)
{
- DBusMessage* msg = new_call_msg("Report");
+ DBusMessage* msg = new_call_msg(__func__ + 5);
DBusMessageIter out_iter;
dbus_message_iter_init_append(msg, &out_iter);
store_val(&out_iter, report);
@@ -152,31 +156,42 @@ void call_Report(const map_crash_report_t& report)
dbus_message_unref(reply);
}
-void call_DeleteDebugDump(const char* uuid)
+int32_t call_DeleteDebugDump(const char* uuid)
{
- DBusMessage* msg = new_call_msg("DeleteDebugDump");
+ DBusMessage* msg = new_call_msg(__func__ + 5);
dbus_message_append_args(msg,
DBUS_TYPE_STRING, &uuid,
DBUS_TYPE_INVALID);
DBusMessage *reply = send_get_reply_and_unref(msg);
+ DBusMessageIter in_iter;
+ dbus_message_iter_init(reply, &in_iter);
+
+ int32_t result;
+ int r = load_val(&in_iter, result);
+ if (r != ABRT_DBUS_LAST_FIELD) /* more values present, or bad type */
+ error_msg_and_die("dbus call %s: return type mismatch", __func__ + 5);
+
dbus_message_unref(reply);
+ return result;
}
vector_map_string_t call_GetPluginsInfo()
{
- DBusMessage *msg = new_call_msg("GetPluginsInfo");
- DBusMessage *reply = send_get_reply_and_unref(msg);
-
- vector_map_string_t argout;
- DBusMessageIter in_iter;
- 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 GetPluginsInfo: return type mismatch");
- dbus_message_unref(reply);
- return argout;
+ DBusMessage *msg = new_call_msg(__func__ + 5);
+ DBusMessage *reply = send_get_reply_and_unref(msg);
+
+ DBusMessageIter in_iter;
+ dbus_message_iter_init(reply, &in_iter);
+
+ vector_map_string_t argout;
+ 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", __func__ + 5);
+
+ dbus_message_unref(reply);
+ return argout;
}
void handle_dbus_err(bool error_flag, DBusError *err)
@@ -191,6 +206,7 @@ void handle_dbus_err(bool error_flag, DBusError *err)
return;
error_msg_and_die(
"error requesting DBus name %s, possible reasons: "
- "abrt run by non-root; dbus config is incorrect",
+ "abrt run by non-root; dbus config is incorrect; "
+ "or dbus daemon needs to be restarted to reload dbus config",
ABRTD_DBUS_NAME);
}
diff --git a/src/CLI/dbus.h b/src/CLI/dbus.h
index 48d391e..f39f538 100644
--- a/src/CLI/dbus.h
+++ b/src/CLI/dbus.h
@@ -26,7 +26,7 @@ extern DBusConnection* s_dbus_conn;
extern vector_crash_infos_t call_GetCrashInfos();
extern map_crash_report_t call_CreateReport(const char *uuid);
extern void call_Report(const map_crash_report_t& report);
-extern void call_DeleteDebugDump(const char* uuid);
+extern int32_t call_DeleteDebugDump(const char* uuid);
/* Gets basic data about all installed plugins.
*/
diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp
index 7c2d465..9222c59 100644
--- a/src/Daemon/CommLayerServerDBus.cpp
+++ b/src/Daemon/CommLayerServerDBus.cpp
@@ -135,9 +135,9 @@ static int handle_GetCrashInfos(DBusMessage* call, DBusMessage* reply)
long unix_uid = get_remote_uid(call);
vector_crash_infos_t argout1 = GetCrashInfos(to_string(unix_uid).c_str());
- DBusMessageIter iter;
- dbus_message_iter_init_append(reply, &iter);
- store_val(&iter, argout1);
+ DBusMessageIter out_iter;
+ dbus_message_iter_init_append(reply, &out_iter);
+ store_val(&out_iter, argout1);
send_flush_and_unref(reply);
return 0;
@@ -313,7 +313,11 @@ static int handle_DeleteDebugDump(DBusMessage* call, DBusMessage* reply)
}
long unix_uid = get_remote_uid(call);
- DeleteDebugDump(argin1, to_string(unix_uid).c_str());
+ int32_t result = DeleteDebugDump(argin1, to_string(unix_uid).c_str());
+
+ DBusMessageIter out_iter;
+ dbus_message_iter_init_append(reply, &out_iter);
+ store_val(&out_iter, result);
send_flush_and_unref(reply);
return 0;
@@ -323,9 +327,9 @@ static int handle_GetPluginsInfo(DBusMessage* call, DBusMessage* reply)
{
vector_map_string_t plugins_info = g_pPluginManager->GetPluginsInfo();
- DBusMessageIter iter;
- dbus_message_iter_init_append(reply, &iter);
- store_val(&iter, plugins_info);
+ DBusMessageIter out_iter;
+ dbus_message_iter_init_append(reply, &out_iter);
+ store_val(&out_iter, plugins_info);
send_flush_and_unref(reply);
return 0;
@@ -348,9 +352,10 @@ static int handle_GetPluginSettings(DBusMessage* call, DBusMessage* reply)
VERB1 log("got %s('%s') call from uid %ld", "GetPluginSettings", PluginName, unix_uid);
map_plugin_settings_t plugin_settings = g_pPluginManager->GetPluginSettings(PluginName, to_string(unix_uid).c_str());
- DBusMessageIter iter;
- dbus_message_iter_init_append(reply, &iter);
- store_val(&iter, plugin_settings);
+ DBusMessageIter out_iter;
+ dbus_message_iter_init_append(reply, &out_iter);
+ store_val(&out_iter, plugin_settings);
+
send_flush_and_unref(reply);
return 0;
}
@@ -432,9 +437,10 @@ static int handle_GetSettings(DBusMessage* call, DBusMessage* reply)
{
map_abrt_settings_t result = GetSettings();
- DBusMessageIter iter;
- dbus_message_iter_init_append(reply, &iter);
- store_val(&iter, result);
+ DBusMessageIter out_iter;
+ dbus_message_iter_init_append(reply, &out_iter);
+ store_val(&out_iter, result);
+
send_flush_and_unref(reply);
return 0;
}
diff --git a/src/Daemon/CrashWatcher.cpp b/src/Daemon/CrashWatcher.cpp
index 3684d60..88c058b 100644
--- a/src/Daemon/CrashWatcher.cpp
+++ b/src/Daemon/CrashWatcher.cpp
@@ -193,7 +193,7 @@ int CreateReportThread(const char* pUUID, const char* pUID, int force, const cha
/* Remove dump dir and its DB record */
-void DeleteDebugDump(const char *pUUID, const char *pUID)
+int DeleteDebugDump(const char *pUUID, const char *pUID)
{
try
{
@@ -205,12 +205,16 @@ void DeleteDebugDump(const char *pUUID, const char *pUID)
const char *dump_dir = row.m_sDebugDumpDir.c_str();
if (dump_dir[0] != '\0')
+ {
delete_debug_dump_dir(dump_dir);
+ return 0; /* success */
+ }
}
catch (CABRTException& e)
{
error_msg("%s", e.what());
}
+ return -1; /* failure */
}
void DeleteDebugDump_by_dir(const char *dump_dir)
diff --git a/src/Daemon/CrashWatcher.h b/src/Daemon/CrashWatcher.h
index a806436..8d56c4e 100644
--- a/src/Daemon/CrashWatcher.h
+++ b/src/Daemon/CrashWatcher.h
@@ -51,7 +51,7 @@ class CCrashWatcher
vector_crash_infos_t GetCrashInfos(const char *pUID);
int CreateReportThread(const char* pUUID, const char* pUID, int force, const char* pSender);
map_crash_report_t CreateReport(const char* pUUID, const char* pUID, int force);
-void DeleteDebugDump(const char *pUUID, const char *pUID);
+int DeleteDebugDump(const char *pUUID, const char *pUID);
void DeleteDebugDump_by_dir(const char *dump_dir);
#endif