diff --git a/wpa_supplicant/wps_supplicant.c b/wpa_supplicant/wps_supplicant.c index a4efc6ec5..6fb1aa333 100644 --- a/wpa_supplicant/wps_supplicant.c +++ b/wpa_supplicant/wps_supplicant.c @@ -188,6 +188,7 @@ static int wpa_supplicant_wps_cred(void *ctx, struct wpa_supplicant *wpa_s = ctx; struct wpa_ssid *ssid = wpa_s->current_ssid; u8 key_idx = 0; + u16 auth_type; if ((wpa_s->conf->wps_cred_processing == 1 || wpa_s->conf->wps_cred_processing == 2) && cred->cred_attr) { @@ -220,13 +221,20 @@ static int wpa_supplicant_wps_cred(void *ctx, wpa_printf(MSG_DEBUG, "WPS: MAC Address " MACSTR, MAC2STR(cred->mac_addr)); - if (cred->auth_type != WPS_AUTH_OPEN && - cred->auth_type != WPS_AUTH_SHARED && - cred->auth_type != WPS_AUTH_WPAPSK && - cred->auth_type != WPS_AUTH_WPA2PSK) { + auth_type = cred->auth_type; + if (auth_type == (WPS_AUTH_WPAPSK | WPS_AUTH_WPA2PSK)) { + wpa_printf(MSG_DEBUG, "WPS: Workaround - convert mixed-mode " + "auth_type into WPA2PSK"); + auth_type = WPS_AUTH_WPA2PSK; + } + + if (auth_type != WPS_AUTH_OPEN && + auth_type != WPS_AUTH_SHARED && + auth_type != WPS_AUTH_WPAPSK && + auth_type != WPS_AUTH_WPA2PSK) { wpa_printf(MSG_DEBUG, "WPS: Ignored credentials for " - "unsupported authentication type %d", - cred->auth_type); + "unsupported authentication type 0x%x", + auth_type); return 0; } @@ -300,7 +308,7 @@ static int wpa_supplicant_wps_cred(void *ctx, break; } - switch (cred->auth_type) { + switch (auth_type) { case WPS_AUTH_OPEN: ssid->auth_alg = WPA_AUTH_ALG_OPEN; ssid->key_mgmt = WPA_KEY_MGMT_NONE;