Windows2003-3790/inetcore/digest/cred.hxx

192 lines
4.6 KiB
C++

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
cred.hxx
Abstract:
This file contains definitions for cred.cxx
Shared memory data structures for digest sspi package.
Author:
Adriaan Canter (adriaanc) 01-Aug-1998
--*/
#ifndef CRED_HXX
#define CRED_HXX
#define SIG_CRED 'DERC'
#define SIG_NONC 'CNON'
#define SIG_SESS 'SSES'
#define SERVER_NONCE 0
#define CLIENT_NONCE 1
#define OFFSET_TO_POINTER( _ep_, _offset_) \
(LPVOID)((LPBYTE)(_ep_) + (_offset_))
#define POINTER_TO_OFFSET( _ep1_, _ep2_) \
(DWORD) ((DWORD_PTR)(_ep2_) - (_ep1_))
class CCred;
class CNonce;
//--------------------------------------------------------------------
// Class CEntry.
// Base node in doubly linked list.
//--------------------------------------------------------------------
class CEntry : public MAP_ENTRY
{
public:
DWORD dwPrev;
DWORD dwNext;
// Base destructor - all descendents need only
// call this function to be freed in the map.
static DWORD Free(CMMFile *pMMFile, CEntry* pEntry);
static CEntry* GetNext(CEntry*);
static CEntry* GetPrev(CEntry*);
};
//--------------------------------------------------------------------
// CSess
// BUGBUG - comment pcred and rename dws as offsets
//--------------------------------------------------------------------
class CSess : public CEntry
{
public:
DWORD dwCred;
BOOL fHTTP;
DWORD cbSess;
DWORD dwAppCtx;
DWORD dwUserCtx;
static CSess* Create(CMMFile *pMMFile, LPSTR szAppCtx,
LPSTR szUserCtx, BOOL fHTTP);
static LPSTR GetAppCtx(CSess*);
static LPSTR GetUserCtx(CSess*);
static LPSTR GetCtx(CSess*);
static BOOL CtxMatch(CSess*, CSess*);
static CCred *SetCred(CSess*, CCred*);
static CCred *GetCred(CSess*);
};
//--------------------------------------------------------------------
// Credential class.
//--------------------------------------------------------------------
class CCred : public CEntry
{
public:
DWORD cbCred;
DWORD tStamp;
DWORD dwNonce;
DWORD dwCNonce;
DWORD dwRealm;
DWORD dwUser;
DWORD dwPass;
DWORD cbPass;
// Credential specific constructor.
static CCred* Create(CMMFile *pMMFile,
LPSTR szHost, LPSTR szRealm, LPSTR szUser,
LPSTR szPass, LPSTR szNonce, LPSTR szCNonce);
static LPSTR GetRealm(CCred*);
static LPSTR GetUser(CCred*);
static LPSTR GetPass(CCred*);
static VOID SetNonce(CMMFile *pMMFile, CCred* pCred,
LPSTR szHost, LPSTR szNonce, DWORD dwFlags);
static CNonce *GetNonce(CCred* pCred, LPSTR szHost, DWORD dwType);
static VOID Free(CMMFile *pMMFile, CSess *pSess, CCred *pCred);
};
//--------------------------------------------------------------------
// Nonce class
//--------------------------------------------------------------------
class CNonce : public CEntry
{
public:
DWORD cbNonce;
DWORD cCount;
DWORD dwHost;
DWORD dwNonce;
// Nonce specific constructor.
static CNonce* Create(CMMFile *pMMFile, LPSTR szHost, LPSTR szNonce);
static LPSTR GetNonce(CNonce*);
static DWORD GetCount(CNonce*);
static BOOL IsHostMatch(CNonce *pNonce, LPSTR szHost);
};
//--------------------------------------------------------------------
// Class CList.
// Manages doubly linked list of base type CEntry.
//--------------------------------------------------------------------
class CList
{
public:
DWORD *_pdwOffset;
CEntry *_pHead;
CEntry *_pCur;
DWORD _dwStatus;
CList();
CEntry* Init(LPDWORD pdwOffset);
CEntry* Insert(CEntry *pEntry);
CEntry* GetNext();
CEntry* GetPrev();
CEntry* Seek();
CEntry* DeLink(CEntry *pEntry);
};
//--------------------------------------------------------------------
// Credential Info class
//--------------------------------------------------------------------
class CCredInfo
{
public:
LPSTR szHost;
LPSTR szRealm;
LPSTR szUser;
CSecureStr Password;
LPSTR szNonce;
LPSTR szCNonce;
DWORD tStamp;
DWORD cCount;
DWORD dwStatus;
CCredInfo *pPrev;
CCredInfo *pNext;
CCredInfo(CCred* pCred, LPSTR szHost);
CCredInfo(LPSTR szHost, LPSTR szRealm, LPSTR szUser, LPSTR szPass,
LPSTR szNonce, LPSTR szCNonce);
~CCredInfo();
LPSTR GetPass() { return Password.GetUnencryptedString(); }
};
#endif // CRED_HXX