Module: wine Branch: master Commit: e2ab5b76c192ef1484acb41155ca07d998c79d49 URL: https://source.winehq.org/git/wine.git/?a=commit;h=e2ab5b76c192ef1484acb4115...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Dec 12 17:48:18 2019 +0100
kernelbase: Implement DnsHostnameToComputerNameExW().
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernelbase/kernelbase.spec | 2 +- dlls/kernelbase/registry.c | 32 ++++++++++++++++++++++++++++++++ include/winbase.h | 1 + 3 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec index a9ef04aa17..5b3e10f85b 100644 --- a/dlls/kernelbase/kernelbase.spec +++ b/dlls/kernelbase/kernelbase.spec @@ -267,7 +267,7 @@ @ stdcall DisassociateCurrentThreadFromCallback(ptr) ntdll.TpDisassociateCallback # @ stub DiscardVirtualMemory @ stdcall DisconnectNamedPipe(long) -# @ stub DnsHostnameToComputerNameExW +@ stdcall DnsHostnameToComputerNameExW(wstr ptr ptr) # @ stub DsBindWithSpnExW # @ stub DsCrackNamesW # @ stub DsFreeDomainControllerInfoW diff --git a/dlls/kernelbase/registry.c b/dlls/kernelbase/registry.c index e482d11cb2..b3297a3ad5 100644 --- a/dlls/kernelbase/registry.c +++ b/dlls/kernelbase/registry.c @@ -3046,6 +3046,38 @@ LSTATUS WINAPI RegLoadAppKeyW(const WCHAR *file, HKEY *result, REGSAM sam, DWORD }
+/*********************************************************************** + * DnsHostnameToComputerNameExW (kernelbase.@) + * + * FIXME: how is this different from the non-Ex function? + */ +BOOL WINAPI DECLSPEC_HOTPATCH DnsHostnameToComputerNameExW( const WCHAR *hostname, WCHAR *computername, + DWORD *size ) +{ + static const WCHAR allowed[] = L"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&')(-_{}"; + WCHAR buffer[MAX_COMPUTERNAME_LENGTH + 1]; + DWORD i, len; + + lstrcpynW( buffer, hostname, MAX_COMPUTERNAME_LENGTH + 1 ); + len = lstrlenW( buffer ); + if (*size < len + 1) + { + *size = len; + SetLastError( ERROR_MORE_DATA ); + return FALSE; + } + *size = len; + if (!computername) return FALSE; + for (i = 0; i < len; i++) + { + if (buffer[i] >= 'a' && buffer[i] <= 'z') computername[i] = buffer[i] + 'A' - 'a'; + else computername[i] = wcschr( allowed, buffer[i] ) ? buffer[i] : '_'; + } + computername[len] = 0; + return TRUE; +} + + struct USKEY { HKEY HKCUstart; /* Start key in CU hive */ diff --git a/include/winbase.h b/include/winbase.h index 320e243034..c550ed816d 100644 --- a/include/winbase.h +++ b/include/winbase.h @@ -1958,6 +1958,7 @@ WINBASEAPI BOOL WINAPI DisconnectNamedPipe(HANDLE); WINBASEAPI BOOL WINAPI DnsHostnameToComputerNameA(LPCSTR,LPSTR,LPDWORD); WINBASEAPI BOOL WINAPI DnsHostnameToComputerNameW(LPCWSTR,LPWSTR,LPDWORD); #define DnsHostnameToComputerName WINELIB_NAME_AW(DnsHostnameToComputerName) +WINBASEAPI BOOL WINAPI DnsHostnameToComputerNameExW(LPCWSTR,LPWSTR,LPDWORD); WINBASEAPI BOOL WINAPI DosDateTimeToFileTime(WORD,WORD,LPFILETIME); WINBASEAPI BOOL WINAPI DuplicateHandle(HANDLE,HANDLE,HANDLE,HANDLE*,DWORD,BOOL,DWORD); WINADVAPI BOOL WINAPI DuplicateToken(HANDLE,SECURITY_IMPERSONATION_LEVEL,PHANDLE);