+
    üÐjv}  ã                   óÂ  € R t ^ RIt^ RIt^ RIt^ RIHt ^ RI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  ^ RIHt ]t ^ RIHt ]t ^ RIt]t ^ RI H!t" ]"t! ^ RI$H%t%H&t&H't'H(t(  ! R R]!4      t) ! R R])4      t* ! R R4      t+]f   ^ RI,t,],PZ                  ! R]: R24       M) ! R R]4      t.]P^                  ! ].])]'P`                  4        ! R R]4      t1]! ]'       * R4       ! R R]14      4       t2 ! R R4      t3]! ]'       * R4       ! R  R!]4      4       t4]! ]'       * R"4       ! R# R$]4      4       t5]! ]'       * R4      ]! ]'       * R"4       ! R% R&]4      4       4       t6]! ]'       * R"4       ! R' R(]4      4       t7R#   ] d    Rt ELOi ; i  ] d    Rt ELVi ; i  ] d    Rt EL_i ; i  ] d    ]#t! ELfi ; i  ] d     ELgi ; i))z.
Tests for L{twisted.conch.ssh.filetransfer}.
N)ÚskipIf)Úassert_thatÚequal_to)Údefer)ÚConnectionLost)ÚStringTransport)Úloopback)Ú
components)ÚFilePath)ÚTestCase)Úunix)ÚSFTPServerForUnixConchUser)Ú	ConchUser)ÚcommonÚ
connectionÚfiletransferÚsessionc                   ó,   a € ] tR t^=t o R tR tRtV tR# )Ú
TestAvatarc                ó¤   € \         P                  V 4       \        P                  V P                  R &   \
        P                  V P                  R&   R# )ó   sessionó   sftpN)r   Ú__init__r   Ú
SSHSessionÚchannelLookupr   ÚFileTransferServerÚsubsystemLookup©Úselfs   &ÚF/usr/lib/python3/dist-packages/twisted/conch/test/test_filetransfer.pyr   ÚTestAvatar.__init__>   s<   € Ü×Ñ˜4Ô Ü)0×);Ñ);ˆ×Ñ˜:Ñ&Ü(4×(GÑ(Gˆ×Ñ˜WÓ%ó    c                ó"  €  \        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  	  X#   \         d	    YT3.p L€i ; i)é    © )ÚiterÚ	TypeErrorÚlen)r   ÚfÚargsÚkwÚiÚfuncÚrs   &&*,   r   Ú
_runAsUserÚTestAvatar._runAsUserC   s™   € ð	 Ü�Q“ˆAó ˆAØ�Q•4ˆDÜ�q“6˜A‘:×&Ð& ! A¥$×,Ð,¨"ˆDÜ�Q“˜!‘×$Ð$  !¥×*Ð*¨ˆBÙ�dÐ!˜bÑ!ŠAñ	 ð
 ˆøô ô 	 Ø˜2��ŠAð	 ús   ‚A; Á;BÂBr$   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r.   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r   =   s   ø‡ € òH÷

ð 
r!   r   c                   ó,   a € ] tR t^Pt o R tR tRtV tR# )ÚFileTransferTestAvatarc                ó<   € \         P                  V 4       Wn        R # ©N)r   r   ÚhomeDir)r   r<   s   &&r   r   ÚFileTransferTestAvatar.__init__Q   s   € Ü×Ñ˜DÔ!ØŽr!   c                ó„   € \        \        P                  ! 4       4      P                  V P                  P
                  4      # r;   )r
   ÚosÚgetcwdÚpreauthChildr<   Úpathr   s   &r   Ú
getHomeDirÚ!FileTransferTestAvatar.getHomeDirU   s(   € ÜœŸ	š	›Ó$×1Ñ1°$·,±,×2CÑ2CÓDÐDr!   )r<   N)r0   r1   r2   r3   r   rC   r4   r5   r6   s   @r   r9   r9   P   s   ø‡ € ò÷Eð Er!   r9   c                   ó&   a € ] tR t^Yt o R tRtV tR# )ÚConchSessionForTestAvatarc                ó   € Wn         R # r;   ©Úavatar)r   rI   s   &&r   r   Ú"ConchSessionForTestAvatar.__init__Z   s   € ØŽr!   rH   N)r0   r1   r2   r3   r   r4   r5   r6   s   @r   rF   rF   Y   s   ø‡ € ÷ð r!   rF   ztwisted.conch.unix imported z0, but doesn't define SFTPServerForUnixConchUser'c                   ó,   a € ] tR t^lt o R tR tRtV tR# )ÚFileTransferForTestAvatarc                ó
   € R R/# )ó	   conchTestó   ext datar$   )r   ÚversionÚotherExts   &&&r   Ú
gotVersionÚ$FileTransferForTestAvatar.gotVersionm   s   € Ø  +Ð.Ð.r!   c                ó    € VR 8X  d   R# \         h)ó   testExtendedRequestó   bar)ÚNotImplementedError)r   ÚextNameÚextDatas   &&&r   ÚextendedRequestÚ)FileTransferForTestAvatar.extendedRequestp   s   € ØÐ0Ô0ÙÜ%Ð%r!   r$   N)r0   r1   r2   r3   rR   rZ   r4   r5   r6   s   @r   rL   rL   l   s   ø‡ € ò	/÷	&ð 	&r!   rL   c                   ó&   a € ] tR t^zt o R tRtV tR# )ÚSFTPTestBasec           	     óÐ  € \        V P                  4       4      V n        V P                  P                  R 4      V n        V P                  P                  R4      P	                  R4       V P                  P                  R4      P                  RR7      ;_uu_ 4       pVP                  R4       \        RR4      ;_uu_ 4       pVP                  VP                  R4      4       R	R	R	4       R	R	R	4       V P                  P                  R4      P                  R
4       V P                  P                  R4      P                  RR7      ;_uu_ 4       pVP                  R4       R	R	R	4       V P                  P                  R4      P                  RR7      ;_uu_ 4       pVP                  R4       R	R	R	4       V P                  P                  R4      P                  RR7      ;_uu_ 4       pVP                  R4       R	R	R	4       R	#   + '       g   i     EL,; i  + '       g   i     EL8; i  + '       g   i     LÔ; i  + '       g   i     Lš; i  + '       g   i     R	# ; i)ÚextraÚtestDirectoryTÚ	testfile1Úwb)Úmodeó   az/dev/urandomÚrbNi¤  ÚtestRemoveFileÚtestRenameFilez.testHiddenFileó   aaaaaaaaaabbbbbbbbbbi   )	r
   ÚmktempÚtestDirÚchildÚmakedirsÚopenÚwriteÚreadÚchmod)r   r(   Úf2s   &  r   ÚsetUpÚSFTPTestBase.setUp{   s£  € Ü §¡£Ó.ˆŒð —|‘|×)Ñ)¨'Ó2ˆŒØ�‰×Ñ˜?Ó+×4Ñ4°TÔ:à�\‰\×Ñ Ó,×1Ñ1°tÐ1×<Ô<ÀØ�G‰GÐ)Ô*Ü�n d×+Ô+¨rØ—‘˜Ÿ™ 	Ó*Ô+÷ ,÷ =ð 	�‰×Ñ˜;Ó'×-Ñ-¨eÔ4Ø�\‰\×ÑÐ 0Ó1×6Ñ6¸DÐ6×AÔAÀQØ�G‰G�DŒM÷ Bà�\‰\×ÑÐ 0Ó1×6Ñ6¸DÐ6×AÔAÀQØ�G‰G�DŒM÷ Bà�\‰\×ÑÐ 1Ó2×7Ñ7¸TÐ7×BÔBÀaØ�G‰G�DŒM÷ CÑB÷ ,×+Ð+ú÷ =×<Ð<ú÷
 B×AúçA×AúçB×BÐBúsH   Â&HÃ!H	Ã#HÅH.ÆIÇ*IÈHÈ	HÈH+	È.H>	ÉI	ÉI%	)rj   N)r0   r1   r2   r3   rr   r4   r5   r6   s   @r   r]   r]   z   s   ø‡ € ÷ð r!   r]   z can't run on non-posix computersc                   óì   a € ] tR t^�t o 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 tR t]P6                  R 4       t]P6                  R 4       tRtV tR# )ÚOurServerOurClientTestsc                óX  a € \         P                  S 4       \        S P                  4      S n        \
        P                  ! S P                  R 7      S n        \        P                  ! S P                  4      p\
        P                  ! 4       S n        RS n        RS n        V 3R lpVS P                  n        \        P                  ! S P                  4      pS P                  P                  V4       S P                  P                  V4       VS n        VS n        S P%                  4        R# )rH   Nc                 ó$   <€ V Sn         VSn        R # r;   )Ú_serverVersionÚ_extData)ÚserverVersionrY   r   s   &&€r   Ú_Ú(OurServerOurClientTests.setUp.<locals>._œ   s   ø€ Ø"/ˆDÔØ#ˆDŽMr!   )r]   rr   r9   rj   rI   r   r   Úserverr   ÚLoopbackRelayÚFileTransferClientÚclientrx   ry   ÚgotServerVersionÚmakeConnectionÚclientTransportÚserverTransportÚ_emptyBuffers)r   rƒ   r{   r„   s   f   r   rr   ÚOurServerOurClientTests.setUp‘   sÑ   ø€ Ü×Ñ˜4Ô ä,¨T¯\©\Ó:ˆŒÜ"×5Ò5¸T¿[¹[ÔIˆŒÜ"×0Ò0°·±Ó=ˆä"×5Ò5Ó7ˆŒØ"ˆÔØˆŒõ	$ð ()ˆ�‰Ô$Ü"×0Ò0°·±Ó=ˆØ�‰×"Ñ" ?Ô3Ø�‰×"Ñ" ?Ô3à.ˆÔØ.ˆÔà×ÑÖr!   c                óâ   € V P                   P                  '       g   V P                  P                  '       d7   V P                   P                  4        V P                  P                  4        Kn  R # r;   )r„   Úbufferrƒ   ÚclearBufferr   s   &r   r…   Ú%OurServerOurClientTests._emptyBuffersª   sO   € Ø×"Ñ"×)×)Ð)¨T×-AÑ-A×-H×-HÐ-HØ× Ñ ×,Ñ,Ô.Ø× Ñ ×,Ñ,Ö.ñ .Ir!   c                óÖ   € V P                   P                  4        V P                  P                  4        V P                   P                  4        V P                  P                  4        R # r;   )r„   ÚloseConnectionrƒ   r‰   r   s   &r   ÚtearDownÚ OurServerOurClientTests.tearDown¯   sJ   € Ø×Ñ×+Ñ+Ô-Ø×Ñ×+Ñ+Ô-Ø×Ñ×(Ñ(Ô*Ø×Ñ×(Ñ(Ö*r!   c                óz   € V P                  V P                  ^4       V P                  V P                  RR/4       R# )é   rN   rO   N)ÚassertEqualrx   ry   r   s   &r   Útest_serverVersionÚ*OurServerOurClientTests.test_serverVersionµ   s1   € Ø×Ñ˜×,Ñ,¨aÔ0Ø×Ñ˜Ÿ™¨°{Ð(CÖDr!   c                ó¼   € V P                  \        P                  P                  V P                  P
                  4      RV P                  P
                  : 24       R# )z*
It implements the ISFTPServer interface.
zISFTPServer not provided by N)Ú
assertTruer   ÚISFTPServerÚ
providedByr}   r€   r   s   &r   Útest_interface_implementationÚ5OurServerOurClientTests.test_interface_implementation¹   sC   € ð 	�‰Ü×$Ñ$×/Ñ/°·±×0BÑ0BÓCØ*¨4¯;©;×+=Ñ+=Ñ*@ÐAö	
r!   c                ó<  a aa€ S P                   P                  R\        P                  \        P                  ,          / 4      pS P                  4        \        P                  o. oVV3R lpS P                  \        RV4       VV 3R lpVP                  V4       V# )zG
A file opened with C{openFile} is closed when the connection is lost.
ó	   testfile1c                 ó:   <€ SP                  V 4       S! V 4       R # r;   ©Úappend)ÚfdÚclosedÚoldCloses   &€€r   ÚcloseÚJOurServerOurClientTests.test_openedFileClosedWithConnection.<locals>.closeÎ   s   ø€ Ø�M‰M˜"ÔÙ�RŽLr!   r¢   c                 ó¸  <€ SP                   P                  V P                  R ,          ,          P                  pSP                  P                  4        SP                  P                  4        SP                  P                  4        SP                  P                  4        SP                  SP                   P                  / 4       SP                  VS4       R# ):é   NNN)
r}   Ú	openFilesÚhandlerŸ   r„   rŒ   rƒ   r‰   r‘   ÚassertIn)ÚopenFilerŸ   r    r   s   & €€r   Ú_fileOpenedÚPOurServerOurClientTests.test_openedFileClosedWithConnection.<locals>._fileOpenedÔ   s–   ø€ Ø—‘×&Ñ& x§¡°rÕ':Õ;×>Ñ>ˆBØ× Ñ ×/Ñ/Ô1Ø× Ñ ×/Ñ/Ô1Ø× Ñ ×,Ñ,Ô.Ø× Ñ ×,Ñ,Ô.Ø×Ñ˜TŸ[™[×2Ñ2°BÔ7Ø�M‰M˜"˜fÖ%r!   )
r€   r©   r   ÚFXF_READÚ	FXF_WRITEr…   r?   r¢   ÚpatchÚaddCallback)r   Údr¢   rª   r    r¡   s   f   @@r   Ú#test_openedFileClosedWithConnectionÚ;OurServerOurClientTests.test_openedFileClosedWithConnectionÂ   s|   ú€ ð �K‰K× Ñ Øœ,×/Ñ/´,×2HÑ2HÕHÈ"ó
ˆð 	×ÑÔä—8‘8ˆØˆö	ð 	�
‰
”2�w Ô&ö	&ð 	
�‰�kÔ"Øˆr!   c                óŒ   a € S P                   P                  R4      pS P                  4        V 3R lpVP                  V4       V# )zP
A directory opened with C{openDirectory} is close when the connection
is lost.
Ú c                 ó$  <€ SP                   P                  4        SP                  P                  4        SP                   P                  4        SP                  P                  4        SP	                  SP
                  P                  / 4       R # r;   )r„   rŒ   rƒ   r‰   r‘   r}   ÚopenDirs)ÚopenDirr   s   &€r   Ú	_getFilesÚSOurServerOurClientTests.test_openedDirectoryClosedWithConnection.<locals>._getFilesè   se   ø€ Ø× Ñ ×/Ñ/Ô1Ø× Ñ ×/Ñ/Ô1Ø× Ñ ×,Ñ,Ô.Ø× Ñ ×,Ñ,Ô.Ø×Ñ˜TŸ[™[×1Ñ1°2Ö6r!   ©r€   ÚopenDirectoryr…   r¯   )r   r°   r¸   s   f  r   Ú(test_openedDirectoryClosedWithConnectionÚ@OurServerOurClientTests.test_openedDirectoryClosedWithConnectionà   s=   ø€ ð
 �K‰K×%Ñ% bÓ)ˆØ×ÑÔõ	7ð 	
�‰�iÔ Øˆr!   c                ó  a aaa€ S P                   P                  R \        P                  \        P                  ,          / 4      pS P                  4        VVV 3R lpV 3R loVV 3R loV 3R loVP                  V4       V# )r›   c                 óˆ   <€ SP                  V \        P                  ! V 4      4       S! V 4      pVP                  SV 4       V# r;   )r‘   r   Ú	ISFTPFiler¯   )r©   r°   Ú
_readChunkÚ_writeChunkr   s   & €€€r   rª   Ú<OurServerOurClientTests.test_openFileIO.<locals>._fileOpenedø   s;   ø€ Ø×Ñ˜X¤|×'=Ò'=¸hÓ'GÔHÙ˜8Ó$ˆAØ�M‰M˜+ xÔ0ØˆHr!   c                 ó„   <€ V P                  ^ ^4      pSP                  4        VP                  SP                  R4       V# )r#   rh   ©Ú	readChunkr…   r¯   r‘   )r©   r°   r   s   & €r   rÁ   Ú;OurServerOurClientTests.test_openFileIO.<locals>._readChunkþ   s;   ø€ Ø×"Ñ" 1 bÓ)ˆAØ×ÑÔ Ø�M‰M˜$×*Ñ*Ð,AÔBØˆHr!   c                 óp   <€ VP                  ^R4      pSP                  4        VP                  SV4       V# )é   s
   cccccccccc)Ú
writeChunkr…   r¯   )r{   r©   r°   Ú_readChunk2r   s   && €€r   rÂ   Ú<OurServerOurClientTests.test_openFileIO.<locals>._writeChunk  s4   ø€ Ø×#Ñ# B¨	Ó2ˆAØ×ÑÔ Ø�M‰M˜+ xÔ0ØˆHr!   c                 ó„   <€ VP                  ^ ^4      pSP                  4        VP                  SP                  R4       V# )r#   s   aaaaaaaaaabbbbbbbbbbccccccccccrÅ   ©r{   r©   r°   r   s   && €r   rË   Ú<OurServerOurClientTests.test_openFileIO.<locals>._readChunk2
  s;   ø€ Ø×"Ñ" 1 bÓ)ˆAØ×ÑÔ Ø�M‰M˜$×*Ñ*Ð,MÔNØˆHr!   ©r€   r©   r   r¬   r­   r…   r¯   )r   r°   rª   rÁ   rË   rÂ   s   f  @@@r   Útest_openFileIOÚ'OurServerOurClientTests.test_openFileIOò   sd   û€ Ø�K‰K× Ñ Øœ,×/Ñ/´,×2HÑ2HÕHÈ"ó
ˆð 	×ÑÔ÷	õ	ö	õ	ð 	
�‰�kÔ"Øˆr!   c                óö   a aa€ S P                   P                  R \        P                  \        P                  ,          / 4      pS P                  4        V 3R loV 3R loVVV 3R lpVP                  V4       V# )r›   c                 óH   <€ VP                  4       pSP                  4        V# r;   )ÚgetAttrsr…   rÎ   s   && €r   Ú	_getAttrsÚBOurServerOurClientTests.test_closedFileGetAttrs.<locals>._getAttrs  s"   ø€ Ø×!Ñ!Ó#ˆAØ×ÑÔ ØˆHr!   c                 ó(   <€ SP                  4        V # r;   )ÚflushLoggedErrors)r(   r   s   &€r   Ú_errÚ=OurServerOurClientTests.test_closedFileGetAttrs.<locals>._err  s   ø€ Ø×"Ñ"Ô$ØˆHr!   c                 óÊ   <€ V P                  4       pSP                  4        VP                  SV 4       VP                  S4       SP	                  V\
        P                  4      # r;   )r¢   r…   r¯   Ú
addErrbackÚassertFailurer   Ú	SFTPError)r©   r°   rÚ   rÖ   r   s   & €€€r   Ú_closeÚ?OurServerOurClientTests.test_closedFileGetAttrs.<locals>._close"  sN   ø€ Ø—‘Ó ˆAØ×ÑÔ Ø�M‰M˜) XÔ.Ø�L‰L˜ÔØ×%Ñ% a¬×)?Ñ)?Ó@Ð@r!   rÐ   )r   r°   rà   rÚ   rÖ   s   f  @@r   Útest_closedFileGetAttrsÚ/OurServerOurClientTests.test_closedFileGetAttrs  s`   ú€ Ø�K‰K× Ñ Øœ,×/Ñ/´,×2HÑ2HÕHÈ"ó
ˆð 	×ÑÔõ	õ
	÷	Að 	
�‰�fÔØˆr!   c                óâ   a a€ S P                   P                  R \        P                  \        P                  ,          / 4      pS P                  4        VV 3R lpV 3R loVP                  V4      # )r›   c                 ój   <€ V P                  4       pSP                  4        VP                  S4       V# r;   ©rÕ   r…   r¯   )r©   r°   Ú
_getAttrs2r   s   & €€r   rÖ   ÚBOurServerOurClientTests.test_openFileAttributes.<locals>._getAttrs2  s.   ø€ Ø×!Ñ!Ó#ˆAØ×ÑÔ Ø�M‰M˜*Ô%ØˆHr!   c                 ó–   <€ SP                   P                  R 4      pSP                  4        VP                  SP                  V 4       V# ©r›   ©r€   rÕ   r…   r¯   r‘   )Úattrs1r°   r   s   & €r   rç   ÚCOurServerOurClientTests.test_openFileAttributes.<locals>._getAttrs28  s<   ø€ Ø—‘×$Ñ$ \Ó2ˆAØ×ÑÔ Ø�M‰M˜$×*Ñ*¨FÔ3ØˆHr!   rÐ   )r   r°   rÖ   rç   s   f  @r   Útest_openFileAttributesÚ/OurServerOurClientTests.test_openFileAttributes,  sX   ù€ Ø�K‰K× Ñ Øœ,×/Ñ/´,×2HÑ2HÕHÈ"ó
ˆð 	×ÑÔö	õ	ð �}‰}˜YÓ'Ð'r!   c                óö   a aa€ S P                   P                  R \        P                  \        P                  ,          / 4      pS P                  4        VV 3R lpVV 3R loV 3R loVP                  V4       V# )r›   c                 ój   <€ V P                  4       pSP                  4        VP                  S4       V# r;   ræ   )r©   r°   Ú	_setAttrsr   s   & €€r   rÖ   Ú@OurServerOurClientTests.test_openFileSetAttrs.<locals>._getAttrsH  s.   ø€ Ø×!Ñ!Ó#ˆAØ×ÑÔ Ø�M‰M˜)Ô$ØˆHr!   c                 óÄ   <€ ^ V R&   SP                   P                  RV 4      pSP                  4        VP                  S4       VP                  SP                  V 4       V# )r#   Úatimer›   )r€   ÚsetAttrsr…   r¯   r‘   )Úattrsr°   rç   r   s   & €€r   rò   Ú@OurServerOurClientTests.test_openFileSetAttrs.<locals>._setAttrsN  sS   ø€ ØˆE�'‰NØ—‘×$Ñ$ \°5Ó9ˆAØ×ÑÔ Ø�M‰M˜*Ô%Ø�M‰M˜$×*Ñ*¨EÔ2ØˆHr!   c                 ó^   <€ SP                   P                  R 4      pSP                  4        V# rê   ©r€   rÕ   r…   ©r{   r°   r   s   & €r   rç   ÚAOurServerOurClientTests.test_openFileSetAttrs.<locals>._getAttrs2V  s(   ø€ Ø—‘×$Ñ$ \Ó2ˆAØ×ÑÔ ØˆHr!   rÐ   )r   r°   rÖ   rç   rò   s   f  @@r   Útest_openFileSetAttrsÚ-OurServerOurClientTests.test_openFileSetAttrs@  sa   ú€ ð �K‰K× Ñ Øœ,×/Ñ/´,×2HÑ2HÕHÈ"ó
ˆð 	×ÑÔö	ö	õ	ð
 	
�‰�iÔ Øˆr!   c                ód  a aa€ / oS P                   P                  P                  oVV3R lpVS P                   P                  n        S P                  P                  R\        P                  \        P
                  ,          RR/4      pS P                  4        VV 3R lpVP                  V4      # )zÇ
Check that L{filetransfer.FileTransferClient.openFile} can send
extended attributes, that should be extracted server side. By default,
they are ignored, so we just verify they are correctly parsed.
c                 ó8   <€ SP                  V4       S! WV4      # r;   )Úupdate)ÚfilenameÚflagsr÷   ÚoldOpenFileÚsavedAttributess   &&&€€r   r©   ÚIOurServerOurClientTests.test_openFileExtendedAttributes.<locals>.openFileg  s   ø€ Ø×"Ñ" 5Ô)Ù˜x°Ó6Ð6r!   r›   Úext_foorV   c                 ó0   <€ SP                  SR R/4       R# )r  rV   N©r‘   )Úignr  r   s   &€€r   ÚcheckÚFOurServerOurClientTests.test_openFileExtendedAttributes.<locals>.checkt  s   ø€ Ø×Ñ˜_¨y¸&Ð.AÖBr!   )r}   r€   r©   r   r¬   r­   r…   r¯   )r   r©   r°   r  r  r  s   f   @@r   Útest_openFileExtendedAttributesÚ7OurServerOurClientTests.test_openFileExtendedAttributes^  s�   ú€ ð ˆØ—k‘k×(Ñ(×1Ñ1ˆö	7ð '/ˆ�‰×ÑÔ#à�K‰K× Ñ ØÜ×!Ñ!¤L×$:Ñ$:Õ:Ø˜Ðó
ˆð
 	×ÑÔö	Cð �}‰}˜UÓ#Ð#r!   c                óê   a € S P                   P                  R 4      pS P                  4        V 3R lpVP                  V4       VP                  V4       S P	                  V\
        P                  4      # )ó   testRemoveFilec                 ó^   <€ SP                   P                  R 4      pSP                  4        V# )r  )r€   Ú
removeFiler…   )Úignoredr°   r   s   & €r   Ú_removeFileÚ<OurServerOurClientTests.test_removeFile.<locals>._removeFile}  s)   ø€ Ø—‘×&Ñ&Ð'8Ó9ˆAØ×ÑÔ ØˆHr!   )r€   rÕ   r…   r¯   rÞ   r   rß   )r   r°   r  s   f  r   Útest_removeFileÚ'OurServerOurClientTests.test_removeFiley  s\   ø€ Ø�K‰K× Ñ Ð!2Ó3ˆØ×ÑÔõ	ð
 	
�‰�kÔ"Ø	�‰�kÔ"Ø×!Ñ! !¤\×%;Ñ%;Ó<Ð<r!   c                ó˜   a a€ S P                   P                  R 4      pS P                  4        VV 3R lpV 3R loVP                  V4      # )ó   testRenameFilec                 ó„   <€ SP                   P                  R R4      pSP                  4        VP                  SV 4       V# )r  ó   testRenamedFile)r€   Ú
renameFiler…   r¯   )r÷   r°   Ú_testRenamedr   s   & €€r   Ú_renameÚ8OurServerOurClientTests.test_renameFile.<locals>._renameŠ  s:   ø€ Ø—‘×&Ñ&Ð'8Ð:LÓMˆAØ×ÑÔ Ø�M‰M˜,¨Ô.ØˆHr!   c                 ó–   <€ SP                   P                  R 4      pSP                  4        VP                  SP                  V4       R# )r  Nrë   )r{   r÷   r°   r   s   && €r   r  Ú=OurServerOurClientTests.test_renameFile.<locals>._testRenamed�  s8   ø€ Ø—‘×$Ñ$Ð%7Ó8ˆAØ×ÑÔ Ø�M‰M˜$×*Ñ*¨EÖ2r!   )r€   rÕ   r…   r¯   )r   r°   r  r  s   f  @r   Útest_renameFileÚ'OurServerOurClientTests.test_renameFile†  s?   ù€ Ø�K‰K× Ñ Ð!2Ó3ˆØ×ÑÔö	õ	3ð
 �}‰}˜WÓ%Ð%r!   c                ó˜   € V P                   P                  R 4      pV P                  4        V P                  V\        P
                  4      # ©ó   testMakeDirectory©r€   rÕ   r…   rÞ   r   rß   ©r   r°   s   & r   Útest_directoryBadÚ)OurServerOurClientTests.test_directoryBad—  s<   € Ø�K‰K× Ñ Ð!5Ó6ˆØ×ÑÔØ×!Ñ! !¤\×%;Ñ%;Ó<Ð<r!   c                ó  a € S P                   P                  R / 4      pS P                  4        V 3R lpV 3R lpVP                  V4       VP                  V4       VP                  V4       S P	                  V\
        P                  4      # )r&  c                 ó^   <€ SP                   P                  R 4      pSP                  4        V# r%  rú   rû   s   & €r   rÖ   ÚAOurServerOurClientTests.test_directoryCreation.<locals>._getAttrs   s)   ø€ Ø—‘×$Ñ$Ð%9Ó:ˆAØ×ÑÔ ØˆHr!   c                 ó^   <€ SP                   P                  R 4      pSP                  4        V# r%  )r€   ÚremoveDirectoryr…   rû   s   & €r   Ú_removeDirectoryÚHOurServerOurClientTests.test_directoryCreation.<locals>._removeDirectory©  s)   ø€ Ø—‘×+Ñ+Ð,@ÓAˆAØ×ÑÔ ØˆHr!   )r€   ÚmakeDirectoryr…   r¯   rÞ   r   rß   )r   r°   rÖ   r0  s   f   r   Útest_directoryCreationÚ.OurServerOurClientTests.test_directoryCreationœ  sp   ø€ Ø�K‰K×%Ñ%Ð&:¸BÓ?ˆØ×ÑÔõ	õ	ð
 	
�‰�iÔ Ø	�‰Ð&Ô'Ø	�‰�iÔ Ø×!Ñ! !¤\×%;Ñ%;Ó<Ð<r!   c                óØ   a aaa€ S P                   P                  R 4      pS P                  4        . oVVVV 3R loVV 3R lpV 3R loVP                  S4       VP                  V4       V# )r!   c                 óà   <a € VV 3R  lp\         P                  ! S P                  4      pSP                  4        VP	                  V4       VP	                  S4       VP                  SS 4       V# )c                 ó*   <€ SP                  V 4       S# r;   r�   )r(   Úfilesr·   s   &€€r   rž   ÚMOurServerOurClientTests.test_openDirectory.<locals>._getFiles.<locals>.append¹  s   ø€ Ø—‘˜Q”Ø�r!   )r   ÚmaybeDeferredÚnextr…   r¯   rÝ   )r·   rž   r°   rà   r¸   r8  r   s   f  €€€€r   r¸   Ú=OurServerOurClientTests.test_openDirectory.<locals>._getFiles¸  sU   ù€ öô ×#Ò# G§L¡LÓ1ˆAØ×ÑÔ Ø�M‰M˜&Ô!Ø�M‰M˜)Ô$Ø�L‰L˜ Ô)ØˆHr!   c                 ó”   <€ \        \        \        S!  4      ^ ,          4      pVP                  4        SP                  V. RO4       R# )r#   N)s   .testHiddenFiles   testDirectoryr  r  r›   )ÚlistÚzipÚsortr‘   )r  Úfsr8  r   s   & €€r   Ú_checkFilesÚ?OurServerOurClientTests.test_openDirectory.<locals>._checkFilesÄ  s:   ø€ Ü”dœ3 ™;Ó'¨Õ*Ó+ˆBØ�G‰GŒIØ×ÑØòö	r!   c                 óH   <€ VP                  4       pSP                  4        V# r;   )r¢   r…   )r{   r·   r°   r   s   && €r   rà   Ú:OurServerOurClientTests.test_openDirectory.<locals>._closeÒ  s   ø€ Ø—‘“ˆAØ×ÑÔ ØˆHr!   rº   )r   r°   rB  rà   r¸   r8  s   f  @@@r   Útest_openDirectoryÚ*OurServerOurClientTests.test_openDirectory³  s[   û€ Ø�K‰K×%Ñ% cÓ*ˆØ×ÑÔØˆ÷
	ð 
	ö	õ	ð
 	
�‰�iÔ Ø	�‰�kÔ"Øˆr!   c                ó˜   € V P                   P                  R 4      pV P                  4        V P                  V\        P
                  4      # ©ó   testLinkr'  r(  s   & r   Útest_linkDoesntExistÚ,OurServerOurClientTests.test_linkDoesntExistÛ  s;   € Ø�K‰K× Ñ  Ó-ˆØ×ÑÔØ×!Ñ! !¤\×%;Ñ%;Ó<Ð<r!   c                ó¸   a € S P                   P                  R R4      pS P                  4        V 3R lpV 3R lpVP                  V4       VP                  V4      # )rJ  r›   c                 ó`   <€ SP                   P                  R ^4      pSP                  4        V# rI  rú   rû   s   & €r   Ú_getFirstAttrsÚDOurServerOurClientTests.test_linkSharesAttrs.<locals>._getFirstAttrsä  s*   ø€ Ø—‘×$Ñ$ [°!Ó4ˆAØ×ÑÔ ØˆHr!   c                 ó–   <€ SP                   P                  R 4      pSP                  4        VP                  SP                  V 4       V# rê   rë   )Ú
firstAttrsr°   r   s   & €r   Ú_getSecondAttrsÚEOurServerOurClientTests.test_linkSharesAttrs.<locals>._getSecondAttrsé  s<   ø€ Ø—‘×$Ñ$ \Ó2ˆAØ×ÑÔ Ø�M‰M˜$×*Ñ*¨JÔ7ØˆHr!   ©r€   ÚmakeLinkr…   r¯   )r   r°   rO  rS  s   f   r   Útest_linkSharesAttrsÚ,OurServerOurClientTests.test_linkSharesAttrsà  sL   ø€ Ø�K‰K× Ñ  ¨lÓ;ˆØ×ÑÔõ	õ
	ð 	
�‰�nÔ%Ø�}‰}˜_Ó-Ð-r!   c                ó¼   a € S P                   P                  R R4      pS P                  4        V 3R lpV 3R lpVP                  V4       VP                  V4       V# )rJ  r›   c                 óN  <€ SP                   P                  R 4      pSP                  4        \        \        P
                  ! 4       4      P                  SP                  P                  4      pVP                  R4      pVP                  SP                  VP                  4       V# ©rJ  ra   )r€   ÚreadLinkr…   r
   r?   r@   rA   rj   rB   rk   r¯   r‘   )r{   r°   ÚtestFiler   s   &  €r   Ú	_readLinkÚ8OurServerOurClientTests.test_linkPath.<locals>._readLinkö  ós   ø€ Ø—‘×$Ñ$ [Ó1ˆAØ×ÑÔ Ü¤§	¢	£Ó,×9Ñ9¸$¿,¹,×:KÑ:KÓLˆHØ—~‘~ kÓ2ˆHØ�M‰M˜$×*Ñ*¨H¯M©MÔ:ØˆHr!   c                 óN  <€ SP                   P                  R 4      pSP                  4        \        \        P
                  ! 4       4      P                  SP                  P                  4      pVP                  R4      pVP                  SP                  VP                  4       V# r[  )r€   ÚrealPathr…   r
   r?   r@   rA   rj   rB   rk   r¯   r‘   )r{   r°   ÚtestLinkr   s   &  €r   Ú	_realPathÚ8OurServerOurClientTests.test_linkPath.<locals>._realPathþ  r`  r!   rU  )r   r°   r^  rd  s   f   r   Útest_linkPathÚ%OurServerOurClientTests.test_linkPathò  sN   ø€ Ø�K‰K× Ñ  ¨lÓ;ˆØ×ÑÔõ	õ	ð 	
�‰�iÔ Ø	�‰�iÔ Øˆr!   c                óÌ   € V P                   P                  R R4      pV P                  4        VP                  V P                  R4       VP                  V P
                  4       V# )rU   s   foorV   )r€   rZ   r…   r¯   r‘   Ú_cbTestExtendedRequestr(  s   & r   Útest_extendedRequestÚ,OurServerOurClientTests.test_extendedRequest
  sP   € Ø�K‰K×'Ñ'Ð(>ÀÓGˆØ×ÑÔØ	�‰�d×&Ñ&¨Ô/Ø	�‰�d×1Ñ1Ô2Øˆr!   c                ó†   € V P                   P                  R R4      pV P                  4        V P                  V\        4      # )s   testBadRequestr!   )r€   rZ   r…   rÞ   rW   )r   r  r°   s   && r   ri  Ú.OurServerOurClientTests._cbTestExtendedRequest  s9   € Ø�K‰K×'Ñ'Ð(9¸3Ó?ˆØ×ÑÔØ×!Ñ! !Ô%8Ó9Ð9r!   c              #  ó”  "  € V P                   P                  R4      pV P                  4        Vx €pVP                  4       pV P                  4        Vx € V P	                  4       pRpV P                  ^\        V4      4       V P                  \        V^ ,          R,          4       V P                  WT^ ,          R,          4       R# 5i)z:
Using client.openDirectory as an iterator is deprecated.
r!   zeUsing twisted.conch.ssh.filetransfer.ClientDirectory as an iterator was deprecated in Twisted 18.9.0.ÚcategoryÚmessageN)r€   r»   r…   r;  ÚflushWarningsr‘   r'   ÚDeprecationWarning)r   r°   r·   ÚoneFileÚwarningsrp  s   &     r   Ú$test_openDirectoryIteratorDeprecatedÚ<OurServerOurClientTests.test_openDirectoryIteratorDeprecated  sª   é € ð
 �K‰K×%Ñ% cÓ*ˆØ×ÑÔØ‘'ˆØ—,‘,“.ˆØ×ÑÔØŠà×%Ñ%Ó'ˆð@ð 	ð 	×Ñ˜œC ›MÔ*Ø×ÑÔ+¨X°a­[¸Õ-DÔEØ×Ñ˜¨1¥+¨iÕ"8Ö9ùs   ‚CCc              #  ó  a a"  € S P                   P                  R\        P                  / 4      pS P	                  4        Vx €p. oVV 3R lpS P
                  P                  P                  4       w  pW4n        ?VP                  ^d^È4      pS P	                  4        S P                  \        S4      ^4       S P                  V4       S P                  P                  4        S P                  P                  4        S P                  P                  4        S P	                  4        S P!                  S P                   P"                  4       S P%                  V\&        4       VP)                  4       pS P%                  V\&        4       R# 5i)zc
If there are requests outstanding when the connection
is closed for any reason, they should fail.
r›   c                 óx   <€ SP                  S. 4       \        P                  ! 4       pSP                  V 4       V# r;   )r‘   r   ÚDeferredrž   )ÚoffsetÚlengthr°   ÚgotReadRequestr   s   && €€r   Ú	_slowReadÚOOurServerOurClientTests.test_closedConnectionCancelsRequests.<locals>._slowRead9  s2   ø€ Ø×Ñ˜^¨RÔ0Ü—’Ó ˆAØ×!Ñ! &Ô)ØˆHr!   N)r€   r©   r   r¬   r…   r}   r¦   ÚvaluesrÆ   r‘   r'   ÚassertNoResultr„   rŒ   r‰   rƒ   ÚassertFalseÚ	connectedÚfailureResultOfr   rÕ   )r   r°   Úfhr}  ÚserverSideFhr|  s   f    @r   Ú$test_closedConnectionCancelsRequestsÚ<OurServerOurClientTests.test_closedConnectionCancelsRequests+  s4  ùé € ð �K‰K× Ñ  ¬|×/DÑ/DÀbÓIˆØ×ÑÔØ‰Wˆð ˆö	ð Ÿ™×.Ñ.×5Ñ5Ó7‰ˆØ!*ÔØð �L‰L˜˜cÓ"ˆØ×ÑÔØ×Ñœ˜^Ó,¨aÔ0Ø×Ñ˜AÔð 	×Ñ×+Ñ+Ô-Ø×Ñ×(Ñ(Ô*Ø×Ñ×(Ñ(Ô*Ø×ÑÔà×Ñ˜Ÿ™×.Ñ.Ô/Ø×Ñ˜Q¤Ô/ð �K‰K‹MˆØ×Ñ˜Q¤Ö/ùs   „FF	)ry   rx   rI   r€   rƒ   r}   r„   N) r0   r1   r2   r3   rr   r…   r�   r’   r˜   r±   r¼   rÑ   râ   rî   rý   r  r  r"  r)  r3  rF  rK  rW  rf  rj  ri  r   ÚinlineCallbacksru  r†  r4   r5   r6   s   @r   ru   ru   �   sª   ø‡ € òò2/ò
+òEò
òò<ò$òBò2(ò(ò<$ò6=ò&ò"=ò
=ò.&òP=ò
.ò$ò0ò:ð
 ×Ññ:ó ð:ð( ×Ññ*0ó ö*0r!   ru   c                   ó&   a € ] tR tRt o R tRtV tR# )ÚFakeConniY  c                ó   € R # r;   r$   )r   Úchannels   &&r   Ú	sendCloseÚFakeConn.sendCloseZ  s   € Ùr!   r$   N)r0   r1   r2   r3   r�  r4   r5   r6   s   @r   rŠ  rŠ  Y  s   ø‡ € ÷ð r!   rŠ  c                   óJ   a € ] tR tRt o R tR tR tR tR tR t	R t
R	tV tR
# )ÚFileTransferCloseTestsi^  c                ó$   € \        4       V n        R # r;   )r   rI   r   s   &r   rr   ÚFileTransferCloseTests.setUp`  s   € Ü “lˆŽr!   c                ó’   € \         P                  ! 4       p ! R  R4      pV! 4       Vn        V P                  VP                  n        V# )c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )ÚDFileTransferCloseTests.buildServerConnection.<locals>.DummyTransportih  c                ó   € W n         R # r;   ©Ú	transportr   s   &r   r   ÚMFileTransferCloseTests.buildServerConnection.<locals>.DummyTransport.__init__i  s   € Ø!%–r!   c                ó   € R # r;   r$   )r   ÚkindÚdatas   &&&r   Ú
sendPacketÚOFileTransferCloseTests.buildServerConnection.<locals>.DummyTransport.sendPacketl  s   € Ùr!   c                ó   € R # )zdummy transportr$   r   s   &r   Ú	logPrefixÚNFileTransferCloseTests.buildServerConnection.<locals>.DummyTransport.logPrefixo  s   € Ù(r!   r—  N)	r0   r1   r2   r3   r   r�  r   r4   r5   r6   s   @r   ÚDummyTransportr•  h  s   ø‡ € ò&ò÷)ð )r!   r¢  )r   ÚSSHConnectionr˜  rI   )r   Úconnr¢  s   &  r   ÚbuildServerConnectionÚ,FileTransferCloseTests.buildServerConnectionc  s;   € ä×'Ò'Ó)ˆ÷	)ñ 	)ñ (Ó)ˆŒØ $§¡ˆ�‰ÔØˆr!   c                óJ   a a€ R S n         VP                  oVV 3R lpW!n        R# )Fc                 ó&   <€ R Sn         S! V 4       R# )TN)ÚconnectionLostFired)ÚreasonÚorigConnectionLostr   s   &€€r   ÚconnectionLostÚFFileTransferCloseTests.interceptConnectionLost.<locals>.connectionLostz  s   ø€ Ø'+ˆDÔ$Ù˜vÖ&r!   N)r©  r¬  )r   Ú
sftpServerr¬  r«  s   f& @r   ÚinterceptConnectionLostÚ.FileTransferCloseTests.interceptConnectionLostv  s$   ù€ Ø#(ˆÔ Ø'×6Ñ6Ðö	'ð %3Ö!r!   c                ó>   € V P                  V P                  R 4       R# )z*sftpServer's connectionLost was not calledN)r•   r©  r   s   &r   ÚassertSFTPConnectionLostÚ/FileTransferCloseTests.assertSFTPConnectionLost€  s   € Ø�‰Ø×$Ñ$Ð&Rö	
r!   c                óF  € \         P                  ! \        4       V P                  R7      pVP	                  \
        P                  ! R4      4       VP                  P                  P                  pV P                  V4       VP                  4        V P                  4        R# )zM
Closing a session should notify an SFTP subsystem launched by that
session.
)r¤  rI   r   N)r   r   rŠ  rI   Úrequest_subsystemr   ÚNSr€   r˜  Úprotor¯  ÚcloseReceivedr²  )r   ÚtestSessionr®  s   &  r   Útest_sessionCloseÚ(FileTransferCloseTests.test_sessionClose…  sv   € ô ×(Ò(¬h«jÀÇÁÔMˆð 	×%Ñ%¤f§i¢i°Ó&8Ô9Ø ×'Ñ'×1Ñ1×7Ñ7ˆ
ð 	×$Ñ$ ZÔ0ð 	×!Ñ!Ô#à×%Ñ%Ö'r!   c                ó  € V P                  4       p\        P                  ! R4      \        P                  ! R^ 4      ^,          ,           pVP                  V4       VP                  ^ ,          pVP                  \        P                  ! R4      4       VP                  P                  P                  pV P                  V4       V P                  V4       VP                  \        P                  ! R^ 4      4       V P                  4        R# )za
A client sending CHANNEL_CLOSE should trigger closeReceived on the
associated channel instance.
r   ú>Lr   N)r¥  r   r¶  ÚstructÚpackÚssh_CHANNEL_OPENÚchannelsrµ  r€   r˜  r·  r¯  Ússh_CHANNEL_CLOSEr²  ©r   r¤  ÚpacketÚsessionChannelr®  s   &    r   Ú%test_clientClosesChannelOnConnnectionÚ<FileTransferCloseTests.test_clientClosesChannelOnConnnection™  sÆ   € ð
 ×)Ñ)Ó+ˆô —’˜:Ó&¬¯ª°T¸1Ó)=ÀÕ)AÕAˆØ×Ñ˜fÔ%ØŸ™ qÕ)ˆà×(Ñ(¬¯ª°7Ó);Ô<Ø#×*Ñ*×4Ñ4×:Ñ:ˆ
Ø×$Ñ$ ZÔ0ð 	×$Ñ$ ZÔ0ð 	×ÑœvŸ{š{¨4°Ó3Ô4à×%Ñ%Ö'r!   c                óÌ  € V P                  4       p\        P                  ! R4      \        P                  ! R^ 4      ^,          ,           pVP                  V4       VP                  ^ ,          pVP                  \        P                  ! R4      4       VP                  P                  P                  pV P                  V4       VP                  4        V P                  4        R# )z@
Closing an SSH connection should close all sessions within it.
r   r½  r   N)r¥  r   r¶  r¾  r¿  rÀ  rÁ  rµ  r€   r˜  r·  r¯  ÚserviceStoppedr²  rÃ  s   &    r   Ú'test_stopConnectionServiceClosesChannelÚ>FileTransferCloseTests.test_stopConnectionServiceClosesChannel±  s©   € ð ×)Ñ)Ó+ˆô —’˜:Ó&¬¯ª°T¸1Ó)=ÀÕ)AÕAˆØ×Ñ˜fÔ%ØŸ™ qÕ)ˆà×(Ñ(¬¯ª°7Ó);Ô<Ø#×*Ñ*×4Ñ4×:Ñ:ˆ
Ø×$Ñ$ ZÔ0ð 	×ÑÔà×%Ñ%Ö'r!   )rI   r©  N)r0   r1   r2   r3   rr   r¥  r¯  r²  rº  rÆ  rÊ  r4   r5   r6   s   @r   r�  r�  ^  s-   ø‡ € ò#òò&3ò
ò
(ò((÷0(ð (r!   r�  zCannot run without cryptographyc                   ó2   a € ] tR tRt o Rt. ROtR tRtV tR# )ÚConstantsTestsiÆ  aO  
Tests for the constants used by the SFTP protocol implementation.

@ivar filexferSpecExcerpts: Excerpts from the
    draft-ietf-secsh-filexfer-02.txt (draft) specification of the SFTP
    protocol.  There are more recent drafts of the specification, but this
    one describes version 3, which is what conch (and OpenSSH) implements.
c                ó¦  € / pV P                    Fg  pVP                  4        FP  p\        P                  ! RV4      pV'       g   K$  \	        VP                  ^4      ^ 4      WP                  ^4      &   KR  	  Ki  	  V P                  \        V4      ^ 8„  R4       VP                  4        F%  w  rVV P                  V\        \        V4      4       K'  	  R# )zi
The constants used by the SFTP protocol implementation match those
found by searching through the spec.
z)^\s*#define SSH_([A-Z_]+)\s+([0-9x]*)\s*$z,No constants found (the test must be buggy).N)ÚfilexferSpecExcerptsÚ
splitlinesÚreÚmatchÚintÚgroupr•   r'   Úitemsr‘   Úgetattrr   )r   Ú	constantsÚexcerptÚlineÚmÚkÚvs   &      r   Útest_constantsAgainstSpecÚ(ConstantsTests.test_constantsAgainstSpec  sª   € ð
 ˆ	Ø×0Ô0ˆGØ×*Ñ*Ö,�Ü—H’HÐIÈ4ÓP�ß‘1Ü,/°·±¸³
¸AÓ,>�IŸg™g a›jÓ)ó -ñ 1ð
 	�‰Ü�	‹N˜QÑÐ Nô	
ð —O‘OÖ%‰DˆAØ×Ñ˜Q¤¬°aÓ 8Ö9ó &r!   r$   N)aµ  
           The following values are defined for packet types.

                #define SSH_FXP_INIT                1
                #define SSH_FXP_VERSION             2
                #define SSH_FXP_OPEN                3
                #define SSH_FXP_CLOSE               4
                #define SSH_FXP_READ                5
                #define SSH_FXP_WRITE               6
                #define SSH_FXP_LSTAT               7
                #define SSH_FXP_FSTAT               8
                #define SSH_FXP_SETSTAT             9
                #define SSH_FXP_FSETSTAT           10
                #define SSH_FXP_OPENDIR            11
                #define SSH_FXP_READDIR            12
                #define SSH_FXP_REMOVE             13
                #define SSH_FXP_MKDIR              14
                #define SSH_FXP_RMDIR              15
                #define SSH_FXP_REALPATH           16
                #define SSH_FXP_STAT               17
                #define SSH_FXP_RENAME             18
                #define SSH_FXP_READLINK           19
                #define SSH_FXP_SYMLINK            20
                #define SSH_FXP_STATUS            101
                #define SSH_FXP_HANDLE            102
                #define SSH_FXP_DATA              103
                #define SSH_FXP_NAME              104
                #define SSH_FXP_ATTRS             105
                #define SSH_FXP_EXTENDED          200
                #define SSH_FXP_EXTENDED_REPLY    201

           Additional packet types should only be defined if the protocol
           version number (see Section ``Protocol Initialization'') is
           incremented, and their use MUST be negotiated using the version
           number.  However, the SSH_FXP_EXTENDED and SSH_FXP_EXTENDED_REPLY
           packets can be used to implement vendor-specific extensions.  See
           Section ``Vendor-Specific-Extensions'' for more details.
        aŸ  
            The flags bits are defined to have the following values:

                #define SSH_FILEXFER_ATTR_SIZE          0x00000001
                #define SSH_FILEXFER_ATTR_UIDGID        0x00000002
                #define SSH_FILEXFER_ATTR_PERMISSIONS   0x00000004
                #define SSH_FILEXFER_ATTR_ACMODTIME     0x00000008
                #define SSH_FILEXFER_ATTR_EXTENDED      0x80000000

        aË  
            The `pflags' field is a bitmask.  The following bits have been
           defined.

                #define SSH_FXF_READ            0x00000001
                #define SSH_FXF_WRITE           0x00000002
                #define SSH_FXF_APPEND          0x00000004
                #define SSH_FXF_CREAT           0x00000008
                #define SSH_FXF_TRUNC           0x00000010
                #define SSH_FXF_EXCL            0x00000020
        aÇ  
            Currently, the following values are defined (other values may be
           defined by future versions of this protocol):

                #define SSH_FX_OK                            0
                #define SSH_FX_EOF                           1
                #define SSH_FX_NO_SUCH_FILE                  2
                #define SSH_FX_PERMISSION_DENIED             3
                #define SSH_FX_FAILURE                       4
                #define SSH_FX_BAD_MESSAGE                   5
                #define SSH_FX_NO_CONNECTION                 6
                #define SSH_FX_CONNECTION_LOST               7
                #define SSH_FX_OP_UNSUPPORTED                8
        )	r0   r1   r2   r3   Ú__doc__rÏ  rÝ  r4   r5   r6   s   @r   rÍ  rÍ  Æ  s   ø‡ € ñòJÐ÷X:ð :r!   rÍ  c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )ÚRawPacketDataServerTestsi1  z€
Tests for L{filetransfer.FileTransferServer} which explicitly craft
certain less common situations to exercise their handling.
c                óN   € \         P                  ! \        4       R 7      V n        R# )rH   N)r   r   r   Úftsr   s   &r   rr   ÚRawPacketDataServerTests.setUp9  s   € Ü×2Ò2¼*»,ÔGˆŽr!   c                ó6  € \        4       pV P                  P                  V4       RpRp\        P                  ! \        ^.4      V,           \        P                  ! V4      ,           4      pV P                  P                  V4       \        P                  ! \        ^e.4      V,           \        . RO4      ,           \        P                  ! R4      ,           \        P                  ! R4      ,           4      p\        VP                  4       \        V4      4       R# )zT
A close request with an unknown handle receives an FX_NO_SUCH_FILE error
response.
s   1234s   invalid handles   No such file or directoryr!   N)r#   r#   r#   é   )
r   rã  r‚   r   r¶  ÚbytesÚdataReceivedr   Úvaluer   )r   r˜  Ú	requestIdr§   r¢   Úexpecteds   &     r   Útest_closeInvalidHandleÚ0RawPacketDataServerTests.test_closeInvalidHandle<  sè   € ô
 $Ó%ˆ	Ø�‰×Ñ 	Ô*ð ˆ	à"ˆô —	’	ô �1�#‹JØõä�iŠi˜Óõ ó
ˆð 	�‰×Ñ˜eÔ$ô —9’9ô �3�%‹Lð õô ’,Óõ ô �IŠIÐ2Ó3õ	4ô �IŠI�c‹Nõó
ˆô& 	Ø�O‰OÓÜ�XÓö	
r!   )rã  N)	r0   r1   r2   r3   rß  rr   rì  r4   r5   r6   s   @r   rá  rá  1  s   ø‡ € ñò
H÷1
ð 1
r!   rá  c                   óN   a € ] tR tRt o RtR tR tR tR tR t	R t
R	 tR
tV tR# )ÚRawPacketDataTestsip  z‡
Tests for L{filetransfer.FileTransferClient} which explicitly craft certain
less common protocol messages to exercise their handling.
c                ó:   € \         P                  ! 4       V n        R # r;   )r   r   Úftcr   s   &r   rr   ÚRawPacketDataTests.setUpw  s   € Ü×2Ò2Ó4ˆŽr!   c                ó„  € \         P                  ! 4       pVP                  V P                  4       WP                  P
                  ^&   \        P                  ! R^\        P                  4      \        P                  ! R4      ,           \        P                  ! R4      ,           pV P                  P                  V4       V# )a  
A STATUS packet containing a result code, a message, and a language is
parsed to produce the result of an outstanding request L{Deferred}.

@see: U{section 9.1<http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.1>}
    of the SFTP Internet-Draft.
ú!LLó   msgó   lang)r   ry  r¯   Ú_cbTestPacketSTATUSrñ  ÚopenRequestsr¾  r¿  r   ÚFX_OKr   r¶  Úpacket_STATUS©r   r°   rœ  s   &  r   Útest_packetSTATUSÚ$RawPacketDataTests.test_packetSTATUSz  sŠ   € ô �NŠNÓˆØ	�‰�d×.Ñ.Ô/Ø#$�‰×Ñ˜aÑ ä�KŠK˜˜q¤,×"4Ñ"4Ó5Ü�iŠi˜Óõ ä�iŠi˜Ó õ!ð 	ð
 	�‰×Ñ˜tÔ$Øˆr!   c                ój   € V P                  V^ ,          R4       V P                  V^,          R4       R# )zc
Assert that the result is a two-tuple containing the message and
language from the STATUS packet.
rõ  rö  Nr	  ©r   Úresults   &&r   r÷  Ú&RawPacketDataTests._cbTestPacketSTATUS�  s,   € ð
 	×Ñ˜ � FÔ+Ø×Ñ˜ � GÖ,r!   c                ó  € \         P                  ! 4       pVP                  V P                  4       WP                  P
                  ^&   \        P                  ! R^\        P                  4      pV P                  P                  V4       V# )aJ  
A STATUS packet containing only a result code can also be parsed to
produce the result of an outstanding request L{Deferred}.  Such packets
are sent by some SFTP implementations, though not strictly legal.

@see: U{section 9.1<http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.1>}
    of the SFTP Internet-Draft.
rô  )r   ry  r¯   Ú_cbTestPacketSTATUSShortrñ  rø  r¾  r¿  r   rù  rú  rû  s   &  r   Útest_packetSTATUSShortÚ)RawPacketDataTests.test_packetSTATUSShort•  sc   € ô �NŠNÓˆØ	�‰�d×3Ñ3Ô4Ø#$�‰×Ñ˜aÑ Ü�{Š{˜5 !¤\×%7Ñ%7Ó8ˆØ�‰×Ñ˜tÔ$Øˆr!   c                ój   € V P                  V^ ,          R4       V P                  V^,          R4       R# )z
Assert that the result is a two-tuple containing empty strings, since
the STATUS packet had neither a message nor a language.
r!   Nr	  rÿ  s   &&r   r  Ú+RawPacketDataTests._cbTestPacketSTATUSShort¥  s,   € ð
 	×Ñ˜ � CÔ(Ø×Ñ˜ � CÖ(r!   c                óN  € \         P                  ! 4       pVP                  V P                  4       WP                  P
                  ^&   \        P                  ! R^\        P                  4      \        P                  ! R4      ,           pV P                  P                  V4       V# )ac  
A STATUS packet containing a result code and a message but no language
can also be parsed to produce the result of an outstanding request
L{Deferred}.  Such packets are sent by some SFTP implementations, though
not strictly legal.

@see: U{section 9.1<http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.1>}
    of the SFTP Internet-Draft.
rô  rõ  )r   ry  r¯   Ú_cbTestPacketSTATUSWithoutLangrñ  rø  r¾  r¿  r   rù  r   r¶  rú  rû  s   &  r   Útest_packetSTATUSWithoutLangÚ/RawPacketDataTests.test_packetSTATUSWithoutLang­  sq   € ô �NŠNÓˆØ	�‰�d×9Ñ9Ô:Ø#$�‰×Ñ˜aÑ Ü�{Š{˜5 !¤\×%7Ñ%7Ó8¼6¿9º9ÀVÓ;LÕLˆØ�‰×Ñ˜tÔ$Øˆr!   c                ój   € V P                  V^ ,          R4       V P                  V^,          R4       R# )zŠ
Assert that the result is a two-tuple containing the message from the
STATUS packet and an empty string, since the language was missing.
rõ  r!   Nr	  rÿ  s   &&r   r	  Ú1RawPacketDataTests._cbTestPacketSTATUSWithoutLang¾  s,   € ð
 	×Ñ˜ � FÔ+Ø×Ñ˜ � CÖ(r!   )rñ  N)r0   r1   r2   r3   rß  rr   rü  r÷  r  r  r
  r	  r4   r5   r6   s   @r   rï  rï  p  s2   ø‡ € ñò
5òò&-òò )ò÷")ð )r!   rï  )8rß  r?   rÑ  r¾  Úunittestr   Úhamcrestr   r   Útwisted.internetr   Útwisted.internet.errorr   Útwisted.internet.testingr   Útwisted.protocolsr   Útwisted.pythonr	   Útwisted.python.filepathr
   Útwisted.trial.unittestr   Útwisted.conchr   Ú_unixÚImportErrorÚtwisted.conch.unixr   Ú_SFTPServerForUnixConchUserÚcryptographyÚ_cryptographyÚtwisted.conch.avatarr   Ú
_ConchUserÚobjectÚtwisted.conch.sshr   r   r   r   r   r9   rF   rt  ÚwarnrL   ÚregisterAdapterr–   r]   ru   rŠ  r�  rÍ  rá  rï  r$   r!   r   Ú<module>r$     sI  ðñ
ó
 
Û 	Û Ý ç *å "Ý 1Ý 4Ý &Ý %Ý ,Ý +ðÝ+ð €Dð=õð "=Ðð!Û(ð !€LðÝ<ð €Ið	ßKÓKô
�ô ô&E˜Zô E÷ñ ð
 Ò%ó à‡MƒMó
 ð		õô&Ð$>ô &ð ×ÒØ! :¨|×/GÑ/Gôô
�8ô ñ* ˆDŒÐ4Ó5ôF0˜ló F0ó 6ðF0÷Rñ ñ
 ˆDŒÐ4Ó5ôd(˜Xó d(ó 6ðd(ñN ˆLÔÐ;Ó<ôe:�Xó e:ó =ðe:ñT ˆDŒÐ4Ó5ÙˆLÔÐ;Ó<ô:
˜xó :
ó =ó 6ð:
ñz ˆLÔÐ;Ó<ôS)˜ó S)ó =òS)øðm ô ØƒDðûð ô &Ø!%Óð&ûð ô ØƒLðûð ô ØƒIðûð ô 	Úð	úsZ   ÁF ÁF# ÁF3 Á!G Á*G Æ	F ÆF Æ#	F0Æ/F0Æ3	G Æ?G Ç	GÇGÇGÇG