]> xenbits.xensource.com Git - libvirt.git/commitdiff
dbus: correctly build reply message
authorMarc-André Lureau <marcandre.lureau@redhat.com>
Thu, 8 Aug 2019 14:54:54 +0000 (18:54 +0400)
committerMichal Privoznik <mprivozn@redhat.com>
Fri, 6 Sep 2019 10:47:46 +0000 (12:47 +0200)
dbus_message_new() does not construct correct replies by itself, it is
recommended to use dbus_message_new_method_return() instead.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/util/virdbus.c
src/util/virdbus.h
tests/virfirewalltest.c
tests/virpolkittest.c

index b0ac8d7055993a6d7480342f2e4681c61d8d8efd..64513eef145f75fec2137f846f7340d387e9da04 100644 (file)
@@ -1456,6 +1456,7 @@ int virDBusCreateMethod(DBusMessage **call,
 
 /**
  * virDBusCreateReplyV:
+ * @msg: the message to reply to
  * @reply: pointer to be filled with a method reply message
  * @types: type signature for following method arguments
  * @args: method arguments
@@ -1468,13 +1469,14 @@ int virDBusCreateMethod(DBusMessage **call,
  * as variadic args. See virDBusCreateMethodV for a
  * description of this parameter.
  */
-int virDBusCreateReplyV(DBusMessage **reply,
+int virDBusCreateReplyV(DBusMessage *msg,
+                        DBusMessage **reply,
                         const char *types,
                         va_list args)
 {
     int ret = -1;
 
-    if (!(*reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN))) {
+    if (!(*reply = dbus_message_new_method_return(msg))) {
         virReportOOMError();
         goto cleanup;
     }
@@ -1493,6 +1495,7 @@ int virDBusCreateReplyV(DBusMessage **reply,
 
 /**
  * virDBusCreateReply:
+ * @msg: the message to reply to
  * @reply: pointer to be filled with a method reply message
  * @types: type signature for following method arguments
  * @...: method arguments
@@ -1500,14 +1503,15 @@ int virDBusCreateReplyV(DBusMessage **reply,
  * See virDBusCreateReplyV for a description of the
  * behaviour of this method.
  */
-int virDBusCreateReply(DBusMessage **reply,
+int virDBusCreateReply(DBusMessage *msg,
+                       DBusMessage **reply,
                        const char *types, ...)
 {
     va_list args;
     int ret;
 
     va_start(args, types);
-    ret = virDBusCreateReplyV(reply, types, args);
+    ret = virDBusCreateReplyV(msg, reply, types, args);
     va_end(args);
 
     return ret;
@@ -1811,7 +1815,8 @@ int virDBusCreateMethodV(DBusMessage **call ATTRIBUTE_UNUSED,
     return -1;
 }
 
-int virDBusCreateReplyV(DBusMessage **reply ATTRIBUTE_UNUSED,
+int virDBusCreateReplyV(DBusMessage *msg ATTRIBUTE_UNUSED,
+                        DBusMessage **reply ATTRIBUTE_UNUSED,
                         const char *types ATTRIBUTE_UNUSED,
                         va_list args ATTRIBUTE_UNUSED)
 {
@@ -1820,7 +1825,8 @@ int virDBusCreateReplyV(DBusMessage **reply ATTRIBUTE_UNUSED,
     return -1;
 }
 
-int virDBusCreateReply(DBusMessage **reply ATTRIBUTE_UNUSED,
+int virDBusCreateReply(DBusMessage *msg ATTRIBUTE_UNUSED,
+                       DBusMessage **reply ATTRIBUTE_UNUSED,
                        const char *types ATTRIBUTE_UNUSED, ...)
 {
     virReportError(VIR_ERR_INTERNAL_ERROR,
index 083c074d590d41bc7d820bc7246dfb0bcb5af9b6..0303e91045cd5a346ca27cbe1db36a5101420143 100644 (file)
@@ -52,9 +52,11 @@ int virDBusCreateMethodV(DBusMessage **call,
                          const char *member,
                          const char *types,
                          va_list args);
-int virDBusCreateReply(DBusMessage **reply,
+int virDBusCreateReply(DBusMessage *msg,
+                       DBusMessage **reply,
                        const char *types, ...);
-int virDBusCreateReplyV(DBusMessage **reply,
+int virDBusCreateReplyV(DBusMessage *msg,
+                        DBusMessage **reply,
                         const char *types,
                         va_list args);
 
index 78685a3bf42812eb8f6658f13a34f0a9c1c78def..e5eeb52175f22296691adb65337c0133430809aa 100644 (file)
@@ -150,7 +150,8 @@ VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block,
             if (nargs == 1 &&
                 STREQ(type, "ipv4") &&
                 STREQ(args[0], "-L")) {
-                if (virDBusCreateReply(&reply,
+                if (virDBusCreateReply(message,
+                                       &reply,
                                        "s", TEST_FILTER_TABLE_LIST) < 0)
                     goto error;
             } else if (nargs == 3 &&
@@ -158,11 +159,13 @@ VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block,
                        STREQ(args[0], "-t") &&
                        STREQ(args[1], "nat") &&
                        STREQ(args[2], "-L")) {
-                if (virDBusCreateReply(&reply,
+                if (virDBusCreateReply(message,
+                                       &reply,
                                        "s", TEST_NAT_TABLE_LIST) < 0)
                     goto error;
             } else {
-                if (virDBusCreateReply(&reply,
+                if (virDBusCreateReply(message,
+                                       &reply,
                                        "s", "success") < 0)
                     goto error;
             }
index ce1ff92bf2317044530874c1cc67b3dba46451b7..845ceb173615d4ae45b26645b0e01360b9f55ebf 100644 (file)
@@ -123,7 +123,8 @@ VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block,
         VIR_FREE(cancellationId);
         virStringListFreeCount(details, detailslen);
 
-        if (virDBusCreateReply(&reply,
+        if (virDBusCreateReply(message,
+                               &reply,
                                "(bba&{ss})",
                                is_authorized,
                                is_challenge,