X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Fsilcd%2Fserver.c;h=b3914316e3b9cedef4d11937049dcc429a3d323a;hb=2407b5a8d55101dcc4cccb098888e0e21f6f299c;hp=8e5455ad2e5b6d1fc984808b426aa71e10c9af1a;hpb=a0c1cd3b1fa92e12c25dbfaded73f86fcae80471;p=silc.git diff --git a/apps/silcd/server.c b/apps/silcd/server.c index 8e5455ad..b3914316 100644 --- a/apps/silcd/server.c +++ b/apps/silcd/server.c @@ -163,9 +163,6 @@ int silc_server_init(SilcServer server) silc_hash_alloc("md5", &server->md5hash); silc_hash_alloc("sha1", &server->sha1hash); - /* Initialize none cipher */ - silc_cipher_alloc("none", &server->none_cipher); - /* Allocate PKCS context for local public and private keys */ silc_pkcs_alloc(server->public_key->name, &server->pkcs); silc_pkcs_public_key_set(server->pkcs, server->public_key); @@ -952,7 +949,7 @@ SILC_TASK_CALLBACK(silc_server_connect_to_router_final) timeout!! */ hb_context = silc_calloc(1, sizeof(*hb_context)); hb_context->server = server; - silc_socket_set_heartbeat(sock, 600, hb_context, + silc_socket_set_heartbeat(sock, 300, hb_context, silc_server_perform_heartbeat, server->schedule); @@ -1462,7 +1459,7 @@ SILC_TASK_CALLBACK(silc_server_accept_new_connection_final) timeout!! */ hb_context = silc_calloc(1, sizeof(*hb_context)); hb_context->server = server; - silc_socket_set_heartbeat(sock, 600, hb_context, + silc_socket_set_heartbeat(sock, 400, hb_context, silc_server_perform_heartbeat, server->schedule); @@ -2815,7 +2812,7 @@ SilcChannelEntry silc_server_create_new_channel(SilcServer server, channel_name = strdup(channel_name); - /* Create the channel */ + /* Create the channel ID */ if (!silc_id_create_channel_id(server, router_id, server->rng, &channel_id)) { silc_free(channel_name); @@ -2823,6 +2820,8 @@ SilcChannelEntry silc_server_create_new_channel(SilcServer server, silc_hmac_free(newhmac); return NULL; } + + /* Create the channel */ entry = silc_idlist_add_channel(server->local_list, channel_name, SILC_CHANNEL_MODE_NONE, channel_id, NULL, key, newhmac, 0); @@ -2830,6 +2829,7 @@ SilcChannelEntry silc_server_create_new_channel(SilcServer server, silc_free(channel_name); silc_cipher_free(key); silc_hmac_free(newhmac); + silc_free(channel_id); return NULL; } @@ -2839,11 +2839,7 @@ SilcChannelEntry silc_server_create_new_channel(SilcServer server, /* Now create the actual key material */ if (!silc_server_create_channel_key(server, entry, silc_cipher_get_key_len(key) / 8)) { - silc_free(channel_name); - silc_cipher_free(key); - silc_hmac_free(newhmac); - silc_free(entry->cipher); - silc_free(entry->hmac_name); + silc_idlist_del_channel(server->local_list, entry); return NULL; } @@ -2898,6 +2894,8 @@ silc_server_create_new_channel_with_id(SilcServer server, SILC_CHANNEL_MODE_NONE, channel_id, NULL, key, newhmac, 0); if (!entry) { + silc_cipher_free(key); + silc_hmac_free(newhmac); silc_free(channel_name); return NULL; } @@ -2905,7 +2903,7 @@ silc_server_create_new_channel_with_id(SilcServer server, /* Now create the actual key material */ if (!silc_server_create_channel_key(server, entry, silc_cipher_get_key_len(key) / 8)) { - silc_free(channel_name); + silc_idlist_del_channel(server->local_list, entry); return NULL; } @@ -3032,7 +3030,7 @@ SilcChannelEntry silc_server_save_channel_key(SilcServer server, SILC_LOG_DEBUG(("Start")); /* Decode channel key payload */ - payload = silc_channel_key_payload_parse(key_payload->data, + payload = silc_channel_key_payload_parse(key_payload->data, key_payload->len); if (!payload) { SILC_LOG_ERROR(("Bad channel key payload received, dropped")); @@ -3055,7 +3053,8 @@ SilcChannelEntry silc_server_save_channel_key(SilcServer server, if (!channel) { channel = silc_idlist_find_channel_by_id(server->global_list, id, NULL); if (!channel) { - SILC_LOG_ERROR(("Received key for non-existent channel")); + SILC_LOG_ERROR(("Received key for non-existent channel %s", + silc_id_render(id, SILC_ID_CHANNEL))); goto out; } } @@ -3140,8 +3139,7 @@ void silc_server_perform_heartbeat(SilcSocketConnection sock, { SilcServerHBContext hb = (SilcServerHBContext)hb_context; - SILC_LOG_DEBUG(("Sending heartbeat to %s (%s)", sock->hostname, - sock->ip)); + SILC_LOG_DEBUG(("Sending heartbeat to %s (%s)", sock->hostname, sock->ip)); /* Send the heartbeat */ silc_server_send_heartbeat(hb->server, sock); @@ -3597,6 +3595,8 @@ void silc_server_announce_channels(SilcServer server, int i; for (i = 0; i < channel_users_modes_c; i++) { + if (!channel_users_modes[i]) + continue; silc_buffer_push(channel_users_modes[i], channel_users_modes[i]->data - channel_users_modes[i]->head);