diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 7ce7b79a22..169cc557e2 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -730,6 +730,7 @@ DEF_CONSOLE_CMD(ConSettingsAccess) { if (argc == 0) { IConsoleHelp("Enable changing game settings from this client. Usage: 'settings_access '"); + IConsoleHelp("Send an empty password \"\" to drop access"); return true; } diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index b53bf38e9d..fc5251c844 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -459,7 +459,11 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendCompanyPassword(const char NetworkRecvStatus ClientNetworkGameSocketHandler::SendSettingsPassword(const char *password) { Packet *p = new Packet(PACKET_CLIENT_SETTINGS_PASSWORD); - p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _settings_password_game_seed)); + if (StrEmpty(password)) { + p->Send_string(""); + } else { + p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _settings_password_game_seed)); + } my_client->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; } diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 474e19f194..bd78225da9 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1055,7 +1055,10 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_SETTINGS_PASSWO p->Recv_string(password, sizeof(password)); /* Check settings password. Deny if no password is set */ - if (StrEmpty(_settings_client.network.settings_password) || + if (StrEmpty(password)) { + if (this->settings_authed) DEBUG(net, 0, "[settings-ctrl] client-id %d deauthed", this->client_id); + this->settings_authed = false; + } else if (StrEmpty(_settings_client.network.settings_password) || strcmp(password, GenerateCompanyPasswordHash(_settings_client.network.settings_password, _settings_client.network.network_id, _settings_game.game_creation.generation_seed ^ this->settings_hash_bits)) != 0) { DEBUG(net, 0, "[settings-ctrl] wrong password from client-id %d", this->client_id); this->settings_authed = false;