HS 2.0: Terms and Conditions attributes in Access-Request messages

This extends hostapd with two new configuration parameters
(hs20_t_c_filename and hs20_t_c_timestamp) that can be used to specify
that the Terms and Conditions attributes are to be added into all
Access-Request messages for Hotspot 2.0 STAs.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
Jouni Malinen 2018-04-23 21:10:52 +03:00 committed by Jouni Malinen
parent c3d45e130a
commit 6cb8f4f382
6 changed files with 47 additions and 0 deletions

View File

@ -3629,6 +3629,11 @@ static int hostapd_config_fill(struct hostapd_config *conf,
bss->subscr_remediation_url = os_strdup(pos);
} else if (os_strcmp(buf, "subscr_remediation_method") == 0) {
bss->subscr_remediation_method = atoi(pos);
} else if (os_strcmp(buf, "hs20_t_c_filename") == 0) {
os_free(bss->t_c_filename);
bss->t_c_filename = os_strdup(pos);
} else if (os_strcmp(buf, "hs20_t_c_timestamp") == 0) {
bss->t_c_timestamp = strtol(pos, NULL, 0);
#endif /* CONFIG_HS20 */
#ifdef CONFIG_MBO
} else if (os_strcmp(buf, "mbo") == 0) {

View File

@ -2158,6 +2158,18 @@ own_ip_addr=127.0.0.1
# channels 36-48):
#hs20_operating_class=5173
# Terms and Conditions information
#
# hs20_t_c_filename contains the Terms and Conditions filename that the AP
# indicates in RADIUS Access-Request messages.
#hs20_t_c_filename=terms-and-conditions
#
# hs20_t_c_timestamp contains the Terms and Conditions timestamp that the AP
# indicates in RADIUS Access-Request messages. Usually, this contains the number
# of seconds since January 1, 1970 00:00 UTC showing the time when the file was
# last modified.
#hs20_t_c_timestamp=1234567
# OSU and Operator icons
# <Icon Width>:<Icon Height>:<Language code>:<Icon Type>:<Name>:<file path>
#hs20_icon=32:32:eng:image/png:icon32:/tmp/icon32.png

View File

@ -620,6 +620,7 @@ void hostapd_config_free_bss(struct hostapd_bss_config *conf)
os_free(conf->hs20_operator_icon);
}
os_free(conf->subscr_remediation_url);
os_free(conf->t_c_filename);
#endif /* CONFIG_HS20 */
wpabuf_free(conf->vendor_elements);

View File

@ -585,6 +585,8 @@ struct hostapd_bss_config {
unsigned int hs20_deauth_req_timeout;
char *subscr_remediation_url;
u8 subscr_remediation_method;
char *t_c_filename;
u32 t_c_timestamp;
#endif /* CONFIG_HS20 */
u8 wps_rf_bands; /* RF bands for WPS (WPS_RF_*) */

View File

@ -722,6 +722,31 @@ void ieee802_1x_encapsulate_radius(struct hostapd_data *hapd,
"Could not add HS 2.0 Roaming Consortium");
goto fail;
}
if (hapd->conf->t_c_filename) {
be32 timestamp;
if (!radius_msg_add_wfa(
msg,
RADIUS_VENDOR_ATTR_WFA_HS20_T_C_FILENAME,
(const u8 *) hapd->conf->t_c_filename,
os_strlen(hapd->conf->t_c_filename))) {
wpa_printf(MSG_ERROR,
"Could not add HS 2.0 T&C Filename");
goto fail;
}
timestamp = host_to_be32(hapd->conf->t_c_timestamp);
if (!radius_msg_add_wfa(
msg,
RADIUS_VENDOR_ATTR_WFA_HS20_TIMESTAMP,
(const u8 *) &timestamp,
sizeof(timestamp))) {
wpa_printf(MSG_ERROR,
"Could not add HS 2.0 Timestamp");
goto fail;
}
}
}
#endif /* CONFIG_HS20 */

View File

@ -199,6 +199,8 @@ enum {
RADIUS_VENDOR_ATTR_WFA_HS20_DEAUTH_REQ = 4,
RADIUS_VENDOR_ATTR_WFA_HS20_SESSION_INFO_URL = 5,
RADIUS_VENDOR_ATTR_WFA_HS20_ROAMING_CONSORTIUM = 6,
RADIUS_VENDOR_ATTR_WFA_HS20_T_C_FILENAME = 7,
RADIUS_VENDOR_ATTR_WFA_HS20_TIMESTAMP = 8,
};
#ifdef _MSC_VER