Fix RADIUS Called-Station-Id to not escape SSID
Commit986de33d5c
('Convert remaining SSID routines from char* to u8*') started using wpa_ssid_txt() to print out the SSID for the Called-Station-Id attribute in RADIUS messages. This was further modified by commit6bc1f95613
('Use printf escaping in SSID-to-printable-string conversion') to use printf escaping (though, even without this, wpa_ssid_txt() would have masked characters). This is not desired for Called-Station-Id attribute. While it is defined as a "String", RFC 2865 indicates that "a robust implementation SHOULD support the field as undistinguished octets.". Copy the SSID as an array of arbitrary octets into Called-Station-Id to avoid any kind of masking or escaping behavior. This goes a step further from the initial implementation by allowing even the possible (but unlikely in practical use cases) 0x00 octet in the middle of an SSID. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
52811b8c90
commit
5bd9be4d17
1 changed files with 7 additions and 6 deletions
|
@ -475,6 +475,7 @@ int add_common_radius_attr(struct hostapd_data *hapd,
|
||||||
{
|
{
|
||||||
char buf[128];
|
char buf[128];
|
||||||
struct hostapd_radius_attr *attr;
|
struct hostapd_radius_attr *attr;
|
||||||
|
int len;
|
||||||
|
|
||||||
if (!hostapd_config_get_radius_attr(req_attr,
|
if (!hostapd_config_get_radius_attr(req_attr,
|
||||||
RADIUS_ATTR_NAS_IP_ADDRESS) &&
|
RADIUS_ATTR_NAS_IP_ADDRESS) &&
|
||||||
|
@ -506,15 +507,15 @@ int add_common_radius_attr(struct hostapd_data *hapd,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
os_snprintf(buf, sizeof(buf), RADIUS_802_1X_ADDR_FORMAT ":%s",
|
len = os_snprintf(buf, sizeof(buf), RADIUS_802_1X_ADDR_FORMAT ":",
|
||||||
MAC2STR(hapd->own_addr),
|
MAC2STR(hapd->own_addr));
|
||||||
wpa_ssid_txt(hapd->conf->ssid.ssid,
|
os_memcpy(&buf[len], hapd->conf->ssid.ssid,
|
||||||
hapd->conf->ssid.ssid_len));
|
hapd->conf->ssid.ssid_len);
|
||||||
buf[sizeof(buf) - 1] = '\0';
|
len += hapd->conf->ssid.ssid_len;
|
||||||
if (!hostapd_config_get_radius_attr(req_attr,
|
if (!hostapd_config_get_radius_attr(req_attr,
|
||||||
RADIUS_ATTR_CALLED_STATION_ID) &&
|
RADIUS_ATTR_CALLED_STATION_ID) &&
|
||||||
!radius_msg_add_attr(msg, RADIUS_ATTR_CALLED_STATION_ID,
|
!radius_msg_add_attr(msg, RADIUS_ATTR_CALLED_STATION_ID,
|
||||||
(u8 *) buf, os_strlen(buf))) {
|
(u8 *) buf, len)) {
|
||||||
wpa_printf(MSG_ERROR, "Could not add Called-Station-Id");
|
wpa_printf(MSG_ERROR, "Could not add Called-Station-Id");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue