WPS 2.0: Add wildcard AuthorizedMACs if Enrollee address is not known
This commit is contained in:
parent
53587ec183
commit
545ee4fd3d
2 changed files with 25 additions and 4 deletions
|
@ -634,6 +634,9 @@ int wps_registrar_add_pin(struct wps_registrar *reg, const u8 *addr,
|
||||||
reg->pbc = 0;
|
reg->pbc = 0;
|
||||||
if (addr)
|
if (addr)
|
||||||
wps_registrar_add_authorized_mac(reg, addr);
|
wps_registrar_add_authorized_mac(reg, addr);
|
||||||
|
else
|
||||||
|
wps_registrar_add_authorized_mac(
|
||||||
|
reg, (u8 *) "\xff\xff\xff\xff\xff\xff");
|
||||||
wps_registrar_selected_registrar_changed(reg);
|
wps_registrar_selected_registrar_changed(reg);
|
||||||
eloop_cancel_timeout(wps_registrar_set_selected_timeout, reg, NULL);
|
eloop_cancel_timeout(wps_registrar_set_selected_timeout, reg, NULL);
|
||||||
eloop_register_timeout(WPS_PBC_WALK_TIME, 0,
|
eloop_register_timeout(WPS_PBC_WALK_TIME, 0,
|
||||||
|
@ -654,10 +657,16 @@ static void wps_registrar_expire_pins(struct wps_registrar *reg)
|
||||||
{
|
{
|
||||||
if ((pin->flags & PIN_EXPIRES) &&
|
if ((pin->flags & PIN_EXPIRES) &&
|
||||||
os_time_before(&pin->expiration, &now)) {
|
os_time_before(&pin->expiration, &now)) {
|
||||||
|
u8 *addr;
|
||||||
|
u8 bcast[ETH_ALEN] =
|
||||||
|
{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
||||||
wpa_hexdump(MSG_DEBUG, "WPS: Expired PIN for UUID",
|
wpa_hexdump(MSG_DEBUG, "WPS: Expired PIN for UUID",
|
||||||
pin->uuid, WPS_UUID_LEN);
|
pin->uuid, WPS_UUID_LEN);
|
||||||
wps_registrar_remove_authorized_mac(
|
if (is_zero_ether_addr(pin->enrollee_addr))
|
||||||
reg, pin->enrollee_addr);
|
addr = bcast;
|
||||||
|
else
|
||||||
|
addr = pin->enrollee_addr;
|
||||||
|
wps_registrar_remove_authorized_mac(reg, addr);
|
||||||
wps_remove_pin(pin);
|
wps_remove_pin(pin);
|
||||||
wps_registrar_selected_registrar_changed(reg);
|
wps_registrar_selected_registrar_changed(reg);
|
||||||
}
|
}
|
||||||
|
@ -678,10 +687,16 @@ int wps_registrar_invalidate_pin(struct wps_registrar *reg, const u8 *uuid)
|
||||||
dl_list_for_each_safe(pin, prev, ®->pins, struct wps_uuid_pin, list)
|
dl_list_for_each_safe(pin, prev, ®->pins, struct wps_uuid_pin, list)
|
||||||
{
|
{
|
||||||
if (os_memcmp(pin->uuid, uuid, WPS_UUID_LEN) == 0) {
|
if (os_memcmp(pin->uuid, uuid, WPS_UUID_LEN) == 0) {
|
||||||
|
u8 *addr;
|
||||||
|
u8 bcast[ETH_ALEN] =
|
||||||
|
{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
||||||
wpa_hexdump(MSG_DEBUG, "WPS: Invalidated PIN for UUID",
|
wpa_hexdump(MSG_DEBUG, "WPS: Invalidated PIN for UUID",
|
||||||
pin->uuid, WPS_UUID_LEN);
|
pin->uuid, WPS_UUID_LEN);
|
||||||
wps_registrar_remove_authorized_mac(
|
if (is_zero_ether_addr(pin->enrollee_addr))
|
||||||
reg, pin->enrollee_addr);
|
addr = bcast;
|
||||||
|
else
|
||||||
|
addr = pin->enrollee_addr;
|
||||||
|
wps_registrar_remove_authorized_mac(reg, addr);
|
||||||
wps_remove_pin(pin);
|
wps_remove_pin(pin);
|
||||||
wps_registrar_selected_registrar_changed(reg);
|
wps_registrar_selected_registrar_changed(reg);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -63,6 +63,12 @@ int upnp_er_set_selected_registrar(struct wps_registrar *reg,
|
||||||
count = WPS_MAX_AUTHORIZED_MACS;
|
count = WPS_MAX_AUTHORIZED_MACS;
|
||||||
os_memcpy(s->authorized_macs, attr.authorized_macs,
|
os_memcpy(s->authorized_macs, attr.authorized_macs,
|
||||||
count * ETH_ALEN);
|
count * ETH_ALEN);
|
||||||
|
} else if (!attr.version2) {
|
||||||
|
#ifdef CONFIG_WPS2
|
||||||
|
wpa_printf(MSG_DEBUG, "WPS: Add broadcast "
|
||||||
|
"AuthorizedMACs for WPS 1.0 ER");
|
||||||
|
os_memset(s->authorized_macs, 0xff, ETH_ALEN);
|
||||||
|
#endif /* CONFIG_WPS2 */
|
||||||
}
|
}
|
||||||
eloop_register_timeout(WPS_PBC_WALK_TIME, 0,
|
eloop_register_timeout(WPS_PBC_WALK_TIME, 0,
|
||||||
upnp_er_set_selected_timeout, s, NULL);
|
upnp_er_set_selected_timeout, s, NULL);
|
||||||
|
|
Loading…
Add table
Reference in a new issue