mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 10:08:18 +00:00
Fix some issues
This commit is contained in:
parent
ed5824589c
commit
3a22a4b62d
|
@ -12,10 +12,18 @@ CAuthManager::CAuthManager()
|
||||||
m_aDefault[0] = -1;
|
m_aDefault[0] = -1;
|
||||||
m_aDefault[1] = -1;
|
m_aDefault[1] = -1;
|
||||||
m_aDefault[2] = -1;
|
m_aDefault[2] = -1;
|
||||||
|
m_Generated = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAuthManager::Init()
|
void CAuthManager::Init()
|
||||||
{
|
{
|
||||||
|
if(m_aKeys.size() == 0 && !g_Config.m_SvRconPassword[0])
|
||||||
|
{
|
||||||
|
secure_random_password(g_Config.m_SvRconPassword, sizeof(g_Config.m_SvRconPassword), 6);
|
||||||
|
m_Generated = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if(g_Config.m_SvRconPassword[0])
|
if(g_Config.m_SvRconPassword[0])
|
||||||
AddAdminKey(g_Config.m_SvRconPassword);
|
AddAdminKey(g_Config.m_SvRconPassword);
|
||||||
if(g_Config.m_SvRconModPassword[0])
|
if(g_Config.m_SvRconModPassword[0])
|
||||||
|
@ -69,8 +77,7 @@ int CAuthManager::FindKey(const char *pIdent)
|
||||||
|
|
||||||
bool CAuthManager::CheckKey(int Slot, const char *pPw)
|
bool CAuthManager::CheckKey(int Slot, const char *pPw)
|
||||||
{
|
{
|
||||||
if(Slot < 0 || Slot > m_aKeys.size())
|
dbg_assert(Slot < 0 || Slot > m_aKeys.size(), "indice out of bounds");
|
||||||
return false;
|
|
||||||
|
|
||||||
md5_state_t ctx;
|
md5_state_t ctx;
|
||||||
unsigned char aHash[MD5_BYTES];
|
unsigned char aHash[MD5_BYTES];
|
||||||
|
@ -86,32 +93,25 @@ bool CAuthManager::CheckKey(int Slot, const char *pPw)
|
||||||
|
|
||||||
int CAuthManager::DefaultKey(int AuthLevel)
|
int CAuthManager::DefaultKey(int AuthLevel)
|
||||||
{
|
{
|
||||||
if(AuthLevel < 0 || AuthLevel > AUTHED_ADMIN)
|
dbg_assert(AuthLevel < 0 || AuthLevel > AUTHED_ADMIN, "auth level invalid");
|
||||||
return -1;
|
|
||||||
|
|
||||||
return m_aDefault[AUTHED_ADMIN - AuthLevel];
|
return m_aDefault[AUTHED_ADMIN - AuthLevel];
|
||||||
}
|
}
|
||||||
|
|
||||||
int CAuthManager::KeyLevel(int Slot)
|
int CAuthManager::KeyLevel(int Slot)
|
||||||
{
|
{
|
||||||
if(Slot < 0 || Slot > m_aKeys.size())
|
dbg_assert(Slot < 0 || Slot > m_aKeys.size(), "indice out of bounds");
|
||||||
return AUTHED_NO;
|
|
||||||
|
|
||||||
return m_aKeys[Slot].m_Level;
|
return m_aKeys[Slot].m_Level;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *CAuthManager::KeyIdent(int Slot)
|
const char *CAuthManager::KeyIdent(int Slot)
|
||||||
{
|
{
|
||||||
if(Slot < 0 || Slot > m_aKeys.size())
|
dbg_assert(Slot < 0 || Slot > m_aKeys.size(), "indice out of bounds");
|
||||||
return 0;
|
|
||||||
|
|
||||||
return m_aKeys[Slot].m_aIdent;
|
return m_aKeys[Slot].m_aIdent;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAuthManager::UpdateKeyHash(int Slot, const unsigned char *pHash, const unsigned char *pSalt, int AuthLevel)
|
void CAuthManager::UpdateKeyHash(int Slot, const unsigned char *pHash, const unsigned char *pSalt, int AuthLevel)
|
||||||
{
|
{
|
||||||
if(Slot < 0 || Slot > m_aKeys.size())
|
dbg_assert(Slot < 0 || Slot > m_aKeys.size(), "indice out of bounds");
|
||||||
return;
|
|
||||||
|
|
||||||
CKey *pKey = &m_aKeys[Slot];
|
CKey *pKey = &m_aKeys[Slot];
|
||||||
mem_copy(pKey->m_aPw, pHash, MD5_BYTES);
|
mem_copy(pKey->m_aPw, pHash, MD5_BYTES);
|
||||||
|
@ -121,8 +121,7 @@ void CAuthManager::UpdateKeyHash(int Slot, const unsigned char *pHash, const uns
|
||||||
|
|
||||||
void CAuthManager::UpdateKey(int Slot, const char *pPw, int AuthLevel)
|
void CAuthManager::UpdateKey(int Slot, const char *pPw, int AuthLevel)
|
||||||
{
|
{
|
||||||
if(Slot < 0 || Slot > m_aKeys.size())
|
dbg_assert(Slot < 0 || Slot > m_aKeys.size(), "indice out of bounds");
|
||||||
return;
|
|
||||||
|
|
||||||
md5_state_t ctx;
|
md5_state_t ctx;
|
||||||
unsigned char aHash[MD5_BYTES];
|
unsigned char aHash[MD5_BYTES];
|
||||||
|
@ -160,3 +159,8 @@ void CAuthManager::AddHelperKey(const char *pPw)
|
||||||
{
|
{
|
||||||
m_aDefault[2] = AddKey(HELPER_IDENT, pPw, AUTHED_HELPER);
|
m_aDefault[2] = AddKey(HELPER_IDENT, pPw, AUTHED_HELPER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CAuthManager::IsGenerated()
|
||||||
|
{
|
||||||
|
return m_Generated;
|
||||||
|
}
|
|
@ -25,6 +25,7 @@ private:
|
||||||
array<CKey> m_aKeys;
|
array<CKey> m_aKeys;
|
||||||
|
|
||||||
int m_aDefault[3];
|
int m_aDefault[3];
|
||||||
|
bool m_Generated;
|
||||||
public:
|
public:
|
||||||
typedef void (*FListCallback)(const char *pIdent, int Level, void *pUser);
|
typedef void (*FListCallback)(const char *pIdent, int Level, void *pUser);
|
||||||
|
|
||||||
|
@ -45,6 +46,7 @@ public:
|
||||||
void AddAdminKey(const char *pPw);
|
void AddAdminKey(const char *pPw);
|
||||||
void AddModKey(const char *pPw);
|
void AddModKey(const char *pPw);
|
||||||
void AddHelperKey(const char *pPw);
|
void AddHelperKey(const char *pPw);
|
||||||
|
bool IsGenerated();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //ENGINE_SERVER_AUTH_MANAGER_H
|
#endif //ENGINE_SERVER_AUTH_MANAGER_H
|
||||||
|
|
|
@ -554,17 +554,6 @@ int CServer::MaxClients() const
|
||||||
return m_NetServer.MaxClients();
|
return m_NetServer.MaxClients();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CServer::InitRconPasswordIfEmpty()
|
|
||||||
{
|
|
||||||
if(g_Config.m_SvRconPassword[0])
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
secure_random_password(g_Config.m_SvRconPassword, sizeof(g_Config.m_SvRconPassword), 6);
|
|
||||||
m_GeneratedRconPassword = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int CServer::SendMsg(CMsgPacker *pMsg, int Flags, int ClientID)
|
int CServer::SendMsg(CMsgPacker *pMsg, int Flags, int ClientID)
|
||||||
{
|
{
|
||||||
return SendMsgEx(pMsg, Flags, ClientID, false);
|
return SendMsgEx(pMsg, Flags, ClientID, false);
|
||||||
|
@ -1195,7 +1184,7 @@ void CServer::ProcessClientPacket(CNetChunk *pPacket)
|
||||||
{
|
{
|
||||||
const char *pName = Unpacker.GetString(CUnpacker::SANITIZE_CC); // login name, now used
|
const char *pName = Unpacker.GetString(CUnpacker::SANITIZE_CC); // login name, now used
|
||||||
const char *pPw = Unpacker.GetString(CUnpacker::SANITIZE_CC);
|
const char *pPw = Unpacker.GetString(CUnpacker::SANITIZE_CC);
|
||||||
if(!str_utf8_check(pPw))
|
if(!str_utf8_check(pPw) || !str_utf8_check(pName))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2423,11 +2412,14 @@ void CServer::ConchainRconPasswordChange(IConsole::IResult *pResult, void *pUser
|
||||||
int KeySlot = pManager->DefaultKey(AUTHED_ADMIN);
|
int KeySlot = pManager->DefaultKey(AUTHED_ADMIN);
|
||||||
if(KeySlot == -1)
|
if(KeySlot == -1)
|
||||||
{
|
{
|
||||||
pManager->AddAdminKey(pResult->GetString(0));//Shouldn't happen
|
pManager->AddAdminKey(pResult->GetString(0));//Shouldn't happen except for the first launch
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pManager->UpdateKey(KeySlot, pResult->GetString(0), AUTHED_ADMIN);
|
if(!pResult->GetString(0)[0])
|
||||||
|
pManager->RemoveKey(KeySlot);
|
||||||
|
else
|
||||||
|
pManager->UpdateKey(KeySlot, pResult->GetString(0), AUTHED_ADMIN);
|
||||||
pServer->LogoutKey(KeySlot, "key update");
|
pServer->LogoutKey(KeySlot, "key update");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2446,7 +2438,10 @@ void CServer::ConchainRconModPasswordChange(IConsole::IResult *pResult, void *pU
|
||||||
pManager->AddModKey(pResult->GetString(0));
|
pManager->AddModKey(pResult->GetString(0));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pManager->UpdateKey(KeySlot, pResult->GetString(0), AUTHED_MOD);
|
if(!pResult->GetString(0)[0])
|
||||||
|
pManager->RemoveKey(KeySlot);
|
||||||
|
else
|
||||||
|
pManager->UpdateKey(KeySlot, pResult->GetString(0), AUTHED_MOD);
|
||||||
pServer->LogoutKey(KeySlot, "key update");
|
pServer->LogoutKey(KeySlot, "key update");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2465,7 +2460,10 @@ void CServer::ConchainRconHelperPasswordChange(IConsole::IResult *pResult, void
|
||||||
pManager->AddHelperKey(pResult->GetString(0));
|
pManager->AddHelperKey(pResult->GetString(0));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pManager->UpdateKey(KeySlot, pResult->GetString(0), AUTHED_HELPER);
|
if(!pResult->GetString(0)[0])
|
||||||
|
pManager->RemoveKey(KeySlot);
|
||||||
|
else
|
||||||
|
pManager->UpdateKey(KeySlot, pResult->GetString(0), AUTHED_HELPER);
|
||||||
pServer->LogoutKey(KeySlot, "key update");
|
pServer->LogoutKey(KeySlot, "key update");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2629,7 +2627,6 @@ int main(int argc, const char **argv) // ignore_convention
|
||||||
pConsole->Register("sv_rescue", "", CFGFLAG_SERVER, CServer::ConRescue, pConsole, "Allow /rescue command so players can teleport themselves out of freeze");
|
pConsole->Register("sv_rescue", "", CFGFLAG_SERVER, CServer::ConRescue, pConsole, "Allow /rescue command so players can teleport themselves out of freeze");
|
||||||
|
|
||||||
pEngine->InitLogfile();
|
pEngine->InitLogfile();
|
||||||
pServer->InitRconPasswordIfEmpty();
|
|
||||||
|
|
||||||
// run the server
|
// run the server
|
||||||
dbg_msg("server", "starting...");
|
dbg_msg("server", "starting...");
|
||||||
|
|
Loading…
Reference in a new issue