|
|
/*++
Copyright (C) 1996-2001 Microsoft Corporation
Module Name:
CSSPI.H
Abstract:
SSPI wrapper implementation
History:
raymcc 15-Jul-97 Created
--*/
#ifndef _CSSPI_H_
#define _CSSPI_H_
#define SECURITY_WIN32
//#include "corepol.h"
extern "C" { #include <sspi.h>
};
class CSSPIClient; class CSSPIServer;
//***************************************************************************
//
// CSSPI is the basic 'utility' class.
//
//***************************************************************************
class CSSPI { static ULONG m_uNumPackages; static PSecPkgInfo m_pEnumPkgInfo;
public: enum { NoError, InvalidPackage, Idle, Busy, Failed, Continue };
static PSecurityFunctionTable pVtbl; // Used by client classes to access the SSPI v-table.
static BOOL Initialize(); // Called by all clients to initialize SSPI.
// Helpers.
// ========
static const LPTSTR TranslateError( ULONG uCode );
static void DisplayContextAttributes( ULONG uAttrib );
static void DisplayPkgInfo( PSecPkgInfo pPkg );
// To enumerate through the packages.
// ==================================
static ULONG GetNumPkgs(); // Returns 0 if none available or an error occurred.
static const PSecPkgInfo GetPkgInfo(ULONG lPkgNum); // Returns NULL on error
static BOOL DumpSecurityPackages(); // Debug dump of packages
// Query for support
// =================
static BOOL ServerSupport(LPTSTR pszPkgName); static BOOL ClientSupport(LPTSTR pszPkgName); };
//***************************************************************************
//
// CSSPIClient
//
// Used for client-side authentication.
//
//***************************************************************************
class CSSPIClient { DWORD m_dwStatus; ULONG m_cbMaxToken; PSecPkgInfo m_pPkgInfo; LPTSTR m_pszPkgName;
BOOL m_bValidCredHandle; CredHandle m_ClientCredential;
CtxtHandle m_ClientContext; BOOL m_bValidContextHandle; public: enum { NoError = 0, LoginCompleted, LoginContinue, InvalidUser, InternalError, AccessDenied = 5, // don't change
InvalidPackage, Waiting, InvalidParameter, LoginCompleteNeeded, LoginCompleteAndContinue, Failed };
CSSPIClient(LPTSTR pszPkgName); ~CSSPIClient();
DWORD GetStatus() { return m_dwStatus; } ULONG MaxTokenSize() { return m_cbMaxToken; } DWORD SetLoginInfo( IN LPTSTR pszUser, IN LPTSTR pszDomain, IN LPTSTR pszPassword, IN DWORD dwFlags = 0 ); // Returns LoginContinue, AccessDenied, InvalidUser, InternalError
// InvalidParameter
DWORD SetDefaultLogin(DWORD dwFlags = 0); DWORD ContinueLogin( IN LPBYTE pInToken, IN DWORD dwInTokenSize, OUT LPBYTE *pToken, OUT DWORD *pdwTokenSize ); // Returns LoginContinue, LoginCompleted, AccessDenied, InternalError
DWORD BuildLoginToken( OUT LPBYTE *pToken, OUT DWORD *pdwToken ); };
//***************************************************************************
//
// CSSPIClient
//
// Used for client-side authentication.
//
//***************************************************************************
class CSSPIServer { DWORD m_dwStatus; ULONG m_cbMaxToken; PSecPkgInfo m_pPkgInfo; LPTSTR m_pszPkgName;
CredHandle m_ServerCredential; BOOL m_bValidCredHandle;
CtxtHandle m_ServerContext; BOOL m_bValidContextHandle;
public: enum { NoError = 0, LoginCompleted, InvalidPackage, Failed, Waiting, AccessDenied = 5, // don't change
LoginCompleteNeeded, LoginCompleteAndContinue, LoginContinue };
CSSPIServer(LPTSTR pszPkgName); ~CSSPIServer();
DWORD GetStatus() { return m_dwStatus; } ULONG MaxTokenSize() { return m_cbMaxToken; }
DWORD ContinueClientLogin( IN LPBYTE pInToken, IN DWORD dwInTokenSize, OUT LPBYTE *pToken, OUT DWORD *pdwTokenSize );
DWORD IssueLoginToken( OUT CLSID &ClsId );
BOOL QueryUserInfo( OUT LPTSTR *pszUser // Use operator delete
); };
#endif
|