__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
# -*- test-case-name: twisted.conch.test.test_unix -*-
# Copyright (c) Twisted Matrix Laboratories.
# See LICENSE for details.
from zope.interface import implementer
from twisted.conch.interfaces import IConchUser
from twisted.cred.checkers import (
AllowAnonymousAccess,
InMemoryUsernamePasswordDatabaseDontUse,
)
from twisted.cred.credentials import (
Anonymous,
IAnonymous,
IUsernamePassword,
UsernamePassword,
)
from twisted.cred.error import LoginDenied
from twisted.cred.portal import Portal
from twisted.internet.interfaces import IReactorProcess
from twisted.python.fakepwd import UserDatabase
from twisted.python.reflect import requireModule
from twisted.trial import unittest
from .test_session import StubClient, StubConnection
cryptography = requireModule("cryptography")
unix = requireModule("twisted.conch.unix")
if unix is not None:
from twisted.conch.unix import UnixConchUser, UnixSSHRealm
@implementer(IReactorProcess)
class MockProcessSpawner:
"""
An L{IReactorProcess} that logs calls to C{spawnProcess}.
"""
def __init__(self):
self._spawnProcessCalls = []
def spawnProcess(
self,
processProtocol,
executable,
args=(),
env={},
path=None,
uid=None,
gid=None,
usePTY=0,
childFDs=None,
):
"""
Log a call to C{spawnProcess}. Do not actually spawn a process.
"""
self._spawnProcessCalls.append(
{
"processProtocol": processProtocol,
"executable": executable,
"args": args,
"env": env,
"path": path,
"uid": uid,
"gid": gid,
"usePTY": usePTY,
"childFDs": childFDs,
}
)
shouldSkip = (
"Cannot run without cryptography"
if cryptography is None
else "Unix system required"
if unix is None
else None
)
class TestSSHSessionForUnixConchUser(unittest.TestCase):
skip = shouldSkip
def testExecCommandEnvironment(self) -> None:
"""
C{execCommand} sets the C{HOME} environment variable to the avatar's home
directory.
"""
userdb = UserDatabase()
homeDirectory = "/made/up/path/"
userName = "user"
userdb.addUser(userName, home=homeDirectory)
self.patch(unix, "pwd", userdb)
mockReactor = MockProcessSpawner()
avatar = UnixConchUser(userName)
avatar.conn = StubConnection(transport=StubClient())
session = unix.SSHSessionForUnixConchUser(avatar, reactor=mockReactor)
protocol = None
command = ["not-actually-executed"]
session.execCommand(protocol, command)
[call] = mockReactor._spawnProcessCalls
self.assertEqual(homeDirectory, call["env"]["HOME"])
class TestUnixSSHRealm(unittest.TestCase):
"""
Tests for L{UnixSSHRealm}.
"""
skip = shouldSkip
def test_unixSSHRealm(self) -> None:
"""
L{UnixSSHRealm} is an L{IRealm} whose C{.requestAvatar} method returns
a L{UnixConchUser}.
"""
userdb = UserDatabase()
home = "/testing/home/value"
userdb.addUser("user", home=home)
self.patch(unix, "pwd", userdb)
pwdb = InMemoryUsernamePasswordDatabaseDontUse(user=b"password")
p = Portal(UnixSSHRealm(), [pwdb])
# there seems to be a bug in mypy-zope where sometimes things don't
# implement their superinterfaces; 0.3.11, when we upgrade to 0.9.0
# this type declaration will be extraneous
creds: IUsernamePassword = UsernamePassword(b"user", b"password")
result = p.login(creds, None, IConchUser)
resultInterface, avatar, logout = self.successResultOf(result)
self.assertIsInstance(avatar, UnixConchUser)
assert isinstance(avatar, UnixConchUser) # legibility for mypy
self.assertEqual(avatar.getHomeDir(), home)
def test_unixSSHRefusesAnonymousLogins(self) -> None:
"""
L{UnixSSHRealm} will refuse anonymous logins.
"""
p = Portal(UnixSSHRealm(), [AllowAnonymousAccess()])
result = p.login(IAnonymous(Anonymous()), None, IConchUser)
loginDenied = self.failureResultOf(result)
self.assertIsInstance(loginDenied.value, LoginDenied)
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| __init__.py | File | 14 B | 0644 |
|
| keydata.py | File | 32.41 KB | 0644 |
|
| loopback.py | File | 706 B | 0644 |
|
| test_address.py | File | 1.65 KB | 0644 |
|
| test_agent.py | File | 12.78 KB | 0644 |
|
| test_cftp.py | File | 50.31 KB | 0644 |
|
| test_channel.py | File | 12.53 KB | 0644 |
|
| test_checkers.py | File | 30.28 KB | 0644 |
|
| test_ckeygen.py | File | 27.29 KB | 0644 |
|
| test_conch.py | File | 25.04 KB | 0644 |
|
| test_connection.py | File | 28.57 KB | 0644 |
|
| test_default.py | File | 11.28 KB | 0644 |
|
| test_endpoints.py | File | 54.51 KB | 0644 |
|
| test_filetransfer.py | File | 31.37 KB | 0644 |
|
| test_forwarding.py | File | 2.14 KB | 0644 |
|
| test_helper.py | File | 20.44 KB | 0644 |
|
| test_insults.py | File | 31.38 KB | 0644 |
|
| test_keys.py | File | 64.35 KB | 0644 |
|
| test_knownhosts.py | File | 48.3 KB | 0644 |
|
| test_manhole.py | File | 13.21 KB | 0644 |
|
| test_manhole_tap.py | File | 4.18 KB | 0644 |
|
| test_mixin.py | File | 1.13 KB | 0644 |
|
| test_openssh_compat.py | File | 4.78 KB | 0644 |
|
| test_recvline.py | File | 24.52 KB | 0644 |
|
| test_scripts.py | File | 1.9 KB | 0644 |
|
| test_session.py | File | 44.72 KB | 0644 |
|
| test_ssh.py | File | 33.05 KB | 0644 |
|
| test_tap.py | File | 5.16 KB | 0644 |
|
| test_telnet.py | File | 26.18 KB | 0644 |
|
| test_text.py | File | 4 KB | 0644 |
|
| test_transport.py | File | 109.5 KB | 0644 |
|
| test_unix.py | File | 4.29 KB | 0644 |
|
| test_userauth.py | File | 32.72 KB | 0644 |
|
| test_window.py | File | 2.18 KB | 0644 |
|