silcd: fixed memory leaks
[silc.git] / apps / silcd / idlist.c
index e302b6e6bf3ddfed204cdd7fee49e633c4dff14e..13093c09e9ede52f1a7c1d93aedec81881b44b51 100644 (file)
@@ -55,9 +55,10 @@ 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);
+  if (idata->rekey)
+    silc_ske_free_rekey_material(idata->rekey);
 
+  idata->rekey = NULL;
   idata->hash = NULL;
   idata->public_key = NULL;
 }
@@ -328,7 +329,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 +339,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;
@@ -395,6 +398,7 @@ void silc_idlist_client_destructor(SilcIDCache cache,
                              client);
 
     assert(!silc_hash_table_count(client->channels));
+    silc_free(entry->name);
     silc_free(client->nickname);
     silc_free(client->servername);
     silc_free(client->username);