X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fagent.c;h=82dc46d73a9e94b2f953e0fc375dc301f310338c;hb=6636320dc4c4b3254631098b4e748f0e38090344;hp=feeb48e9600470178a6c11ed7249594fe0684872;hpb=65af499cc67950a3c40626f704025e4f371bc2b7;p=framework%2Fconnectivity%2Fconnman.git diff --git a/src/agent.c b/src/agent.c index feeb48e..82dc46d 100644 --- a/src/agent.c +++ b/src/agent.c @@ -31,6 +31,8 @@ #include "connman.h" +#define REQUEST_TIMEOUT (120 * 1000) /* 120 seconds */ + static DBusConnection *connection = NULL; static guint agent_watch = 0; static gchar *agent_path = NULL; @@ -85,6 +87,26 @@ int __connman_agent_unregister(const char *sender, const char *path) 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; @@ -111,6 +133,9 @@ static void request_input_passphrase_reply(DBusPendingCall *call, void *user_dat goto done; } + if (check_reply_has_dict(reply) == FALSE) + goto done; + values_received = TRUE; dbus_message_iter_init(reply, &iter); @@ -315,6 +340,7 @@ static void request_input_login_reply(DBusPendingCall *call, void *user_data) { 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; @@ -326,6 +352,11 @@ static void request_input_login_reply(DBusPendingCall *call, void *user_data) 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) { @@ -359,7 +390,7 @@ static void request_input_login_reply(DBusPendingCall *call, void *user_data) 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); @@ -427,8 +458,8 @@ int __connman_agent_request_passphrase_input(struct connman_service *service, return -ENOMEM; } - if (dbus_connection_send_with_reply(connection, message, - &call, -1) == FALSE) { + if (dbus_connection_send_with_reply(connection, message, &call, + REQUEST_TIMEOUT) == FALSE) { dbus_message_unref(message); g_free(passphrase_reply); return -ESRCH; @@ -449,7 +480,7 @@ int __connman_agent_request_passphrase_input(struct connman_service *service, dbus_message_unref(message); - return -EIO; + return -EINPROGRESS; } int __connman_agent_request_login_input(struct connman_service *service, @@ -493,8 +524,8 @@ int __connman_agent_request_login_input(struct connman_service *service, return -ENOMEM; } - if (dbus_connection_send_with_reply(connection, message, - &call, -1) == FALSE) { + if (dbus_connection_send_with_reply(connection, message, &call, + REQUEST_TIMEOUT) == FALSE) { dbus_message_unref(message); g_free(username_password_reply); return -ESRCH; @@ -515,7 +546,7 @@ int __connman_agent_request_login_input(struct connman_service *service, dbus_message_unref(message); - return -EIO; + return -EINPROGRESS; } struct request_browser_reply_data { @@ -581,8 +612,8 @@ int __connman_agent_request_browser(struct connman_service *service, return -ENOMEM; } - if (dbus_connection_send_with_reply(connection, message, - &call, -1) == FALSE) { + if (dbus_connection_send_with_reply(connection, message, &call, + REQUEST_TIMEOUT) == FALSE) { dbus_message_unref(message); g_free(browser_reply_data); return -ESRCH; @@ -603,7 +634,7 @@ int __connman_agent_request_browser(struct connman_service *service, dbus_message_unref(message); - return -EIO; + return -EINPROGRESS; } struct report_error_data { @@ -669,8 +700,8 @@ int __connman_agent_report_error(struct connman_service *service, return -ENOMEM; } - if (dbus_connection_send_with_reply(connection, message, - &call, -1) == FALSE) { + if (dbus_connection_send_with_reply(connection, message, &call, + REQUEST_TIMEOUT) == FALSE) { dbus_message_unref(message); g_free(report_error); return -ESRCH; @@ -689,7 +720,7 @@ int __connman_agent_report_error(struct connman_service *service, report_error, NULL); dbus_message_unref(message); - return -EIO; + return -EINPROGRESS; } int __connman_agent_init(void)