Module: wine Branch: master Commit: 0197f54a8e83c28ae58760f5b849b1ae17be6e07 URL: https://source.winehq.org/git/wine.git/?a=commit;h=0197f54a8e83c28ae58760f5b...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Fri Mar 2 18:46:13 2018 +0800
secur32: Add support for NameFullyQualifiedDN to GetComputerObjectName.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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 09f2484..db982aa 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 889883c..bece2b7 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: