return 0;
}
+static connman_bool_t check_reply_has_dict(DBusMessage *reply)
+{
+ const char *signature = DBUS_TYPE_ARRAY_AS_STRING
+ DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
+ DBUS_TYPE_STRING_AS_STRING
+ DBUS_TYPE_VARIANT_AS_STRING
+ DBUS_DICT_ENTRY_END_CHAR_AS_STRING;
+
+ if (dbus_message_has_signature(reply, signature) == TRUE)
+ return TRUE;
+
+ connman_warn("Reply %s to %s from %s has wrong signature %s",
+ signature,
+ dbus_message_get_interface(reply),
+ dbus_message_get_sender(reply),
+ dbus_message_get_signature(reply));
+
+ return FALSE;
+}
+
struct request_input_reply {
struct connman_service *service;
authentication_cb_t callback;
goto done;
}
+ if (check_reply_has_dict(reply) == FALSE)
+ goto done;
+
values_received = TRUE;
dbus_message_iter_init(reply, &iter);
{
struct request_input_reply *username_password_reply = user_data;
const char *error = NULL;
+ connman_bool_t values_received = FALSE;
char *username = NULL;
char *password = NULL;
char *key;
goto done;
}
+ if (check_reply_has_dict(reply) == FALSE)
+ goto done;
+
+ values_received = TRUE;
+
dbus_message_iter_init(reply, &iter);
dbus_message_iter_recurse(&iter, &dict);
while (dbus_message_iter_get_arg_type(&dict) == DBUS_TYPE_DICT_ENTRY) {
done:
username_password_reply->callback(username_password_reply->service,
- TRUE, NULL, 0,
+ values_received, NULL, 0,
username, password,
FALSE, NULL, error,
username_password_reply->user_data);