332 lines
7.9 KiB
C
332 lines
7.9 KiB
C
//+-----------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (c) Microsoft Corporation 1992 - 1996
|
|
//
|
|
// File: ctxtmgr.h
|
|
//
|
|
// Contents: Structures and prototyps for Kerberos context list
|
|
//
|
|
//
|
|
// History: 17-April-1996 Created MikeSw
|
|
//
|
|
//------------------------------------------------------------------------
|
|
|
|
#ifndef __CTXTMGR_H__
|
|
#define __CTXTMGR_H__
|
|
|
|
//
|
|
// All global variables declared as EXTERN will be allocated in the file
|
|
// that defines CTXTMGR_ALLOCATE
|
|
//
|
|
#ifdef EXTERN
|
|
#undef EXTERN
|
|
#endif
|
|
|
|
#ifdef CTXTMGR_ALLOCATE
|
|
#define EXTERN
|
|
#else
|
|
#define EXTERN extern
|
|
#endif
|
|
|
|
#ifdef WIN32_CHICAGO
|
|
EXTERN CRITICAL_SECTION KerbContextResource;
|
|
#else // WIN32_CHICAGO
|
|
EXTERN RTL_RESOURCE KerbContextResource;
|
|
#endif // WIN32_CHICAGO
|
|
|
|
#define KERB_USERLIST_COUNT (16) // count of lists
|
|
|
|
EXTERN KERBEROS_LIST KerbContextList[ KERB_USERLIST_COUNT ];
|
|
EXTERN BOOLEAN KerberosContextsInitialized;
|
|
|
|
#define KerbGetContextHandle(_Context_) ((LSA_SEC_HANDLE)(_Context_))
|
|
|
|
//
|
|
// Context flags - these are attributes of a context and are stored in
|
|
// the ContextAttributes field of a KERB_CONTEXT.
|
|
//
|
|
|
|
#define KERB_CONTEXT_MAPPED 0x1
|
|
#define KERB_CONTEXT_OUTBOUND 0x2
|
|
#define KERB_CONTEXT_INBOUND 0x4
|
|
#define KERB_CONTEXT_USED_SUPPLIED_CREDS 0x8
|
|
#define KERB_CONTEXT_USER_TO_USER 0x10
|
|
#define KERB_CONTEXT_REQ_SERVER_NAME 0x20
|
|
#define KERB_CONTEXT_REQ_SERVER_REALM 0x40
|
|
#define KERB_CONTEXT_IMPORTED 0x80
|
|
#define KERB_CONTEXT_EXPORTED 0x100
|
|
#define KERB_CONTEXT_USING_CREDMAN 0x200
|
|
|
|
//
|
|
// NOTICE: The logon session resource, credential resource, and context
|
|
// resource must all be acquired carefully to prevent deadlock. They
|
|
// can only be acquired in this order:
|
|
//
|
|
// 1. Logon Sessions
|
|
// 2. Credentials
|
|
// 3. Contexts
|
|
//
|
|
|
|
#if DBG
|
|
#ifdef WIN32_CHICAGO
|
|
#define KerbWriteLockContexts() \
|
|
{ \
|
|
DebugLog((DEB_TRACE_LOCKS,"Write locking Contexts\n")); \
|
|
EnterCriticalSection(&KerbContextResource); \
|
|
KerbGlobalContextsLocked = GetCurrentThreadId(); \
|
|
}
|
|
#define KerbReadLockContexts() \
|
|
{ \
|
|
DebugLog((DEB_TRACE_LOCKS,"Read locking Contexts\n")); \
|
|
EnterCriticalSection(&KerbContextResource); \
|
|
KerbGlobalContextsLocked = GetCurrentThreadId(); \
|
|
}
|
|
#define KerbUnlockContexts() \
|
|
{ \
|
|
DebugLog((DEB_TRACE_LOCKS,"Unlocking Contexts\n")); \
|
|
KerbGlobalContextsLocked = 0; \
|
|
LeaveCriticalSection(&KerbContextResource); \
|
|
}
|
|
#else // WIN32_CHICAGO
|
|
#define KerbWriteLockContexts() \
|
|
{ \
|
|
DebugLog((DEB_TRACE_LOCKS,"Write locking Contexts\n")); \
|
|
RtlAcquireResourceExclusive(&KerbContextResource,TRUE); \
|
|
KerbGlobalContextsLocked = GetCurrentThreadId(); \
|
|
}
|
|
#define KerbReadLockContexts() \
|
|
{ \
|
|
DebugLog((DEB_TRACE_LOCKS,"Read locking Contexts\n")); \
|
|
RtlAcquireResourceShared(&KerbContextResource, TRUE); \
|
|
KerbGlobalContextsLocked = GetCurrentThreadId(); \
|
|
}
|
|
#define KerbUnlockContexts() \
|
|
{ \
|
|
DebugLog((DEB_TRACE_LOCKS,"Unlocking Contexts\n")); \
|
|
KerbGlobalContextsLocked = 0; \
|
|
RtlReleaseResource(&KerbContextResource); \
|
|
}
|
|
#endif // WIN32_CHICAGO
|
|
#else
|
|
#ifdef WIN32_CHICAGO
|
|
#define KerbWriteLockContexts() \
|
|
EnterCriticalSection(&KerbContextResource)
|
|
#define KerbReadLockContexts() \
|
|
EnterCriticalSection(&KerbContextResource)
|
|
#define KerbUnlockContexts() \
|
|
LeaveCriticalSection(&KerbContextResource)
|
|
#else // WIN32_CHICAGO
|
|
#define KerbWriteLockContexts() \
|
|
RtlAcquireResourceExclusive(&KerbContextResource,TRUE);
|
|
#define KerbReadLockContexts() \
|
|
RtlAcquireResourceShared(&KerbContextResource, TRUE);
|
|
#define KerbUnlockContexts() \
|
|
RtlReleaseResource(&KerbContextResource);
|
|
#endif // WIN32_CHICAGO
|
|
#endif
|
|
|
|
NTSTATUS
|
|
KerbInitContextList(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
KerbFreeContextList(
|
|
VOID
|
|
);
|
|
|
|
|
|
NTSTATUS
|
|
KerbAllocateContext(
|
|
PKERB_CONTEXT * NewContext
|
|
);
|
|
|
|
NTSTATUS
|
|
KerbInsertContext(
|
|
IN PKERB_CONTEXT Context
|
|
);
|
|
|
|
|
|
SECURITY_STATUS
|
|
KerbReferenceContext(
|
|
IN LSA_SEC_HANDLE ContextHandle,
|
|
IN BOOLEAN RemoveFromList,
|
|
OUT PKERB_CONTEXT * FoundContext
|
|
);
|
|
|
|
|
|
VOID
|
|
KerbDereferenceContext(
|
|
IN PKERB_CONTEXT Context
|
|
);
|
|
|
|
VOID
|
|
KerbReferenceContextByPointer(
|
|
IN PKERB_CONTEXT Context,
|
|
IN BOOLEAN RemoveFromList
|
|
);
|
|
|
|
NTSTATUS
|
|
KerbCreateClientContext(
|
|
IN PKERB_LOGON_SESSION LogonSession,
|
|
IN PKERB_CREDENTIAL Credential,
|
|
IN OPTIONAL PKERB_CREDMAN_CRED CredManCredentials,
|
|
IN OPTIONAL PKERB_TICKET_CACHE_ENTRY TicketCacheEntry,
|
|
IN OPTIONAL PUNICODE_STRING TargetName,
|
|
IN ULONG Nonce,
|
|
IN ULONG ContextFlags,
|
|
IN ULONG ContextAttributes,
|
|
IN OPTIONAL PKERB_ENCRYPTION_KEY SubSessionKey,
|
|
OUT PKERB_CONTEXT * NewContext,
|
|
OUT PTimeStamp ContextLifetime
|
|
);
|
|
|
|
NTSTATUS
|
|
KerbCreateServerContext(
|
|
IN PKERB_LOGON_SESSION LogonSession,
|
|
IN PKERB_CREDENTIAL Credential,
|
|
IN PKERB_ENCRYPTED_TICKET InternalTicket,
|
|
IN PKERB_AP_REQUEST ApRequest,
|
|
IN PKERB_ENCRYPTION_KEY SessionKey,
|
|
IN PLUID LogonId,
|
|
IN OUT PSID * UserSid,
|
|
IN ULONG ContextFlags,
|
|
IN ULONG ContextAttributes,
|
|
IN ULONG Nonce,
|
|
IN ULONG ReceiveNonce,
|
|
IN OUT PHANDLE TokenHandle,
|
|
IN PUNICODE_STRING ClientName,
|
|
IN PUNICODE_STRING ClientDomain,
|
|
OUT PKERB_CONTEXT * NewContext,
|
|
OUT PTimeStamp ContextLifetime
|
|
);
|
|
|
|
NTSTATUS
|
|
KerbUpdateServerContext(
|
|
IN PKERB_CONTEXT Context,
|
|
IN PKERB_ENCRYPTED_TICKET InternalTicket,
|
|
IN PKERB_AP_REQUEST ApRequest,
|
|
IN PKERB_ENCRYPTION_KEY SessionKey,
|
|
IN PLUID LogonId,
|
|
IN OUT PSID * UserSid,
|
|
IN ULONG ContextFlags,
|
|
IN ULONG ContextAttributes,
|
|
IN ULONG Nonce,
|
|
IN ULONG ReceiveNonce,
|
|
IN OUT PHANDLE TokenHandle,
|
|
IN PUNICODE_STRING ClientName,
|
|
IN PUNICODE_STRING ClientDomain,
|
|
OUT PTimeStamp ContextLifetime
|
|
);
|
|
|
|
NTSTATUS
|
|
KerbCreateEmptyContext(
|
|
IN PKERB_CREDENTIAL Credential,
|
|
IN ULONG ContextFlags,
|
|
IN ULONG ContextAttributes,
|
|
IN PLUID LogonId,
|
|
OUT PKERB_CONTEXT * NewContext,
|
|
OUT PTimeStamp ContextLifetime
|
|
);
|
|
|
|
NTSTATUS
|
|
KerbMapContext(
|
|
IN PKERB_CONTEXT Context,
|
|
OUT PBOOLEAN MappedContext,
|
|
OUT PSecBuffer ContextData
|
|
);
|
|
|
|
NTSTATUS
|
|
KerbCreateUserModeContext(
|
|
IN LSA_SEC_HANDLE ContextHandle,
|
|
IN PSecBuffer MarshalledContext,
|
|
OUT PKERB_CONTEXT * NewContext
|
|
);
|
|
|
|
SECURITY_STATUS
|
|
KerbReferenceContextByLsaHandle(
|
|
IN LSA_SEC_HANDLE ContextHandle,
|
|
IN BOOLEAN RemoveFromList,
|
|
OUT PKERB_CONTEXT * FoundContext
|
|
);
|
|
|
|
NTSTATUS
|
|
KerbUpdateClientContext(
|
|
IN PKERB_CONTEXT Context,
|
|
IN PKERB_TICKET_CACHE_ENTRY TicketCacheEntry,
|
|
IN ULONG Nonce,
|
|
IN ULONG ReceiveNonce,
|
|
IN ULONG ContextFlags,
|
|
IN ULONG ContextAttribs,
|
|
IN OPTIONAL PKERB_ENCRYPTION_KEY SubSessionKey,
|
|
OUT PTimeStamp ContextLifetime
|
|
);
|
|
|
|
NTSTATUS
|
|
KerbCreateSKeyEntry(
|
|
IN KERB_ENCRYPTION_KEY* pSessionKey,
|
|
IN FILETIME* pExpireTime
|
|
);
|
|
|
|
NTSTATUS
|
|
KerbDoesSKeyExist(
|
|
IN KERB_ENCRYPTION_KEY* pKey,
|
|
OUT BOOLEAN* pbExist
|
|
);
|
|
|
|
NTSTATUS
|
|
KerbEqualKey(
|
|
IN KERB_ENCRYPTION_KEY* pKeyFoo,
|
|
IN KERB_ENCRYPTION_KEY* pKeyBar,
|
|
OUT BOOLEAN* pbEqual
|
|
);
|
|
|
|
NTSTATUS
|
|
KerbInsertSKey(
|
|
IN KERB_SESSION_KEY_ENTRY* pSKeyEntry
|
|
);
|
|
|
|
VOID
|
|
KerbTrimSKeyList(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
KerbNetworkServiceSKeyListCleanupCallback(
|
|
IN VOID* pContext,
|
|
IN BOOLEAN bTimeOut
|
|
);
|
|
|
|
NTSTATUS
|
|
KerbCreateSKeyTimer(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
KerbFreeSKeyTimer(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
KerbFreeSKeyEntry(
|
|
IN KERB_SESSION_KEY_ENTRY* pSKeyEntry
|
|
);
|
|
|
|
NTSTATUS
|
|
KerbProcessTargetNames(
|
|
IN PUNICODE_STRING TargetName,
|
|
IN OPTIONAL PUNICODE_STRING SuppTargetName,
|
|
IN ULONG Flags,
|
|
IN OUT ULONG *ProcessFlags,
|
|
OUT PKERB_INTERNAL_NAME * FinalTarget,
|
|
OUT PUNICODE_STRING TargetRealm,
|
|
OUT OPTIONAL PKERB_SPN_CACHE_ENTRY * SpnCacheEntry
|
|
);
|
|
|
|
#define KERB_CRACK_NAME_USE_WKSTA_REALM 0x1
|
|
#define KERB_CRACK_NAME_REALM_SUPPLIED 0x2
|
|
|
|
#endif // __CTXTMGR_H__
|