fixed env.sqlite not saving bug
parent
b384d9226f
commit
6b633307de
|
@ -121,7 +121,7 @@ AuthManager::AuthManager(Database* database, const std::string& authfilepath):
|
||||||
{
|
{
|
||||||
m_mutex.Init();
|
m_mutex.Init();
|
||||||
|
|
||||||
if(m_database!=NULL)init(database);
|
if(m_database!=NULL)init();
|
||||||
}
|
}
|
||||||
|
|
||||||
AuthManager::~AuthManager()
|
AuthManager::~AuthManager()
|
||||||
|
@ -131,11 +131,13 @@ AuthManager::~AuthManager()
|
||||||
|
|
||||||
void AuthManager::init(Database* database, const std::string& authfilepath)
|
void AuthManager::init(Database* database, const std::string& authfilepath)
|
||||||
{
|
{
|
||||||
|
JMutexAutoLock lock(m_mutex);
|
||||||
|
|
||||||
if(database!=NULL) m_database = database;
|
if(database!=NULL) m_database = database;
|
||||||
if(authfilepath!="") m_authfilepath = authfilepath;
|
if(authfilepath!="") m_authfilepath = authfilepath;
|
||||||
assert(m_database!=NULL);
|
assert(m_database!=NULL);
|
||||||
|
|
||||||
m_authtable = &database->getTable<std::string,std::string>("auth");
|
m_authtable = &m_database->getTable<std::string,std::string>("auth");
|
||||||
|
|
||||||
try{
|
try{
|
||||||
load();
|
load();
|
||||||
|
|
|
@ -90,7 +90,7 @@ class AuthManager
|
||||||
public:
|
public:
|
||||||
AuthManager(Database* database = NULL, const std::string& file = "");
|
AuthManager(Database* database = NULL, const std::string& file = "");
|
||||||
~AuthManager();
|
~AuthManager();
|
||||||
void init(Database* database, const std::string& file = "");
|
void init(Database* database = NULL, const std::string& file = "");
|
||||||
void load();
|
void load();
|
||||||
void save();
|
void save();
|
||||||
bool exists(const std::string &username);
|
bool exists(const std::string &username);
|
||||||
|
|
|
@ -44,11 +44,13 @@ BanManager::~BanManager()
|
||||||
|
|
||||||
void BanManager::init(Database* database, const std::string& file)
|
void BanManager::init(Database* database, const std::string& file)
|
||||||
{
|
{
|
||||||
|
JMutexAutoLock lock(m_mutex);
|
||||||
|
|
||||||
if(database!=NULL)m_database = database;
|
if(database!=NULL)m_database = database;
|
||||||
if(file!="")m_banfilepath = file;
|
if(file!="")m_banfilepath = file;
|
||||||
assert(m_database != NULL);
|
assert(m_database != NULL);
|
||||||
|
|
||||||
m_bantable = &database->getTable<std::string,std::string>("ipban");
|
m_bantable = &m_database->getTable<std::string,std::string>("ipban");
|
||||||
|
|
||||||
try{
|
try{
|
||||||
load();
|
load();
|
||||||
|
|
|
@ -327,6 +327,8 @@ ServerEnvironment::~ServerEnvironment()
|
||||||
i = m_abms.begin(); i != m_abms.end(); i++){
|
i = m_abms.begin(); i != m_abms.end(); i++){
|
||||||
delete i->abm;
|
delete i->abm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete m_database;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerEnvironment::serializePlayers()
|
void ServerEnvironment::serializePlayers()
|
||||||
|
|
|
@ -940,8 +940,8 @@ Server::Server(
|
||||||
m_env = new ServerEnvironment(new ServerMap(mapsavedir, this), m_lua,
|
m_env = new ServerEnvironment(new ServerMap(mapsavedir, this), m_lua,
|
||||||
this, this, mapsavedir);
|
this, this, mapsavedir);
|
||||||
|
|
||||||
m_authmanager.init(m_env->getDatabase(),m_mapsavedir+DIR_DELIM"auth.txt");
|
m_authmanager = new AuthManager(m_env->getDatabase(),m_mapsavedir+DIR_DELIM"auth.txt");
|
||||||
m_banmanager.init(m_env->getDatabase(),m_mapsavedir+DIR_DELIM"ipban.txt");
|
m_banmanager = new BanManager(m_env->getDatabase(),m_mapsavedir+DIR_DELIM"ipban.txt");
|
||||||
|
|
||||||
// Give environment reference to scripting api
|
// Give environment reference to scripting api
|
||||||
scriptapi_add_environment(m_lua, m_env);
|
scriptapi_add_environment(m_lua, m_env);
|
||||||
|
@ -1040,6 +1040,8 @@ Server::~Server()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete Environment
|
// Delete Environment
|
||||||
|
delete m_banmanager;
|
||||||
|
delete m_authmanager;
|
||||||
delete m_env;
|
delete m_env;
|
||||||
|
|
||||||
delete m_itemdef;
|
delete m_itemdef;
|
||||||
|
@ -1792,12 +1794,12 @@ void Server::AsyncRunStep()
|
||||||
ScopeProfiler sp(g_profiler, "Server: saving stuff");
|
ScopeProfiler sp(g_profiler, "Server: saving stuff");
|
||||||
|
|
||||||
// Auth stuff
|
// Auth stuff
|
||||||
if(m_authmanager.isModified())
|
if(m_authmanager->isModified())
|
||||||
m_authmanager.save();
|
m_authmanager->save();
|
||||||
|
|
||||||
//Bann stuff
|
//Bann stuff
|
||||||
if(m_banmanager.isModified())
|
if(m_banmanager->isModified())
|
||||||
m_banmanager.save();
|
m_banmanager->save();
|
||||||
|
|
||||||
// Map
|
// Map
|
||||||
JMutexAutoLock lock(m_env_mutex);
|
JMutexAutoLock lock(m_env_mutex);
|
||||||
|
@ -1866,10 +1868,10 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
||||||
Address address = m_con.GetPeerAddress(peer_id);
|
Address address = m_con.GetPeerAddress(peer_id);
|
||||||
|
|
||||||
// drop player if is ip is banned
|
// drop player if is ip is banned
|
||||||
if(m_banmanager.isIpBanned(address.serializeString())){
|
if(m_banmanager->isIpBanned(address.serializeString())){
|
||||||
SendAccessDenied(m_con, peer_id,
|
SendAccessDenied(m_con, peer_id,
|
||||||
L"Your ip is banned. Banned name was "
|
L"Your ip is banned. Banned name was "
|
||||||
+narrow_to_wide(m_banmanager.getBanName(
|
+narrow_to_wide(m_banmanager->getBanName(
|
||||||
address.serializeString())));
|
address.serializeString())));
|
||||||
m_con.DeletePeer(peer_id);
|
m_con.DeletePeer(peer_id);
|
||||||
return;
|
return;
|
||||||
|
@ -2015,7 +2017,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add player to auth manager
|
// Add player to auth manager
|
||||||
if(m_authmanager.exists(playername) == false)
|
if(m_authmanager->exists(playername) == false)
|
||||||
{
|
{
|
||||||
std::wstring default_password =
|
std::wstring default_password =
|
||||||
narrow_to_wide(g_settings->get("default_password"));
|
narrow_to_wide(g_settings->get("default_password"));
|
||||||
|
@ -2028,14 +2030,14 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
||||||
|
|
||||||
infostream<<"Server: adding player "<<playername
|
infostream<<"Server: adding player "<<playername
|
||||||
<<" to auth manager"<<std::endl;
|
<<" to auth manager"<<std::endl;
|
||||||
m_authmanager.add(playername);
|
m_authmanager->add(playername);
|
||||||
m_authmanager.setPassword(playername, translated_default_password);
|
m_authmanager->setPassword(playername, translated_default_password);
|
||||||
m_authmanager.setPrivs(playername,
|
m_authmanager->setPrivs(playername,
|
||||||
stringToPrivs(g_settings->get("default_privs")));
|
stringToPrivs(g_settings->get("default_privs")));
|
||||||
m_authmanager.save();
|
m_authmanager->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string checkpwd = m_authmanager.getPassword(playername);
|
std::string checkpwd = m_authmanager->getPassword(playername);
|
||||||
|
|
||||||
/*infostream<<"Server: Client gave password '"<<password
|
/*infostream<<"Server: Client gave password '"<<password
|
||||||
<<"', the correct one is '"<<checkpwd<<"'"<<std::endl;*/
|
<<"', the correct one is '"<<checkpwd<<"'"<<std::endl;*/
|
||||||
|
@ -2052,7 +2054,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
||||||
// Enforce user limit.
|
// Enforce user limit.
|
||||||
// Don't enforce for users that have some admin right
|
// Don't enforce for users that have some admin right
|
||||||
if(m_clients.size() >= g_settings->getU16("max_users") &&
|
if(m_clients.size() >= g_settings->getU16("max_users") &&
|
||||||
(m_authmanager.getPrivs(playername)
|
(m_authmanager->getPrivs(playername)
|
||||||
& (PRIV_SERVER|PRIV_BAN|PRIV_PRIVS|PRIV_PASSWORD)) == 0 &&
|
& (PRIV_SERVER|PRIV_BAN|PRIV_PRIVS|PRIV_PASSWORD)) == 0 &&
|
||||||
playername != g_settings->get("name"))
|
playername != g_settings->get("name"))
|
||||||
{
|
{
|
||||||
|
@ -2720,7 +2722,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
||||||
|
|
||||||
std::string playername = player->getName();
|
std::string playername = player->getName();
|
||||||
|
|
||||||
if(m_authmanager.exists(playername) == false)
|
if(m_authmanager->exists(playername) == false)
|
||||||
{
|
{
|
||||||
infostream<<"Server: playername not found in authmanager"<<std::endl;
|
infostream<<"Server: playername not found in authmanager"<<std::endl;
|
||||||
// Wrong old password supplied!!
|
// Wrong old password supplied!!
|
||||||
|
@ -2728,7 +2730,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string checkpwd = m_authmanager.getPassword(playername);
|
std::string checkpwd = m_authmanager->getPassword(playername);
|
||||||
|
|
||||||
if(oldpwd != checkpwd)
|
if(oldpwd != checkpwd)
|
||||||
{
|
{
|
||||||
|
@ -2740,7 +2742,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
||||||
|
|
||||||
actionstream<<player->getName()<<" changes password"<<std::endl;
|
actionstream<<player->getName()<<" changes password"<<std::endl;
|
||||||
|
|
||||||
m_authmanager.setPassword(playername, newpwd);
|
m_authmanager->setPassword(playername, newpwd);
|
||||||
|
|
||||||
infostream<<"Server: password change successful for "<<playername
|
infostream<<"Server: password change successful for "<<playername
|
||||||
<<std::endl;
|
<<std::endl;
|
||||||
|
@ -4089,17 +4091,17 @@ std::wstring Server::getStatusString()
|
||||||
void Server::setPlayerPassword(const std::string &name, const std::wstring &password)
|
void Server::setPlayerPassword(const std::string &name, const std::wstring &password)
|
||||||
{
|
{
|
||||||
// Add player to auth manager
|
// Add player to auth manager
|
||||||
if(m_authmanager.exists(name) == false)
|
if(m_authmanager->exists(name) == false)
|
||||||
{
|
{
|
||||||
infostream<<"Server: adding player "<<name
|
infostream<<"Server: adding player "<<name
|
||||||
<<" to auth manager"<<std::endl;
|
<<" to auth manager"<<std::endl;
|
||||||
m_authmanager.add(name);
|
m_authmanager->add(name);
|
||||||
m_authmanager.setPrivs(name,
|
m_authmanager->setPrivs(name,
|
||||||
stringToPrivs(g_settings->get("default_privs")));
|
stringToPrivs(g_settings->get("default_privs")));
|
||||||
}
|
}
|
||||||
// Change password and save
|
// Change password and save
|
||||||
m_authmanager.setPassword(name, translatePassword(name, password));
|
m_authmanager->setPassword(name, translatePassword(name, password));
|
||||||
m_authmanager.save();
|
m_authmanager->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Saves g_settings to configpath given at initialization
|
// Saves g_settings to configpath given at initialization
|
||||||
|
|
14
src/server.h
14
src/server.h
|
@ -454,7 +454,7 @@ public:
|
||||||
u64 getPlayerAuthPrivs(const std::string &name)
|
u64 getPlayerAuthPrivs(const std::string &name)
|
||||||
{
|
{
|
||||||
try{
|
try{
|
||||||
return m_authmanager.getPrivs(name);
|
return m_authmanager->getPrivs(name);
|
||||||
}
|
}
|
||||||
catch(AuthNotFoundException &e)
|
catch(AuthNotFoundException &e)
|
||||||
{
|
{
|
||||||
|
@ -466,7 +466,7 @@ public:
|
||||||
void setPlayerAuthPrivs(const std::string &name, u64 privs)
|
void setPlayerAuthPrivs(const std::string &name, u64 privs)
|
||||||
{
|
{
|
||||||
try{
|
try{
|
||||||
return m_authmanager.setPrivs(name, privs);
|
return m_authmanager->setPrivs(name, privs);
|
||||||
}
|
}
|
||||||
catch(AuthNotFoundException &e)
|
catch(AuthNotFoundException &e)
|
||||||
{
|
{
|
||||||
|
@ -483,19 +483,19 @@ public:
|
||||||
|
|
||||||
void setIpBanned(const std::string &ip, const std::string &name)
|
void setIpBanned(const std::string &ip, const std::string &name)
|
||||||
{
|
{
|
||||||
m_banmanager.add(ip, name);
|
m_banmanager->add(ip, name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void unsetIpBanned(const std::string &ip_or_name)
|
void unsetIpBanned(const std::string &ip_or_name)
|
||||||
{
|
{
|
||||||
m_banmanager.remove(ip_or_name);
|
m_banmanager->remove(ip_or_name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string getBanDescription(const std::string &ip_or_name)
|
std::string getBanDescription(const std::string &ip_or_name)
|
||||||
{
|
{
|
||||||
return m_banmanager.getBanDescription(ip_or_name);
|
return m_banmanager->getBanDescription(ip_or_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
Address getPeerAddress(u16 peer_id)
|
Address getPeerAddress(u16 peer_id)
|
||||||
|
@ -651,10 +651,10 @@ private:
|
||||||
core::map<u16, RemoteClient*> m_clients;
|
core::map<u16, RemoteClient*> m_clients;
|
||||||
|
|
||||||
// User authentication
|
// User authentication
|
||||||
AuthManager m_authmanager;
|
AuthManager* m_authmanager;
|
||||||
|
|
||||||
// Bann checking
|
// Bann checking
|
||||||
BanManager m_banmanager;
|
BanManager* m_banmanager;
|
||||||
|
|
||||||
// Scripting
|
// Scripting
|
||||||
// Envlock and conlock should be locked when using Lua
|
// Envlock and conlock should be locked when using Lua
|
||||||
|
|
Loading…
Reference in New Issue