[evolution-data-server] 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] Bug 793779 - Forward slash in UID breaks CardDAV backend
- Date: Wed, 28 Feb 2018 16:14:54 +0000 (UTC)
commit 65e8640f1401eba03c482b478b8bf4a43d469ffc
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 d52c715..b2e37e4 100644
--- a/src/addressbook/backends/webdav/e-book-backend-webdav.c
+++ b/src/addressbook/backends/webdav/e-book-backend-webdav.c
@@ -792,7 +792,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);
@@ -801,6 +801,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);
@@ -827,6 +838,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 12b0fb7..c9be9dc 100644
--- a/src/calendar/backends/caldav/e-cal-backend-caldav.c
+++ b/src/calendar/backends/caldav/e-cal-backend-caldav.c
@@ -923,7 +923,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);
@@ -932,6 +932,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);
@@ -958,6 +968,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]