[evolution-exchange] Bug #604544 - Try Exchange fallback authentication only once



commit aa1e8b9bfb85e4ce631ab2691cab7ef13f02342e
Author: Milan Crha <mcrha redhat com>
Date:   Tue Dec 15 17:58:05 2009 +0100

    Bug #604544 - Try Exchange fallback authentication only once

 server/lib/e2k-kerberos.c         |    3 +++
 server/storage/exchange-account.c |   17 ++++++++++++++++-
 2 files changed, 19 insertions(+), 1 deletions(-)
---
diff --git a/server/lib/e2k-kerberos.c b/server/lib/e2k-kerberos.c
index bf1a99e..c32176f 100644
--- a/server/lib/e2k-kerberos.c
+++ b/server/lib/e2k-kerberos.c
@@ -58,6 +58,7 @@ krb5_result_to_e2k_kerberos_result (gint result)
 
 	case KRB5KRB_AP_ERR_BAD_INTEGRITY:
 	case KRB5KDC_ERR_PREAUTH_FAILED:
+	case KRB5KDC_ERR_CLIENT_REVOKED:
 		return E2K_KERBEROS_PASSWORD_INCORRECT;
 
 	case KRB5KDC_ERR_KEY_EXP:
@@ -71,6 +72,8 @@ krb5_result_to_e2k_kerberos_result (gint result)
 
 	default:
 		g_warning ("Unexpected kerberos error %d", result);
+
+	case KRB5_REALM_UNKNOWN:
 		return E2K_KERBEROS_FAILED;
 	}
 }
diff --git a/server/storage/exchange-account.c b/server/storage/exchange-account.c
index b4e4ec7..a0c26da 100644
--- a/server/storage/exchange-account.c
+++ b/server/storage/exchange-account.c
@@ -1384,6 +1384,7 @@ exchange_account_connect (ExchangeAccount *account, const gchar *pword,
 	E2kGlobalCatalogEntry *entry;
 	E2kOperation gcop;
 	gchar *user_name = NULL;
+	gboolean tried_ntlm = FALSE, tried_basic = FALSE;
 
 	*info_result = EXCHANGE_ACCOUNT_UNKNOWN_ERROR;
 	g_return_val_if_fail (EXCHANGE_IS_ACCOUNT (account), NULL);
@@ -1441,6 +1442,9 @@ exchange_account_connect (ExchangeAccount *account, const gchar *pword,
 
 	e2k_autoconfig_set_password (ac, pword);
 
+	tried_basic = !ac->use_ntlm;
+	tried_ntlm = ac->use_ntlm;
+
  try_connect_again:
 	account->priv->ctx = e2k_autoconfig_get_context (ac, NULL, &result);
 
@@ -1476,16 +1480,27 @@ exchange_account_connect (ExchangeAccount *account, const gchar *pword,
 			return NULL;
 
 		case E2K_AUTOCONFIG_AUTH_ERROR_TRY_NTLM:
+			if (tried_ntlm)
+				break;
+
+			tried_ntlm = TRUE;
 			ac->use_ntlm = 1;
 			goto try_connect_again;
 
 		case E2K_AUTOCONFIG_AUTH_ERROR_TRY_BASIC:
+			if (tried_basic)
+				break;
+
+			tried_basic = TRUE;
 			ac->use_ntlm = 0;
 			goto try_connect_again;
 
 		case E2K_AUTOCONFIG_REDIRECT:
-			if (!redirected && account_moved (account, ac))
+			if (!redirected && account_moved (account, ac)) {
+				tried_basic = !ac->use_ntlm;
+				tried_ntlm = ac->use_ntlm;
 				goto try_connect_again;
+			}
 			break;
 
 		case E2K_AUTOCONFIG_TRY_SSL:



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]