From d7a15d5953beb47964526aa17b4dc2e9b2985fc1 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Thu, 16 Jan 2014 17:35:45 +0200 Subject: [PATCH] WPS: Indicate current AP settings in M7 in unconfigurated state Previously, unconfigured state was forcing the best supported authentication and encryption state to be shown in WPS messages, including AP Settings in M7 in case the AP acts as an Enrollee. This is not really correct for the AP Settings case, so change that one to indicate the currently configured state. Signed-hostap: Jouni Malinen --- src/ap/wps_hostapd.c | 4 ++++ src/wps/wps.h | 10 ++++++++++ src/wps/wps_enrollee.c | 37 ++++++------------------------------- 3 files changed, 20 insertions(+), 31 deletions(-) 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; }