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.
closely fully resolved, report it to application. Affected
file is lib/silcclient/command_reply.c.
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 <priikone@silcnet.org>
* Added missing channel unreferencing in CMODE, CUMODE,
Tue Nov 13 18:24:56 EET 2007 Pekka Riikonen <priikone@silcnet.org>
* Added missing channel unreferencing in CMODE, CUMODE,
channel->internal.resolve_cmd_ident = 0;
silc_client_unref_channel(client, conn, channel);
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);
/* Get channel key and save it */
tmp = silc_argument_get_arg_type(args, 7, &len);
if (tmp) {
/* 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);
+ }