P2P: Use PSK format in WPS Credential
This commit is contained in:
parent
6e3f4b89ea
commit
f684e608af
7 changed files with 16 additions and 5 deletions
|
@ -652,7 +652,7 @@ ieee802_1x_alloc_eapol_sm(struct hostapd_data *hapd, struct sta_info *sta)
|
||||||
flags |= EAPOL_SM_FROM_PMKSA_CACHE;
|
flags |= EAPOL_SM_FROM_PMKSA_CACHE;
|
||||||
}
|
}
|
||||||
return eapol_auth_alloc(hapd->eapol_auth, sta->addr, flags,
|
return eapol_auth_alloc(hapd->eapol_auth, sta->addr, flags,
|
||||||
sta->wps_ie, sta);
|
sta->wps_ie, sta->p2p_ie, sta);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -106,6 +106,7 @@ struct eap_config {
|
||||||
int tnc;
|
int tnc;
|
||||||
struct wps_context *wps;
|
struct wps_context *wps;
|
||||||
const struct wpabuf *assoc_wps_ie;
|
const struct wpabuf *assoc_wps_ie;
|
||||||
|
const struct wpabuf *assoc_p2p_ie;
|
||||||
const u8 *peer_addr;
|
const u8 *peer_addr;
|
||||||
int fragment_size;
|
int fragment_size;
|
||||||
};
|
};
|
||||||
|
|
|
@ -183,6 +183,7 @@ struct eap_sm {
|
||||||
int tnc;
|
int tnc;
|
||||||
struct wps_context *wps;
|
struct wps_context *wps;
|
||||||
struct wpabuf *assoc_wps_ie;
|
struct wpabuf *assoc_wps_ie;
|
||||||
|
struct wpabuf *assoc_p2p_ie;
|
||||||
|
|
||||||
Boolean start_reauth;
|
Boolean start_reauth;
|
||||||
|
|
||||||
|
|
|
@ -1255,6 +1255,8 @@ struct eap_sm * eap_server_sm_init(void *eapol_ctx,
|
||||||
sm->wps = conf->wps;
|
sm->wps = conf->wps;
|
||||||
if (conf->assoc_wps_ie)
|
if (conf->assoc_wps_ie)
|
||||||
sm->assoc_wps_ie = wpabuf_dup(conf->assoc_wps_ie);
|
sm->assoc_wps_ie = wpabuf_dup(conf->assoc_wps_ie);
|
||||||
|
if (conf->assoc_p2p_ie)
|
||||||
|
sm->assoc_p2p_ie = wpabuf_dup(conf->assoc_p2p_ie);
|
||||||
if (conf->peer_addr)
|
if (conf->peer_addr)
|
||||||
os_memcpy(sm->peer_addr, conf->peer_addr, ETH_ALEN);
|
os_memcpy(sm->peer_addr, conf->peer_addr, ETH_ALEN);
|
||||||
sm->fragment_size = conf->fragment_size;
|
sm->fragment_size = conf->fragment_size;
|
||||||
|
@ -1292,6 +1294,7 @@ void eap_server_sm_deinit(struct eap_sm *sm)
|
||||||
os_free(sm->eap_if.aaaEapKeyData);
|
os_free(sm->eap_if.aaaEapKeyData);
|
||||||
eap_user_free(sm->user);
|
eap_user_free(sm->user);
|
||||||
wpabuf_free(sm->assoc_wps_ie);
|
wpabuf_free(sm->assoc_wps_ie);
|
||||||
|
wpabuf_free(sm->assoc_p2p_ie);
|
||||||
os_free(sm);
|
os_free(sm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -135,8 +135,11 @@ static void * eap_wsc_init(struct eap_sm *sm)
|
||||||
}
|
}
|
||||||
cfg.assoc_wps_ie = sm->assoc_wps_ie;
|
cfg.assoc_wps_ie = sm->assoc_wps_ie;
|
||||||
cfg.peer_addr = sm->peer_addr;
|
cfg.peer_addr = sm->peer_addr;
|
||||||
if (0 /* TODO: could provide option for forcing PSK format */)
|
if (sm->assoc_p2p_ie) {
|
||||||
|
wpa_printf(MSG_DEBUG, "EAP-WSC: Prefer PSK format for P2P "
|
||||||
|
"client");
|
||||||
cfg.use_psk_key = 1;
|
cfg.use_psk_key = 1;
|
||||||
|
}
|
||||||
data->wps = wps_init(&cfg);
|
data->wps = wps_init(&cfg);
|
||||||
if (data->wps == NULL) {
|
if (data->wps == NULL) {
|
||||||
os_free(data);
|
os_free(data);
|
||||||
|
|
|
@ -762,7 +762,8 @@ SM_STEP(CTRL_DIR)
|
||||||
|
|
||||||
struct eapol_state_machine *
|
struct eapol_state_machine *
|
||||||
eapol_auth_alloc(struct eapol_authenticator *eapol, const u8 *addr,
|
eapol_auth_alloc(struct eapol_authenticator *eapol, const u8 *addr,
|
||||||
int flags, const struct wpabuf *assoc_wps_ie, void *sta_ctx)
|
int flags, const struct wpabuf *assoc_wps_ie,
|
||||||
|
const struct wpabuf *assoc_p2p_ie, void *sta_ctx)
|
||||||
{
|
{
|
||||||
struct eapol_state_machine *sm;
|
struct eapol_state_machine *sm;
|
||||||
struct eap_config eap_conf;
|
struct eap_config eap_conf;
|
||||||
|
@ -829,6 +830,7 @@ eapol_auth_alloc(struct eapol_authenticator *eapol, const u8 *addr,
|
||||||
eap_conf.tnc = eapol->conf.tnc;
|
eap_conf.tnc = eapol->conf.tnc;
|
||||||
eap_conf.wps = eapol->conf.wps;
|
eap_conf.wps = eapol->conf.wps;
|
||||||
eap_conf.assoc_wps_ie = assoc_wps_ie;
|
eap_conf.assoc_wps_ie = assoc_wps_ie;
|
||||||
|
eap_conf.assoc_p2p_ie = assoc_p2p_ie;
|
||||||
eap_conf.peer_addr = addr;
|
eap_conf.peer_addr = addr;
|
||||||
eap_conf.fragment_size = eapol->conf.fragment_size;
|
eap_conf.fragment_size = eapol->conf.fragment_size;
|
||||||
sm->eap = eap_server_sm_init(sm, &eapol_cb, &eap_conf);
|
sm->eap = eap_server_sm_init(sm, &eapol_cb, &eap_conf);
|
||||||
|
|
|
@ -80,7 +80,8 @@ struct eapol_authenticator * eapol_auth_init(struct eapol_auth_config *conf,
|
||||||
void eapol_auth_deinit(struct eapol_authenticator *eapol);
|
void eapol_auth_deinit(struct eapol_authenticator *eapol);
|
||||||
struct eapol_state_machine *
|
struct eapol_state_machine *
|
||||||
eapol_auth_alloc(struct eapol_authenticator *eapol, const u8 *addr,
|
eapol_auth_alloc(struct eapol_authenticator *eapol, const u8 *addr,
|
||||||
int flags, const struct wpabuf *assoc_wps_ie, void *sta_ctx);
|
int flags, const struct wpabuf *assoc_wps_ie,
|
||||||
|
const struct wpabuf *assoc_p2p_ie, void *sta_ctx);
|
||||||
void eapol_auth_free(struct eapol_state_machine *sm);
|
void eapol_auth_free(struct eapol_state_machine *sm);
|
||||||
void eapol_auth_step(struct eapol_state_machine *sm);
|
void eapol_auth_step(struct eapol_state_machine *sm);
|
||||||
void eapol_auth_dump_state(FILE *f, const char *prefix,
|
void eapol_auth_dump_state(FILE *f, const char *prefix,
|
||||||
|
|
Loading…
Reference in a new issue