Kai Blin : netapi32: Implement NetUserChangePassword.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Mar 26 08:12:54 CDT 2007


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

Author: Kai Blin <kai.blin at gmail.com>
Date:   Sat Mar 24 09:02:04 2007 +0100

netapi32: Implement NetUserChangePassword.

---

 dlls/netapi32/access.c       |   21 +++++++++++++++++++--
 dlls/netapi32/tests/access.c |   22 +++++++++++++++++++++-
 2 files changed, 40 insertions(+), 3 deletions(-)

diff --git a/dlls/netapi32/access.c b/dlls/netapi32/access.c
index 8cc3cad..ea2ddd8 100644
--- a/dlls/netapi32/access.c
+++ b/dlls/netapi32/access.c
@@ -813,6 +813,23 @@ NET_API_STATUS WINAPI NetUserModalsGet(
 NET_API_STATUS WINAPI NetUserChangePassword(LPCWSTR domainname, LPCWSTR username,
     LPCWSTR oldpassword, LPCWSTR newpassword)
 {
-    FIXME("(%s, %s, ..., ...)\n", debugstr_w(domainname), debugstr_w(username));
-    return NERR_InternalError;
+    struct sam_user *user;
+
+    TRACE("(%s, %s, ..., ...)\n", debugstr_w(domainname), debugstr_w(username));
+
+    if(domainname)
+        FIXME("Ignoring domainname %s.\n", debugstr_w(domainname));
+
+    if((user = NETAPI_FindUser(username)) == NULL)
+        return NERR_UserNotFound;
+
+    if(lstrcmpW(user->user_password, oldpassword) != 0)
+        return ERROR_INVALID_PASSWORD;
+
+    if(lstrlenW(newpassword) > PWLEN)
+        return ERROR_PASSWORD_RESTRICTION;
+
+    lstrcpyW(user->user_password, newpassword);
+
+    return NERR_Success;
 }
diff --git a/dlls/netapi32/tests/access.c b/dlls/netapi32/tests/access.c
index 4922ed6..e06681e 100644
--- a/dlls/netapi32/tests/access.c
+++ b/dlls/netapi32/tests/access.c
@@ -254,9 +254,29 @@ static void run_userhandling_tests(void)
     if(ret != NERR_Success)
         return;
 
+    ret = pNetUserChangePassword(NULL, sNonexistentUser, sTestUserOldPass,
+            sTestUserNewPass);
+    ok(ret == NERR_UserNotFound,
+            "Changing password for nonexistent user returned 0x%08x.\n", ret);
+
+    ret = pNetUserChangePassword(NULL, sTestUserName, sTestUserOldPass,
+            sTestUserOldPass);
+    ok(ret == NERR_Success,
+            "Changing old password to old password returned 0x%08x.\n", ret);
+
+    ret = pNetUserChangePassword(NULL, sTestUserName, sTestUserNewPass,
+            sTestUserOldPass);
+    ok(ret == ERROR_INVALID_PASSWORD,
+            "Trying to change password giving an invalid password returned 0x%08x.\n", ret);
+
+    ret = pNetUserChangePassword(NULL, sTestUserName, sTestUserOldPass,
+            sTooLongPassword);
+    ok(ret == ERROR_PASSWORD_RESTRICTION,
+            "Changing to a password that's too long returned 0x%08x.\n", ret);
+
     ret = pNetUserChangePassword(NULL, sTestUserName, sTestUserOldPass,
             sTestUserNewPass);
-    todo_wine ok(ret == NERR_Success, "Changing the password failed.\n");
+    ok(ret == NERR_Success, "Changing the password correctly returned 0x%08x.\n", ret);
 
     ret = pNetUserDel(NULL, sTestUserName);
     ok(ret == NERR_Success, "Deleting the user failed.\n");




More information about the wine-cvs mailing list