Author: ekohl Date: Wed Oct 16 19:17:09 2013 New Revision: 60691
URL: http://svn.reactos.org/svn/reactos?rev=60691&view=rev Log: [SAMSRV] Add query and set code of user private data and security descriptor attributes.
Modified: trunk/reactos/dll/win32/samsrv/samrpc.c
Modified: trunk/reactos/dll/win32/samsrv/samrpc.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/samsrv/samrpc.c?r... ============================================================================== --- trunk/reactos/dll/win32/samsrv/samrpc.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/samsrv/samrpc.c [iso-8859-1] Wed Oct 16 19:17:09 2013 @@ -6793,17 +6793,49 @@
if (InfoBuffer->All.WhichFields & USER_ALL_PRIVATEDATA) { + Status = SampGetObjectAttributeString(UserObject, + L"PrivateData", + &InfoBuffer->All.PrivateData); + if (!NT_SUCCESS(Status)) + { + TRACE("Status 0x%08lx\n", Status); + goto done; + } + } + + if (InfoBuffer->All.WhichFields & USER_ALL_PASSWORDEXPIRED) + { /* FIXME */ }
- if (InfoBuffer->All.WhichFields & USER_ALL_PASSWORDEXPIRED) - { - /* FIXME */ - } - if (InfoBuffer->All.WhichFields & USER_ALL_SECURITYDESCRIPTOR) { - /* FIXME */ + Length = 0; + SampGetObjectAttribute(UserObject, + L"SecDesc", + NULL, + NULL, + &Length); + + if (Length > 0) + { + InfoBuffer->All.SecurityDescriptor.SecurityDescriptor = midl_user_allocate(Length); + if (InfoBuffer->All.SecurityDescriptor.SecurityDescriptor == NULL) + { + Status = STATUS_INSUFFICIENT_RESOURCES; + goto done; + } + + InfoBuffer->All.SecurityDescriptor.Length = Length; + + Status = SampGetObjectAttribute(UserObject, + L"SecDesc", + NULL, + (PVOID)InfoBuffer->All.SecurityDescriptor.SecurityDescriptor, + &Length); + if (!NT_SUCCESS(Status)) + goto done; + } }
*Buffer = InfoBuffer; @@ -6851,6 +6883,12 @@
if (InfoBuffer->All.NtOwfPassword.Buffer != NULL) midl_user_free(InfoBuffer->All.NtOwfPassword.Buffer); + + if (InfoBuffer->All.PrivateData.Buffer != NULL) + midl_user_free(InfoBuffer->All.PrivateData.Buffer); + + if (InfoBuffer->All.SecurityDescriptor.SecurityDescriptor != NULL) + midl_user_free(InfoBuffer->All.SecurityDescriptor.SecurityDescriptor);
midl_user_free(InfoBuffer); } @@ -7539,6 +7577,15 @@ WriteFixedData = TRUE; }
+ if (WhichFields & USER_ALL_PRIVATEDATA) + { + Status = SampSetObjectAttributeString(UserObject, + L"PrivateData", + &Buffer->All.PrivateData); + if (!NT_SUCCESS(Status)) + goto done; + } + if (WhichFields & USER_ALL_PASSWORDEXPIRED) { if (Buffer->All.PasswordExpired) @@ -7556,6 +7603,15 @@ }
WriteFixedData = TRUE; + } + + if (WhichFields & USER_ALL_SECURITYDESCRIPTOR) + { + Status = SampSetObjectAttribute(UserObject, + L"SecDesc", + REG_BINARY, + Buffer->All.SecurityDescriptor.SecurityDescriptor, + Buffer->All.SecurityDescriptor.Length); }
if (WriteFixedData == TRUE)