diff options
author | spingel | 2009-09-20 06:57:59 +0000 |
---|---|---|
committer | spingel | 2009-09-20 06:57:59 +0000 |
commit | dbe020c085ea78ba8092e6628fe93f49dc7165d9 (patch) | |
tree | 1a789da4c924e545a7e4b43fb9c021561a088e98 /org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac | |
parent | b56965a9e0fd0e23f7765d1cac395ea3669559da (diff) | |
download | org.eclipse.mylyn.tasks-dbe020c085ea78ba8092e6628fe93f49dc7165d9.tar.gz org.eclipse.mylyn.tasks-dbe020c085ea78ba8092e6628fe93f49dc7165d9.tar.xz org.eclipse.mylyn.tasks-dbe020c085ea78ba8092e6628fe93f49dc7165d9.zip |
NEW - bug 279746: authentification fails if NTLM is required but no domain is specified
https://bugs.eclipse.org/bugs/show_bug.cgi?id=279746
Diffstat (limited to 'org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac')
3 files changed, 38 insertions, 9 deletions
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracLoginException.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracLoginException.java index 8c6f03004..d8cd62939 100644 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracLoginException.java +++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracLoginException.java @@ -20,6 +20,8 @@ public class TracLoginException extends TracException { private static final long serialVersionUID = -6128773690643367414L; + private boolean ntlmAuthRequested; + public TracLoginException() { } @@ -27,4 +29,12 @@ public class TracLoginException extends TracException { super(message); } + public boolean isNtlmAuthRequested() { + return ntlmAuthRequested; + } + + void setNtlmAuthRequested(boolean ntlmAuthRequested) { + this.ntlmAuthRequested = ntlmAuthRequested; + } + } diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracXmlRpcClient.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracXmlRpcClient.java index 72bfb9486..3d3325af1 100644 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracXmlRpcClient.java +++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracXmlRpcClient.java @@ -38,6 +38,7 @@ import org.apache.commons.httpclient.auth.AuthScheme; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.auth.BasicScheme; import org.apache.commons.httpclient.auth.DigestScheme; +import org.apache.commons.httpclient.auth.NTLMScheme; import org.apache.commons.httpclient.methods.HeadMethod; import org.apache.xmlrpc.XmlRpcException; import org.apache.xmlrpc.client.XmlRpcClient; @@ -163,7 +164,9 @@ public class TracXmlRpcClient extends AbstractTracClient implements ITracWikiCli System.err.println(location.getUrl() + ": Unauthorized (" + e.code + ")"); //$NON-NLS-1$ //$NON-NLS-2$ } digestScheme = null; - throw new TracLoginException(); + TracLoginException exception = new TracLoginException(); + exception.setNtlmAuthRequested(e.getAuthScheme() instanceof NTLMScheme); + throw exception; } else if (e.code == HttpStatus.SC_FORBIDDEN) { if (DEBUG_AUTH) { System.err.println(location.getUrl() + ": Forbidden (" + e.code + ")"); //$NON-NLS-1$ //$NON-NLS-2$ diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/util/TracHttpClientTransportFactory.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/util/TracHttpClientTransportFactory.java index de6495258..a0b29d5b9 100644 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/util/TracHttpClientTransportFactory.java +++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/util/TracHttpClientTransportFactory.java @@ -22,7 +22,9 @@ import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HostConfiguration; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; +import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.HttpVersion; +import org.apache.commons.httpclient.auth.AuthScheme; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.RequestEntity; import org.apache.xmlrpc.XmlRpcException; @@ -90,21 +92,25 @@ public class TracHttpClientTransportFactory implements XmlRpcTransportFactory { protected InputStream getInputStream() throws XmlRpcException { int responseCode = method.getStatusCode(); if (responseCode != HttpURLConnection.HTTP_OK) { - throw new TracHttpException(responseCode); + TracHttpException e = new TracHttpException(responseCode); + if (responseCode == HttpStatus.SC_UNAUTHORIZED) { + e.setAuthScheme(method.getHostAuthState().getAuthScheme()); + } + throw e; } try { return method.getResponseBodyAsStream(); } catch (HttpException e) { - throw new XmlRpcClientException("Error in HTTP transport: " + e.getMessage(), e); //$NON-NLS-1$ + throw new XmlRpcClientException("Error in HTTP transport: " + e.getMessage(), e); } catch (IOException e) { - throw new XmlRpcClientException("I/O error in server communication: " + e.getMessage(), e); //$NON-NLS-1$ + throw new XmlRpcClientException("I/O error in server communication: " + e.getMessage(), e); } } @Override protected String getUserAgent() { - return WebUtil.getUserAgent(""); //$NON-NLS-1$ + return WebUtil.getUserAgent(""); } @Override @@ -168,7 +174,7 @@ public class TracHttpClientTransportFactory implements XmlRpcTransportFactory { } public String getContentType() { - return "text/xml"; //$NON-NLS-1$ + return "text/xml"; } public boolean isRepeatable() { @@ -216,10 +222,10 @@ public class TracHttpClientTransportFactory implements XmlRpcTransportFactory { if (t instanceof XmlRpcException) { throw (XmlRpcException) t; } else { - throw new XmlRpcException("Unexpected exception: " + t.getMessage(), t); //$NON-NLS-1$ + throw new XmlRpcException("Unexpected exception: " + t.getMessage(), t); } } catch (IOException e) { - throw new XmlRpcException("I/O error while communicating with HTTP server: " + e.getMessage(), e); //$NON-NLS-1$ + throw new XmlRpcException("I/O error while communicating with HTTP server: " + e.getMessage(), e); } } @@ -229,8 +235,18 @@ public class TracHttpClientTransportFactory implements XmlRpcTransportFactory { private static final long serialVersionUID = 9032521978140685830L; + private AuthScheme authScheme; + public TracHttpException(int responseCode) { - super(responseCode, "HTTP Error " + responseCode); //$NON-NLS-1$ + super(responseCode, "HTTP Error " + responseCode); + } + + public AuthScheme getAuthScheme() { + return authScheme; + } + + public void setAuthScheme(AuthScheme authScheme) { + this.authScheme = authScheme; } } |