From aff29861afd2c1344bde46f8d997a53919274a1a Mon Sep 17 00:00:00 2001 From: Skywing Date: Sat, 13 Dec 2008 14:15:15 -0500 Subject: [PATCH] Cancel future rekeys on a detaching client connection. 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 | 3 +++ apps/silcd/server.c | 12 ++++++++++++ apps/silcd/server.h | 1 + 3 files changed, 16 insertions(+) diff --git a/apps/silcd/command.c b/apps/silcd/command.c index 698b2265..f68edccd 100644 --- a/apps/silcd/command.c +++ b/apps/silcd/command.c @@ -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; diff --git a/apps/silcd/server.c b/apps/silcd/server.c index dad1a44e..3d0623ac 100644 --- a/apps/silcd/server.c +++ b/apps/silcd/server.c @@ -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) diff --git a/apps/silcd/server.h b/apps/silcd/server.h index 84ed585b..81a6f3d9 100644 --- a/apps/silcd/server.h +++ b/apps/silcd/server.h @@ -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, -- 2.24.0