X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=apps%2Fsilcd%2Fcommand_reply.c;h=a72e6c206a8ccdef7d0f727f6fe7ec6fbbd94fba;hp=fd3a7d6ba2c25e3cbc5e75528cc1a656e310da5b;hb=382d15d447b7a95390decfa783836ae4fe255b3d;hpb=6afc7e110e395414d327f511e130d4ad31024af6 diff --git a/apps/silcd/command_reply.c b/apps/silcd/command_reply.c index fd3a7d6b..a72e6c20 100644 --- a/apps/silcd/command_reply.c +++ b/apps/silcd/command_reply.c @@ -52,6 +52,7 @@ SilcServerCommandReply silc_command_reply_list[] = SILC_SERVER_CMD_REPLY(users, USERS), SILC_SERVER_CMD_REPLY(getkey, GETKEY), SILC_SERVER_CMD_REPLY(list, LIST), + SILC_SERVER_CMD_REPLY(watch, WATCH), { NULL, 0 }, }; @@ -147,7 +148,7 @@ silc_server_command_process_error(SilcServerCommandReplyContext cmd, client_id, FALSE, NULL); if (client) { silc_server_remove_from_channels(server, NULL, client, TRUE, - NULL, TRUE); + NULL, TRUE, FALSE); silc_idlist_del_data(client); silc_idlist_del_client(server->global_list, client); } @@ -938,7 +939,7 @@ SILC_SERVER_CMD_REPLY_FUNC(join) /* Get founder key */ tmp = silc_argument_get_arg_type(cmd->args, 15, &len); if (tmp) - silc_pkcs_public_key_decode(tmp, len, &founder_key); + silc_pkcs_public_key_payload_decode(tmp, len, &founder_key); /* See whether we already have the channel. */ entry = silc_idlist_find_channel_by_name(server->local_list, @@ -999,16 +1000,46 @@ SILC_SERVER_CMD_REPLY_FUNC(join) /* Get the ban list */ tmp = silc_argument_get_arg_type(cmd->args, 8, &len); - if (tmp) { - silc_free(entry->ban_list); - entry->ban_list = silc_memdup(tmp, len); + if (tmp && len > 2) { + SilcArgumentPayload iargs; + SilcUInt16 iargc; + SILC_GET16_MSB(iargc, tmp); + iargs = silc_argument_payload_parse(tmp + 2, len - 2, iargc); + if (iargs) { + /* Delete old ban list */ + if (entry->ban_list) + silc_hash_table_free(entry->ban_list); + entry->ban_list = + silc_hash_table_alloc(0, silc_hash_ptr, + NULL, NULL, NULL, + silc_server_inviteban_destruct, entry, TRUE); + + /* Add new ban list */ + silc_server_inviteban_process(server, entry->ban_list, 0, iargs); + silc_argument_payload_free(iargs); + } } /* Get the invite list */ tmp = silc_argument_get_arg_type(cmd->args, 9, &len); - if (tmp) { - silc_free(entry->invite_list); - entry->invite_list = silc_memdup(tmp, len); + if (tmp && len > 2) { + SilcArgumentPayload iargs; + SilcUInt16 iargc; + SILC_GET16_MSB(iargc, tmp); + iargs = silc_argument_payload_parse(tmp + 2, len - 2, iargc); + if (iargs) { + /* Delete old invite list */ + if (entry->invite_list) + silc_hash_table_free(entry->invite_list); + entry->invite_list = + silc_hash_table_alloc(0, silc_hash_ptr, + NULL, NULL, NULL, + silc_server_inviteban_destruct, entry, TRUE); + + /* Add new invite list */ + silc_server_inviteban_process(server, entry->invite_list, 0, iargs); + silc_argument_payload_free(iargs); + } } /* Get the topic */ @@ -1075,7 +1106,7 @@ SILC_SERVER_CMD_REPLY_FUNC(stats) /* Get statistics structure */ tmp = silc_argument_get_arg_type(cmd->args, 3, &tmp_len); - if (server->server_type == SILC_SERVER && tmp) { + if (server->server_type != SILC_ROUTER && tmp) { silc_buffer_set(&buf, tmp, tmp_len); silc_buffer_unformat(&buf, SILC_STR_UI_INT(NULL), @@ -1204,10 +1235,8 @@ SILC_SERVER_CMD_REPLY_FUNC(getkey) SilcServerEntry server_entry = NULL; SilcClientID *client_id = NULL; SilcServerID *server_id = NULL; - SilcSKEPKType type; - unsigned char *tmp, *pk; + unsigned char *tmp; SilcUInt32 len; - SilcUInt16 pk_len; SilcIDPayload idp = NULL; SilcIdType id_type; SilcPublicKey public_key = NULL; @@ -1226,16 +1255,8 @@ SILC_SERVER_CMD_REPLY_FUNC(getkey) if (!tmp) goto out; - /* Decode the public key */ - - SILC_GET16_MSB(pk_len, tmp); - SILC_GET16_MSB(type, tmp + 2); - pk = tmp + 4; - - if (type != SILC_SKE_PK_TYPE_SILC) - goto out; - - if (!silc_pkcs_public_key_decode(pk, pk_len, &public_key)) + /* Decode the public key payload */ + if (!silc_pkcs_public_key_payload_decode(tmp, len, &public_key)) goto out; id_type = silc_id_payload_get_type(idp);