X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Fsilcd%2Fidlist.c;h=1c75d7181bf0b8a73af4a9ed3c5562771a8ec2eb;hb=a939f27e19b8084ef2acd25156b19d26d1440ace;hp=a29ba9fb1f9a1817e182917437ef706ab71f511b;hpb=0a6ebeedacee8f43f604cddbf7dc6bc113c6515e;p=silc.git diff --git a/apps/silcd/idlist.c b/apps/silcd/idlist.c index a29ba9fb..1c75d718 100644 --- a/apps/silcd/idlist.c +++ b/apps/silcd/idlist.c @@ -55,8 +55,6 @@ void silc_idlist_del_data(void *entry) if (idata->hash) silc_hash_free(idata->hash); - if (idata->public_key) - silc_pkcs_public_key_free(idata->public_key); idata->hash = NULL; idata->public_key = NULL; @@ -328,7 +326,7 @@ silc_idlist_add_client(SilcIDList id_list, char *nickname, char *username, int ret; ret = silc_parse_userfqdn(username, u, sizeof(u), h, sizeof(h)); - if (!u) + if (!ret) return NULL; if (!silc_identifier_verify(u, strlen(u), SILC_STRING_UTF8, 128)) return NULL; @@ -338,6 +336,8 @@ silc_idlist_add_client(SilcIDList id_list, char *nickname, char *username, } client = silc_calloc(1, sizeof(*client)); + if (!client) + return NULL; client->nickname = nickname; client->username = username ? strdup(username) : NULL; client->userinfo = userinfo; @@ -558,18 +558,17 @@ silc_idlist_replace_client_id(SilcServer server, client = (SilcClientEntry)id_cache->context; - /* Remove the old entry and add a new one */ - - if (!silc_idcache_del_by_context(id_list->clients, client, server)) - return NULL; - /* Check if anyone is watching old nickname */ if (server->server_type == SILC_ROUTER) silc_server_check_watcher_list(server, client, nickname, SILC_NOTIFY_TYPE_NICK_CHANGE); + /* Replace */ + if (!silc_idcache_update(id_list->clients, id_cache, new_id, nicknamec, + TRUE)) + return NULL; + silc_free(client->nickname); - *client->id = *new_id; client->nickname = nickname ? strdup(nickname) : NULL; /* Check if anyone is watching new nickname */ @@ -577,10 +576,6 @@ silc_idlist_replace_client_id(SilcServer server, silc_server_check_watcher_list(server, client, nickname, SILC_NOTIFY_TYPE_NICK_CHANGE); - if (!silc_idcache_add(id_list->clients, nicknamec, client->id, - client)) - return NULL; - SILC_LOG_DEBUG(("Replaced")); return client;