evolution-data-server/eds-fix-fails-to-parse-Google-OAuth2.patch
Dominique Leuenberger 73e6842530 Accepting request 611206 from home:iznogood
- 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
2018-05-29 12:19:54 +00:00

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