|
Matej Habrnal |
fa1950 |
From 6ba08b9f28343da5c6102833d1a5062475f09468 Mon Sep 17 00:00:00 2001
|
|
Matej Habrnal |
fa1950 |
From: Jakub Filak <jfilak@redhat.com>
|
|
Matej Habrnal |
fa1950 |
Date: Tue, 24 Mar 2015 19:03:52 +0100
|
|
Matej Habrnal |
fa1950 |
Subject: [PATCH] libabrt: add new function fetching full problem data over
|
|
Matej Habrnal |
fa1950 |
DBus
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
This function is required because users may not have direct file system
|
|
Matej Habrnal |
fa1950 |
access to the problem data.
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
Signed-off-by: Jakub Filak <jfilak@redhat.com>
|
|
Matej Habrnal |
fa1950 |
---
|
|
Matej Habrnal |
fa1950 |
src/include/libabrt.h | 7 +++++++
|
|
Matej Habrnal |
fa1950 |
src/lib/problem_api_dbus.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
|
|
Matej Habrnal |
fa1950 |
2 files changed, 51 insertions(+)
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
diff --git a/src/include/libabrt.h b/src/include/libabrt.h
|
|
Matej Habrnal |
fa1950 |
index 37704dd..5a019fb 100644
|
|
Matej Habrnal |
fa1950 |
--- a/src/include/libabrt.h
|
|
Matej Habrnal |
fa1950 |
+++ b/src/include/libabrt.h
|
|
Matej Habrnal |
fa1950 |
@@ -169,6 +169,13 @@ int delete_problem_dirs_over_dbus(const GList *problem_dir_paths);
|
|
Matej Habrnal |
fa1950 |
problem_data_t *get_problem_data_dbus(const char *problem_dir_path);
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
/**
|
|
Matej Habrnal |
fa1950 |
+ @brief Fetches full problem data for specified problem id
|
|
Matej Habrnal |
fa1950 |
+
|
|
Matej Habrnal |
fa1950 |
+ @return problem_data_t or ERR_PTR on failure
|
|
Matej Habrnal |
fa1950 |
+*/
|
|
Matej Habrnal |
fa1950 |
+problem_data_t *get_full_problem_data_over_dbus(const char *problem_dir_path);
|
|
Matej Habrnal |
fa1950 |
+
|
|
Matej Habrnal |
fa1950 |
+/**
|
|
Matej Habrnal |
fa1950 |
@brief Fetches all problems from problem database
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
@param authorize If set to true will try to fetch even problems owned by other users (will require root authorization over policy kit)
|
|
Matej Habrnal |
fa1950 |
diff --git a/src/lib/problem_api_dbus.c b/src/lib/problem_api_dbus.c
|
|
Matej Habrnal |
fa1950 |
index 2d77898..549175c 100644
|
|
Matej Habrnal |
fa1950 |
--- a/src/lib/problem_api_dbus.c
|
|
Matej Habrnal |
fa1950 |
+++ b/src/lib/problem_api_dbus.c
|
|
Matej Habrnal |
fa1950 |
@@ -183,3 +183,47 @@ GList *get_problems_over_dbus(bool authorize)
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
return list;
|
|
Matej Habrnal |
fa1950 |
}
|
|
Matej Habrnal |
fa1950 |
+
|
|
Matej Habrnal |
fa1950 |
+problem_data_t *get_full_problem_data_over_dbus(const char *problem_dir_path)
|
|
Matej Habrnal |
fa1950 |
+{
|
|
Matej Habrnal |
fa1950 |
+ INITIALIZE_LIBABRT();
|
|
Matej Habrnal |
fa1950 |
+
|
|
Matej Habrnal |
fa1950 |
+ GDBusProxy *proxy = get_dbus_proxy();
|
|
Matej Habrnal |
fa1950 |
+ if (!proxy)
|
|
Matej Habrnal |
fa1950 |
+ return ERR_PTR;
|
|
Matej Habrnal |
fa1950 |
+
|
|
Matej Habrnal |
fa1950 |
+ GError *error = NULL;
|
|
Matej Habrnal |
fa1950 |
+ GVariant *result = g_dbus_proxy_call_sync(proxy,
|
|
Matej Habrnal |
fa1950 |
+ "GetProblemData",
|
|
Matej Habrnal |
fa1950 |
+ g_variant_new("(s)", problem_dir_path),
|
|
Matej Habrnal |
fa1950 |
+ G_DBUS_CALL_FLAGS_NONE,
|
|
Matej Habrnal |
fa1950 |
+ -1,
|
|
Matej Habrnal |
fa1950 |
+ NULL,
|
|
Matej Habrnal |
fa1950 |
+ &error);
|
|
Matej Habrnal |
fa1950 |
+
|
|
Matej Habrnal |
fa1950 |
+ if (error)
|
|
Matej Habrnal |
fa1950 |
+ {
|
|
Matej Habrnal |
fa1950 |
+ error_msg(_("Can't get problem data from abrt-dbus: %s"), error->message);
|
|
Matej Habrnal |
fa1950 |
+ g_error_free(error);
|
|
Matej Habrnal |
fa1950 |
+ return ERR_PTR;
|
|
Matej Habrnal |
fa1950 |
+ }
|
|
Matej Habrnal |
fa1950 |
+
|
|
Matej Habrnal |
fa1950 |
+ GVariantIter *iter = NULL;
|
|
Matej Habrnal |
fa1950 |
+ g_variant_get(result, "(a{s(its)})", &iter);
|
|
Matej Habrnal |
fa1950 |
+
|
|
Matej Habrnal |
fa1950 |
+ gchar *name = NULL;
|
|
Matej Habrnal |
fa1950 |
+ gint flags;
|
|
Matej Habrnal |
fa1950 |
+ gulong size;
|
|
Matej Habrnal |
fa1950 |
+ gchar *value = NULL;
|
|
Matej Habrnal |
fa1950 |
+
|
|
Matej Habrnal |
fa1950 |
+ problem_data_t *pd = problem_data_new();
|
|
Matej Habrnal |
fa1950 |
+ while (g_variant_iter_loop(iter, "{&s(it&s)}", &name, &flags, &size, &value))
|
|
Matej Habrnal |
fa1950 |
+ problem_data_add_ext(pd, name, value, flags, size);
|
|
Matej Habrnal |
fa1950 |
+
|
|
Matej Habrnal |
fa1950 |
+ problem_data_add(pd, CD_DUMPDIR, problem_dir_path,
|
|
Matej Habrnal |
fa1950 |
+ CD_FLAG_TXT + CD_FLAG_ISNOTEDITABLE + CD_FLAG_LIST);
|
|
Matej Habrnal |
fa1950 |
+
|
|
Matej Habrnal |
fa1950 |
+ g_variant_unref(result);
|
|
Matej Habrnal |
fa1950 |
+
|
|
Matej Habrnal |
fa1950 |
+ return pd;
|
|
Matej Habrnal |
fa1950 |
+}
|
|
Matej Habrnal |
fa1950 |
--
|
|
Matej Habrnal |
fa1950 |
2.1.0
|
|
Matej Habrnal |
fa1950 |
|