X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=apps%2Fsilcd%2Fserver_util.c;h=dead873a6d250037bff3b3c9a91a585e9a4acc0a;hp=bc31cb6d0d72c32eb90813daaa652452cce3e813;hb=382d15d447b7a95390decfa783836ae4fe255b3d;hpb=3cf38201f9ffaad2da53757ed48a5546e1d03636 diff --git a/apps/silcd/server_util.c b/apps/silcd/server_util.c index bc31cb6d..dead873a 100644 --- a/apps/silcd/server_util.c +++ b/apps/silcd/server_util.c @@ -1772,6 +1772,12 @@ bool silc_server_inviteban_match(SilcServer server, SilcHashTable list, return ret; } +static void silc_server_inviteban_dummy_dest(void *key, void *context, + void *user_context) +{ + /* Nothing */ +} + /* Process invite or ban information */ void silc_server_inviteban_process(SilcServer server, SilcHashTable list, @@ -1797,7 +1803,8 @@ void silc_server_inviteban_process(SilcServer server, SilcHashTable list, char *string = NULL; silc_hash_table_find(list, (void *)1, NULL, (void **)&string); - silc_hash_table_del(list, (void *)1); + silc_hash_table_del_ext(list, (void *)1, NULL, NULL, NULL, NULL, + silc_server_inviteban_dummy_dest, NULL); if (!string) string = silc_calloc(len + 2, sizeof(*string)); else @@ -1869,10 +1876,8 @@ void silc_server_inviteban_process(SilcServer server, SilcHashTable list, char *string = NULL, *start, *end, *n; if (silc_hash_table_find(list, (void *)1, NULL, (void **)&string)) { - silc_hash_table_del(list, (void *)1); - if (!strncmp(string, tmp, strlen(string) - 1)) { - silc_free(string); + silc_hash_table_del(list, (void *)1); string = NULL; } else { start = strstr(string, tmp); @@ -1881,7 +1886,7 @@ void silc_server_inviteban_process(SilcServer server, SilcHashTable list, n = silc_calloc(strlen(string) - len, sizeof(*n)); strncat(n, string, start - string); strncat(n, end + 1, ((string + strlen(string)) - end) - 1); - silc_free(string); + silc_hash_table_del(list, (void *)1); string = n; } } @@ -1899,7 +1904,6 @@ void silc_server_inviteban_process(SilcServer server, SilcHashTable list, while (silc_hash_table_get(&htl, (void **)&type, (void **)&tmp2)) { if (type == 2 && !memcmp(tmp2->data, tmp, len)) { silc_hash_table_del_by_context(list, (void *)2, tmp2); - silc_buffer_free(tmp2); break; } } @@ -1913,7 +1917,6 @@ void silc_server_inviteban_process(SilcServer server, SilcHashTable list, while (silc_hash_table_get(&htl, (void **)&type, (void **)&tmp2)) { if (type == 3 && !memcmp(tmp2->data, tmp, len)) { silc_hash_table_del_by_context(list, (void *)3, tmp2); - silc_buffer_free(tmp2); break; } } @@ -1924,3 +1927,23 @@ void silc_server_inviteban_process(SilcServer server, SilcHashTable list, } } } + +/* Destructor for invite or ban list entrys */ + +void silc_server_inviteban_destruct(void *key, void *context, + void *user_context) +{ + switch ((SilcUInt32)key) { + case 1: + /* Invite string */ + silc_free(context); + break; + case 2: + case 3: + /* Public key/Channel ID SilcBuffer */ + silc_buffer_free(context); + break; + default: + break; + } +}