X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Fsilcd%2Fserver.c;h=2a9b149ab2542400164e27241488a4c38368fe84;hb=bbcf6d6759de9df452d8df3be8b906ddeb1317a5;hp=250ae76cefeaf1399c287a807cefb8bdd45e8826;hpb=7ad7a5c30e47d85d3f1ab536e762aea6e15b73d0;p=silc.git diff --git a/apps/silcd/server.c b/apps/silcd/server.c index 250ae76c..2a9b149a 100644 --- a/apps/silcd/server.c +++ b/apps/silcd/server.c @@ -3083,10 +3083,10 @@ void silc_server_free_client_data(SilcServer server, /* Remove client from all channels */ if (notify) silc_server_remove_from_channels(server, NULL, client, - TRUE, (char *)signoff, TRUE); + TRUE, (char *)signoff, TRUE, FALSE); else silc_server_remove_from_channels(server, NULL, client, - FALSE, NULL, FALSE); + FALSE, NULL, FALSE, FALSE); /* Remove this client from watcher list if it is */ silc_server_del_from_watcher_list(server, client); @@ -3349,7 +3349,8 @@ void silc_server_remove_from_channels(SilcServer server, SilcClientEntry client, bool notify, const char *signoff_message, - bool keygen) + bool keygen, + bool killed) { SilcChannelEntry channel; SilcChannelClientEntry chl; @@ -3433,6 +3434,21 @@ void silc_server_remove_from_channels(SilcServer server, signoff_message, signoff_message ? strlen(signoff_message) : 0); + if (killed && clidp) { + /* Remove the client from channel's invite list */ + if (channel->invite_list && + silc_hash_table_count(channel->invite_list)) { + SilcBuffer ab; + SilcArgumentPayload iargs; + ab = silc_argument_payload_encode_one(NULL, clidp->data, + clidp->len, 3); + iargs = silc_argument_payload_parse(ab->data, ab->len, 1); + silc_server_inviteban_process(server, channel->invite_list, 1, iargs); + silc_buffer_free(ab); + silc_argument_payload_free(iargs); + } + } + /* Don't create keys if we are shutting down */ if (server->server_shutdown) continue;