eap-radius: export function to build common attributes of Access-Request

This commit is contained in:
Martin Willi 2013-07-22 10:17:38 +02:00
parent 94ec80e74c
commit 9aeb6cea4c
2 changed files with 39 additions and 24 deletions

View File

@ -75,11 +75,6 @@ struct private_eap_radius_t {
* Prefix to prepend to EAP identity
*/
char *id_prefix;
/**
* Format string we use for Called/Calling-Station-Id for a host
*/
char *station_id_fmt;
};
/**
@ -153,21 +148,16 @@ static bool radius2ike(private_eap_radius_t *this,
}
/**
* Add a set of RADIUS attributes to a request message
* See header.
*/
static void add_radius_request_attrs(private_eap_radius_t *this,
radius_message_t *request)
void eap_radius_build_attributes(radius_message_t *request)
{
ike_sa_t *ike_sa;
host_t *host;
char buf[40];
char buf[40], *station_id_fmt;;
u_int32_t value;
chunk_t chunk;
chunk = chunk_from_str(this->id_prefix);
chunk = chunk_cata("cc", chunk, this->peer->get_encoding(this->peer));
request->add(request, RAT_USER_NAME, chunk);
/* virtual NAS-Port-Type */
value = htonl(5);
request->add(request, RAT_NAS_PORT_TYPE, chunk_from_thing(value));
@ -195,13 +185,37 @@ static void add_radius_request_attrs(private_eap_radius_t *this,
default:
break;
}
snprintf(buf, sizeof(buf), this->station_id_fmt, host);
if (lib->settings->get_bool(lib->settings,
"%s.plugins.eap-radius.station_id_with_port",
TRUE, charon->name))
{
station_id_fmt = "%#H";
}
else
{
station_id_fmt = "%H";
}
snprintf(buf, sizeof(buf), station_id_fmt, host);
request->add(request, RAT_CALLED_STATION_ID, chunk_from_str(buf));
host = ike_sa->get_other_host(ike_sa);
snprintf(buf, sizeof(buf), this->station_id_fmt, host);
snprintf(buf, sizeof(buf), station_id_fmt, host);
request->add(request, RAT_CALLING_STATION_ID, chunk_from_str(buf));
}
}
/**
* Add a set of RADIUS attributes to a request message
*/
static void add_radius_request_attrs(private_eap_radius_t *this,
radius_message_t *request)
{
chunk_t chunk;
chunk = chunk_from_str(this->id_prefix);
chunk = chunk_cata("cc", chunk, this->peer->get_encoding(this->peer));
request->add(request, RAT_USER_NAME, chunk);
eap_radius_build_attributes(request);
eap_radius_forward_from_ike(request);
}
@ -591,15 +605,6 @@ eap_radius_t *eap_radius_create(identification_t *server, identification_t *peer
"%s.plugins.eap-radius.id_prefix", "",
charon->name),
);
if (lib->settings->get_bool(lib->settings,
"%s.plugins.eap-radius.station_id_with_port", TRUE, charon->name))
{
this->station_id_fmt = "%#H";
}
else
{
this->station_id_fmt = "%H";
}
this->client = eap_radius_create_client();
if (!this->client)
{

View File

@ -57,4 +57,14 @@ eap_radius_t *eap_radius_create(identification_t *server, identification_t *peer
*/
void eap_radius_process_attributes(radius_message_t *message);
/**
* Build additional attributes for an Access-Request.
*
* Adds additional RADIUS attributes to use with Access-Request, such as
* different NAS specific attributes.
*
* @param message Access-Request message to add attributes to
*/
void eap_radius_build_attributes(radius_message_t *message);
#endif /** EAP_RADIUS_H_ @}*/