[evolution] Bug #578335 - CalDAV - replace '@' in username to "%40"
- From: Milan Crha <mcrha src gnome org>
- To: svn-commits-list gnome org
- Subject: [evolution] Bug #578335 - CalDAV - replace '@' in username to "%40"
- Date: Mon, 25 May 2009 11:58:21 -0400 (EDT)
commit c37d8283829c74d8ca2cb803b6663840160d5f24
Author: Milan Crha <mcrha redhat com>
Date: Mon May 25 17:55:38 2009 +0200
Bug #578335 - CalDAV - replace '@' in username to "%40"
---
plugins/caldav/caldav-source.c | 55 +++++++++++++++++++++++++++++++++------
1 files changed, 46 insertions(+), 9 deletions(-)
diff --git a/plugins/caldav/caldav-source.c b/plugins/caldav/caldav-source.c
index 5df807a..e3d2c52 100644
--- a/plugins/caldav/caldav-source.c
+++ b/plugins/caldav/caldav-source.c
@@ -79,6 +79,29 @@ e_plugin_lib_enable (EPluginLib *ep, int enable)
return 0;
}
+/* replaces all '@' with '%40' in str; returns newly allocated string */
+static char *
+replace_at_sign (const char *str)
+{
+ char *res, *at;
+
+ if (!str)
+ return NULL;
+
+ res = g_strdup (str);
+ while (at = strchr (res, '@'), at) {
+ char *tmp = g_malloc0 (sizeof (char) * (1 + strlen (res) + 2));
+
+ strncpy (tmp, res, at - res);
+ strcat (tmp, "%40");
+ strcat (tmp, at + 1);
+
+ g_free (res);
+ res = tmp;
+ }
+
+ return res;
+}
/*****************************************************************************/
/* the location field for caldav sources */
@@ -87,17 +110,27 @@ e_plugin_lib_enable (EPluginLib *ep, int enable)
static gchar *
print_uri_noproto (EUri *uri)
{
- gchar *uri_noproto;
+ gchar *uri_noproto, *user, *pass;
+
+ if (uri->user)
+ user = replace_at_sign (uri->user);
+ else
+ user = NULL;
+
+ if (uri->passwd)
+ pass = replace_at_sign (uri->passwd);
+ else
+ pass = NULL;
if (uri->port != 0)
uri_noproto = g_strdup_printf (
"%s%s%s%s%s%s%s:%d%s%s%s",
- uri->user ? uri->user : "",
+ user ? user : "",
uri->authmech ? ";auth=" : "",
uri->authmech ? uri->authmech : "",
- uri->passwd ? ":" : "",
- uri->passwd ? uri->passwd : "",
- uri->user ? "@" : "",
+ pass ? ":" : "",
+ pass ? pass : "",
+ user ? "@" : "",
uri->host ? uri->host : "",
uri->port,
uri->path ? uri->path : "",
@@ -106,16 +139,20 @@ print_uri_noproto (EUri *uri)
else
uri_noproto = g_strdup_printf (
"%s%s%s%s%s%s%s%s%s%s",
- uri->user ? uri->user : "",
+ user ? user : "",
uri->authmech ? ";auth=" : "",
uri->authmech ? uri->authmech : "",
- uri->passwd ? ":" : "",
- uri->passwd ? uri->passwd : "",
- uri->user ? "@" : "",
+ pass ? ":" : "",
+ pass ? pass : "",
+ user ? "@" : "",
uri->host ? uri->host : "",
uri->path ? uri->path : "",
uri->query ? "?" : "",
uri->query ? uri->query : "");
+
+ g_free (user);
+ g_free (pass);
+
return uri_noproto;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]