diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-04-15 12:56:09 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-04-15 12:56:46 +0300 |
commit | 555eb0850d0e46aa25de88c15d2f00fbe62385f5 (patch) | |
tree | 305a9ab595692591f4f1be8e633ba2861975c8cc /src/login/parse.c | |
parent | 293793b7027029efc87c8b657a0c45d26e0840c5 (diff) | |
download | evol-hercules-555eb0850d0e46aa25de88c15d2f00fbe62385f5.tar.gz evol-hercules-555eb0850d0e46aa25de88c15d2f00fbe62385f5.tar.bz2 evol-hercules-555eb0850d0e46aa25de88c15d2f00fbe62385f5.tar.xz evol-hercules-555eb0850d0e46aa25de88c15d2f00fbe62385f5.zip |
Add support for change password packet.
Change server version to 6.
Diffstat (limited to 'src/login/parse.c')
-rw-r--r-- | src/login/parse.c | 35 |
1 files changed, 35 insertions, 0 deletions
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); +} |