- silc_hash_make(md5hash, nickname, strlen(nickname), hash);
-
- if (!silc_idcache_find_by_data(id_list->clients, hash,
- md5hash->hash->hash_len, &list))
+ memset(nick, 0, sizeof(nick));
+ silc_to_lower(nickname, nick, sizeof(nick) - 1);
+ silc_hash_make(md5hash, nick, strlen(nick), hash);
+
+ /* As the Client ID is hashed in the ID cache by hashing only the hash
+ from the Client ID, we can do a lookup with only the hash not the
+ other parts of the ID and get all the clients with that hash, ie.
+ with that nickname, as the hash is from the nickname. */
+ memset(&client_id, 0, sizeof(client_id));
+ memcpy(&client_id.hash, hash, sizeof(client_id.hash));
+ if (!silc_idcache_find_by_id(id_list->clients, &client_id, &list))