diff options
author | Carlos Garcia Campos <cgarcia@igalia.com> | 2021-02-04 13:46:56 +0100 |
---|---|---|
committer | Carlos Garcia Campos <cgarcia@igalia.com> | 2021-02-04 13:46:56 +0100 |
commit | 4a71ab8df15a57891f99c1b64495cc2b55a7f992 (patch) | |
tree | ca8c812a01fc04eb85d8815dd3a0adcc570108a2 | |
parent | f7df8ad18b49d7cfb4dbd68ccba775bd1d0bb69e (diff) | |
download | libsoup-4a71ab8df15a57891f99c1b64495cc2b55a7f992.tar.gz |
auth: do not pause the message when cancelled in the authenticate callback
We are currently pausing the message that is never unpaused because the
auth is already cancelled.
-rw-r--r-- | libsoup/auth/soup-auth-manager.c | 2 | ||||
-rw-r--r-- | tests/auth-test.c | 42 |
2 files changed, 43 insertions, 1 deletions
diff --git a/libsoup/auth/soup-auth-manager.c b/libsoup/auth/soup-auth-manager.c index 5e602dce..8c02c0ca 100644 --- a/libsoup/auth/soup-auth-manager.c +++ b/libsoup/auth/soup-auth-manager.c @@ -566,7 +566,7 @@ authenticate_auth (SoupAuthManager *manager, SoupAuth *auth, original_msg = soup_session_get_original_message_for_authentication (priv->session, msg); handled = soup_message_authenticate (original_msg, auth, prior_auth_failed); - if (handled && !soup_auth_is_authenticated (auth)) { + if (handled && !soup_auth_is_authenticated (auth) && !soup_auth_is_cancelled (auth)) { soup_session_pause_message (priv->session, msg); g_object_set_data_full (G_OBJECT (msg), "auth-msg-session", g_object_ref (priv->session), diff --git a/tests/auth-test.c b/tests/auth-test.c index 305179d8..271e8aa6 100644 --- a/tests/auth-test.c +++ b/tests/auth-test.c @@ -1640,6 +1640,47 @@ do_cancel_after_retry_test (void) g_main_loop_unref (loop); } +static gboolean +cancel_on_authenticate (SoupMessage *msg, + SoupAuth *auth, + gboolean retrying) +{ + soup_auth_cancel (auth); + + return TRUE; +} + +static void +do_cancel_on_authenticate (void) +{ + SoupSession *session; + SoupMessage *msg; + char *uri; + + SOUP_TEST_SKIP_IF_NO_APACHE; + + session = soup_test_session_new (NULL); + + loop = g_main_loop_new (NULL, FALSE); + + uri = g_strconcat (base_uri, "Digest/realm1/", NULL); + msg = soup_message_new ("GET", uri); + g_signal_connect (msg, "authenticate", + G_CALLBACK (cancel_on_authenticate), + NULL); + g_signal_connect (msg, "finished", + G_CALLBACK (async_no_auth_cache_finished), NULL); + soup_session_send_async (session, msg, G_PRIORITY_DEFAULT, NULL, NULL, NULL); + g_main_loop_run (loop); + + soup_test_assert_message_status (msg, SOUP_STATUS_UNAUTHORIZED); + + g_object_unref (msg); + g_free (uri); + soup_test_session_abort_unref (session); + g_main_loop_unref (loop); +} + int main (int argc, char **argv) { @@ -1668,6 +1709,7 @@ main (int argc, char **argv) g_test_add_func ("/auth/async-message-do-not-use-auth-cache", do_async_message_do_not_use_auth_cache_test); g_test_add_func ("/auth/authorization-header-request", do_message_has_authorization_header_test); g_test_add_func ("/auth/cancel-after-retry", do_cancel_after_retry_test); + g_test_add_func ("/auth/cancel-on-authenticate", do_cancel_on_authenticate); ret = g_test_run (); |