Index: net/http/http_auth_sspi_win.h |
diff --git a/net/http/http_auth_sspi_win.h b/net/http/http_auth_sspi_win.h |
deleted file mode 100644 |
index dd0b1772b16f00c4fad6bff6e6c24c19cfa42aa8..0000000000000000000000000000000000000000 |
--- a/net/http/http_auth_sspi_win.h |
+++ /dev/null |
@@ -1,209 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// This file contains common routines used by NTLM and Negotiate authentication |
-// using the SSPI API on Windows. |
- |
-#ifndef NET_HTTP_HTTP_AUTH_SSPI_WIN_H_ |
-#define NET_HTTP_HTTP_AUTH_SSPI_WIN_H_ |
- |
-// security.h needs to be included for CredHandle. Unfortunately CredHandle |
-// is a typedef and can't be forward declared. |
-#define SECURITY_WIN32 1 |
-#include <windows.h> |
-#include <security.h> |
- |
-#include <string> |
- |
-#include "base/strings/string16.h" |
-#include "net/base/net_export.h" |
-#include "net/http/http_auth.h" |
- |
-namespace net { |
- |
-class HttpAuthChallengeTokenizer; |
- |
-// SSPILibrary is introduced so unit tests can mock the calls to Windows' SSPI |
-// implementation. The default implementation simply passes the arguments on to |
-// the SSPI implementation provided by Secur32.dll. |
-// NOTE(cbentzel): I considered replacing the Secur32.dll with a mock DLL, but |
-// decided that it wasn't worth the effort as this is unlikely to be performance |
-// sensitive code. |
-class SSPILibrary { |
- public: |
- virtual ~SSPILibrary() {} |
- |
- virtual SECURITY_STATUS AcquireCredentialsHandle(LPWSTR pszPrincipal, |
- LPWSTR pszPackage, |
- unsigned long fCredentialUse, |
- void* pvLogonId, |
- void* pvAuthData, |
- SEC_GET_KEY_FN pGetKeyFn, |
- void* pvGetKeyArgument, |
- PCredHandle phCredential, |
- PTimeStamp ptsExpiry) = 0; |
- |
- virtual SECURITY_STATUS InitializeSecurityContext(PCredHandle phCredential, |
- PCtxtHandle phContext, |
- SEC_WCHAR* pszTargetName, |
- unsigned long fContextReq, |
- unsigned long Reserved1, |
- unsigned long TargetDataRep, |
- PSecBufferDesc pInput, |
- unsigned long Reserved2, |
- PCtxtHandle phNewContext, |
- PSecBufferDesc pOutput, |
- unsigned long* contextAttr, |
- PTimeStamp ptsExpiry) = 0; |
- |
- virtual SECURITY_STATUS QuerySecurityPackageInfo(LPWSTR pszPackageName, |
- PSecPkgInfoW *pkgInfo) = 0; |
- |
- virtual SECURITY_STATUS FreeCredentialsHandle(PCredHandle phCredential) = 0; |
- |
- virtual SECURITY_STATUS DeleteSecurityContext(PCtxtHandle phContext) = 0; |
- |
- virtual SECURITY_STATUS FreeContextBuffer(PVOID pvContextBuffer) = 0; |
-}; |
- |
-class SSPILibraryDefault : public SSPILibrary { |
- public: |
- SSPILibraryDefault() {} |
- virtual ~SSPILibraryDefault() {} |
- |
- virtual SECURITY_STATUS AcquireCredentialsHandle(LPWSTR pszPrincipal, |
- LPWSTR pszPackage, |
- unsigned long fCredentialUse, |
- void* pvLogonId, |
- void* pvAuthData, |
- SEC_GET_KEY_FN pGetKeyFn, |
- void* pvGetKeyArgument, |
- PCredHandle phCredential, |
- PTimeStamp ptsExpiry) { |
- return ::AcquireCredentialsHandle(pszPrincipal, pszPackage, fCredentialUse, |
- pvLogonId, pvAuthData, pGetKeyFn, |
- pvGetKeyArgument, phCredential, |
- ptsExpiry); |
- } |
- |
- virtual SECURITY_STATUS InitializeSecurityContext(PCredHandle phCredential, |
- PCtxtHandle phContext, |
- SEC_WCHAR* pszTargetName, |
- unsigned long fContextReq, |
- unsigned long Reserved1, |
- unsigned long TargetDataRep, |
- PSecBufferDesc pInput, |
- unsigned long Reserved2, |
- PCtxtHandle phNewContext, |
- PSecBufferDesc pOutput, |
- unsigned long* contextAttr, |
- PTimeStamp ptsExpiry) { |
- return ::InitializeSecurityContext(phCredential, phContext, pszTargetName, |
- fContextReq, Reserved1, TargetDataRep, |
- pInput, Reserved2, phNewContext, pOutput, |
- contextAttr, ptsExpiry); |
- } |
- |
- virtual SECURITY_STATUS QuerySecurityPackageInfo(LPWSTR pszPackageName, |
- PSecPkgInfoW *pkgInfo) { |
- return ::QuerySecurityPackageInfo(pszPackageName, pkgInfo); |
- } |
- |
- virtual SECURITY_STATUS FreeCredentialsHandle(PCredHandle phCredential) { |
- return ::FreeCredentialsHandle(phCredential); |
- } |
- |
- virtual SECURITY_STATUS DeleteSecurityContext(PCtxtHandle phContext) { |
- return ::DeleteSecurityContext(phContext); |
- } |
- |
- virtual SECURITY_STATUS FreeContextBuffer(PVOID pvContextBuffer) { |
- return ::FreeContextBuffer(pvContextBuffer); |
- } |
-}; |
- |
-class NET_EXPORT_PRIVATE HttpAuthSSPI { |
- public: |
- HttpAuthSSPI(SSPILibrary* sspi_library, |
- const std::string& scheme, |
- const SEC_WCHAR* security_package, |
- ULONG max_token_length); |
- ~HttpAuthSSPI(); |
- |
- bool NeedsIdentity() const; |
- |
- bool AllowsExplicitCredentials() const; |
- |
- HttpAuth::AuthorizationResult ParseChallenge( |
- HttpAuthChallengeTokenizer* tok); |
- |
- // Generates an authentication token for the service specified by the |
- // Service Principal Name |spn| and stores the value in |*auth_token|. |
- // If the return value is not |OK|, then the value of |*auth_token| is |
- // unspecified. ERR_IO_PENDING is not a valid return code. |
- // If this is the first round of a multiple round scheme, credentials are |
- // obtained using |*credentials|. If |credentials| is NULL, the credentials |
- // for the currently logged in user are used instead. |
- int GenerateAuthToken(const AuthCredentials* credentials, |
- const std::string& spn, |
- std::string* auth_token); |
- |
- // Delegation is allowed on the Kerberos ticket. This allows certain servers |
- // to act as the user, such as an IIS server retrieiving data from a |
- // Kerberized MSSQL server. |
- void Delegate(); |
- |
- private: |
- int OnFirstRound(const AuthCredentials* credentials); |
- |
- int GetNextSecurityToken( |
- const std::string& spn, |
- const void* in_token, |
- int in_token_len, |
- void** out_token, |
- int* out_token_len); |
- |
- void ResetSecurityContext(); |
- |
- SSPILibrary* library_; |
- std::string scheme_; |
- const SEC_WCHAR* security_package_; |
- std::string decoded_server_auth_token_; |
- ULONG max_token_length_; |
- CredHandle cred_; |
- CtxtHandle ctxt_; |
- bool can_delegate_; |
-}; |
- |
-// Splits |combined| into domain and username. |
-// If |combined| is of form "FOO\bar", |domain| will contain "FOO" and |user| |
-// will contain "bar". |
-// If |combined| is of form "bar", |domain| will be empty and |user| will |
-// contain "bar". |
-// |domain| and |user| must be non-NULL. |
-NET_EXPORT_PRIVATE void SplitDomainAndUser(const base::string16& combined, |
- base::string16* domain, |
- base::string16* user); |
- |
-// Determines the maximum token length in bytes for a particular SSPI package. |
-// |
-// |library| and |max_token_length| must be non-NULL pointers to valid objects. |
-// |
-// If the return value is OK, |*max_token_length| contains the maximum token |
-// length in bytes. |
-// |
-// If the return value is ERR_UNSUPPORTED_AUTH_SCHEME, |package| is not an |
-// known SSPI authentication scheme on this system. |*max_token_length| is not |
-// changed. |
-// |
-// If the return value is ERR_UNEXPECTED, there was an unanticipated problem |
-// in the underlying SSPI call. The details are logged, and |*max_token_length| |
-// is not changed. |
-NET_EXPORT_PRIVATE int DetermineMaxTokenLength(SSPILibrary* library, |
- const std::wstring& package, |
- ULONG* max_token_length); |
- |
-} // namespace net |
- |
-#endif // NET_HTTP_HTTP_AUTH_SSPI_WIN_H_ |