[gnome-online-accounts/gnome-3-8] imap-auth-login: Escape backslashes in passwords
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-online-accounts/gnome-3-8] imap-auth-login: Escape backslashes in passwords
- Date: Thu, 14 Mar 2013 12:07:51 +0000 (UTC)
commit 05f7bb3a42fae76382ef0de68cd250fbc7c46b31
Author: Debarshi Ray <debarshir gnome org>
Date: Wed Mar 13 21:37:03 2013 +0100
imap-auth-login: Escape backslashes in passwords
Fixes: https://bugzilla.gnome.org/695802
src/goabackend/goaimapauthlogin.c | 35 +++++++++++++++++++++++++++++++++--
1 files changed, 33 insertions(+), 2 deletions(-)
---
diff --git a/src/goabackend/goaimapauthlogin.c b/src/goabackend/goaimapauthlogin.c
index c5a2edd..471c6aa 100644
--- a/src/goabackend/goaimapauthlogin.c
+++ b/src/goabackend/goaimapauthlogin.c
@@ -22,6 +22,9 @@
*/
#include "config.h"
+
+#include <string.h>
+
#include <glib/gi18n-lib.h>
#include <stdlib.h>
@@ -82,6 +85,28 @@ G_DEFINE_TYPE (GoaImapAuthLogin, goa_imap_auth_login, GOA_TYPE_MAIL_AUTH);
/* ---------------------------------------------------------------------------------------------------- */
+static gchar *
+imap_auth_escape_backslash (const gchar *str)
+{
+ GString *ret;
+ gsize i;
+ gsize len;
+
+ ret = g_string_new ("");
+ len = strlen (str);
+
+ for (i = 0; i < len; i++)
+ {
+ if (str[i] == '\\')
+ g_string_append_c (ret, '\\');
+ g_string_append_c (ret, str[i]);
+ }
+
+ return g_string_free (ret, FALSE);
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
static void
goa_imap_auth_login_finalize (GObject *object)
{
@@ -319,11 +344,13 @@ goa_imap_auth_login_run_sync (GoaMailAuth *_auth,
if (auth->password != NULL)
{
- password = g_strdup (auth->password);
+ password = imap_auth_escape_backslash (auth->password);
}
else if (auth->provider != NULL && auth->object != NULL)
{
GVariant *credentials;
+ gchar *value;
+
credentials = goa_utils_lookup_credentials_sync (auth->provider,
auth->object,
cancellable,
@@ -333,7 +360,7 @@ goa_imap_auth_login_run_sync (GoaMailAuth *_auth,
g_prefix_error (error, "Error looking up credentials for IMAP LOGIN in keyring: ");
goto out;
}
- if (!g_variant_lookup (credentials, "imap-password", "s", &password))
+ if (!g_variant_lookup (credentials, "imap-password", "s", &value))
{
g_set_error (error,
GOA_ERROR,
@@ -342,6 +369,10 @@ goa_imap_auth_login_run_sync (GoaMailAuth *_auth,
g_variant_unref (credentials);
goto out;
}
+
+ password = imap_auth_escape_backslash (value);
+
+ g_free (value);
g_variant_unref (credentials);
}
else
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]