From: Pekka Riikonen Date: Thu, 15 Nov 2007 16:07:38 +0000 (+0000) Subject: Reprocess JOIN command synchronously after resolving channel X-Git-Tag: 1.2.beta1~78 X-Git-Url: http://git.silcnet.org/gitweb/?p=crypto.git;a=commitdiff_plain;h=79284c6f2e3df2de326793b1f9ff038ad88f9e0f Reprocess JOIN command synchronously after resolving channel user list. In JOIN command reply check if the channel key is already saved. If it is we have received new key from server while resolving user and must not save the old key. --- diff --git a/CHANGES.TOOLKIT b/CHANGES.TOOLKIT index 2ef30cf3..bd514cef 100644 --- a/CHANGES.TOOLKIT +++ b/CHANGES.TOOLKIT @@ -10,6 +10,14 @@ Thu Nov 15 16:45:48 EET 2007 Pekka Riikonen closely fully resolved, report it to application. Affected file is lib/silcclient/command_reply.c. + * Reprocess JOIN command synchronously after resolving channel + user list. Affected file is lib/silcclient/command_reply.c. + + * In JOIN command reply check if the channel key is already + saved. If it is we have received new key from server while + resolving user and must not save the old key. Affected file + is lib/silcclient/command_reply.c. + Tue Nov 13 18:24:56 EET 2007 Pekka Riikonen * Added missing channel unreferencing in CMODE, CUMODE, diff --git a/lib/silcclient/command_reply.c b/lib/silcclient/command_reply.c index ee71a426..cf2743af 100644 --- a/lib/silcclient/command_reply.c +++ b/lib/silcclient/command_reply.c @@ -1138,7 +1138,7 @@ silc_client_command_reply_join_resolved(SilcClient client, channel->internal.resolve_cmd_ident = 0; silc_client_unref_channel(client, conn, channel); - SILC_FSM_CALL_CONTINUE(&cmd->thread); + SILC_FSM_CALL_CONTINUE_SYNC(&cmd->thread); } @@ -1287,8 +1287,13 @@ SILC_FSM_STATE(silc_client_command_reply_join) /* Get channel key and save it */ tmp = silc_argument_get_arg_type(args, 7, &len); if (tmp) { - silc_buffer_set(&keyp, tmp, len); - silc_client_save_channel_key(client, conn, &keyp, channel); + /* If channel key already exists on the channel then while resolving + the user list we have already received new key from server. Don't + replace it with this old key. */ + if (!channel->internal.send_key) { + silc_buffer_set(&keyp, tmp, len); + silc_client_save_channel_key(client, conn, &keyp, channel); + } } /* Get topic */