eap-radius: export function to process common attributes of Access-Accept

This commit is contained in:
Martin Willi
2013-07-29 09:00:48 +02:00
parent 7612a6e42f
commit 94ec80e74c
2 changed files with 36 additions and 31 deletions
+24 -31
View File
@@ -76,16 +76,6 @@ struct private_eap_radius_t {
*/ */
char *id_prefix; char *id_prefix;
/**
* Handle the Class attribute as group membership information?
*/
bool class_group;
/**
* Handle the Filter-Id attribute as IPsec CHILD_SA name?
*/
bool filter_id;
/** /**
* Format string we use for Called/Calling-Station-Id for a host * Format string we use for Called/Calling-Station-Id for a host
*/ */
@@ -268,7 +258,7 @@ METHOD(eap_method_t, initiate, status_t,
/** /**
* Handle the Class attribute as group membership information * Handle the Class attribute as group membership information
*/ */
static void process_class(private_eap_radius_t *this, radius_message_t *msg) static void process_class(radius_message_t *msg)
{ {
enumerator_t *enumerator; enumerator_t *enumerator;
chunk_t data; chunk_t data;
@@ -305,7 +295,7 @@ static void process_class(private_eap_radius_t *this, radius_message_t *msg)
/** /**
* Handle the Filter-Id attribute as IPsec CHILD_SA name * Handle the Filter-Id attribute as IPsec CHILD_SA name
*/ */
static void process_filter_id(private_eap_radius_t *this, radius_message_t *msg) static void process_filter_id(radius_message_t *msg)
{ {
enumerator_t *enumerator; enumerator_t *enumerator;
int type; int type;
@@ -361,7 +351,7 @@ static void process_filter_id(private_eap_radius_t *this, radius_message_t *msg)
/** /**
* Handle Session-Timeout attribte and Interim updates * Handle Session-Timeout attribte and Interim updates
*/ */
static void process_timeout(private_eap_radius_t *this, radius_message_t *msg) static void process_timeout(radius_message_t *msg)
{ {
enumerator_t *enumerator; enumerator_t *enumerator;
ike_sa_t *ike_sa; ike_sa_t *ike_sa;
@@ -390,8 +380,7 @@ static void process_timeout(private_eap_radius_t *this, radius_message_t *msg)
/** /**
* Handle Framed-IP-Address and other IKE configuration attributes * Handle Framed-IP-Address and other IKE configuration attributes
*/ */
static void process_cfg_attributes(private_eap_radius_t *this, static void process_cfg_attributes(radius_message_t *msg)
radius_message_t *msg)
{ {
eap_radius_provider_t *provider; eap_radius_provider_t *provider;
enumerator_t *enumerator; enumerator_t *enumerator;
@@ -444,6 +433,25 @@ static void process_cfg_attributes(private_eap_radius_t *this,
} }
} }
/**
* See header.
*/
void eap_radius_process_attributes(radius_message_t *message)
{
if (lib->settings->get_bool(lib->settings,
"%s.plugins.eap-radius.class_group", FALSE, charon->name))
{
process_class(message);
}
if (lib->settings->get_bool(lib->settings,
"%s.plugins.eap-radius.filter_id", FALSE, charon->name))
{
process_filter_id(message);
}
process_timeout(message);
process_cfg_attributes(message);
}
METHOD(eap_method_t, process, status_t, METHOD(eap_method_t, process, status_t,
private_eap_radius_t *this, eap_payload_t *in, eap_payload_t **out) private_eap_radius_t *this, eap_payload_t *in, eap_payload_t **out)
{ {
@@ -481,16 +489,7 @@ METHOD(eap_method_t, process, status_t,
status = FAILED; status = FAILED;
break; break;
case RMC_ACCESS_ACCEPT: case RMC_ACCESS_ACCEPT:
if (this->class_group) eap_radius_process_attributes(response);
{
process_class(this, response);
}
if (this->filter_id)
{
process_filter_id(this, response);
}
process_timeout(this, response);
process_cfg_attributes(this, response);
DBG1(DBG_IKE, "RADIUS authentication of '%Y' successful", DBG1(DBG_IKE, "RADIUS authentication of '%Y' successful",
this->peer); this->peer);
status = SUCCESS; status = SUCCESS;
@@ -591,12 +590,6 @@ eap_radius_t *eap_radius_create(identification_t *server, identification_t *peer
.id_prefix = lib->settings->get_str(lib->settings, .id_prefix = lib->settings->get_str(lib->settings,
"%s.plugins.eap-radius.id_prefix", "", "%s.plugins.eap-radius.id_prefix", "",
charon->name), charon->name),
.class_group = lib->settings->get_bool(lib->settings,
"%s.plugins.eap-radius.class_group", FALSE,
charon->name),
.filter_id = lib->settings->get_bool(lib->settings,
"%s.plugins.eap-radius.filter_id", FALSE,
charon->name),
); );
if (lib->settings->get_bool(lib->settings, if (lib->settings->get_bool(lib->settings,
"%s.plugins.eap-radius.station_id_with_port", TRUE, charon->name)) "%s.plugins.eap-radius.station_id_with_port", TRUE, charon->name))
@@ -24,6 +24,7 @@
typedef struct eap_radius_t eap_radius_t; typedef struct eap_radius_t eap_radius_t;
#include <sa/eap/eap_method.h> #include <sa/eap/eap_method.h>
#include <radius_message.h>
/** /**
* Implementation of the eap_method_t interface using a RADIUS server. * Implementation of the eap_method_t interface using a RADIUS server.
@@ -45,4 +46,15 @@ struct eap_radius_t {
*/ */
eap_radius_t *eap_radius_create(identification_t *server, identification_t *peer); eap_radius_t *eap_radius_create(identification_t *server, identification_t *peer);
/**
* Process additional attributes from an Access-Accept.
*
* Parses and applies additional authorization attributes from an Accept
* message, such as group membership information or IKE configuration
* attributes.
*
* @param message Access-Accept message to process
*/
void eap_radius_process_attributes(radius_message_t *message);
#endif /** EAP_RADIUS_H_ @}*/ #endif /** EAP_RADIUS_H_ @}*/