mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2025-02-16 09:03:05 -05:00
Interworking: Add Network Auth Type element (AP)
Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
8342185012
commit
550a3958f7
@ -2429,6 +2429,34 @@ static int hostapd_config_fill(struct hostapd_config *conf,
|
|||||||
} else if (os_strcmp(buf, "venue_name") == 0) {
|
} else if (os_strcmp(buf, "venue_name") == 0) {
|
||||||
if (parse_venue_name(bss, pos, line) < 0)
|
if (parse_venue_name(bss, pos, line) < 0)
|
||||||
errors++;
|
errors++;
|
||||||
|
} else if (os_strcmp(buf, "network_auth_type") == 0) {
|
||||||
|
u8 auth_type;
|
||||||
|
u16 redirect_url_len;
|
||||||
|
if (hexstr2bin(pos, &auth_type, 1)) {
|
||||||
|
wpa_printf(MSG_ERROR, "Line %d: Invalid "
|
||||||
|
"network_auth_type '%s'",
|
||||||
|
line, pos);
|
||||||
|
errors++;
|
||||||
|
return errors;
|
||||||
|
}
|
||||||
|
if (auth_type == 0 || auth_type == 2)
|
||||||
|
redirect_url_len = os_strlen(pos + 2);
|
||||||
|
else
|
||||||
|
redirect_url_len = 0;
|
||||||
|
os_free(bss->network_auth_type);
|
||||||
|
bss->network_auth_type =
|
||||||
|
os_malloc(redirect_url_len + 3 + 1);
|
||||||
|
if (bss->network_auth_type == NULL) {
|
||||||
|
errors++;
|
||||||
|
return errors;
|
||||||
|
}
|
||||||
|
*bss->network_auth_type = auth_type;
|
||||||
|
WPA_PUT_LE16(bss->network_auth_type + 1,
|
||||||
|
redirect_url_len);
|
||||||
|
if (redirect_url_len)
|
||||||
|
os_memcpy(bss->network_auth_type + 3,
|
||||||
|
pos + 2, redirect_url_len);
|
||||||
|
bss->network_auth_type_len = 3 + redirect_url_len;
|
||||||
} else if (os_strcmp(buf, "gas_frag_limit") == 0) {
|
} else if (os_strcmp(buf, "gas_frag_limit") == 0) {
|
||||||
bss->gas_frag_limit = atoi(pos);
|
bss->gas_frag_limit = atoi(pos);
|
||||||
} else if (os_strcmp(buf, "gas_comeback_delay") == 0) {
|
} else if (os_strcmp(buf, "gas_comeback_delay") == 0) {
|
||||||
|
@ -1325,6 +1325,18 @@ own_ip_addr=127.0.0.1
|
|||||||
#venue_name=eng:Example venue
|
#venue_name=eng:Example venue
|
||||||
#venue_name=fin:Esimerkkipaikka
|
#venue_name=fin:Esimerkkipaikka
|
||||||
|
|
||||||
|
# Network Authentication Type
|
||||||
|
# This parameter indicates what type of network authentication is used in the
|
||||||
|
# network.
|
||||||
|
# format: <network auth type indicator (1-octet hex str)> [redirect URL]
|
||||||
|
# Network Authentication Type Indicator values:
|
||||||
|
# 00 = Acceptance of terms and conditions
|
||||||
|
# 01 = On-line enrollment supported
|
||||||
|
# 02 = http/https redirection
|
||||||
|
# 03 = DNS redirection
|
||||||
|
#network_auth_type=00
|
||||||
|
#network_auth_type=02http://www.example.com/redirect/me/here/
|
||||||
|
|
||||||
##### Hotspot 2.0 #############################################################
|
##### Hotspot 2.0 #############################################################
|
||||||
|
|
||||||
# Enable Hotspot 2.0 support
|
# Enable Hotspot 2.0 support
|
||||||
|
@ -498,6 +498,7 @@ static void hostapd_config_free_bss(struct hostapd_bss_config *conf)
|
|||||||
|
|
||||||
os_free(conf->roaming_consortium);
|
os_free(conf->roaming_consortium);
|
||||||
os_free(conf->venue_name);
|
os_free(conf->venue_name);
|
||||||
|
os_free(conf->network_auth_type);
|
||||||
|
|
||||||
#ifdef CONFIG_RADIUS_TEST
|
#ifdef CONFIG_RADIUS_TEST
|
||||||
os_free(conf->dump_msk_file);
|
os_free(conf->dump_msk_file);
|
||||||
|
@ -391,6 +391,10 @@ struct hostapd_bss_config {
|
|||||||
unsigned int venue_name_count;
|
unsigned int venue_name_count;
|
||||||
struct hostapd_venue_name *venue_name;
|
struct hostapd_venue_name *venue_name;
|
||||||
|
|
||||||
|
/* IEEE 802.11u - Network Authentication Type */
|
||||||
|
u8 *network_auth_type;
|
||||||
|
size_t network_auth_type_len;
|
||||||
|
|
||||||
u16 gas_comeback_delay;
|
u16 gas_comeback_delay;
|
||||||
int gas_frag_limit;
|
int gas_frag_limit;
|
||||||
|
|
||||||
|
@ -137,6 +137,8 @@ static void anqp_add_capab_list(struct hostapd_data *hapd,
|
|||||||
wpabuf_put_le16(buf, ANQP_CAPABILITY_LIST);
|
wpabuf_put_le16(buf, ANQP_CAPABILITY_LIST);
|
||||||
if (hapd->conf->venue_name)
|
if (hapd->conf->venue_name)
|
||||||
wpabuf_put_le16(buf, ANQP_VENUE_NAME);
|
wpabuf_put_le16(buf, ANQP_VENUE_NAME);
|
||||||
|
if (hapd->conf->network_auth_type)
|
||||||
|
wpabuf_put_le16(buf, ANQP_NETWORK_AUTH_TYPE);
|
||||||
if (hapd->conf->roaming_consortium)
|
if (hapd->conf->roaming_consortium)
|
||||||
wpabuf_put_le16(buf, ANQP_ROAMING_CONSORTIUM);
|
wpabuf_put_le16(buf, ANQP_ROAMING_CONSORTIUM);
|
||||||
gas_anqp_set_element_len(buf, len);
|
gas_anqp_set_element_len(buf, len);
|
||||||
@ -163,6 +165,18 @@ static void anqp_add_venue_name(struct hostapd_data *hapd, struct wpabuf *buf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void anqp_add_network_auth_type(struct hostapd_data *hapd,
|
||||||
|
struct wpabuf *buf)
|
||||||
|
{
|
||||||
|
if (hapd->conf->network_auth_type) {
|
||||||
|
wpabuf_put_le16(buf, ANQP_NETWORK_AUTH_TYPE);
|
||||||
|
wpabuf_put_le16(buf, hapd->conf->network_auth_type_len);
|
||||||
|
wpabuf_put_data(buf, hapd->conf->network_auth_type,
|
||||||
|
hapd->conf->network_auth_type_len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void anqp_add_roaming_consortium(struct hostapd_data *hapd,
|
static void anqp_add_roaming_consortium(struct hostapd_data *hapd,
|
||||||
struct wpabuf *buf)
|
struct wpabuf *buf)
|
||||||
{
|
{
|
||||||
@ -195,6 +209,8 @@ gas_serv_build_gas_resp_payload(struct hostapd_data *hapd,
|
|||||||
anqp_add_capab_list(hapd, buf);
|
anqp_add_capab_list(hapd, buf);
|
||||||
if (request & ANQP_REQ_VENUE_NAME)
|
if (request & ANQP_REQ_VENUE_NAME)
|
||||||
anqp_add_venue_name(hapd, buf);
|
anqp_add_venue_name(hapd, buf);
|
||||||
|
if (request & ANQP_REQ_NETWORK_AUTH_TYPE)
|
||||||
|
anqp_add_network_auth_type(hapd, buf);
|
||||||
if (request & ANQP_REQ_ROAMING_CONSORTIUM)
|
if (request & ANQP_REQ_ROAMING_CONSORTIUM)
|
||||||
anqp_add_roaming_consortium(hapd, buf);
|
anqp_add_roaming_consortium(hapd, buf);
|
||||||
|
|
||||||
@ -252,6 +268,11 @@ static void rx_anqp_query_list_id(struct hostapd_data *hapd, u16 info_id,
|
|||||||
set_anqp_req(ANQP_REQ_VENUE_NAME, "Venue Name",
|
set_anqp_req(ANQP_REQ_VENUE_NAME, "Venue Name",
|
||||||
hapd->conf->venue_name != NULL, 0, 0, qi);
|
hapd->conf->venue_name != NULL, 0, 0, qi);
|
||||||
break;
|
break;
|
||||||
|
case ANQP_NETWORK_AUTH_TYPE:
|
||||||
|
set_anqp_req(ANQP_REQ_NETWORK_AUTH_TYPE, "Network Auth Type",
|
||||||
|
hapd->conf->network_auth_type != NULL,
|
||||||
|
0, 0, qi);
|
||||||
|
break;
|
||||||
case ANQP_ROAMING_CONSORTIUM:
|
case ANQP_ROAMING_CONSORTIUM:
|
||||||
set_anqp_req(ANQP_REQ_ROAMING_CONSORTIUM, "Roaming Consortium",
|
set_anqp_req(ANQP_REQ_ROAMING_CONSORTIUM, "Roaming Consortium",
|
||||||
hapd->conf->roaming_consortium != NULL, 0, 0, qi);
|
hapd->conf->roaming_consortium != NULL, 0, 0, qi);
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
(1 << (ANQP_CAPABILITY_LIST - ANQP_QUERY_LIST))
|
(1 << (ANQP_CAPABILITY_LIST - ANQP_QUERY_LIST))
|
||||||
#define ANQP_REQ_VENUE_NAME \
|
#define ANQP_REQ_VENUE_NAME \
|
||||||
(1 << (ANQP_VENUE_NAME - ANQP_QUERY_LIST))
|
(1 << (ANQP_VENUE_NAME - ANQP_QUERY_LIST))
|
||||||
|
#define ANQP_REQ_NETWORK_AUTH_TYPE \
|
||||||
|
(1 << (ANQP_NETWORK_AUTH_TYPE - ANQP_QUERY_LIST))
|
||||||
#define ANQP_REQ_ROAMING_CONSORTIUM \
|
#define ANQP_REQ_ROAMING_CONSORTIUM \
|
||||||
(1 << (ANQP_ROAMING_CONSORTIUM - ANQP_QUERY_LIST))
|
(1 << (ANQP_ROAMING_CONSORTIUM - ANQP_QUERY_LIST))
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user