X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Fsilcd%2Fcommand_reply.c;h=97aedf0e8e37455267c4818136418a9c24510b9f;hb=52e57c880aba9c5e89f59d962eb9af75670b76e0;hp=d2d8ec3cb8cbba90e877a618d7ca5cf9323c84e6;hpb=cbc144f6d31ef9d08feb0c8d1b938519f5d450e0;p=silc.git diff --git a/apps/silcd/command_reply.c b/apps/silcd/command_reply.c index d2d8ec3c..97aedf0e 100644 --- a/apps/silcd/command_reply.c +++ b/apps/silcd/command_reply.c @@ -150,11 +150,6 @@ silc_server_command_process_error(SilcServerCommandReplyContext cmd, if (!client) return; - if (client->data.public_key) - silc_hash_table_del_by_context(server->pk_hash, - client->data.public_key, - client); - silc_server_remove_from_channels(server, NULL, client, TRUE, NULL, TRUE, FALSE); silc_idlist_del_data(client); @@ -266,9 +261,10 @@ silc_server_command_reply_whois_save(SilcServerCommandReplyContext cmd) return FALSE; } - /* Remove the old cache entry */ - silc_idcache_del_by_context(global ? server->global_list->clients : - server->local_list->clients, client, NULL); + /* Update entry */ + silc_idcache_update_by_context(global ? server->global_list->clients : + server->local_list->clients, client, NULL, + nickname, TRUE); silc_free(client->nickname); silc_free(client->username); @@ -282,11 +278,6 @@ silc_server_command_reply_whois_save(SilcServerCommandReplyContext cmd) client->mode = mode; client->data.status |= SILC_IDLIST_STATUS_RESOLVED; client->data.status &= ~SILC_IDLIST_STATUS_RESOLVING; - - /* Create new cache entry */ - silc_idcache_add(global ? server->global_list->clients : - server->local_list->clients, nickname, client->id, - client); } /* Save channel list if it was sent to us */ @@ -360,12 +351,12 @@ silc_server_command_reply_whois_save(SilcServerCommandReplyContext cmd) SILC_LOG_DEBUG(("Saved client public key from attributes")); - /* Add to public key hash table */ - if (!silc_hash_table_find_by_context(server->pk_hash, - client->data.public_key, - client, NULL)) - silc_hash_table_add(server->pk_hash, - client->data.public_key, client); + /* Add client's public key to repository */ + if (!silc_server_get_public_key_by_client(server, client, NULL)) + silc_skr_add_public_key_simple(server->repository, + client->data.public_key, + SILC_SKR_USAGE_IDENTIFICATION, + client, NULL); silc_free(pk.type); silc_free(pk.data); @@ -551,6 +542,15 @@ silc_server_command_reply_whowas_save(SilcServerCommandReplyContext cmd) client); } + /* If client is global and is not on any channel then add that we'll + expire the entry after a while. */ + if (global) { + silc_idlist_find_client_by_id(server->global_list, client->id, + FALSE, &cache); + if (!silc_hash_table_count(client->channels)) + silc_dlist_add(server->expired_clients, client); + } + return TRUE; } @@ -1199,7 +1199,8 @@ SILC_SERVER_CMD_REPLY_FUNC(join) silc_hmac_free(hmac); silc_server_command_reply_free(cmd); - silc_pkcs_public_key_free(founder_key); + if (founder_key) + silc_pkcs_public_key_free(founder_key); if (client_id_list) silc_buffer_free(client_id_list); if (client_mode_list) @@ -1383,10 +1384,12 @@ SILC_SERVER_CMD_REPLY_FUNC(getkey) } if (!client->data.public_key) { - if (!silc_hash_table_find_by_context(server->pk_hash, public_key, - client, NULL)) - silc_hash_table_add(server->pk_hash, public_key, client); - + /* Add client's public key to repository */ + if (!silc_server_get_public_key_by_client(server, client, NULL)) + silc_skr_add_public_key_simple(server->repository, + public_key, + SILC_SKR_USAGE_IDENTIFICATION, + client, NULL); client->data.public_key = public_key; public_key = NULL; }