You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
4.6 KiB
191 lines
4.6 KiB
/*++
|
|
|
|
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
|