aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
Diffstat (limited to 'mail')
-rw-r--r--mail/em-utils.c65
1 files changed, 64 insertions, 1 deletions
diff --git a/mail/em-utils.c b/mail/em-utils.c
index e9cdead6cf..06b1713628 100644
--- a/mail/em-utils.c
+++ b/mail/em-utils.c
@@ -1160,6 +1160,69 @@ em_utils_folder_is_outbox (CamelFolder *folder, const gchar *uri)
static EProxy *emu_proxy = NULL;
static GStaticMutex emu_proxy_lock = G_STATIC_MUTEX_INIT;
+/* encode to string this way, because soup_uri_to_string doesn't include passwords */
+static gchar *
+suri_to_string (SoupURI *suri)
+{
+ GString *uri;
+ gchar *tmp;
+
+ if (!suri)
+ return NULL;
+
+ uri = g_string_sized_new (20);
+
+ if (suri->scheme)
+ g_string_append_printf (uri, "%s:", suri->scheme);
+ if (suri->host) {
+ g_string_append (uri, "//");
+ if (suri->user) {
+ tmp = soup_uri_encode (suri->user, ":/;#@?\\");
+ g_string_append (uri, tmp);
+ g_free (tmp);
+ }
+
+ if (suri->password) {
+ g_string_append_c (uri, ':');
+ tmp = soup_uri_encode (suri->password, ":/;#@?\\");
+ g_string_append (uri, tmp);
+ g_free (tmp);
+ }
+
+ if (suri->user || suri->password)
+ g_string_append_c (uri, '@');
+
+ if (strchr (suri->host, ':')) {
+ g_string_append_c (uri, '[');
+ g_string_append (uri, suri->host);
+ g_string_append_c (uri, ']');
+ } else {
+ tmp = soup_uri_encode (suri->host, ":/");
+ g_string_append (uri, tmp);
+ g_free (tmp);
+ }
+
+ if (suri->port && !soup_uri_uses_default_port (suri))
+ g_string_append_printf (uri, ":%d", suri->port);
+ if (!suri->path && (suri->query || suri->fragment))
+ g_string_append_c (uri, '/');
+ }
+
+ if (suri->path && *suri->path)
+ g_string_append (uri, suri->path);
+
+ if (suri->query) {
+ g_string_append_c (uri, '?');
+ g_string_append (uri, suri->query);
+ }
+ if (suri->fragment) {
+ g_string_append_c (uri, '#');
+ g_string_append (uri, suri->fragment);
+ }
+
+ return g_string_free (uri, FALSE);
+}
+
static gpointer
emu_proxy_setup (gpointer data)
{
@@ -1191,7 +1254,7 @@ em_utils_get_proxy_uri (const gchar *pUri)
}
if (e_proxy_require_proxy_for_uri (emu_proxy, pUri))
- uri = soup_uri_to_string (e_proxy_peek_uri_for (emu_proxy, pUri), FALSE);
+ uri = suri_to_string (e_proxy_peek_uri_for (emu_proxy, pUri));
g_static_mutex_unlock (&emu_proxy_lock);