HTTPCLIENT-1381: tolerate null NT domain and host

git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1500276 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Oleg Kalnichevski 2013-07-06 14:12:55 +00:00
parent 6b0fdc74cc
commit f17ef0ad11
2 changed files with 19 additions and 9 deletions

View File

@ -26,6 +26,7 @@
*/ */
package org.apache.http.impl.auth; package org.apache.http.impl.auth;
import java.io.UnsupportedEncodingException;
import java.security.Key; import java.security.Key;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.util.Arrays; import java.util.Arrays;
@ -183,6 +184,9 @@ final class NTLMEngineImpl implements NTLMEngine {
/** Strip dot suffix from a name */ /** Strip dot suffix from a name */
private static String stripDotSuffix(final String value) { private static String stripDotSuffix(final String value) {
if (value == null) {
return null;
}
final int index = value.indexOf("."); final int index = value.indexOf(".");
if (index != -1) if (index != -1)
return value.substring(0, index); return value.substring(0, index);
@ -917,6 +921,9 @@ final class NTLMEngineImpl implements NTLMEngine {
* the bytes to add. * the bytes to add.
*/ */
protected void addBytes(final byte[] bytes) { protected void addBytes(final byte[] bytes) {
if (bytes == null) {
return;
}
for (final byte b : bytes) { for (final byte b : bytes) {
messageContents[currentOutputPosition] = b; messageContents[currentOutputPosition] = b;
currentOutputPosition++; currentOutputPosition++;
@ -971,8 +978,9 @@ final class NTLMEngineImpl implements NTLMEngine {
// Use only the base domain name! // Use only the base domain name!
final String unqualifiedDomain = convertDomain(domain); final String unqualifiedDomain = convertDomain(domain);
hostBytes = unqualifiedHost.getBytes("ASCII"); hostBytes = unqualifiedHost != null? unqualifiedHost.getBytes("ASCII") : null;
domainBytes = unqualifiedDomain.toUpperCase(Locale.US).getBytes("ASCII"); domainBytes = unqualifiedDomain != null ? unqualifiedDomain
.toUpperCase(Locale.US).getBytes("ASCII") : null;
} catch (java.io.UnsupportedEncodingException e) { } catch (java.io.UnsupportedEncodingException e) {
throw new NTLMEngineException("Unicode unsupported: " + e.getMessage(), e); throw new NTLMEngineException("Unicode unsupported: " + e.getMessage(), e);
} }
@ -1219,10 +1227,12 @@ final class NTLMEngineImpl implements NTLMEngine {
} }
try { try {
domainBytes = unqualifiedDomain.toUpperCase(Locale.US).getBytes("UnicodeLittleUnmarked"); hostBytes = unqualifiedHost != null ? unqualifiedHost
hostBytes = unqualifiedHost.getBytes("UnicodeLittleUnmarked"); .getBytes("UnicodeLittleUnmarked") : null;
domainBytes = unqualifiedDomain != null ? unqualifiedDomain
.toUpperCase(Locale.US).getBytes("UnicodeLittleUnmarked") : null;
userBytes = user.getBytes("UnicodeLittleUnmarked"); userBytes = user.getBytes("UnicodeLittleUnmarked");
} catch (java.io.UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
throw new NTLMEngineException("Unicode not supported: " + e.getMessage(), e); throw new NTLMEngineException("Unicode not supported: " + e.getMessage(), e);
} }
} }
@ -1233,8 +1243,8 @@ final class NTLMEngineImpl implements NTLMEngine {
final int ntRespLen = ntResp.length; final int ntRespLen = ntResp.length;
final int lmRespLen = lmResp.length; final int lmRespLen = lmResp.length;
final int domainLen = domainBytes.length; final int domainLen = domainBytes != null ? domainBytes.length : 0;
final int hostLen = hostBytes.length; final int hostLen = hostBytes != null ? hostBytes.length: 0;
final int userLen = userBytes.length; final int userLen = userBytes.length;
final int sessionKeyLen; final int sessionKeyLen;
if (sessionKey != null) if (sessionKey != null)

View File

@ -82,7 +82,7 @@ public class TestClientAuthenticationFakeNTLM extends IntegrationTestBase {
final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider(); final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY, credsProvider.setCredentials(AuthScope.ANY,
new NTCredentials("test", "test", "", "")); new NTCredentials("test", "test", null, null));
this.httpclient = HttpClients.custom() this.httpclient = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider) .setDefaultCredentialsProvider(credsProvider)
@ -127,7 +127,7 @@ public class TestClientAuthenticationFakeNTLM extends IntegrationTestBase {
final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider(); final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY, credsProvider.setCredentials(AuthScope.ANY,
new NTCredentials("test", "test", "", "")); new NTCredentials("test", "test", null, null));
this.httpclient = HttpClients.custom() this.httpclient = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider) .setDefaultCredentialsProvider(credsProvider)