windows-nt/Source/XPSP1/NT/ds/security/protocols/kerberos/client2/tktcache.h
2020-09-26 16:20:57 +08:00

153 lines
3.5 KiB
C

//+-----------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (c) Microsoft Corporation 1992 - 1996
//
// File: tktcache.h
//
// Contents: Prototypes and types for ticket cache
//
//
// History: 16-April-1996 Created MikeSw
//
//------------------------------------------------------------------------
#ifndef __TKTCACHE_H__
#define __TKTCACHE_H__
//
// All global variables declared as EXTERN will be allocated in the file
// that defines TKTCACHE_ALLOCATE
//
#ifdef EXTERN
#undef EXTERN
#endif
#ifdef TKTCACHE_ALLOCATE
#define EXTERN
#else
#define EXTERN extern
#endif
#ifdef WIN32_CHICAGO
EXTERN CRITICAL_SECTION KerberosTicketCacheLock;
#else // WIN32_CHICAGO
EXTERN RTL_RESOURCE KerberosTicketCacheLock;
#endif // WIN32_CHICAGO
EXTERN BOOLEAN KerberosTicketCacheInitialized;
EXTERN LONG KerbTicketCacheHits;
EXTERN LONG KerbTicketCacheMisses;
#define KERB_TICKET_CACHE_PRIMARY_TGT 0x1 // ticket is primary TGT
#define KERB_TICKET_CACHE_DELEGATION_TGT 0x2 // ticket is delegation TGT
#define KERB_TICKET_CACHE_TKT_ENC_IN_SKEY 0x10 // ticket is encrypted with a session key
#ifdef WIN32_CHICAGO
#define KerbWriteLockTicketCache() (EnterCriticalSection(&KerberosTicketCacheLock))
#define KerbReadLockTicketCache() (EnterCriticalSection(&KerberosTicketCacheLock))
#define KerbUnlockTicketCache() (LeaveCriticalSection(&KerberosTicketCacheLock))
#else // WIN32_CHICAGO
#define KerbWriteLockTicketCache() (RtlAcquireResourceExclusive(&KerberosTicketCacheLock,TRUE))
#define KerbReadLockTicketCache() (RtlAcquireResourceShared(&KerberosTicketCacheLock, TRUE))
#define KerbUnlockTicketCache() (RtlReleaseResource(&KerberosTicketCacheLock))
#endif // WIN32_CHICAGO
VOID
KerbReferenceTicketCacheEntry(
IN PKERB_TICKET_CACHE_ENTRY TicketCacheEntry
);
VOID
KerbFreeTicketCacheEntry(
IN PKERB_TICKET_CACHE_ENTRY TicketCacheEntry
);
VOID
KerbReleaseTicketCacheEntry(
IN PKERB_TICKET_CACHE_ENTRY TicketCacheEntry
);
VOID
KerbDereferenceTicketCacheEntry(
IN PKERB_TICKET_CACHE_ENTRY TicketCacheEntry
);
NTSTATUS
KerbInitTicketCaching(
VOID
);
VOID
KerbFreeTicketCache(
VOID
);
NTSTATUS
KerbCacheTicket(
IN OPTIONAL PKERB_TICKET_CACHE TicketCache,
IN PKERB_KDC_REPLY KdcReply,
IN PKERB_ENCRYPTED_KDC_REPLY KdcReplyBody,
IN OPTIONAL PKERB_INTERNAL_NAME TargetName,
IN OPTIONAL PUNICODE_STRING TargetRealm,
IN ULONG Flags,
IN BOOLEAN LinkEntry,
OUT PKERB_TICKET_CACHE_ENTRY * NewCacheEntry
);
VOID
KerbPurgeTicketCache(
IN PKERB_TICKET_CACHE Cache
);
VOID
KerbInitTicketCache(
IN PKERB_TICKET_CACHE TicketCache
);
PKERB_TICKET_CACHE_ENTRY
KerbLocateTicketCacheEntry(
IN PKERB_TICKET_CACHE TicketCache,
IN PKERB_INTERNAL_NAME FullServiceName,
IN PUNICODE_STRING RealmName
);
PKERB_TICKET_CACHE_ENTRY
KerbLocateTicketCacheEntryByRealm(
IN PKERB_TICKET_CACHE TicketCache,
IN PUNICODE_STRING RealmName,
IN ULONG RequiredFlags
);
VOID
KerbInsertTicketCacheEntry(
IN PKERB_TICKET_CACHE TicketCache,
IN PKERB_TICKET_CACHE_ENTRY TicketCacheEntry
);
VOID
KerbRemoveTicketCacheEntry(
IN PKERB_TICKET_CACHE_ENTRY TicketCacheEntry
);
BOOLEAN
KerbTicketIsExpiring(
IN PKERB_TICKET_CACHE_ENTRY CacheEntry,
IN BOOLEAN AllowSkew
);
VOID
KerbSetTicketCacheEntryTarget(
IN PUNICODE_STRING TargetName,
IN PKERB_TICKET_CACHE_ENTRY TicketCacheEntry
);
#endif // __TKTCACHE_H__