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);
SilcUInt32 mode = 0, len, len2, id_len, flen;
const char *hostname, *ip;
- silc_socket_stream_get_info(cmd->sock, NULL, &hostname, &ip, NULL);
+ silc_socket_stream_get_info(silc_packet_stream_get_stream(cmd->sock),
+ NULL, &hostname, &ip, NULL);
id_data = silc_argument_get_arg_type(cmd->args, 2, &id_len);
nickname = silc_argument_get_arg_type(cmd->args, 3, &len);
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);
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 */
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);
int global = FALSE;
const char *hostname, *ip;
- silc_socket_stream_get_info(cmd->sock, NULL, &hostname, &ip, NULL);
+ silc_socket_stream_get_info(silc_packet_stream_get_stream(cmd->sock),
+ NULL, &hostname, &ip, NULL);
id_data = silc_argument_get_arg_type(cmd->args, 2, &id_len);
nickname = silc_argument_get_arg_type(cmd->args, 3, &len);
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;
}
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)
}
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;
}