giving up EAP-SIM authentication after 3 failed challenges

This commit is contained in:
Martin Willi
2007-03-27 06:24:17 +00:00
parent 1bf8530507
commit b34f86f545
@@ -27,6 +27,8 @@
#include <daemon.h> #include <daemon.h>
#include <library.h> #include <library.h>
#define MAX_TRIES 3
ENUM(sim_subtype_names, SIM_START, SIM_CLIENT_ERROR, ENUM(sim_subtype_names, SIM_START, SIM_CLIENT_ERROR,
"SIM_START", "SIM_START",
"SIM_CHALLENGE", "SIM_CHALLENGE",
@@ -98,6 +100,11 @@ struct private_eap_sim_t {
*/ */
void *handle; void *handle;
/**
* how many times we try to authenticate
*/
int tries;
/** /**
* version this implementation uses * version this implementation uses
*/ */
@@ -421,6 +428,13 @@ static status_t process_challenge(private_eap_sim_t *this, eap_payload_t *in,
hasher_t *hasher; hasher_t *hasher;
prf_t *prf; 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); identifier = in->get_identifier(in);
message = in->get_data(in); message = in->get_data(in);
read_header(&message); read_header(&message);
@@ -676,6 +690,7 @@ eap_sim_t *eap_create(eap_role_t role,
/* private data */ /* private data */
this->peer = peer; this->peer = peer;
this->tries = MAX_TRIES;
this->version.ptr = version; this->version.ptr = version;
this->version.len = sizeof(version); this->version.len = sizeof(version);
this->version_list = chunk_empty; this->version_list = chunk_empty;