You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2014/08/20 17:29:00 UTC

svn commit: r1619126 - in /httpcomponents/httpclient/trunk/httpclient-win/src: main/java/org/apache/http/impl/auth/win/WindowsNegotiateScheme.java test/java/org/apache/http/impl/auth/win/TestWindowsNegotiateScheme.java

Author: olegk
Date: Wed Aug 20 15:28:59 2014
New Revision: 1619126

URL: http://svn.apache.org/r1619126
Log:
HTTPCLIENT-1545: Improved unit test
Contributed by Ka-Lok Fung <ka-lok.fung at sap.com>

Modified:
    httpcomponents/httpclient/trunk/httpclient-win/src/main/java/org/apache/http/impl/auth/win/WindowsNegotiateScheme.java
    httpcomponents/httpclient/trunk/httpclient-win/src/test/java/org/apache/http/impl/auth/win/TestWindowsNegotiateScheme.java

Modified: httpcomponents/httpclient/trunk/httpclient-win/src/main/java/org/apache/http/impl/auth/win/WindowsNegotiateScheme.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-win/src/main/java/org/apache/http/impl/auth/win/WindowsNegotiateScheme.java?rev=1619126&r1=1619125&r2=1619126&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-win/src/main/java/org/apache/http/impl/auth/win/WindowsNegotiateScheme.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-win/src/main/java/org/apache/http/impl/auth/win/WindowsNegotiateScheme.java Wed Aug 20 15:28:59 2014
@@ -65,12 +65,12 @@ public class WindowsNegotiateScheme exte
 
     // NTLM or Negotiate
     private final String scheme;
+    private final String servicePrincipalName;
 
     private CredHandle clientCred;
     private CtxtHandle sppicontext;
     private boolean continueNeeded;
     private String challenge;
-    private String servicePrincipalName;
 
     public WindowsNegotiateScheme(final String scheme, final String servicePrincipalName) {
         super();
@@ -214,7 +214,7 @@ public class WindowsNegotiateScheme exte
     }
 
     // See http://msdn.microsoft.com/en-us/library/windows/desktop/aa375506(v=vs.85).aspx
-    private String getToken(
+    String getToken(
             final CtxtHandle continueCtx,
             final SecBufferDesc continueToken,
             final String targetName) {

Modified: httpcomponents/httpclient/trunk/httpclient-win/src/test/java/org/apache/http/impl/auth/win/TestWindowsNegotiateScheme.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-win/src/test/java/org/apache/http/impl/auth/win/TestWindowsNegotiateScheme.java?rev=1619126&r1=1619125&r2=1619126&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-win/src/test/java/org/apache/http/impl/auth/win/TestWindowsNegotiateScheme.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-win/src/test/java/org/apache/http/impl/auth/win/TestWindowsNegotiateScheme.java Wed Aug 20 15:28:59 2014
@@ -28,12 +28,17 @@ package org.apache.http.impl.auth.win;
 
 import java.io.IOException;
 
+import com.sun.jna.platform.win32.Sspi.CtxtHandle;
+import com.sun.jna.platform.win32.Sspi.SecBufferDesc;
+import com.sun.jna.platform.win32.Win32Exception;
+import com.sun.jna.platform.win32.WinError;
 import org.apache.http.HttpException;
 import org.apache.http.HttpHost;
 import org.apache.http.HttpRequest;
 import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
 import org.apache.http.auth.AUTH;
+import org.apache.http.auth.AuthScheme;
 import org.apache.http.auth.AuthSchemeProvider;
 import org.apache.http.client.CredentialsProvider;
 import org.apache.http.client.config.AuthSchemes;
@@ -94,9 +99,13 @@ public class TestWindowsNegotiateScheme 
         // you can contact the server that authenticated you." is associated with SEC_E_DOWNGRADE_DETECTED.
 
         final Registry<AuthSchemeProvider> authSchemeRegistry = RegistryBuilder.<AuthSchemeProvider>create()
-                .register(AuthSchemes.SPNEGO, new WindowsNegotiateSchemeFactory("HTTP/EXAMPLE.COM"))
-                .build();
-        final CredentialsProvider credsProvider = new WindowsCredentialsProvider(new SystemDefaultCredentialsProvider());
+            .register(AuthSchemes.SPNEGO, new AuthSchemeProvider() {
+                public AuthScheme create(final HttpContext context) {
+                    return new WindowsNegotiateSchemeGetTokenFail(AuthSchemes.SPNEGO, "HTTP/EXAMPLE.COM");
+                }
+            }).build();
+        final CredentialsProvider credsProvider =
+                new WindowsCredentialsProvider(new SystemDefaultCredentialsProvider());
         final CloseableHttpClient customClient = HttpClientBuilder.create()
                 .setDefaultCredentialsProvider(credsProvider)
                 .setDefaultAuthSchemeRegistry(authSchemeRegistry).build();
@@ -111,6 +120,18 @@ public class TestWindowsNegotiateScheme 
         }
     }
 
-}
+    private final class WindowsNegotiateSchemeGetTokenFail extends WindowsNegotiateScheme {
+
+        public WindowsNegotiateSchemeGetTokenFail(final String scheme, final String servicePrincipalName) {
+            super(scheme, servicePrincipalName);
+        }
 
+        @Override
+        String getToken(final CtxtHandle continueCtx, final SecBufferDesc continueToken, final String targetName) {
+            dispose();
+            throw new Win32Exception(WinError.SEC_E_DOWNGRADE_DETECTED);
+        }
 
+    }
+
+}