diff options
author | est31 <MTest31@outlook.com> | 2015-07-21 17:57:57 +0200 |
---|---|---|
committer | est31 <MTest31@outlook.com> | 2015-07-21 18:12:28 +0200 |
commit | a57d83b46af03313355d83924cfb53f4987cc48f (patch) | |
tree | 47f8c069940122001767f321ea7a4d96c29be783 /src/network | |
parent | 403e6e6c9cf6be5e16e3f1f9bd7805fe9b3006cd (diff) | |
download | minetest-a57d83b46af03313355d83924cfb53f4987cc48f.tar.gz minetest-a57d83b46af03313355d83924cfb53f4987cc48f.tar.bz2 minetest-a57d83b46af03313355d83924cfb53f4987cc48f.zip |
Ask auth handler to create auth when a default password is set
-> Fix server crash with protocol >=25 if a default password is set.
-> Remove some useless and possibly confusion causing code for the TOCLIENT_FIRST_SRP packet handler
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/serverpackethandler.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 5493dfec1..f756d80ef 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -263,6 +263,8 @@ void Server::handleCommand_Init(NetworkPacket* pkt) // Take care of default passwords. client->enc_pwd = getSRPVerifier(playerName, default_password); auth_mechs |= AUTH_MECHANISM_SRP; + // Create auth, but only on successful login + client->create_player_on_auth_success = true; } } @@ -1858,14 +1860,8 @@ void Server::handleCommand_FirstSrp(NetworkPacket* pkt) } std::string initial_ver_key; - std::string raw_default_password = g_settings->get("default_password"); - // If default_password is empty, allow any initial password - if (raw_default_password.length() == 0) { - initial_ver_key = encodeSRPVerifier(verification_key, salt); - } else { - initial_ver_key = getSRPVerifier(playername, raw_default_password); - } + initial_ver_key = encodeSRPVerifier(verification_key, salt); m_script->createAuth(playername, initial_ver_key); acceptAuth(pkt->getPeerId(), false); @@ -2072,5 +2068,19 @@ void Server::handleCommand_SrpBytesM(NetworkPacket* pkt) } } + if (client->create_player_on_auth_success) { + std::string playername = client->getName(); + m_script->createAuth(playername, client->enc_pwd); + + std::string checkpwd; // not used, but needed for passing something + if (!m_script->getAuth(playername, &checkpwd, NULL)) { + actionstream << "Server: " << playername << " cannot be authenticated" + << " (auth handler does not work?)" << std::endl; + DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_SERVER_FAIL); + return; + } + client->create_player_on_auth_success = false; + } + acceptAuth(pkt->getPeerId(), wantSudo); } |