|
 |
ed3c5e |
From fa734ee402ee1f41281ac89c3a376b24ae7e9112 Mon Sep 17 00:00:00 2001
|
|
 |
ed3c5e |
From: David Kupka <dkupka@redhat.com>
|
|
 |
ed3c5e |
Date: Wed, 7 Jan 2015 21:34:15 -0500
|
|
 |
ed3c5e |
Subject: [PATCH] Retrieve string value from DBus property interface reply
|
|
 |
ed3c5e |
correctly.
|
|
 |
ed3c5e |
|
|
 |
ed3c5e |
org.freedesktop.DBus.Properties.Get method always returns variant data type.
|
|
 |
ed3c5e |
The basic type inside it can't be accessed directly.
|
|
 |
ed3c5e |
---
|
|
 |
ed3c5e |
src/getcert.c | 2 +-
|
|
 |
ed3c5e |
src/tdbusm.c | 38 ++++++++++++++++++++++++++++++++++++++
|
|
 |
ed3c5e |
src/tdbusm.h | 1 +
|
|
 |
ed3c5e |
3 files changed, 40 insertions(+), 1 deletion(-)
|
|
 |
ed3c5e |
|
|
 |
ed3c5e |
diff --git a/src/getcert.c b/src/getcert.c
|
|
 |
ed3c5e |
index 5ea5e538e5f3beb840f88e6dbe21957b155b873b..8b2cb8a937947ca3d932cc9405a82c90acefabb3 100644
|
|
 |
ed3c5e |
--- a/src/getcert.c
|
|
 |
ed3c5e |
+++ b/src/getcert.c
|
|
 |
ed3c5e |
@@ -474,7 +474,7 @@ query_prop_s(enum cm_tdbus_type which,
|
|
 |
ed3c5e |
DBusMessage *rep;
|
|
 |
ed3c5e |
char *s;
|
|
 |
ed3c5e |
rep = query_prop(which, path, interface, prop, verbose);
|
|
 |
ed3c5e |
- if (cm_tdbusm_get_s(rep, parent, &s) != 0) {
|
|
 |
ed3c5e |
+ if (cm_tdbusm_get_vs(rep, parent, &s) != 0) {
|
|
 |
ed3c5e |
s = "";
|
|
 |
ed3c5e |
}
|
|
 |
ed3c5e |
dbus_message_unref(rep);
|
|
 |
ed3c5e |
diff --git a/src/tdbusm.c b/src/tdbusm.c
|
|
 |
ed3c5e |
index dd3e800d1a5f2fe9c2d7feff3e3938a6adb4c1ab..f7aaea82e20994a7382518153980e14fb0405453 100644
|
|
 |
ed3c5e |
--- a/src/tdbusm.c
|
|
 |
ed3c5e |
+++ b/src/tdbusm.c
|
|
 |
ed3c5e |
@@ -175,6 +175,44 @@ cm_tdbusm_get_p(DBusMessage *msg, void *parent, char **p)
|
|
 |
ed3c5e |
}
|
|
 |
ed3c5e |
|
|
 |
ed3c5e |
int
|
|
 |
ed3c5e |
+cm_tdbusm_get_vs(DBusMessage *msg, void *parent, char **s)
|
|
 |
ed3c5e |
+{
|
|
 |
ed3c5e |
+ DBusError err;
|
|
 |
ed3c5e |
+ DBusMessageIter iter, sub_iter;
|
|
 |
ed3c5e |
+
|
|
 |
ed3c5e |
+ *s = NULL;
|
|
 |
ed3c5e |
+ dbus_error_init(&err;;
|
|
 |
ed3c5e |
+
|
|
 |
ed3c5e |
+ if (dbus_message_iter_init(msg, &iter) == FALSE) {
|
|
 |
ed3c5e |
+ if (dbus_error_is_set(&err)) {
|
|
 |
ed3c5e |
+ cm_log(3, "DBus error: %s", err.message);
|
|
 |
ed3c5e |
+ dbus_error_free(&err;;
|
|
 |
ed3c5e |
+ } else {
|
|
 |
ed3c5e |
+ cm_log(3, "Unknown DBus error.");
|
|
 |
ed3c5e |
+ }
|
|
 |
ed3c5e |
+ return -1;
|
|
 |
ed3c5e |
+ }
|
|
 |
ed3c5e |
+
|
|
 |
ed3c5e |
+ if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_VARIANT) {
|
|
 |
ed3c5e |
+ dbus_message_iter_recurse(&iter, &sub_iter);
|
|
 |
ed3c5e |
+ if (dbus_message_iter_get_arg_type(&sub_iter) == DBUS_TYPE_STRING) {
|
|
 |
ed3c5e |
+ dbus_message_iter_get_basic(&sub_iter, s);
|
|
 |
ed3c5e |
+ *s = *s ? talloc_strdup(parent, *s) : NULL;
|
|
 |
ed3c5e |
+ return 0;
|
|
 |
ed3c5e |
+ }
|
|
 |
ed3c5e |
+ }
|
|
 |
ed3c5e |
+
|
|
 |
ed3c5e |
+ if (dbus_error_is_set(&err)) {
|
|
 |
ed3c5e |
+ cm_log(3, "Failed to extract data from DBus message: %s", err.message);
|
|
 |
ed3c5e |
+ dbus_error_free(&err;;
|
|
 |
ed3c5e |
+ } else {
|
|
 |
ed3c5e |
+ cm_log(3, "Failed to extract data from DBus message.");
|
|
 |
ed3c5e |
+ }
|
|
 |
ed3c5e |
+ *s = NULL;
|
|
 |
ed3c5e |
+ return -1;
|
|
 |
ed3c5e |
+}
|
|
 |
ed3c5e |
+
|
|
 |
ed3c5e |
+int
|
|
 |
ed3c5e |
cm_tdbusm_get_s(DBusMessage *msg, void *parent, char **s)
|
|
 |
ed3c5e |
{
|
|
 |
ed3c5e |
DBusError err;
|
|
 |
ed3c5e |
diff --git a/src/tdbusm.h b/src/tdbusm.h
|
|
 |
ed3c5e |
index b926b4941985509696b965fc955b2f204ce856df..813fae2f4a4a72da512e7559b5ed437cab4766e1 100644
|
|
 |
ed3c5e |
--- a/src/tdbusm.h
|
|
 |
ed3c5e |
+++ b/src/tdbusm.h
|
|
 |
ed3c5e |
@@ -22,6 +22,7 @@ int cm_tdbusm_get_b(DBusMessage *msg, void *parent, dbus_bool_t *b);
|
|
 |
ed3c5e |
int cm_tdbusm_get_n(DBusMessage *msg, void *parent, long *n);
|
|
 |
ed3c5e |
int cm_tdbusm_get_p(DBusMessage *msg, void *parent, char **p);
|
|
 |
ed3c5e |
int cm_tdbusm_get_s(DBusMessage *msg, void *parent, char **s);
|
|
 |
ed3c5e |
+int cm_tdbusm_get_vs(DBusMessage *msg, void *parent, char **s);
|
|
 |
ed3c5e |
int cm_tdbusm_get_bp(DBusMessage *msg, void *parent, dbus_bool_t *b, char **p);
|
|
 |
ed3c5e |
int cm_tdbusm_get_bs(DBusMessage *msg, void *parent, dbus_bool_t *b, char **s);
|
|
 |
ed3c5e |
int cm_tdbusm_get_sb(DBusMessage *msg, void *parent, char **s, dbus_bool_t *b);
|
|
 |
ed3c5e |
--
|
|
 |
ed3c5e |
2.1.0
|
|
 |
ed3c5e |
|