You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							98 lines
						
					
					
						
							3.8 KiB
						
					
					
				
			
		
		
	
	
							98 lines
						
					
					
						
							3.8 KiB
						
					
					
				"""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
 | 
						|
#=============================================================================
 |