From cedca7d0545e1e330247522d9f24aa0d31616306 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Wed, 28 Dec 2016 13:11:12 +0200 Subject: [PATCH] tests: hostapd configuration SET OOM and error cases Signed-off-by: Jouni Malinen --- tests/hwsim/test_ap_config.py | 142 +++++++++++++++++++++++++++++++++- 1 file changed, 141 insertions(+), 1 deletion(-) diff --git a/tests/hwsim/test_ap_config.py b/tests/hwsim/test_ap_config.py index 0ef0402a3..0a800cc6a 100644 --- a/tests/hwsim/test_ap_config.py +++ b/tests/hwsim/test_ap_config.py @@ -7,10 +7,12 @@ import os import signal import time +import logging +logger = logging.getLogger(__name__) from remotehost import remote_compatible import hostapd -from utils import alloc_fail +from utils import alloc_fail, fail_test @remote_compatible def test_ap_config_errors(dev, apdev): @@ -229,3 +231,141 @@ def test_ap_config_eap_user_file_parsing(dev, apdev, params): f.write(t) if "FAIL" not in hapd.request("SET eap_user_file " + tmp): raise Exception("eap_user_file accepted during OOM") + +def test_ap_config_set_oom(dev, apdev): + """hostapd configuration parsing OOM""" + hapd = hostapd.add_ap(apdev[0], { "ssid": "foobar" }) + + tests = [ (1, "hostapd_parse_das_client", + "SET radius_das_client 192.168.1.123 pw"), + (1, "hostapd_config_read_wep", "SET wep_key0 \"hello\""), + (1, "hostapd_config_read_wep", "SET wep_key0 0102030405"), + (1, "hostapd_parse_chanlist", "SET chanlist 1 6 11-13"), + (1, "hostapd_config_bss", "SET bss foo"), + (2, "hostapd_config_bss", "SET bss foo"), + (3, "hostapd_config_bss", "SET bss foo"), + (1, "add_r0kh", + "SET r0kh 02:01:02:03:04:05 r0kh-1.example.com 000102030405060708090a0b0c0d0e0f"), + (1, "add_r1kh", + "SET r1kh 02:01:02:03:04:05 02:11:22:33:44:55 000102030405060708090a0b0c0d0e0f"), + (1, "parse_roaming_consortium", "SET roaming_consortium 021122"), + (1, "parse_lang_string", "SET venue_name eng:Example venue"), + (1, "parse_3gpp_cell_net", + "SET anqp_3gpp_cell_net 244,91;310,026;234,56"), + (1, "parse_nai_realm", "SET nai_realm 0,example.com;example.net"), + (2, "parse_nai_realm", "SET nai_realm 0,example.com;example.net"), + (1, "parse_anqp_elem", "SET anqp_elem 265:0000"), + (2, "parse_anqp_elem", "SET anqp_elem 266:000000"), + (1, "hs20_parse_conn_capab", "SET hs20_conn_capab 1:0:2"), + (1, "hs20_parse_wan_metrics", + "SET hs20_wan_metrics 01:8000:1000:80:240:3000"), + (1, "hs20_parse_icon", + "SET hs20_icon 32:32:eng:image/png:icon32:/tmp/icon32.png"), + (1, "hs20_parse_osu_server_uri", + "SET osu_server_uri https://example.com/osu/"), + (1, "hostapd_config_parse_acs_chan_bias", + "SET acs_chan_bias 1:0.8 6:0.8 11:0.8"), + (2, "hostapd_config_parse_acs_chan_bias", + "SET acs_chan_bias 1:0.8 6:0.8 11:0.8"), + (1, "parse_wpabuf_hex", "SET vendor_elements 01020304"), + (1, "parse_fils_realm", "SET fils_realm example.com"), + (1, "hostapd_config_fill", + "SET pac_opaque_encr_key 000102030405060708090a0b0c0d0e0f"), + (1, "hostapd_config_fill", "SET eap_message hello"), + (1, "hostapd_config_fill", + "SET wpa_psk 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"), + (1, "hostapd_config_fill", "SET time_zone EST5"), + (1, "hostapd_config_fill", + "SET network_auth_type 02http://www.example.com/redirect/"), + (1, "hostapd_config_fill", "SET domain_name example.com"), + (1, "hostapd_config_fill", "SET hs20_operating_class 5173"), + (1, "hostapd_config_fill", "SET own_ie_override 11223344"), + (1, "hostapd_parse_intlist", "SET sae_groups 19 25"), + (1, "hostapd_parse_intlist", "SET basic_rates 10 20 55 110"), + (1, "hostapd_parse_intlist", "SET supported_rates 10 20 55 110") ] + for count, func, cmd in tests: + with alloc_fail(hapd, count, func): + if "FAIL" not in hapd.request(cmd): + raise Exception("Command accepted during OOM: " + cmd) + + hapd.set("hs20_icon", "32:32:eng:image/png:icon32:/tmp/icon32.png") + hapd.set("hs20_conn_capab", "1:0:2") + hapd.set("nai_realm", "0,example.com;example.net") + hapd.set("venue_name", "eng:Example venue") + hapd.set("roaming_consortium", "021122") + hapd.set("osu_server_uri", "https://example.com/osu/") + hapd.set("vendor_elements", "01020304") + hapd.set("vendor_elements", "01020304") + hapd.set("vendor_elements", "") + hapd.set("lci", "11223344") + hapd.set("civic", "11223344") + hapd.set("lci", "") + hapd.set("civic", "") + + tests = [ (1, "hs20_parse_icon", + "SET hs20_icon 32:32:eng:image/png:icon32:/tmp/icon32.png"), + (1, "parse_roaming_consortium", "SET roaming_consortium 021122"), + (2, "parse_nai_realm", "SET nai_realm 0,example.com;example.net"), + (1, "parse_lang_string", "SET venue_name eng:Example venue"), + (1, "hs20_parse_osu_server_uri", + "SET osu_server_uri https://example.com/osu/"), + (1, "hs20_parse_osu_nai", "SET osu_nai anonymous@example.com"), + (1, "hostapd_parse_intlist", "SET osu_method_list 1 0"), + (1, "hs20_parse_osu_icon", "SET osu_icon icon32"), + (2, "hs20_parse_osu_icon", "SET osu_icon icon32"), + (2, "hs20_parse_osu_icon", "SET osu_icon icon32"), + (1, "hs20_parse_conn_capab", "SET hs20_conn_capab 1:0:2") ] + for count, func, cmd in tests: + with alloc_fail(hapd, count, func): + if "FAIL" not in hapd.request(cmd): + raise Exception("Command accepted during OOM (2): " + cmd) + + tests = [ (1, "parse_fils_realm", "SET fils_realm example.com") ] + for count, func, cmd in tests: + with fail_test(hapd, count, func): + if "FAIL" not in hapd.request(cmd): + raise Exception("Command accepted during FAIL_TEST: " + cmd) + +def test_ap_config_set_errors(dev, apdev): + """hostapd configuration parsing errors""" + hapd = hostapd.add_ap(apdev[0], { "ssid": "foobar" }) + hapd.set("wep_key0", '"hello"') + hapd.set("wep_key1", '"hello"') + hapd.set("wep_key0", '') + hapd.set("wep_key0", '"hello"') + if "FAIL" not in hapd.request("SET wep_key1 \"hello\""): + raise Exception("SET wep_key1 allowed to override existing key") + hapd.set("wep_key1", '') + hapd.set("wep_key1", '"hello"') + + hapd.set("auth_server_addr", "127.0.0.1") + hapd.set("acct_server_addr", "127.0.0.1") + + tests = [ "SET eap_reauth_period -1", + "SET fst_llt ", + "SET auth_server_addr_replace foo", + "SET acct_server_addr_replace foo" ] + for t in tests: + if "FAIL" not in hapd.request(t): + raise Exception("Invalid command accepted: " + t) + + # Deprecated entries + hapd.set("tx_queue_after_beacon_aifs", '2') + hapd.set("tx_queue_beacon_aifs", '2') + hapd.set("tx_queue_data9_aifs", '2') + hapd.set("debug", '1') + hapd.set("dump_file", '/tmp/hostapd-test-dump') + hapd.set("eap_authenticator", '0') + hapd.set("radio_measurements", '0') + hapd.set("radio_measurements", '1') + + # Various extra coverage (not really errors) + hapd.set("logger_syslog_level", '1') + hapd.set("logger_syslog", '0') + + for i in range(50000): + if "OK" not in hapd.request("SET hs20_conn_capab 17:5060:0"): + logger.info("hs20_conn_capab limit at %d" % i) + break + if i < 1000 or i >= 49999: + raise Exception("hs20_conn_capab limit not seen")