[PATCH 6/7] Retrieve and use a per-PSK vlan_description
Tom Barthe
jeltz+hostap at auro.re
Mon Oct 11 04:24:36 PDT 2021
Signed-off-by: Tom Barthe <jeltz+hostap at auro.re>
---
src/ap/wpa_auth_glue.c | 22 ++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/src/ap/wpa_auth_glue.c b/src/ap/wpa_auth_glue.c
index f0e94700c..31b570e5c 100644
--- a/src/ap/wpa_auth_glue.c
+++ b/src/ap/wpa_auth_glue.c
@@ -334,10 +334,9 @@ static const u8 * hostapd_wpa_auth_get_psk(void *ctx, const u8 *addr,
{
struct hostapd_data *hapd = ctx;
struct sta_info *sta = ap_get_sta(hapd, addr);
+ struct vlan_description *vlan = NULL;
const u8 *psk;
- if (vlan_desc)
- vlan_desc->notempty = 0;
if (psk_len)
*psk_len = PMK_LEN;
@@ -386,6 +385,7 @@ static const u8 * hostapd_wpa_auth_get_psk(void *ctx, const u8 *addr,
if (vlan_desc)
vlan_desc->notempty = 0;
psk = sta->psk->psk;
+ vlan = &sta->psk->vlan;
for (pos = sta->psk; pos; pos = pos->next) {
if (pos->is_passphrase) {
pbkdf2_sha1(pos->passphrase,
@@ -396,10 +396,18 @@ static const u8 * hostapd_wpa_auth_get_psk(void *ctx, const u8 *addr,
}
if (pos->psk == prev_psk) {
psk = pos->next ? pos->next->psk : NULL;
+ vlan = pos->next ? &pos->next->vlan : NULL;
break;
}
}
}
+
+ if (vlan && vlan_desc) {
+ if (vlan && vlan->notempty)
+ *vlan_desc = *vlan;
+ else if (sta->default_radius_vlan.notempty)
+ *vlan_desc = sta->default_radius_vlan;
+ }
return psk;
}
@@ -956,16 +964,14 @@ static int hostapd_wpa_auth_update_vlan(void *ctx, const u8 *addr,
if (!(hapd->iface->drv_flags & WPA_DRIVER_FLAGS_VLAN_OFFLOAD)) {
if (!hostapd_vlan_valid(hapd->conf->vlan, vlan_desc)) {
- wpa_printf(MSG_INFO,
- "Invalid VLAN ID %d in wpa_psk_file",
- vlan_id);
+ wpa_printf(MSG_INFO, "Invalid VLAN ID %d", vlan_id);
return -1;
}
if (ap_sta_set_vlan(hapd, sta, vlan_desc) < 0) {
wpa_printf(MSG_INFO,
- "Failed to assign VLAN ID %d from wpa_psk_file to "
- MACSTR, vlan_id, MAC2STR(sta->addr));
+ "Failed to assign VLAN ID %d to " MACSTR,
+ vlan_id, MAC2STR(sta->addr));
return -1;
}
} else {
@@ -973,7 +979,7 @@ static int hostapd_wpa_auth_update_vlan(void *ctx, const u8 *addr,
}
wpa_printf(MSG_INFO,
- "Assigned VLAN ID %d from wpa_psk_file to " MACSTR,
+ "Assigned VLAN ID %d from to " MACSTR,
vlan_id, MAC2STR(sta->addr));
if ((sta->flags & WLAN_STA_ASSOC) &&
ap_sta_bind_vlan(hapd, sta) < 0)
--
2.30.2
More information about the Hostap
mailing list