From 06df1369d7a790d13f37ea919916007ea0a74aa6 Mon Sep 17 00:00:00 2001 From: Ben Timby Date: Fri, 4 May 2018 12:10:43 -0400 Subject: [PATCH 1/2] Allow use of unknown radius codes (but not names). --- radius.py | 10 ++++++++-- tests.py | 6 +++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/radius.py b/radius.py index b2fe99f..5325092 100755 --- a/radius.py +++ b/radius.py @@ -322,7 +322,8 @@ def __init__(self, initialdata={}): def __getkeys(self, value): """Return tuple of code, name for given code or name.""" if isinstance(value, int): - return value, ATTRS[value] + return value, ATTRS.get(value, None) + else: id = ATTR_NAMES[value.lower()] return id, ATTRS[id] @@ -351,8 +352,13 @@ def __setitem__(self, key, value): """ try: code, name = self.__getkeys(key) + except KeyError: - raise ValueError('Invalid radius attribute: %s' % key) + raise ValueError('Unknown radius attribute: %s' % key) + + if name is None: + LOGGER.warning('Unknown radius attribute code %s' % code) + values = self.get(code, []) values.append(value) UserDict.__setitem__(self, code, values) diff --git a/tests.py b/tests.py index 84a9586..0613b0e 100644 --- a/tests.py +++ b/tests.py @@ -51,10 +51,10 @@ def test_set_get_item(self): """Test setting and getting items.""" a = radius.Attributes() - # Cannot use invalid radius codes or names. - with self.assertRaises(ValueError): - a[128] = b'bar' + # Can use unknown radius codes. + a[128] = b'bar' + # Cannot use invalid radius names. with self.assertRaises(ValueError): a['foo'] = b'bar' From ba642d2c2ee27c7894b4c00832ca0e2810b7edc2 Mon Sep 17 00:00:00 2001 From: Ben Timby Date: Mon, 7 May 2018 11:42:06 -0400 Subject: [PATCH 2/2] Fix test. --- tests.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests.py b/tests.py index 3934340..289e8f4 100644 --- a/tests.py +++ b/tests.py @@ -66,7 +66,8 @@ def test_set_get_item(self): self.assertEqual([b'foobar'], a[radius.ATTR_USER_NAME]) self.assertEqual([b'foobar'], a['user-name']) self.assertEqual([b'foobar'], a['user-Name']) - self.assertEqual([('User-Name', ['foobar'])], list(a.nameditems())) + self.assertEqual( + [(None, ['bar']), ('User-Name', ['foobar'])], list(a.nameditems())) def test_init_update(self): """Test __init__ and update."""