3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * PURPOSE: Security manager
7 * PROGRAMER: David Welch <welch@cwcom.net>
9 * 26/07/98: Added stubs for security functions
12 /* INCLUDES *****************************************************************/
14 #include <ddk/ntddk.h>
15 #include <internal/se.h>
17 #include <internal/debug.h>
20 /* FUNCTIONS ***************************************************************/
30 RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
34 return(STATUS_UNSUCCESSFUL);
36 SecurityDescriptor->Revision = 1;
37 SecurityDescriptor->Sbz1 = 0;
38 SecurityDescriptor->Control = 0;
39 SecurityDescriptor->Owner = NULL;
40 SecurityDescriptor->Group = NULL;
41 SecurityDescriptor->Sacl = NULL;
42 SecurityDescriptor->Dacl = NULL;
44 return(STATUS_SUCCESS);
49 RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor)
57 Length = sizeof(SECURITY_DESCRIPTOR);
59 if (SecurityDescriptor->Owner != NULL)
61 Owner = SecurityDescriptor->Owner;
62 if (SecurityDescriptor->Control & SE_SELF_RELATIVE)
64 Owner = (PSID)((ULONG)Owner +
65 (ULONG)SecurityDescriptor);
67 Length = Length + ((sizeof(SID) + (Owner->SubAuthorityCount - 1) *
68 sizeof(ULONG) + 3) & 0xfc);
70 if (SecurityDescriptor->Group != NULL)
72 Group = SecurityDescriptor->Group;
73 if (SecurityDescriptor->Control & SE_SELF_RELATIVE)
75 Group = (PSID)((ULONG)Group + (ULONG)SecurityDescriptor);
77 Length = Length + ((sizeof(SID) + (Group->SubAuthorityCount - 1) *
78 sizeof(ULONG) + 3) & 0xfc);
80 if (SecurityDescriptor->Control & SE_DACL_PRESENT &&
81 SecurityDescriptor->Dacl != NULL)
83 Dacl = SecurityDescriptor->Dacl;
84 if (SecurityDescriptor->Control & SE_SELF_RELATIVE)
86 Dacl = (PACL)((ULONG)Dacl + (PVOID)SecurityDescriptor);
88 Length = Length + ((Dacl->AclSize + 3) & 0xfc);
90 if (SecurityDescriptor->Control & SE_SACL_PRESENT &&
91 SecurityDescriptor->Sacl != NULL)
93 Sacl = SecurityDescriptor->Sacl;
94 if (SecurityDescriptor->Control & SE_SELF_RELATIVE)
96 Sacl = (PACL)((ULONG)Sacl + (PVOID)SecurityDescriptor);
98 Length = Length + ((Sacl->AclSize + 3) & 0xfc);
106 RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
107 PBOOLEAN DaclPresent,
109 PBOOLEAN DaclDefaulted)
111 if (SecurityDescriptor->Revision != 1)
113 return(STATUS_UNSUCCESSFUL);
115 if (!(SecurityDescriptor->Control & SE_DACL_PRESENT))
118 return(STATUS_SUCCESS);
121 if (SecurityDescriptor->Dacl == NULL)
127 if (SecurityDescriptor->Control & SE_SELF_RELATIVE)
129 *Dacl = (PACL)((ULONG)SecurityDescriptor->Dacl +
130 (PVOID)SecurityDescriptor);
134 *Dacl = SecurityDescriptor->Dacl;
137 if (SecurityDescriptor->Control & SE_DACL_DEFAULTED)
145 return(STATUS_SUCCESS);
148 #endif /* LIBCAPTIVE */
151 RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
154 BOOLEAN DaclDefaulted)
156 if (SecurityDescriptor->Revision != 1)
158 return(STATUS_UNSUCCESSFUL);
160 if (SecurityDescriptor->Control & SE_SELF_RELATIVE)
162 return(STATUS_UNSUCCESSFUL);
166 SecurityDescriptor->Control = SecurityDescriptor->Control & ~(SE_DACL_PRESENT);
167 return(STATUS_SUCCESS);
169 SecurityDescriptor->Control = SecurityDescriptor->Control | SE_DACL_PRESENT;
170 SecurityDescriptor->Dacl = Dacl;
171 SecurityDescriptor->Control = SecurityDescriptor->Control & ~(SE_DACL_DEFAULTED);
174 SecurityDescriptor->Control = SecurityDescriptor->Control | SE_DACL_DEFAULTED;
176 return(STATUS_SUCCESS);
182 RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor)
189 RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
191 BOOLEAN OwnerDefaulted)
193 if (SecurityDescriptor->Revision != 1)
195 return(STATUS_UNSUCCESSFUL);
197 if (SecurityDescriptor->Control & SE_SELF_RELATIVE)
199 return(STATUS_UNSUCCESSFUL);
201 SecurityDescriptor->Owner = Owner;
202 SecurityDescriptor->Control = SecurityDescriptor->Control & ~(SE_OWNER_DEFAULTED);
205 SecurityDescriptor->Control = SecurityDescriptor->Control | SE_OWNER_DEFAULTED;
207 return(STATUS_SUCCESS);
212 RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
214 PBOOLEAN OwnerDefaulted)
216 if (SecurityDescriptor->Revision != 1)
218 return(STATUS_UNSUCCESSFUL);
220 if (SecurityDescriptor->Owner != NULL)
222 if (SecurityDescriptor->Control & SE_SELF_RELATIVE)
224 *Owner = (PSID)((ULONG)SecurityDescriptor->Owner +
225 (PVOID)SecurityDescriptor);
229 *Owner = SecurityDescriptor->Owner;
236 if (SecurityDescriptor->Control & SE_OWNER_DEFAULTED)
244 return(STATUS_SUCCESS);
249 RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
251 BOOLEAN GroupDefaulted)
253 if (SecurityDescriptor->Revision != 1)
255 return(STATUS_UNSUCCESSFUL);
257 if (SecurityDescriptor->Control & SE_SELF_RELATIVE)
259 return(STATUS_UNSUCCESSFUL);
261 SecurityDescriptor->Group = Group;
262 SecurityDescriptor->Control = SecurityDescriptor->Control & ~(SE_GROUP_DEFAULTED);
265 SecurityDescriptor->Control = SecurityDescriptor->Control | SE_GROUP_DEFAULTED;
267 return(STATUS_SUCCESS);
272 RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
274 PBOOLEAN GroupDefaulted)
276 if (SecurityDescriptor->Revision != 1)
278 return(STATUS_UNSUCCESSFUL);
280 if (SecurityDescriptor->Group != NULL)
282 if (SecurityDescriptor->Control & SE_SELF_RELATIVE)
284 *Group = (PSID)((ULONG)SecurityDescriptor->Group +
285 (PVOID)SecurityDescriptor);
289 *Group = SecurityDescriptor->Group;
296 if (SecurityDescriptor->Control & SE_GROUP_DEFAULTED)
304 return(STATUS_SUCCESS);
309 RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
310 PBOOLEAN SaclPresent,
312 PBOOLEAN SaclDefaulted)
314 if (SecurityDescriptor->Revision != 1)
316 return(STATUS_UNSUCCESSFUL);
318 if (!(SecurityDescriptor->Control & SE_SACL_PRESENT))
321 return(STATUS_SUCCESS);
324 if (SecurityDescriptor->Sacl == NULL)
330 if (SecurityDescriptor->Control & SE_SELF_RELATIVE)
332 *Sacl = (PACL)((ULONG)SecurityDescriptor->Sacl +
333 (PVOID)SecurityDescriptor);
337 *Sacl = SecurityDescriptor->Sacl;
340 if (SecurityDescriptor->Control & SE_SACL_DEFAULTED)
348 return(STATUS_SUCCESS);
353 RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
356 BOOLEAN SaclDefaulted)
358 if (SecurityDescriptor->Revision != 1)
360 return(STATUS_UNSUCCESSFUL);
362 if (SecurityDescriptor->Control & SE_SELF_RELATIVE)
364 return(STATUS_UNSUCCESSFUL);
368 SecurityDescriptor->Control = SecurityDescriptor->Control & ~(SE_SACL_PRESENT);
369 return(STATUS_SUCCESS);
371 SecurityDescriptor->Control = SecurityDescriptor->Control | SE_SACL_PRESENT;
372 SecurityDescriptor->Sacl = Sacl;
373 SecurityDescriptor->Control = SecurityDescriptor->Control & ~(SE_SACL_DEFAULTED);
376 SecurityDescriptor->Control = SecurityDescriptor->Control | SE_SACL_DEFAULTED;
378 return(STATUS_SUCCESS);
383 RtlAbsoluteToSelfRelativeSD(PSECURITY_DESCRIPTOR AbsSD,
384 PSECURITY_DESCRIPTOR RelSD,
387 if (AbsSD->Control & SE_SELF_RELATIVE)
388 return(STATUS_BAD_DESCRIPTOR_FORMAT);
390 // return(RtlPMakeSelfRelativeSD (AbsSD, RelSD, BufferLength));
393 return(STATUS_NOT_IMPLEMENTED);
396 #endif /* LIBCAPTIVE */