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:
parent
c3d45e130a
commit
6cb8f4f382
6 changed files with 47 additions and 0 deletions
|
@ -3629,6 +3629,11 @@ static int hostapd_config_fill(struct hostapd_config *conf,
|
||||||
bss->subscr_remediation_url = os_strdup(pos);
|
bss->subscr_remediation_url = os_strdup(pos);
|
||||||
} else if (os_strcmp(buf, "subscr_remediation_method") == 0) {
|
} else if (os_strcmp(buf, "subscr_remediation_method") == 0) {
|
||||||
bss->subscr_remediation_method = atoi(pos);
|
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 */
|
#endif /* CONFIG_HS20 */
|
||||||
#ifdef CONFIG_MBO
|
#ifdef CONFIG_MBO
|
||||||
} else if (os_strcmp(buf, "mbo") == 0) {
|
} else if (os_strcmp(buf, "mbo") == 0) {
|
||||||
|
|
|
@ -2158,6 +2158,18 @@ own_ip_addr=127.0.0.1
|
||||||
# channels 36-48):
|
# channels 36-48):
|
||||||
#hs20_operating_class=5173
|
#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
|
# OSU and Operator icons
|
||||||
# <Icon Width>:<Icon Height>:<Language code>:<Icon Type>:<Name>:<file path>
|
# <Icon Width>:<Icon Height>:<Language code>:<Icon Type>:<Name>:<file path>
|
||||||
#hs20_icon=32:32:eng:image/png:icon32:/tmp/icon32.png
|
#hs20_icon=32:32:eng:image/png:icon32:/tmp/icon32.png
|
||||||
|
|
|
@ -620,6 +620,7 @@ void hostapd_config_free_bss(struct hostapd_bss_config *conf)
|
||||||
os_free(conf->hs20_operator_icon);
|
os_free(conf->hs20_operator_icon);
|
||||||
}
|
}
|
||||||
os_free(conf->subscr_remediation_url);
|
os_free(conf->subscr_remediation_url);
|
||||||
|
os_free(conf->t_c_filename);
|
||||||
#endif /* CONFIG_HS20 */
|
#endif /* CONFIG_HS20 */
|
||||||
|
|
||||||
wpabuf_free(conf->vendor_elements);
|
wpabuf_free(conf->vendor_elements);
|
||||||
|
|
|
@ -585,6 +585,8 @@ struct hostapd_bss_config {
|
||||||
unsigned int hs20_deauth_req_timeout;
|
unsigned int hs20_deauth_req_timeout;
|
||||||
char *subscr_remediation_url;
|
char *subscr_remediation_url;
|
||||||
u8 subscr_remediation_method;
|
u8 subscr_remediation_method;
|
||||||
|
char *t_c_filename;
|
||||||
|
u32 t_c_timestamp;
|
||||||
#endif /* CONFIG_HS20 */
|
#endif /* CONFIG_HS20 */
|
||||||
|
|
||||||
u8 wps_rf_bands; /* RF bands for WPS (WPS_RF_*) */
|
u8 wps_rf_bands; /* RF bands for WPS (WPS_RF_*) */
|
||||||
|
|
|
@ -722,6 +722,31 @@ void ieee802_1x_encapsulate_radius(struct hostapd_data *hapd,
|
||||||
"Could not add HS 2.0 Roaming Consortium");
|
"Could not add HS 2.0 Roaming Consortium");
|
||||||
goto fail;
|
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 *) ×tamp,
|
||||||
|
sizeof(timestamp))) {
|
||||||
|
wpa_printf(MSG_ERROR,
|
||||||
|
"Could not add HS 2.0 Timestamp");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_HS20 */
|
#endif /* CONFIG_HS20 */
|
||||||
|
|
||||||
|
|
|
@ -199,6 +199,8 @@ enum {
|
||||||
RADIUS_VENDOR_ATTR_WFA_HS20_DEAUTH_REQ = 4,
|
RADIUS_VENDOR_ATTR_WFA_HS20_DEAUTH_REQ = 4,
|
||||||
RADIUS_VENDOR_ATTR_WFA_HS20_SESSION_INFO_URL = 5,
|
RADIUS_VENDOR_ATTR_WFA_HS20_SESSION_INFO_URL = 5,
|
||||||
RADIUS_VENDOR_ATTR_WFA_HS20_ROAMING_CONSORTIUM = 6,
|
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
|
#ifdef _MSC_VER
|
||||||
|
|
Loading…
Reference in a new issue