diff --git a/dlls/netapi32/Makefile.in b/dlls/netapi32/Makefile.in index 8bb7932055e..b898d10df7e 100644 --- a/dlls/netapi32/Makefile.in +++ b/dlls/netapi32/Makefile.in @@ -11,6 +11,7 @@ C_SRCS = \ access.c \ apibuf.c \ browsr.c \ + ds.c \ nbcmdqueue.c \ nbnamecache.c \ nbt.c \ diff --git a/dlls/netapi32/ds.c b/dlls/netapi32/ds.c new file mode 100644 index 00000000000..da7b9bbf2b4 --- /dev/null +++ b/dlls/netapi32/ds.c @@ -0,0 +1,69 @@ +/* + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include + +#include "windef.h" +#include "winbase.h" +#include "winerror.h" +#include "wine/debug.h" +#include "dsrole.h" + +WINE_DEFAULT_DEBUG_CHANNEL(ds); + +/************************************************************ + * DsRoleFreeMemory (NETAPI32.@) + * + * PARAMS + * Buffer [I] Pointer to the to-be-freed buffer. + * + * RETURNS + * Nothing + */ +void WINAPI DsRoleFreeMemory(PVOID Buffer) +{ + FIXME("(%p) stub\n", 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) +{ + 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; + + return E_NOTIMPL; +} diff --git a/dlls/netapi32/netapi32.spec b/dlls/netapi32/netapi32.spec index 412ac72dabc..dbb42c49747 100644 --- a/dlls/netapi32/netapi32.spec +++ b/dlls/netapi32/netapi32.spec @@ -1,3 +1,18 @@ +@ stub DsAddressToSiteNames +@ stub DsAddressToSiteNamesEx +@ stub DsDeregisterDnsHostRecords +@ stub DsEnumerateDomainTrusts +@ stub DsGetDcClose +@ stub DsGetDcName +@ stub DsGetDcNext +@ stub DsGetDcOpen +@ stub DsGetDcSiteCoverage +@ stub DsGetForestTrustInformationW +@ stub DsGetSiteName +@ stub DsMergeForestTrustInformationW +@ stdcall DsRoleFreeMemory(ptr) +@ stdcall DsRoleGetPrimaryDomainInformation(wstr long ptr) +@ stub DsValidateSubnetName @ stub I_BrowserDebugCall @ stub I_BrowserDebugTrace @ stdcall I_BrowserQueryEmulatedDomains(wstr ptr ptr) diff --git a/dlls/netapi32/tests/.gitignore b/dlls/netapi32/tests/.gitignore index 0c2c0307b70..f0f950a3418 100644 --- a/dlls/netapi32/tests/.gitignore +++ b/dlls/netapi32/tests/.gitignore @@ -1,5 +1,6 @@ Makefile access.ok apibuf.ok +ds.ok testlist.c wksta.ok diff --git a/dlls/netapi32/tests/Makefile.in b/dlls/netapi32/tests/Makefile.in index 94f19717624..0740f61e36d 100644 --- a/dlls/netapi32/tests/Makefile.in +++ b/dlls/netapi32/tests/Makefile.in @@ -8,6 +8,7 @@ IMPORTS = netapi32 advapi32 kernel32 CTESTS = \ access.c \ apibuf.c \ + ds.c \ wksta.c @MAKE_TEST_RULES@ diff --git a/dlls/netapi32/tests/ds.c b/dlls/netapi32/tests/ds.c new file mode 100644 index 00000000000..1734156ccaf --- /dev/null +++ b/dlls/netapi32/tests/ds.c @@ -0,0 +1,96 @@ +/* + * Copyright 2005 Paul Vriens + * + * Conformance test of the ds 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include + +#include +#include +#include +#include +#include + +static DWORD (WINAPI *pDsRoleGetPrimaryDomainInformation)(LPCWSTR, DSROLE_PRIMARY_DOMAIN_INFO_LEVEL, PBYTE*); +static void (WINAPI *pDsRoleFreeMemory)(PVOID); + +static void test_params(void) +{ + DWORD ret; + PDSROLE_PRIMARY_DOMAIN_INFO_BASIC dpdi; + + SetLastError(0xdeadbeef); + ret = pDsRoleGetPrimaryDomainInformation(NULL, DsRolePrimaryDomainInfoBasic, NULL); + ok( ret == ERROR_INVALID_PARAMETER, "Expected error ERROR_INVALID_PARAMETER, got (%ld)\n", ret); + + SetLastError(0xdeadbeef); + ret = pDsRoleGetPrimaryDomainInformation(NULL, 0, NULL); + ok( ret == ERROR_INVALID_PARAMETER, "Expected error ERROR_INVALID_PARAMETER, got (%ld)\n", ret); + SetLastError(0xdeadbeef); + ret = pDsRoleGetPrimaryDomainInformation(NULL, 4, NULL); + ok( ret == ERROR_INVALID_PARAMETER, "Expected error ERROR_INVALID_PARAMETER, got (%ld)\n", ret); + + SetLastError(0xdeadbeef); + ret = pDsRoleGetPrimaryDomainInformation(NULL, 4, (PBYTE *)&dpdi); + ok( ret == ERROR_INVALID_PARAMETER, "Expected error ERROR_INVALID_PARAMETER, got (%ld)\n", ret); +} + +static void test_get(void) +{ + DWORD ret; + PDSROLE_PRIMARY_DOMAIN_INFO_BASIC dpdi; + PDSROLE_UPGRADE_STATUS_INFO dusi; + PDSROLE_OPERATION_STATE_INFO dosi; + + SetLastError(0xdeadbeef); + ret = pDsRoleGetPrimaryDomainInformation(NULL, DsRolePrimaryDomainInfoBasic, (PBYTE *)&dpdi); + todo_wine { ok( ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got (%ld)\n", ret); } + pDsRoleFreeMemory(&dpdi); + + SetLastError(0xdeadbeef); + ret = pDsRoleGetPrimaryDomainInformation(NULL, DsRoleUpgradeStatus, (PBYTE *)&dusi); + todo_wine { ok( ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got (%ld)\n", ret); } + pDsRoleFreeMemory(&dusi); + + SetLastError(0xdeadbeef); + ret = pDsRoleGetPrimaryDomainInformation(NULL, DsRoleOperationState, (PBYTE *)&dosi); + todo_wine { ok( ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got (%ld)\n", ret); } + pDsRoleFreeMemory(&dosi); +} + + +START_TEST(ds) +{ + HMODULE hnetapi32; + + hnetapi32 = LoadLibraryA("netapi32.dll"); + if (!hnetapi32) + return; + + SetLastError(0xdeadbeef); + pDsRoleGetPrimaryDomainInformation=(void*)GetProcAddress(hnetapi32,"DsRoleGetPrimaryDomainInformation"); + if (!pDsRoleGetPrimaryDomainInformation) + { + trace("DsRoleGetPrimaryDomainInformation not implemented : (%ld), stop testing\n", GetLastError()); + return; + } + pDsRoleFreeMemory=(void*)GetProcAddress(hnetapi32,"DsRoleFreeMemory"); + + test_params(); + test_get(); +} diff --git a/include/Makefile.in b/include/Makefile.in index 18a63131f2f..c97b0e18cbb 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -121,6 +121,7 @@ WINDOWS_INCLUDES = \ dsdriver.h \ dshow.h \ dsound.h \ + dsrole.h \ dxdiag.h \ dxerr8.h \ dxerr9.h \ diff --git a/include/dsrole.h b/include/dsrole.h new file mode 100644 index 00000000000..7364ace3034 --- /dev/null +++ b/include/dsrole.h @@ -0,0 +1,84 @@ +/* + * Directory Services definitions + * + * Copyright 2005 Paul Vriens + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_DSROLE_H +#define __WINE_DSROLE_H + +#define DSROLE_PRIMARY_DS_RUNNING 0x00000001 +#define DSROLE_PRIMARY_DS_MIXED_MODE 0x00000002 +#define DSROLE_UPGRADE_IN_PROGRESS 0x00000004 +#define DSROLE_PRIMARY_DOMAIN_GUID_PRESENT 0x01000000 + +typedef enum _DSROLE_PRIMARY_DOMAIN_INFO_LEVEL +{ + DsRolePrimaryDomainInfoBasic = 1, + DsRoleUpgradeStatus, + DsRoleOperationState +} DSROLE_PRIMARY_DOMAIN_INFO_LEVEL; + +typedef enum _DSROLE_MACHINE_ROLE +{ + DsRole_RoleStandaloneWorkstation = 0, + DsRole_RoleMemberWorkstation, + DsRole_RoleStandaloneServer, + DsRole_RoleMemberServer, + DsRole_RoleBackupDomainController, + DsRole_RolePrimaryDomainController +} DSROLE_MACHINE_ROLE; + +typedef enum _DSROLE_SERVER_STATE +{ + DsRoleServerUnknown = 0, + DsRoleServerPrimary, + DsRoleServerBackup +} DSROLE_SERVER_STATE; + +typedef enum _DSROLE_OPERATION_STATE +{ + DsRoleOperationIdle = 0, + DsRoleOperationActive, + DsRoleOperationNeedReboot +} DSROLE_OPERATION_STATE; + +typedef struct _DSROLE_PRIMARY_DOMAIN_INFO_BASIC +{ + DSROLE_MACHINE_ROLE MachineRole; + ULONG Flags; + LPWSTR DomainNameFlat; + LPWSTR DomainNameDns; + LPWSTR DomainForestName; + GUID DomainGuid; +} DSROLE_PRIMARY_DOMAIN_INFO_BASIC, *PDSROLE_PRIMARY_DOMAIN_INFO_BASIC; + +typedef struct _DSROLE_UPGRADE_STATUS_INFO +{ + ULONG OperationState; + DSROLE_SERVER_STATE PreviousServerState; +} DSROLE_UPGRADE_STATUS_INFO, *PDSROLE_UPGRADE_STATUS_INFO; + +typedef struct _DSROLE_OPERATION_STATE_INFO +{ + DSROLE_OPERATION_STATE OperationState; +} DSROLE_OPERATION_STATE_INFO, *PDSROLE_OPERATION_STATE_INFO; + +VOID WINAPI DsRoleFreeMemory(IN PVOID Buffer); +DWORD WINAPI DsRoleGetPrimaryDomainInformation(IN LPCWSTR lpServer OPTIONAL, IN DSROLE_PRIMARY_DOMAIN_INFO_LEVEL InfoLevel, OUT PBYTE *Buffer); + +#endif /* __WINE_DSROLE_H */