diff options
author | Tobias Brunner <tobias@strongswan.org> | 2012-08-21 17:11:14 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2012-08-31 11:40:27 +0200 |
commit | 78e8dca94f86b97b7df649c1c96a7fe532019a5f (patch) | |
tree | 616a674ad523879957258f298f37a815900f47c0 /src/libcharon/encoding | |
parent | 34742f1bf89d1ea734655baf86bf0b18447abcd3 (diff) | |
download | strongswan-78e8dca94f86b97b7df649c1c96a7fe532019a5f.tar.bz2 strongswan-78e8dca94f86b97b7df649c1c96a7fe532019a5f.tar.xz |
Allow clients to request a configured EAP method via EAP-Nak
Diffstat (limited to 'src/libcharon/encoding')
-rw-r--r-- | src/libcharon/encoding/payloads/eap_payload.c | 8 | ||||
-rw-r--r-- | src/libcharon/encoding/payloads/eap_payload.h | 5 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/libcharon/encoding/payloads/eap_payload.c b/src/libcharon/encoding/payloads/eap_payload.c index 4420f281b..15a9972f2 100644 --- a/src/libcharon/encoding/payloads/eap_payload.c +++ b/src/libcharon/encoding/payloads/eap_payload.c @@ -336,7 +336,8 @@ static void write_type(bio_writer_t *writer, eap_type_t type, u_int32_t vendor, /* * Described in header */ -eap_payload_t *eap_payload_create_nak(u_int8_t identifier, bool expanded) +eap_payload_t *eap_payload_create_nak(u_int8_t identifier, eap_type_t type, + u_int32_t vendor, bool expanded) { enumerator_t *enumerator; eap_type_t reg_type; @@ -356,6 +357,11 @@ eap_payload_t *eap_payload_create_nak(u_int8_t identifier, bool expanded) enumerator = charon->eap->create_enumerator(charon->eap, EAP_PEER); while (enumerator->enumerate(enumerator, ®_type, ®_vendor)) { + if ((type && type != reg_type) || + (type && vendor && vendor != reg_vendor)) + { /* the preferred type is only sent if we actually find it */ + continue; + } if (!reg_vendor || expanded) { write_type(writer, reg_type, reg_vendor, expanded); diff --git a/src/libcharon/encoding/payloads/eap_payload.h b/src/libcharon/encoding/payloads/eap_payload.h index ad8c57de1..d3c3fae28 100644 --- a/src/libcharon/encoding/payloads/eap_payload.h +++ b/src/libcharon/encoding/payloads/eap_payload.h @@ -127,10 +127,13 @@ eap_payload_t *eap_payload_create_code(eap_code_t code, u_int8_t identifier); * Creates an eap_payload_t EAP_RESPONSE containing an EAP_NAK. * * @param identifier EAP identifier to use in payload + * @param type preferred auth type, 0 to send all supported types + * @param vendor vendor identifier for auth type, 0 for default * @param expanded TRUE to send an expanded Nak (as response to an expanded * request, i.e. one with vendor specific type) * @return eap_payload_t object */ -eap_payload_t *eap_payload_create_nak(u_int8_t identifier, bool expanded); +eap_payload_t *eap_payload_create_nak(u_int8_t identifier, eap_type_t type, + u_int32_t vendor, bool expanded); #endif /** EAP_PAYLOAD_H_ @}*/ |