diff --git a/dlls/netapi32/Makefile.in b/dlls/netapi32/Makefile.in index 7ea1adc0f0d..926386855c1 100644 --- a/dlls/netapi32/Makefile.in +++ b/dlls/netapi32/Makefile.in @@ -4,7 +4,6 @@ IMPORTLIB = netapi32 IMPORTS = iphlpapi ws2_32 advapi32 C_SRCS = \ - ds.c \ local_group.c \ nbcmdqueue.c \ nbnamecache.c \ diff --git a/dlls/netapi32/ds.c b/dlls/netapi32/ds.c deleted file mode 100644 index e7bbe9cfb90..00000000000 --- a/dlls/netapi32/ds.c +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright 2005 Paul Vriens - * - * netapi32 directory service functions - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include - -#include "ntstatus.h" -#define WIN32_NO_STATUS -#include "windef.h" -#include "winbase.h" -#include "winerror.h" -#include "ntsecapi.h" -#include "wine/debug.h" -#include "dsrole.h" -#include "dsgetdc.h" - -WINE_DEFAULT_DEBUG_CHANNEL(ds); - -DWORD WINAPI DsGetDcNameW(LPCWSTR ComputerName, LPCWSTR AvoidDCName, - GUID* DomainGuid, LPCWSTR SiteName, ULONG Flags, - PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo) -{ - FIXME("(%s, %s, %s, %s, %08x, %p): stub\n", debugstr_w(ComputerName), - debugstr_w(AvoidDCName), debugstr_guid(DomainGuid), - debugstr_w(SiteName), Flags, DomainControllerInfo); - return ERROR_CALL_NOT_IMPLEMENTED; -} - -DWORD WINAPI DsGetDcNameA(LPCSTR ComputerName, LPCSTR AvoidDCName, - GUID* DomainGuid, LPCSTR SiteName, ULONG Flags, - PDOMAIN_CONTROLLER_INFOA *DomainControllerInfo) -{ - FIXME("(%s, %s, %s, %s, %08x, %p): stub\n", debugstr_a(ComputerName), - debugstr_a(AvoidDCName), debugstr_guid(DomainGuid), - debugstr_a(SiteName), Flags, DomainControllerInfo); - return ERROR_CALL_NOT_IMPLEMENTED; -} - -DWORD WINAPI DsGetSiteNameW(LPCWSTR ComputerName, LPWSTR *SiteName) -{ - FIXME("(%s, %p): stub\n", debugstr_w(ComputerName), SiteName); - return ERROR_CALL_NOT_IMPLEMENTED; -} - -DWORD WINAPI DsGetSiteNameA(LPCSTR ComputerName, LPSTR *SiteName) -{ - FIXME("(%s, %p): stub\n", debugstr_a(ComputerName), SiteName); - return ERROR_CALL_NOT_IMPLEMENTED; -} - -/************************************************************ - * DsRoleFreeMemory (NETAPI32.@) - * - * PARAMS - * Buffer [I] Pointer to the to-be-freed buffer. - * - * RETURNS - * Nothing - */ -VOID WINAPI DsRoleFreeMemory(PVOID Buffer) -{ - TRACE("(%p)\n", Buffer); - HeapFree(GetProcessHeap(), 0, Buffer); -} - -/************************************************************ - * DsRoleGetPrimaryDomainInformation (NETAPI32.@) - * - * PARAMS - * lpServer [I] Pointer to UNICODE string with ComputerName - * InfoLevel [I] Type of data to retrieve - * Buffer [O] Pointer to to the requested data - * - * RETURNS - * - * NOTES - * When lpServer is NULL, use the local computer - */ -DWORD WINAPI DsRoleGetPrimaryDomainInformation( - LPCWSTR lpServer, DSROLE_PRIMARY_DOMAIN_INFO_LEVEL InfoLevel, - PBYTE* Buffer) -{ - DWORD ret; - - FIXME("(%p, %d, %p) stub\n", lpServer, InfoLevel, Buffer); - - /* Check some input parameters */ - - if (!Buffer) return ERROR_INVALID_PARAMETER; - if ((InfoLevel < DsRolePrimaryDomainInfoBasic) || (InfoLevel > DsRoleOperationState)) return ERROR_INVALID_PARAMETER; - - *Buffer = NULL; - switch (InfoLevel) - { - case DsRolePrimaryDomainInfoBasic: - { - LSA_OBJECT_ATTRIBUTES ObjectAttributes; - LSA_HANDLE PolicyHandle; - PPOLICY_ACCOUNT_DOMAIN_INFO DomainInfo; - NTSTATUS NtStatus; - int logon_domain_sz; - DWORD size; - PDSROLE_PRIMARY_DOMAIN_INFO_BASIC basic; - - ZeroMemory(&ObjectAttributes, sizeof(ObjectAttributes)); - NtStatus = LsaOpenPolicy(NULL, &ObjectAttributes, - POLICY_VIEW_LOCAL_INFORMATION, &PolicyHandle); - if (NtStatus != STATUS_SUCCESS) - { - TRACE("LsaOpenPolicyFailed with NT status %x\n", - LsaNtStatusToWinError(NtStatus)); - return ERROR_OUTOFMEMORY; - } - LsaQueryInformationPolicy(PolicyHandle, - PolicyAccountDomainInformation, (PVOID*)&DomainInfo); - logon_domain_sz = lstrlenW(DomainInfo->DomainName.Buffer) + 1; - LsaClose(PolicyHandle); - - size = sizeof(DSROLE_PRIMARY_DOMAIN_INFO_BASIC) + - logon_domain_sz * sizeof(WCHAR); - basic = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size); - if (basic) - { - basic->MachineRole = DsRole_RoleStandaloneWorkstation; - basic->DomainNameFlat = (LPWSTR)((LPBYTE)basic + - sizeof(DSROLE_PRIMARY_DOMAIN_INFO_BASIC)); - lstrcpyW(basic->DomainNameFlat, DomainInfo->DomainName.Buffer); - ret = ERROR_SUCCESS; - } - else - ret = ERROR_OUTOFMEMORY; - *Buffer = (PBYTE)basic; - LsaFreeMemory(DomainInfo); - } - break; - default: - ret = ERROR_CALL_NOT_IMPLEMENTED; - } - return ret; -} diff --git a/dlls/netapi32/netapi32.c b/dlls/netapi32/netapi32.c index 9e9b478301f..86c4365a5e5 100644 --- a/dlls/netapi32/netapi32.c +++ b/dlls/netapi32/netapi32.c @@ -1,7 +1,7 @@ /* Copyright 2001 Mike McCormack * Copyright 2002 Andriy Palamarchuk * Copyright 2003 Juan Lang - * Copyright 2006 Paul Vriens + * Copyright 2005,2006 Paul Vriens * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -45,6 +45,8 @@ #include "iphlpapi.h" #include "ntsecapi.h" #include "winnls.h" +#include "dsrole.h" +#include "dsgetdc.h" #include "wine/debug.h" #include "wine/list.h" @@ -1996,3 +1998,126 @@ NET_API_STATUS WINAPI I_BrowserQueryEmulatedDomains( { return ERROR_NOT_SUPPORTED; } + +DWORD WINAPI DsGetDcNameW(LPCWSTR ComputerName, LPCWSTR AvoidDCName, + GUID* DomainGuid, LPCWSTR SiteName, ULONG Flags, + PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo) +{ + FIXME("(%s, %s, %s, %s, %08x, %p): stub\n", debugstr_w(ComputerName), + debugstr_w(AvoidDCName), debugstr_guid(DomainGuid), + debugstr_w(SiteName), Flags, DomainControllerInfo); + return ERROR_CALL_NOT_IMPLEMENTED; +} + +DWORD WINAPI DsGetDcNameA(LPCSTR ComputerName, LPCSTR AvoidDCName, + GUID* DomainGuid, LPCSTR SiteName, ULONG Flags, + PDOMAIN_CONTROLLER_INFOA *DomainControllerInfo) +{ + FIXME("(%s, %s, %s, %s, %08x, %p): stub\n", debugstr_a(ComputerName), + debugstr_a(AvoidDCName), debugstr_guid(DomainGuid), + debugstr_a(SiteName), Flags, DomainControllerInfo); + return ERROR_CALL_NOT_IMPLEMENTED; +} + +DWORD WINAPI DsGetSiteNameW(LPCWSTR ComputerName, LPWSTR *SiteName) +{ + FIXME("(%s, %p): stub\n", debugstr_w(ComputerName), SiteName); + return ERROR_CALL_NOT_IMPLEMENTED; +} + +DWORD WINAPI DsGetSiteNameA(LPCSTR ComputerName, LPSTR *SiteName) +{ + FIXME("(%s, %p): stub\n", debugstr_a(ComputerName), SiteName); + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/************************************************************ + * DsRoleFreeMemory (NETAPI32.@) + * + * PARAMS + * Buffer [I] Pointer to the to-be-freed buffer. + * + * RETURNS + * Nothing + */ +VOID WINAPI DsRoleFreeMemory(PVOID Buffer) +{ + TRACE("(%p)\n", Buffer); + HeapFree(GetProcessHeap(), 0, Buffer); +} + +/************************************************************ + * DsRoleGetPrimaryDomainInformation (NETAPI32.@) + * + * PARAMS + * lpServer [I] Pointer to UNICODE string with ComputerName + * InfoLevel [I] Type of data to retrieve + * Buffer [O] Pointer to to the requested data + * + * RETURNS + * + * NOTES + * When lpServer is NULL, use the local computer + */ +DWORD WINAPI DsRoleGetPrimaryDomainInformation( + LPCWSTR lpServer, DSROLE_PRIMARY_DOMAIN_INFO_LEVEL InfoLevel, + PBYTE* Buffer) +{ + DWORD ret; + + FIXME("(%p, %d, %p) stub\n", lpServer, InfoLevel, Buffer); + + /* Check some input parameters */ + + if (!Buffer) return ERROR_INVALID_PARAMETER; + if ((InfoLevel < DsRolePrimaryDomainInfoBasic) || (InfoLevel > DsRoleOperationState)) return ERROR_INVALID_PARAMETER; + + *Buffer = NULL; + switch (InfoLevel) + { + case DsRolePrimaryDomainInfoBasic: + { + LSA_OBJECT_ATTRIBUTES ObjectAttributes; + LSA_HANDLE PolicyHandle; + PPOLICY_ACCOUNT_DOMAIN_INFO DomainInfo; + NTSTATUS NtStatus; + int logon_domain_sz; + DWORD size; + PDSROLE_PRIMARY_DOMAIN_INFO_BASIC basic; + + ZeroMemory(&ObjectAttributes, sizeof(ObjectAttributes)); + NtStatus = LsaOpenPolicy(NULL, &ObjectAttributes, + POLICY_VIEW_LOCAL_INFORMATION, &PolicyHandle); + if (NtStatus != STATUS_SUCCESS) + { + TRACE("LsaOpenPolicyFailed with NT status %x\n", + LsaNtStatusToWinError(NtStatus)); + return ERROR_OUTOFMEMORY; + } + LsaQueryInformationPolicy(PolicyHandle, + PolicyAccountDomainInformation, (PVOID*)&DomainInfo); + logon_domain_sz = lstrlenW(DomainInfo->DomainName.Buffer) + 1; + LsaClose(PolicyHandle); + + size = sizeof(DSROLE_PRIMARY_DOMAIN_INFO_BASIC) + + logon_domain_sz * sizeof(WCHAR); + basic = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size); + if (basic) + { + basic->MachineRole = DsRole_RoleStandaloneWorkstation; + basic->DomainNameFlat = (LPWSTR)((LPBYTE)basic + + sizeof(DSROLE_PRIMARY_DOMAIN_INFO_BASIC)); + lstrcpyW(basic->DomainNameFlat, DomainInfo->DomainName.Buffer); + ret = ERROR_SUCCESS; + } + else + ret = ERROR_OUTOFMEMORY; + *Buffer = (PBYTE)basic; + LsaFreeMemory(DomainInfo); + } + break; + default: + ret = ERROR_CALL_NOT_IMPLEMENTED; + } + return ret; +}