+
    DfjB                       R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RI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HtHt ^ R	IHt ^ R
IHtH t H!t! ^ RI"H#t#H$t$H%t%H&t&H't'H(t( ^ RI)H*t* ^ RI+H,t, ^ RI-H.t. ^ RI/H0t0 ^ RI1H2t2 ^ RI3H4t4 ^ RI5H6t6  ^ RI7t7]! ]*Pr                  4       ! R R4      4       t: ! R R]4      t;]! ]4       ! R R4      4       t<]! ]4       ! R R4      4       t=]! ]4       ! R R4      4       t> ! R R4      t?]4P                  ! ]=];]P6                  4       ]4P                  ! ]<];]!P2                  4       R#   ]8 d    Rt7 Li ; i)z
A UNIX SSH server.
)annotationsN)CallableDictTuple)implementer)ttymodes)	ConchUser)
ConchError)ISession	ISFTPFileISFTPServer)lsLine)filetransfer
forwardingsession)
FXF_APPEND	FXF_CREATFXF_EXCLFXF_READ	FXF_TRUNC	FXF_WRITE)portal)LoginDenied)ProcessExitedAlready)IListeningPort)Logger)
components)nativeStringc                  "    ] tR t^3tR R ltRtR# )UnixSSHRealmc               (    V ^8  d   QhRRRRRRRR/# )	   usernamezbytes | Tuple[()]mindobject
interfaceszportal._InterfaceItselfreturnzATuple[portal._InterfaceItself, UnixConchUser, Callable[[], None]] )formats   "4/usr/lib/python3/dist-packages/twisted/conch/unix.py__annotate__UnixSSHRealm.__annotate__5   s3     	0 	0#	0 	0 -		0
 
K	0    c                	    \        V\        4      '       g   \        R 4      h\        VP	                  4       4      pV^ ,          WDP
                  3# )z5UNIX SSH realm does not authorize anonymous sessions.)
isinstancebytesr   UnixConchUserdecodelogout)selfr"   r#   r%   users   &&&* r)   requestAvatarUnixSSHRealm.requestAvatar5   sA     (E**UVVX__./!}dKK//r,   r'   N)__name__
__module____qualname____firstlineno__r5   __static_attributes__r'   r,   r)   r   r   3   s    	0 	0r,   r   c                  X    ] tR t^AtR R ltR tR tR tR tR t	R t
R	 R
 ltR tRtR# )r0   c                    V ^8  d   QhRRRR/# )r!   r"   strr&   Noner'   )r(   s   "r)   r*   UnixConchUser.__annotate__B   s     P P P Pr,   c                	   \         P                  ! V 4       Wn        \        P                  ! V P                  4      V n        V P
                  ^,          .p\        P                  ! 4        F  w  r4rVW9   g   K  VP                  V4       K!  	  W n	        / V n
        V P                  P                  R\        P                  R\        P                   /4       V P"                  P                  R\$        P&                  /4       R# )   s   sessions   direct-tcpips   sftpN)r   __init__r"   pwdgetpwnampwdDatagrpgetgrallappendotherGroups	listenerschannelLookupupdater   
SSHSessionr   openConnectForwardingClientsubsystemLookupr   FileTransferServer)r3   r"   l	groupnamepasswordgiduserlists   &&     r)   rC   UnixConchUser.__init__B   s    4  ||DMM2\\!_25,,..I# 3A   	 	!!G..!G!G	
 	##Wl.M.M$NOr,   c                	(    V P                   R ,          # ):r!      NrF   r3   s   &r)   getUserGroupIdUnixConchUser.getUserGroupIdW   s    ||C  r,   c                	    V P                   # N)rJ   r[   s   &r)   getOtherGroupsUnixConchUser.getOtherGroupsZ   s    r,   c                	(    V P                   ^,          # )   rZ   r[   s   &r)   
getHomeDirUnixConchUser.getHomeDir]       ||Ar,   c                	(    V P                   ^,          # )   rZ   r[   s   &r)   getShellUnixConchUser.getShell`   rf   r,   c           	     	   \         P                  ! V4      w  r#^ RIHp  V P	                  VP
                  V\         P                  ! V P                  W#3\         P                  4      VR7      pWPP                  W#3&   V^ 8X  d1   VP                  4       ^,          p^\        P                  ! RV4      3# ^#   \         d     ^ # i ; i)    reactor)	interfacez>L)r   unpackGlobal_tcpip_forwardtwisted.internetrn   
_runAsUser	listenTCPSSHListenForwardingFactoryconn SSHListenServerForwardingChannelrK   getHoststructpackBaseException)r3   data
hostToBind
portToBindrn   listeners   &&    r)   global_tcpip_forward"UnixConchUser.global_tcpip_forwardc   s    !+!F!Ft!L
,	!!55II,??
 % ' 	H 8@NNJ34Q%--/2
&++dJ777  		s   AB6 6CCc                	    \         P                  ! V4      w  r#V P                  P                  W#3R 4      pV'       g   ^ # V P                  W#3 V P	                  VP
                  4       ^# r_   )r   rp   rK   getrr   stopListening)r3   r{   r|   r}   r~   s   &&   r)   global_cancel_tcpip_forward)UnixConchUser.global_cancel_tcpip_forward|   sX    !+!F!Ft!L
>>%%z&>ENNJ34../r,   c                   V ^8  d   QhRR/# )r!   r&   r?   r'   )r(   s   "r)   r*   r@      s     
 
 
r,   c                	    V P                   P                  4        F  pV P                  VP                  4       K   	  V P                  P                  R V P                  \        V P                   4      R7       R# )z,avatar {username} logging out ({nlisteners}))r"   
nlistenersN)rK   valuesrr   r   _loginfor"   len)r3   r~   s   & r)   r2   UnixConchUser.logout   sV    --/HOOH223 0		:]]4>>* 	 	
r,   c                	   \         P                  ! 4       p\         P                  ! 4       p\         P                  ! 4       pV P	                  4       w  rx\         P
                  ! ^ 4       \         P                  ! ^ 4       \         P                  ! V P                  4       4       \         P
                  ! V4       \         P                  ! V4        \        V4      p V Ff  p	V	^ ,          p
\        V	4      ^8  ;'       d    V	^,          ;'       g    Rp\        V	4      ^8  ;'       d    V	^,          ;'       g    / pV
! V/ VB pKh  	  \         P
                  ! ^ 4       \         P                  ! ^ 4       \         P                  ! V4       \         P
                  ! V4       \         P                  ! V4       X#   \         d	    YT3.p Li ; i  \         P
                  ! ^ 4       \         P                  ! ^ 4       \         P                  ! T4       \         P
                  ! T4       \         P                  ! T4       i ; i)rl   r'   )osgeteuidgetegid	getgroupsr\   setegidseteuid	setgroupsr`   iter	TypeErrorr   )r3   fargskweuidegidgroupsuidrU   ifuncrs   &&*,        r)   rr   UnixConchUser._runAsUser   s   zz|zz|&&(


1


1
T((*+


3


3	 QA	t1vz**ad00bVaZ((AaD..B$%"%	  JJqMJJqMLL JJtJJt  	 2A	  JJqMJJqMLL JJtJJts7   F7 "G >G G 'G 8G 7G
	G
A0H=)rK   rJ   rF   r"   N)r7   r8   r9   r:   rC   r\   r`   rd   ri   r   r   r2   rr   r;   r'   r,   r)   r0   r0   A   s0    P*! 2
r,   r0   c                  n    ] tR t^t]! 4       tRR ltRR ltR tR t	R t
R tR tR	 tR
 tR tR tRtR# )SSHSessionForUnixConchUserNc                `    Vf   ^ RI Hp W n        Wn        RR/V n        RV n        ^ V n        R# )z
Construct an C{SSHSessionForUnixConchUser}.

@param avatar: The L{UnixConchUser} for whom this is an SSH session.
@param reactor: An L{IReactorProcess} used to handle shell and exec
    requests. Uses the default reactor if None.
Nrm   PATHz/bin:/usr/bin:/usr/local/bin)rq   rn   _reactoravatarenvironptyptyTuple)r3   r   rn   s   &&&r)   rC   #SSHSessionForUnixConchUser.__init__   s1     ?0 >?r,   c                	V   \         '       g   R # V P                  P                  P                  P                  P	                  4       P
                  p\        P                  ! R\        P                  ! V4      4      w  pV P                  ^,          R,          p\        P                  ! 4       p\        V4      p\        WV,
          R,          4      p\         P                  ! 4       pT;'       d    \         P                  ;'       g    \         P                  Vn        V P"                  P$                  Vn        WHn        VRR  Vn        Wg3Vn        V'       dI   V P                  P.                  Vn        \        P2                  ! V4      ^ ,          Vn        V^ ^ ^ 3Vn        \         P8                  ! \         P:                  4      p	V	P=                  V4       V	P?                  4        \         P8                  ! \         P@                  4      p
V
P=                  V4       V
P?                  4        R # )NL:rc   NNg    .A)!utmpr   ru   	transportgetPeerhostrx   unpacksocket	inet_atonr   timeint	UtmpEntryUSER_PROCESSDEAD_PROCESSut_typer   pidut_pidut_lineut_idut_tvr"   ut_usergethostbyaddrut_host
ut_addr_v6
UtmpRecord	UTMP_FILE	pututlineendutent	WTMP_FILE)r3   loggedIn	ipAddresspackedIpttyNamett1t2entryabs   &&         r)   addUTMPEntry'SSHSessionForUnixConchUser.addUTMPEntry   sk   tKK$$..88@@BGG	mmC)9)9))DE--"2&IIKV!&C   66T%6%6KK$:K:Kxx||bclh KK00EM"00;A>EM (!Q2EOODNN+	E	

OODNN+	E	

r,   c                	    WP                   R &   W n        W0n        \        P                  ! 4       w  rE\
        P                  ! V4      pW`P                   R&   WEV3V n        R# )TERMSSH_TTYN)r   winSizemodesr   openptyr   ttynamer   )r3   term
windowSizer   masterslaver   s   &&&&   r)   getPty!SSHSessionForUnixConchUser.getPty   sK    #V!
**U#")Y0r,   c                	   V P                   '       g'   V P                  P                  R 4       \        R4      hV P                  P                  4       w  r#V P                  P                  4       pV P                  P                  4       pV P                  P                  V P                  R&   W@P                  R&   WPP                  R&   \        P                  P                  V4      pV P                  P                  P                  P                  P                  4       pV P                  P                  P                  P                  P!                  4       pVP"                   RVP$                   RVP$                   2V P                  R&   V P'                  4        V P(                  P+                  VVRV 2.V P                  VVVV P                   R7      V n        V P/                  4        \0        P2                  ! V P,                  P5                  4       \6        P8                  \:        P<                  ! R	.V P>                  O5!  4       V P@                  '       d   V PC                  4        VP                  PD                  V n#        V PH                  VP                  n"        V P                  P                  P                  P                  PK                  ^4       R
# )z'tried to get shell without pty, failingzno ptyUSERHOMESHELL 
SSH_CLIENT-usePTY4HN)&r   r   errorr	   r   r\   rd   ri   r"   r   r   pathbasenameru   r   r   rw   r   portgetPtyOwnershipr   spawnProcessr   r   fcntlioctlfilenotty
TIOCSWINSZrx   ry   r   r   setModeswriteoldWrite
_writeHacksetTcpNoDelay)	r3   protor   rU   homeDirshell	shellExecpeerr   s	   &&       r)   	openShell$SSHSessionForUnixConchUser.openShell   s   }}}IIOOEFX&&;;--/++((*$$&#{{33V&V %WGG$$U+	{{))33;;={{))33;;=(,		{!DII;a		{%K\"==--_LL== . 	
 	DHHOO%s~~v{{47W$,,7WX:::MMO-- $"",,::1=r,   c                	   V P                   P                  4       w  r4V P                   P                  4       pV P                   P                  4       ;'       g    R pWPP                  R&   VRV3pV P                   P
                  P                  P                  P                  4       pV P                   P
                  P                  P                  P                  4       p	VP                   RVP                   RV	P                   2V P                  R&   V P                  '       d   V P                  4        V P                  P                  TTTV P                  TTTV P                  ;'       g    ^ R7      V n        V P                  '       d3   V P!                  4        V P"                  '       d   V P%                  4        V P                   P
                  P                  P                  P'                  ^4       R# )z/bin/shr   z-cr   r   r   N)r   r\   rd   ri   r   ru   r   r   rw   r   r   r   r   r   r   r   r   r   r   r   )
r3   r   cmdr   rU   r   r   commandr  r   s
   &&&       r)   execCommand&SSHSessionForUnixConchUser.execCommand  sr   ;;--/++((*$$&33)&V$${{))33;;={{))33;;=(,		{!DII;a		{%K\"===  "==--LL==%%A . 	
 ===zzz"",,::1=r,   c                	P   \         P                  ! V P                  ^,          4      ^,          pV P                  P	                  4       w  r#\         P
                  ! 4       \         P                  ! 4       rT\         P                  ! ^ 4       \         P                  ! ^ 4        \         P                  ! V P                  ^,          W!4       \         P                  ! V4       \         P                  ! V4       R#   \         P                  ! T4       \         P                  ! T4       i ; i)r!   N)
r   statr   r   r\   r   r   r   r   chown)r3   ttyGidr   rU   r   r   s   &     r)   r   *SSHSessionForUnixConchUser.getPtyOwnership  s    q)*1-;;--/ZZ\2::<d


1


1	HHT]]1%s3JJtJJt JJtJJts   !(C7 7.D%c                	   V P                   p\        P                  ! VP                  ! 4       4      pV P                   EFF  w  r4V\
        P                  9  d   K  \
        P                  V,          p\        V4      ^8X  d\   Vw  rg\        \        V4      '       g   K`  \        \        V4      pV'       d   W&,          V,          W&&   K  W&,          V( ,          W&&   K  VR8X  d'   \        \        RV 24      V\        P                  &   K  VR8X  d'   \        \        RV 24      V\        P                  &   K  \        \        V4      '       g   EK  \        \        V4      p\        V34      V\        P                  ,          V&   EKI  	  \        P                  ! VP                  ! 4       \        P                  V4       R# )r!   OSPEEDBISPEEDN)r   r   	tcgetattrr   r   r   TTYMODESr   hasattrgetattrr  r  r/   CC	tcsetattrTCSANOW)	r3   r   attrmode	modeValuettyModeflagttyAttrttyvals	   &        r)   r   #SSHSessionForUnixConchUser.setModes+  s7   hh}}SZZ\*#zzOD8,,,''-G7|q  'sG,, g.!%f!4DJ!%vg!5DJH$#*3!I;#@SZZ H$#*3!I;#@SZZ sG,, g.',i\':SVVV$+  *, 	cjjlCKK6r,   c                	b    V P                   '       d   V P                   P                  4        R # R # r_   )r   
closeStdinr[   s   &r)   eofReceived&SSHSessionForUnixConchUser.eofReceivedF  s     888HH! r,   c                	Z   V P                   '       d   \        P                  P                  V P                   ^,          4      '       dX   \        P                  ! V P                   ^,          4      ^,          p\        P
                  ! V P                   ^,          ^ V4       V P                  '       dH    V P                  P                  R4       V P                  P                  4        V P                  ^ 4       V P                  P                  R4       R#   \        \        3 d     L[i ; i)r!   HUPzshell closedN)r   r   r   existsr  r  r   signalProcessOSErrorr   loseConnectionr   r   r   )r3   ttyGIDs   & r)   closed!SSHSessionForUnixConchUser.closedJ  s    ===RWW^^DMM!,<==WWT]]1-.q1FHHT]]1%q&1888&&u- HH##%a 		~&	 12 s   3D D*)D*c                	    Wn         \        P                  ! V P                  P	                  4       \
        P                  \        P                  ! R .V P                   O5!  4       R# )r   N)	r   r   r   r   r   r   r   rx   ry   )r3   r   s   &&r)   windowChanged(SSHSessionForUnixConchUser.windowChangedW  s8    DHHOO%s~~v{{47W$,,7WXr,   c                   V P                   e   \        P                  ! V P                   P                  4       4      ^,          pV\        P                  ,          '       gd   V\        P
                  ,          '       dG   V P                  P                  P                  P                  R^\        V4      ,           ,          4       V P                  V4       R# )z6
Hack to send ignore messages when we aren't echoing.
N )r   r   r  r   ECHOICANONr   ru   r   
sendIgnorer   r   )r3   r{   r  s   && r)   r   %SSHSessionForUnixConchUser._writeHack[  s~     88==!23A6D#((??tcjj'8'8  **55fCI6NOdr,   )r   r   r   r   r   r   r   r   r_   )   )r7   r8   r9   r:   r   r   rC   r   r   r  r  r   r   r$  r-  r0  r   r;   r'   r,   r)   r   r      sB    8D 41>B>6
76"'Yr,   r   c                  |    ] tR tRtR tR tR tR tR tR t	R t
R	 tR
 tR tR tR tR tR tR tR tR tRtR# )SFTPServerForUnixConchUserif  c                	    Wn         R # r_   r   )r3   r   s   &&r)   rC   #SFTPServerForUnixConchUser.__init__h  s    r,   c                $   RV9   d-   RV9   d&   \         P                  ! WR,          VR,          4       RV9   d   \         P                  ! WR,          4       RV9   d2   RV9   d)   \         P                  ! WR,          VR,          34       R# R# R# )zT
NOTE: this function assumes it runs as the logged-in user:
i.e. under _runAsUser()
r   rU   permissionsatimemtimeN)r   r  chmodutimer3   r   attrss   &&&r)   	_setAttrs$SFTPServerForUnixConchUser._setAttrsk  sp    
 E>eunHHT<u6E!HHT/0e5 0HHT'NE'N;< !1r,   c                	    R VP                   RVP                  RVP                  RVP                  R\	        VP
                  4      R\	        VP                  4      /# )sizer   rU   r?  r@  rA  )st_sizest_uidst_gidst_moder   st_atimest_mtimer3   ss   &&r)   	_getAttrs$SFTPServerForUnixConchUser._getAttrsw  sJ    AII188188199S_S_
 	
r,   c                	    V P                   P                  4       p\        P                  P	                  \        VP                  4      \        V4      4      # r_   )r   rd   r   r   joinr   )r3   r   homes   && r)   _absPath#SFTPServerForUnixConchUser._absPath  s7    {{%%'ww||L3\$5GHHr,   c                	    / # r_   r'   )r3   otherVersionextDatas   &&&r)   
gotVersion%SFTPServerForUnixConchUser.gotVersion  s    	r,   c                	8    \        W P                  V4      W#4      # r_   )UnixSFTPFilerW  )r3   filenameflagsrE  s   &&&&r)   openFile#SFTPServerForUnixConchUser.openFile  s    D--"95HHr,   c                	x    V P                  V4      pV P                  P                  \        P                  V4      # r_   )rW  r   rr   r   remove)r3   r`  s   &&r)   
removeFile%SFTPServerForUnixConchUser.removeFile  s+    ==*{{%%bii::r,   c                	    V P                  V4      pV P                  V4      pV P                  P                  \        P                  W4      # r_   )rW  r   rr   r   rename)r3   oldpathnewpaths   &&&r)   
renameFile%SFTPServerForUnixConchUser.renameFile  s9    --(--({{%%biiBBr,   c                	    V P                  V4      pV P                  P                  \        P                  V33V P
                  W33.4      # r_   )rW  r   rr   r   mkdirrF  rD  s   &&&r)   makeDirectory(SFTPServerForUnixConchUser.makeDirectory  sE    }}T"{{%%hh 4>>D="AB
 	
r,   c                	|    V P                  V4      pV P                  P                  \        P                  V4       R # r_   )rW  r   rr   r   rmdirr3   r   s   &&r)   removeDirectory*SFTPServerForUnixConchUser.removeDirectory  s(    }}T"rxx.r,   c                	6    \        W P                  V4      4      # r_   )UnixSFTPDirectoryrW  rt  s   &&r)   openDirectory(SFTPServerForUnixConchUser.openDirectory  s     }}T':;;r,   c                	    V P                  V4      pV'       d,   V P                  P                  \        P                  V4      pM*V P                  P                  \        P
                  V4      pV P                  V4      # r_   )rW  r   rr   r   r  lstatrR  )r3   r   followLinksrQ  s   &&& r)   getAttrs#SFTPServerForUnixConchUser.getAttrs  sV    }}T"&&rww5A&&rxx6A~~a  r,   c                	t    V P                  V4      pV P                  P                  V P                  W4       R # r_   )rW  r   rr   rF  rD  s   &&&r)   setAttrs#SFTPServerForUnixConchUser.setAttrs  s(    }}T"t~~t;r,   c                	x    V P                  V4      pV P                  P                  \        P                  V4      # r_   )rW  r   rr   r   readlinkrt  s   &&r)   readLink#SFTPServerForUnixConchUser.readLink  s+    }}T"{{%%bkk488r,   c                	    V P                  V4      pV P                  V4      pV P                  P                  \        P                  W!4      # r_   )rW  r   rr   r   symlink)r3   linkPath
targetPaths   &&&r)   makeLink#SFTPServerForUnixConchUser.makeLink  s9    ==*]]:.
{{%%bjj*GGr,   c                	^    \         P                  P                  V P                  V4      4      # r_   )r   r   realpathrW  rt  s   &&r)   realPath#SFTPServerForUnixConchUser.realPath  s     wwd 344r,   c                	    \         hr_   NotImplementedError)r3   extNamer[  s   &&&r)   extendedRequest*SFTPServerForUnixConchUser.extendedRequest      !!r,   r<  N)r7   r8   r9   r:   rC   rF  rR  rW  r\  rb  rf  rl  rp  ru  ry  r~  r  r  r  r  r  r;   r'   r,   r)   r:  r:  f  s[    
=
II;C

/<!<9H
5"r,   r:  c                  :    ] tR tRtR tR tR tR tR tR t	Rt
R	# )
r_  i  c                	   Wn         ^ pV\        ,          \        8X  d#   V\        ,          ^ 8X  d   \        P                  pV\        ,          \        8X  d#   V\        ,          ^ 8X  d   \        P
                  pV\        ,          \        8X  d'   V\        ,          \        8X  d   \        P                  pV\        ,          \        8X  d   V\        P                  ,          pV\        ,          \        8X  d   V\        P                  ,          pV\        ,          \        8X  d   V\        P                  ,          pV\        ,          \        8X  d   V\        P                  ,          pRV9   d   VR,          pVR MRpVP                  P!                  \        P"                  W%V4      pV'       d'   VP                  P!                  VP$                  W$4       Wpn        R# )rl   r?  i  N)serverr   r   r   O_RDONLYO_WRONLYO_RDWRr   O_APPENDr   O_CREATr   O_TRUNCr   O_EXCLr   rr   openrF  fd)r3   r  r`  ra  rE  	openFlagsr  r  s   &&&&&   r)   rC   UnixSFTPFile.__init__  s;   	8x'EI,=,BI9	)eh.>!.CI9	)eh.>(.J		I:+$I9	)#I9	)#I8x'"IE!'Dm$D]]%%bggxDIMM$$V%5%5xGr,   c                	~    V P                   P                  P                  \        P                  V P
                  4      # r_   )r  r   rr   r   closer  r[   s   &r)   r  UnixSFTPFile.close  s'    {{!!,,RXXtww??r,   c                	    V P                   P                  P                  \        P                  V P
                  V^ 33\        P                  V P
                  V33.4      # rl   )r  r   rr   r   lseekr  read)r3   offsetlengths   &&&r)   	readChunkUnixSFTPFile.readChunk  sM    {{!!,,hh&!,-$''69J/KL
 	
r,   c                	    V P                   P                  P                  \        P                  V P
                  V^ 33\        P                  V P
                  V33.4      # r  )r  r   rr   r   r  r  r   )r3   r  r{   s   &&&r)   
writeChunkUnixSFTPFile.writeChunk  sL    {{!!,,hh&!,-477D//JK
 	
r,   c                	    V P                   P                  P                  \        P                  V P
                  4      pV P                   P                  V4      # r_   )r  r   rr   r   fstatr  rR  rP  s   & r)   r~  UnixSFTPFile.getAttrs  s;    KK))"((DGG<{{$$Q''r,   c                	    \         hr_   r  )r3   rE  s   &&r)   r  UnixSFTPFile.setAttrs  r  r,   )r  r  N)r7   r8   r9   r:   rC   r  r  r  r~  r  r;   r'   r,   r)   r_  r_    s!    6@



("r,   r_  c                  2    ] tR tRtR tR tR t]tR tRt	R# )rx  i  c                	|    Wn         VP                  P                  \        P                  V4      V n        W n        R # r_   )r  r   rr   r   listdirfilesdir)r3   r  	directorys   &&&r)   rC   UnixSFTPDirectory.__init__  s(    ]]--bjj)D
r,   c                	    V # r_   r'   r[   s   &r)   __iter__UnixSFTPDirectory.__iter__  s    r,   c                	p    V P                   P                  ^ 4      pV P                  P                  P	                  \
        P                  \
        P                  P                  V P                  V4      4      p\        W4      pV P                  P                  V4      pWV3#   \         d    \        hi ; ir  )r  popr  r   rr   r   r|  r   rU  r  r   rR  
IndexErrorStopIteration)r3   r   rQ  longnamerE  s   &    r)   __next__UnixSFTPDirectory.__next__  s    	(

q!A ""--bhhTXXq8QRAa|HKK))!,E''  	 	 s   B# #B5c                	    . V n         R # r_   )r  r[   s   &r)   r  UnixSFTPDirectory.close  s	    
r,   )r  r  r  N)
r7   r8   r9   r:   rC   r  r  nextr  r;   r'   r,   r)   rx  rx    s    
	( Dr,   rx  )A__doc__
__future__r   r   rG   r   r   rD   r   rx   r   r   typingr   r   r   zope.interfacer   twisted.conchr   twisted.conch.avatarr   twisted.conch.errorr	   twisted.conch.interfacesr
   r   r   twisted.conch.lsr   twisted.conch.sshr   r   r   twisted.conch.ssh.filetransferr   r   r   r   r   r   twisted.credr   twisted.cred.errorr   twisted.internet.errorr   twisted.internet.interfacesr   twisted.loggerr   twisted.pythonr   twisted.python.compatr   r   ImportErrorIRealmr   r0   r   r:  r_  rx  registerAdapterr'   r,   r)   <module>r     sa   #  
 	 
 
    
 ( ( & " * * E E # ? ?    * 7 6 ! % .
 V]]
0 
0 
0hI hV Xv v vr [S" S" S"l Y." ." ."b 4   |/G/G   5}gFVFV W{  Ds   $E 	E%$E%