hostapd: Add optional Chargeable-User-Identity request (RFC 4372)
radius_request_cui=1 configuration parameter can now be used to configure hostapd to request CUI from the RADIUS server by including Chargeable-User-Identity attribute into Access-Request packets. Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
4e132a618e
commit
86f6053aa2
4 changed files with 30 additions and 2 deletions
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* hostapd / Configuration file parser
|
* hostapd / Configuration file parser
|
||||||
* Copyright (c) 2003-2009, Jouni Malinen <j@w1.fi>
|
* Copyright (c) 2003-2012, Jouni Malinen <j@w1.fi>
|
||||||
*
|
*
|
||||||
* This software may be distributed under the terms of the BSD license.
|
* This software may be distributed under the terms of the BSD license.
|
||||||
* See README for more details.
|
* See README for more details.
|
||||||
|
@ -1555,6 +1555,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
|
||||||
} else if (os_strcmp(buf, "radius_acct_interim_interval") == 0)
|
} else if (os_strcmp(buf, "radius_acct_interim_interval") == 0)
|
||||||
{
|
{
|
||||||
bss->acct_interim_interval = atoi(pos);
|
bss->acct_interim_interval = atoi(pos);
|
||||||
|
} else if (os_strcmp(buf, "radius_request_cui") == 0) {
|
||||||
|
bss->radius_request_cui = atoi(pos);
|
||||||
#endif /* CONFIG_NO_RADIUS */
|
#endif /* CONFIG_NO_RADIUS */
|
||||||
} else if (os_strcmp(buf, "auth_algs") == 0) {
|
} else if (os_strcmp(buf, "auth_algs") == 0) {
|
||||||
bss->auth_algs = atoi(pos);
|
bss->auth_algs = atoi(pos);
|
||||||
|
|
|
@ -632,6 +632,12 @@ own_ip_addr=127.0.0.1
|
||||||
# 60 (1 minute).
|
# 60 (1 minute).
|
||||||
#radius_acct_interim_interval=600
|
#radius_acct_interim_interval=600
|
||||||
|
|
||||||
|
# Request Chargeable-User-Identity (RFC 4372)
|
||||||
|
# This parameter can be used to configure hostapd to request CUI from the
|
||||||
|
# RADIUS server by including Chargeable-User-Identity attribute into
|
||||||
|
# Access-Request packets.
|
||||||
|
#radius_request_cui=1
|
||||||
|
|
||||||
# Dynamic VLAN mode; allow RADIUS authentication server to decide which VLAN
|
# Dynamic VLAN mode; allow RADIUS authentication server to decide which VLAN
|
||||||
# is used for the stations. This information is parsed from following RADIUS
|
# is used for the stations. This information is parsed from following RADIUS
|
||||||
# attributes based on RFC 3580 and RFC 2868: Tunnel-Type (value 13 = VLAN),
|
# attributes based on RFC 3580 and RFC 2868: Tunnel-Type (value 13 = VLAN),
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* hostapd / Configuration definitions and helpers functions
|
* hostapd / Configuration definitions and helpers functions
|
||||||
* Copyright (c) 2003-2009, Jouni Malinen <j@w1.fi>
|
* Copyright (c) 2003-2012, Jouni Malinen <j@w1.fi>
|
||||||
*
|
*
|
||||||
* This software may be distributed under the terms of the BSD license.
|
* This software may be distributed under the terms of the BSD license.
|
||||||
* See README for more details.
|
* See README for more details.
|
||||||
|
@ -177,6 +177,7 @@ struct hostapd_bss_config {
|
||||||
char *nas_identifier;
|
char *nas_identifier;
|
||||||
struct hostapd_radius_servers *radius;
|
struct hostapd_radius_servers *radius;
|
||||||
int acct_interim_interval;
|
int acct_interim_interval;
|
||||||
|
int radius_request_cui;
|
||||||
|
|
||||||
struct hostapd_ssid ssid;
|
struct hostapd_ssid ssid;
|
||||||
|
|
||||||
|
|
|
@ -541,6 +541,25 @@ static void ieee802_1x_encapsulate_radius(struct hostapd_data *hapd,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hapd->conf->radius_request_cui) {
|
||||||
|
const u8 *cui;
|
||||||
|
size_t cui_len;
|
||||||
|
/* Add previously learned CUI or nul CUI to request CUI */
|
||||||
|
if (sm->radius_cui) {
|
||||||
|
cui = wpabuf_head(sm->radius_cui);
|
||||||
|
cui_len = wpabuf_len(sm->radius_cui);
|
||||||
|
} else {
|
||||||
|
cui = (const u8 *) "\0";
|
||||||
|
cui_len = 1;
|
||||||
|
}
|
||||||
|
if (!radius_msg_add_attr(msg,
|
||||||
|
RADIUS_ATTR_CHARGEABLE_USER_IDENTITY,
|
||||||
|
cui, cui_len)) {
|
||||||
|
wpa_printf(MSG_ERROR, "Could not add CUI");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (radius_client_send(hapd->radius, msg, RADIUS_AUTH, sta->addr) < 0)
|
if (radius_client_send(hapd->radius, msg, RADIUS_AUTH, sta->addr) < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue