From 07ec73fcaa80c754591e13e02bccff06fee742fc Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 6 Oct 2009 16:49:22 +0200 Subject: [PATCH] advapi32: Retrieve the current user SID from the server in lookup_user_account_name. --- dlls/advapi32/security.c | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c index 9bb76d569a..bff68a36cc 100644 --- a/dlls/advapi32/security.c +++ b/dlls/advapi32/security.c @@ -2555,30 +2555,28 @@ LookupAccountNameA( static BOOL lookup_user_account_name(PSID Sid, PDWORD cbSid, LPWSTR ReferencedDomainName, LPDWORD cchReferencedDomainName, PSID_NAME_USE peUse ) { - /* Default implementation: Always return a default SID */ - SID_IDENTIFIER_AUTHORITY identifierAuthority = {SECURITY_NT_AUTHORITY}; + char buffer[sizeof(TOKEN_USER) + sizeof(SID) + sizeof(DWORD)*SID_MAX_SUB_AUTHORITIES]; + DWORD len = sizeof(buffer); + HANDLE token; BOOL ret; PSID pSid; static const WCHAR dm[] = {'D','O','M','A','I','N',0}; DWORD nameLen; LPCWSTR domainName; - ret = AllocateAndInitializeSid(&identifierAuthority, - 2, - SECURITY_BUILTIN_DOMAIN_RID, - DOMAIN_ALIAS_RID_ADMINS, - 0, 0, 0, 0, 0, 0, - &pSid); - - if (!ret) - return FALSE; - - if (!RtlValidSid(pSid)) + if (!OpenThreadToken(GetCurrentThread(), TOKEN_READ, TRUE, &token)) { - FreeSid(pSid); - return FALSE; + if (GetLastError() != ERROR_NO_TOKEN) return FALSE; + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_READ, &token)) return FALSE; } + ret = GetTokenInformation(token, TokenUser, buffer, len, &len); + CloseHandle( token ); + + if (!ret) return FALSE; + + pSid = ((TOKEN_USER *)buffer)->User.Sid; + if (Sid != NULL && (*cbSid >= GetLengthSid(pSid))) CopySid(*cbSid, Sid, pSid); if (*cbSid < GetLengthSid(pSid)) @@ -2605,8 +2603,6 @@ static BOOL lookup_user_account_name(PSID Sid, PDWORD cbSid, LPWSTR ReferencedDo if (ret) *peUse = SidTypeUser; - FreeSid(pSid); - return ret; } -- 2.32.0.93.g670b81a890