aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libcharon/plugins/eap_ttls/eap_ttls.c2
-rw-r--r--src/libcharon/plugins/eap_ttls/eap_ttls_peer.c40
-rw-r--r--src/libcharon/plugins/eap_ttls/eap_ttls_peer.h7
3 files changed, 37 insertions, 12 deletions
diff --git a/src/libcharon/plugins/eap_ttls/eap_ttls.c b/src/libcharon/plugins/eap_ttls/eap_ttls.c
index 04ae13854..56713c302 100644
--- a/src/libcharon/plugins/eap_ttls/eap_ttls.c
+++ b/src/libcharon/plugins/eap_ttls/eap_ttls.c
@@ -456,5 +456,5 @@ eap_ttls_t *eap_ttls_create_peer(identification_t *server,
identification_t *peer)
{
return eap_ttls_create(server, peer, FALSE,
- &eap_ttls_peer_create(peer)->application);
+ &eap_ttls_peer_create(server, peer)->application);
}
diff --git a/src/libcharon/plugins/eap_ttls/eap_ttls_peer.c b/src/libcharon/plugins/eap_ttls/eap_ttls_peer.c
index f0a8d625b..ca6098043 100644
--- a/src/libcharon/plugins/eap_ttls/eap_ttls_peer.c
+++ b/src/libcharon/plugins/eap_ttls/eap_ttls_peer.c
@@ -16,6 +16,8 @@
#include "eap_ttls_peer.h"
#include <debug.h>
+#include <daemon.h>
+
#include <sa/authenticators/eap/eap_method.h>
#define AVP_EAP_MESSAGE 79
@@ -33,6 +35,11 @@ struct private_eap_ttls_peer_t {
eap_ttls_peer_t public;
/**
+ * Server identity
+ */
+ identification_t *server;
+
+ /**
* Peer identity
*/
identification_t *peer;
@@ -115,14 +122,27 @@ METHOD(tls_application_t, build, status_t,
{
if (this->start_phase2)
{
- chunk_t data = chunk_from_chars(
- EAP_RESPONSE, 0x00, 0x00, 25,
- EAP_IDENTITY,
- 'c', 'a', 'r', 'o', 'l', '@', 's', 't', 'r', 'o', 'n', 'g',
- 's', 'w', 'a', 'n', '.', 'o', 'r', 'g');
-
+ chunk_t data;
+ eap_method_t *method;
+ eap_payload_t *res;
+
+ /* generate an EAP Identity response */
+ method = charon->eap->create_instance(charon->eap, EAP_IDENTITY, 0,
+ EAP_PEER, this->server, this->peer);
+ if (!method)
+ {
+ DBG1(DBG_IKE, "EAP_IDENTITY method not available");
+ return FAILED;
+ }
+ method->process(method, NULL, &res);
+ method->destroy(method);
+
+ /* get the raw EAP message data */
+ data = res->get_data(res);
DBG2(DBG_IKE, "sending EAP message: %B", &data);
send_avp_eap_message(writer, data);
+
+ res->destroy(res);
this->start_phase2 = FALSE;
}
return INVALID_STATE;
@@ -131,13 +151,16 @@ METHOD(tls_application_t, build, status_t,
METHOD(tls_application_t, destroy, void,
private_eap_ttls_peer_t *this)
{
+ this->server->destroy(this->server);
+ this->peer->destroy(this->peer);
free(this);
}
/**
* See header
*/
-eap_ttls_peer_t *eap_ttls_peer_create(identification_t *peer)
+eap_ttls_peer_t *eap_ttls_peer_create(identification_t *server,
+ identification_t *peer)
{
private_eap_ttls_peer_t *this;
@@ -147,7 +170,8 @@ eap_ttls_peer_t *eap_ttls_peer_create(identification_t *peer)
.build = _build,
.destroy = _destroy,
},
- .peer = peer,
+ .server = server->clone(server),
+ .peer = peer->clone(peer),
.start_phase2 = TRUE,
);
diff --git a/src/libcharon/plugins/eap_ttls/eap_ttls_peer.h b/src/libcharon/plugins/eap_ttls/eap_ttls_peer.h
index 0338f2631..31fc0d9db 100644
--- a/src/libcharon/plugins/eap_ttls/eap_ttls_peer.h
+++ b/src/libcharon/plugins/eap_ttls/eap_ttls_peer.h
@@ -14,8 +14,8 @@
*/
/**
- * @defgroup tls_peer tls_peer
- * @{ @ingroup libtls
+ * @defgroup eap_ttls_peer eap_ttls_peer
+ * @{ @ingroup eap_ttls
*/
#ifndef EAP_TTLS_PEER_H_
@@ -41,6 +41,7 @@ struct eap_ttls_peer_t {
/**
* Create an eap_ttls_peer instance.
*/
-eap_ttls_peer_t *eap_ttls_peer_create(identification_t *peer);
+eap_ttls_peer_t *eap_ttls_peer_create(identification_t *server,
+ identification_t *peer);
#endif /** EAP_TTLS_PEER_H_ @}*/