Fixed KILL command related crash in silcd silc.server.1.1.5
authorPekka Riikonen <priikone@silcnet.org>
Sun, 20 Apr 2008 15:54:53 +0000 (18:54 +0300)
committerPekka Riikonen <priikone@silcnet.org>
Sun, 20 Apr 2008 15:54:53 +0000 (18:54 +0300)
apps/silcd/command.c
apps/silcd/server.c
apps/silcd/server_util.c

index c4b0edbef9be85f2b42bc73bf9bde5d954a3d69c..77d0eb6472b946bb2793e7c109cbd961fab8a593 100644 (file)
@@ -1474,9 +1474,8 @@ SILC_SERVER_CMD_FUNC(kill)
     sock = remote_client->connection;
     silc_server_remove_from_channels(server, NULL, remote_client,
                                     TRUE, (char *)"Killed", TRUE, TRUE);
-    silc_server_free_client_data(server, NULL, remote_client, TRUE,
-                                comment ? comment :
-                                (unsigned char *)"Killed");
+    silc_server_free_sock_user_data(server, sock, comment ? comment :
+                                   (unsigned char *)"Killed");
     if (sock)
       silc_server_close_connection(server, sock);
   } else {
index 751abc7a8b47892ec45e1d698e27558be8618456..7453f5f5d1bcb8c832aefaebf41b5d6da0ddb1d2 100644 (file)
@@ -2996,8 +2996,10 @@ void silc_server_free_client_data(SilcServer server,
   SILC_OPER_STATS_UPDATE(client, router, SILC_UMODE_ROUTER_OPERATOR);
   silc_schedule_task_del_by_context(server->schedule, client);
 
-  if (client->data.sconn)
+  if (client->data.sconn) {
     silc_server_connection_free(client->data.sconn);
+    client->data.sconn = NULL;
+  }
 
   /* We will not delete the client entry right away. We will take it
      into history (for WHOWAS command) for 5 minutes, unless we're
index 1e8e79fe129dfc61834394b9b1c93acf7bdbe891..d9fc0ffc952ad07ca7afa6dff5603f101390b555 100644 (file)
@@ -1543,7 +1543,7 @@ void silc_server_kill_client(SilcServer server,
   if (remote_client->connection) {
     /* Remove locally conneted client */
     SilcPacketStream sock = remote_client->connection;
-    silc_server_free_client_data(server, sock, remote_client, FALSE, NULL);
+    silc_server_free_sock_user_data(server, sock, NULL);
     silc_server_close_connection(server, sock);
   } else {
     /* Update statistics */