WPS 2.0: Fix AuthorizedMACs check to accept wildcard address
[libeap.git] / src / wps / wps.c
index 3b6bf19..01a2cde 100644 (file)
@@ -46,7 +46,7 @@ struct wps_data * wps_init(const struct wps_config *cfg)
        }
        if (cfg->pin) {
                data->dev_pw_id = data->wps->oob_dev_pw_id == 0 ?
-                       DEV_PW_DEFAULT : data->wps->oob_dev_pw_id;
+                       cfg->dev_pw_id : data->wps->oob_dev_pw_id;
                data->dev_password = os_malloc(cfg->pin_len);
                if (data->dev_password == NULL) {
                        os_free(data);
@@ -269,6 +269,7 @@ int wps_is_addr_authorized(const struct wpabuf *msg, const u8 *addr,
        struct wps_parse_attr attr;
        unsigned int i;
        const u8 *pos;
+       const u8 bcast[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
 
        if (wps_parse_msg(msg, &attr) < 0)
                return 0;
@@ -286,7 +287,8 @@ int wps_is_addr_authorized(const struct wpabuf *msg, const u8 *addr,
 
        pos = attr.authorized_macs;
        for (i = 0; i < attr.authorized_macs_len / ETH_ALEN; i++) {
-               if (os_memcmp(pos, addr, ETH_ALEN) == 0)
+               if (os_memcmp(pos, addr, ETH_ALEN) == 0 ||
+                   os_memcmp(pos, bcast, ETH_ALEN) == 0)
                        return 1;
                pos += ETH_ALEN;
        }
@@ -488,10 +490,12 @@ struct wpabuf * wps_build_probe_req_ie(int pbc, struct wps_device_data *dev,
                return NULL;
        }
 
+#ifndef CONFIG_WPS2
        if (dev->p2p && wps_build_dev_name(dev, ie)) {
                wpabuf_free(ie);
                return NULL;
        }
+#endif /* CONFIG_WPS2 */
 
        return wps_ie_encapsulate(ie);
 }