You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2012/02/08 15:38:27 UTC

svn commit: r1241912 - in /maven/wagon/trunk/wagon-providers: wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/ wagon-http-shared/src/test/java/org/apache/maven/wagon/shared/http/ wagon-http-shared4/src/test/java/org/apache/maven/wago...

Author: olamy
Date: Wed Feb  8 14:38:27 2012
New Revision: 1241912

URL: http://svn.apache.org/viewvc?rev=1241912&view=rev
Log:
[WAGON-368] Support NTLM authentication
Submitted by Adrián Boimvaser.

Modified:
    maven/wagon/trunk/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
    maven/wagon/trunk/wagon-providers/wagon-http-shared/src/test/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagonTest.java
    maven/wagon/trunk/wagon-providers/wagon-http-shared4/src/test/java/org/apache/maven/wagon/shared/http4/AbstractHttpClientWagonTest.java

Modified: maven/wagon/trunk/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java?rev=1241912&r1=1241911&r2=1241912&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java Wed Feb  8 14:38:27 2012
@@ -202,11 +202,19 @@ public abstract class AbstractHttpClient
 
         String username = null;
         String password = null;
+        String domain = null;
 
         if ( authenticationInfo != null )
         {
             username = authenticationInfo.getUserName();
 
+            if ( StringUtils.contains( username, "\\" ) )
+            {
+                String[] domainAndUsername = username.split( "\\\\" );
+                domain = domainAndUsername[0];
+                username = domainAndUsername[1];
+            }
+
             password = authenticationInfo.getPassword();
 
             client.getParams().setAuthenticationPreemptive( true );
@@ -216,7 +224,15 @@ public abstract class AbstractHttpClient
 
         if ( StringUtils.isNotEmpty( username ) && StringUtils.isNotEmpty( password ) )
         {
-            Credentials creds = new UsernamePasswordCredentials( username, password );
+            Credentials creds;
+            if ( domain != null )
+            {
+                creds = new NTCredentials( username, password, host, domain );
+            }
+            else
+            {
+                creds = new UsernamePasswordCredentials( username, password );
+            }
 
             int port = getRepository().getPort() > -1 ? getRepository().getPort() : AuthScope.ANY_PORT;
 
@@ -722,7 +738,7 @@ public abstract class AbstractHttpClient
     protected void putFromStream( InputStream stream, Resource resource )
         throws TransferFailedException, AuthorizationException, ResourceDoesNotExistException
     {
-        putFromStream( stream, resource.getName( ), -1, -1 );
+        putFromStream( stream, resource.getName(), -1, -1 );
     }
 
     @Override

Modified: maven/wagon/trunk/wagon-providers/wagon-http-shared/src/test/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagonTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http-shared/src/test/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagonTest.java?rev=1241912&r1=1241911&r2=1241912&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http-shared/src/test/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagonTest.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http-shared/src/test/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagonTest.java Wed Feb  8 14:38:27 2012
@@ -19,14 +19,21 @@ package org.apache.maven.wagon.shared.ht
  * under the License.
  */
 
+import junit.framework.TestCase;
+import org.apache.commons.httpclient.Credentials;
 import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.NTCredentials;
+import org.apache.commons.httpclient.auth.AuthScope;
 import org.apache.commons.httpclient.methods.HeadMethod;
 import org.apache.commons.httpclient.params.HttpClientParams;
 import org.apache.commons.httpclient.params.HttpMethodParams;
-
-import junit.framework.TestCase;
+import org.apache.maven.wagon.ConnectionException;
 import org.apache.maven.wagon.OutputData;
 import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.authentication.AuthenticationException;
+import org.apache.maven.wagon.authentication.AuthenticationInfo;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.repository.Repository;
 
 public class AbstractHttpClientWagonTest
     extends TestCase
@@ -144,6 +151,78 @@ public class AbstractHttpClientWagonTest
         assertNull( header );
     }
 
+    public void testNTCredentialsWithUsernameNull()
+        throws AuthenticationException, ConnectionException
+    {
+        TestWagon wagon = new TestWagon();
+
+        Repository repository = new Repository( "mockRepoId", "mockRepoURL" );
+        wagon.connect( repository );
+
+        wagon.openConnection();
+
+        assertNull( wagon.getAuthenticationInfo().getUserName() );
+        assertNull( wagon.getAuthenticationInfo().getPassword() );
+
+        assertFalse( wagon.getClient().getState().getCredentials( new AuthScope( null, 0 ) ) instanceof NTCredentials );
+    }
+
+    public void testNTCredentialsNoNTDomain()
+        throws AuthenticationException, ConnectionException
+    {
+        TestWagon wagon = new TestWagon();
+
+        AuthenticationInfo authenticationInfo = new AuthenticationInfo();
+        String myUsernameNoNTDomain = "myUserNameNoNTDomain";
+        authenticationInfo.setUserName( myUsernameNoNTDomain );
+
+        String myPassword = "myPassword";
+        authenticationInfo.setPassword( myPassword );
+
+        Repository repository = new Repository( "mockRepoId", "mockRepoURL" );
+
+        wagon.connect( repository, authenticationInfo, (ProxyInfo) null );
+
+        wagon.openConnection();
+
+        assertEquals( myUsernameNoNTDomain, wagon.getAuthenticationInfo().getUserName() );
+        assertEquals( myPassword, wagon.getAuthenticationInfo().getPassword() );
+
+        assertFalse( wagon.getClient().getState().getCredentials( new AuthScope( null, 0 ) ) instanceof NTCredentials );
+    }
+
+    public void testNTCredentialsWithNTDomain()
+        throws AuthenticationException, ConnectionException
+    {
+        TestWagon wagon = new TestWagon();
+
+        AuthenticationInfo authenticationInfo = new AuthenticationInfo();
+        String myNTDomain = "myNTDomain";
+        String myUsername = "myUsername";
+        String myNTDomainAndUser = myNTDomain + "\\" + myUsername;
+        authenticationInfo.setUserName( myNTDomainAndUser );
+
+        String myPassword = "myPassword";
+        authenticationInfo.setPassword( myPassword );
+
+        Repository repository = new Repository( "mockRepoId", "mockRepoURL" );
+
+        wagon.connect( repository, authenticationInfo, (ProxyInfo) null );
+
+        wagon.openConnection();
+
+        assertEquals( myNTDomainAndUser, wagon.getAuthenticationInfo().getUserName() );
+        assertEquals( myPassword, wagon.getAuthenticationInfo().getPassword() );
+
+        Credentials credentials = wagon.getClient().getState().getCredentials( new AuthScope( null, 0 ) );
+        assertTrue( credentials instanceof NTCredentials );
+
+        NTCredentials ntCredentials = (NTCredentials) credentials;
+        assertEquals( myNTDomain, ntCredentials.getDomain() );
+        assertEquals( myUsername, ntCredentials.getUserName() );
+        assertEquals( myPassword, ntCredentials.getPassword() );
+    }
+
     private static final class TestWagon
         extends AbstractHttpClientWagon
     {

Modified: maven/wagon/trunk/wagon-providers/wagon-http-shared4/src/test/java/org/apache/maven/wagon/shared/http4/AbstractHttpClientWagonTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http-shared4/src/test/java/org/apache/maven/wagon/shared/http4/AbstractHttpClientWagonTest.java?rev=1241912&r1=1241911&r2=1241912&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http-shared4/src/test/java/org/apache/maven/wagon/shared/http4/AbstractHttpClientWagonTest.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http-shared4/src/test/java/org/apache/maven/wagon/shared/http4/AbstractHttpClientWagonTest.java Wed Feb  8 14:38:27 2012
@@ -27,9 +27,6 @@ import org.apache.http.client.params.Cli
 import org.apache.http.params.HttpParams;
 import org.apache.maven.wagon.OutputData;
 import org.apache.maven.wagon.TransferFailedException;
-import org.apache.maven.wagon.shared.http4.AbstractHttpClientWagon;
-import org.apache.maven.wagon.shared.http4.HttpConfiguration;
-import org.apache.maven.wagon.shared.http4.HttpMethodConfiguration;
 
 public class AbstractHttpClientWagonTest
     extends TestCase