mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-25 08:48:31 -05:00
WEP: Remove VLAN support from hostapd
This removes WEP with VLAN support and thus avoids increasing complexity for tagged VLANs. Signed-hostap: Michael Braun <michael-dev@fami-braun.de>
This commit is contained in:
parent
646f12ad4c
commit
d66dcb0d0b
@ -451,19 +451,6 @@ static void hostapd_config_free_bss(struct hostapd_bss_config *conf)
|
||||
os_free(conf->radius);
|
||||
os_free(conf->radius_das_shared_secret);
|
||||
hostapd_config_free_vlan(conf);
|
||||
if (conf->ssid.dyn_vlan_keys) {
|
||||
struct hostapd_ssid *ssid = &conf->ssid;
|
||||
size_t i;
|
||||
for (i = 0; i <= ssid->max_dyn_vlan_keys; i++) {
|
||||
if (ssid->dyn_vlan_keys[i] == NULL)
|
||||
continue;
|
||||
hostapd_config_free_wep(ssid->dyn_vlan_keys[i]);
|
||||
os_free(ssid->dyn_vlan_keys[i]);
|
||||
}
|
||||
os_free(ssid->dyn_vlan_keys);
|
||||
ssid->dyn_vlan_keys = NULL;
|
||||
}
|
||||
|
||||
os_free(conf->time_zone);
|
||||
|
||||
#ifdef CONFIG_IEEE80211R
|
||||
|
@ -74,8 +74,6 @@ struct hostapd_ssid {
|
||||
#ifdef CONFIG_FULL_DYNAMIC_VLAN
|
||||
char *vlan_tagged_interface;
|
||||
#endif /* CONFIG_FULL_DYNAMIC_VLAN */
|
||||
struct hostapd_wep_keys **dyn_vlan_keys;
|
||||
size_t max_dyn_vlan_keys;
|
||||
};
|
||||
|
||||
|
||||
|
@ -221,30 +221,6 @@ static int hostapd_broadcast_wep_set(struct hostapd_data *hapd)
|
||||
errors++;
|
||||
}
|
||||
|
||||
if (ssid->dyn_vlan_keys) {
|
||||
size_t i;
|
||||
for (i = 0; i <= ssid->max_dyn_vlan_keys; i++) {
|
||||
const char *ifname;
|
||||
struct hostapd_wep_keys *key = ssid->dyn_vlan_keys[i];
|
||||
if (key == NULL)
|
||||
continue;
|
||||
ifname = hostapd_get_vlan_id_ifname(hapd->conf->vlan,
|
||||
i);
|
||||
if (ifname == NULL)
|
||||
continue;
|
||||
|
||||
idx = key->idx;
|
||||
if (hostapd_drv_set_key(ifname, hapd, WPA_ALG_WEP,
|
||||
broadcast_ether_addr, idx, 1,
|
||||
NULL, 0, key->key[idx],
|
||||
key->len[idx])) {
|
||||
wpa_printf(MSG_WARNING, "Could not set "
|
||||
"dynamic VLAN WEP encryption.");
|
||||
errors++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
|
||||
|
@ -186,112 +186,11 @@ static void ieee802_1x_tx_key_one(struct hostapd_data *hapd,
|
||||
}
|
||||
|
||||
|
||||
#ifndef CONFIG_NO_VLAN
|
||||
static struct hostapd_wep_keys *
|
||||
ieee802_1x_group_alloc(struct hostapd_data *hapd, const char *ifname)
|
||||
{
|
||||
struct hostapd_wep_keys *key;
|
||||
|
||||
key = os_zalloc(sizeof(*key));
|
||||
if (key == NULL)
|
||||
return NULL;
|
||||
|
||||
key->default_len = hapd->conf->default_wep_key_len;
|
||||
|
||||
if (key->idx >= hapd->conf->broadcast_key_idx_max ||
|
||||
key->idx < hapd->conf->broadcast_key_idx_min)
|
||||
key->idx = hapd->conf->broadcast_key_idx_min;
|
||||
else
|
||||
key->idx++;
|
||||
|
||||
if (!key->key[key->idx])
|
||||
key->key[key->idx] = os_malloc(key->default_len);
|
||||
if (key->key[key->idx] == NULL ||
|
||||
random_get_bytes(key->key[key->idx], key->default_len)) {
|
||||
printf("Could not generate random WEP key (dynamic VLAN).\n");
|
||||
os_free(key->key[key->idx]);
|
||||
key->key[key->idx] = NULL;
|
||||
os_free(key);
|
||||
return NULL;
|
||||
}
|
||||
key->len[key->idx] = key->default_len;
|
||||
|
||||
wpa_printf(MSG_DEBUG, "%s: Default WEP idx %d for dynamic VLAN\n",
|
||||
ifname, key->idx);
|
||||
wpa_hexdump_key(MSG_DEBUG, "Default WEP key (dynamic VLAN)",
|
||||
key->key[key->idx], key->len[key->idx]);
|
||||
|
||||
if (hostapd_drv_set_key(ifname, hapd, WPA_ALG_WEP,
|
||||
broadcast_ether_addr, key->idx, 1,
|
||||
NULL, 0, key->key[key->idx],
|
||||
key->len[key->idx]))
|
||||
printf("Could not set dynamic VLAN WEP encryption key.\n");
|
||||
|
||||
hostapd_set_drv_ieee8021x(hapd, ifname, 1);
|
||||
|
||||
return key;
|
||||
}
|
||||
|
||||
|
||||
static struct hostapd_wep_keys *
|
||||
ieee802_1x_get_group(struct hostapd_data *hapd, struct hostapd_ssid *ssid,
|
||||
size_t vlan_id)
|
||||
{
|
||||
const char *ifname;
|
||||
|
||||
if (vlan_id == 0)
|
||||
return &ssid->wep;
|
||||
|
||||
if (vlan_id <= ssid->max_dyn_vlan_keys && ssid->dyn_vlan_keys &&
|
||||
ssid->dyn_vlan_keys[vlan_id])
|
||||
return ssid->dyn_vlan_keys[vlan_id];
|
||||
|
||||
wpa_printf(MSG_DEBUG, "IEEE 802.1X: Creating new group "
|
||||
"state machine for VLAN ID %lu",
|
||||
(unsigned long) vlan_id);
|
||||
|
||||
ifname = hostapd_get_vlan_id_ifname(hapd->conf->vlan, vlan_id);
|
||||
if (ifname == NULL) {
|
||||
wpa_printf(MSG_DEBUG, "IEEE 802.1X: Unknown VLAN ID %lu - "
|
||||
"cannot create group key state machine",
|
||||
(unsigned long) vlan_id);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (ssid->dyn_vlan_keys == NULL) {
|
||||
int size = (vlan_id + 1) * sizeof(ssid->dyn_vlan_keys[0]);
|
||||
ssid->dyn_vlan_keys = os_zalloc(size);
|
||||
if (ssid->dyn_vlan_keys == NULL)
|
||||
return NULL;
|
||||
ssid->max_dyn_vlan_keys = vlan_id;
|
||||
}
|
||||
|
||||
if (ssid->max_dyn_vlan_keys < vlan_id) {
|
||||
struct hostapd_wep_keys **na;
|
||||
int size = (vlan_id + 1) * sizeof(ssid->dyn_vlan_keys[0]);
|
||||
na = os_realloc(ssid->dyn_vlan_keys, size);
|
||||
if (na == NULL)
|
||||
return NULL;
|
||||
ssid->dyn_vlan_keys = na;
|
||||
os_memset(&ssid->dyn_vlan_keys[ssid->max_dyn_vlan_keys + 1], 0,
|
||||
(vlan_id - ssid->max_dyn_vlan_keys) *
|
||||
sizeof(ssid->dyn_vlan_keys[0]));
|
||||
ssid->max_dyn_vlan_keys = vlan_id;
|
||||
}
|
||||
|
||||
ssid->dyn_vlan_keys[vlan_id] = ieee802_1x_group_alloc(hapd, ifname);
|
||||
|
||||
return ssid->dyn_vlan_keys[vlan_id];
|
||||
}
|
||||
#endif /* CONFIG_NO_VLAN */
|
||||
|
||||
|
||||
void ieee802_1x_tx_key(struct hostapd_data *hapd, struct sta_info *sta)
|
||||
{
|
||||
struct eapol_authenticator *eapol = hapd->eapol_auth;
|
||||
struct eapol_state_machine *sm = sta->eapol_sm;
|
||||
#ifndef CONFIG_NO_VLAN
|
||||
struct hostapd_wep_keys *key = NULL;
|
||||
int vlan_id;
|
||||
#endif /* CONFIG_NO_VLAN */
|
||||
|
||||
@ -307,12 +206,9 @@ void ieee802_1x_tx_key(struct hostapd_data *hapd, struct sta_info *sta)
|
||||
vlan_id = 0;
|
||||
|
||||
if (vlan_id) {
|
||||
key = ieee802_1x_get_group(hapd, sta->ssid, vlan_id);
|
||||
if (key && key->key[key->idx])
|
||||
ieee802_1x_tx_key_one(hapd, sta, key->idx, 1,
|
||||
key->key[key->idx],
|
||||
key->len[key->idx]);
|
||||
} else
|
||||
wpa_printf(MSG_ERROR, "Using WEP with vlans is not supported.");
|
||||
return;
|
||||
}
|
||||
#endif /* CONFIG_NO_VLAN */
|
||||
if (eapol->default_wep_key) {
|
||||
ieee802_1x_tx_key_one(hapd, sta, eapol->default_wep_key_idx, 1,
|
||||
|
Loading…
Reference in New Issue
Block a user