Cancel future rekeys on a detaching client connection.
authorSkywing <skywing@valhallalegends.com>
Sat, 13 Dec 2008 19:15:15 +0000 (14:15 -0500)
committerSkywing <skywing@valhallalegends.com>
Sat, 13 Dec 2008 19:16:29 +0000 (14:16 -0500)
Previously, these wouldn't be cancelled properly, and might result in
some complaints from the SILC SKE library due to bad parameters.

apps/silcd/command.c
apps/silcd/server.c
apps/silcd/server.h

index 698b22657ac1c719dbfc455c7ae8e6a45ffb6a7f..f68edccdc589984e4c364c4e4220df0ad1636201 100644 (file)
@@ -4074,6 +4074,9 @@ SILC_TASK_CALLBACK(silc_server_command_detach_cb)
   if (client && client->connection) {
     sock = client->connection;
 
+    /* Stop rekey for the client. */
+    silc_server_stop_rekey(server, client);
+
     /* Close the connection on our side */
     client->router = NULL;
     client->connection = NULL;
index dad1a44e268343eb98652e9c6366d526a42bb8a6..3d0623aca8c3aa2071299e4f0cd6b5f895f09158 100644 (file)
@@ -2903,6 +2903,18 @@ static void silc_server_rekey_completion(SilcSKE ske,
                                 sock, idata->sconn->rekey_timeout, 0);
 }
 
+/* Helper to stop future rekeys on a link. */
+void silc_server_stop_rekey(SilcServer server, SilcClientEntry client)
+{
+  if (!client->connection)
+    return;
+
+  SILC_LOG_DEBUG(("Stopping rekey for client %p", client));
+
+  silc_schedule_task_del_by_all(server->schedule, 0, silc_server_do_rekey,
+                               client->connection);
+}
+
 /* Rekey callback.  Start rekey as initiator */
 
 SILC_TASK_CALLBACK(silc_server_do_rekey)
index 84ed585b79565f047e7d440c369cb709361d071e..81a6f3d9b43383688fa5a39b0ea975e2db095001 100644 (file)
@@ -139,6 +139,7 @@ SilcBool silc_server_rehash(SilcServer server);
 void silc_server_run(SilcServer server);
 void silc_server_stop(SilcServer server);
 void silc_server_start_key_exchange(SilcServerConnection sconn);
+void silc_server_stop_rekey(SilcServer server, SilcClientEntry client);
 void silc_server_create_connection(SilcServer server,
                                   SilcBool reconnect,
                                   SilcBool dynamic,