From: Alex Badea Date: Wed, 9 Sep 2009 20:54:03 +0000 (+0300) Subject: radius_server: clean up completed sessions sooner X-Git-Tag: hostap_0_7_0~189 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7598210b79ce6d0736892fc4a68caed8f6bc0e6f;p=thirdparty%2Fhostap.git radius_server: clean up completed sessions sooner radius_server_encapsulate_eap() resets sess->eap->if->eap{Success,Fail} to FALSE, such that the completion condition is never true. The net effect is that completed sessions would linger for RADIUS_SESSION_TIMEOUT seconds. Signed-off-by: Alex Badea Previously, the default settings allowed 100 sessions in 60 seconds. With this fix, the default limit is now 100 sessions per 10 seconds. [Bug 329] --- diff --git a/src/radius/radius_server.c b/src/radius/radius_server.c index f69175240..1fb09c07b 100644 --- a/src/radius/radius_server.c +++ b/src/radius/radius_server.c @@ -493,6 +493,7 @@ static int radius_server_request(struct radius_server_data *data, unsigned int state; struct radius_session *sess; struct radius_msg *reply; + int is_complete = 0; if (force_sess) sess = force_sess; @@ -603,6 +604,9 @@ static int radius_server_request(struct radius_server_data *data, return -1; } + if (sess->eap_if->eapSuccess || sess->eap_if->eapFail) + is_complete = 1; + reply = radius_server_encapsulate_eap(data, client, sess, msg); if (reply) { @@ -644,7 +648,7 @@ static int radius_server_request(struct radius_server_data *data, client->counters.packets_dropped++; } - if (sess->eap_if->eapSuccess || sess->eap_if->eapFail) { + if (is_complete) { RADIUS_DEBUG("Removing completed session 0x%x after timeout", sess->sess_id); eloop_cancel_timeout(radius_server_session_remove_timeout,