diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp index c8771bf0ea..9b8502aade 100644 --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -639,6 +639,11 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::Receive_ADMIN_JOIN(Packet &p) { if (this->status != ADMIN_STATUS_INACTIVE) return this->SendError(NETWORK_ERROR_NOT_EXPECTED); + if (!_settings_client.network.allow_insecure_admin_login) { + /* You're not authorized to login using this method. */ + return this->SendError(NETWORK_ERROR_NOT_AUTHORIZED); + } + std::string password = p.Recv_string(NETWORK_PASSWORD_LENGTH); if (_settings_client.network.admin_password.empty() || diff --git a/src/settings_type.h b/src/settings_type.h index 618c497a50..ae6f22c42e 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -324,6 +324,7 @@ struct NetworkSettings { NetworkAuthorizedKeys server_authorized_keys; ///< Public keys of clients that are authorized to connect to the game. std::string rcon_password; ///< password for rconsole (server side) NetworkAuthorizedKeys rcon_authorized_keys; ///< Public keys of clients that are authorized to use the rconsole (server side). + bool allow_insecure_admin_login; ///< Whether to allow logging in as admin using the insecure old JOIN packet. std::string admin_password; ///< password for the admin network NetworkAuthorizedKeys admin_authorized_keys; ///< Public keys of clients that are authorized to use the admin network. std::string client_name; ///< name of the player (as client) diff --git a/src/table/settings/network_settings.ini b/src/table/settings/network_settings.ini index 12afbd534e..8514492843 100644 --- a/src/table/settings/network_settings.ini +++ b/src/table/settings/network_settings.ini @@ -177,6 +177,12 @@ flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY def = true cat = SC_EXPERT +[SDTC_BOOL] +var = network.allow_insecure_admin_login +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY +def = false +cat = SC_EXPERT + [SDTC_OMANY] var = network.server_game_type type = SLE_UINT8