FILS: External management of PMKSA cache entry with Cache Identifier
The PMKSA_GET and PMKSA_ADD commands can now use an optional extra parameter to fetch and add PMKSA cache entries with the FILS Cache Identifier. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
22c54cd738
commit
b7286c1b5d
1 changed files with 27 additions and 1 deletions
|
@ -9164,6 +9164,7 @@ static int wpas_ctrl_iface_pmksa_get(struct wpa_supplicant *wpa_s,
|
||||||
* Entry format:
|
* Entry format:
|
||||||
* <BSSID> <PMKID> <PMK> <reauth_time in seconds>
|
* <BSSID> <PMKID> <PMK> <reauth_time in seconds>
|
||||||
* <expiration in seconds> <akmp> <opportunistic>
|
* <expiration in seconds> <akmp> <opportunistic>
|
||||||
|
* [FILS Cache Identifier]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
for (entry = wpa_sm_pmksa_cache_head(wpa_s->wpa); entry;
|
for (entry = wpa_sm_pmksa_cache_head(wpa_s->wpa); entry;
|
||||||
|
@ -9198,6 +9199,15 @@ static int wpas_ctrl_iface_pmksa_get(struct wpa_supplicant *wpa_s,
|
||||||
break;
|
break;
|
||||||
pos2 += ret;
|
pos2 += ret;
|
||||||
|
|
||||||
|
if (entry->fils_cache_id_set) {
|
||||||
|
ret = os_snprintf(pos2, end - pos2, " %02x%02x",
|
||||||
|
entry->fils_cache_id[0],
|
||||||
|
entry->fils_cache_id[1]);
|
||||||
|
if (os_snprintf_error(end - pos2, ret))
|
||||||
|
break;
|
||||||
|
pos2 += ret;
|
||||||
|
}
|
||||||
|
|
||||||
ret = os_snprintf(pos2, end - pos2, "\n");
|
ret = os_snprintf(pos2, end - pos2, "\n");
|
||||||
if (os_snprintf_error(end - pos2, ret))
|
if (os_snprintf_error(end - pos2, ret))
|
||||||
break;
|
break;
|
||||||
|
@ -9218,12 +9228,13 @@ static int wpas_ctrl_iface_pmksa_add(struct wpa_supplicant *wpa_s,
|
||||||
char *pos, *pos2;
|
char *pos, *pos2;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
struct os_reltime now;
|
struct os_reltime now;
|
||||||
int reauth_time = 0, expiration = 0;
|
int reauth_time = 0, expiration = 0, i;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Entry format:
|
* Entry format:
|
||||||
* <network_id> <BSSID> <PMKID> <PMK> <reauth_time in seconds>
|
* <network_id> <BSSID> <PMKID> <PMK> <reauth_time in seconds>
|
||||||
* <expiration in seconds> <akmp> <opportunistic>
|
* <expiration in seconds> <akmp> <opportunistic>
|
||||||
|
* [FILS Cache Identifier]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ssid = wpa_config_get_network(wpa_s->conf, atoi(cmd));
|
ssid = wpa_config_get_network(wpa_s->conf, atoi(cmd));
|
||||||
|
@ -9271,6 +9282,21 @@ static int wpas_ctrl_iface_pmksa_add(struct wpa_supplicant *wpa_s,
|
||||||
if (sscanf(pos, "%d %d %d %d", &reauth_time, &expiration,
|
if (sscanf(pos, "%d %d %d %d", &reauth_time, &expiration,
|
||||||
&entry->akmp, &entry->opportunistic) != 4)
|
&entry->akmp, &entry->opportunistic) != 4)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
pos = os_strchr(pos, ' ');
|
||||||
|
if (!pos) {
|
||||||
|
if (i < 3)
|
||||||
|
goto fail;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
if (pos) {
|
||||||
|
if (hexstr2bin(pos, entry->fils_cache_id,
|
||||||
|
FILS_CACHE_ID_LEN) < 0)
|
||||||
|
goto fail;
|
||||||
|
entry->fils_cache_id_set = 1;
|
||||||
|
}
|
||||||
os_get_reltime(&now);
|
os_get_reltime(&now);
|
||||||
entry->expiration = now.sec + expiration;
|
entry->expiration = now.sec + expiration;
|
||||||
entry->reauth_time = now.sec + reauth_time;
|
entry->reauth_time = now.sec + reauth_time;
|
||||||
|
|
Loading…
Reference in a new issue