From d85679d2a1ea541e0484151970f53a0657e3262c Mon Sep 17 00:00:00 2001 From: Oleg Kalnichevski Date: Wed, 11 Mar 2015 20:54:11 +0000 Subject: [PATCH] HTTPCLIENT-1628: Auth cache can fail when domain name contains uppercase characters Contributed by Dennis Ju git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1666010 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/http/auth/AuthScope.java | 2 +- .../org/apache/http/auth/TestAuthScope.java | 17 +++++++++++++++++ .../client/TestBasicCredentialsProvider.java | 11 +++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/httpclient/src/main/java/org/apache/http/auth/AuthScope.java b/httpclient/src/main/java/org/apache/http/auth/AuthScope.java index f75f2f0b8..548854009 100644 --- a/httpclient/src/main/java/org/apache/http/auth/AuthScope.java +++ b/httpclient/src/main/java/org/apache/http/auth/AuthScope.java @@ -129,7 +129,7 @@ public class AuthScope { final String realm, final String schemeName) { Args.notNull(origin, "Host"); - this.host = origin.getHostName(); + this.host = origin.getHostName().toLowerCase(Locale.ROOT); this.port = origin.getPort() < 0 ? ANY_PORT : origin.getPort(); this.realm = realm == null ? ANY_REALM : realm; this.scheme = schemeName == null ? ANY_SCHEME : schemeName.toUpperCase(Locale.ROOT); diff --git a/httpclient/src/test/java/org/apache/http/auth/TestAuthScope.java b/httpclient/src/test/java/org/apache/http/auth/TestAuthScope.java index 1e87668b1..ce8f28dd1 100644 --- a/httpclient/src/test/java/org/apache/http/auth/TestAuthScope.java +++ b/httpclient/src/test/java/org/apache/http/auth/TestAuthScope.java @@ -87,6 +87,23 @@ public class TestAuthScope { Assert.assertEquals("@somehost:8080", authscope.toString()); } + @Test + public void testMixedCaseHostname() { + final AuthScope authscope = new AuthScope("SomeHost", 80); + Assert.assertEquals(null, authscope.getScheme()); + Assert.assertEquals("somehost", authscope.getHost()); + Assert.assertEquals(80, authscope.getPort()); + Assert.assertEquals(null, authscope.getRealm()); + Assert.assertEquals("@somehost:80", authscope.toString()); + } + + public void testByOriginMixedCaseHostname() throws Exception { + final HttpHost host = new HttpHost("SomeHost", 8080, "http"); + final AuthScope authscope = new AuthScope(host); + Assert.assertEquals("somehost", authscope.getHost()); + Assert.assertEquals(host, authscope.getOrigin()); + } + @Test public void testBasicsOptionalHost() { final AuthScope authscope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, AuthScope.ANY_SCHEME); diff --git a/httpclient/src/test/java/org/apache/http/impl/client/TestBasicCredentialsProvider.java b/httpclient/src/test/java/org/apache/http/impl/client/TestBasicCredentialsProvider.java index 2665a64fd..def37bb69 100644 --- a/httpclient/src/test/java/org/apache/http/impl/client/TestBasicCredentialsProvider.java +++ b/httpclient/src/test/java/org/apache/http/impl/client/TestBasicCredentialsProvider.java @@ -26,6 +26,7 @@ */ package org.apache.http.impl.client; +import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.Credentials; import org.apache.http.auth.UsernamePasswordCredentials; @@ -124,6 +125,16 @@ public class TestBasicCredentialsProvider { Assert.assertNotSame(cred, got); } + @Test + public void testMixedCaseHostname() throws Exception { + final HttpHost httpHost = new HttpHost("hOsT", 80); + final BasicCredentialsProvider state = new BasicCredentialsProvider(); + final Credentials expected = new UsernamePasswordCredentials("name", "pass"); + state.setCredentials(new AuthScope(httpHost), expected); + final Credentials got = state.getCredentials(DEFSCOPE); + Assert.assertEquals(expected, got); + } + @Test public void testCredentialsMatching() { final Credentials creds1 = new UsernamePasswordCredentials("name1", "pass1");