From b666112fa12386bb513fa6724f195630cb9dc8ed Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 21 May 2016 15:05:49 +0000 Subject: [PATCH] [SAMSRV] Implement SamrGetDomainPasswordInformation. svn path=/trunk/; revision=71365 --- reactos/dll/win32/samsrv/samrpc.c | 56 +++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/samsrv/samrpc.c b/reactos/dll/win32/samsrv/samrpc.c index 9508d48042f..aa81c2f6d4c 100644 --- a/reactos/dll/win32/samsrv/samrpc.c +++ b/reactos/dll/win32/samsrv/samrpc.c @@ -9212,6 +9212,7 @@ SamrUnicodeChangePasswordUser2(IN handle_t BindingHandle, return STATUS_NOT_IMPLEMENTED; } + /* Function 56 */ NTSTATUS NTAPI @@ -9219,8 +9220,59 @@ SamrGetDomainPasswordInformation(IN handle_t BindingHandle, IN PRPC_UNICODE_STRING Unused, OUT PUSER_DOMAIN_PASSWORD_INFORMATION PasswordInformation) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + SAMPR_HANDLE ServerHandle = NULL; + PSAM_DB_OBJECT DomainObject = NULL; + SAM_DOMAIN_FIXED_DATA FixedData; + ULONG Length; + NTSTATUS Status; + + TRACE("(%p %p %p)\n", BindingHandle, Unused, PasswordInformation); + + Status = SamrConnect(NULL, + &ServerHandle, + SAM_SERVER_LOOKUP_DOMAIN); + if (!NT_SUCCESS(Status)) + { + TRACE("SamrConnect() failed (Status 0x%08lx)\n", Status); + goto done; + } + + Status = SampOpenDbObject((PSAM_DB_OBJECT)ServerHandle, + L"Domains", + L"Account", + 0, + SamDbDomainObject, + DOMAIN_READ_PASSWORD_PARAMETERS, + &DomainObject); + if (!NT_SUCCESS(Status)) + { + TRACE("SampOpenDbObject() failed (Status 0x%08lx)\n", Status); + goto done; + } + + Length = sizeof(SAM_DOMAIN_FIXED_DATA); + Status = SampGetObjectAttribute(DomainObject, + L"F", + NULL, + &FixedData, + &Length); + if (!NT_SUCCESS(Status)) + { + TRACE("SampGetObjectAttribute() failed (Status 0x%08lx)\n", Status); + goto done; + } + + PasswordInformation->MinPasswordLength = FixedData.MinPasswordLength; + PasswordInformation->PasswordProperties = FixedData.PasswordProperties; + +done: + if (DomainObject != NULL) + SampCloseDbObject(DomainObject); + + if (ServerHandle != NULL) + SamrCloseHandle(ServerHandle); + + return Status; }