Kai Blin : netapi32: Add test for adding/deleting users.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Mar 20 08:11:03 CDT 2007


Module: wine
Branch: master
Commit: ce6a7595c3910f528332547b077049ad8205e69f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ce6a7595c3910f528332547b077049ad8205e69f

Author: Kai Blin <kai.blin at gmail.com>
Date:   Mon Mar 19 16:48:39 2007 +0100

netapi32: Add test for adding/deleting users.

---

 dlls/netapi32/tests/access.c |   56 +++++++++++++++++++++++++++++++++++++++++-
 include/lmaccess.h           |    5 +++
 2 files changed, 60 insertions(+), 1 deletions(-)

diff --git a/dlls/netapi32/tests/access.c b/dlls/netapi32/tests/access.c
index 92d5d3b..7dd5855 100644
--- a/dlls/netapi32/tests/access.c
+++ b/dlls/netapi32/tests/access.c
@@ -20,7 +20,6 @@
 
 #include <stdarg.h>
 
-#include <wine/test.h>
 #include <windef.h>
 #include <winbase.h>
 #include <winerror.h>
@@ -28,6 +27,8 @@
 #include <lmerr.h>
 #include <lmapibuf.h>
 
+#include "wine/test.h"
+
 WCHAR user_name[UNLEN + 1];
 WCHAR computer_name[MAX_COMPUTERNAME_LENGTH + 1];
 
@@ -36,6 +37,9 @@ static const WCHAR sAdminUserName[] = {'A','d','m','i','n','i','s','t','r','a','
 static const WCHAR sGuestUserName[] = {'G','u','e','s','t',0};
 static const WCHAR sNonexistentUser[] = {'N','o','n','e','x','i','s','t','e','n','t',' ',
                                 'U','s','e','r',0};
+static const WCHAR sTestUserName[] = {'t', 'e', 's', 't', 'u', 's', 'e', 'r', 0};
+static const WCHAR sTestUserOldPass[] = {'o', 'l', 'd', 'p', 'a', 's', 's', 0};
+static const WCHAR sTestUserNewPass[] = {'n', 'e', 'w', 'p', 'a', 's', 's', 0};
 static const WCHAR sBadNetPath[] = {'\\','\\','B','a',' ',' ','p','a','t','h',0};
 static const WCHAR sInvalidName[] = {'\\',0};
 static const WCHAR sInvalidName2[] = {'\\','\\',0};
@@ -46,6 +50,9 @@ static NET_API_STATUS (WINAPI *pNetApiBufferSize)(LPVOID,LPDWORD)=NULL;
 static NET_API_STATUS (WINAPI *pNetQueryDisplayInformation)(LPWSTR,DWORD,DWORD,DWORD,DWORD,LPDWORD,PVOID*)=NULL;
 static NET_API_STATUS (WINAPI *pNetUserGetInfo)(LPCWSTR,LPCWSTR,DWORD,LPBYTE*)=NULL;
 static NET_API_STATUS (WINAPI *pNetUserModalsGet)(LPCWSTR,DWORD,LPBYTE*)=NULL;
+static NET_API_STATUS (WINAPI *pNetUserAdd)(LPCWSTR,DWORD,LPBYTE,LPDWORD)=NULL;
+static NET_API_STATUS (WINAPI *pNetUserChangePassword)(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR)=NULL;
+static NET_API_STATUS (WINAPI *pNetUserDel)(LPCWSTR,LPCWSTR)=NULL;
 
 static int init_access_tests(void)
 {
@@ -192,6 +199,49 @@ static void run_usermodalsget_tests(void)
         pNetApiBufferFree(umi2);
 }
 
+static void run_userhandling_tests(void)
+{
+    NET_API_STATUS ret;
+    USER_INFO_1 usri;
+
+    if(!pNetUserAdd || !pNetUserChangePassword || !pNetUserDel)
+    {
+        skip("Functions for modifying the user database missing. Skipping test.\n");
+        return;
+    }
+
+    usri.usri1_name = (LPWSTR) sTestUserName;
+    usri.usri1_password = (LPWSTR) sTestUserOldPass;
+    usri.usri1_priv = USER_PRIV_USER;
+    usri.usri1_home_dir = NULL;
+    usri.usri1_comment = NULL;
+    usri.usri1_flags = UF_SCRIPT;
+    usri.usri1_script_path = NULL;
+
+    ret = pNetUserAdd(NULL, 1, (LPBYTE)&usri, NULL);
+    if(ret == ERROR_ACCESS_DENIED)
+    {
+        skip("Insufficient permissions to add users. Skipping test.\n");
+        return;
+    }
+    if(ret == NERR_UserExists)
+    {
+        skip("User already exists, skipping test to not mess up the system\n");
+        return;
+    }
+
+    ok(ret == NERR_Success, "Adding user failed with error 0x%08x\n", ret);
+    if(ret != NERR_Success)
+        return;
+
+    ret = pNetUserChangePassword(NULL, sTestUserName, sTestUserOldPass,
+            sTestUserNewPass);
+    todo_wine ok(ret == NERR_Success, "Changing the password failed.\n");
+
+    ret = pNetUserDel(NULL, sTestUserName);
+    todo_wine ok(ret == NERR_Success, "Deleting the user failed.\n");
+}
+
 START_TEST(access)
 {
     HMODULE hnetapi32=LoadLibraryA("netapi32.dll");
@@ -200,6 +250,9 @@ START_TEST(access)
     pNetQueryDisplayInformation=(void*)GetProcAddress(hnetapi32,"NetQueryDisplayInformation");
     pNetUserGetInfo=(void*)GetProcAddress(hnetapi32,"NetUserGetInfo");
     pNetUserModalsGet=(void*)GetProcAddress(hnetapi32,"NetUserModalsGet");
+    pNetUserAdd=(void*)GetProcAddress(hnetapi32, "NetUserAdd");
+    pNetUserChangePassword=(void*)GetProcAddress(hnetapi32, "NetUserChangePassword");
+    pNetUserDel=(void*)GetProcAddress(hnetapi32, "NetUserDel");
 
     if (!pNetApiBufferSize)
         trace("It appears there is no netapi32 functionality on this platform\n");
@@ -208,5 +261,6 @@ START_TEST(access)
         run_usergetinfo_tests();
         run_querydisplayinformation1_tests();
         run_usermodalsget_tests();
+        run_userhandling_tests();
     }
 }
diff --git a/include/lmaccess.h b/include/lmaccess.h
index 41e1826..1c7c37c 100644
--- a/include/lmaccess.h
+++ b/include/lmaccess.h
@@ -440,6 +440,11 @@ typedef struct _LOCALGROUP_USERS_INFO_0 {
     LPWSTR lgrui0_name;
 } LOCALGROUP_USERS_INFO_0, *PLOCALGROUP_USERS_INFO_0, *LPLOCALGROUP_USERS_INFO_0;
 
+#define USER_PRIV_GUEST   0
+#define USER_PRIV_USER    1
+#define USER_PRIV_ADMIN   2
+#define USER_PRIV_MASK    3
+
 #define LOCALGROUP_NAME_PARMNUM         1
 #define LOCALGROUP_COMMENT_PARMNUM      2
 




More information about the wine-cvs mailing list