Zebediah Figura : advapi32: Return the string SID if LookupAccountSid() fails.
Alexandre Julliard
julliard at winehq.org
Sun Feb 2 12:56:45 CST 2020
Module: wine
Branch: master
Commit: ee012444340cc753485698059b474f6e2ad24ec3
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ee012444340cc753485698059b474f6e2ad24ec3
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Sat Feb 1 12:10:17 2020 -0600
advapi32: Return the string SID if LookupAccountSid() fails.
Based on a patch by Qian Hong.
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/advapi32/lsa.c | 20 ++++++++++++++++++--
dlls/advapi32/tests/lsa.c | 1 +
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c
index 793d791949..d63142f730 100644
--- a/dlls/advapi32/lsa.c
+++ b/dlls/advapi32/lsa.c
@@ -29,6 +29,7 @@
#include "winbase.h"
#include "winreg.h"
#include "winternl.h"
+#include "sddl.h"
#include "advapi32_misc.h"
#include "wine/debug.h"
@@ -486,6 +487,7 @@ NTSTATUS WINAPI LsaLookupSids(
WCHAR *name_buffer;
char *domain_data;
SID_NAME_USE use;
+ WCHAR *strsid;
TRACE("(%p, %u, %p, %p, %p)\n", PolicyHandle, Count, Sids, ReferencedDomains, Names);
@@ -561,6 +563,14 @@ NTSTATUS WINAPI LsaLookupSids(
domain.MaximumLength = sizeof(WCHAR);
}
}
+ else if (ConvertSidToStringSidW(Sids[i], &strsid))
+ {
+ (*Names)[i].Name.Length = strlenW(strsid) * sizeof(WCHAR);
+ (*Names)[i].Name.MaximumLength = (strlenW(strsid) + 1) * sizeof(WCHAR);
+ name_fullsize += (strlenW(strsid) + 1) * sizeof(WCHAR);
+
+ LocalFree(strsid);
+ }
}
/* now we have full length needed for both */
@@ -577,6 +587,8 @@ NTSTATUS WINAPI LsaLookupSids(
{
name_size = domain_size = 0;
+ (*Names)[i].Name.Buffer = name_buffer;
+
if (!LookupAccountSidW(NULL, Sids[i], NULL, &name_size, NULL, &domain_size, &use) &&
GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
@@ -596,15 +608,19 @@ NTSTATUS WINAPI LsaLookupSids(
domain.Buffer = heap_alloc(domain.MaximumLength);
- (*Names)[i].Name.Buffer = name_buffer;
LookupAccountSidW(NULL, Sids[i], (*Names)[i].Name.Buffer, &name_size, domain.Buffer, &domain_size, &use);
(*Names)[i].Use = use;
(*Names)[i].DomainIndex = lsa_reflist_add_domain(*ReferencedDomains, &domain, &domain_data);
heap_free(domain.Buffer);
}
+ else if (ConvertSidToStringSidW(Sids[i], &strsid))
+ {
+ strcpyW((*Names)[i].Name.Buffer, strsid);
+ LocalFree(strsid);
+ }
- name_buffer += name_size;
+ name_buffer += strlenW(name_buffer) + 1;
}
TRACE("mapped %u out of %u\n", mapped, Count);
diff --git a/dlls/advapi32/tests/lsa.c b/dlls/advapi32/tests/lsa.c
index 7b8f6b8e84..57ec8994eb 100644
--- a/dlls/advapi32/tests/lsa.c
+++ b/dlls/advapi32/tests/lsa.c
@@ -403,6 +403,7 @@ static void test_LsaLookupSids(void)
ok(names[0].Use == SidTypeUnknown, "got type %u\n", names[0].Use);
ok(names[0].DomainIndex == -1, "got index %u\n", names[0].DomainIndex);
+ check_unicode_string(&names[0].Name, L"S-1-1234-5678-1234-5678");
LsaFreeMemory(names);
LsaFreeMemory(list);
More information about the wine-cvs
mailing list