WPS: Add MAC address to validation error message for Probe Request
[libeap.git] / src / wps / wps_validate.c
index 500c5a1..dd1ccf2 100644 (file)
 #include "wps.h"
 
 
+#ifndef WPS_STRICT_ALL
+#define WPS_STRICT_WPS2
+#endif /* WPS_STRICT_ALL */
+
+
 static int wps_validate_version(const u8 *version, int mandatory)
 {
        if (version == NULL) {
@@ -1037,7 +1042,7 @@ static int wps_validate_cred(const u8 *cred, size_t len)
                return -1;
        }
 
-       if (wps_validate_network_idx(attr.network_idx, 0) ||
+       if (wps_validate_network_idx(attr.network_idx, 1) ||
            wps_validate_ssid(attr.ssid, attr.ssid_len, 1) ||
            wps_validate_auth_type(attr.auth_type, 1) ||
            wps_validate_encr_type(attr.encr_type, 1) ||
@@ -1117,7 +1122,8 @@ int wps_validate_beacon(const struct wpabuf *wps_ie)
 }
 
 
-int wps_validate_beacon_probe_resp(const struct wpabuf *wps_ie, int probe)
+int wps_validate_beacon_probe_resp(const struct wpabuf *wps_ie, int probe,
+                                  const u8 *addr)
 {
        struct wps_parse_attr attr;
        int wps2, sel_reg;
@@ -1161,15 +1167,21 @@ int wps_validate_beacon_probe_resp(const struct wpabuf *wps_ie, int probe)
            wps_validate_authorized_macs(attr.authorized_macs,
                                         attr.authorized_macs_len, 0)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid %sProbe Response "
-                          "frame", probe ? "" : "Beacon/");
+                          "frame from " MACSTR, probe ? "" : "Beacon/",
+                          MAC2STR(addr));
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
 }
 
 
-int wps_validate_probe_req(const struct wpabuf *wps_ie)
+int wps_validate_probe_req(const struct wpabuf *wps_ie, const u8 *addr)
 {
        struct wps_parse_attr attr;
        int wps2;
@@ -1208,7 +1220,7 @@ int wps_validate_probe_req(const struct wpabuf *wps_ie)
            wps_validate_req_dev_type(attr.req_dev_type, attr.num_req_dev_type,
                                      0)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid Probe Request "
-                          "frame");
+                          "frame from " MACSTR, MAC2STR(addr));
                return -1;
        }
 
@@ -1318,7 +1330,12 @@ int wps_validate_m1(const struct wpabuf *tlvs)
            wps_validate_version2(attr.version2, wps2) ||
            wps_validate_request_to_enroll(attr.request_to_enroll, 0)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid M1");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1368,7 +1385,12 @@ int wps_validate_m2(const struct wpabuf *tlvs)
            wps_validate_version2(attr.version2, wps2) ||
            wps_validate_authenticator(attr.authenticator, 1)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid M2");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1415,7 +1437,12 @@ int wps_validate_m2d(const struct wpabuf *tlvs)
            wps_validate_os_version(attr.os_version, 1) ||
            wps_validate_version2(attr.version2, wps2)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid M2D");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1446,7 +1473,12 @@ int wps_validate_m3(const struct wpabuf *tlvs)
            wps_validate_version2(attr.version2, wps2) ||
            wps_validate_authenticator(attr.authenticator, 1)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid M3");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1479,7 +1511,12 @@ int wps_validate_m4(const struct wpabuf *tlvs)
            wps_validate_version2(attr.version2, wps2) ||
            wps_validate_authenticator(attr.authenticator, 1)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid M4");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1507,7 +1544,12 @@ int wps_validate_m4_encr(const struct wpabuf *tlvs)
            wps_validate_key_wrap_auth(attr.key_wrap_auth, 1)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid M4 encrypted "
                           "settings");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1538,7 +1580,12 @@ int wps_validate_m5(const struct wpabuf *tlvs)
            wps_validate_version2(attr.version2, wps2) ||
            wps_validate_authenticator(attr.authenticator, 1)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid M5");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1566,7 +1613,12 @@ int wps_validate_m5_encr(const struct wpabuf *tlvs)
            wps_validate_key_wrap_auth(attr.key_wrap_auth, 1)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid M5 encrypted "
                           "settings");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1597,7 +1649,12 @@ int wps_validate_m6(const struct wpabuf *tlvs)
            wps_validate_version2(attr.version2, wps2) ||
            wps_validate_authenticator(attr.authenticator, 1)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid M6");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1625,7 +1682,12 @@ int wps_validate_m6_encr(const struct wpabuf *tlvs)
            wps_validate_key_wrap_auth(attr.key_wrap_auth, 1)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid M6 encrypted "
                           "settings");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1657,7 +1719,12 @@ int wps_validate_m7(const struct wpabuf *tlvs)
            wps_validate_version2(attr.version2, wps2) ||
            wps_validate_authenticator(attr.authenticator, 1)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid M7");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1692,7 +1759,12 @@ int wps_validate_m7_encr(const struct wpabuf *tlvs, int ap)
            wps_validate_key_wrap_auth(attr.key_wrap_auth, 1)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid M7 encrypted "
                           "settings");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1723,7 +1795,12 @@ int wps_validate_m8(const struct wpabuf *tlvs)
            wps_validate_version2(attr.version2, wps2) ||
            wps_validate_authenticator(attr.authenticator, 1)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid M8");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1757,7 +1834,12 @@ int wps_validate_m8_encr(const struct wpabuf *tlvs, int ap)
            wps_validate_key_wrap_auth(attr.key_wrap_auth, 1)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid M8 encrypted "
                           "settings");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1786,7 +1868,12 @@ int wps_validate_wsc_ack(const struct wpabuf *tlvs)
            wps_validate_registrar_nonce(attr.registrar_nonce, 1) ||
            wps_validate_version2(attr.version2, wps2)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid WSC_ACK");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1816,7 +1903,12 @@ int wps_validate_wsc_nack(const struct wpabuf *tlvs)
            wps_validate_config_error(attr.config_error, 1) ||
            wps_validate_version2(attr.version2, wps2)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid WSC_NACK");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1845,7 +1937,12 @@ int wps_validate_wsc_done(const struct wpabuf *tlvs)
            wps_validate_registrar_nonce(attr.registrar_nonce, 1) ||
            wps_validate_version2(attr.version2, wps2)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid WSC_Done");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;
@@ -1882,7 +1979,12 @@ int wps_validate_upnp_set_selected_registrar(const struct wpabuf *tlvs)
            wps_validate_uuid_r(attr.uuid_r, wps2)) {
                wpa_printf(MSG_INFO, "WPS-STRICT: Invalid "
                           "SetSelectedRegistrar");
+#ifdef WPS_STRICT_WPS2
+               if (wps2)
+                       return -1;
+#else /* WPS_STRICT_WPS2 */
                return -1;
+#endif /* WPS_STRICT_WPS2 */
        }
 
        return 0;