Compare commits

..

1 Commits

Author SHA1 Message Date
14613088b6
Merge c29899f2b9 into 52833f7fb3 2024-09-05 17:53:48 +00:00
2 changed files with 9 additions and 11 deletions

View File

@ -40,7 +40,6 @@
// wrapper for U16toU8 // wrapper for U16toU8
#define ARRLEN(x) (sizeof(x)/sizeof(*x)) #define ARRLEN(x) (sizeof(x)/sizeof(*x))
#define AUTOU8(x) std::string(x, ARRLEN(x))
#define AUTOU16TOU8(x) U16toU8(x, ARRLEN(x)) #define AUTOU16TOU8(x) U16toU8(x, ARRLEN(x))
// TODO: rewrite U16toU8 & U8toU16 to not use codecvt // TODO: rewrite U16toU8 & U8toU16 to not use codecvt

View File

@ -109,19 +109,18 @@ void CNLoginServer::login(CNSocket* sock, CNPacketData* data) {
std::string userLogin; std::string userLogin;
std::string userPassword; std::string userPassword;
/*
* The std::string -> char* -> std::string maneuver should remove any
* trailing garbage after the null terminator.
*/
if (isCookieAuth) { if (isCookieAuth) {
// username encoded in TEGid raw // username encoded in TEGid raw
userLogin = std::string(AUTOU8((char*)login->szCookie_TEGid).c_str()); userLogin = std::string((char*)login->szCookie_TEGid);
// N.B. clients that use web login without proper cookies // clients that use web login but without proper cookies
// send their passwords in the cookie field // send their passwords instead, so store that
userPassword = std::string(AUTOU8((char*)login->szCookie_authid).c_str()); userPassword = std::string((char*)login->szCookie_authid);
} else { } else {
/*
* The std::string -> char* -> std::string maneuver should remove any
* trailing garbage after the null terminator.
*/
userLogin = std::string(AUTOU16TOU8(login->szID).c_str()); userLogin = std::string(AUTOU16TOU8(login->szID).c_str());
userPassword = std::string(AUTOU16TOU8(login->szPassword).c_str()); userPassword = std::string(AUTOU16TOU8(login->szPassword).c_str());
} }
@ -172,7 +171,7 @@ void CNLoginServer::login(CNSocket* sock, CNPacketData* data) {
} }
if (isCookieAuth) { if (isCookieAuth) {
const char *cookie = userPassword.c_str(); const char *cookie = reinterpret_cast<const char*>(login->szCookie_authid);
if (!Database::checkCookie(findUser.AccountID, cookie)) if (!Database::checkCookie(findUser.AccountID, cookie))
return loginFail(LoginError::ID_AND_PASSWORD_DO_NOT_MATCH, userLogin, sock); return loginFail(LoginError::ID_AND_PASSWORD_DO_NOT_MATCH, userLogin, sock);
} else { } else {