diff --git a/src/ap/wps_hostapd.c b/src/ap/wps_hostapd.c index 1b1dce4c4..8aafa639e 100644 --- a/src/ap/wps_hostapd.c +++ b/src/ap/wps_hostapd.c @@ -471,6 +471,8 @@ static int hapd_wps_cred_cb(struct hostapd_data *hapd, void *ctx) hapd->wps->ssid_len = cred->ssid_len; hapd->wps->encr_types = cred->encr_type; hapd->wps->auth_types = cred->auth_type; + hapd->wps->ap_encr_type = cred->encr_type; + hapd->wps->ap_auth_type = cred->auth_type; if (cred->key_len == 0) { os_free(hapd->wps->network_key); hapd->wps->network_key = NULL; @@ -1146,6 +1148,8 @@ int hostapd_init_wps(struct hostapd_data *hapd, wps->psk_set = 1; } + wps->ap_auth_type = wps->auth_types; + wps->ap_encr_type = wps->encr_types; if (conf->wps_state == WPS_STATE_NOT_CONFIGURED) { /* Override parameters to enable security by default */ wps->auth_types = WPS_AUTH_WPA2PSK | WPS_AUTH_WPAPSK; diff --git a/src/wps/wps.h b/src/wps/wps.h index 574fb6062..192d28351 100644 --- a/src/wps/wps.h +++ b/src/wps/wps.h @@ -667,6 +667,16 @@ struct wps_context { */ u16 auth_types; + /** + * encr_types - Current AP encryption type (WPS_ENCR_*) + */ + u16 ap_encr_type; + + /** + * ap_auth_type - Current AP authentication types (WPS_AUTH_*) + */ + u16 ap_auth_type; + /** * network_key - The current Network Key (PSK) or %NULL to generate new * diff --git a/src/wps/wps_enrollee.c b/src/wps/wps_enrollee.c index 9d48ca51e..257d124cc 100644 --- a/src/wps/wps_enrollee.c +++ b/src/wps/wps_enrollee.c @@ -243,47 +243,22 @@ static int wps_build_cred_ssid(struct wps_data *wps, struct wpabuf *msg) static int wps_build_cred_auth_type(struct wps_data *wps, struct wpabuf *msg) { - u16 auth_type = wps->wps->auth_types; - - /* Select the best authentication type */ - if (auth_type & WPS_AUTH_WPA2PSK) - auth_type = WPS_AUTH_WPA2PSK; - else if (auth_type & WPS_AUTH_WPAPSK) - auth_type = WPS_AUTH_WPAPSK; - else if (auth_type & WPS_AUTH_OPEN) - auth_type = WPS_AUTH_OPEN; - else if (auth_type & WPS_AUTH_SHARED) - auth_type = WPS_AUTH_SHARED; - - wpa_printf(MSG_DEBUG, "WPS: * Authentication Type (0x%x)", auth_type); + wpa_printf(MSG_DEBUG, "WPS: * Authentication Type (0x%x)", + wps->wps->ap_auth_type); wpabuf_put_be16(msg, ATTR_AUTH_TYPE); wpabuf_put_be16(msg, 2); - wpabuf_put_be16(msg, auth_type); + wpabuf_put_be16(msg, wps->wps->ap_auth_type); return 0; } static int wps_build_cred_encr_type(struct wps_data *wps, struct wpabuf *msg) { - u16 encr_type = wps->wps->encr_types; - - /* Select the best encryption type */ - if (wps->wps->auth_types & (WPS_AUTH_WPA2PSK | WPS_AUTH_WPAPSK)) { - if (encr_type & WPS_ENCR_AES) - encr_type = WPS_ENCR_AES; - else if (encr_type & WPS_ENCR_TKIP) - encr_type = WPS_ENCR_TKIP; - } else { - if (encr_type & WPS_ENCR_WEP) - encr_type = WPS_ENCR_WEP; - else if (encr_type & WPS_ENCR_NONE) - encr_type = WPS_ENCR_NONE; - } - - wpa_printf(MSG_DEBUG, "WPS: * Encryption Type (0x%x)", encr_type); + wpa_printf(MSG_DEBUG, "WPS: * Encryption Type (0x%x)", + wps->wps->ap_encr_type); wpabuf_put_be16(msg, ATTR_ENCR_TYPE); wpabuf_put_be16(msg, 2); - wpabuf_put_be16(msg, encr_type); + wpabuf_put_be16(msg, wps->wps->ap_encr_type); return 0; }