Signed-off-by: Radek Novacek <rnovacek(a)redhat.com>
---
src/lib/mh_dbus_common.c | 3 +-
src/lib/sysconfig_linux.c | 2 +-
src/sysconfig/sysconfig-dbus.c | 55 ++++++++++++++++++++++++++++-----------
3 files changed, 42 insertions(+), 18 deletions(-)
diff --git a/src/lib/mh_dbus_common.c b/src/lib/mh_dbus_common.c
index 2e3a3a5..3e9e864 100644
--- a/src/lib/mh_dbus_common.c
+++ b/src/lib/mh_dbus_common.c
@@ -26,6 +26,7 @@
#include "matahari/logging.h"
#include "matahari/mainloop.h"
#include "matahari/errors.h"
+#include "matahari/mainloop.h"
#include <glib/gi18n.h>
#include <polkit/polkit.h>
@@ -163,7 +164,7 @@ run_dbus_server(char *bus_name, char *object_path)
DBusGProxy *driver_proxy = NULL;
guint32 request_name_ret;
- mh_log_init(bus_name, LOG_DEBUG, FALSE);
+ mh_log_init(bus_name, LOG_DEBUG, TRUE);
loop = g_main_loop_new(NULL, FALSE);
diff --git a/src/lib/sysconfig_linux.c b/src/lib/sysconfig_linux.c
index 9f80c4f..192d7f1 100644
--- a/src/lib/sysconfig_linux.c
+++ b/src/lib/sysconfig_linux.c
@@ -401,7 +401,7 @@ run_augeas(const char *uri, const char *data, const char *key,
free(result_str);
unlink(filename);
- return 0;
+ return MH_RES_SUCCESS;
#else /* HAVE_AUGEAS */
return MH_RES_NOT_IMPLEMENTED;
#endif /* HAVE_AUGEAS */
diff --git a/src/sysconfig/sysconfig-dbus.c b/src/sysconfig/sysconfig-dbus.c
index 895ce48..c78db7e 100644
--- a/src/sysconfig/sysconfig-dbus.c
+++ b/src/sysconfig/sysconfig-dbus.c
@@ -34,8 +34,30 @@
#define SYSCONFIG_INTERFACE_NAME "org.matahariproject.Sysconfig"
#define DBUS_PROPERTY_INTERAFACE_NAME "org.freedesktop.DBus.Properties"
+#include <stdio.h>
+
+struct AsyncCBData {
+ DBusGMethodInvocation *context;
+ char *key;
+};
+
void result_cb(void *data, int result)
{
+ struct AsyncCBData *asynccb = (struct AsyncCBData *) data;
+ char *status;
+ GError* error = NULL;
+
+ if (result == MH_RES_SUCCESS) {
+ status = mh_sysconfig_is_configured(asynccb->key);
+ dbus_g_method_return(asynccb->context, status);
+ free(status);
+ } else {
+ error = g_error_new(MATAHARI_ERROR, result, mh_result_to_str(result));
+ dbus_g_method_return_error(asynccb->context, error);
+ g_error_free(error);
+ }
+ free(asynccb->key);
+ free(asynccb);
}
gboolean
@@ -44,7 +66,6 @@ Sysconfig_run_uri(Matahari* matahari, const char *uri, uint flags,
DBusGMethodInvocation *context)
{
GError* error = NULL;
- char *status;
enum mh_result res;
if (!check_authorization(SYSCONFIG_BUS_NAME ".run_uri", &error,
context)) {
@@ -53,16 +74,18 @@ Sysconfig_run_uri(Matahari* matahari, const char *uri, uint flags,
return FALSE;
}
- res = mh_sysconfig_run_uri(uri, flags, scheme, key, result_cb, NULL);
+ struct AsyncCBData *asynccb = malloc(sizeof(struct AsyncCBData));
+ asynccb->context = context;
+ asynccb->key = strdup(key);
- if (res == MH_RES_SUCCESS) {
- status = mh_sysconfig_is_configured(key);
- dbus_g_method_return(context, status);
- free(status);
- } else {
- error = g_error_new(MATAHARI_ERROR, res, "%s", mh_result_to_str(res));
+ res = mh_sysconfig_run_uri(uri, flags, scheme, key, result_cb, asynccb);
+ if (res != MH_RES_SUCCESS)
+ {
+ error = g_error_new(MATAHARI_ERROR, res, mh_result_to_str(res));
dbus_g_method_return_error(context, error);
g_error_free(error);
+ free(asynccb->key);
+ free(asynccb);
return FALSE;
}
return TRUE;
@@ -74,7 +97,6 @@ Sysconfig_run_string(Matahari* matahari, const char *text, uint flags,
DBusGMethodInvocation *context)
{
GError* error = NULL;
- char *status;
enum mh_result res;
if (!check_authorization(SYSCONFIG_BUS_NAME ".run_string", &error,
@@ -84,16 +106,17 @@ Sysconfig_run_string(Matahari* matahari, const char *text, uint
flags,
return FALSE;
}
- res = mh_sysconfig_run_string(text, flags, scheme, key, result_cb, NULL);
+ struct AsyncCBData *asynccb = malloc(sizeof(struct AsyncCBData));
+ asynccb->context = context;
+ asynccb->key = strdup(key);
- if (res == MH_RES_SUCCESS) {
- status = mh_sysconfig_is_configured(key);
- dbus_g_method_return(context, status);
- free(status);
- } else {
- error = g_error_new(MATAHARI_ERROR, res, "%s", mh_result_to_str(res));
+ res = mh_sysconfig_run_string(text, flags, scheme, key, result_cb, NULL);
+ if (res != MH_RES_SUCCESS) {
+ error = g_error_new(MATAHARI_ERROR, res, mh_result_to_str(res));
dbus_g_method_return_error(context, error);
g_error_free(error);
+ free(asynccb->key);
+ free(asynccb);
return FALSE;
}
return TRUE;
--
1.7.7