98 lines
3.8 KiB
Python
98 lines
3.8 KiB
Python
"""test passlib.hosts"""
|
|
#=============================================================================
|
|
# imports
|
|
#=============================================================================
|
|
from __future__ import with_statement
|
|
# core
|
|
import logging; log = logging.getLogger(__name__)
|
|
# site
|
|
# pkg
|
|
from passlib import hosts, hash as hashmod
|
|
from passlib.utils import unix_crypt_schemes
|
|
from passlib.tests.utils import TestCase
|
|
# module
|
|
|
|
#=============================================================================
|
|
# test predefined app contexts
|
|
#=============================================================================
|
|
class HostsTest(TestCase):
|
|
"""perform general tests to make sure contexts work"""
|
|
# NOTE: these tests are not really comprehensive,
|
|
# since they would do little but duplicate
|
|
# the presets in apps.py
|
|
#
|
|
# they mainly try to ensure no typos
|
|
# or dynamic behavior foul-ups.
|
|
|
|
def check_unix_disabled(self, ctx):
|
|
for hash in [
|
|
"",
|
|
"!",
|
|
"*",
|
|
"!$1$TXl/FX/U$BZge.lr.ux6ekjEjxmzwz0",
|
|
]:
|
|
self.assertEqual(ctx.identify(hash), 'unix_disabled')
|
|
self.assertFalse(ctx.verify('test', hash))
|
|
|
|
def test_linux_context(self):
|
|
ctx = hosts.linux_context
|
|
for hash in [
|
|
('$6$rounds=41128$VoQLvDjkaZ6L6BIE$4pt.1Ll1XdDYduEwEYPCMOBiR6W6'
|
|
'znsyUEoNlcVXpv2gKKIbQolgmTGe6uEEVJ7azUxuc8Tf7zV9SD2z7Ij751'),
|
|
('$5$rounds=31817$iZGmlyBQ99JSB5n6$p4E.pdPBWx19OajgjLRiOW0itGny'
|
|
'xDGgMlDcOsfaI17'),
|
|
'$1$TXl/FX/U$BZge.lr.ux6ekjEjxmzwz0',
|
|
'kAJJz.Rwp0A/I',
|
|
]:
|
|
self.assertTrue(ctx.verify("test", hash))
|
|
self.check_unix_disabled(ctx)
|
|
|
|
def test_bsd_contexts(self):
|
|
for ctx in [
|
|
hosts.freebsd_context,
|
|
hosts.openbsd_context,
|
|
hosts.netbsd_context,
|
|
]:
|
|
for hash in [
|
|
'$1$TXl/FX/U$BZge.lr.ux6ekjEjxmzwz0',
|
|
'kAJJz.Rwp0A/I',
|
|
]:
|
|
self.assertTrue(ctx.verify("test", hash))
|
|
h1 = "$2a$04$yjDgE74RJkeqC0/1NheSSOrvKeu9IbKDpcQf/Ox3qsrRS/Kw42qIS"
|
|
if hashmod.bcrypt.has_backend():
|
|
self.assertTrue(ctx.verify("test", h1))
|
|
else:
|
|
self.assertEqual(ctx.identify(h1), "bcrypt")
|
|
self.check_unix_disabled(ctx)
|
|
|
|
def test_host_context(self):
|
|
ctx = getattr(hosts, "host_context", None)
|
|
if not ctx:
|
|
return self.skipTest("host_context not available on this platform")
|
|
|
|
# validate schemes is non-empty,
|
|
# and contains unix_disabled + at least one real scheme
|
|
schemes = list(ctx.schemes())
|
|
self.assertTrue(schemes, "appears to be unix system, but no known schemes supported by crypt")
|
|
self.assertTrue('unix_disabled' in schemes)
|
|
schemes.remove("unix_disabled")
|
|
self.assertTrue(schemes, "should have schemes beside fallback scheme")
|
|
self.assertTrue(set(unix_crypt_schemes).issuperset(schemes))
|
|
|
|
# check for hash support
|
|
self.check_unix_disabled(ctx)
|
|
for scheme, hash in [
|
|
("sha512_crypt", ('$6$rounds=41128$VoQLvDjkaZ6L6BIE$4pt.1Ll1XdDYduEwEYPCMOBiR6W6'
|
|
'znsyUEoNlcVXpv2gKKIbQolgmTGe6uEEVJ7azUxuc8Tf7zV9SD2z7Ij751')),
|
|
("sha256_crypt", ('$5$rounds=31817$iZGmlyBQ99JSB5n6$p4E.pdPBWx19OajgjLRiOW0itGny'
|
|
'xDGgMlDcOsfaI17')),
|
|
("md5_crypt", '$1$TXl/FX/U$BZge.lr.ux6ekjEjxmzwz0'),
|
|
("des_crypt", 'kAJJz.Rwp0A/I'),
|
|
]:
|
|
if scheme in schemes:
|
|
self.assertTrue(ctx.verify("test", hash))
|
|
|
|
#=============================================================================
|
|
# eof
|
|
#=============================================================================
|