[libvirt] [PATCH] Change way we fake dbus method calls

From: "Daniel P. Berrange" <berrange@redhat.com> Ubuntu libdbus.so links with -Bsymbolic-functions, which means that we can only LD_PRELOAD functions that we directly call. Functions which libdbus.so calls internally can not be replaced. Thus we cannot use dbus_message_new_error or dbus_message_new_method_return Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tests/virsystemdmock.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/tests/virsystemdmock.c b/tests/virsystemdmock.c index ded52d2..5dbd33f 100644 --- a/tests/virsystemdmock.c +++ b/tests/virsystemdmock.c @@ -65,22 +65,32 @@ dbus_bool_t dbus_message_set_reply_serial(DBusMessage *message ATTRIBUTE_UNUSED, } DBusMessage *dbus_connection_send_with_reply_and_block(DBusConnection *connection ATTRIBUTE_UNUSED, - DBusMessage *message, + DBusMessage *message ATTRIBUTE_UNUSED, int timeout_milliseconds ATTRIBUTE_UNUSED, DBusError *error) { DBusMessage *reply = NULL; - if (getenv("FAIL_BAD_SERVICE")) - reply = dbus_message_new_error(message, - "org.freedesktop.systemd.badthing", - "Something went wrong creating the machine"); - else if (getenv("FAIL_NO_SERVICE")) + if (getenv("FAIL_BAD_SERVICE")) { + DBusMessageIter iter; + const char *error_message = "Something went wrong creating the machine"; + if (!(reply = dbus_message_new(DBUS_MESSAGE_TYPE_ERROR))) + return NULL; + dbus_message_set_error_name(reply, "org.freedesktop.systemd.badthing"); + dbus_message_iter_init_append(reply, &iter); + if (!dbus_message_iter_append_basic(&iter, + DBUS_TYPE_STRING, + &error_message)) { + dbus_message_unref(reply); + return NULL; + } + } else if (getenv("FAIL_NO_SERVICE")) { dbus_set_error(error, "org.freedesktop.DBus.Error.ServiceUnknown", "%s", "The name org.freedesktop.machine1 was not provided by any .service files"); - else - reply = dbus_message_new_method_return(message); + } else { + reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN); + } return reply; } -- 1.7.9.5

On 08/30/2013 07:13 AM, Daniel P. Berrange wrote:
From: "Daniel P. Berrange" <berrange@redhat.com>
Ubuntu libdbus.so links with -Bsymbolic-functions, which means that we can only LD_PRELOAD functions that we directly call. Functions which libdbus.so calls internally can not be replaced. Thus we cannot use dbus_message_new_error or dbus_message_new_method_return
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tests/virsystemdmock.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-)
ACK; worth having in 1.1.2. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org

On 08/30/2013 03:13 PM, Daniel P. Berrange wrote:
From: "Daniel P. Berrange" <berrange@redhat.com>
Ubuntu libdbus.so links with -Bsymbolic-functions, which means that we can only LD_PRELOAD functions that we directly call. Functions which libdbus.so calls internally can not be replaced. Thus we cannot use dbus_message_new_error or dbus_message_new_method_return
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tests/virsystemdmock.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-)
[Works for me...] Tested-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com> -- Mit freundlichen Grüßen/Kind Regards Viktor Mihajlovski IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Martina Köderitz Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294
participants (3)
-
Daniel P. Berrange
-
Eric Blake
-
Viktor Mihajlovski