+
    Dfj.                     p   ^ RI Ht ^ RIHt ^ RIHtHt ^ RIHtH	t	H
t
Ht ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^RIHtHt ]! R4      t]! R4      t]e	   ^ RIHtHt ]! ]4       ! R R4      4       t ]f   RM]f   RMRt! ! R R]PD                  4      t# ! R R]PD                  4      t$R# )    )implementer)
IConchUser)AllowAnonymousAccess'InMemoryUsernamePasswordDatabaseDontUse)	Anonymous
IAnonymousIUsernamePasswordUsernamePassword)LoginDenied)Portal)IReactorProcess)UserDatabase)requireModule)unittest)
StubClientStubConnectioncryptographyztwisted.conch.unixN)UnixConchUserUnixSSHRealmc                   B   a  ] tR t^"t o RtR tR/ RRR^ R3R ltRtV tR# )MockProcessSpawnerz;
An L{IReactorProcess} that logs calls to C{spawnProcess}.
c                    . V n         R # )N_spawnProcessCalls)selfs   &>/usr/lib/python3/dist-packages/twisted/conch/test/test_unix.py__init__MockProcessSpawner.__init__(   s
    "$    Nc
                `    V P                   P                  RVRVRVRVRVRVRVRVR	V	/	4       R
# )zA
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   spawnProcessMockProcessSpawner.spawnProcess+   sJ     	&&!?jsss&H
	
r   r    )	__name__
__module____qualname____firstlineno____doc__r   r+   __static_attributes____classdictcell____classdict__s   @r   r   r   "   s0     % 
 
r   r   zCannot run without cryptographyzUnix system requiredc                   6   a  ] tR t^Rt o ]tV 3R lR ltRtV tR# )TestSSHSessionForUnixConchUserc                   < V ^8  d   QhRR/#    returnNr-   )formatr6   s   "r   __annotate__+TestSSHSessionForUnixConchUser.__annotate__U   s     = =D =r   c                   \        4       pRpRpVP                  W2R7       V P                  \        RV4       \	        4       p\        V4      p\        \        4       R7      Vn        \        P                  WTR7      pRpR.pVP                  Wx4       VP                  w  p	V P                  W)R	,          R
,          4       R# )zV
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   testExecCommandEnvironment9TestSSHSessionForUnixConchUser.testExecCommandEnvironmentU   s    
 (x4

4'(*x($z|<11&1N*+H.//UF(;<r   r-   N)	r.   r/   r0   r1   
shouldSkipskiprX   r3   r4   r5   s   @r   r8   r8   R   s     D= =r   r8   c                   L   a  ] tR t^jt o Rt]tV 3R lR ltV 3R lR ltRt	V t
R# )TestUnixSSHRealmz
Tests for L{UnixSSHRealm}.
c                   < V ^8  d   QhRR/# r:   r-   )r=   r6   s   "r   r>   TestUnixSSHRealm.__annotate__q   s     4 44 4r   c                   \        4       pRpVP                  RVR7       V P                  \        RV4       \	        RR7      p\        \        4       V.4      p\        RR4      pVP                  VR\        4      pV P                  V4      w  rxp	V P                  V\        4       \        V\        4      '       g   Q hV P                  VP                  4       V4       R# )	z\
L{UnixSSHRealm} is an L{IRealm} whose C{.requestAvatar} method returns
a L{UnixConchUser}.
z/testing/home/valuerA   rB   rD   s   password)rA   s   userN)r   rH   rI   rJ   r   r   r   r
   loginr   successResultOfassertIsInstancer   
isinstancerN   
getHomeDir)
r   rO   rC   pwdbpcredsresultresultInterfacerS   logouts
   &         r   test_unixSSHRealm"TestUnixSSHRealm.test_unixSSHRealmq   s    
 $vD)

4'6KH<>D6*
 $4G[#Ij1*.*>*>v*F'fm4&-0000**,d3r   c                   < V ^8  d   QhRR/# r:   r-   )r=   r6   s   "r   r>   r_      s     > >D >r   c                    \        \        4       \        4       .4      pVP                  \	        \        4       4      R\        4      pV P                  V4      pV P                  VP                  \        4       R# )z/
L{UnixSSHRealm} will refuse anonymous logins.
N)r   r   r   ra   r   r   r   failureResultOfrc   valuer   )r   rg   ri   loginDenieds   &   r   "test_unixSSHRefusesAnonymousLogins3TestUnixSSHRealm.test_unixSSHRefusesAnonymousLogins   sX     <>$8$:#;<IK0$
C**62k//=r   r-   N)r.   r/   r0   r1   r2   rZ   r[   rl   rs   r3   r4   r5   s   @r   r]   r]   j   s%      D4 4,> >r   r]   )%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   rJ   twisted.conch.unixr   r   r   rZ   TestCaser8   r]   r-   r   r   <module>r      s    ' /  + & 7 / 0 " 4^,)*> _#
 #
 #
P  & | 
 	 =X%6%6 =0$>x(( $>r   