diff options
author | Andreas Steffen <andreas.steffen@strongswan.org> | 2010-10-05 20:40:36 +0200 |
---|---|---|
committer | Andreas Steffen <andreas.steffen@strongswan.org> | 2010-10-05 20:40:36 +0200 |
commit | a1edf4d33e0d00f76abb52812f78399554b05962 (patch) | |
tree | 4dbec13a23b75502043c2f929f6af05df09b2c20 /src/libcharon/plugins/eap_radius/eap_radius.c | |
parent | 48e16e0ae1e56ca890154e039f65d02f42ae0e0a (diff) | |
download | strongswan-a1edf4d33e0d00f76abb52812f78399554b05962.tar.bz2 strongswan-a1edf4d33e0d00f76abb52812f78399554b05962.tar.xz |
use group membership to implement access/isolate redirection in filter-based TNC scenario
Diffstat (limited to 'src/libcharon/plugins/eap_radius/eap_radius.c')
-rw-r--r-- | src/libcharon/plugins/eap_radius/eap_radius.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/libcharon/plugins/eap_radius/eap_radius.c b/src/libcharon/plugins/eap_radius/eap_radius.c index 2041ced56..ec91d9670 100644 --- a/src/libcharon/plugins/eap_radius/eap_radius.c +++ b/src/libcharon/plugins/eap_radius/eap_radius.c @@ -221,13 +221,13 @@ static void process_class(private_eap_radius_t *this, radius_message_t *msg) /** * Handle the Filter-Id attribute as IPsec CHILD_SA name */ -static void process_filter(private_eap_radius_t *this, radius_message_t *msg) +static void process_filter_id(private_eap_radius_t *this, radius_message_t *msg) { enumerator_t *enumerator; - chunk_t data, filter_id = chunk_empty; int type; u_int8_t tunnel_tag; u_int32_t tunnel_type; + chunk_t filter_id = chunk_empty, data; bool is_esp_tunnel = FALSE; enumerator = msg->create_enumerator(msg); @@ -260,7 +260,17 @@ static void process_filter(private_eap_radius_t *this, radius_message_t *msg) if (is_esp_tunnel && filter_id.len) { - /* TODO filter_id specifies name of CHILD_SA to be installed */ + identification_t *id; + ike_sa_t *ike_sa; + auth_cfg_t *auth; + + ike_sa = charon->bus->get_sa(charon->bus); + if (ike_sa) + { + auth = ike_sa->get_auth_cfg(ike_sa, FALSE); + id = identification_create_from_data(filter_id); + auth->add(auth, AUTH_RULE_GROUP, id); + } } } @@ -302,7 +312,7 @@ METHOD(eap_method_t, process, status_t, } if (this->filter_id) { - process_filter(this, response); + process_filter_id(this, response); } status = SUCCESS; break; |