]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
WPS: Add a workaround for incorrect passphrase encoding in Network Key
authorJouni Malinen <j@w1.fi>
Sat, 24 Jan 2009 10:50:00 +0000 (12:50 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 24 Jan 2009 10:50:00 +0000 (12:50 +0200)
External Registrar in Vista may include NULL termination in the Network
Key when encoding an ASCII passphrase for WPA/WPA2-PSK. As a workaround,
remove this extra octet if present.

src/wps/wps_attr_process.c

index c1b59f7cf055a7270c206b58cf62587c1a2f9c1e..ae6e906c265a25f0f5b1e15d7476adeb596b2429 100644 (file)
@@ -257,6 +257,23 @@ static int wps_process_cred_802_1x_enabled(struct wps_credential *cred,
 }
 
 
+static void wps_workaround_cred_key(struct wps_credential *cred)
+{
+       if (cred->auth_type & (WPS_AUTH_WPAPSK | WPS_AUTH_WPA2PSK) &&
+           cred->key_len > 8 && cred->key_len < 64 &&
+           cred->key[cred->key_len - 1] == 0) {
+               /*
+                * A deployed external registrar is known to encode ASCII
+                * passphrases incorrectly. Remove the extra NULL termination
+                * to fix the encoding.
+                */
+               wpa_printf(MSG_DEBUG, "WPS: Workaround - remove NULL "
+                          "termination from ASCII passphrase");
+               cred->key_len--;
+       }
+}
+
+
 int wps_process_cred(struct wps_parse_attr *attr,
                     struct wps_credential *cred)
 {
@@ -279,6 +296,8 @@ int wps_process_cred(struct wps_parse_attr *attr,
            wps_process_cred_802_1x_enabled(cred, attr->dot1x_enabled))
                return -1;
 
+       wps_workaround_cred_key(cred);
+
        return 0;
 }
 
@@ -298,5 +317,7 @@ int wps_process_ap_settings(struct wps_parse_attr *attr,
            wps_process_cred_mac_addr(cred, attr->mac_addr))
                return -1;
 
+       wps_workaround_cred_key(cred);
+
        return 0;
 }