1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-27 16:54:52 +01:00

Add option to only allow known keys to login

This commit is contained in:
Michał Janiszewski
2016-05-26 16:11:50 +02:00
parent b8661fb389
commit 80a90624b9
7 changed files with 40 additions and 7 deletions

View File

@@ -2110,6 +2110,10 @@ void Network::Client_Handle_AUTH(NetworkConnection& connection, NetworkPacket& p
case NETWORK_AUTH_REQUIREPASSWORD:
window_network_status_open_password();
break;
case NETWORK_AUTH_UNKNOWN_KEY_DISALLOWED:
connection.setLastDisconnectReason(STR_MULTIPLAYER_UNKNOWN_KEY_DISALLOWED);
shutdown(connection.socket, SHUT_RDWR);
break;
}
}
@@ -2156,14 +2160,17 @@ void Network::Server_Handle_AUTH(NetworkConnection& connection, NetworkPacket& p
connection.key.LoadPublic(pubkey_rw);
SDL_RWclose(pubkey_rw);
bool verified = connection.key.Verify(connection.challenge.data(), connection.challenge.size(), signature, sigsize);
const std::string hash = connection.key.PublicKeyHash();
if (verified) {
connection.authstatus = NETWORK_AUTH_VERIFIED;
const std::string hash = connection.key.PublicKeyHash();
log_verbose("Signature verification ok. Hash %s", hash.c_str());
} else {
connection.authstatus = NETWORK_AUTH_VERIFICATIONFAILURE;
log_verbose("Signature verification failed!");
}
if (gConfigNetwork.known_keys_only && key_group_map.find(hash) == key_group_map.end()) {
connection.authstatus = NETWORK_AUTH_UNKNOWN_KEY_DISALLOWED;
}
}
const NetworkGroup * group = GetGroupByID(GetGroupIDByHash(connection.key.PublicKeyHash()));