X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=apps%2Fsilcd%2Fserver.c;h=f03581bcd081bbe9135d07e59bf6ba2f103be4a4;hp=c2df082c61118703639b85fca1f9ad34de233bfd;hb=805fddcf6431e784f9f77114782a90c9d12f9cbe;hpb=e9374395ec9747bddd3ea0bfd3e5a17717e97b31 diff --git a/apps/silcd/server.c b/apps/silcd/server.c index c2df082c..f03581bc 100644 --- a/apps/silcd/server.c +++ b/apps/silcd/server.c @@ -701,6 +701,10 @@ void silc_server_free(SilcServer server) silc_skr_free(server->repository); silc_packet_engine_stop(server->packet_engine); + silc_schedule_task_del_by_context(server->schedule, server); + silc_schedule_uninit(server->schedule); + server->schedule = NULL; + silc_free(server->local_list); silc_free(server->global_list); silc_free(server->server_name); @@ -935,7 +939,6 @@ SilcBool silc_server_init(SilcServer server) } else { server->stat.routers = 1; } - /* If we are normal server we'll retrieve network statisticial information once in a while from the router. */ if (server->server_type != SILC_ROUTER) @@ -1269,6 +1272,8 @@ SILC_TASK_CALLBACK(silc_server_purge_expired_clients) silc_dlist_start(server->expired_clients); while ((client = silc_dlist_get(server->expired_clients))) { + continue; + /* For unregistered clients the created timestamp is actually unregistered timestamp. Make sure client remains in history at least 500 seconds. */ @@ -1373,8 +1378,6 @@ silc_server_ke_auth_compl(SilcConnAuth connauth, SilcBool success, if (sconn->callback) (*sconn->callback)(server, NULL, sconn->callback_context); silc_server_free_sock_user_data(server, sconn->sock, NULL); - silc_server_disconnect_remote(server, sconn->sock, - SILC_STATUS_ERR_AUTH_FAILED, NULL); return; } @@ -1396,11 +1399,11 @@ silc_server_ke_auth_compl(SilcConnAuth connauth, SilcBool success, strdup(sconn->remote_host), SILC_SERVER, NULL, NULL, sconn->sock); if (!id_entry) { + silc_server_disconnect_remote(server, sconn->sock, + SILC_STATUS_ERR_RESOURCE_LIMIT, NULL); if (sconn->callback) (*sconn->callback)(server, NULL, sconn->callback_context); silc_server_free_sock_user_data(server, sconn->sock, NULL); - silc_server_disconnect_remote(server, sconn->sock, - SILC_STATUS_ERR_RESOURCE_LIMIT, NULL); return; } @@ -1425,11 +1428,11 @@ silc_server_ke_auth_compl(SilcConnAuth connauth, SilcBool success, SILC_STR_DATA(server->server_name, strlen(server->server_name)), SILC_STR_END)) { + silc_server_disconnect_remote(server, sconn->sock, + SILC_STATUS_ERR_RESOURCE_LIMIT, NULL); if (sconn->callback) (*sconn->callback)(server, NULL, sconn->callback_context); silc_server_free_sock_user_data(server, sconn->sock, NULL); - silc_server_disconnect_remote(server, sconn->sock, - SILC_STATUS_ERR_RESOURCE_LIMIT, NULL); return; } @@ -1475,8 +1478,6 @@ silc_server_ke_auth_compl(SilcConnAuth connauth, SilcBool success, if (sconn->callback) (*sconn->callback)(server, NULL, sconn->callback_context); silc_server_free_sock_user_data(server, sconn->sock, NULL); - silc_server_disconnect_remote(server, sconn->sock, - SILC_STATUS_ERR_RESOURCE_LIMIT, NULL); return; } @@ -1537,6 +1538,8 @@ silc_server_ke_auth_compl(SilcConnAuth connauth, SilcBool success, /* We already have primary router. Disconnect this connection */ SILC_LOG_DEBUG(("We already have primary router, disconnect")); silc_idlist_del_server(server->global_list, id_entry); + silc_server_disconnect_remote(server, sconn->sock, + SILC_STATUS_ERR_RESOURCE_LIMIT, NULL); if (sconn->callback) (*sconn->callback)(server, NULL, sconn->callback_context); silc_server_free_sock_user_data(server, sconn->sock, NULL); @@ -1555,11 +1558,11 @@ silc_server_ke_auth_compl(SilcConnAuth connauth, SilcBool success, break; default: + silc_server_disconnect_remote(server, sconn->sock, + SILC_STATUS_ERR_AUTH_FAILED, NULL); if (sconn->callback) (*sconn->callback)(server, NULL, sconn->callback_context); silc_server_free_sock_user_data(server, sconn->sock, NULL); - silc_server_disconnect_remote(server, sconn->sock, - SILC_STATUS_ERR_AUTH_FAILED, NULL); return; } @@ -1635,8 +1638,6 @@ static void silc_server_ke_completed(SilcSKE ske, SilcSKEStatus status, if (sconn->callback) (*sconn->callback)(server, NULL, sconn->callback_context); silc_server_free_sock_user_data(server, sconn->sock, NULL); - silc_server_disconnect_remote(server, sconn->sock, - SILC_STATUS_ERR_KEY_EXCHANGE_FAILED, NULL); return; } @@ -1657,11 +1658,11 @@ static void silc_server_ke_completed(SilcSKE ske, SilcSKEStatus status, } /* Error setting keys */ + silc_server_disconnect_remote(server, sconn->sock, + SILC_STATUS_ERR_KEY_EXCHANGE_FAILED, NULL); if (sconn->callback) (*sconn->callback)(server, NULL, sconn->callback_context); silc_server_free_sock_user_data(server, sconn->sock, NULL); - silc_server_disconnect_remote(server, sconn->sock, - SILC_STATUS_ERR_KEY_EXCHANGE_FAILED, NULL); return; } silc_packet_set_keys(sconn->sock, send_key, receive_key, hmac_send, @@ -1684,11 +1685,11 @@ static void silc_server_ke_completed(SilcSKE ske, SilcSKEStatus status, } /** Error allocating auth protocol */ + silc_server_disconnect_remote(server, sconn->sock, + SILC_STATUS_ERR_RESOURCE_LIMIT, NULL); if (sconn->callback) (*sconn->callback)(server, NULL, sconn->callback_context); silc_server_free_sock_user_data(server, sconn->sock, NULL); - silc_server_disconnect_remote(server, sconn->sock, - SILC_STATUS_ERR_RESOURCE_LIMIT, NULL); return; } @@ -2108,7 +2109,6 @@ SILC_TASK_CALLBACK(silc_server_connect_to_router) sconn->no_reconnect = param->reconnect_keep_trying == FALSE; SILC_LOG_DEBUG(("Created connection %p", sconn)); - if (!server->router_conn && !sconn->backup) server->router_conn = sconn; @@ -3016,8 +3016,6 @@ void silc_server_close_connection(SilcServer server, SilcUInt16 port; if (!silc_packet_stream_is_valid(sock)) - return; - memset(tmp, 0, sizeof(tmp)); // silc_socket_get_error(sock, tmp, sizeof(tmp)); silc_socket_stream_get_info(silc_packet_stream_get_stream(sock),