From 555eb0850d0e46aa25de88c15d2f00fbe62385f5 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 15 Apr 2015 12:56:09 +0300 Subject: Add support for change password packet. Change server version to 6. --- src/login/parse.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'src/login/parse.c') diff --git a/src/login/parse.c b/src/login/parse.c index f2e2592..53fa28f 100644 --- a/src/login/parse.c +++ b/src/login/parse.c @@ -16,6 +16,7 @@ #include "common/ip.h" #include "login/config.h" +#include "login/md5calc.h" #include "login/parse.h" #include "login/send.h" @@ -173,3 +174,37 @@ void elogin_parse_ping(int *fd, struct login_session_data* sd) } hookStop(); } + +void elogin_parse_change_paassword(int fd) +{ + char actual_pass[24], new_pass[24]; + int status = 0; + struct mmo_account acc; + const int accountId = RFIFOL (fd, 2); + + memcpy (actual_pass, RFIFOP (fd, 6), 24); + actual_pass[23] = '\0'; + memcpy (new_pass, RFIFOP (fd, 30), 24); + new_pass[23] = '\0'; + + if (!login->accounts->load_num(login->accounts, &acc, accountId)) + { + // account not found + send_char_password_change_ack(fd, accountId, 0); + return; + } + + if (!strcmp(actual_pass, acc.pass) || pass_ok(actual_pass, acc.pass)) + { + // changed ok + status = 1; + safestrncpy(acc.pass, new_pass, sizeof(acc.pass)); + login->accounts->save(login->accounts, &acc); + } + else + { + // wrong password + status = 2; + } + send_char_password_change_ack(fd, accountId, status); +} -- cgit v1.2.3-70-g09d2