From b34f86f54512539089aac4fef1197fa1f8b1da8a Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Tue, 27 Mar 2007 06:24:17 +0000 Subject: [PATCH] giving up EAP-SIM authentication after 3 failed challenges --- src/charon/sa/authenticators/eap/eap_sim.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/charon/sa/authenticators/eap/eap_sim.c b/src/charon/sa/authenticators/eap/eap_sim.c index da9df6e35..3dc59fb6b 100644 --- a/src/charon/sa/authenticators/eap/eap_sim.c +++ b/src/charon/sa/authenticators/eap/eap_sim.c @@ -27,6 +27,8 @@ #include #include +#define MAX_TRIES 3 + ENUM(sim_subtype_names, SIM_START, SIM_CLIENT_ERROR, "SIM_START", "SIM_CHALLENGE", @@ -98,6 +100,11 @@ struct private_eap_sim_t { */ void *handle; + /** + * how many times we try to authenticate + */ + int tries; + /** * version this implementation uses */ @@ -420,6 +427,13 @@ static status_t process_challenge(private_eap_sim_t *this, eap_payload_t *in, signer_t *signer; hasher_t *hasher; prf_t *prf; + + if (this->tries-- <= 0) + { + /* give up without notification. This hack is required as some buggy + * server implementations won't respect our client-error. */ + return FAILED; + } identifier = in->get_identifier(in); message = in->get_data(in); @@ -676,6 +690,7 @@ eap_sim_t *eap_create(eap_role_t role, /* private data */ this->peer = peer; + this->tries = MAX_TRIES; this->version.ptr = version; this->version.len = sizeof(version); this->version_list = chunk_empty;