From 795a5283289473185afdedb3133155101e84b0fe Mon Sep 17 00:00:00 2001 From: rubidium Date: Wed, 19 Jan 2011 16:47:40 +0000 Subject: (svn r21854) -Codechange: refactor the password setting methods to make it possible to change the password of other companies (on the server) --- src/network/network_server.cpp | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) (limited to 'src/network/network_server.cpp') diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 83352f702..fcfd89dde 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1287,10 +1287,7 @@ DEF_GAME_RECEIVE_COMMAND(Server, PACKET_CLIENT_SET_PASSWORD) p->Recv_string(password, sizeof(password)); ci = this->GetInfo(); - if (Company::IsValidID(ci->client_playas)) { - strecpy(_network_company_states[ci->client_playas].password, password, lastof(_network_company_states[ci->client_playas].password)); - NetworkServerUpdateCompanyPassworded(ci->client_playas, !StrEmpty(_network_company_states[ci->client_playas].password)); - } + NetworkServerSetCompanyPassword(ci->client_playas, password); return NETWORK_RECV_STATUS_OKAY; } @@ -1630,23 +1627,21 @@ bool NetworkServerChangeClientName(ClientID client_id, const char *new_name) } /** - * Hash the current company password; used when the server 'company' sets his/her password. - * @param password The password to hash. + * Set/Reset a company password on the server end. + * @param company_id ID of the company the password should be changed for. + * @param password The new password. + * @param already_hashed Is the given password already hashed? */ -void HashCurrentCompanyPassword(const char *password) +void NetworkServerSetCompanyPassword(CompanyID company_id, const char *password, bool already_hashed) { - uint32 password_game_seed; - char password_server_id[NETWORK_SERVER_ID_LENGTH]; - - password_game_seed = _settings_game.game_creation.generation_seed; - strecpy(password_server_id, _settings_client.network.network_id, lastof(password_server_id)); + if (!Company::IsValidHumanID(company_id)) return; - const char *new_pw = GenerateCompanyPasswordHash(password, password_server_id, password_game_seed); - strecpy(_network_company_states[_local_company].password, new_pw, lastof(_network_company_states[_local_company].password)); - - if (_network_server) { - NetworkServerUpdateCompanyPassworded(_local_company, !StrEmpty(_network_company_states[_local_company].password)); + if (!already_hashed) { + password = GenerateCompanyPasswordHash(password, _settings_client.network.network_id, _settings_game.game_creation.generation_seed); } + + strecpy(_network_company_states[company_id].password, password, lastof(_network_company_states[company_id].password)); + NetworkServerUpdateCompanyPassworded(company_id, !StrEmpty(_network_company_states[company_id].password)); } /* Handle the local command-queue */ -- cgit v1.2.3-54-g00ecf