123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- // Copyright (c) 2010 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.
- #ifndef NET_HTTP_MOCK_SSPI_LIBRARY_WIN_H_
- #define NET_HTTP_MOCK_SSPI_LIBRARY_WIN_H_
- #include <list>
- #include <set>
- #include "net/http/http_auth_sspi_win.h"
- namespace net {
- // The MockSSPILibrary class is intended for unit tests which want to bypass
- // the system SSPI library calls.
- class MockSSPILibrary : public SSPILibrary {
- public:
- explicit MockSSPILibrary(const wchar_t* package);
- ~MockSSPILibrary() override;
- // Default max token length regardless of package name returned by
- // QuerySecurityPackageInfo() if no expectations are set.
- static constexpr unsigned long kDefaultMaxTokenLength = 1024;
- // SSPILibrary methods:
- // AcquireCredentialsHandle() returns a handle that must be freed using
- // FreeCredentialsHandle(). The credentials handle records the principal name.
- //
- // On return ptsExpiry is set to a constant.
- SECURITY_STATUS AcquireCredentialsHandle(LPWSTR pszPrincipal,
- unsigned long fCredentialUse,
- void* pvLogonId,
- void* pvAuthData,
- SEC_GET_KEY_FN pGetKeyFn,
- void* pvGetKeyArgument,
- PCredHandle phCredential,
- PTimeStamp ptsExpiry) override;
- // InitializeSecurityContext() returns a handle in phContext that must be
- // freed via FreeContextBuffer() or by passing it into another
- // InitializeSecurityContext() call.
- //
- // On return ptsExpiry is set to a constant.
- //
- // The output buffer will contain a token consisting of the ASCII string:
- //
- // "<source principal>'s token #<n> for <target principal>"
- //
- // <source principal> is the security principal derived from explicit
- // credentials that were passed to a prior AcquireCredentialsHandle() call, or
- // the string "<Default>" if ambient credentials were requested.
- //
- // <n> is the 1-based invocation counter for InitializeSecurityContext() for
- // the same context.
- //
- // <target principal> is the contents of the pszTargetName. Note that the
- // function expects the same target name on every invocation.
- 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) override;
- // QueryContextAttributesEx() supports querying the same attributes as
- // required by HttpAuthSSPI.
- SECURITY_STATUS QueryContextAttributesEx(PCtxtHandle phContext,
- ULONG ulAttribute,
- PVOID pBuffer,
- ULONG cbBuffer) override;
- SECURITY_STATUS QuerySecurityPackageInfo(PSecPkgInfoW* pkgInfo) override;
- SECURITY_STATUS FreeCredentialsHandle(PCredHandle phCredential) override;
- SECURITY_STATUS DeleteSecurityContext(PCtxtHandle phContext) override;
- SECURITY_STATUS FreeContextBuffer(PVOID pvContextBuffer) override;
- // Establishes an expectation for a |QuerySecurityPackageInfo()| call.
- //
- // Each expectation established by |ExpectSecurityQueryPackageInfo()| must be
- // matched by a call to |QuerySecurityPackageInfo()| during the lifetime of
- // the MockSSPILibrary. The expectations establish an explicit ordering.
- //
- // |response_code| is used as the return value for
- // |QuerySecurityPackageInfo()|. If |response_code| is SEC_E_OK,
- // an expectation is also set for a call to |FreeContextBuffer()| after
- // the matching |QuerySecurityPackageInfo()| is called.
- //
- // |package_info| is assigned to |*pkgInfo| in |QuerySecurityPackageInfo|.
- // The lifetime of |*package_info| should last at least until the matching
- // |QuerySecurityPackageInfo()| is called.
- void ExpectQuerySecurityPackageInfo(SECURITY_STATUS response_code,
- PSecPkgInfoW package_info);
- private:
- struct PackageQuery {
- SECURITY_STATUS response_code;
- PSecPkgInfoW package_info;
- };
- // expected_package_queries contains an ordered list of expected
- // |QuerySecurityPackageInfo()| calls and the return values for those
- // calls.
- std::list<PackageQuery> expected_package_queries_;
- // Set of packages which should be freed.
- std::set<PSecPkgInfoW> expected_freed_packages_;
- // These sets keep track of active credentials and contexts.
- std::set<CredHandle> active_credentials_;
- std::set<CtxtHandle> active_contexts_;
- };
- using MockAuthLibrary = MockSSPILibrary;
- } // namespace net
- #endif // NET_HTTP_MOCK_SSPI_LIBRARY_WIN_H_
|