[PATCH 4/4] secur32: Add support for NameFullyQualifiedDN to GetComputerObjectName.
Dmitry Timoshkov
dmitry at baikal.ru
Fri Mar 2 04:46:13 CST 2018
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
dlls/adsldp/tests/sysinfo.c | 11 +++++-----
dlls/secur32/secur32.c | 50 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+), 5 deletions(-)
diff --git a/dlls/adsldp/tests/sysinfo.c b/dlls/adsldp/tests/sysinfo.c
index 09f2484b7b..db982aa82f 100644
--- a/dlls/adsldp/tests/sysinfo.c
+++ b/dlls/adsldp/tests/sysinfo.c
@@ -165,14 +165,15 @@ static void test_sysinfo(void)
if (hr != S_OK)
{
skip("Computer is not part of a domain, skipping the tests\n");
- IADsADSystemInfo_Release(sysinfo);
- return;
+ goto done;
}
SysFreeString(bstr);
hr = IADsADSystemInfo_get_UserName(sysinfo, &bstr);
- ok(hr == S_OK, "got %#x\n", hr);
- if (hr == S_OK) SysFreeString(bstr);
+todo_wine
+ ok(hr == S_OK || hr == HRESULT_FROM_WIN32(ERROR_NONE_MAPPED), "got %#x\n", hr);
+ if (hr != S_OK) goto done;
+ SysFreeString(bstr);
hr = IADsADSystemInfo_get_SiteName(sysinfo, &bstr);
ok(hr == S_OK, "got %#x\n", hr);
@@ -201,7 +202,7 @@ static void test_sysinfo(void)
hr = IADsADSystemInfo_GetAnyDCName(sysinfo, &bstr);
ok(hr == S_OK, "got %#x\n", hr);
if (hr == S_OK) SysFreeString(bstr);
-
+done:
IADsADSystemInfo_Release(sysinfo);
}
diff --git a/dlls/secur32/secur32.c b/dlls/secur32/secur32.c
index 889883c2bd..bece2b7398 100644
--- a/dlls/secur32/secur32.c
+++ b/dlls/secur32/secur32.c
@@ -1021,6 +1021,56 @@ BOOLEAN WINAPI GetComputerObjectNameW(
}
break;
case NameFullyQualifiedDN:
+ {
+ static const WCHAR cnW[] = { 'C','N','=',0 };
+ static const WCHAR ComputersW[] = { 'C','N','=','C','o','m','p','u','t','e','r','s',0 };
+ static const WCHAR dcW[] = { 'D','C','=',0 };
+ static const WCHAR commaW[] = { ',',0 };
+ WCHAR name[MAX_COMPUTERNAME_LENGTH + 1];
+ DWORD len, size;
+ WCHAR *suffix;
+
+ size = sizeof(name) / sizeof(name[0]);
+ if (!GetComputerNameW(name, &size))
+ {
+ status = FALSE;
+ break;
+ }
+
+ len = strlenW(cnW) + size + 1 + strlenW(ComputersW) + 1 + strlenW(dcW);
+ suffix = strrchrW(domainInfo->DnsDomainName.Buffer, '.');
+ if (suffix)
+ {
+ *suffix++ = 0;
+ len += 1 + strlenW(dcW) + strlenW(suffix);
+ }
+ len += strlenW(domainInfo->DnsDomainName.Buffer);
+
+ if (lpNameBuffer && *nSize > len)
+ {
+ lstrcpyW(lpNameBuffer, cnW);
+ lstrcatW(lpNameBuffer, name);
+ lstrcatW(lpNameBuffer, commaW);
+ lstrcatW(lpNameBuffer, ComputersW);
+ lstrcatW(lpNameBuffer, commaW);
+ lstrcatW(lpNameBuffer, dcW);
+ lstrcatW(lpNameBuffer, domainInfo->DnsDomainName.Buffer);
+ if (suffix)
+ {
+ lstrcatW(lpNameBuffer, commaW);
+ lstrcatW(lpNameBuffer, dcW);
+ lstrcatW(lpNameBuffer, suffix);
+ }
+ status = TRUE;
+ }
+ else /* just requesting length required */
+ {
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ status = FALSE;
+ }
+ *nSize = len + 1;
+ break;
+ }
case NameDisplay:
case NameUniqueId:
case NameCanonical:
--
2.16.2
More information about the wine-devel
mailing list