PageRenderTime 24ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/winsup/cygwin/cyglsa.h

https://bitbucket.org/pizzafactory/binutils
C Header | 213 lines | 162 code | 26 blank | 25 comment | 0 complexity | bf43787a3ab993dcc83e9672d2357e77 MD5 | raw file
  1. /* cyglsa.h: Header file for Cygwin LSA authentication
  2. Copyright 2006, 2008 Red Hat, Inc.
  3. Written by Corinna Vinschen <corinna@vinschen.de>
  4. This file is part of Cygwin.
  5. This software is a copyrighted work licensed under the terms of the
  6. Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */
  7. #ifndef _CYGLSA_H
  8. #define _CYGLSA_H
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. #define CYG_LSA_PKGNAME "CygwinLsa"
  13. #define CYG_LSA_MAGIC_OLD1 0x0379f014LU
  14. /* First change to cyglsa_t.
  15. - Username and domain are now of type WCHAR instead of char.
  16. - domain is MAX_DOMAIN_NAME_LEN instead of INTERNET_MAX_HOST_NAME_LENGTH. */
  17. #define CYG_LSA_MAGIC 0x0379f115LU
  18. /* Datastructures not defined in w32api. */
  19. typedef PVOID *PLSA_CLIENT_REQUEST;
  20. typedef UNICODE_STRING SECURITY_STRING, *PSECURITY_STRING;
  21. typedef struct _SECPKG_CLIENT_INFO
  22. {
  23. LUID LogonId;
  24. ULONG ProcessID;
  25. ULONG ThreadID;
  26. BOOLEAN HasTcbPrivilege;
  27. BOOLEAN Impersonating;
  28. BOOLEAN Restricted;
  29. } SECPKG_CLIENT_INFO, *PSECPKG_CLIENT_INFO;
  30. typedef enum _SECPKG_NAME_TYPE
  31. {
  32. SecNameSamCompatible,
  33. SecNameAlternateId,
  34. SecNameFlat,
  35. SecNameDN,
  36. SecNameSPN
  37. } SECPKG_NAME_TYPE, *PSECPKG_NAME_TYPE;
  38. typedef struct _SECPKG_CALL_INFO
  39. {
  40. ULONG ProcessId;
  41. ULONG ThreadId;
  42. ULONG Attributes;
  43. ULONG CallCount;
  44. } SECPKG_CALL_INFO, *PSECPKG_CALL_INFO;
  45. /* The table returned by LsaApInitializePackage is actually a
  46. LSA_SECPKG_FUNCTION_TABLE even though that's not documented.
  47. We need only a subset of this table, basically the LSA_DISPATCH_TABLE
  48. plus the pointer to the GetClientInfo function. */
  49. typedef struct _LSA_SECPKG_FUNCS
  50. {
  51. NTSTATUS (NTAPI *CreateLogonSession)(PLUID);
  52. NTSTATUS (NTAPI *DeleteLogonSession)(PLUID);
  53. NTSTATUS (NTAPI *AddCredentials)(PLUID, ULONG, PLSA_STRING, PLSA_STRING);
  54. NTSTATUS (NTAPI *GetCredentials)(PVOID); /* wrong prototype, unused */
  55. NTSTATUS (NTAPI *DeleteCredentials)(PVOID); /* wrong prototype, unused */
  56. PVOID (NTAPI *AllocateLsaHeap)(ULONG);
  57. VOID (NTAPI *FreeLsaHeap)(PVOID);
  58. NTSTATUS (NTAPI *AllocateClientBuffer)(PLSA_CLIENT_REQUEST, ULONG, PVOID *);
  59. NTSTATUS (NTAPI *FreeClientBuffer)(PLSA_CLIENT_REQUEST, PVOID);
  60. NTSTATUS (NTAPI *CopyToClientBuffer)(PLSA_CLIENT_REQUEST, ULONG,
  61. PVOID, PVOID);
  62. NTSTATUS (NTAPI *CopyFromClientBuffer)(PLSA_CLIENT_REQUEST, ULONG,
  63. PVOID, PVOID);
  64. NTSTATUS (NTAPI *ImpersonateClient)(VOID);
  65. NTSTATUS (NTAPI *UnloadPackage)(VOID);
  66. NTSTATUS (NTAPI *DuplicateHandle)(HANDLE, PHANDLE);
  67. NTSTATUS (NTAPI *SaveSupplementalCredentials)(VOID);
  68. NTSTATUS (NTAPI *CreateThread)(PVOID); /* wrong prototype, unused */
  69. NTSTATUS (NTAPI *GetClientInfo)(PSECPKG_CLIENT_INFO);
  70. NTSTATUS (NTAPI *RegisterNotification)(PVOID); /* wrong prototype, unused */
  71. NTSTATUS (NTAPI *CancelNotification)(PVOID); /* wrong prototype, unused */
  72. NTSTATUS (NTAPI *MapBuffer)(PVOID); /* wrong prototype, unused */
  73. NTSTATUS (NTAPI *CreateToken)(PVOID); /* wrong prototype, unused */
  74. NTSTATUS (NTAPI *AuditLogon)(PVOID); /* wrong prototype, unused */
  75. NTSTATUS (NTAPI *CallPackage)(PVOID); /* wrong prototype, unused */
  76. NTSTATUS (NTAPI *FreeReturnBuffer)(PVOID); /* wrong prototype, unused */
  77. BOOLEAN (NTAPI *GetCallInfo)(PSECPKG_CALL_INFO);
  78. NTSTATUS (NTAPI *CallPackageEx)(PVOID); /* wrong prototype, unused */
  79. NTSTATUS (NTAPI *CreateSharedMemory)(PVOID); /* wrong prototype, unused */
  80. NTSTATUS (NTAPI *AllocateSharedMemory)(PVOID); /* wrong prototype, unused */
  81. NTSTATUS (NTAPI *FreeSharedMemory)(PVOID); /* wrong prototype, unused */
  82. NTSTATUS (NTAPI *DeleteSharedMemory)(PVOID); /* wrong prototype, unused */
  83. NTSTATUS (NTAPI *OpenSamUser)(PSECURITY_STRING, SECPKG_NAME_TYPE,
  84. PSECURITY_STRING, BOOLEAN, ULONG, PVOID *);
  85. NTSTATUS (NTAPI *GetUserCredentials)(PVOID, PVOID, PULONG, PVOID *, PULONG);
  86. NTSTATUS (NTAPI *GetUserAuthData)(PVOID, PUCHAR *, PULONG);
  87. NTSTATUS (NTAPI *CloseSamUser)(PVOID);
  88. NTSTATUS (NTAPI *ConvertAuthDataToToken)(PVOID, ULONG,
  89. SECURITY_IMPERSONATION_LEVEL,
  90. PTOKEN_SOURCE, SECURITY_LOGON_TYPE,
  91. PUNICODE_STRING, PHANDLE, PLUID,
  92. PUNICODE_STRING, PNTSTATUS);
  93. NTSTATUS (NTAPI *ClientCallback)(PVOID); /* wrong prototype, unused */
  94. NTSTATUS (NTAPI *UpdateCredentials)(PVOID); /* wrong prototype, unused */
  95. NTSTATUS (NTAPI *GetAuthDataForUser)(PSECURITY_STRING, SECPKG_NAME_TYPE,
  96. PSECURITY_STRING, PUCHAR *, PULONG,
  97. PUNICODE_STRING);
  98. NTSTATUS (NTAPI *CrackSingleName)(PVOID); /* wrong prototype, unused */
  99. NTSTATUS (NTAPI *AuditAccountLogon)(PVOID); /* wrong prototype, unused */
  100. NTSTATUS (NTAPI *CallPackagePassthrough)(PVOID); /* wrong prototype, unused */
  101. } LSA_SECPKG_FUNCS, *PLSA_SECPKG_FUNCS;
  102. typedef enum _LSA_TOKEN_INFORMATION_TYPE
  103. {
  104. LsaTokenInformationNull,
  105. LsaTokenInformationV1,
  106. LsaTokenInformationV2
  107. } LSA_TOKEN_INFORMATION_TYPE, *PLSA_TOKEN_INFORMATION_TYPE;
  108. typedef struct _LSA_TOKEN_INFORMATION_V2
  109. {
  110. LARGE_INTEGER ExpirationTime;
  111. TOKEN_USER User;
  112. PTOKEN_GROUPS Groups;
  113. TOKEN_PRIMARY_GROUP PrimaryGroup;
  114. PTOKEN_PRIVILEGES Privileges;
  115. TOKEN_OWNER Owner;
  116. TOKEN_DEFAULT_DACL DefaultDacl;
  117. } LSA_TOKEN_INFORMATION_V2, *PLSA_TOKEN_INFORMATION_V2;
  118. /* These structures are eqivalent to the appropriate Windows structures,
  119. using 32 bit offsets instead of pointers. These datastructures are
  120. used to transfer the logon information to the LSA authentication package.
  121. We can't use the LSA_TOKEN_INFORMATION_V2 structure directly, because
  122. its size differs between 32 bit and 64 bit Windows. */
  123. typedef DWORD OFFSET;
  124. typedef struct _CYG_SID_AND_ATTRIBUTES
  125. {
  126. OFFSET Sid;
  127. DWORD Attributes;
  128. } CYG_SID_AND_ATTRIBUTES, *PCYG_SID_AND_ATTRIBUTES;
  129. typedef struct _CYG_TOKEN_USER
  130. {
  131. CYG_SID_AND_ATTRIBUTES User;
  132. } CYG_TOKEN_USER, *PCYG_TOKEN_USER;
  133. typedef struct _CYG_TOKEN_GROUPS
  134. {
  135. DWORD GroupCount;
  136. CYG_SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
  137. } CYG_TOKEN_GROUPS, *PCYG_TOKEN_GROUPS;
  138. typedef struct _CYG_TOKEN_PRIMARY_GROUP
  139. {
  140. OFFSET PrimaryGroup;
  141. } CYG_TOKEN_PRIMARY_GROUP, *PCYG_TOKEN_PRIMARY_GROUP;
  142. typedef struct _CYG_TOKEN_OWNER
  143. {
  144. OFFSET Owner;
  145. } CYG_TOKEN_OWNER, *PCYG_TOKEN_OWNER;
  146. typedef struct _CYG_TOKEN_DEFAULT_DACL
  147. {
  148. OFFSET DefaultDacl;
  149. } CYG_TOKEN_DEFAULT_DACL, *PCYG_TOKEN_DEFAULT_DACL;
  150. typedef struct _CYG_LSA_TOKEN_INFORMATION
  151. {
  152. LARGE_INTEGER ExpirationTime;
  153. CYG_TOKEN_USER User;
  154. OFFSET Groups;
  155. CYG_TOKEN_PRIMARY_GROUP PrimaryGroup;
  156. OFFSET Privileges;
  157. CYG_TOKEN_OWNER Owner;
  158. CYG_TOKEN_DEFAULT_DACL DefaultDacl;
  159. } CYG_LSA_TOKEN_INFORMATION, *PCYG_LSA_TOKEN_INFORMATION;
  160. /* This is the structure created by security.cc:lsaauth(), which is given to
  161. LsaApLogonUser to create the token information returned to the LSA. */
  162. typedef struct
  163. {
  164. DWORD magic;
  165. DWORD checksum;
  166. WCHAR username[UNLEN + 1];
  167. WCHAR domain[MAX_DOMAIN_NAME_LEN + 1];
  168. ULONG inf_size;
  169. CYG_LSA_TOKEN_INFORMATION inf;
  170. BYTE data[1];
  171. } cyglsa_t;
  172. typedef struct
  173. {
  174. DWORD magic_pre;
  175. HANDLE token;
  176. DWORD magic_post;
  177. } cygprf_t;
  178. #define MAGIC_PRE 0x12345678UL
  179. #define MAGIC_POST 0x87654321UL
  180. #ifdef __cplusplus
  181. }
  182. #endif
  183. #endif /* _CYGLSA_H */