From: Pekka Riikonen Date: Fri, 17 May 2002 06:34:13 +0000 (+0000) Subject: updates X-Git-Tag: silc.client.0.9.1~9 X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=commitdiff_plain;h=6876e8443c59148da9df2d097dd1698247d9851b updates --- diff --git a/CHANGES b/CHANGES index 9c8d36d1..6e12aef3 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,8 @@ +Fri May 17 08:33:41 CEST 2002 Pekka Riikonen + + * Fixed watcher list checking during server signoff. It + crashed the server. Affected file silcd/server_util.c. + Thu May 16 13:05:13 CEST 2002 Pekka Riikonen * The nickname argument to watch notify can be optional. diff --git a/apps/silcd/command.c b/apps/silcd/command.c index be654fdb..28c46634 100644 --- a/apps/silcd/command.c +++ b/apps/silcd/command.c @@ -4206,8 +4206,21 @@ SILC_SERVER_CMD_FUNC(cmode) /* Save the public key */ channel->founder_key = silc_pkcs_public_key_copy(idata->public_key); + if (!channel->founder_key) { + silc_server_command_send_status_reply(cmd, SILC_COMMAND_CMODE, + SILC_STATUS_ERR_AUTH_FAILED, + 0); + goto out; + } + founder_key = channel->founder_key; fkey = silc_pkcs_public_key_encode(founder_key, &fkey_len); + if (!fkey) { + silc_server_command_send_status_reply(cmd, SILC_COMMAND_CMODE, + SILC_STATUS_ERR_AUTH_FAILED, + 0); + goto out; + } } } } else { @@ -4423,6 +4436,11 @@ SILC_SERVER_CMD_FUNC(cumode) notify = TRUE; founder_key = channel->founder_key; fkey = silc_pkcs_public_key_encode(founder_key, &fkey_len); + if (!fkey) { + silc_server_command_send_status_reply(cmd, SILC_COMMAND_CUMODE, + SILC_STATUS_ERR_AUTH_FAILED, 0); + goto out; + } } } else { if (chl->mode & SILC_CHANNEL_UMODE_CHANFO) { diff --git a/apps/silcd/packet_receive.c b/apps/silcd/packet_receive.c index 2f31f6db..91d08cd3 100644 --- a/apps/silcd/packet_receive.c +++ b/apps/silcd/packet_receive.c @@ -634,6 +634,17 @@ void silc_server_notify(SilcServer server, } } + if (mode & SILC_CHANNEL_MODE_FOUNDER_AUTH && !channel->founder_key && + server->server_type == SILC_ROUTER) { + SILC_LOG_DEBUG(("Enforcing sender to change channel mode")); + mode &= ~SILC_CHANNEL_MODE_FOUNDER_AUTH; + silc_server_send_notify_cmode(server, sock, FALSE, channel, + mode, server->id, SILC_ID_SERVER, + channel->cipher, + channel->hmac_name, + channel->passphrase, NULL); + } + /* Change mode */ channel->mode = mode; diff --git a/apps/silcd/server_util.c b/apps/silcd/server_util.c index 4cb11f4b..d9d2319c 100644 --- a/apps/silcd/server_util.c +++ b/apps/silcd/server_util.c @@ -194,10 +194,9 @@ bool silc_server_remove_clients_by_server(SilcServer server, client->data.status &= ~SILC_IDLIST_STATUS_REGISTERED; id_cache->expire = SILC_ID_CACHE_EXPIRE_DEF; } else { - silc_idlist_del_client(server->local_list, client); - /* Remove this client from watcher list if it is */ silc_server_del_from_watcher_list(server, client); + silc_idlist_del_client(server->local_list, client); } if (!silc_idcache_list_next(list, &id_cache)) @@ -1266,7 +1265,6 @@ void silc_server_kill_client(SilcServer server, if (!silc_idlist_del_client(server->global_list, remote_client)) { /* Remove this client from watcher list if it is */ silc_server_del_from_watcher_list(server, remote_client); - silc_idlist_del_client(server->local_list, remote_client); } }