342 lines
8.1 KiB
C++
342 lines
8.1 KiB
C++
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1993.
|
|
//
|
|
// File: tktutil.hxx
|
|
//
|
|
// Contents: prototypes for tktutil.cxx
|
|
//
|
|
// Classes:
|
|
//
|
|
// Functions:
|
|
//
|
|
// History: 05-Mar-94 wader Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#ifndef __TKTUTIL_HXX__
|
|
#define __TKTUTIL_HXX__
|
|
|
|
#include <kdcsvr.hxx>
|
|
#include <pac.hxx>
|
|
#include <refer.h>
|
|
#include <transit.h>
|
|
#include <sockutil.h>
|
|
|
|
extern "C"
|
|
{
|
|
#include <ntdsapi.h>
|
|
#include <kdcexp.h>
|
|
}
|
|
|
|
|
|
//
|
|
// Structures
|
|
//
|
|
|
|
#ifdef later
|
|
typedef struct _KDC_PA_DATA_CONTEXT {
|
|
struct _KDC_PA_DATA_CONTEXT * Next;
|
|
ULONG PaDataType;
|
|
ULONG ContextSize;
|
|
PBYTE Context[ANYSIZE_ARRAY];
|
|
} KDC_PA_DATA_CONTEXT, *PKDC_PA_DATA_CONTEXT;
|
|
|
|
typedef NTSTATUS (*PKDC_PA_DATA_RESPONSE) (
|
|
IN OUT PKDC_PA_DATA_CONTEXT * Context
|
|
);
|
|
|
|
typedef NTSTATUS (*PKDC_PA_DATA_CLEANUP) (
|
|
IN PKDC_PA_DATA_CONTEXT Context
|
|
);
|
|
|
|
#endif // later
|
|
|
|
typedef NTSTATUS (*PKDC_PA_DATA_REQUEST) (
|
|
IN PKDC_TICKET_INFO ClientTicketInfo,
|
|
IN SAMPR_HANDLE UserHandle,
|
|
IN PKERB_PA_DATA_LIST PreAuthData,
|
|
OUT PKERB_PA_DATA_LIST * OutputPreAuthData,
|
|
OUT PBOOLEAN BuildPac,
|
|
OUT PULONG Nonce,
|
|
OUT PKERB_ENCRYPTION_KEY ReplyEncryptionKey
|
|
);
|
|
|
|
|
|
typedef struct _KDC_PA_DATA_HANDLER {
|
|
ULONG PaDataType;
|
|
PKDC_PA_DATA_REQUEST Request;
|
|
} KDC_PA_DATA_HANDLER, *PKDC_PA_DATA_HANDLER;
|
|
|
|
|
|
//
|
|
// Flags for Normalize
|
|
//
|
|
|
|
|
|
#define KDC_NAME_CLIENT 0x1
|
|
#define KDC_NAME_SERVER 0x2
|
|
#define KDC_NAME_FOLLOW_REFERRALS 0x4
|
|
#define KDC_NAME_INBOUND 0x8 // for trust, indicates name need not be outbound trust only
|
|
#define KDC_NAME_CHECK_GC 0x10 // indicates that the client said this name should be canonicalized at the GC
|
|
|
|
|
|
//
|
|
// Prototypes.
|
|
//
|
|
|
|
|
|
|
|
KERBERR
|
|
KdcGetTicketInfo(
|
|
IN PUNICODE_STRING UserName,
|
|
IN ULONG LookupFlags,
|
|
IN OPTIONAL PKERB_INTERNAL_NAME PrincipalName,
|
|
IN OPTIONAL PKERB_REALM Realm,
|
|
OUT PKDC_TICKET_INFO TicketInfo,
|
|
OUT PKERB_EXT_ERROR pExtendedError,
|
|
OUT OPTIONAL SAMPR_HANDLE * UserHandle,
|
|
IN OPTIONAL ULONG WhichFields,
|
|
IN OPTIONAL ULONG ExtendedFields,
|
|
OUT OPTIONAL PUSER_INTERNAL6_INFORMATION * RetUserInfo,
|
|
OUT OPTIONAL PSID_AND_ATTRIBUTES_LIST GroupMembership
|
|
);
|
|
|
|
|
|
KERBERR
|
|
GetTicketInfo(
|
|
IN PUNICODE_STRING pwzName,
|
|
IN OPTIONAL PKERB_INTERNAL_NAME PrincipalName,
|
|
IN OPTIONAL PKERB_REALM Realm,
|
|
IN OUT PKDC_TICKET_INFO ptiInfo,
|
|
OUT OPTIONAL SAMPR_HANDLE * UserHandle,
|
|
OUT OPTIONAL PUSER_INTERNAL6_INFORMATION * UserInfo,
|
|
OUT OPTIONAL PSID_AND_ATTRIBUTES_LIST ReverseMembership
|
|
);
|
|
|
|
VOID
|
|
FreeTicketInfo( IN PKDC_TICKET_INFO ptiInfo );
|
|
|
|
KERBERR
|
|
KdcDuplicateCredentials(
|
|
OUT PKERB_STORED_CREDENTIAL * NewCredentials,
|
|
OUT PULONG CredentialSize,
|
|
IN PKERB_STORED_CREDENTIAL OldCredentials,
|
|
IN BOOLEAN MarshallKeys
|
|
);
|
|
|
|
KERBERR
|
|
BuildReply(
|
|
IN OPTIONAL PKDC_TICKET_INFO ClientInfo,
|
|
IN ULONG Nonce,
|
|
IN PKERB_PRINCIPAL_NAME ServerName,
|
|
IN KERB_REALM ServerRealm,
|
|
IN OPTIONAL PKERB_HOST_ADDRESSES HostAddresses,
|
|
IN PKERB_TICKET Ticket,
|
|
OUT PKERB_ENCRYPTED_KDC_REPLY ReplyBody
|
|
);
|
|
|
|
KERBERR
|
|
KdcNormalize(
|
|
IN PKERB_INTERNAL_NAME PrincipalName,
|
|
IN OPTIONAL PUNICODE_STRING PrincipalRealm,
|
|
IN OPTIONAL PUNICODE_STRING RequestRealm,
|
|
IN ULONG NameFlags,
|
|
OUT PBOOLEAN Referral,
|
|
OUT PUNICODE_STRING RealmName,
|
|
OUT PKDC_TICKET_INFO TicketInfo,
|
|
OUT PKERB_EXT_ERROR pExtendedError,
|
|
OUT OPTIONAL SAMPR_HANDLE * UserHandle,
|
|
IN OPTIONAL ULONG WhichFields,
|
|
IN OPTIONAL ULONG ExtendedFields,
|
|
OUT OPTIONAL PUSER_INTERNAL6_INFORMATION * UserInfo,
|
|
OUT OPTIONAL PSID_AND_ATTRIBUTES_LIST GroupMembership
|
|
);
|
|
|
|
KERBERR
|
|
KdcBuildTicketTimesAndFlags(
|
|
IN ULONG ClientPolicyFlags,
|
|
IN ULONG ServerPolicyFlags,
|
|
IN PLARGE_INTEGER DomainTicketLifespan,
|
|
IN PLARGE_INTEGER DomainTicketRenewspan,
|
|
IN OPTIONAL PLARGE_INTEGER LogoffTime,
|
|
IN OPTIONAL PLARGE_INTEGER AccountExpiry,
|
|
IN PKERB_KDC_REQUEST_BODY RequestBody,
|
|
IN OPTIONAL PKERB_ENCRYPTED_TICKET SourceTicket,
|
|
IN OUT PKERB_ENCRYPTED_TICKET Ticket,
|
|
IN OUT OPTIONAL PKERB_EXT_ERROR ExtendedError
|
|
);
|
|
|
|
|
|
KERBERR
|
|
BuildTicketTimesAndFlags(
|
|
IN ULONG ulMaxRenew,
|
|
IN KERB_TICKET_FLAGS fAllowedFlags,
|
|
IN PLARGE_INTEGER ptsMaxRenew,
|
|
IN PLARGE_INTEGER ptsMaxLife,
|
|
IN PKERB_KDC_REQUEST_BODY RequestBody,
|
|
IN OUT PKERB_TICKET Ticket,
|
|
IN OUT OPTIONAL PKERB_EXT_ERROR ExtendedError
|
|
);
|
|
|
|
KERBERR
|
|
GetPacAndSuppCred(
|
|
IN PUSER_INTERNAL6_INFORMATION UserInfo,
|
|
IN PSID_AND_ATTRIBUTES_LIST GroupMembership,
|
|
IN ULONG SignatureSize,
|
|
IN OPTIONAL PKERB_ENCRYPTION_KEY CredentialKey,
|
|
IN OPTIONAL PTimeStamp ClientId,
|
|
IN OPTIONAL PUNICODE_STRING ClientName,
|
|
OUT PPACTYPE * Pac,
|
|
OUT PKERB_EXT_ERROR pExtendedError
|
|
);
|
|
|
|
|
|
|
|
KERBERR
|
|
HandleTGSRequest(
|
|
IN OPTIONAL SOCKADDR * ClientAddress,
|
|
IN PKERB_TGS_REQUEST RequestMessage,
|
|
IN PUNICODE_STRING RequestRealm,
|
|
OUT PKERB_MESSAGE_BUFFER OutputMessage,
|
|
OUT PKERB_EXT_ERROR pExtendedError
|
|
);
|
|
|
|
KERBERR
|
|
KdcVerifyKdcRequest(
|
|
IN PUCHAR RequestBuffer,
|
|
IN ULONG RequestSize,
|
|
IN OPTIONAL SOCKADDR * ClientAddress,
|
|
IN BOOLEAN IsKdcRequest,
|
|
OUT OPTIONAL PKERB_AP_REQUEST * UnmarshalledRequest,
|
|
OUT OPTIONAL PKERB_AUTHENTICATOR * UnmarshalledAuthenticator,
|
|
OUT PKERB_ENCRYPTED_TICKET *EncryptedTicket,
|
|
OUT PKERB_ENCRYPTION_KEY SessionKey,
|
|
OUT PKERB_ENCRYPTION_KEY ServerKey,
|
|
OUT PKDC_TICKET_INFO ServerTicketInfo,
|
|
OUT PBOOLEAN UseSubKey,
|
|
OUT PKERB_EXT_ERROR pExtendedError
|
|
);
|
|
|
|
KERBERR
|
|
KdcVerifyClientAddress(
|
|
IN SOCKADDR * ClientAddress,
|
|
IN PKERB_HOST_ADDRESSES Addresses
|
|
);
|
|
|
|
KERBERR
|
|
KdcVerifyTgsChecksum(
|
|
IN PKERB_KDC_REQUEST_BODY RequestBody,
|
|
IN PKERB_ENCRYPTION_KEY Key,
|
|
IN PKERB_CHECKSUM OldChecksum
|
|
);
|
|
|
|
|
|
NTSTATUS
|
|
KdcBuildPasswordList(
|
|
IN PUNICODE_STRING Password,
|
|
IN PUNICODE_STRING PrincipalName,
|
|
IN PUNICODE_STRING DnsDomainName,
|
|
IN KERB_ACCOUNT_TYPE AccountType,
|
|
IN PKERB_STORED_CREDENTIAL StoredCreds,
|
|
IN ULONG StoredCredSize,
|
|
IN BOOLEAN MarshallKeys,
|
|
IN BOOLEAN IncludeBuiltinTypes,
|
|
IN ULONG Flags,
|
|
IN KDC_DOMAIN_INFO_DIRECTION Direction,
|
|
OUT PKERB_STORED_CREDENTIAL * PasswordList,
|
|
OUT PULONG PasswordListSize
|
|
);
|
|
|
|
|
|
#if DBG
|
|
void
|
|
PrintTicket( ULONG ulDebLevel,
|
|
char * pszMessage,
|
|
PKERB_TICKET pkitTicket );
|
|
|
|
void
|
|
PrintRequest( ULONG ulDebLevel,
|
|
PKERB_KDC_REQUEST_BODY pktrRequest );
|
|
|
|
|
|
#else
|
|
|
|
#define PrintRequest(x,y)
|
|
#define PrintTicket(w,x,y)
|
|
#define PrintProxyReference(w,x,y)
|
|
#define PrintProxyData(w,x,y)
|
|
|
|
#endif
|
|
|
|
VOID
|
|
KdcFreeKdcReplyBody(
|
|
IN PKERB_ENCRYPTED_KDC_REPLY ReplyBody
|
|
);
|
|
|
|
VOID
|
|
KdcFreeInternalTicket(
|
|
IN PKERB_TICKET Ticket
|
|
);
|
|
|
|
VOID
|
|
KdcFreeKdcReply(
|
|
IN PKERB_KDC_REPLY Reply
|
|
);
|
|
|
|
|
|
KERBERR
|
|
KdcGetPacAuthData(
|
|
IN PUSER_INTERNAL6_INFORMATION UserInfo,
|
|
IN PSID_AND_ATTRIBUTES_LIST GroupMembership,
|
|
IN PKERB_ENCRYPTION_KEY ServerKey,
|
|
IN PKERB_ENCRYPTION_KEY CredentialKey,
|
|
IN BOOLEAN AddResourceGroups,
|
|
IN OPTIONAL PKERB_ENCRYPTED_TICKET EncryptedTicket,
|
|
IN OPTIONAL PKERB_INTERNAL_NAME S4UClientName,
|
|
OUT PKERB_AUTHORIZATION_DATA * PacAuthData,
|
|
OUT PKERB_EXT_ERROR pExtendedError
|
|
);
|
|
|
|
KERBERR
|
|
KdcVerifyAndResignPac(
|
|
IN PKERB_ENCRYPTION_KEY OldKey,
|
|
IN PKERB_ENCRYPTION_KEY NewKey,
|
|
IN PKDC_TICKET_INFO OldServerInfo,
|
|
IN BOOLEAN AddResouceGroups,
|
|
IN OUT PKERB_AUTHORIZATION_DATA PacAuthData
|
|
);
|
|
|
|
KERBERR
|
|
KdcGetPacFromAuthData(
|
|
IN PKERB_AUTHORIZATION_DATA AuthData,
|
|
OUT PKERB_IF_RELEVANT_AUTH_DATA *ReturnIfRelevantData,
|
|
OUT PKERB_AUTHORIZATION_DATA * Pac
|
|
);
|
|
|
|
KERBERR
|
|
KdcInsertPacIntoAuthData(
|
|
IN PKERB_AUTHORIZATION_DATA AuthData,
|
|
IN PKERB_IF_RELEVANT_AUTH_DATA IfRelevantData,
|
|
IN PKERB_AUTHORIZATION_DATA PacAuthData,
|
|
OUT PKERB_AUTHORIZATION_DATA * UpdatedAuthData
|
|
);
|
|
|
|
|
|
|
|
|
|
NTSTATUS
|
|
EnterApiCall(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
LeaveApiCall(
|
|
VOID
|
|
);
|
|
|
|
|
|
|
|
#endif // __TKTUTIL_HXX__
|