summaryrefslogtreecommitdiff
path: root/src/client.cpp
diff options
context:
space:
mode:
authorSmallJoker <mk939@ymail.com>2017-09-12 20:26:03 +0200
committerSmallJoker <mk939@ymail.com>2017-09-12 20:26:03 +0200
commit5e141ac920bb4866a377904a7dec608a7e119218 (patch)
treed762502fd8eb4f9092f0a73f274421e31e9c5adf /src/client.cpp
parentee9a442ecc26f2623a1b085344d37636342973eb (diff)
downloadminetest-5e141ac920bb4866a377904a7dec608a7e119218.tar.gz
minetest-5e141ac920bb4866a377904a7dec608a7e119218.tar.bz2
minetest-5e141ac920bb4866a377904a7dec608a7e119218.zip
Network: Fix logging into older worlds with base64 hashes
Diffstat (limited to 'src/client.cpp')
-rw-r--r--src/client.cpp18
1 files changed, 13 insertions, 5 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
}