Ë
    oj.  ã                   ób  — d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ ddlmZmZ  ed«      Z ed«      Ze�d dlmZmZ  ee«       G d„ d«      «       Z e€dne€dndZ! G d„ dejD                  «      Z# G d„ dejD                  «      Z$y)é    )Úimplementer)Ú
IConchUser)ÚAllowAnonymousAccessÚ'InMemoryUsernamePasswordDatabaseDontUse)Ú	AnonymousÚ
IAnonymousÚIUsernamePasswordÚUsernamePassword)ÚLoginDenied)ÚPortal)ÚIReactorProcess)ÚUserDatabase)ÚrequireModule)Úunittesté   )Ú
StubClientÚStubConnectionÚcryptographyztwisted.conch.unixN)ÚUnixConchUserÚUnixSSHRealmc                   ó,   — e Zd ZdZd„ Zdi dddddfd„Zy)ÚMockProcessSpawnerzC
    An L{IReactorProcess} that logs calls to C{spawnProcess}.
    c                 ó   — g | _         y )N)Ú_spawnProcessCalls)Úselfs    ú>/usr/lib/python3/dist-packages/twisted/conch/test/test_unix.pyÚ__init__zMockProcessSpawner.__init__(   s
   € Ø"$ˆÕó    © Nr   c
                 óN   — | j                   j                  |||||||||	dœ	«       y)zQ
        Log a call to C{spawnProcess}. Do not actually spawn a process.
        )	ÚprocessProtocolÚ
executableÚargsÚenvÚpathÚuidÚgidÚusePTYÚchildFDsN)r   Úappend)
r   r!   r"   r#   r$   r%   r&   r'   r(   r)   s
             r   ÚspawnProcesszMockProcessSpawner.spawnProcess+   s8   € ð 	×Ñ×&Ñ&à#2Ø(ØØØØØØ Ø$ñ
õ	
r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r+   r   r   r   r   r   "   s(   „ ñò%ð ØØØØØØô
r   r   zCannot run without cryptographyzUnix system requiredc                   ó   — e Zd ZeZdd„Zy)ÚTestSSHSessionForUnixConchUserNc                 óx  — t        «       }d}d}|j                  ||¬«       | j                  t        d|«       t	        «       }t        |«      }t        t        «       ¬«      |_        t        j                  ||¬«      }d}dg}|j                  ||«       |j                  \  }	| j                  ||	d	   d
   «       y)zn
        C{execCommand} sets the C{HOME} environment variable to the avatar's home
        directory.
        z/made/up/path/Úuser©ÚhomeÚpwd)Ú	transport)ÚreactorNznot-actually-executedr$   ÚHOME)r   ÚaddUserÚpatchÚunixr   r   r   r   ÚconnÚSSHSessionForUnixConchUserÚexecCommandr   ÚassertEqual)
r   ÚuserdbÚhomeDirectoryÚuserNameÚmockReactorÚavatarÚsessionÚprotocolÚcommandÚcalls
             r   ÚtestExecCommandEnvironmentz9TestSSHSessionForUnixConchUser.testExecCommandEnvironmentU   s­   € ô
 “ˆØ(ˆØˆØ�‰�x mˆÔ4Ø�
‰
”4˜ Ô'Ü(Ó*ˆÜ˜xÓ(ˆÜ$¬z«|Ô<ˆŒÜ×1Ñ1°&À+Ð1ÓNˆØˆØ*Ð+ˆØ×Ñ˜H gÔ.Ø×/Ñ/‰ˆØ×Ñ˜¨¨U©°FÑ(;Õ<r   ©ÚreturnN)r,   r-   r.   Ú
shouldSkipÚskiprJ   r   r   r   r1   r1   R   s   „ Ø€Dô=r   r1   c                   ó$   — e Zd ZdZeZdd„Zdd„Zy)ÚTestUnixSSHRealmz$
    Tests for L{UnixSSHRealm}.
    Nc                 ó²  — t        «       }d}|j                  d|¬«       | j                  t        d|«       t	        d¬«      }t        t        «       |g«      }t        dd«      }|j                  |dt        «      }| j                  |«      \  }}}	| j                  |t        «       t        |t        «      sJ ‚| j                  |j                  «       |«       y)	zt
        L{UnixSSHRealm} is an L{IRealm} whose C{.requestAvatar} method returns
        a L{UnixConchUser}.
        z/testing/home/valuer3   r4   r6   s   password)r3   s   userN)r   r:   r;   r<   r   r   r   r
   Úloginr   ÚsuccessResultOfÚassertIsInstancer   Ú
isinstancer@   Ú
getHomeDir)
r   rA   r5   ÚpwdbÚpÚcredsÚresultÚresultInterfacerE   Úlogouts
             r   Útest_unixSSHRealmz"TestUnixSSHRealm.test_unixSSHRealmq   sº   € ô
 “ˆØ$ˆØ�‰�v DˆÔ)Ø�
‰
”4˜ Ô'Ü6¸KÔHˆÜ”<“> D 6Ó*ˆô
 $4°G¸[Ó#IˆØ—‘˜ ¤jÓ1ˆØ*.×*>Ñ*>¸vÓ*FÑ'ˆ˜ Ø×Ñ˜f¤mÔ4Ü˜&¤-Ô0Ð0Ð0Ø×Ñ˜×*Ñ*Ó,¨dÕ3r   c                 óð   — t        t        «       t        «       g«      }|j                  t	        t        «       «      dt        «      }| j                  |«      }| j                  |j                  t        «       y)z?
        L{UnixSSHRealm} will refuse anonymous logins.
        N)r   r   r   rR   r   r   r   ÚfailureResultOfrT   Úvaluer   )r   rX   rZ   ÚloginDenieds       r   Ú"test_unixSSHRefusesAnonymousLoginsz3TestUnixSSHRealm.test_unixSSHRefusesAnonymousLogins‡   sX   € ô ”<“>Ô$8Ó$:Ð#;Ó<ˆØ—‘œ¤I£KÓ0°$¼
ÓCˆØ×*Ñ*¨6Ó2ˆØ×Ñ˜k×/Ñ/´Õ=r   rK   )r,   r-   r.   r/   rM   rN   r]   rb   r   r   r   rP   rP   j   s   „ ñð €Dó4ô,>r   rP   )%Úzope.interfacer   Útwisted.conch.interfacesr   Útwisted.cred.checkersr   r   Útwisted.cred.credentialsr   r   r	   r
   Útwisted.cred.errorr   Útwisted.cred.portalr   Útwisted.internet.interfacesr   Útwisted.python.fakepwdr   Útwisted.python.reflectr   Útwisted.trialr   Útest_sessionr   r   r   r<   Útwisted.conch.unixr   r   r   rM   ÚTestCaser1   rP   r   r   r   ú<module>rp      sµ   ðõ 'å /÷÷ó õ +Ý &Ý 7Ý /Ý 0Ý "ß 4á˜^Ó,€ÙÐ)Ó*€àÐß>ñ ˆ_Ó÷#
ð #
ó ð#
ðP Ðñ &ð €|ñ 
 à	ð ô= X×%6Ñ%6ô =ô0$>�x×(Ñ(õ $>r   