With this change, eapol_sm.c does not need to dereference main hostapd
structures anymore (i.e., hostapd.h is not needed to be included).
#include "ieee802_1x.h"
#include "eapol_sm.h"
#include "eloop.h"
#include "ieee802_1x.h"
#include "eapol_sm.h"
#include "eloop.h"
sm->portControl = Auto;
if (!eapol->conf.wpa &&
sm->portControl = Auto;
if (!eapol->conf.wpa &&
- (hapd->default_wep_key || eapol->conf.individual_wep_key_len > 0))
+ (eapol->default_wep_key || eapol->conf.individual_wep_key_len > 0))
sm->keyTxEnabled = TRUE;
else
sm->keyTxEnabled = FALSE;
sm->keyTxEnabled = TRUE;
else
sm->keyTxEnabled = FALSE;
+ if (conf->individual_wep_key_len > 0) {
+ /* use key0 in individual key and key1 in broadcast key */
+ eapol->default_wep_key_idx = 1;
+ }
+
eapol->cb.eapol_send = cb->eapol_send;
eapol->cb.aaa_send = cb->aaa_send;
eapol->cb.finished = cb->finished;
eapol->cb.eapol_send = cb->eapol_send;
eapol->cb.aaa_send = cb->aaa_send;
eapol->cb.finished = cb->finished;
return;
eapol_auth_conf_free(&eapol->conf);
return;
eapol_auth_conf_free(&eapol->conf);
+ os_free(eapol->default_wep_key);
struct eapol_authenticator {
struct eapol_auth_config conf;
struct eapol_auth_cb cb;
struct eapol_authenticator {
struct eapol_auth_config conf;
struct eapol_auth_cb cb;
+
+ u8 *default_wep_key;
+ u8 default_wep_key_idx;
{
hostapd_ctrl_iface_deinit(hapd);
{
hostapd_ctrl_iface_deinit(hapd);
- os_free(hapd->default_wep_key);
- hapd->default_wep_key = NULL;
iapp_deinit(hapd->iapp);
hapd->iapp = NULL;
accounting_deinit(hapd);
iapp_deinit(hapd->iapp);
hapd->iapp = NULL;
accounting_deinit(hapd);
hapd->conf = bss;
hapd->iface = hapd_iface;
hapd->conf = bss;
hapd->iface = hapd_iface;
- if (hapd->conf->individual_wep_key_len > 0) {
- /* use key0 in individual key and key1 in broadcast key */
- hapd->default_wep_key_idx = 1;
- }
-
#ifdef EAP_TLS_FUNCS
if (hapd->conf->eap_server &&
(hapd->conf->ca_cert || hapd->conf->server_cert ||
#ifdef EAP_TLS_FUNCS
if (hapd->conf->eap_server &&
(hapd->conf->ca_cert || hapd->conf->server_cert ||
const struct wpa_driver_ops *driver;
void *drv_priv;
const struct wpa_driver_ops *driver;
void *drv_priv;
- u8 *default_wep_key;
- u8 default_wep_key_idx;
-
struct radius_client_data *radius;
int radius_client_reconfigured;
u32 acct_session_id_hi, acct_session_id_lo;
struct radius_client_data *radius;
int radius_client_reconfigured;
u32 acct_session_id_hi, acct_session_id_lo;
void ieee802_1x_tx_key(struct hostapd_data *hapd, struct sta_info *sta)
{
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;
struct eapol_state_machine *sm = sta->eapol_sm;
#ifndef CONFIG_NO_VLAN
struct hostapd_wep_keys *key = NULL;
key->len[key->idx]);
} else
#endif /* CONFIG_NO_VLAN */
key->len[key->idx]);
} else
#endif /* CONFIG_NO_VLAN */
- if (hapd->default_wep_key) {
- ieee802_1x_tx_key_one(hapd, sta, hapd->default_wep_key_idx, 1,
- hapd->default_wep_key,
+ if (eapol->default_wep_key) {
+ ieee802_1x_tx_key_one(hapd, sta, eapol->default_wep_key_idx, 1,
+ eapol->default_wep_key,
hapd->conf->default_wep_key_len);
}
hapd->conf->default_wep_key_len);
}
static int ieee802_1x_rekey_broadcast(struct hostapd_data *hapd)
{
static int ieee802_1x_rekey_broadcast(struct hostapd_data *hapd)
{
+ struct eapol_authenticator *eapol = hapd->eapol_auth;
+
if (hapd->conf->default_wep_key_len < 1)
return 0;
if (hapd->conf->default_wep_key_len < 1)
return 0;
- os_free(hapd->default_wep_key);
- hapd->default_wep_key = os_malloc(hapd->conf->default_wep_key_len);
- if (hapd->default_wep_key == NULL ||
- os_get_random(hapd->default_wep_key,
+ os_free(eapol->default_wep_key);
+ eapol->default_wep_key = os_malloc(hapd->conf->default_wep_key_len);
+ if (eapol->default_wep_key == NULL ||
+ os_get_random(eapol->default_wep_key,
hapd->conf->default_wep_key_len)) {
printf("Could not generate random WEP key.\n");
hapd->conf->default_wep_key_len)) {
printf("Could not generate random WEP key.\n");
- os_free(hapd->default_wep_key);
- hapd->default_wep_key = NULL;
+ os_free(eapol->default_wep_key);
+ eapol->default_wep_key = NULL;
return -1;
}
wpa_hexdump_key(MSG_DEBUG, "IEEE 802.1X: New default WEP key",
return -1;
}
wpa_hexdump_key(MSG_DEBUG, "IEEE 802.1X: New default WEP key",
+ eapol->default_wep_key,
hapd->conf->default_wep_key_len);
return 0;
hapd->conf->default_wep_key_len);
return 0;
static void ieee802_1x_rekey(void *eloop_ctx, void *timeout_ctx)
{
struct hostapd_data *hapd = eloop_ctx;
static void ieee802_1x_rekey(void *eloop_ctx, void *timeout_ctx)
{
struct hostapd_data *hapd = eloop_ctx;
+ struct eapol_authenticator *eapol = hapd->eapol_auth;
- if (hapd->default_wep_key_idx >= 3)
- hapd->default_wep_key_idx =
+ if (eapol->default_wep_key_idx >= 3)
+ eapol->default_wep_key_idx =
hapd->conf->individual_wep_key_len > 0 ? 1 : 0;
else
hapd->conf->individual_wep_key_len > 0 ? 1 : 0;
else
- hapd->default_wep_key_idx++;
+ eapol->default_wep_key_idx++;
wpa_printf(MSG_DEBUG, "IEEE 802.1X: New default WEP key index %d",
wpa_printf(MSG_DEBUG, "IEEE 802.1X: New default WEP key index %d",
- hapd->default_wep_key_idx);
+ eapol->default_wep_key_idx);
if (ieee802_1x_rekey_broadcast(hapd)) {
hostapd_logger(hapd, NULL, HOSTAPD_MODULE_IEEE8021X,
HOSTAPD_LEVEL_WARNING, "failed to generate a "
"new broadcast key");
if (ieee802_1x_rekey_broadcast(hapd)) {
hostapd_logger(hapd, NULL, HOSTAPD_MODULE_IEEE8021X,
HOSTAPD_LEVEL_WARNING, "failed to generate a "
"new broadcast key");
- os_free(hapd->default_wep_key);
- hapd->default_wep_key = NULL;
+ os_free(eapol->default_wep_key);
+ eapol->default_wep_key = NULL;
return;
}
/* TODO: Could setup key for RX here, but change default TX keyid only
* after new broadcast key has been sent to all stations. */
if (hostapd_set_key(hapd->conf->iface, hapd, WPA_ALG_WEP, NULL,
return;
}
/* TODO: Could setup key for RX here, but change default TX keyid only
* after new broadcast key has been sent to all stations. */
if (hostapd_set_key(hapd->conf->iface, hapd, WPA_ALG_WEP, NULL,
- hapd->default_wep_key_idx, 1, NULL, 0,
- hapd->default_wep_key,
+ eapol->default_wep_key_idx, 1, NULL, 0,
+ eapol->default_wep_key,
hapd->conf->default_wep_key_len)) {
hostapd_logger(hapd, NULL, HOSTAPD_MODULE_IEEE8021X,
HOSTAPD_LEVEL_WARNING, "failed to configure a "
"new broadcast key");
hapd->conf->default_wep_key_len)) {
hostapd_logger(hapd, NULL, HOSTAPD_MODULE_IEEE8021X,
HOSTAPD_LEVEL_WARNING, "failed to configure a "
"new broadcast key");
- os_free(hapd->default_wep_key);
- hapd->default_wep_key = NULL;
+ os_free(eapol->default_wep_key);
+ eapol->default_wep_key = NULL;
ieee802_1x_rekey(hapd, NULL);
ieee802_1x_rekey(hapd, NULL);
- if (hapd->default_wep_key == NULL)
+ if (hapd->eapol_auth->default_wep_key == NULL)