def test_requestAvatarIdInvalidCredential(self):
     """
     If the passed credentials aren't handled by any registered checker,
     L{SSHProtocolChecker} should raise L{UnhandledCredentials}.
     """
     checker = SSHProtocolChecker()
     d = checker.requestAvatarId(UsernamePassword('test', 'test'))
     return self.assertFailure(d, UnhandledCredentials)
Exemple #2
0
 def test_registerChecker(self):
     """
     L{SSHProcotolChecker.registerChecker} should add the given checker to
     the list of registered checkers.
     """
     checker = SSHProtocolChecker()
     self.assertEquals(checker.credentialInterfaces, [])
     checker.registerChecker(SSHPublicKeyDatabase())
     self.assertEquals(checker.credentialInterfaces, [ISSHPrivateKey])
     self.assertIsInstance(checker.checkers[ISSHPrivateKey], SSHPublicKeyDatabase)
Exemple #3
0
 def test_registerCheckerWithInterface(self):
     """
     If a apecific interface is passed into
     L{SSHProtocolChecker.registerChecker}, that interface should be
     registered instead of what the checker specifies in
     credentialIntefaces.
     """
     checker = SSHProtocolChecker()
     self.assertEquals(checker.credentialInterfaces, [])
     checker.registerChecker(SSHPublicKeyDatabase(), IUsernamePassword)
     self.assertEquals(checker.credentialInterfaces, [IUsernamePassword])
     self.assertIsInstance(checker.checkers[IUsernamePassword], SSHPublicKeyDatabase)
 def test_requestAvatarId(self):
     """
     L{SSHProtocolChecker.requestAvatarId} should defer to one if its
     registered checkers to authenticate a user.
     """
     checker = SSHProtocolChecker()
     passwordDatabase = InMemoryUsernamePasswordDatabaseDontUse()
     passwordDatabase.addUser('test', 'test')
     checker.registerChecker(passwordDatabase)
     d = checker.requestAvatarId(UsernamePassword('test', 'test'))
     def _callback(avatarId):
         self.assertEquals(avatarId, 'test')
     return d.addCallback(_callback)
    def test_requestAvatarIdWithNotEnoughAuthentication(self):
        """
        If the client indicates that it is never satisfied, by always returning
        False from _areDone, then L{SSHProtocolChecker} should raise
        L{NotEnoughAuthentication}.
        """
        checker = SSHProtocolChecker()
        def _areDone(avatarId):
            return False
        self.patch(checker, 'areDone', _areDone)

        passwordDatabase = InMemoryUsernamePasswordDatabaseDontUse()
        passwordDatabase.addUser('test', 'test')
        checker.registerChecker(passwordDatabase)
        d = checker.requestAvatarId(UsernamePassword('test', 'test'))
        return self.assertFailure(d, NotEnoughAuthentication)
    def test_loopback(self):
        """
        Test that the userauth server and client play nicely with each other.
        """
        server = userauth.SSHUserAuthServer()
        client = ClientUserAuth('foo', self.Factory.Service())

        # set up transports
        server.transport = transport.SSHTransportBase()
        server.transport.service = server
        server.transport.isEncrypted = lambda x: True
        client.transport = transport.SSHTransportBase()
        client.transport.service = client
        server.transport.sessionID = client.transport.sessionID = ''
        # don't send key exchange packet
        server.transport.sendKexInit = client.transport.sendKexInit = \
                lambda: None

        # set up server authentication
        server.transport.factory = self.Factory()
        server.passwordDelay = 0  # remove bad password delay
        realm = Realm()
        portal = Portal(realm)
        checker = SSHProtocolChecker()
        checker.registerChecker(PasswordChecker())
        checker.registerChecker(PrivateKeyChecker())
        checker.registerChecker(PAMChecker())
        checker.areDone = lambda aId: (len(checker.successfulCredentials[aId])
                                       == 3)
        portal.registerChecker(checker)
        server.transport.factory.portal = portal

        d = loopback.loopbackAsync(server.transport, client.transport)
        server.transport.transport.logPrefix = lambda: '_ServerLoopback'
        client.transport.transport.logPrefix = lambda: '_ClientLoopback'

        server.serviceStarted()
        client.serviceStarted()

        def check(ignored):
            self.assertEqual(server.transport.service.name, 'TestService')

        return d.addCallback(check)
Exemple #7
0
    def test_loopback(self):
        """
        Test that the userauth server and client play nicely with each other.
        """
        server = userauth.SSHUserAuthServer()
        client = ClientUserAuth('foo', self.Factory.Service())

        # set up transports
        server.transport = transport.SSHTransportBase()
        server.transport.service = server
        server.transport.isEncrypted = lambda x: True
        client.transport = transport.SSHTransportBase()
        client.transport.service = client
        server.transport.sessionID = client.transport.sessionID = ''
        # don't send key exchange packet
        server.transport.sendKexInit = client.transport.sendKexInit = \
                lambda: None

        # set up server authentication
        server.transport.factory = self.Factory()
        server.passwordDelay = 0 # remove bad password delay
        realm = Realm()
        portal = Portal(realm)
        checker = SSHProtocolChecker()
        checker.registerChecker(PasswordChecker())
        checker.registerChecker(PrivateKeyChecker())
        checker.registerChecker(PAMChecker())
        checker.areDone = lambda aId: (
            len(checker.successfulCredentials[aId]) == 3)
        portal.registerChecker(checker)
        server.transport.factory.portal = portal

        d = loopback.loopbackAsync(server.transport, client.transport)
        server.transport.transport.logPrefix = lambda: '_ServerLoopback'
        client.transport.transport.logPrefix = lambda: '_ClientLoopback'

        server.serviceStarted()
        client.serviceStarted()

        def check(ignored):
            self.assertEqual(server.transport.service.name, 'TestService')
        return d.addCallback(check)
Exemple #8
0
 def test_areDone(self):
     """
     The default L{SSHProcotolChecker.areDone} should simply return True.
     """
     self.assertEquals(SSHProtocolChecker().areDone(None), True)