advapi32: LookupAccountNameW() - return correct domain name length for not-so-well-known SIDs.
This commit is contained in:
parent
a1a2dd3509
commit
e9e4da8f36
@ -2502,8 +2502,8 @@ LookupAccountNameA(
|
|||||||
|
|
||||||
if (ret && lpReferencedDomainNameW)
|
if (ret && lpReferencedDomainNameW)
|
||||||
{
|
{
|
||||||
WideCharToMultiByte(CP_ACP, 0, lpReferencedDomainNameW, *cbReferencedDomainName,
|
WideCharToMultiByte(CP_ACP, 0, lpReferencedDomainNameW, -1,
|
||||||
ReferencedDomainName, *cbReferencedDomainName, NULL, NULL);
|
ReferencedDomainName, *cbReferencedDomainName+1, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlFreeUnicodeString(&lpSystemW);
|
RtlFreeUnicodeString(&lpSystemW);
|
||||||
@ -2526,6 +2526,8 @@ BOOL WINAPI LookupAccountNameW( LPCWSTR lpSystemName, LPCWSTR lpAccountName, PSI
|
|||||||
PSID pSid;
|
PSID pSid;
|
||||||
static const WCHAR dm[] = {'D','O','M','A','I','N',0};
|
static const WCHAR dm[] = {'D','O','M','A','I','N',0};
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
DWORD nameLen;
|
||||||
|
LPCWSTR domainName;
|
||||||
|
|
||||||
FIXME("%s %s %p %p %p %p %p - stub\n", debugstr_w(lpSystemName), debugstr_w(lpAccountName),
|
FIXME("%s %s %p %p %p %p %p - stub\n", debugstr_w(lpSystemName), debugstr_w(lpAccountName),
|
||||||
Sid, cbSid, ReferencedDomainName, cchReferencedDomainName, peUse);
|
Sid, cbSid, ReferencedDomainName, cchReferencedDomainName, peUse);
|
||||||
@ -2566,17 +2568,22 @@ BOOL WINAPI LookupAccountNameW( LPCWSTR lpSystemName, LPCWSTR lpAccountName, PSI
|
|||||||
ret = FALSE;
|
ret = FALSE;
|
||||||
}
|
}
|
||||||
*cbSid = GetLengthSid(pSid);
|
*cbSid = GetLengthSid(pSid);
|
||||||
|
|
||||||
if (ReferencedDomainName != NULL && (*cchReferencedDomainName > strlenW(dm)))
|
|
||||||
strcpyW(ReferencedDomainName, dm);
|
|
||||||
|
|
||||||
if (*cchReferencedDomainName <= strlenW(dm))
|
domainName = dm;
|
||||||
|
nameLen = strlenW(domainName);
|
||||||
|
|
||||||
|
if (*cchReferencedDomainName <= nameLen || !ret)
|
||||||
{
|
{
|
||||||
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
||||||
ret = FALSE;
|
nameLen += 1;
|
||||||
|
ret = FALSE;
|
||||||
|
}
|
||||||
|
else if (ReferencedDomainName && domainName)
|
||||||
|
{
|
||||||
|
strcpyW(ReferencedDomainName, domainName);
|
||||||
}
|
}
|
||||||
|
|
||||||
*cchReferencedDomainName = strlenW(dm)+1;
|
*cchReferencedDomainName = nameLen;
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
{
|
{
|
||||||
|
@ -1554,9 +1554,9 @@ static void test_LookupAccountName(void)
|
|||||||
{
|
{
|
||||||
ok(!lstrcmp(account, user_name), "Expected %s, got %s\n", user_name, account);
|
ok(!lstrcmp(account, user_name), "Expected %s, got %s\n", user_name, account);
|
||||||
ok(!lstrcmp(domain, sid_dom), "Expected %s, got %s\n", sid_dom, domain);
|
ok(!lstrcmp(domain, sid_dom), "Expected %s, got %s\n", sid_dom, domain);
|
||||||
ok(domain_size == domain_save - 1, "Expected %d, got %d\n", domain_save - 1, domain_size);
|
|
||||||
ok(lstrlen(domain) == domain_size, "Expected %d, got %d\n", lstrlen(domain), domain_size);
|
|
||||||
}
|
}
|
||||||
|
ok(domain_size == domain_save - 1, "Expected %d, got %d\n", domain_save - 1, domain_size);
|
||||||
|
ok(lstrlen(domain) == domain_size, "Expected %d, got %d\n", lstrlen(domain), domain_size);
|
||||||
ok(sid_use == SidTypeUser, "Expected SidTypeUser (%d), got %d\n", SidTypeUser, sid_use);
|
ok(sid_use == SidTypeUser, "Expected SidTypeUser (%d), got %d\n", SidTypeUser, sid_use);
|
||||||
domain_size = domain_save;
|
domain_size = domain_save;
|
||||||
sid_size = sid_save;
|
sid_size = sid_save;
|
||||||
@ -1572,10 +1572,8 @@ static void test_LookupAccountName(void)
|
|||||||
ok(ret, "Failed to lookup account name\n");
|
ok(ret, "Failed to lookup account name\n");
|
||||||
ok(sid_size != 0, "sid_size was zero\n");
|
ok(sid_size != 0, "sid_size was zero\n");
|
||||||
ok(!lstrcmp(account, "Everyone"), "Expected Everyone, got %s\n", account);
|
ok(!lstrcmp(account, "Everyone"), "Expected Everyone, got %s\n", account);
|
||||||
todo_wine
|
|
||||||
ok(!lstrcmp(domain, sid_dom), "Expected %s, got %s\n", sid_dom, domain);
|
ok(!lstrcmp(domain, sid_dom), "Expected %s, got %s\n", sid_dom, domain);
|
||||||
ok(domain_size == 0, "Expected 0, got %d\n", domain_size);
|
ok(domain_size == 0, "Expected 0, got %d\n", domain_size);
|
||||||
todo_wine
|
|
||||||
ok(lstrlen(domain) == domain_size, "Expected %d, got %d\n", lstrlen(domain), domain_size);
|
ok(lstrlen(domain) == domain_size, "Expected %d, got %d\n", lstrlen(domain), domain_size);
|
||||||
ok(sid_use == SidTypeWellKnownGroup, "Expected SidTypeWellKnownGroup (%d), got %d\n", SidTypeWellKnownGroup, sid_use);
|
ok(sid_use == SidTypeWellKnownGroup, "Expected SidTypeWellKnownGroup (%d), got %d\n", SidTypeWellKnownGroup, sid_use);
|
||||||
domain_size = domain_save;
|
domain_size = domain_save;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user