Commit e9e4da8f authored by Paul Bryan Roberts's avatar Paul Bryan Roberts Committed by Alexandre Julliard

advapi32: LookupAccountNameW() - return correct domain name length for not-so-well-known SIDs.

parent a1a2dd35
...@@ -2502,8 +2502,8 @@ LookupAccountNameA( ...@@ -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 ...@@ -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);
...@@ -2567,16 +2569,21 @@ BOOL WINAPI LookupAccountNameW( LPCWSTR lpSystemName, LPCWSTR lpAccountName, PSI ...@@ -2567,16 +2569,21 @@ BOOL WINAPI LookupAccountNameW( LPCWSTR lpSystemName, LPCWSTR lpAccountName, PSI
} }
*cbSid = GetLengthSid(pSid); *cbSid = GetLengthSid(pSid);
if (ReferencedDomainName != NULL && (*cchReferencedDomainName > strlenW(dm))) domainName = dm;
strcpyW(ReferencedDomainName, dm); nameLen = strlenW(domainName);
if (*cchReferencedDomainName <= strlenW(dm)) if (*cchReferencedDomainName <= nameLen || !ret)
{ {
SetLastError(ERROR_INSUFFICIENT_BUFFER); SetLastError(ERROR_INSUFFICIENT_BUFFER);
nameLen += 1;
ret = FALSE; 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) ...@@ -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(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(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) ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment