tests: PMKSA cache control interface operations
Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
9f2cf23e2e
commit
865fa1e9ea
2 changed files with 58 additions and 0 deletions
|
@ -319,6 +319,21 @@ class Hostapd:
|
|||
vals[name_val[0]] = name_val[1]
|
||||
return vals
|
||||
|
||||
def get_pmksa(self, addr):
|
||||
res = self.request("PMKSA")
|
||||
lines = res.splitlines()
|
||||
for l in lines:
|
||||
if addr not in l:
|
||||
continue
|
||||
vals = dict()
|
||||
[index,aa,pmkid,expiration,opportunistic] = l.split(' ')
|
||||
vals['index'] = index
|
||||
vals['pmkid'] = pmkid
|
||||
vals['expiration'] = expiration
|
||||
vals['opportunistic'] = opportunistic
|
||||
return vals
|
||||
return None
|
||||
|
||||
def add_ap(ifname, params, wait_enabled=True, no_enable=False, timeout=30,
|
||||
hostname=None, port=8878):
|
||||
logger.info("Starting AP " + ifname)
|
||||
|
|
|
@ -833,3 +833,46 @@ def test_pmksa_cache_preauth_wpas_oom(dev, apdev):
|
|||
if state.startswith('0:'):
|
||||
break
|
||||
time.sleep(0.05)
|
||||
|
||||
def test_pmksa_cache_ctrl(dev, apdev):
|
||||
"""PMKSA cache control interface operations"""
|
||||
params = hostapd.wpa2_eap_params(ssid="test-pmksa-cache")
|
||||
hapd = hostapd.add_ap(apdev[0]['ifname'], params)
|
||||
bssid = apdev[0]['bssid']
|
||||
addr = dev[0].own_addr()
|
||||
|
||||
dev[0].connect("test-pmksa-cache", proto="RSN", key_mgmt="WPA-EAP",
|
||||
eap="GPSK", identity="gpsk user",
|
||||
password="abcdefghijklmnop0123456789abcdef",
|
||||
scan_freq="2412")
|
||||
|
||||
pmksa_sta = dev[0].get_pmksa(bssid)
|
||||
if pmksa_sta is None:
|
||||
raise Exception("No PMKSA cache entry created on STA")
|
||||
pmksa_ap = hapd.get_pmksa(addr)
|
||||
if pmksa_ap is None:
|
||||
raise Exception("No PMKSA cache entry created on AP")
|
||||
if pmksa_sta['pmkid'] != pmksa_ap['pmkid']:
|
||||
raise Exception("PMKID mismatch in PMKSA cache entries")
|
||||
|
||||
if "OK" not in hapd.request("PMKSA_FLUSH"):
|
||||
raise Exception("PMKSA_FLUSH failed")
|
||||
pmksa_ap = hapd.get_pmksa(addr)
|
||||
if pmksa_ap is not None:
|
||||
raise Exception("PMKSA cache entry was not removed on AP")
|
||||
|
||||
dev[0].request("DISCONNECT")
|
||||
dev[0].wait_disconnected()
|
||||
dev[0].request("RECONNECT")
|
||||
dev[0].wait_connected()
|
||||
|
||||
pmksa_sta2 = dev[0].get_pmksa(bssid)
|
||||
if pmksa_sta2 is None:
|
||||
raise Exception("No PMKSA cache entry created on STA after reconnect")
|
||||
pmksa_ap2 = hapd.get_pmksa(addr)
|
||||
if pmksa_ap2 is None:
|
||||
raise Exception("No PMKSA cache entry created on AP after reconnect")
|
||||
if pmksa_sta2['pmkid'] != pmksa_ap2['pmkid']:
|
||||
raise Exception("PMKID mismatch in PMKSA cache entries after reconnect")
|
||||
if pmksa_sta2['pmkid'] == pmksa_sta['pmkid']:
|
||||
raise Exception("PMKID did not change after reconnect")
|
||||
|
|
Loading…
Reference in a new issue