[evolution-data-server/gnome-3-26] Bug 793779 - Forward slash in UID breaks CardDAV backend
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/gnome-3-26] Bug 793779 - Forward slash in UID breaks CardDAV backend
- Date: Wed, 28 Feb 2018 16:20:42 +0000 (UTC)
commit 37bf8a99c2bb89c50c74d77f3b962217ce07b5e8
Author: Milan Crha <mcrha redhat com>
Date: Wed Feb 28 17:15:04 2018 +0100
Bug 793779 - Forward slash in UID breaks CardDAV backend
.../backends/webdav/e-book-backend-webdav.c | 14 +++++++++++++-
.../backends/caldav/e-cal-backend-caldav.c | 13 ++++++++++++-
2 files changed, 25 insertions(+), 2 deletions(-)
---
diff --git a/src/addressbook/backends/webdav/e-book-backend-webdav.c
b/src/addressbook/backends/webdav/e-book-backend-webdav.c
index b4c3ecf..cf96393 100644
--- a/src/addressbook/backends/webdav/e-book-backend-webdav.c
+++ b/src/addressbook/backends/webdav/e-book-backend-webdav.c
@@ -787,7 +787,7 @@ ebb_webdav_uid_to_uri (EBookBackendWebDAV *bbdav,
{
ESourceWebdav *webdav_extension;
SoupURI *soup_uri;
- gchar *uri, *tmp, *filename;
+ gchar *uri, *tmp, *filename, *uid_hash = NULL;
g_return_val_if_fail (E_IS_BOOK_BACKEND_WEBDAV (bbdav), NULL);
g_return_val_if_fail (uid != NULL, NULL);
@@ -796,6 +796,17 @@ ebb_webdav_uid_to_uri (EBookBackendWebDAV *bbdav,
soup_uri = e_source_webdav_dup_soup_uri (webdav_extension);
g_return_val_if_fail (soup_uri != NULL, NULL);
+ /* UIDs with forward slashes can cause trouble, because the destination server
+ can consider them as a path delimiter. For example Google book backend uses
+ URL as the contact UID. Double-encode the URL doesn't always work, thus
+ rather cause a mismatch between stored UID and its href on the server. */
+ if (strchr (uid, '/')) {
+ uid_hash = g_compute_checksum_for_string (G_CHECKSUM_SHA1, uid, -1);
+
+ if (uid_hash)
+ uid = uid_hash;
+ }
+
if (extension) {
tmp = g_strconcat (uid, extension, NULL);
filename = soup_uri_encode (tmp, NULL);
@@ -822,6 +833,7 @@ ebb_webdav_uid_to_uri (EBookBackendWebDAV *bbdav,
soup_uri_free (soup_uri);
g_free (filename);
+ g_free (uid_hash);
return uri;
}
diff --git a/src/calendar/backends/caldav/e-cal-backend-caldav.c
b/src/calendar/backends/caldav/e-cal-backend-caldav.c
index 90b2bb0..de4f93d 100644
--- a/src/calendar/backends/caldav/e-cal-backend-caldav.c
+++ b/src/calendar/backends/caldav/e-cal-backend-caldav.c
@@ -918,7 +918,7 @@ ecb_caldav_uid_to_uri (ECalBackendCalDAV *cbdav,
{
ESourceWebdav *webdav_extension;
SoupURI *soup_uri;
- gchar *uri, *tmp, *filename;
+ gchar *uri, *tmp, *filename, *uid_hash = NULL;
g_return_val_if_fail (E_IS_CAL_BACKEND_CALDAV (cbdav), NULL);
g_return_val_if_fail (uid != NULL, NULL);
@@ -927,6 +927,16 @@ ecb_caldav_uid_to_uri (ECalBackendCalDAV *cbdav,
soup_uri = e_source_webdav_dup_soup_uri (webdav_extension);
g_return_val_if_fail (soup_uri != NULL, NULL);
+ /* UIDs with forward slashes can cause trouble, because the destination server can
+ consider them as a path delimiter. Double-encode the URL doesn't always work,
+ thus rather cause a mismatch between stored UID and its href on the server. */
+ if (strchr (uid, '/')) {
+ uid_hash = g_compute_checksum_for_string (G_CHECKSUM_SHA1, uid, -1);
+
+ if (uid_hash)
+ uid = uid_hash;
+ }
+
if (extension) {
tmp = g_strconcat (uid, extension, NULL);
filename = soup_uri_encode (tmp, NULL);
@@ -953,6 +963,7 @@ ecb_caldav_uid_to_uri (ECalBackendCalDAV *cbdav,
soup_uri_free (soup_uri);
g_free (filename);
+ g_free (uid_hash);
return uri;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]