summaryrefslogtreecommitdiff
path: root/src/login/parse.c
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-04-15 12:56:09 +0300
committerAndrei Karas <akaras@inbox.ru>2015-04-15 12:56:46 +0300
commit555eb0850d0e46aa25de88c15d2f00fbe62385f5 (patch)
tree305a9ab595692591f4f1be8e633ba2861975c8cc /src/login/parse.c
parent293793b7027029efc87c8b657a0c45d26e0840c5 (diff)
downloadevol-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.c35
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);
+}