Dominique Leuenberger
73e6842530
- Add eds-fix-fails-to-parse-Google-OAuth2.patch: Fix fails to parse Google OAuth2 authorization code (bgo#795997). - Add eds-correct-some-public-headers.patch -- Correct some public headers in libedataserverui. OBS-URL: https://build.opensuse.org/request/show/611206 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/evolution-data-server?expand=0&rev=326
75 lines
2.1 KiB
Diff
75 lines
2.1 KiB
Diff
From 5c6b22b8eb72ccac07c7e5867aa6074347f7fd78 Mon Sep 17 00:00:00 2001
|
|
From: Milan Crha <mcrha@redhat.com>
|
|
Date: Thu, 10 May 2018 13:58:32 +0200
|
|
Subject: Bug 795997 - Fails to parse Google OAuth2 authorization code
|
|
|
|
---
|
|
src/libedataserver/e-oauth2-service-google.c | 49 +++++++++++++++++++++++-----
|
|
1 file changed, 41 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/src/libedataserver/e-oauth2-service-google.c b/src/libedataserver/e-oauth2-service-google.c
|
|
index 261ba06..c380c61 100644
|
|
--- a/src/libedataserver/e-oauth2-service-google.c
|
|
+++ b/src/libedataserver/e-oauth2-service-google.c
|
|
@@ -119,16 +119,49 @@ eos_google_extract_authorization_code (EOAuth2Service *service,
|
|
|
|
*out_authorization_code = NULL;
|
|
|
|
- if (!page_title || !*page_title)
|
|
- return FALSE;
|
|
+ if (page_title && *page_title) {
|
|
+ /* Known response, but no authorization code */
|
|
+ if (g_ascii_strncasecmp (page_title, "Denied ", 7) == 0)
|
|
+ return TRUE;
|
|
+
|
|
+ if (g_ascii_strncasecmp (page_title, "Success code=", 13) == 0) {
|
|
+ *out_authorization_code = g_strdup (page_title + 13);
|
|
+ return TRUE;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (page_uri && *page_uri) {
|
|
+ SoupURI *suri;
|
|
+
|
|
+ suri = soup_uri_new (page_uri);
|
|
+ if (suri) {
|
|
+ const gchar *query = soup_uri_get_query (suri);
|
|
+ gboolean known = FALSE;
|
|
+
|
|
+ if (query && *query) {
|
|
+ GHashTable *params;
|
|
+
|
|
+ params = soup_form_decode (query);
|
|
+ if (params) {
|
|
+ const gchar *response;
|
|
+
|
|
+ response = g_hash_table_lookup (params, "response");
|
|
+ if (response && g_ascii_strncasecmp (response, "code=", 5) == 0) {
|
|
+ *out_authorization_code = g_strdup (response + 5);
|
|
+ known = TRUE;
|
|
+ } else if (response && g_ascii_strncasecmp (response, "error", 5) == 0) {
|
|
+ known = TRUE;
|
|
+ }
|
|
+
|
|
+ g_hash_table_destroy (params);
|
|
+ }
|
|
+ }
|
|
|
|
- /* Known response, but no authorization code */
|
|
- if (g_ascii_strncasecmp (page_title, "Denied ", 7) == 0)
|
|
- return TRUE;
|
|
+ soup_uri_free (suri);
|
|
|
|
- if (g_ascii_strncasecmp (page_title, "Success code=", 13) == 0) {
|
|
- *out_authorization_code = g_strdup (page_title + 13);
|
|
- return TRUE;
|
|
+ if (known)
|
|
+ return TRUE;
|
|
+ }
|
|
}
|
|
|
|
return FALSE;
|
|
--
|
|
cgit v0.12
|
|
|