- if (!silc_idcache_find_by_id_one(id_list->clients, (void *)old_id,
- SILC_ID_CLIENT, &id_cache))
+ /* Normalize name. This is cached, original is in client context. */
+ if (nickname) {
+ nicknamec = silc_identifier_check(nickname, strlen(nickname),
+ SILC_STRING_UTF8, 128, NULL);
+ if (!nicknamec)
+ return NULL;
+ }
+
+ /* Do extended search since the normal ID comparison function for
+ Client ID's compares only the hash from the Client ID and not the
+ entire ID. The silc_hash_client_id_compare compares the entire
+ Client ID as we want to find one specific Client ID. */
+ if (!silc_idcache_find_by_id_one_ext(id_list->clients, (void *)old_id,
+ NULL, NULL,
+ silc_hash_client_id_compare, NULL,
+ &id_cache))