From 4c50517503da531df315bb04d171464fab65eb0d Mon Sep 17 00:00:00 2001 From: Eli Collins Date: Wed, 1 Aug 2012 17:00:46 -0400 Subject: border case: CryptContext now accepts keys with mixed '.' and '__' separators --- passlib/context.py | 2 +- passlib/tests/test_context.py | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/passlib/context.py b/passlib/context.py index 2b091f1..940954d 100644 --- a/passlib/context.py +++ b/passlib/context.py @@ -1901,7 +1901,7 @@ class CryptContext(object): """helper used to parse ``cat__scheme__option`` keys into a tuple""" # split string into 1-3 parts assert isinstance(ckey, str) - parts = ckey.split("." if "." in ckey else "__") + parts = ckey.replace(".","__").split("__") count = len(parts) if count == 1: cat, scheme, key = None, None, parts[0] diff --git a/passlib/tests/test_context.py b/passlib/tests/test_context.py index 85dc7d0..cdd8746 100644 --- a/passlib/tests/test_context.py +++ b/passlib/tests/test_context.py @@ -423,6 +423,14 @@ sha512_crypt__min_rounds = 45000 self.assertRaises(TypeError, CryptContext, category__scheme__option__invalid = 30000) + # keys with mixed separators should be handled correctly. + # (testing actual data, not to_dict(), since re-render hid original bug) + self.assertRaises(KeyError, parse, + **{"admin.context__schemes":"md5_crypt"}) + ctx = CryptContext(**{"schemes":"md5_crypt,des_crypt", + "admin.context__default":"des_crypt"}) + self.assertEqual(ctx.default_scheme("admin"), "des_crypt") + # # context option -specific tests # -- cgit v1.2.1