diff options
author | SmallJoker <mk939@ymail.com> | 2017-09-12 20:26:03 +0200 |
---|---|---|
committer | SmallJoker <mk939@ymail.com> | 2017-09-12 20:26:03 +0200 |
commit | 5e141ac920bb4866a377904a7dec608a7e119218 (patch) | |
tree | d762502fd8eb4f9092f0a73f274421e31e9c5adf /src/client | |
parent | ee9a442ecc26f2623a1b085344d37636342973eb (diff) | |
download | hax-minetest-server-5e141ac920bb4866a377904a7dec608a7e119218.tar.gz hax-minetest-server-5e141ac920bb4866a377904a7dec608a7e119218.zip |
Network: Fix logging into older worlds with base64 hashes
Diffstat (limited to '')
-rw-r--r-- | src/client.cpp | 18 | ||||
-rw-r--r-- | src/clientiface.cpp | 6 |
2 files changed, 17 insertions, 7 deletions
diff --git a/src/client.cpp b/src/client.cpp index dba7ffcc0..a56e3c974 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -920,10 +920,10 @@ void Client::deleteAuthData() case AUTH_MECHANISM_FIRST_SRP: break; case AUTH_MECHANISM_SRP: + case AUTH_MECHANISM_LEGACY_PASSWORD: srp_user_delete((SRPUser *) m_auth_data); m_auth_data = NULL; break; - case AUTH_MECHANISM_LEGACY_PASSWORD: case AUTH_MECHANISM_NONE: break; } @@ -939,6 +939,9 @@ AuthMechanism Client::choseAuthMech(const u32 mechs) if (mechs & AUTH_MECHANISM_FIRST_SRP) return AUTH_MECHANISM_FIRST_SRP; + if (mechs & AUTH_MECHANISM_LEGACY_PASSWORD) + return AUTH_MECHANISM_LEGACY_PASSWORD; + return AUTH_MECHANISM_NONE; } @@ -974,8 +977,14 @@ void Client::startAuth(AuthMechanism chosen_auth_mechanism) Send(&resp_pkt); break; } - case AUTH_MECHANISM_SRP: { - u8 legacy_based_on = 1; + case AUTH_MECHANISM_SRP: + case AUTH_MECHANISM_LEGACY_PASSWORD: { + u8 based_on = 1; + + if (chosen_auth_mechanism == AUTH_MECHANISM_LEGACY_PASSWORD) { + m_password = translate_password(getPlayerName(), m_password); + based_on = 0; + } std::string playername_u = lowercase(getPlayerName()); m_auth_data = srp_user_new(SRP_SHA256, SRP_NG_2048, @@ -990,11 +999,10 @@ void Client::startAuth(AuthMechanism chosen_auth_mechanism) FATAL_ERROR_IF(res != SRP_OK, "Creating local SRP user failed."); NetworkPacket resp_pkt(TOSERVER_SRP_BYTES_A, 0); - resp_pkt << std::string(bytes_A, len_A) << legacy_based_on; + resp_pkt << std::string(bytes_A, len_A) << based_on; Send(&resp_pkt); break; } - case AUTH_MECHANISM_LEGACY_PASSWORD: case AUTH_MECHANISM_NONE: break; // not handled in this method } diff --git a/src/clientiface.cpp b/src/clientiface.cpp index bb740d9f3..5dadcb788 100644 --- a/src/clientiface.cpp +++ b/src/clientiface.cpp @@ -454,7 +454,8 @@ void RemoteClient::notifyEvent(ClientStateEvent event) { case CSE_AuthAccept: m_state = CS_AwaitingInit2; - if (chosen_mech == AUTH_MECHANISM_SRP) + if (chosen_mech == AUTH_MECHANISM_SRP || + chosen_mech == AUTH_MECHANISM_LEGACY_PASSWORD) srp_verifier_delete((SRPVerifier *) auth_data); chosen_mech = AUTH_MECHANISM_NONE; break; @@ -463,7 +464,8 @@ void RemoteClient::notifyEvent(ClientStateEvent event) break; case CSE_SetDenied: m_state = CS_Denied; - if (chosen_mech == AUTH_MECHANISM_SRP) + if (chosen_mech == AUTH_MECHANISM_SRP || + chosen_mech == AUTH_MECHANISM_LEGACY_PASSWORD) srp_verifier_delete((SRPVerifier *) auth_data); chosen_mech = AUTH_MECHANISM_NONE; break; |