Lines Matching full:entry
31 void (*free_cb)(struct rsn_pmksa_cache_entry *entry, void *ctx);
39 static void _pmksa_cache_free_entry(struct rsn_pmksa_cache_entry *entry) in _pmksa_cache_free_entry() argument
41 os_free(entry->vlan_desc); in _pmksa_cache_free_entry()
42 os_free(entry->identity); in _pmksa_cache_free_entry()
43 os_free(entry->dpp_pkhash); in _pmksa_cache_free_entry()
44 wpabuf_free(entry->cui); in _pmksa_cache_free_entry()
46 radius_free_class(&entry->radius_class); in _pmksa_cache_free_entry()
48 bin_clear_free(entry, sizeof(*entry)); in _pmksa_cache_free_entry()
53 struct rsn_pmksa_cache_entry *entry) in pmksa_cache_free_entry() argument
61 pmksa->free_cb(entry, pmksa->ctx); in pmksa_cache_free_entry()
64 hash = PMKID_HASH(entry->pmkid); in pmksa_cache_free_entry()
68 if (pos == entry) { in pmksa_cache_free_entry()
70 prev->hnext = entry->hnext; in pmksa_cache_free_entry()
72 pmksa->pmkid[hash] = entry->hnext; in pmksa_cache_free_entry()
79 /* unlink from entry list */ in pmksa_cache_free_entry()
83 if (pos == entry) { in pmksa_cache_free_entry()
85 prev->next = entry->next; in pmksa_cache_free_entry()
87 pmksa->pmksa = entry->next; in pmksa_cache_free_entry()
94 _pmksa_cache_free_entry(entry); in pmksa_cache_free_entry()
105 wpa_printf(MSG_DEBUG, "RSN: Flush PMKSA cache entry for " in pmksa_cache_auth_flush()
119 wpa_printf(MSG_DEBUG, "RSN: expired PMKSA cache entry for " in pmksa_cache_expire()
144 static void pmksa_cache_from_eapol_data(struct rsn_pmksa_cache_entry *entry, in pmksa_cache_from_eapol_data() argument
153 entry->identity = os_malloc(eapol->identity_len); in pmksa_cache_from_eapol_data()
154 if (entry->identity) { in pmksa_cache_from_eapol_data()
155 entry->identity_len = eapol->identity_len; in pmksa_cache_from_eapol_data()
156 os_memcpy(entry->identity, eapol->identity, in pmksa_cache_from_eapol_data()
162 entry->cui = wpabuf_dup(eapol->radius_cui); in pmksa_cache_from_eapol_data()
165 radius_copy_class(&entry->radius_class, &eapol->radius_class); in pmksa_cache_from_eapol_data()
168 entry->eap_type_authsrv = eapol->eap_type_authsrv; in pmksa_cache_from_eapol_data()
172 entry->vlan_desc = os_zalloc(sizeof(struct vlan_description)); in pmksa_cache_from_eapol_data()
173 if (entry->vlan_desc) in pmksa_cache_from_eapol_data()
174 *entry->vlan_desc = *vlan_desc; in pmksa_cache_from_eapol_data()
176 entry->vlan_desc = NULL; in pmksa_cache_from_eapol_data()
179 entry->acct_multi_session_id = eapol->acct_multi_session_id; in pmksa_cache_from_eapol_data()
184 struct rsn_pmksa_cache_entry *entry, in pmksa_cache_to_eapol_data() argument
187 if (entry == NULL || eapol == NULL) in pmksa_cache_to_eapol_data()
190 if (entry->identity) { in pmksa_cache_to_eapol_data()
192 eapol->identity = os_malloc(entry->identity_len); in pmksa_cache_to_eapol_data()
194 eapol->identity_len = entry->identity_len; in pmksa_cache_to_eapol_data()
195 os_memcpy(eapol->identity, entry->identity, in pmksa_cache_to_eapol_data()
196 entry->identity_len); in pmksa_cache_to_eapol_data()
202 if (entry->cui) { in pmksa_cache_to_eapol_data()
204 eapol->radius_cui = wpabuf_dup(entry->cui); in pmksa_cache_to_eapol_data()
209 radius_copy_class(&eapol->radius_class, &entry->radius_class); in pmksa_cache_to_eapol_data()
216 eapol->eap_type_authsrv = entry->eap_type_authsrv; in pmksa_cache_to_eapol_data()
218 ap_sta_set_vlan(hapd, eapol->sta, entry->vlan_desc); in pmksa_cache_to_eapol_data()
221 eapol->acct_multi_session_id = entry->acct_multi_session_id; in pmksa_cache_to_eapol_data()
226 struct rsn_pmksa_cache_entry *entry) in pmksa_cache_link_entry() argument
231 /* Add the new entry; order by expiration time */ in pmksa_cache_link_entry()
235 if (pos->expiration > entry->expiration) in pmksa_cache_link_entry()
241 entry->next = pmksa->pmksa; in pmksa_cache_link_entry()
242 pmksa->pmksa = entry; in pmksa_cache_link_entry()
244 entry->next = prev->next; in pmksa_cache_link_entry()
245 prev->next = entry; in pmksa_cache_link_entry()
248 hash = PMKID_HASH(entry->pmkid); in pmksa_cache_link_entry()
249 entry->hnext = pmksa->pmkid[hash]; in pmksa_cache_link_entry()
250 pmksa->pmkid[hash] = entry; in pmksa_cache_link_entry()
255 wpa_printf(MSG_DEBUG, "RSN: added PMKSA cache entry for " MACSTR, in pmksa_cache_link_entry()
256 MAC2STR(entry->spa)); in pmksa_cache_link_entry()
257 wpa_hexdump(MSG_DEBUG, "RSN: added PMKID", entry->pmkid, PMKID_LEN); in pmksa_cache_link_entry()
262 * pmksa_cache_auth_add - Add a PMKSA cache entry
274 * Returns: Pointer to the added PMKSA cache entry or %NULL on error
276 * This function create a PMKSA entry for a new PMK and adds it to the PMKSA
277 * cache. If an old entry is already in the cache for the same Supplicant,
278 * this entry will be replaced with the new entry. PMKID will be calculated
288 struct rsn_pmksa_cache_entry *entry; in pmksa_cache_auth_add() local
290 entry = pmksa_cache_auth_create_entry(pmk, pmk_len, pmkid, kck, kck_len, in pmksa_cache_auth_add()
294 if (pmksa_cache_auth_add_entry(pmksa, entry) < 0) in pmksa_cache_auth_add()
297 return entry; in pmksa_cache_auth_add()
302 * pmksa_cache_auth_create_entry - Create a PMKSA cache entry
313 * Returns: Pointer to the added PMKSA cache entry or %NULL on error
315 * This function creates a PMKSA entry.
323 struct rsn_pmksa_cache_entry *entry; in pmksa_cache_auth_create_entry() local
332 entry = os_zalloc(sizeof(*entry)); in pmksa_cache_auth_create_entry()
333 if (entry == NULL) in pmksa_cache_auth_create_entry()
335 os_memcpy(entry->pmk, pmk, pmk_len); in pmksa_cache_auth_create_entry()
336 entry->pmk_len = pmk_len; in pmksa_cache_auth_create_entry()
338 os_memcpy(entry->kck, kck, kck_len); in pmksa_cache_auth_create_entry()
339 entry->kck_len = kck_len; in pmksa_cache_auth_create_entry()
342 os_memcpy(entry->pmkid, pmkid, PMKID_LEN); in pmksa_cache_auth_create_entry()
344 rsn_pmkid_suite_b_192(kck, kck_len, aa, spa, entry->pmkid); in pmksa_cache_auth_create_entry()
346 rsn_pmkid_suite_b(kck, kck_len, aa, spa, entry->pmkid); in pmksa_cache_auth_create_entry()
348 rsn_pmkid(pmk, pmk_len, aa, spa, entry->pmkid, akmp); in pmksa_cache_auth_create_entry()
350 entry->expiration = now.sec; in pmksa_cache_auth_create_entry()
352 entry->expiration += session_timeout; in pmksa_cache_auth_create_entry()
354 entry->expiration += dot11RSNAConfigPMKLifetime; in pmksa_cache_auth_create_entry()
355 entry->akmp = akmp; in pmksa_cache_auth_create_entry()
356 os_memcpy(entry->spa, spa, ETH_ALEN); in pmksa_cache_auth_create_entry()
357 pmksa_cache_from_eapol_data(entry, eapol); in pmksa_cache_auth_create_entry()
359 return entry; in pmksa_cache_auth_create_entry()
364 * pmksa_cache_auth_add_entry - Add a PMKSA cache entry
366 * @entry: Pointer to PMKSA cache entry
368 * This function adds PMKSA cache entry to the PMKSA cache. If an old entry is
369 * already in the cache for the same Supplicant, this entry will be replaced
370 * with the new entry. PMKID will be calculated based on the PMK.
373 struct rsn_pmksa_cache_entry *entry) in pmksa_cache_auth_add_entry() argument
377 if (entry == NULL) in pmksa_cache_auth_add_entry()
380 /* Replace an old entry for the same STA (if found) with the new entry in pmksa_cache_auth_add_entry()
382 pos = pmksa_cache_auth_get(pmksa, entry->spa, NULL); in pmksa_cache_auth_add_entry()
387 /* Remove the oldest entry to make room for the new entry */ in pmksa_cache_auth_add_entry()
389 "entry (for " MACSTR ") to make room for new one", in pmksa_cache_auth_add_entry()
394 pmksa_cache_link_entry(pmksa, entry); in pmksa_cache_auth_add_entry()
405 struct rsn_pmksa_cache_entry *entry; in pmksa_cache_add_okc() local
407 entry = os_zalloc(sizeof(*entry)); in pmksa_cache_add_okc()
408 if (entry == NULL) in pmksa_cache_add_okc()
410 os_memcpy(entry->pmkid, pmkid, PMKID_LEN); in pmksa_cache_add_okc()
411 os_memcpy(entry->pmk, old_entry->pmk, old_entry->pmk_len); in pmksa_cache_add_okc()
412 entry->pmk_len = old_entry->pmk_len; in pmksa_cache_add_okc()
413 entry->expiration = old_entry->expiration; in pmksa_cache_add_okc()
414 entry->akmp = old_entry->akmp; in pmksa_cache_add_okc()
415 os_memcpy(entry->spa, old_entry->spa, ETH_ALEN); in pmksa_cache_add_okc()
416 entry->opportunistic = 1; in pmksa_cache_add_okc()
418 entry->identity = os_malloc(old_entry->identity_len); in pmksa_cache_add_okc()
419 if (entry->identity) { in pmksa_cache_add_okc()
420 entry->identity_len = old_entry->identity_len; in pmksa_cache_add_okc()
421 os_memcpy(entry->identity, old_entry->identity, in pmksa_cache_add_okc()
426 entry->cui = wpabuf_dup(old_entry->cui); in pmksa_cache_add_okc()
428 radius_copy_class(&entry->radius_class, &old_entry->radius_class); in pmksa_cache_add_okc()
430 entry->eap_type_authsrv = old_entry->eap_type_authsrv; in pmksa_cache_add_okc()
432 entry->vlan_desc = os_zalloc(sizeof(struct vlan_description)); in pmksa_cache_add_okc()
433 if (entry->vlan_desc) in pmksa_cache_add_okc()
434 *entry->vlan_desc = *old_entry->vlan_desc; in pmksa_cache_add_okc()
436 entry->vlan_desc = NULL; in pmksa_cache_add_okc()
438 entry->opportunistic = 1; in pmksa_cache_add_okc()
440 pmksa_cache_link_entry(pmksa, entry); in pmksa_cache_add_okc()
442 return entry; in pmksa_cache_add_okc()
452 struct rsn_pmksa_cache_entry *entry, *prev; in pmksa_cache_auth_deinit() local
458 entry = pmksa->pmksa; in pmksa_cache_auth_deinit()
459 while (entry) { in pmksa_cache_auth_deinit()
460 prev = entry; in pmksa_cache_auth_deinit()
461 entry = entry->next; in pmksa_cache_auth_deinit()
474 * pmksa_cache_auth_get - Fetch a PMKSA cache entry
478 * Returns: Pointer to PMKSA cache entry or %NULL if no match was found
484 struct rsn_pmksa_cache_entry *entry; in pmksa_cache_auth_get() local
487 for (entry = pmksa->pmkid[PMKID_HASH(pmkid)]; entry; in pmksa_cache_auth_get()
488 entry = entry->hnext) { in pmksa_cache_auth_get()
490 ether_addr_equal(entry->spa, spa)) && in pmksa_cache_auth_get()
491 os_memcmp(entry->pmkid, pmkid, PMKID_LEN) == 0) in pmksa_cache_auth_get()
492 return entry; in pmksa_cache_auth_get()
495 for (entry = pmksa->pmksa; entry; entry = entry->next) { in pmksa_cache_auth_get()
497 ether_addr_equal(entry->spa, spa)) in pmksa_cache_auth_get()
498 return entry; in pmksa_cache_auth_get()
507 * pmksa_cache_get_okc - Fetch a PMKSA cache entry using OKC
512 * Returns: Pointer to PMKSA cache entry or %NULL if no match was found
520 struct rsn_pmksa_cache_entry *entry; in pmksa_cache_get_okc() local
523 for (entry = pmksa->pmksa; entry; entry = entry->next) { in pmksa_cache_get_okc()
524 if (!ether_addr_equal(entry->spa, spa)) in pmksa_cache_get_okc()
526 if (wpa_key_mgmt_sae(entry->akmp) || in pmksa_cache_get_okc()
527 wpa_key_mgmt_fils(entry->akmp)) { in pmksa_cache_get_okc()
528 if (os_memcmp(entry->pmkid, pmkid, PMKID_LEN) == 0) in pmksa_cache_get_okc()
529 return entry; in pmksa_cache_get_okc()
532 if (entry->akmp == WPA_KEY_MGMT_IEEE8021X_SUITE_B_192 && in pmksa_cache_get_okc()
533 entry->kck_len > 0) in pmksa_cache_get_okc()
534 rsn_pmkid_suite_b_192(entry->kck, entry->kck_len, in pmksa_cache_get_okc()
536 else if (wpa_key_mgmt_suite_b(entry->akmp) && in pmksa_cache_get_okc()
537 entry->kck_len > 0) in pmksa_cache_get_okc()
538 rsn_pmkid_suite_b(entry->kck, entry->kck_len, aa, spa, in pmksa_cache_get_okc()
541 rsn_pmkid(entry->pmk, entry->pmk_len, aa, spa, in pmksa_cache_get_okc()
542 new_pmkid, entry->akmp); in pmksa_cache_get_okc()
544 return entry; in pmksa_cache_get_okc()
552 * @free_cb: Callback function to be called when a PMKSA cache entry is freed
557 pmksa_cache_auth_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry, in pmksa_cache_auth_init() argument
572 static int das_attr_match(struct rsn_pmksa_cache_entry *entry, in das_attr_match() argument
578 if (!ether_addr_equal(attr->sta_addr, entry->spa)) in das_attr_match()
589 (unsigned long long) entry->acct_multi_session_id); in das_attr_match()
596 if (!entry->cui || in das_attr_match()
597 attr->cui_len != wpabuf_len(entry->cui) || in das_attr_match()
598 os_memcmp(attr->cui, wpabuf_head(entry->cui), in das_attr_match()
605 if (!entry->identity || in das_attr_match()
606 attr->user_name_len != entry->identity_len || in das_attr_match()
607 os_memcmp(attr->user_name, entry->identity, in das_attr_match()
621 struct rsn_pmksa_cache_entry *entry, *prev; in pmksa_cache_auth_radius_das_disconnect() local
626 entry = pmksa->pmksa; in pmksa_cache_auth_radius_das_disconnect()
627 while (entry) { in pmksa_cache_auth_radius_das_disconnect()
628 if (das_attr_match(entry, attr)) { in pmksa_cache_auth_radius_das_disconnect()
630 prev = entry; in pmksa_cache_auth_radius_das_disconnect()
631 entry = entry->next; in pmksa_cache_auth_radius_das_disconnect()
635 entry = entry->next; in pmksa_cache_auth_radius_das_disconnect()
656 struct rsn_pmksa_cache_entry *entry; in pmksa_cache_auth_list() local
666 entry = pmksa->pmksa; in pmksa_cache_auth_list()
667 while (entry) { in pmksa_cache_auth_list()
669 i, MAC2STR(entry->spa)); in pmksa_cache_auth_list()
673 pos += wpa_snprintf_hex(pos, buf + len - pos, entry->pmkid, in pmksa_cache_auth_list()
676 (int) (entry->expiration - now.sec), in pmksa_cache_auth_list()
677 entry->opportunistic); in pmksa_cache_auth_list()
681 entry = entry->next; in pmksa_cache_auth_list()
707 struct rsn_pmksa_cache_entry *entry; in pmksa_cache_auth_list_mesh() local
716 * Entry format: in pmksa_cache_auth_list_mesh()
719 for (entry = pmksa->pmksa; entry; entry = entry->next) { in pmksa_cache_auth_list_mesh()
720 if (addr && !ether_addr_equal(entry->spa, addr)) in pmksa_cache_auth_list_mesh()
724 MAC2STR(entry->spa)); in pmksa_cache_auth_list_mesh()
729 pos += wpa_snprintf_hex(pos, end - pos, entry->pmkid, in pmksa_cache_auth_list_mesh()
737 pos += wpa_snprintf_hex(pos, end - pos, entry->pmk, in pmksa_cache_auth_list_mesh()
738 entry->pmk_len); in pmksa_cache_auth_list_mesh()
741 (int) (entry->expiration - now.sec)); in pmksa_cache_auth_list_mesh()