From 1daf9a1e51b394748f55527080bf9520f0ecfbc4 Mon Sep 17 00:00:00 2001 From: Kai Blin Date: Sat, 24 Mar 2007 09:02:04 +0100 Subject: [PATCH] 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 8cc3cadf3ef..ea2ddd8862d 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 4922ed6bd65..e06681eabea 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");