Signed-off-by: Dmitry Timoshkov dmitry@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: