diff options
author | Eli Collins <elic@assurancetechnologies.com> | 2012-03-11 18:40:35 -0400 |
---|---|---|
committer | Eli Collins <elic@assurancetechnologies.com> | 2012-03-11 18:40:35 -0400 |
commit | b970d6ee145122005f1e6808466900a94e00dfcc (patch) | |
tree | 6e77a5d3698e90691c084203932716dd8b0deb79 | |
parent | bacfd1448703a106d1ed45e787a03ad671ad5c6c (diff) | |
download | passlib-b970d6ee145122005f1e6808466900a94e00dfcc.tar.gz |
misc bugfixes dealing with changes from last 8 or so commits
-rw-r--r-- | passlib/context.py | 7 | ||||
-rw-r--r-- | passlib/handlers/windows.py | 5 | ||||
-rw-r--r-- | passlib/registry.py | 1 | ||||
-rw-r--r-- | passlib/tests/test_context.py | 9 | ||||
-rw-r--r-- | passlib/tests/test_registry.py | 2 | ||||
-rw-r--r-- | passlib/tests/utils.py | 19 |
6 files changed, 27 insertions, 16 deletions
diff --git a/passlib/context.py b/passlib/context.py index 23eb0dc..e1b5de5 100644 --- a/passlib/context.py +++ b/passlib/context.py @@ -335,9 +335,12 @@ class CryptPolicy(object): handler = elem scheme = handler.name _validate_handler_name(scheme) - else: + elif isinstance(elem, str): handler = get_crypt_handler(elem) scheme = handler.name + else: + raise TypeError("scheme must be name or crypt handler, " + "not %r" % type(elem)) #check scheme hasn't been re-used if scheme in schemes: @@ -1048,7 +1051,7 @@ class _CryptRecord(object): #relative costs of different hashes if under migration) warn("CryptContext: verify exceeded min_verify_time: " "scheme=%r min_verify_time=%r elapsed=%r" % - (self.scheme, mvt, end-start), PasslibContextWarning) + (self.scheme, mvt, end-start), PasslibConfigWarning) return False #================================================================ diff --git a/passlib/handlers/windows.py b/passlib/handlers/windows.py index e4a5199..9805037 100644 --- a/passlib/handlers/windows.py +++ b/passlib/handlers/windows.py @@ -156,11 +156,12 @@ class nthash(uh.StaticHandler): return md4(secret.encode("utf-16-le")).digest() @classmethod - def raw_nthash(cls, secret): + def raw_nthash(cls, secret, hex=False): warn("nthash.raw_nthash() is deprecated, and will be removed " "in Passlib 1.8, please use nthash.raw() instead", DeprecationWarning) - return nthash_hex.raw(secret) + ret = nthash.raw(secret) + return hexlify(ret) if hex else ret #========================================================= # eoc diff --git a/passlib/registry.py b/passlib/registry.py index 5806816..e9781d9 100644 --- a/passlib/registry.py +++ b/passlib/registry.py @@ -294,6 +294,7 @@ def get_crypt_handler(name, default=_NOTSET): return handler #normalize name (and if changed, check dict again) + assert isinstance(name, str), "name must be str instance" alt = name.replace("-","_").lower() if alt != name: warn("handler names should be lower-case, and use underscores instead " diff --git a/passlib/tests/test_context.py b/passlib/tests/test_context.py index efeaaeb..46cd3f5 100644 --- a/passlib/tests/test_context.py +++ b/passlib/tests/test_context.py @@ -209,7 +209,12 @@ admin__context__deprecated = des_crypt, bsdi_crypt ) #check nameless handler rejected - self.assertRaises(ValueError, CryptPolicy, schemes=[uh.StaticHandler]) + class nameless(uh.StaticHandler): + name = None + self.assertRaises(ValueError, CryptPolicy, schemes=[nameless]) + + # check scheme must be name or crypt handler + self.assertRaises(TypeError, CryptPolicy, schemes=[uh.StaticHandler]) #check name conflicts are rejected class dummy_1(uh.StaticHandler): @@ -941,7 +946,7 @@ class CryptContextTest(TestCase): return True def _calc_checksum(self, secret): - time.sleep(cls.delay) + time.sleep(self.delay) return to_unicode(secret + 'x') # silence deprecation warnings for min verify time diff --git a/passlib/tests/test_registry.py b/passlib/tests/test_registry.py index df2f618..c6fa9f6 100644 --- a/passlib/tests/test_registry.py +++ b/passlib/tests/test_registry.py @@ -123,7 +123,7 @@ class RegistryTest(TestCase): self.assertRaises(TypeError, register_crypt_handler, {}) - self.assertRaises(ValueError, register_crypt_handler, uh.StaticHandler) + self.assertRaises(ValueError, register_crypt_handler, type('x', (uh.StaticHandler,), dict(name=None))) self.assertRaises(ValueError, register_crypt_handler, type('x', (uh.StaticHandler,), dict(name="AB_CD"))) self.assertRaises(ValueError, register_crypt_handler, type('x', (uh.StaticHandler,), dict(name="ab-cd"))) diff --git a/passlib/tests/utils.py b/passlib/tests/utils.py index c309bc4..2f36d3e 100644 --- a/passlib/tests/utils.py +++ b/passlib/tests/utils.py @@ -562,13 +562,14 @@ class HandlerCase(TestCase): def supports_config_string(self): return self.do_genconfig() is not None - def iter_known_hashes(self): + @classmethod + def iter_known_hashes(cls): "iterate through known (secret, hash) pairs" - for secret, hash in self.known_correct_hashes: + for secret, hash in cls.known_correct_hashes: yield secret, hash - for config, secret, hash in self.known_correct_configs: + for config, secret, hash in cls.known_correct_configs: yield secret, hash - for alt, secret, hash in self.known_alternate_hashes: + for alt, secret, hash in cls.known_alternate_hashes: yield secret, hash def get_sample_hash(self): @@ -1152,7 +1153,7 @@ class HandlerCase(TestCase): self.assertFalse(self.do_verify(secret2, hash), "full password not used in digest") - def test_61_case_sensitive(self): + def test_61_secret_case_sensitive(self): "test password case sensitivity" hash_insensitive = self.secret_case_insensitive is True verify_insensitive = self.secret_case_insensitive in [True, @@ -1161,7 +1162,7 @@ class HandlerCase(TestCase): lower = 'test' upper = 'TEST' h1 = self.do_encrypt(lower) - if verify_insensitive: + if verify_insensitive and not self.is_disabled_handler: self.assertTrue(self.do_verify(upper, h1), "verify() should not be case sensitive") else: @@ -1169,14 +1170,14 @@ class HandlerCase(TestCase): "verify() should be case sensitive") h2 = self.do_genhash(upper, h1) - if hash_insensitive: + if hash_insensitive or self.is_disabled_handler: self.assertEqual(h2, h1, "genhash() should not be case sensitive") else: self.assertNotEqual(h2, h1, "genhash() should be case sensitive") - def test_62_null(self): + def test_62_secret_null(self): "test password=None" _, hash = self.get_sample_hash() self.assertRaises(TypeError, self.do_encrypt, None) @@ -1782,7 +1783,7 @@ class temporary_backend(object): return orig def __exit__(self, *exc_info): - registry._unload_handler_name(self.name, locations=False) + self.handler.set_backend(self._orig) #========================================================= #helper for creating temp files - all cleaned up when prog exits |