]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Fix endless loop in PSK fetching with PSK-from-RADIUS
authorMichael Braun <michael-dev@fami-braun.de>
Sat, 4 Aug 2012 17:55:47 +0000 (20:55 +0300)
committerJouni Malinen <j@w1.fi>
Sat, 4 Aug 2012 17:55:47 +0000 (20:55 +0300)
Commit 05ab9712b9977192b713f01f07c3b14ca4d1ba78 added support for
fetching WPA PSK from an external RADIUS server and changed
hostapd_wpa_auth_get_psk() to always return the RADIUS supplied PSK (if
set) and ignore the prev_psk parameter for iteration. Fix this by
appending the RADIUS supplied PSK to the list iterated by
hostapd_get_psk and thus returning NULL when prev_psk == sta->psk
(RADIUS).

Signed-hostap: M. Braun <michael-dev@fami-braun.de>

src/ap/wpa_auth_glue.c

index fa4182c41fb6c058f427072c44062272d351e51f..edcdf609f7c5ae133ee5f7a43a9df9b48e986bf6 100644 (file)
@@ -184,9 +184,15 @@ 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);
-       if (sta && sta->psk)
-               return sta->psk;
-       return hostapd_get_psk(hapd->conf, addr, prev_psk);
+       const u8 *psk = hostapd_get_psk(hapd->conf, addr, prev_psk);
+       /*
+        * This is about to iterate over all psks, prev_psk gives the last
+        * returned psk which should not be returned again.
+        * logic list (all hostapd_get_psk; sta->psk)
+        */
+       if (sta && sta->psk && !psk && sta->psk != prev_psk)
+               psk = sta->psk;
+       return psk;
 }