diff options
Diffstat (limited to 'src/charon/plugins/eap_radius/eap_radius.c')
-rw-r--r-- | src/charon/plugins/eap_radius/eap_radius.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/charon/plugins/eap_radius/eap_radius.c b/src/charon/plugins/eap_radius/eap_radius.c index 1a02c5acf..ee2477440 100644 --- a/src/charon/plugins/eap_radius/eap_radius.c +++ b/src/charon/plugins/eap_radius/eap_radius.c @@ -11,8 +11,6 @@ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. - * - * $Id$ */ #include "eap_radius.h" @@ -22,7 +20,6 @@ #include <daemon.h> - typedef struct private_eap_radius_t private_eap_radius_t; /** @@ -64,6 +61,11 @@ struct private_eap_radius_t { * RADIUS client instance */ radius_client_t *client; + + /** + * TRUE to use EAP-Start, FALSE to send EAP-Identity Response directly + */ + bool eap_start; }; /** @@ -137,7 +139,16 @@ static status_t initiate(private_eap_radius_t *this, eap_payload_t **out) request = radius_message_create_request(); request->add(request, RAT_USER_NAME, this->peer->get_encoding(this->peer)); - add_eap_identity(this, request); + + if (this->eap_start) + { + request->add(request, RAT_EAP_MESSAGE, chunk_empty); + } + else + { + add_eap_identity(this, request); + } + response = this->client->request(this->client, request); if (response) { @@ -270,6 +281,8 @@ eap_radius_t *eap_radius_create(identification_t *server, identification_t *peer this->type = EAP_RADIUS; this->vendor = 0; this->msk = chunk_empty; + this->eap_start = lib->settings->get_bool(lib->settings, + "charon.plugins.eap_radius.eap_start", FALSE); return &this->public; } |