- std::string checkpwd; // Password hash to check against
- bool has_auth = m_script->getAuth(playername, &checkpwd, NULL);
-
- // If no authentication info exists for user, create it
- if (!has_auth) {
- if (!isSingleplayer() &&
- g_settings->getBool("disallow_empty_password") &&
- std::string(given_password) == "") {
- actionstream << "Server: " << playername
- << " supplied empty password" << std::endl;
- DenyAccess_Legacy(pkt->getPeerId(), L"Empty passwords are "
- L"disallowed. Set a password and try again.");
- return;
- }
- std::string raw_default_password =
- g_settings->get("default_password");
- std::string initial_password =
- translate_password(playername, raw_default_password);
-
- // If default_password is empty, allow any initial password
- if (raw_default_password.length() == 0)
- initial_password = given_password;
-
- m_script->createAuth(playername, initial_password);
- }
-
- has_auth = m_script->getAuth(playername, &checkpwd, NULL);
-
- if (!has_auth) {
- actionstream << "Server: " << playername << " cannot be authenticated"
- << " (auth handler does not work?)" << std::endl;
- DenyAccess_Legacy(pkt->getPeerId(), L"Not allowed to login");
- return;
- }
-
- if (given_password != checkpwd) {
- actionstream << "Server: User " << playername
- << " at " << addr_s
- << " supplied wrong password (auth mechanism: legacy)."
- << std::endl;
- DenyAccess_Legacy(pkt->getPeerId(), L"Wrong password");
- return;
- }
-
- RemotePlayer *player =
- static_cast<RemotePlayer*>(m_env->getPlayer(playername));
-
- if (player && player->peer_id != 0) {
- actionstream << "Server: " << playername << ": Failed to emerge player"
- << " (player allocated to an another client)" << std::endl;
- DenyAccess_Legacy(pkt->getPeerId(), L"Another client is connected with this "
- L"name. If your client closed unexpectedly, try again in "
- L"a minute.");
- }
-
- m_clients.setPlayerName(pkt->getPeerId(), playername);
-
- /*
- Answer with a TOCLIENT_INIT
- */
-
- NetworkPacket resp_pkt(TOCLIENT_INIT_LEGACY, 1 + 6 + 8 + 4,
- pkt->getPeerId());
-
- resp_pkt << (u8) deployed << (v3s16) floatToInt(v3f(0,0,0), BS)
- << (u64) m_env->getServerMap().getSeed()
- << g_settings->getFloat("dedicated_server_step");
-
- Send(&resp_pkt);
- m_clients.event(pkt->getPeerId(), CSE_InitLegacy);
-}
-
-void Server::handleCommand_Init2(NetworkPacket* pkt)
-{
- verbosestream << "Server: Got TOSERVER_INIT2 from "
- << pkt->getPeerId() << std::endl;
-
- m_clients.event(pkt->getPeerId(), CSE_GotInit2);
- u16 protocol_version = m_clients.getProtocolVersion(pkt->getPeerId());
-
-
- ///// begin compatibility code
- PlayerSAO* playersao = NULL;
- if (protocol_version <= 22) {
- playersao = StageTwoClientInit(pkt->getPeerId());
-
- if (playersao == NULL) {
- actionstream
- << "TOSERVER_INIT2 stage 2 client init failed for peer "
- << pkt->getPeerId() << std::endl;
- return;
- }
- }
- ///// end compatibility code
-
- /*
- Send some initialization data
- */
-
- infostream << "Server: Sending content to "
- << getPlayerName(pkt->getPeerId()) << std::endl;