diff --git a/src/eap_peer/eap_wsc.c b/src/eap_peer/eap_wsc.c index 42ff46374..7d521816f 100644 --- a/src/eap_peer/eap_wsc.c +++ b/src/eap_peer/eap_wsc.c @@ -160,7 +160,7 @@ static void * eap_wsc_init(struct eap_sm *sm) os_memset(&cfg, 0, sizeof(cfg)); cfg.wps = wps; - cfg.registrar = registrar ? data->wps_ctx->registrar : NULL; + cfg.registrar = registrar; phase1 = eap_get_config_phase1(sm); if (phase1 == NULL) { diff --git a/src/eap_server/eap_wsc.c b/src/eap_server/eap_wsc.c index 451cb1fe8..c22c54407 100644 --- a/src/eap_server/eap_wsc.c +++ b/src/eap_server/eap_wsc.c @@ -90,6 +90,7 @@ static void * eap_wsc_init(struct eap_sm *sm) os_memset(&cfg, 0, sizeof(cfg)); cfg.wps = sm->wps; + cfg.registrar = registrar; if (registrar) { if (sm->wps == NULL || sm->wps->registrar == NULL) { wpa_printf(MSG_INFO, "EAP-WSC: WPS Registrar not " @@ -97,7 +98,6 @@ static void * eap_wsc_init(struct eap_sm *sm) os_free(data); return NULL; } - cfg.registrar = sm->wps->registrar; } else { if (sm->user == NULL || sm->user->password == NULL) { wpa_printf(MSG_INFO, "EAP-WSC: No AP PIN (password) " diff --git a/src/wps/wps.c b/src/wps/wps.c index 3a1606f5f..67438de71 100644 --- a/src/wps/wps.c +++ b/src/wps/wps.c @@ -102,10 +102,10 @@ void wps_deinit(struct wps_data *data) wpa_printf(MSG_DEBUG, "WPS: Full PIN information revealed and " "negotiation failed"); if (data->registrar) - wps_registrar_invalidate_pin(data->registrar, + wps_registrar_invalidate_pin(data->wps->registrar, data->uuid_e); } else if (data->registrar) - wps_registrar_unlock_pin(data->registrar, data->uuid_e); + wps_registrar_unlock_pin(data->wps->registrar, data->uuid_e); wpabuf_free(data->dh_privkey); wpabuf_free(data->dh_pubkey_e); diff --git a/src/wps/wps.h b/src/wps/wps.h index 9d723fe33..52d7903cb 100644 --- a/src/wps/wps.h +++ b/src/wps/wps.h @@ -91,11 +91,9 @@ struct wps_config { struct wps_context *wps; /** - * registrar - Pointer to WPS registrar data from wps_registrar_init() - * This is only used if the local end is Registrar; set to %NULL for - * Enrollee. + * registrar - Whether this end is a Registrar */ - struct wps_registrar *registrar; + int registrar; /** * pin - Enrollee Device Password (%NULL for Registrar or PBC) diff --git a/src/wps/wps_i.h b/src/wps/wps_i.h index b67a42a4e..da7f7699d 100644 --- a/src/wps/wps_i.h +++ b/src/wps/wps_i.h @@ -30,10 +30,9 @@ struct wps_data { struct wps_context *wps; /** - * registrar - Pointer to WPS registrar data from wps_registrar_init() - * This is only used if the local end is Registrar. + * registrar - Whether this end is a Registrar */ - struct wps_registrar *registrar; + int registrar; enum { /* Enrollee states */ diff --git a/src/wps/wps_registrar.c b/src/wps/wps_registrar.c index a364a68fe..27503c39e 100644 --- a/src/wps/wps_registrar.c +++ b/src/wps/wps_registrar.c @@ -685,13 +685,14 @@ static int wps_get_dev_password(struct wps_data *wps) pin = (const u8 *) "00000000"; pin_len = 8; } else { - pin = wps_registrar_get_pin(wps->registrar, wps->uuid_e, + pin = wps_registrar_get_pin(wps->wps->registrar, wps->uuid_e, &pin_len); } if (pin == NULL) { wpa_printf(MSG_DEBUG, "WPS: No Device Password available for " "the Enrollee"); - wps_cb_pin_needed(wps->registrar, wps->uuid_e, &wps->peer_dev); + wps_cb_pin_needed(wps->wps->registrar, wps->uuid_e, + &wps->peer_dev); return -1; } @@ -1013,7 +1014,7 @@ static struct wpabuf * wps_build_m2(struct wps_data *wps) wps_build_auth_type_flags(wps, msg) || wps_build_encr_type_flags(wps, msg) || wps_build_conn_type_flags(wps, msg) || - wps_build_config_methods_r(wps->registrar, msg) || + wps_build_config_methods_r(wps->wps->registrar, msg) || wps_build_device_attrs(&wps->wps->dev, msg) || wps_build_rf_bands(&wps->wps->dev, msg) || wps_build_assoc_state(wps, msg) || @@ -1051,7 +1052,7 @@ static struct wpabuf * wps_build_m2d(struct wps_data *wps) wps_build_auth_type_flags(wps, msg) || wps_build_encr_type_flags(wps, msg) || wps_build_conn_type_flags(wps, msg) || - wps_build_config_methods_r(wps->registrar, msg) || + wps_build_config_methods_r(wps->wps->registrar, msg) || wps_build_device_attrs(&wps->wps->dev, msg) || wps_build_rf_bands(&wps->wps->dev, msg) || wps_build_assoc_state(wps, msg) || @@ -1427,7 +1428,7 @@ static int wps_process_e_snonce2(struct wps_data *wps, const u8 *e_snonce2) if (os_memcmp(wps->peer_hash2, hash, WPS_HASH_LEN) != 0) { wpa_printf(MSG_DEBUG, "WPS: E-Hash2 derived from E-S2 does " "not match with the pre-committed value"); - wps_registrar_invalidate_pin(wps->registrar, wps->uuid_e); + wps_registrar_invalidate_pin(wps->wps->registrar, wps->uuid_e); wps->config_error = WPS_CFG_DEV_PASSWORD_AUTH_FAILURE; return -1; } @@ -1435,7 +1436,7 @@ static int wps_process_e_snonce2(struct wps_data *wps, const u8 *e_snonce2) wpa_printf(MSG_DEBUG, "WPS: Enrollee proved knowledge of the second " "half of the device password"); wps->wps_pin_revealed = 0; - wps_registrar_unlock_pin(wps->registrar, wps->uuid_e); + wps_registrar_unlock_pin(wps->wps->registrar, wps->uuid_e); return 0; } @@ -1636,7 +1637,8 @@ static enum wps_process_res wps_process_m1(struct wps_data *wps, wps->dev_pw_id != DEV_PW_USER_SPECIFIED && wps->dev_pw_id != DEV_PW_MACHINE_SPECIFIED && wps->dev_pw_id != DEV_PW_REGISTRAR_SPECIFIED && - (wps->dev_pw_id != DEV_PW_PUSHBUTTON || !wps->registrar->pbc)) { + (wps->dev_pw_id != DEV_PW_PUSHBUTTON || + !wps->wps->registrar->pbc)) { wpa_printf(MSG_DEBUG, "WPS: Unsupported Device Password ID %d", wps->dev_pw_id); wps->state = SEND_M2D; @@ -1644,15 +1646,15 @@ static enum wps_process_res wps_process_m1(struct wps_data *wps, } if (wps->dev_pw_id == DEV_PW_PUSHBUTTON) { - if (wps_registrar_pbc_overlap(wps->registrar, wps->mac_addr_e, - wps->uuid_e)) { + if (wps_registrar_pbc_overlap(wps->wps->registrar, + wps->mac_addr_e, wps->uuid_e)) { wpa_printf(MSG_DEBUG, "WPS: PBC overlap - deny PBC " "negotiation"); wps->state = SEND_M2D; return WPS_CONTINUE; } - wps_registrar_add_pbc_session(wps->registrar, wps->mac_addr_e, - wps->uuid_e); + wps_registrar_add_pbc_session(wps->wps->registrar, + wps->mac_addr_e, wps->uuid_e); wps->pbc = 1; } @@ -2078,7 +2080,7 @@ static enum wps_process_res wps_process_wsc_done(struct wps_data *wps, } if (wps->new_psk) { - if (wps_cb_new_psk(wps->registrar, wps->mac_addr_e, + if (wps_cb_new_psk(wps->wps->registrar, wps->mac_addr_e, wps->new_psk, wps->new_psk_len)) { wpa_printf(MSG_DEBUG, "WPS: Failed to configure the " "new PSK"); @@ -2088,9 +2090,9 @@ static enum wps_process_res wps_process_wsc_done(struct wps_data *wps, } if (wps->pbc) { - wps_registrar_remove_pbc_session(wps->registrar, + wps_registrar_remove_pbc_session(wps->wps->registrar, wps->mac_addr_e, wps->uuid_e); - wps_registrar_pbc_completed(wps->registrar); + wps_registrar_pbc_completed(wps->wps->registrar); } wps_success_event(wps->wps);