diff --git a/config.ini b/config.ini index e721dd2..fb7977d 100644 --- a/config.ini +++ b/config.ini @@ -14,6 +14,9 @@ sandbox=true port=23000 # will all custom names be approved instantly? acceptallcustomnames=true +# should attempts to log into non-existent accounts +# automatically create them? +autocreateaccounts=true # how often should everything be flushed to the database? # the default is 4 minutes dbsaveinterval=240 diff --git a/src/servers/CNLoginServer.cpp b/src/servers/CNLoginServer.cpp index 999fb1c..6f216e8 100644 --- a/src/servers/CNLoginServer.cpp +++ b/src/servers/CNLoginServer.cpp @@ -133,8 +133,12 @@ void CNLoginServer::login(CNSocket* sock, CNPacketData* data) { Database::findAccount(&findUser, userLogin); // account was not found - if (findUser.AccountID == 0) - return newAccount(sock, userLogin, userPassword, login->iClientVerC); + if (findUser.AccountID == 0) { + if (settings::AUTOCREATEACCOUNTS) + return newAccount(sock, userLogin, userPassword, login->iClientVerC); + + return loginFail(LoginError::ID_DOESNT_EXIST, userLogin, sock); + } if (!CNLoginServer::isPasswordCorrect(findUser.Password, userPassword)) return loginFail(LoginError::ID_AND_PASSWORD_DO_NOT_MATCH, userLogin, sock); diff --git a/src/settings.cpp b/src/settings.cpp index 2885fbc..3413bea 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -11,6 +11,7 @@ bool settings::SANDBOX = true; int settings::LOGINPORT = 23000; bool settings::APPROVEALLNAMES = true; +bool settings::AUTOCREATEACCOUNTS = true; int settings::DBSAVEINTERVAL = 240; int settings::SHARDPORT = 23001; @@ -76,12 +77,13 @@ void settings::init() { return; } - APPROVEALLNAMES = reader.GetBoolean("", "acceptallcustomnames", APPROVEALLNAMES); VERBOSITY = reader.GetInteger("", "verbosity", VERBOSITY); SANDBOX = reader.GetBoolean("", "sandbox", SANDBOX); LOGINPORT = reader.GetInteger("login", "port", LOGINPORT); - SHARDPORT = reader.GetInteger("shard", "port", SHARDPORT); + APPROVEALLNAMES = reader.GetBoolean("login", "acceptallcustomnames", APPROVEALLNAMES); + AUTOCREATEACCOUNTS = reader.GetBoolean("login", "autocreateaccounts", AUTOCREATEACCOUNTS); DBSAVEINTERVAL = reader.GetInteger("login", "dbsaveinterval", DBSAVEINTERVAL); + SHARDPORT = reader.GetInteger("shard", "port", SHARDPORT); SHARDSERVERIP = reader.Get("shard", "ip", SHARDSERVERIP); LOCALHOSTWORKAROUND = reader.GetBoolean("shard", "localhostworkaround", LOCALHOSTWORKAROUND); TIMEOUT = reader.GetInteger("shard", "timeout", TIMEOUT); diff --git a/src/settings.hpp b/src/settings.hpp index cbbeeb4..e5295c7 100644 --- a/src/settings.hpp +++ b/src/settings.hpp @@ -5,6 +5,7 @@ namespace settings { extern bool SANDBOX; extern int LOGINPORT; extern bool APPROVEALLNAMES; + extern bool AUTOCREATEACCOUNTS; extern int DBSAVEINTERVAL; extern int SHARDPORT; extern std::string SHARDSERVERIP;