From: Pekka Riikonen Date: Thu, 16 May 2002 13:47:39 +0000 (+0000) Subject: updates. X-Git-Tag: silc.client.0.9.1~10 X-Git-Url: http://git.silcnet.org/gitweb/?a=commitdiff_plain;h=9f389040b94396cb014dc59173ae20f9935a3fa3;p=silc.git updates. --- diff --git a/apps/silcd/packet_receive.c b/apps/silcd/packet_receive.c index ff021166..2f31f6db 100644 --- a/apps/silcd/packet_receive.c +++ b/apps/silcd/packet_receive.c @@ -1907,6 +1907,8 @@ SilcClientEntry silc_server_new_client(SilcServer server, SILC_LOG_INFO(("Unauthenticated client attempted to register to network")); silc_server_disconnect_remote(server, sock, SILC_STATUS_ERR_NOT_AUTHENTICATED, NULL); + if (sock->user_data) + silc_server_free_sock_user_data(server, sock, NULL); return NULL; } @@ -1924,6 +1926,8 @@ SilcClientEntry silc_server_new_client(SilcServer server, silc_server_disconnect_remote(server, sock, SILC_STATUS_ERR_INCOMPLETE_INFORMATION, NULL); + if (sock->user_data) + silc_server_free_sock_user_data(server, sock, NULL); return NULL; } @@ -1935,6 +1939,8 @@ SilcClientEntry silc_server_new_client(SilcServer server, silc_server_disconnect_remote(server, sock, SILC_STATUS_ERR_INCOMPLETE_INFORMATION, NULL); + if (sock->user_data) + silc_server_free_sock_user_data(server, sock, NULL); return NULL; } @@ -1971,6 +1977,8 @@ SilcClientEntry silc_server_new_client(SilcServer server, silc_server_disconnect_remote(server, sock, SILC_STATUS_ERR_INCOMPLETE_INFORMATION, NULL); + if (sock->user_data) + silc_server_free_sock_user_data(server, sock, NULL); return NULL; } @@ -1991,6 +1999,8 @@ SilcClientEntry silc_server_new_client(SilcServer server, silc_server_disconnect_remote(server, sock, SILC_STATUS_ERR_INCOMPLETE_INFORMATION, NULL); + if (sock->user_data) + silc_server_free_sock_user_data(server, sock, NULL); return NULL; } @@ -2039,6 +2049,8 @@ SilcClientEntry silc_server_new_client(SilcServer server, if (nickfail > 9) { silc_server_disconnect_remote(server, sock, SILC_STATUS_ERR_BAD_NICKNAME, NULL); + if (sock->user_data) + silc_server_free_sock_user_data(server, sock, NULL); return NULL; } snprintf(&nickname[strlen(nickname) - 1], 1, "%d", nickfail); @@ -2117,6 +2129,8 @@ SilcServerEntry silc_server_new_server(SilcServer server, "server" : "router"))); silc_server_disconnect_remote(server, sock, SILC_STATUS_ERR_NOT_AUTHENTICATED, NULL); + if (sock->user_data) + silc_server_free_sock_user_data(server, sock, NULL); return NULL; } local = FALSE; @@ -2129,16 +2143,24 @@ SilcServerEntry silc_server_new_server(SilcServer server, &name_len), SILC_STR_END); if (ret == -1) { - if (id_string) - silc_free(id_string); - if (server_name) - silc_free(server_name); + silc_free(id_string); + silc_free(server_name); + silc_server_disconnect_remote(server, sock, + SILC_STATUS_ERR_INCOMPLETE_INFORMATION, + NULL); + if (sock->user_data) + silc_server_free_sock_user_data(server, sock, NULL); return NULL; } if (id_len > buffer->len) { silc_free(id_string); silc_free(server_name); + silc_server_disconnect_remote(server, sock, + SILC_STATUS_ERR_INCOMPLETE_INFORMATION, + NULL); + if (sock->user_data) + silc_server_free_sock_user_data(server, sock, NULL); return NULL; } @@ -2150,6 +2172,11 @@ SilcServerEntry silc_server_new_server(SilcServer server, if (!server_id) { silc_free(id_string); silc_free(server_name); + silc_server_disconnect_remote(server, sock, + SILC_STATUS_ERR_INCOMPLETE_INFORMATION, + NULL); + if (sock->user_data) + silc_server_free_sock_user_data(server, sock, NULL); return NULL; } silc_free(id_string); @@ -2160,6 +2187,8 @@ SilcServerEntry silc_server_new_server(SilcServer server, sock->ip, sock->hostname)); silc_server_disconnect_remote(server, sock, SILC_STATUS_ERR_BAD_SERVER_ID, NULL); + if (sock->user_data) + silc_server_free_sock_user_data(server, sock, NULL); silc_free(server_name); return NULL; } diff --git a/apps/silcd/server.c b/apps/silcd/server.c index c1d097e8..9243ad01 100644 --- a/apps/silcd/server.c +++ b/apps/silcd/server.c @@ -2532,30 +2532,29 @@ void silc_server_free_client_data(SilcServer server, to the network before removing the client entry. */ silc_server_packet_queue_purge(server, sock); - if (!client->id) - return; - - /* Send SIGNOFF notify to routers. */ - if (notify && !server->standalone && server->router) - silc_server_send_notify_signoff(server, server->router->connection, - server->server_type == SILC_SERVER ? - FALSE : TRUE, client->id, signoff); - - /* Remove client from all channels */ - if (notify) - silc_server_remove_from_channels(server, NULL, client, - TRUE, (char *)signoff, TRUE); - else - silc_server_remove_from_channels(server, NULL, client, - FALSE, NULL, FALSE); + if (client->id) { + /* Send SIGNOFF notify to routers. */ + if (notify && !server->standalone && server->router) + silc_server_send_notify_signoff(server, server->router->connection, + server->server_type == SILC_SERVER ? + FALSE : TRUE, client->id, signoff); + + /* Remove client from all channels */ + if (notify) + silc_server_remove_from_channels(server, NULL, client, + TRUE, (char *)signoff, TRUE); + else + silc_server_remove_from_channels(server, NULL, client, + FALSE, NULL, FALSE); - /* Check if anyone is watching this nickname */ - if (server->server_type == SILC_ROUTER) - silc_server_check_watcher_list(server, client, NULL, - SILC_NOTIFY_TYPE_SIGNOFF); + /* Check if anyone is watching this nickname */ + if (server->server_type == SILC_ROUTER) + silc_server_check_watcher_list(server, client, NULL, + SILC_NOTIFY_TYPE_SIGNOFF); - /* Remove this client from watcher list if it is */ - silc_server_del_from_watcher_list(server, client); + /* Remove this client from watcher list if it is */ + silc_server_del_from_watcher_list(server, client); + } /* Update statistics */ server->stat.my_clients--;