summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2016-02-11 18:37:29 +0100
committerMilan Crha <mcrha@redhat.com>2016-02-11 18:42:20 +0100
commit61cb6e7aa60dda6ed795ba491735732341b73f69 (patch)
treea60a2111ee7812f3d84c1822f05307ba7c9c641a
parentef640e0241f388acab923549d36c25d0254039a4 (diff)
downloadevolution-data-server-61cb6e7aa60dda6ed795ba491735732341b73f69.tar.gz
Bug 760951 - Cannot copy contact from Google to WebDAV addressbook
-rw-r--r--addressbook/backends/webdav/e-book-backend-webdav.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/addressbook/backends/webdav/e-book-backend-webdav.c b/addressbook/backends/webdav/e-book-backend-webdav.c
index b84cc6d17..bcfc6fc6c 100644
--- a/addressbook/backends/webdav/e-book-backend-webdav.c
+++ b/addressbook/backends/webdav/e-book-backend-webdav.c
@@ -1458,6 +1458,27 @@ book_backend_webdav_open_sync (EBookBackend *backend,
}
static gboolean
+webdav_can_use_uid (const gchar *uid)
+{
+ const gchar *ptr;
+
+ if (!uid || !*uid)
+ return FALSE;
+
+ for (ptr = uid; *ptr; ptr++) {
+ if ((*ptr >= 'a' && *ptr <= 'z') ||
+ (*ptr >= 'A' && *ptr <= 'Z') ||
+ (*ptr >= '0' && *ptr <= '9') ||
+ strchr (".-@", *ptr) != NULL)
+ continue;
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
book_backend_webdav_create_contacts_sync (EBookBackend *backend,
const gchar * const *vcards,
GQueue *out_contacts,
@@ -1495,7 +1516,7 @@ book_backend_webdav_create_contacts_sync (EBookBackend *backend,
contact = e_contact_new_from_vcard (vcards[0]);
orig_uid = e_contact_get_const (contact, E_CONTACT_UID);
- if (orig_uid && *orig_uid && !e_book_backend_cache_check_contact (webdav->priv->cache, orig_uid)) {
+ if (orig_uid && *orig_uid && webdav_can_use_uid (orig_uid) && !e_book_backend_cache_check_contact (webdav->priv->cache, orig_uid)) {
uid = g_strdup (orig_uid);
} else {
uid = NULL;