mirror of
https://github.com/moparisthebest/davmail
synced 2024-12-13 19:22:22 -05:00
Another NTLM fix: activate NTLM only on 401 unauthorized in executeGetMethod
git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@857 3d1905a2-6b24-0410-a738-b14d5a86fcbd
This commit is contained in:
parent
bcda464f20
commit
849ba11a5e
@ -25,6 +25,7 @@ import davmail.exception.HttpForbiddenException;
|
|||||||
import davmail.exception.HttpNotFoundException;
|
import davmail.exception.HttpNotFoundException;
|
||||||
import davmail.ui.tray.DavGatewayTray;
|
import davmail.ui.tray.DavGatewayTray;
|
||||||
import org.apache.commons.httpclient.*;
|
import org.apache.commons.httpclient.*;
|
||||||
|
import org.apache.commons.httpclient.auth.AuthPolicy;
|
||||||
import org.apache.commons.httpclient.auth.AuthScope;
|
import org.apache.commons.httpclient.auth.AuthScope;
|
||||||
import org.apache.commons.httpclient.methods.DeleteMethod;
|
import org.apache.commons.httpclient.methods.DeleteMethod;
|
||||||
import org.apache.commons.httpclient.methods.GetMethod;
|
import org.apache.commons.httpclient.methods.GetMethod;
|
||||||
@ -41,6 +42,9 @@ import org.apache.log4j.Logger;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create HttpClient instance according to DavGateway Settings
|
* Create HttpClient instance according to DavGateway Settings
|
||||||
@ -117,6 +121,12 @@ public final class DavGatewayHttpClientFacade {
|
|||||||
httpClient.setHttpConnectionManager(multiThreadedHttpConnectionManager);
|
httpClient.setHttpConnectionManager(multiThreadedHttpConnectionManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ArrayList<String> authPrefs = new ArrayList<String>();
|
||||||
|
authPrefs.add(AuthPolicy.DIGEST);
|
||||||
|
authPrefs.add(AuthPolicy.BASIC);
|
||||||
|
// exclude NTLM authentication scheme
|
||||||
|
httpClient.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs);
|
||||||
|
|
||||||
boolean enableProxy = Settings.getBooleanProperty("davmail.enableProxy");
|
boolean enableProxy = Settings.getBooleanProperty("davmail.enableProxy");
|
||||||
String proxyHost = null;
|
String proxyHost = null;
|
||||||
int proxyPort = 0;
|
int proxyPort = 0;
|
||||||
@ -355,6 +365,19 @@ public final class DavGatewayHttpClientFacade {
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean hasNTLM(HttpClient httpClient) {
|
||||||
|
Object authPrefs = httpClient.getParams().getParameter(AuthPolicy.AUTH_SCHEME_PRIORITY);
|
||||||
|
return authPrefs instanceof List<?> && ((Collection) authPrefs).contains(AuthPolicy.NTLM);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void addNTLM(HttpClient httpClient) {
|
||||||
|
ArrayList<String> authPrefs = new ArrayList<String>();
|
||||||
|
authPrefs.add(AuthPolicy.NTLM);
|
||||||
|
authPrefs.add(AuthPolicy.DIGEST);
|
||||||
|
authPrefs.add(AuthPolicy.BASIC);
|
||||||
|
httpClient.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute Get method, do not follow redirects.
|
* Execute Get method, do not follow redirects.
|
||||||
*
|
*
|
||||||
@ -367,6 +390,12 @@ public final class DavGatewayHttpClientFacade {
|
|||||||
// do not follow redirects in expired sessions
|
// do not follow redirects in expired sessions
|
||||||
method.setFollowRedirects(followRedirects);
|
method.setFollowRedirects(followRedirects);
|
||||||
int status = httpClient.executeMethod(method);
|
int status = httpClient.executeMethod(method);
|
||||||
|
if (status == HttpStatus.SC_UNAUTHORIZED & !hasNTLM(httpClient)) {
|
||||||
|
method.releaseConnection();
|
||||||
|
LOGGER.debug("Received unauthorized at "+method.getURI()+", retrying with NTLM");
|
||||||
|
addNTLM(httpClient);
|
||||||
|
status = httpClient.executeMethod(method);
|
||||||
|
}
|
||||||
if (status != HttpStatus.SC_OK) {
|
if (status != HttpStatus.SC_OK) {
|
||||||
LOGGER.warn("GET failed with status " + status + " at " + method.getURI() + ": " + method.getResponseBodyAsString());
|
LOGGER.warn("GET failed with status " + status + " at " + method.getURI() + ": " + method.getResponseBodyAsString());
|
||||||
throw new DavMailException("EXCEPTION_GET_FAILED", status, method.getURI());
|
throw new DavMailException("EXCEPTION_GET_FAILED", status, method.getURI());
|
||||||
|
Loading…
Reference in New Issue
Block a user