diff -up evolution-ews-3.18.5/src/addressbook/e-book-backend-ews.c.ntlm-auth-test-failure evolution-ews-3.18.5/src/addressbook/e-book-backend-ews.c
--- evolution-ews-3.18.5/src/addressbook/e-book-backend-ews.c.ntlm-auth-test-failure 2015-09-21 11:59:31.000000000 +0200
+++ evolution-ews-3.18.5/src/addressbook/e-book-backend-ews.c 2016-04-20 22:54:21.031556789 +0200
@@ -4170,6 +4170,13 @@ e_book_backend_ews_authenticate_sync (EB
} else {
ews_backend->priv->is_writable = FALSE;
e_backend_set_online (backend, FALSE);
+
+ if (e_ews_connection_utils_get_without_password (ews_settings) &&
+ result == E_SOURCE_AUTHENTICATION_REJECTED &&
+ !e_named_parameters_exists (credentials, E_SOURCE_CREDENTIAL_PASSWORD)) {
+ e_ews_connection_utils_force_off_ntlm_auth_check ();
+ result = E_SOURCE_AUTHENTICATION_REQUIRED;
+ }
}
e_book_backend_set_writable (E_BOOK_BACKEND (backend), ews_backend->priv->is_writable);
diff -up evolution-ews-3.18.5/src/calendar/e-cal-backend-ews.c.ntlm-auth-test-failure evolution-ews-3.18.5/src/calendar/e-cal-backend-ews.c
--- evolution-ews-3.18.5/src/calendar/e-cal-backend-ews.c.ntlm-auth-test-failure 2015-09-21 11:59:31.000000000 +0200
+++ evolution-ews-3.18.5/src/calendar/e-cal-backend-ews.c 2016-04-20 22:54:21.032556789 +0200
@@ -4341,6 +4341,11 @@ e_cal_backend_ews_authenticate_sync (EBa
ews_start_sync (cal_backend);
cbews_listen_notifications_cb (cal_backend, NULL, ews_settings);
+ } else if (e_ews_connection_utils_get_without_password (ews_settings) &&
+ result == E_SOURCE_AUTHENTICATION_REJECTED &&
+ !e_named_parameters_exists (credentials, E_SOURCE_CREDENTIAL_PASSWORD)) {
+ e_ews_connection_utils_force_off_ntlm_auth_check ();
+ result = E_SOURCE_AUTHENTICATION_REQUIRED;
}
g_object_unref (connection);
diff -up evolution-ews-3.18.5/src/collection/e-ews-backend.c.ntlm-auth-test-failure evolution-ews-3.18.5/src/collection/e-ews-backend.c
--- evolution-ews-3.18.5/src/collection/e-ews-backend.c.ntlm-auth-test-failure 2015-09-21 11:59:31.000000000 +0200
+++ evolution-ews-3.18.5/src/collection/e-ews-backend.c 2016-04-20 22:54:21.032556789 +0200
@@ -1045,6 +1045,11 @@ ews_backend_authenticate_sync (EBackend
e_collection_backend_authenticate_children (E_COLLECTION_BACKEND (backend), credentials);
e_ews_backend_sync_folders (ews_backend, NULL, ews_backend_folders_synced_cb, NULL);
+ } else if (e_ews_connection_utils_get_without_password (ews_settings) &&
+ result == E_SOURCE_AUTHENTICATION_REJECTED &&
+ !e_named_parameters_exists (credentials, E_SOURCE_CREDENTIAL_PASSWORD)) {
+ e_ews_connection_utils_force_off_ntlm_auth_check ();
+ result = E_SOURCE_AUTHENTICATION_REQUIRED;
}
return result;
diff -up evolution-ews-3.18.5/src/configuration/e-ews-config-utils.c.ntlm-auth-test-failure evolution-ews-3.18.5/src/configuration/e-ews-config-utils.c
--- evolution-ews-3.18.5/src/configuration/e-ews-config-utils.c.ntlm-auth-test-failure 2015-06-17 18:07:41.000000000 +0200
+++ evolution-ews-3.18.5/src/configuration/e-ews-config-utils.c 2016-04-20 22:54:21.032556789 +0200
@@ -383,12 +383,18 @@ e_ews_config_utils_open_connection_for (
if (result != E_SOURCE_AUTHENTICATION_ACCEPTED) {
g_clear_object (&conn);
- break;
+ if (result != E_SOURCE_AUTHENTICATION_REJECTED || local_error)
+ break;
}
- } else {
+ }
+
+ if (!conn) {
EShell *shell;
TryCredentialsData data;
+ e_ews_connection_utils_force_off_ntlm_auth_check ();
+ g_clear_error (&local_error);
+
shell = e_shell_get_default ();
data.ews_settings = g_object_ref (ews_settings);
diff -up evolution-ews-3.18.5/src/configuration/e-mail-config-ews-autodiscover.c.ntlm-auth-test-failure evolution-ews-3.18.5/src/configuration/e-mail-config-ews-autodiscover.c
--- evolution-ews-3.18.5/src/configuration/e-mail-config-ews-autodiscover.c.ntlm-auth-test-failure 2015-03-23 08:28:34.000000000 +0100
+++ evolution-ews-3.18.5/src/configuration/e-mail-config-ews-autodiscover.c 2016-04-20 22:54:21.032556789 +0200
@@ -169,13 +169,21 @@ mail_config_ews_autodiscover_run_thread
gboolean success = FALSE;
if (!g_cancellable_set_error_if_cancelled (cancellable, &local_error) && !local_error) {
- if (e_ews_connection_utils_get_without_password (async_context->ews_settings)) {
+ gboolean without_password;
+
+ without_password = e_ews_connection_utils_get_without_password (async_context->ews_settings);
+ if (without_password) {
success = e_ews_autodiscover_ws_url_sync (
async_context->ews_settings, async_context->email_address, "",
cancellable, &local_error);
- } else {
+ }
+
+ if (!without_password || g_error_matches (local_error, SOUP_HTTP_ERROR, SOUP_STATUS_UNAUTHORIZED)) {
EShell *shell;
+ e_ews_connection_utils_force_off_ntlm_auth_check ();
+ g_clear_error (&local_error);
+
shell = e_shell_get_default ();
success = e_credentials_prompter_loop_prompt_sync (e_shell_get_credentials_prompter (shell),
diff -up evolution-ews-3.18.5/src/server/e-ews-connection-utils.c.ntlm-auth-test-failure evolution-ews-3.18.5/src/server/e-ews-connection-utils.c
--- evolution-ews-3.18.5/src/server/e-ews-connection-utils.c.ntlm-auth-test-failure 2014-08-11 09:12:45.000000000 +0200
+++ evolution-ews-3.18.5/src/server/e-ews-connection-utils.c 2016-04-20 22:54:21.032556789 +0200
@@ -67,6 +67,8 @@ e_ews_connection_utils_check_element (co
return TRUE;
}
+static gboolean force_off_ntlm_auth_check = FALSE;
+
static gboolean
ews_connect_check_ntlm_available (void)
{
@@ -80,6 +82,9 @@ ews_connect_check_ntlm_available (void)
gchar *command;
gint ret;
+ if (force_off_ntlm_auth_check)
+ return FALSE;
+
/* We are attempting to predict what libsoup will do. */
helper = g_getenv ("SOUP_NTLM_AUTH_DEBUG");
if (!helper)
@@ -145,6 +150,11 @@ ews_connect_check_ntlm_available (void)
#endif
}
+void
+e_ews_connection_utils_force_off_ntlm_auth_check (void)
+{
+ force_off_ntlm_auth_check = TRUE;
+}
/* Should we bother to attempt a connection without a password? Remember,
* this is *purely* an optimisation to avoid that extra round-trip if we
diff -up evolution-ews-3.18.5/src/server/e-ews-connection-utils.h.ntlm-auth-test-failure evolution-ews-3.18.5/src/server/e-ews-connection-utils.h
--- evolution-ews-3.18.5/src/server/e-ews-connection-utils.h.ntlm-auth-test-failure 2014-08-11 09:12:45.000000000 +0200
+++ evolution-ews-3.18.5/src/server/e-ews-connection-utils.h 2016-04-20 22:54:21.032556789 +0200
@@ -32,6 +32,8 @@ gboolean e_ews_connection_utils_check_el
const gchar *element_name,
const gchar *expected_name);
+void e_ews_connection_utils_force_off_ntlm_auth_check
+ (void);
gboolean e_ews_connection_utils_get_without_password
(CamelEwsSettings *ews_settings);