Leaked source code of windows server 2003
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.

382 lines
9.8 KiB

  1. //+---------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 1992 - 1993.
  5. //
  6. // File: tktutil.hxx
  7. //
  8. // Contents: prototypes for tktutil.cxx
  9. //
  10. // Classes:
  11. //
  12. // Functions:
  13. //
  14. // History: 05-Mar-94 wader Created
  15. //
  16. //----------------------------------------------------------------------------
  17. #ifndef __TKTUTIL_HXX__
  18. #define __TKTUTIL_HXX__
  19. #include <kdcsvr.hxx>
  20. #include <pac.hxx>
  21. #include <refer.h>
  22. #include <transit.h>
  23. #include <sockutil.h>
  24. extern "C"
  25. {
  26. #include <ntdsapi.h>
  27. #include <kdcexp.h>
  28. }
  29. //
  30. // Structures
  31. //
  32. #ifdef later
  33. typedef struct _KDC_PA_DATA_CONTEXT {
  34. struct _KDC_PA_DATA_CONTEXT * Next;
  35. ULONG PaDataType;
  36. ULONG ContextSize;
  37. PBYTE Context[ANYSIZE_ARRAY];
  38. } KDC_PA_DATA_CONTEXT, *PKDC_PA_DATA_CONTEXT;
  39. typedef NTSTATUS (*PKDC_PA_DATA_RESPONSE) (
  40. IN OUT PKDC_PA_DATA_CONTEXT * Context
  41. );
  42. typedef NTSTATUS (*PKDC_PA_DATA_CLEANUP) (
  43. IN PKDC_PA_DATA_CONTEXT Context
  44. );
  45. #endif // later
  46. typedef NTSTATUS (*PKDC_PA_DATA_REQUEST) (
  47. IN PKDC_TICKET_INFO ClientTicketInfo,
  48. IN SAMPR_HANDLE UserHandle,
  49. IN PKERB_PA_DATA_LIST PreAuthData,
  50. OUT PKERB_PA_DATA_LIST * OutputPreAuthData,
  51. OUT PBOOLEAN BuildPac,
  52. OUT PULONG Nonce,
  53. OUT PKERB_ENCRYPTION_KEY ReplyEncryptionKey
  54. );
  55. typedef struct _KDC_PA_DATA_HANDLER {
  56. ULONG PaDataType;
  57. PKDC_PA_DATA_REQUEST Request;
  58. } KDC_PA_DATA_HANDLER, *PKDC_PA_DATA_HANDLER;
  59. //
  60. // Flags for Normalize
  61. //
  62. #define KDC_NAME_CLIENT 0x01
  63. #define KDC_NAME_SERVER 0x02
  64. #define KDC_NAME_FOLLOW_REFERRALS 0x04
  65. #define KDC_NAME_INBOUND 0x08 // for trust, indicates name need not be outbound trust only
  66. #define KDC_NAME_CHECK_GC 0x10 // indicates that the client said this name should be canonicalized at the GC
  67. #define KDC_NAME_UPN_TARGET 0x20
  68. #define KDC_NAME_S4U_CLIENT 0x40 // causes name lookup to be done by AltSecId as well as UPN
  69. //
  70. // TGS process flags.
  71. //
  72. #define TGS_RENEWAL 0x1
  73. #define TGS_REFERRAL 0x2
  74. //
  75. // Prototypes.
  76. //
  77. KERBERR
  78. KdcGetTicketInfo(
  79. IN PUNICODE_STRING UserName,
  80. IN ULONG LookupFlags,
  81. IN BOOLEAN bRestrictUserAccounts,
  82. IN OPTIONAL PKERB_INTERNAL_NAME PrincipalName,
  83. IN OPTIONAL PKERB_REALM Realm,
  84. OUT PKDC_TICKET_INFO TicketInfo,
  85. OUT PKERB_EXT_ERROR pExtendedError,
  86. OUT OPTIONAL SAMPR_HANDLE * UserHandle,
  87. IN OPTIONAL ULONG WhichFields,
  88. IN OPTIONAL ULONG ExtendedFields,
  89. OUT OPTIONAL PUSER_INTERNAL6_INFORMATION * RetUserInfo,
  90. OUT OPTIONAL PSID_AND_ATTRIBUTES_LIST GroupMembership
  91. );
  92. KERBERR
  93. GetTicketInfo(
  94. IN PUNICODE_STRING pwzName,
  95. IN OPTIONAL PKERB_INTERNAL_NAME PrincipalName,
  96. IN OPTIONAL PKERB_REALM Realm,
  97. IN OUT PKDC_TICKET_INFO ptiInfo,
  98. OUT OPTIONAL SAMPR_HANDLE * UserHandle,
  99. OUT OPTIONAL PUSER_INTERNAL6_INFORMATION * UserInfo,
  100. OUT OPTIONAL PSID_AND_ATTRIBUTES_LIST ReverseMembership
  101. );
  102. VOID
  103. FreeTicketInfo( IN PKDC_TICKET_INFO ptiInfo );
  104. KERBERR
  105. KdcDuplicateCredentials(
  106. OUT PKERB_STORED_CREDENTIAL * NewCredentials,
  107. OUT PULONG CredentialSize,
  108. IN PKERB_STORED_CREDENTIAL OldCredentials,
  109. IN BOOLEAN MarshallKeys
  110. );
  111. KERBERR
  112. BuildReply(
  113. IN OPTIONAL PKDC_TICKET_INFO ClientInfo,
  114. IN ULONG Nonce,
  115. IN PKERB_PRINCIPAL_NAME ServerName,
  116. IN KERB_REALM ServerRealm,
  117. IN OPTIONAL PKERB_HOST_ADDRESSES HostAddresses,
  118. IN PKERB_TICKET Ticket,
  119. OUT PKERB_ENCRYPTED_KDC_REPLY ReplyBody
  120. );
  121. KERBERR
  122. KdcNormalize(
  123. IN PKERB_INTERNAL_NAME PrincipalName,
  124. IN OPTIONAL PUNICODE_STRING PrincipalRealm,
  125. IN OPTIONAL PUNICODE_STRING RequestRealm,
  126. IN OPTIONAL PUNICODE_STRING TgtClientRealm,
  127. IN ULONG NameFlags,
  128. IN BOOLEAN bRestrictUserAccounts,
  129. OUT PBOOLEAN Referral,
  130. OUT PUNICODE_STRING RealmName,
  131. OUT PKDC_TICKET_INFO TicketInfo,
  132. OUT PKERB_EXT_ERROR pExtendedError,
  133. OUT OPTIONAL SAMPR_HANDLE * UserHandle,
  134. IN OPTIONAL ULONG WhichFields,
  135. IN OPTIONAL ULONG ExtendedFields,
  136. OUT OPTIONAL PUSER_INTERNAL6_INFORMATION * UserInfo,
  137. OUT OPTIONAL PSID_AND_ATTRIBUTES_LIST GroupMembership
  138. );
  139. KERBERR
  140. KdcBuildTicketTimesAndFlags(
  141. IN ULONG ClientPolicyFlags,
  142. IN ULONG ServerPolicyFlags,
  143. IN PLARGE_INTEGER DomainTicketLifespan,
  144. IN PLARGE_INTEGER DomainTicketRenewspan,
  145. IN OPTIONAL PKDC_S4U_TICKET_INFO S4UTicketInfo,
  146. IN OPTIONAL PLARGE_INTEGER LogoffTime,
  147. IN OPTIONAL PLARGE_INTEGER AccountExpiry,
  148. IN PKERB_KDC_REQUEST_BODY RequestBody,
  149. IN OPTIONAL PKERB_ENCRYPTED_TICKET SourceTicket,
  150. IN OUT PKERB_ENCRYPTED_TICKET Ticket,
  151. IN OUT OPTIONAL PKERB_EXT_ERROR ExtendedError
  152. );
  153. KERBERR
  154. BuildTicketTimesAndFlags(
  155. IN ULONG ulMaxRenew,
  156. IN KERB_TICKET_FLAGS fAllowedFlags,
  157. IN PLARGE_INTEGER ptsMaxRenew,
  158. IN PLARGE_INTEGER ptsMaxLife,
  159. IN PKERB_KDC_REQUEST_BODY RequestBody,
  160. IN OUT PKERB_TICKET Ticket,
  161. IN OUT OPTIONAL PKERB_EXT_ERROR ExtendedError
  162. );
  163. KERBERR
  164. GetPacAndSuppCred(
  165. IN PUSER_INTERNAL6_INFORMATION UserInfo,
  166. IN PSID_AND_ATTRIBUTES_LIST GroupMembership,
  167. IN ULONG SignatureSize,
  168. IN OPTIONAL PKERB_ENCRYPTION_KEY CredentialKey,
  169. IN OPTIONAL PTimeStamp ClientId,
  170. IN OPTIONAL PUNICODE_STRING ClientName,
  171. OUT PPACTYPE * Pac,
  172. OUT PKERB_EXT_ERROR pExtendedError
  173. );
  174. VOID
  175. KdcFreeAuthzInfo(
  176. IN PKDC_AUTHZ_GROUP_BUFFERS InfoToFree
  177. );
  178. KERBERR
  179. KdcGetSidsFromTgt(
  180. IN PKERB_ENCRYPTED_TICKET EncryptedTicket,
  181. IN OPTIONAL PKERB_ENCRYPTION_KEY EncryptedTicketKey,
  182. IN ULONG EncryptionType,
  183. IN PKDC_TICKET_INFO TgtAccountInfo,
  184. IN OUT PKDC_AUTHZ_INFO AuthzInfo,
  185. IN OUT PKDC_AUTHZ_GROUP_BUFFERS InfoToFree,
  186. OUT NTSTATUS * pStatus
  187. );
  188. KERBERR
  189. HandleTGSRequest(
  190. IN OPTIONAL SOCKADDR * ClientAddress,
  191. IN PKERB_TGS_REQUEST RequestMessage,
  192. IN PUNICODE_STRING RequestRealm,
  193. OUT PKERB_MESSAGE_BUFFER OutputMessage,
  194. OUT PKERB_EXT_ERROR pExtendedError,
  195. OUT PUNICODE_STRING ClientStringName,
  196. OUT PUNICODE_STRING ServerStringName
  197. );
  198. KERBERR
  199. KdcVerifyKdcRequest(
  200. IN PUCHAR RequestBuffer,
  201. IN ULONG RequestSize,
  202. IN OPTIONAL SOCKADDR * ClientAddress,
  203. IN BOOLEAN IsKdcRequest,
  204. OUT OPTIONAL PKERB_AP_REQUEST * UnmarshalledRequest,
  205. OUT OPTIONAL PKERB_AUTHENTICATOR * UnmarshalledAuthenticator,
  206. OUT PKERB_ENCRYPTED_TICKET *EncryptedTicket,
  207. OUT PKERB_ENCRYPTION_KEY SessionKey,
  208. OUT PKERB_ENCRYPTION_KEY ServerKey,
  209. OUT PKDC_TICKET_INFO ServerTicketInfo,
  210. OUT PBOOLEAN UseSubKey,
  211. OUT PKERB_EXT_ERROR pExtendedError
  212. );
  213. KERBERR
  214. KdcVerifyTgsChecksum(
  215. IN PKERB_KDC_REQUEST_BODY RequestBody,
  216. IN PKERB_ENCRYPTION_KEY Key,
  217. IN PKERB_CHECKSUM OldChecksum
  218. );
  219. NTSTATUS
  220. KdcBuildPasswordList(
  221. IN PUNICODE_STRING Password,
  222. IN PUNICODE_STRING PrincipalName,
  223. IN PUNICODE_STRING DnsDomainName,
  224. IN KERB_ACCOUNT_TYPE AccountType,
  225. IN PKERB_STORED_CREDENTIAL StoredCreds,
  226. IN ULONG StoredCredSize,
  227. IN BOOLEAN MarshallKeys,
  228. IN BOOLEAN IncludeBuiltinTypes,
  229. IN ULONG Flags,
  230. IN KDC_DOMAIN_INFO_DIRECTION Direction,
  231. OUT PKERB_STORED_CREDENTIAL * PasswordList,
  232. OUT PULONG PasswordListSize
  233. );
  234. #if DBG
  235. void
  236. PrintTicket( ULONG ulDebLevel,
  237. char * pszMessage,
  238. PKERB_TICKET pkitTicket );
  239. void
  240. PrintRequest( ULONG ulDebLevel,
  241. PKERB_KDC_REQUEST_BODY pktrRequest );
  242. #else
  243. #define PrintRequest(x,y)
  244. #define PrintTicket(w,x,y)
  245. #define PrintProxyReference(w,x,y)
  246. #define PrintProxyData(w,x,y)
  247. #endif
  248. VOID
  249. KdcFreeKdcReplyBody(
  250. IN PKERB_ENCRYPTED_KDC_REPLY ReplyBody
  251. );
  252. VOID
  253. KdcFreeInternalTicket(
  254. IN PKERB_TICKET Ticket
  255. );
  256. VOID
  257. KdcFreeKdcReply(
  258. IN PKERB_KDC_REPLY Reply
  259. );
  260. KERBERR
  261. KdcGetPacAuthData(
  262. IN PUSER_INTERNAL6_INFORMATION UserInfo,
  263. IN PSID_AND_ATTRIBUTES_LIST GroupMembership,
  264. IN PKERB_ENCRYPTION_KEY ServerKey,
  265. IN PKERB_ENCRYPTION_KEY CredentialKey,
  266. IN BOOLEAN AddResourceGroups,
  267. IN OPTIONAL PKERB_ENCRYPTED_TICKET EncryptedTicket,
  268. IN OPTIONAL PKDC_S4U_TICKET_INFO S4UClientInfo,
  269. OUT PKERB_AUTHORIZATION_DATA * PacAuthData,
  270. OUT PKERB_EXT_ERROR pExtendedError
  271. );
  272. KERBERR
  273. KdcFilterNamespace(
  274. IN PKDC_TICKET_INFO ServerInfo,
  275. IN KERB_REALM ClientRealm,
  276. OUT PKERB_EXT_ERROR pExtendedError
  277. );
  278. KERBERR
  279. KdcBuildPacVerifier(
  280. IN PTimeStamp ClientId,
  281. IN PUNICODE_STRING ClientName,
  282. OUT PPAC_INFO_BUFFER * Verifier
  283. );
  284. KERBERR
  285. KdcVerifyAndResignPac(
  286. IN PKERB_ENCRYPTION_KEY OldKey,
  287. IN PKERB_ENCRYPTION_KEY NewKey,
  288. IN PKDC_TICKET_INFO OldServerInfo,
  289. IN OPTIONAL PKDC_TICKET_INFO TargetServiceInfo,
  290. IN OPTIONAL PKDC_S4U_TICKET_INFO S4UTicketInfo,
  291. IN OPTIONAL PKERB_ENCRYPTED_TICKET FinalTicket,
  292. IN BOOLEAN AddResourceGroups,
  293. IN PKERB_EXT_ERROR ExtendedError,
  294. IN OUT PKERB_AUTHORIZATION_DATA PacAuthData,
  295. OUT OPTIONAL PS4U_DELEGATION_INFO* S4UDelegationInfo
  296. );
  297. KERBERR
  298. KdcGetPacFromAuthData(
  299. IN PKERB_AUTHORIZATION_DATA AuthData,
  300. OUT PKERB_IF_RELEVANT_AUTH_DATA *ReturnIfRelevantData,
  301. OUT PKERB_AUTHORIZATION_DATA * Pac
  302. );
  303. KERBERR
  304. KdcInsertPacIntoAuthData(
  305. IN PKERB_AUTHORIZATION_DATA AuthData,
  306. IN PKERB_IF_RELEVANT_AUTH_DATA IfRelevantData,
  307. IN PKERB_AUTHORIZATION_DATA PacAuthData,
  308. OUT PKERB_AUTHORIZATION_DATA * UpdatedAuthData
  309. );
  310. VOID
  311. KdcFreeU2UTicketInfo(PKDC_U2U_TICKET_INFO U2UTicketInfo);
  312. VOID
  313. KdcFreeS4UTicketInfo(PKDC_S4U_TICKET_INFO S4UTicketInfo);
  314. NTSTATUS
  315. EnterApiCall(
  316. VOID
  317. );
  318. VOID
  319. LeaveApiCall(
  320. VOID
  321. );
  322. #endif // __TKTUTIL_HXX__