]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
tests: RADIUS server failure cases
authorJouni Malinen <j@w1.fi>
Sun, 1 Mar 2015 17:54:17 +0000 (19:54 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 1 Mar 2015 20:36:52 +0000 (22:36 +0200)
Signed-off-by: Jouni Malinen <j@w1.fi>
tests/hwsim/dictionary.radius
tests/hwsim/test_radius.py

index 88c50d7511be0bc4462ac4e33fb2dabefd29da33..b7f521ea2edfaa124d0063fec4cc83ad76ba71d9 100644 (file)
@@ -1,6 +1,7 @@
 ATTRIBUTE      User-Name               1       string
 ATTRIBUTE      User-Password           2       string
 ATTRIBUTE      NAS-IP-Address          4       ipaddr
+ATTRIBUTE      State                   24      octets
 ATTRIBUTE      Calling-Station-Id      31      string
 ATTRIBUTE      NAS-Identifier          32      string
 ATTRIBUTE      Acct-Session-Id         44      string
index d55fe0618689d97655c2aa1dff48a325b95ff230..75540fc77ef74e6f6743d61345d873c592dab65e 100644 (file)
@@ -956,3 +956,56 @@ def test_radius_auth_force_invalid_client_addr(dev, apdev):
     ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1)
     if ev is not None:
         raise Exception("Unexpected connection")
+
+def add_message_auth(req):
+    req.authenticator = req.CreateAuthenticator()
+    hmac_obj = hmac.new(req.secret)
+    hmac_obj.update(struct.pack("B", req.code))
+    hmac_obj.update(struct.pack("B", req.id))
+
+    # request attributes
+    req.AddAttribute("Message-Authenticator",
+                     "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
+    attrs = req._PktEncodeAttributes()
+
+    # Length
+    flen = 4 + 16 + len(attrs)
+    hmac_obj.update(struct.pack(">H", flen))
+    hmac_obj.update(req.authenticator)
+    hmac_obj.update(attrs)
+    del req[80]
+    req.AddAttribute("Message-Authenticator", hmac_obj.digest())
+
+def test_radius_server_failures(dev, apdev):
+    """RADIUS server failure cases"""
+    try:
+        import pyrad.client
+        import pyrad.packet
+        import pyrad.dictionary
+    except ImportError:
+        raise HwsimSkip("No pyrad modules available")
+
+    dict = pyrad.dictionary.Dictionary("dictionary.radius")
+    client = pyrad.client.Client(server="127.0.0.1", authport=1812,
+                                 secret="radius", dict=dict)
+    client.retries = 1
+    client.timeout = 1
+
+    # unexpected State
+    req = client.CreateAuthPacket(code=pyrad.packet.AccessRequest,
+                                  User_Name="foo")
+    req['State'] = 'foo-state'
+    add_message_auth(req)
+    reply = client.SendPacket(req)
+    if reply.code != pyrad.packet.AccessReject:
+        raise Exception("Unexpected RADIUS response code " + str(reply.code))
+
+    # no EAP-Message
+    req = client.CreateAuthPacket(code=pyrad.packet.AccessRequest,
+                                  User_Name="foo")
+    add_message_auth(req)
+    try:
+        reply = client.SendPacket(req)
+        raise Exception("Unexpected response")
+    except pyrad.client.Timeout:
+        pass