[WAGON-479] Preemptive auth with HTTP Provider may fail because BasicScheme is added as completed=true to the AuthCache
Project: http://git-wip-us.apache.org/repos/asf/maven-wagon/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-wagon/commit/594132be Tree: http://git-wip-us.apache.org/repos/asf/maven-wagon/tree/594132be Diff: http://git-wip-us.apache.org/repos/asf/maven-wagon/diff/594132be Branch: refs/heads/jetty-8 Commit: 594132bead0067e264d0592e4c8fc41197ca5881 Parents: d83a492 Author: Michael Osipov <micha...@apache.org> Authored: Tue Dec 27 23:29:26 2016 +0100 Committer: Michael Osipov <micha...@apache.org> Committed: Thu Dec 29 21:26:46 2016 +0100 ---------------------------------------------------------------------- .../providers/http/AbstractHttpClientWagon.java | 45 +++++--------------- 1 file changed, 11 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/594132be/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java ---------------------------------------------------------------------- diff --git a/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java b/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java index 7773d97..d38506f 100755 --- a/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java +++ b/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java @@ -25,10 +25,9 @@ import org.apache.http.HttpException; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; -import org.apache.http.auth.AUTH; import org.apache.http.auth.AuthScope; +import org.apache.http.auth.ChallengeState; import org.apache.http.auth.Credentials; -import org.apache.http.auth.MalformedChallengeException; import org.apache.http.auth.NTCredentials; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.AuthCache; @@ -460,9 +459,9 @@ public abstract class AbstractHttpClientWagon creds = new UsernamePasswordCredentials( proxyUsername, proxyPassword ); } - int port = proxyInfo.getPort(); + int proxyPort = proxyInfo.getPort(); - AuthScope authScope = getProxyBasicAuthScope().getScope( proxyHost, port ); + AuthScope authScope = getProxyBasicAuthScope().getScope( proxyHost, proxyPort ); credentialsProvider.setCredentials( authScope, creds ); } } @@ -576,15 +575,7 @@ public abstract class AbstractHttpClientWagon if ( credentialsProvider.getCredentials( targetScope ) != null ) { BasicScheme targetAuth = new BasicScheme(); - try - { - targetAuth.processChallenge( new BasicHeader( AUTH.WWW_AUTH, "BASIC preemptive" ) ); - authCache.put( targetHost, targetAuth ); - } - catch ( MalformedChallengeException ignore ) - { - // ignore - } + authCache.put( targetHost, targetAuth ); } HttpPut putMethod = new HttpPut( url ); @@ -807,7 +798,6 @@ public abstract class AbstractHttpClientWagon if ( credentialsProvider.getCredentials( targetScope ) != null ) { BasicScheme targetAuth = new BasicScheme(); - targetAuth.processChallenge( new BasicHeader( AUTH.WWW_AUTH, "BASIC preemptive" ) ); authCache.put( targetHost, targetAuth ); } } @@ -819,26 +809,13 @@ public abstract class AbstractHttpClientWagon HttpHost proxyHost = new HttpHost( proxyInfo.getHost(), proxyInfo.getPort() ); AuthScope proxyScope = getProxyBasicAuthScope().getScope( proxyHost ); - String proxyUsername = proxyInfo.getUserName(); - String proxyPassword = proxyInfo.getPassword(); - String proxyNtlmHost = proxyInfo.getNtlmHost(); - String proxyNtlmDomain = proxyInfo.getNtlmDomain(); - - if ( proxyUsername != null && proxyPassword != null ) + if ( credentialsProvider.getCredentials( proxyScope ) != null ) { - Credentials creds; - if ( proxyNtlmHost != null || proxyNtlmDomain != null ) - { - creds = new NTCredentials( proxyUsername, proxyPassword, proxyNtlmHost, proxyNtlmDomain ); - } - else - { - creds = new UsernamePasswordCredentials( proxyUsername, proxyPassword ); - } - - credentialsProvider.setCredentials( proxyScope, creds ); - BasicScheme proxyAuth = new BasicScheme(); - proxyAuth.processChallenge( new BasicHeader( AUTH.PROXY_AUTH, "BASIC preemptive" ) ); + /* This is extremely ugly because we need to set challengeState to PROXY, but + * the constructor is deprecated. Alternatively, we could subclass BasicScheme + * to ProxyBasicScheme and set the state internally in the constructor. + */ + BasicScheme proxyAuth = new BasicScheme( ChallengeState.PROXY ); authCache.put( proxyHost, proxyAuth ); } } @@ -1158,4 +1135,4 @@ public abstract class AbstractHttpClientWagon { return MAX_BACKOFF_WAIT_SECONDS; } -} \ No newline at end of file +}