dbus: correctly build reply message

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>
This commit is contained in:
Marc-André Lureau 2019-08-08 18:54:54 +04:00 committed by Michal Privoznik
parent 16e81dd3b3
commit 39dded7bb6
4 changed files with 24 additions and 12 deletions

View File

@ -1456,6 +1456,7 @@ int virDBusCreateMethod(DBusMessage **call,
/** /**
* virDBusCreateReplyV: * virDBusCreateReplyV:
* @msg: the message to reply to
* @reply: pointer to be filled with a method reply message * @reply: pointer to be filled with a method reply message
* @types: type signature for following method arguments * @types: type signature for following method arguments
* @args: method arguments * @args: method arguments
@ -1468,13 +1469,14 @@ int virDBusCreateMethod(DBusMessage **call,
* as variadic args. See virDBusCreateMethodV for a * as variadic args. See virDBusCreateMethodV for a
* description of this parameter. * description of this parameter.
*/ */
int virDBusCreateReplyV(DBusMessage **reply, int virDBusCreateReplyV(DBusMessage *msg,
DBusMessage **reply,
const char *types, const char *types,
va_list args) va_list args)
{ {
int ret = -1; int ret = -1;
if (!(*reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN))) { if (!(*reply = dbus_message_new_method_return(msg))) {
virReportOOMError(); virReportOOMError();
goto cleanup; goto cleanup;
} }
@ -1493,6 +1495,7 @@ int virDBusCreateReplyV(DBusMessage **reply,
/** /**
* virDBusCreateReply: * virDBusCreateReply:
* @msg: the message to reply to
* @reply: pointer to be filled with a method reply message * @reply: pointer to be filled with a method reply message
* @types: type signature for following method arguments * @types: type signature for following method arguments
* @...: method arguments * @...: method arguments
@ -1500,14 +1503,15 @@ int virDBusCreateReplyV(DBusMessage **reply,
* See virDBusCreateReplyV for a description of the * See virDBusCreateReplyV for a description of the
* behaviour of this method. * behaviour of this method.
*/ */
int virDBusCreateReply(DBusMessage **reply, int virDBusCreateReply(DBusMessage *msg,
DBusMessage **reply,
const char *types, ...) const char *types, ...)
{ {
va_list args; va_list args;
int ret; int ret;
va_start(args, types); va_start(args, types);
ret = virDBusCreateReplyV(reply, types, args); ret = virDBusCreateReplyV(msg, reply, types, args);
va_end(args); va_end(args);
return ret; return ret;
@ -1811,7 +1815,8 @@ int virDBusCreateMethodV(DBusMessage **call ATTRIBUTE_UNUSED,
return -1; return -1;
} }
int virDBusCreateReplyV(DBusMessage **reply ATTRIBUTE_UNUSED, int virDBusCreateReplyV(DBusMessage *msg ATTRIBUTE_UNUSED,
DBusMessage **reply ATTRIBUTE_UNUSED,
const char *types ATTRIBUTE_UNUSED, const char *types ATTRIBUTE_UNUSED,
va_list args ATTRIBUTE_UNUSED) va_list args ATTRIBUTE_UNUSED)
{ {
@ -1820,7 +1825,8 @@ int virDBusCreateReplyV(DBusMessage **reply ATTRIBUTE_UNUSED,
return -1; return -1;
} }
int virDBusCreateReply(DBusMessage **reply ATTRIBUTE_UNUSED, int virDBusCreateReply(DBusMessage *msg ATTRIBUTE_UNUSED,
DBusMessage **reply ATTRIBUTE_UNUSED,
const char *types ATTRIBUTE_UNUSED, ...) const char *types ATTRIBUTE_UNUSED, ...)
{ {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,

View File

@ -52,9 +52,11 @@ int virDBusCreateMethodV(DBusMessage **call,
const char *member, const char *member,
const char *types, const char *types,
va_list args); va_list args);
int virDBusCreateReply(DBusMessage **reply, int virDBusCreateReply(DBusMessage *msg,
DBusMessage **reply,
const char *types, ...); const char *types, ...);
int virDBusCreateReplyV(DBusMessage **reply, int virDBusCreateReplyV(DBusMessage *msg,
DBusMessage **reply,
const char *types, const char *types,
va_list args); va_list args);

View File

@ -150,7 +150,8 @@ VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block,
if (nargs == 1 && if (nargs == 1 &&
STREQ(type, "ipv4") && STREQ(type, "ipv4") &&
STREQ(args[0], "-L")) { STREQ(args[0], "-L")) {
if (virDBusCreateReply(&reply, if (virDBusCreateReply(message,
&reply,
"s", TEST_FILTER_TABLE_LIST) < 0) "s", TEST_FILTER_TABLE_LIST) < 0)
goto error; goto error;
} else if (nargs == 3 && } 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[0], "-t") &&
STREQ(args[1], "nat") && STREQ(args[1], "nat") &&
STREQ(args[2], "-L")) { STREQ(args[2], "-L")) {
if (virDBusCreateReply(&reply, if (virDBusCreateReply(message,
&reply,
"s", TEST_NAT_TABLE_LIST) < 0) "s", TEST_NAT_TABLE_LIST) < 0)
goto error; goto error;
} else { } else {
if (virDBusCreateReply(&reply, if (virDBusCreateReply(message,
&reply,
"s", "success") < 0) "s", "success") < 0)
goto error; goto error;
} }

View File

@ -123,7 +123,8 @@ VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block,
VIR_FREE(cancellationId); VIR_FREE(cancellationId);
virStringListFreeCount(details, detailslen); virStringListFreeCount(details, detailslen);
if (virDBusCreateReply(&reply, if (virDBusCreateReply(message,
&reply,
"(bba&{ss})", "(bba&{ss})",
is_authorized, is_authorized,
is_challenge, is_challenge,