evolution-data-server/bgo-329371-eds-fix-full-username-email-format.patch

145 lines
5.3 KiB
Diff
Raw Normal View History

Index: servers/exchange/lib/e2k-uri.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/exchange/lib/e2k-uri.c,v
retrieving revision 1.5
diff -u -p -r1.5 e2k-uri.c
--- servers/exchange/lib/e2k-uri.c 27 Jan 2006 14:16:06 -0000 1.5
+++ servers/exchange/lib/e2k-uri.c 18 Apr 2006 10:00:10 -0000
@@ -109,14 +109,6 @@ e2k_uri_new (const char *uri_string)
*backslash = '\0';
uri->user = g_strdup (backslash + 1);
}
- else {
- /* if backslash is not there check for @ */
- user_at = strchr (uri->user, '@');
- if (user_at) {
- *user_at = '\0';
- uri->domain = g_strdup (user_at + 1);
- }
- }
} else
uri->user = uri->passwd = uri->domain = NULL;
Index: servers/exchange/lib/e2k-validate.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/exchange/lib/e2k-validate.h,v
retrieving revision 1.3
diff -u -p -r1.3 e2k-validate.h
--- servers/exchange/lib/e2k-validate.h 1 Jul 2005 05:43:21 -0000 1.3
+++ servers/exchange/lib/e2k-validate.h 18 Apr 2006 10:00:47 -0000
@@ -36,7 +36,7 @@ typedef enum {
E2K_AUTOCONFIG_FAILED
} E2kAutoconfigResult;
-gboolean e2k_validate_user (const char *owa_url, char *user, ExchangeParams *exchange_params, gboolean *remember_password, E2kAutoconfigResult *result);
+gboolean e2k_validate_user (const char *owa_url, char **user, ExchangeParams *exchange_params, gboolean *remember_password, E2kAutoconfigResult *result);
#ifdef __cplusplus
Index: servers/exchange/lib/e2k-autoconfig.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/exchange/lib/e2k-autoconfig.c,v
retrieving revision 1.14
diff -u -p -r1.14 e2k-autoconfig.c
--- servers/exchange/lib/e2k-autoconfig.c 6 Mar 2006 06:00:25 -0000 1.14
+++ servers/exchange/lib/e2k-autoconfig.c 18 Apr 2006 10:02:36 -0000
@@ -1002,6 +1002,7 @@ set_account_uri_string (E2kAutoconfig *a
g_string_append (uri, ";mailbox=");
e2k_uri_append_encoded (uri, mailbox, FALSE, ";?");
}
+ printf ("set account uri string: mailbox = %s \n", mailbox);
g_string_append (uri, ";owa_path=/");
e2k_uri_append_encoded (uri, path, FALSE, ";?");
g_free (path);
@@ -1505,6 +1506,7 @@ validate (const char *owa_url, char *use
*mailbox++ = '\0';
exchange_params->mailbox = g_strdup (mailbox);
+ printf ("validate: mailbox = %s \n", exchange_params->mailbox);
exchange_params->owa_path = g_strdup_printf ("%s%s", "/", path);
g_free (path);
exchange_params->host = g_strdup (ac->pf_server);
@@ -1619,14 +1621,20 @@ validate (const char *owa_url, char *use
}
gboolean
-e2k_validate_user (const char *owa_url, char *user,
+e2k_validate_user (const char *owa_url, char **user,
ExchangeParams *exchange_params, gboolean *remember_password,
E2kAutoconfigResult *result)
{
gboolean valid = FALSE, remember=FALSE;
char *key, *password, *prompt;
+ char *username;
+ gchar **usernames;
+ int try = 0;
- key = g_strdup_printf ("%s//%s@%s/", "exchange:", user, owa_url); /* FIXME */
+try_auth_again:
+ username = g_strdup (*user);
+
+ key = g_strdup_printf ("%s//%s@%s/", "exchange:", username, owa_url); /* FIXME */
password = e_passwords_get_password ("Exchange", key);
if (password) {
/* This can be the case, where user presses authenticate button and
@@ -1636,7 +1644,7 @@ e2k_validate_user (const char *owa_url,
e_passwords_forget_password ("Exchange", key);
}
- prompt = g_strdup_printf (_("Enter password for %s"), user);
+ prompt = g_strdup_printf (_("Enter password for %s"), username);
password = e_passwords_ask_password (_("Enter password"),
"Exchange", key, prompt,
E_PASSWORDS_REMEMBER_FOREVER|E_PASSWORDS_SECRET,
@@ -1644,10 +1652,11 @@ e2k_validate_user (const char *owa_url,
g_free (prompt);
if (!password) {
g_free (key);
+ g_free (username);
return valid;
}
- valid = validate (owa_url, user, password, exchange_params, result);
+ valid = validate (owa_url, username, password, exchange_params, result);
if (valid) {
/* generate the proper key once the host name
* is read and remember password temporarily,
@@ -1659,18 +1668,35 @@ e2k_validate_user (const char *owa_url,
g_free (key);
if (exchange_params->is_ntlm)
key = g_strdup_printf ("exchange://%s;auth=NTLM@%s/",
- user, exchange_params->host);
+ username, exchange_params->host);
else
- key = g_strdup_printf ("exchange://%s@%s/", user, exchange_params->host);
+ key = g_strdup_printf ("exchange://%s@%s/", username, exchange_params->host);
e_passwords_add_password (key, password);
e_passwords_remember_password ("Exchange", key);
}
else {
+ if (try == 0) {
+ /* Check for name as e-mail id and try once again
+ * extracing username from e-mail id.
+ */
+ usernames = g_strsplit (*user, "@", 2);
+ if (usernames && usernames[0] && usernames[1]) {
+ username = g_strdup (usernames[0]);
+ g_strfreev (usernames);
+ try ++;
+ memset(*user, 0, strlen(*user));
+ g_free (*user);
+ *user = g_strdup (username);
+ g_free (username);
+ goto try_auth_again;
+ }
+ }
/* if validation failed*/
e_passwords_forget_password ("Exchange", key);
}
g_free (key);
g_free (password);
+ g_free (username);
return valid;
}