+
    Bi=                     p   ^ 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 ^ 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Ht ]P0                  ! RR7       ]P2                  tRtRR,          tRtRtRtR t  ! R R]PB                  4      t" ! R R]PB                  4      t# ! R R]PH                  ]PJ                  4      t&]e   ]PN                  PQ                  ]PN                  PS                  ]*4      RR4      t+]PN                  PQ                  ]PN                  PS                  ]*4      RR4      t, ! R R]PH                  4      t- ! R R]-]"4      t. ! R  R!]-]#4      t/ ! R" R#]&4      t0 ! R$ R%]
4      t1]! ]Pd                  R&4       ! R' R(]
4      4       t3]! ]R)4      ]! 4        ! R* R+]14      4       4       t4]! ]R)4      ]! 4        ! R, R-]
4      4       4       t5 ! R. R/]
4      t6 ! R0 R1]
4      t7R2 t8]9R38X  d   ]Pt                  ! 4        R# R#   ]	 d    Rt ELi ; i)4    N)TestCase
skipUnless)support)requires_subprocess)threading_helper)socket_helper)warnings_helper)asynchat)asyncore)HOSTHOSTv6T)moduleutf-8u   abcde¹²³¤¦
i  u   foo
bar
 non-ascii char ®
u>  type=cdir;perm=el;unique==keVO1+ZF4; test
type=pdir;perm=e;unique==keVO1+d?3; ..
type=OS.unix=slink:/foobar;perm=;unique==keVO1+4G4; foobar
type=OS.unix=chr-13/29;perm=;unique==keVO1+5G4; device
type=OS.unix=blk-11/108;perm=;unique==keVO1+6G4; block
type=file;perm=awr;unique==keVO1+8G4; writable
type=dir;perm=cpmel;unique==keVO1+7G4; promiscuous
type=dir;perm=;unique==keVO1+1t2; no-exec
type=file;perm=r;unique==keVO1+EG4; two words
type=file;perm=r;unique==keVO1+IH4;  leading space
type=file;perm=r;unique==keVO1+1G4; file1
type=dir;perm=cpmel;unique==keVO1+7G4; incoming
type=file;perm=r;unique==keVO1+1G4; file2
type=file;perm=r;unique==keVO1+1G4; file3
type=file;perm=r;unique==keVO1+1G4; file4
type=dir;perm=cpmel;unique==SGP1; dir ® non-ascii char
type=file;perm=r;unique==SGP2; file ® non-ascii char
c                      R # N r       '/usr/lib/python3.14/test/test_ftplib.pydefault_error_handlerr   :   s     	r   c                   T   a a ] tR t^At oRtR tR tR tV 3R ltR t	R t
RtVtV ;t# )	DummyDTPHandlerFc                    \         P                  P                  W4       W n        \	        4       V P                  n        VP                  V n        R # r   )r
   
async_chat__init__	baseclass	bytearraylast_received_dataencodingselfconnr   s   &&&r   r   DummyDTPHandler.__init__D   s6    $$T0",5K)!**r   c                n    V P                  R 4      pV P                  ;P                  V,          un        R# )   N)recvr   r   )r    new_datas   & r   handle_readDummyDTPHandler.handle_readJ   s$    99T?))X5)r   c                    V P                   '       g5   V P                  P                  R 4       V P                  4        RV n         R# R# )226 transfer completeTN)dtp_conn_closedr   pushshutdownr    s   &r   handle_closeDummyDTPHandler.handle_closeN   s9     ###NN 78MMO#'D  $r   c                  < V P                   P                  e(   V P                   P                  pR V P                   n        V'       g   V P                  4       # \        \        V `  VP                  V P                  4      4       R # r   )r   	next_dataclose_when_donesuperr   r,   encoder   )r    what	__class__s   &&r   r,   DummyDTPHandler.pushW   s\    >>##/>>++D'+DNN$''))ot)$++dmm*DEr   c                    \        4        R # r   r   r.   s   &r   handle_errorDummyDTPHandler.handle_error_       r   c                &    V P                  4        R # r   )closer.   s   &r   r-   DummyDTPHandler.shutdownb   s    

r   )r   r+   r   )__name__
__module____qualname____firstlineno__r+   r   r'   r/   r,   r;   r-   __static_attributes____classdictcell____classcell__r7   __classdict__s   @@r   r   r   A   s.     O+6(F  r   r   c                      a  ] tR t^ft o ]t]3R l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R tR tR tR t R t!R t"R t#R t$R t%R  t&R! t'R"t(V t)R## )$DummyFTPHandlerc                   \         P                  P                  W4       V P                  P	                  \        P
                  \        P                  ^4       V P                  R4       . V n        RV n	        RV n
        \        4       V n        RV n        RV n        RV n        \         V n        V P%                  R4       W n        RV n        R# )      
N 220 welcomez252.253.254.255)r
   r   r   socket
setsockopt
SOL_SOCKETSO_OOBINLINEset_terminator	in_bufferdtplast_received_cmdr   r   next_responser2   rest	RETR_DATAnext_retr_datar,   r   fake_pasv_server_ipr    r!   r   s   &&&r   r   DummyFTPHandler.__init__j   s    $$T0v00&2E2EqIG$!%"++	'		-   $5 r   c                <    V P                   P                  V4       R # r   )rV   appendr    datas   &&r   collect_incoming_data%DummyFTPHandler.collect_incoming_data~   s    d#r   c                $   R P                  V P                  4      P                  V P                  4      p. V n        V P                  '       d#   V P                  V P                  4       RV n        VP                  R4      ^ ,          P                  4       pW n        VP                  R4      pVR8w  d   W^,           R pMRp\        V RV,           4      '       d   \        V RV,           4      pV! V4       R# V P                  RV,          4       R# )r   rO    Ncmd_z 550 command "%s" not understood.)joinrV   decoder   rY   r,   splitlowerrX   findhasattrgetattr)r    linecmdspaceargmethods   &     r   found_terminator DummyFTPHandler.found_terminator   s    xx'..t}}=IId(()!#Djjoa &&(!$		#B;qyz"CC4#&&T6C<0F3KII8#=>r   c                    \        4        R # r   r:   r.   s   &r   r;   DummyFTPHandler.handle_error   r=   r   c                    \         P                  P                  WP                  V P                  4      R ,           4       R# )rN   N)r
   r   r,   r5   r   rb   s   &&r   r,   DummyFTPHandler.push   s(      {{4=='AG'KLr   c                N   \        \        \        VP                  R 4      4      4      pR\	        VR,          4      ,          pV^,          R,          V^,          ,           p\
        P                  ! W43\        R7      pV P                  WPR7      V n	        V P                  R4       R# ),z%d.%d.%d.%d:N   N   timeoutr   &200 active data connection establishedN)listmapintrl   tuplerQ   create_connectionTIMEOUTdtp_handlerrW   r,   )r    rt   addripportss   &&    r   cmd_portDummyFTPHandler.cmd_port   sy    CSYYs^,-E$r(O+Q#a($$bZA##A#6		:;r   c                   \         P                  ! V P                   P                  4       ^ ,          ^ 34      ;_uu_ 4       pVP                  \        4       VP                  4       ^,          pV P
                  pVP                  RR4      qCR,          qSR,          pV P                  RWEV3,          4       VP                  4       w  rxV P                  WpR7      V n
        RRR4       R#   + '       g   i     R# ; i)r   .r}   r   z$227 entering passive mode (%s,%d,%d)r   N)rQ   create_servergetsockname
settimeoutr   r]   replacer,   acceptr   rW   )	r    rt   sockr   r   p1p2r!   r   s	   &&       r   cmd_pasvDummyFTPHandler.cmd_pasv   s    !!4;;#:#:#<Q#?"CDDOOG$##%a(D))BC%B3JrCZII<rrlJKJD'''=DH EDDDs    BC((C9	c                    VP                  V^ ,          4      ^R w  r#p\        V4      p\        P                  ! W43\        R7      pV P                  WPR7      V n        V P                  R4       R# )r   r   r   r   Nri   )rl   r   rQ   r   r   r   rW   r,   )r    rt   afr   r   r   s   &&    r   cmd_eprtDummyFTPHandler.cmd_eprt   s^    yyQ(2.4y$$bZA##A#6		:;r   c                   \         P                  ! V P                   P                  4       ^ ,          ^ 3\         P                  R7      ;_uu_ 4       pVP	                  \
        4       VP                  4       ^,          pV P                  RV,          4       VP                  4       w  rEV P                  W@R7      V n	        RRR4       R#   + '       g   i     R# ; i)r   )familyz+229 entering extended passive mode (|||%d|)r   N)
rQ   r   r   AF_INET6r   r   r,   r   r   rW   )r    rt   r   r   r!   r   s   &&    r   cmd_epsvDummyFTPHandler.cmd_epsv   s    !!4;;#:#:#<Q#?"C)/: :=AOOG$##%a(DIICTIJJD'''=DH: : : :s   A.CC	c                (    V P                  V4       R # r   r,   r    rt   s   &&r   cmd_echoDummyFTPHandler.cmd_echo   s    		#r   c                (    V P                  R 4       R# )z200 noop okNr   r   s   &&r   cmd_noopDummyFTPHandler.cmd_noop       		- r   c                (    V P                  R 4       R# )z331 username okNr   r   s   &&r   cmd_userDummyFTPHandler.cmd_user       		#$r   c                (    V P                  R 4       R# )z230 password okNr   r   s   &&r   cmd_passDummyFTPHandler.cmd_pass   r   r   c                (    V P                  R 4       R# )z230 acct okNr   r   s   &&r   cmd_acctDummyFTPHandler.cmd_acct   r   r   c                (    V P                  R 4       R# )z350 rnfr okNr   r   s   &&r   cmd_rnfrDummyFTPHandler.cmd_rnfr   r   r   c                (    V P                  R 4       R# )z250 rnto okNr   r   s   &&r   cmd_rntoDummyFTPHandler.cmd_rnto   r   r   c                (    V P                  R 4       R# )z250 dele okNr   r   s   &&r   cmd_deleDummyFTPHandler.cmd_dele   r   r   c                (    V P                  R 4       R# )
250 cwd okNr   r   s   &&r   cmd_cwdDummyFTPHandler.cmd_cwd       		,r   c                (    V P                  R 4       R# )z250 1000Nr   r   s   &&r   cmd_sizeDummyFTPHandler.cmd_size   s    		*r   c                6    V P                  R V,          4       R# )z257 "%s"Nr   r   s   &&r   cmd_mkdDummyFTPHandler.cmd_mkd   s    		*c/"r   c                (    V P                  R 4       R# )z
250 rmd okNr   r   s   &&r   cmd_rmdDummyFTPHandler.cmd_rmd   r   r   c                (    V P                  R 4       R# )z257 "pwd ok"Nr   r   s   &&r   cmd_pwdDummyFTPHandler.cmd_pwd   s    		.!r   c                (    V P                  R 4       R# )z200 type okNr   r   s   &&r   cmd_typeDummyFTPHandler.cmd_type   r   r   c                H    V P                  R 4       V P                  4        R# z221 quit okN)r,   r-   r   s   &&r   cmd_quitDummyFTPHandler.cmd_quit   s    		- r   c                (    V P                  R 4       R# )z226 abor okNr   r   s   &&r   cmd_aborDummyFTPHandler.cmd_abor   r   r   c                (    V P                  R 4       R# )z125 stor okNr   r   s   &&r   cmd_storDummyFTPHandler.cmd_stor   r   r   c                4    Wn         V P                  R 4       R# )z350 rest okN)rZ   r,   r   s   &&r   cmd_restDummyFTPHandler.cmd_rest   s    			- r   c                   V P                  R 4       V P                  e   \        V P                  4      pM^ pV P                  P                  V P                  VR 4       V P                  P                  4        RV n        R# )z125 retr okN)r,   rZ   r   rW   r\   r3   )r    rt   offsets   && r   cmd_retrDummyFTPHandler.cmd_retr   s^    		- 99 ^FFd))&'23  "	r   c                    V P                  R 4       V P                  P                  \        4       V P                  P                  4        R# )z125 list okN)r,   rW   	LIST_DATAr3   r   s   &&r   cmd_listDummyFTPHandler.cmd_list   .    		- i   "r   c                    V P                  R 4       V P                  P                  \        4       V P                  P                  4        R# )z125 nlst okN)r,   rW   	NLST_DATAr3   r   s   &&r   cmd_nlstDummyFTPHandler.cmd_nlst  r   r   c                (    V P                  R 4       R# )z200 opts okNr   r   s   &&r   cmd_optsDummyFTPHandler.cmd_opts	  r   r   c                    V P                  R 4       V P                  P                  \        4       V P                  P                  4        R# )z125 mlsd okN)r,   rW   	MLSD_DATAr3   r   s   &&r   cmd_mlsdDummyFTPHandler.cmd_mlsd  r   r   c                V    R \        V4      ,          V n        V P                  R4       R# )xz125 setlongretr okN)r   r\   r,   r   s   &&r   cmd_setlongretrDummyFTPHandler.cmd_setlongretr  s    !CHn		&'r   )
rW   r   r]   rV   rX   r   r2   rY   r\   rZ   N)*rA   rB   rC   rD   r   r   DEFAULT_ENCODINGr   rd   rv   r;   r,   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rE   rF   rI   s   @r   rK   rK   f   s     !K&6 5($?& M<><>!%%!!!! # "!!!!#
#
!#
( (r   rK   c                   t   a  ] tR tRt o ]t]P                  ]3R lt	R t
R tR tR tR t]tR tR	 tR
tV tR# )DummyFTPServeri  c                   \         P                  P                  V 4       \        P                  P                  V 4       R V n        V P                  V\        P                  4       V P                  V4       V P                  ^4       RV n        \         P                  ! 4       V n        V P                  P                  4       R,          w  V n        V n        RV n        W0n        R# )TF:N   NN)	threadingThreadr   r   
dispatcherdaemoncreate_socketrQ   SOCK_STREAMbindlistenactiveLockactive_lockr   hostr   handler_instancer   )r    addressr   r   s   &&&&r   r   DummyFTPServer.__init__  s    !!$'$$T*2v112		'A$>>+#{{668<	49 $ r   c                    \         P                  ! 4       V n        \         P                  P	                  V 4       V P                  P                  4        R # r   )r  Event_DummyFTPServer__flagr  startwaitr.   s   &r   r  DummyFTPServer.start(  s4    oo't$r   c                b   R V n         V P                  P                  4        V P                   '       de   \        P                  '       dO   V P
                  P                  4        \        P                  ! R^R7       V P
                  P                  4        Kv  \        P                  ! R R7       R# )T皙?)r   count
ignore_allN)
r	  r  setr   
socket_mapr  acquirelooprelease	close_allr.   s   &r   runDummyFTPServer.run.  sk    kkkh111$$&MM#Q/$$&d+r   c                4    R V n         V P                  4        R# )FN)r	  rj   r.   s   &r   stopDummyFTPServer.stop7  s    		r   c                H    V P                  WP                  R 7      V n        R# )r   N)handlerr   r  r    r!   r   s   &&&r   handle_acceptedDummyFTPServer.handle_accepted<  s     $TMM Jr   c                &    V P                  4        R # r   )r-   r.   s   &r   handle_connectDummyFTPServer.handle_connect?  s    r   c                    ^ # )r   r   r.   s   &r   writableDummyFTPServer.writableC  s    r   c                    \        4        R # r   r:   r.   s   &r   r;   DummyFTPServer.handle_errorF  r=   r   )__flagr	  r  r  r   r  r  r   N)rA   rB   rC   rD   rK   r(  rQ   AF_INETr   r   r  r!  r$  r*  r-  r'   r0  r;   rE   rF   r   s   @r   r   r     sG     G#)>><L !,
K K   r   r   certdatazkeycert3.pemzpycacert.pemc                      a a ] tR tRt oRtRtR tR tV 3R ltV 3R lt	V 3R lt
V 3R ltV 3R	 ltR
 tR tRtVtV ;t# )SSLConnectioniO  Fc                   \         P                  ! \         P                  4      pVP                  \        4       VP                  V P                  R RR R7      pV P                  4        V P                  V4       RV n	        R# )FT)suppress_ragged_eofsserver_sidedo_handshake_on_connectN)
ssl
SSLContextPROTOCOL_TLS_SERVERload_cert_chainCERTFILEwrap_socketrQ   del_channel
set_socket_ssl_accepting)r    contextrQ   s   &  r   secure_connectionSSLConnection.secure_connectionU  sk    nnS%<%<=G##H-((>C59AF ) HF OOF#"&Dr   c                l    V P                   P                  4        R V n        R#   \        P                   d   pTP
                  ^ ,          \        P                  \        P                  39   d    Rp?R# TP
                  ^ ,          \        P                  8X  d   T P                  4       u Rp?# RTP
                  ^,          9   d   T P                  4       u Rp?# h Rp?i\         dG   pTP
                  ^ ,          \        P                  8X  d   T P                  4       u Rp?#  Rp?R# Rp?ii ; i)FNSSLV3_ALERT_BAD_CERTIFICATE)rQ   do_handshakerE  r=  SSLErrorargsSSL_ERROR_WANT_READSSL_ERROR_WANT_WRITESSL_ERROR_EOFr/   OSErrorerrnoECONNABORTED)r    errs   & r   _do_ssl_handshakeSSLConnection._do_ssl_handshake`  s    ,((* ',# << 	88A;3#:#:#&#;#;#= =XXa[C$5$55,,..2chhqkA,,.. /88A;%"4"44,,.. 5/sJ   % D36C65C+D31'CD3CD3,D3-5D."D3.D3c                  < R V n          V P                  P                  4       V n        RV n         \        V RR4      RJ d   \        \        V `3  4        R# R#   \        P                   dG   pTP
                  ^ ,          \        P                  \        P                  39   d    Rp?R#  Rp?LRp?i\         d     Li ; i)TNF_ccc)_ssl_closingrQ   unwrapr=  rL  rM  rN  rO  rQ  rp   r4   r8  r?   )r    rT  r7   s   & r   _do_ssl_shutdownSSLConnection._do_ssl_shutdowns  s     $D"kk002 !&DtVU+u4mT02 << 88A;3#:#:#&#;#;#= ==  
 s#   A B>,6B--B>:B>=B>c                   < V P                   '       d   V P                  4        R # V P                  '       d   V P                  4        R # \        \
        V `  4        R # r   )rE  rU  rY  r[  r4   r8  handle_read_eventr    r7   s   &r   r^  SSLConnection.handle_read_event  s@    """&&("""%%'mT<>r   c                   < V P                   '       d   V P                  4        R # V P                  '       d   V P                  4        R # \        \
        V `  4        R # r   )rE  rU  rY  r[  r4   r8  handle_write_eventr_  s   &r   rb   SSLConnection.handle_write_event  s@    """&&("""%%'mT=?r   c                  <  \         \        V `  V4      #   \        P                   da   pTP
                  ^ ,          \        P                  \        P                  \        P                  \        P                  39   d    Rp?^ # h Rp?ii ; i)r   N)
r4   r8  sendr=  rL  rM  rP  SSL_ERROR_ZERO_RETURNrN  rO  )r    rc   rT  r7   s   && r   re  SSLConnection.send  sm    ]D6t<<<< 88A;3#4#4c6O6O#&#:#:#&#;#;#= = s    BABBBc                x  <  \         \        V `  V4      #   \        P                   d   pTP
                  ^ ,          \        P                  \        P                  39   d    Rp?R# TP
                  ^ ,          \        P                  \        P                  39   d   T P                  4         Rp?R# h Rp?ii ; i)r   Nr   )r4   r8  r%   r=  rL  rM  rN  rO  rP  rf  r/   )r    buffer_sizerT  r7   s   && r   r%   SSLConnection.recv  s    	]D6{CC<< 88A;3#:#:#&#;#;#= =88A;3#4#4c6O6O"PP%%'s!    B96B4'AB43B44B9c                    \        4        R # r   r:   r.   s   &r   r;   SSLConnection.handle_error  s    !#r   c                    \        V P                  \        P                  4      '       d+   V P                  P                  e   V P                  4        R # V P                  4        R # r   )
isinstancerQ   r=  	SSLSocket_sslobjr[  r?   r.   s   &r   r-   SSLConnection.shutdown  s<    4;;66KK''3%%'

r   )rE  rY  rQ   )rA   rB   rC   rD   rE  rY  rG  rU  r[  r^  rb  re  r%   r;   r-   rE   rF   rG   rH   s   @@r   r8  r8  O  sD      		'	,&	(	?	@	
		$	 	r   r8  c                   &   a  ] tR tRt o R tRtV tR# )DummyTLS_DTPHandleri  c                    \         P                  WV4       V P                  P                  '       d   V P	                  4        R # R # r   )r   r   r   secure_data_channelrG  r   s   &&&r   r   DummyTLS_DTPHandler.__init__  s3    $$T;~~111&&( 2r   r   N)rA   rB   rC   rD   r   rE   rF   r   s   @r   rs  rs    s     	) 	)r   rs  c                   H   a  ] tR tRt o ]t]3R ltR tR t	R t
R tRtV tR# )	DummyTLS_FTPHandleri  c                P    \         P                  WVR 7       RV n        RV n        R# )r'  FN)rK   r   ru  rX  r^   s   &&&r   r   DummyTLS_FTPHandler.__init__  s$    $$T($C',D$DIr   c                H    V P                  R 4       V P                  4        R# )z234 AUTH TLS successfulN)r,   rG  r    rq   s   &&r   cmd_authDummyTLS_FTPHandler.cmd_auth  s    II/0""$r   c                V    V P                  R 4       RV n        V P                  4        R# )z 220 Reverting back to clear-textTN)r,   rX  r[  r|  s   &&r   cmd_cccDummyTLS_FTPHandler.cmd_ccc  s"    II89DI!!#r   c                (    V P                  R 4       R# )z200 PBSZ=0 successful.Nr   r|  s   &&r   cmd_pbszDummyTLS_FTPHandler.cmd_pbsz  s    
 II./r   c                    VP                  4       pVR 8X  d   V P                  R4       RV n        R# VR8X  d   V P                  R4       RV n        R# V P                  R4       R# )Cz200 Protection set to ClearFPz200 Protection set to PrivateTz(502 Unrecognized PROT type (use C or P).N)upperr,   ru  )r    rq   rt   s   && r   cmd_protDummyTLS_FTPHandler.cmd_prot  sR    **,Ccz		78+0(		9:+/(		DEr   )rX  ru  N)rA   rB   rC   rD   rs  r   r   r   r}  r  r  r  rE   rF   r   s   @r   rx  rx    s/      **: 	
	%
	$
	0
	F 
	Fr   rx  c                       ] tR tRt]tRtR# )DummyTLS_FTPServeri  r   N)rA   rB   rC   rD   rx  r(  rE   r   r   r   r  r    s    %r   r  c                     a  ] tR tRt o ]3R l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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.V t/R,# )-TestFTPClassi  c                4   \        \        ^ 3VR7      V n        V P                  P                  4        \        P
                  ! \        VR7      V n        V P                  P                  V P                  P                  V P                  P                  4       R# r   r'  r   r   N)r   r   serverr  ftplibFTPr   clientconnectr  r   r    r   s   &&r   setUpTestFTPClass.setUp  s^    $dAYBjj8DDKK,,dkk.>.>?r   c                    V P                   P                  4        V P                  P                  4        R V n        \        P
                  ! RR7       R # NTr  r  r?   r  r$  r   r   r.   s   &r   tearDownTestFTPClass.tearDown  7    d+r   c                p    V P                  \        V4      \        V4      4       V P                  W4       R # r   )assertEquallen)r    receivedexpecteds   &&&r   
check_dataTestFTPClass.check_data  s(    XH6,r   c                Z    V P                  V P                  P                  4       R 4       R# )rP   N)r  r  
getwelcomer.   s   &r   test_getwelcomeTestFTPClass.test_getwelcome   s    //1=Ar   c                >   V P                  V P                  P                  R 4      \        R 4      4       V P                  V P                  P                  R4      \        R4      4       V P                  V P                  P                  R4      \        R4      4       R# )fooz
pass 12345z
pass *****z
PASS 12345z
PASS *****N)r  r  sanitizereprr.   s   &r   test_sanitizeTestFTPClass.test_sanitize  sm    --e4d5kB--l;T,=OP--l;T,=OPr   c                   V P                  \        V P                  P                  R 4       V P                  \        V P                  P                  R4       V P                  \        V P                  P                  R4       V P                  \        P
                  V P                  P                  R4       V P                  \        P
                  V P                  P                  R4       V P                  \        P                  V P                  P                  R4       V P                  \        P                  V P                  P                  R4       V P                  \        P                  V P                  P                  R4       R# )	z
echo 40
0z	echo 40
0z	echo 400zecho 400zecho 499zecho 500zecho 599zecho 999N)assertRaises
ValueErrorr  sendcmdr  
error_temp
error_permerror_protor.   s   &r   test_exceptionsTestFTPClass.test_exceptions  s    *dkk&9&9>J*dkk&9&9<H*dkk&9&9<H&++T[[-@-@*M&++T[[-@-@*M&++T[[-@-@*M&++T[[-@-@*M&,,dkk.A.A:Nr   c                   \         P                  \         P                  \         P                  \         P                  \         P
                  \        \        3pV F
  p V! R 4      h	  R#   \         P                   d     K(  i ; i)z(exception not included in all_errors setN)	r  error_replyr  r  r  ErrorrQ  EOFError
all_errors)r    
exceptionsr   s   &  r   test_all_errorsTestFTPClass.test_all_errors  sm    ((&*;*;V=N=N((&,, 
 ABCC  $$ s   A**BBc                P   V P                  V P                  P                  4       V P                  P                  R 4       V P                  V P                  P                  4       V P                  P                  R4       V P	                  V P                  P                  4       R# )TFN)
assertTruer  passiveserverset_pasvassertFalser.   s   &r   test_set_pasvTestFTPClass.test_set_pasv  sj    112T"112U#223r   c                   V P                  V P                  P                  R 4      R4       V P                  V P                  P                  R4      R4       V P                  \        P
                  V P                  P                  R4       V P                  \        P
                  V P                  P                  R4       R# )zecho 200200zecho 299299zecho 199zecho 300N)r  r  voidcmdr  r  r  r.   s   &r   test_voidcmdTestFTPClass.test_voidcmd$  s    ,,Z8%@,,Z8%@&,,dkk.A.A:N&,,dkk.A.A:Nr   c                :    V P                   P                  4        R # r   )r  loginr.   s   &r   
test_loginTestFTPClass.test_login*      r   c                <    V P                   P                  R 4       R# )passwdN)r  acctr.   s   &r   	test_acctTestFTPClass.test_acct-  s    "r   c                    V P                   P                  R R4       RV P                  P                  n        V P                  \        P                  V P                   P                  R R4       R# )abr  N)r  renamer  r  rY   r  r  r  r.   s   &r   test_renameTestFTPClass.test_rename0  sL    3$5:$$2&,,dkk.@.@#sKr   c                    V P                   P                  R 4       RV P                  P                  n        V P                  \        P                  V P                   P                  R 4       R# )r  199N)r  deleter  r  rY   r  r  r  r.   s   &r   test_deleteTestFTPClass.test_delete5  sH    5!5:$$2&,,dkk.@.@%Hr   c                <    V P                   P                  R 4       R# r  N)r  sizer.   s   &r   	test_sizeTestFTPClass.test_size:  s    r   c                `    V P                   P                  R 4      pV P                  VR 4       R# )/fooN)r  mkdr  r    dirs   & r   test_mkdTestFTPClass.test_mkd=  s$    kkoof%f%r   c                <    V P                   P                  R 4       R# r  )r  rmdr.   s   &r   test_rmdTestFTPClass.test_rmdA  s    r   c                `    V P                   P                  R 4      pV P                  VR4       R# )r  r   N)r  cwdr  r  s   & r   test_cwdTestFTPClass.test_cwdD  s$    kkoof%l+r   c                ^    V P                   P                  4       pV P                  VR 4       R# )zpwd okN)r  pwdr  r  s   & r   test_pwdTestFTPClass.test_pwdH  s"    kkooh'r   c                    V P                  V P                  P                  4       R 4       V P                  V P                  P                  R4       R# r   )r  r  quitr   r.   s   &r   	test_quitTestFTPClass.test_quitL  s9    ))+];))40r   c                :    V P                   P                  4        R # r   )r  abortr.   s   &r   
test_abortTestFTPClass.test_abortQ  r  r   c                    . pV P                   P                  R VP                  4       V P                  RP	                  V4      \
        P                  V P                   P                  4      4       R# retrr   Nr  
retrbinaryra   r  rj   r[   r5   r   r    r  s   & r   test_retrbinaryTestFTPClass.test_retrbinaryT  sO    vx7*!(()=)=>	@r   c                   R Fx  p. pV P                   P                  RVP                  VR7       V P                  RP	                  V4      \
        VR P                  V P                   P                  4      4       Kz  	  R# )r   r  rZ   r   N)r   
      r  )r    rZ   r  s   &  r   test_retrbinary_rest!TestFTPClass.test_retrbinary_restZ  se    DHKK""68??"FOOCHHX.%de,33DKK4H4HIK  r   c                    . pV P                   P                  R VP                  4       V P                  RP	                  V4      \
        P                  RR4      4       R# )r  rO   
N)r  	retrlinesra   r  rj   r[   r   r	  s   & r   test_retrlinesTestFTPClass.test_retrlinesa  sC    fhoo6)9+<+<VR+HIr   c                  a \         P                  ! \        P                  V P                  P
                  4      4      pV P                  P                  R V4       V P                  V P                  P                  P                  \        P                  V P                  P
                  4      4       . oVP                  ^ 4       V P                  P                  R VV3R lR7       V P                  S4       R# )storc                 &   < SP                  R 4      # r   ra   r   flags   &r   <lambda>.TestFTPClass.test_storbinary.<locals>.<lambda>n  s    T[[=Nr   callbackN)ioBytesIOr[   r5   r  r   
storbinaryr  r  r  r   seekr  )r    fr  s   & @r   test_storbinaryTestFTPClass.test_storbinaryf  s    JJy''(<(<=>vq)44GG!(()=)=>	@ 	q	vq3NOr   c                   \         P                  R R4      P                  V P                  P                  4      p\
        P                  ! V4      pR Fj  pVP                  ^ 4       V P                  P                  RW#R7       V P                  V P                  P                  P                  \        V4      4       Kl  	  R# )r  
r  r  N)   30)r[   r   r5   r  r   r!  r"  r$  r#  r  r  r  rZ   str)r    rc   r%  rs   &   r   test_storbinary_rest!TestFTPClass.test_storbinary_restq  s      .55dkk6J6JKJJtAFF1IKK""61"5T[[99>>AG r   c                J  a \         P                  R R4      P                  V P                  P                  4      p\
        P                  ! V4      pV P                  P                  RV4       V P                  V P                  P                  P                  \         P                  V P                  P                  4      4       . oVP                  ^ 4       V P                  P                  RVV3R lR7       V P                  S4       \
        P                  ! \         P                  R R4      4      p\        P                   ! R\"        3RR7      ;_uu_ 4        V P%                  \&        V P                  P                  RV4       R	R	R	4       R	#   + '       g   i     R	# ; i)
r  r)  r  zstor fooc                 &   < SP                  R 4      # r   r  r  s   &r   r  -TestFTPClass.test_storlines.<locals>.<lambda>  s    D@Qr   r  rO   T)quietN)r[   r   r5   r  r   r!  r"  	storlinesr  r  r  r   r$  r  StringIOr	   check_warningsBytesWarningr  	TypeError)r    rc   r%  r  s   &  @r   test_storlinesTestFTPClass.test_storlinesy  s     .55dkk6J6JKJJtfa(44GG!(()=)=>	@ 	q	j!6QRKK	))&$78++R,>dKKi)>)>
AN LKKKs   -FF"	c                    V P                   P                  4        V P                  V P                   P                  4       \        P	                  R 4      RR 4       R# )r  Nri   )r  nlstr  r   rl   r.   s   &r   	test_nlstTestFTPClass.test_nlst  s?    ))+Y__V-DSb-IJr   c                    . pV P                   P                  VP                  4       V P                  R P	                  V4      \
        P                  RR 4      4       R# )rO   r  N)r  r  ra   r  rj   r   r   )r    ls   & r   test_dirTestFTPClass.test_dir  s@    !Y%6%6vr%BCr   c                  a a \        S P                  P                  4       4       \        S P                  P                  R R7      4       \        S P                  P                  R RR.R7      4       \        S P                  P                  4       4      pV Fx  w  r#S P                  V\        4       S P                  V\
        4       S P                  V4       S P                  RV4       S P                  RV4       S P                  RV4       Kz  	  V 3R loR(V V3R	 llpV! R
4       V! RRR7       V! RRR7       V! RRR7       V! RRR7       V! RRR7       V! RRR7       V! RRR7       V! RRR7       V! RRR7       V! RR R7       V! R!R"R7       V! R#R$R7       S! R%4       \        S P                  P                  4       4      w  rSV F"  pS P                  VP                  4       4       K$  	  S! R&4       S P                  \        \        S P                  P                  4       4       S! R&4       S P                  P                  4        F  pS P                  R'V,          4       K  	  R# ))/)pathr  type)rE  factspermuniquec                 >   < V SP                   P                  n        R # r   )r  r  r2   )rc   r    s   &r   set_data(TestFTPClass.test_mlsd.<locals>.set_data  s    59DKK((2r   Nc                 Z  < Vf   RMTpVf   RMTpVf   RMTpVf   RMTpS! V 4       \        SP                  P                  4       4      w  rVSP                  WT4       SP                  VR,          V4       SP                  VR,          V4       SP                  VR,          V4       R # )NrF  rH  rI  name)nextr  mlsdr  )	rq   rF  rH  rI  rN  _namerG  r    rK  s	   &&&&&  r   
test_entry*TestFTPClass.test_mlsd.<locals>.test_entry  s    !\6tD!\6tD!'XVF!\6tDTN 0 0 23LEU)U6]D1U6]D1U8_f5r   z)type=type;perm=perm;unique=unique; name
z*type=ty=pe;perm=perm;unique=unique; name
zty=pe)rF  z*type==type;perm=perm;unique=unique; name
z=typez+type=t=y=pe;perm=perm;unique=unique; name
zt=y=pez)type=====;perm=perm;unique=unique; name
z====z*type=type;perm=perm;unique=unique; na me
zna me)rN  z*type=type;perm=perm;unique=unique; name 
zname z*type=type;perm=perm;unique=unique;  name
z namez,type=type;perm=perm;unique=unique; n am  e
zn am  ez*type=type;perm=perm;unique=unique; na;me
zna;mez*type=type;perm=perm;unique=unique; ;name
z;namez+type=type;perm=perm;unique=unique; ;name;
z;name;z)type=type;perm=perm;unique=unique; ;;;;
z;;;;z)Type=type;TyPe=perm;UNIQUE=unique; name
rO   zunexpected data %s)NNNN)r   r  rP  assertIsInstancer,  dictr  assertInrO  islowerr  StopIterationfail)r    lsrN  rG  rR  rQ  r   rK  s   f      @r   	test_mlsdTestFTPClass.test_mlsd  s    T[[ T[[3'(T[[3vv.>?@$++""$%KD!!$,!!%.OOD!MM&%(MM&%(MM(E* 	:
	6 
	6 	@AAPAPBR@vNAPAPAPC)TAPAPBR@vN>?DKK,,./AOOAIIK(  	-t{{/?/?/AB!!#AII*Q./ $r   c                    V P                   P                  4       ;_uu_ 4        V P                  V P                  P                  P
                  R 4       RRR4       R#   + '       g   i     R# ; i)r   Nr  makeportr  r  r  rX   r.   s   &r   test_makeportTestFTPClass.test_makeport  sG    [[!!##T[[99KK &( $###   1AA/	c                    V P                   P                  4       w  r\        P                  ! W3\        R 7      pVP                  4        V P                  V P                  P                  P                  R4       R# )r   pasvN
r  makepasvrQ   r   r   r?   r  r  r  rX   r    r  r   r!   s   &   r   test_makepasvTestFTPClass.test_makepasv  sS    [[))+
''gF

55GGPr   c                h   R V P                   n        V P                   P                  4       w  rV P                  WP                  P
                  P                  4       \        P                  ! V P                   P                  P                  4       ^ ,          V3\        R7      P                  4        R# )Tr   N)r  trust_server_pasv_ipv4_addressrf  r  r  r  r]   rQ   r   r   getpeernamer   r?   )r    bad_hostr   s   &  r   *test_makepasv_issue43285_security_disabled7TestFTPClass.test_makepasv_issue43285_security_disabled  s}    592--/++66JJ	L 	  $++"2"2">">"@"CT!J)0	227%'r   c                <   V P                  V P                  P                  4       V P                  P                  4       w  rV P	                  WP
                  P                  P                  4       \        P                  ! W3\        R 7      P                  4        R# )r   N)r  r  rk  rf  assertNotEqualr  r  r]   rQ   r   r   r?   )r    trusted_hostr   s   &  r   1test_makepasv_issue43285_security_enabled_default>TestFTPClass.test_makepasv_issue43285_security_enabled_default  so    CCD![[113kk::NN	P 	  ,!5wGMMOr   c                "  a  S P                   P                  4        V 3R  lp\        P                  ! \        R7      ;_uu_ 4       S n         S P                   P                  S P                  P                  S P                  P                  4       S P                   P                  R4       S P                  V! 4       4       RRR4       S P                  S P                  P                  P                  R4       S P                  V! 4       4       \        P                  ! \        R7      ;_uu_ 4       S n         S P                   P                  S P                  P                  S P                  P                  4       S P                   P                  R4       S P                   P                  4        RRR4       S P                  S P                  P                  P                  R4       S P                  V! 4       4        \        P                  ! \        R7      ;_uu_ 4       S n         S P                   P                  S P                  P                  S P                  P                  4       S P                   P                  R4       RS P                  P                  n        RRR4       S P!                  R4       \&        P(                  ! R4       S P                  S P                  P                  P                  R4       S P                  V! 4       4       R#   + '       g   i     ELb; i  + '       g   i     EL; i  + '       g   i     L; i  \        P"                   d&   pS P                  \%        T4      R4        Rp?LRp?ii ; i)c                     < S P                   P                  f   R#  S P                   P                  R4       R#   \        \        3 d     R# i ; i)NFnoopT)r  r   r  rQ  r  r.   s   r   is_client_connected=TestFTPClass.test_with_statement.<locals>.is_client_connected  sK    {{'##F+  X& s   : AAr   rw  Nr  z550 error on quitzException not raisedr  )r  r  r  r  r   r  r  r  r   r  r  r  r  rX   r  rY   rY  r  r,  timesleep)r    rx  rT  s   f  r   test_with_statement TestFTPClass.test_with_statement  sO   	 ZZ((DKKK 0 0$++2B2BCKK'OO/12 ) 	55GGP,./ ZZ((DKKK 0 0$++2B2BCKK'KK ) 	55GGP,./	.G,,##DKK$4$4dkk6F6FG##F+=P,,: - II,- 	

355GGP,./= )(( )(( -,    	<SX':;;	<sK   A;L1A?L-?#M "B M"M L*	-L>	M	M N)N		Nc                >   V P                   P                  4        \        P                  ! 4       p V P                   P	                  V P
                  P                  V P
                  P                  \        V3R 7       V P                  V P                   P                  P                  4       ^,          V4       V P                   P                  4        R#   \         d>   pTP                  \        P                  8X  d   T P                  RT,          4       h Rp?ii ; i))source_addresscouldn't bind to port %dN)r  r  r   find_unused_portr  r  r  r   r   r  r   r   rQ  rR  
EADDRINUSEskipTest)r    r   es   &  r   test_source_address TestFTPClass.test_source_address  s    --/	KK 0 0$++2B2B04d|   =T[[--99;A>EKK 	ww%***84?@	s   B!C D8DDc                   \         P                  ! 4       p\        V3V P                  n         V P                  P                  R 4      ;_uu_ 4       pV P                  VP                  4       ^,          V4       RRR4       R#   + '       g   i     R# ; i  \         d>   pTP                  \        P                  8X  d   T P                  RT,          4       h Rp?ii ; i)r   Nr  )r   r  r   r  r  transfercmdr  r   rQ  rR  r  r  )r    r   r   r  s   &   r   &test_source_address_passive_connection3TestFTPClass.test_source_address_passive_connection(  s    --/&*D\"	((00D  !1!1!3A!6= 1000 	ww%***84?@	s5   #B (B9B B	B B C"8CCc                ,   V P                  \        P                  ! R 4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  \        P                  R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R	4      R4       R
# )z257 "/foo/bar"z/foo/barz257 "/foo/bar" createdz257 ""rO   z257 "" createdz250 "/foo/bar"z257 "/foo/b""ar"z	/foo/b"arz257 "/foo/b""ar" createdN)r  r  parse257r  r  r.   s   &r   test_parse257TestFTPClass.test_parse2573  s    )9:JG)ABJO2B7)9:B?&,,foo?OP 	);<kJ)CDkRr   c                    V P                  \        P                  V P                  P                  R V P                  P
                  ,          ^,          4       R# )r   N)r  r  r  r  r  maxliner.   s   &r   test_line_too_longTestFTPClass.test_line_too_long?  s9    &,,(;(; 3 33a7	9r   c                   V P                   P                  R V P                   P                  ^,          ,          4       . pV P                  \        P
                  V P                   P                  RVP                  4       R# )zSETLONGRETR %dr  N)r  r  r  r  r  r  r  ra   r	  s   & r   test_retrlines_too_long$TestFTPClass.test_retrlines_too_longC  sX    ,0C0Ca0GHI&,,++//	Jr   c                    \         P                  ! R V P                  P                  ,          ^,          4      pV P	                  \
        P                  V P                  P                  RV4       R# )   xr  N)r!  r"  r  r  r  r  r  r4  )r    r%  s   & r   test_storlines_too_long$TestFTPClass.test_storlines_too_longI  sF    JJtdkk111A56&,,(=(=vqIr   c                N   R R.pV F  pV P                  VR7      ;_uu_ 4        V P                  4        V P                  VR7       V P                  W P                  P
                  4       V P                  4        V P                  4        V P                  4        V P                  P                  R4      pV P                  VR4       RRR4       K  	  \        P                  ! \        R7      pV P                  \        VP
                  4       R#   + '       g   i     EK  ; i)zlatin-1r   r'  u   /non-ascii dir ®Nr   )subTestr  r  r  r  r   r
  r&  r  r  r  r  r  r   r   )r    	encodingsr   new_dirr  s   &    r   test_encoding_param TestFTPClass.test_encoding_paramM  s    (	!Hx00

H
-  ;;+?+?@$$&$$&##%++//*?@)>? 10 " G,)6??; 100s   B%DD$r  r  N)0rA   rB   rC   rD   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r&  r.  r9  r=  rA  r[  r`  rh  rn  rs  r|  r  r  r  r  r  r  r  rE   rF   r   s   @r   r  r    s     - @,-BQ
O4O#L
I
 &,(1
@KJ
	HO"KD
80t(Q	:P+0Z	
S9JJ< <r   r  zIPv6 not enabledc                   D   a  ] tR tRt o R tR tR tR tR tR t	Rt
V tR	# )
TestIPv6Environmenti^  c                b   \        \        ^ 3\        P                  \        R7      V n        V P
                  P                  4        \        P                  ! \        \        R7      V n
        V P                  P                  V P
                  P                  V P
                  P                  4       R# )r   )r   r   r  N)r   r   rQ   r   r   r  r  r  r  r   r  r  r  r   r.   s   &r   r  TestIPv6Environment.setUpa  sl    $fa[(..>@ 	jj;KLDKK,,dkk.>.>?r   c                    V P                   P                  4        V P                  P                  4        R V n        \        P
                  ! RR7       R # r  r  r.   s   &r   r  TestIPv6Environment.tearDowni  r  r   c                n    V P                  V P                  P                  \        P                  4       R # r   )r  r  r   rQ   r   r.   s   &r   test_afTestIPv6Environment.test_afp  s    9r   c                    V P                   P                  4       ;_uu_ 4        V P                  V P                  P                  P
                  R 4       RRR4       R#   + '       g   i     R# ; i)eprtNr^  r.   s   &r   r`  !TestIPv6Environment.test_makeports  sG    [[!!##T[[99KK &( $###rb  c                    V P                   P                  4       w  r\        P                  ! W3\        R 7      pVP                  4        V P                  V P                  P                  P                  R4       R# )r   epsvNre  rg  s   &   r   rh  !TestIPv6Environment.test_makepasvx  sS    [[))+
''gF

55GGPr   c                   a  V 3R  lpS P                   P                  R4       V! 4        S P                   P                  R4       V! 4        R# )c                     < . p SP                   P                  R V P                  4       SP                  RP	                  V 4      \
        P                  SP                   P                  4      4       R# r  )r  r  ra   r  rj   r[   r5   r   )r  r    s    r   r  /TestIPv6Environment.test_transfer.<locals>.retr  sR    HKK""68??;SXXh/&--dkk.B.BCEr   TFN)r  r  )r    r  s   f r   test_transfer!TestIPv6Environment.test_transfer~  s9    	E
 	T"U#r   r  N)rA   rB   rC   rD   r  r  r  r`  rh  r  rE   rF   r   s   @r   r  r  ^  s*     @,:(
Q	 	r   r  zSSL not availablec                   ,   a  ] tR tRt o ]3R ltRtV tR# )TestTLS_FTPClassMixini  c                   \        \        ^ 3VR7      V n        V P                  P                  4        \        P
                  ! \        VR7      V n        V P                  P                  V P                  P                  V P                  P                  4       V P                  P                  4        V P                  P                  4        R# r  )r  r   r  r  r  FTP_TLSr   r  r  r  r   authprot_pr  s   &&r   r  TestTLS_FTPClassMixin.setUp  s~    ($XFnnWxHDKK,,dkk.>.>?r   r  N)rA   rB   rC   rD   r   r  rE   rF   r   s   @r   r  r    s      .  r   r  c                   t   a  ] tR tRt o ]3R ltR tR tR tR t	R t
R tR	 t]! R
R4      R 4       tRtV tR# )TestTLS_FTPClassi  c                2   \        \        ^ 3VR7      V n        V P                  P                  4        \        P
                  ! \        R7      V n        V P                  P                  V P                  P                  V P                  P                  4       R# )r   r'  r   N)r  r   r  r  r  r  r   r  r  r  r   r  s   &&r   r  TestTLS_FTPClass.setUp  s\    ($XFnnW5DKK,,dkk.>.>?r   c                    V P                   P                  4        V P                  P                  4        R V n        \        P
                  ! RR7       R # r  r  r.   s   &r   r  TestTLS_FTPClass.tearDown  r  r   c                
   V P                  V P                  P                  \        P                  4       V P                  P                  4        V P                  V P                  P                  \        P                  4       R # r   )assertNotIsInstancer  r   r=  ro  r  rT  r.   s   &r   test_control_connection(TestTLS_FTPClass.test_control_connection  sN      !1!13==Adkk..>r   c                X   V P                   P                  R 4      ;_uu_ 4       pV P                  V\        P                  4       V P                  VP                  R4      \        P                  V P                   P                  4      4       RRR4       V P                  V P                   P                  4       R4       V P                   P                  4        V P                   P                  R 4      ;_uu_ 4       pV P                  V\        P                  4       V P                  VP                  R4      \        P                  V P                   P                  4      4       RRR4       V P                  V P                   P                  4       R4       V P                   P                  4        V P                   P                  R 4      ;_uu_ 4       pV P                  V\        P                  4       V P                  VP                  R4      \        P                  V P                   P                  4      4       RRR4       V P                  V P                   P                  4       R4       R#   + '       g   i     EL; i  + '       g   i     EL); i  + '       g   i     Ld; i)r   r$   Nr*   )r  r  r  r=  ro  r  r%   r   r5   r   voidrespr  rT  prot_c)r    r   s   & r   test_data_connection%TestTLS_FTPClass.test_data_connection  s   [[$$V,,$$T3==9TYYt_&--dkk.B.BCE - 	--/1HI 	[[$$V,,!!$6 TYYt_&--dkk.B.BCE	 - 	--/1HI 	[[$$V,,$$T3==9TYYt_&--dkk.B.BCE - 	--/1HI- -,, -,, -,s&   A)I1<A)JA)J1J	J	J)	c                >   V P                  V P                  P                  \        P                  4       V P                  P                  4        V P                  V P                  P                  \        P                  4       V P                  P                  4        R # r   )r  r  r   r=  ro  r  rT  r.   s   &r   r  TestTLS_FTPClass.test_login  s^      !1!13==Adkk..>r   c                    V P                   P                  4        V P                  \        V P                   P                  4       R # r   )r  r  r  r  r.   s   &r   test_auth_issued_twice'TestTLS_FTPClass.test_auth_issued_twice  s,    *dkk&6&67r   c                    V P                   P                  4        \        P                  ! \        P                  4      pR Vn        \        P                  Vn        V P                  \        \        P                  \        VR7       V P                  \        \        P                  \        VR7       V P                  \        \        P                  \        \        VR7       \        P                  ! V\        R7      V n         V P                   P                  V P                  P                   V P                  P"                  4       V P%                  V P                   P&                  \        P(                  4       V P                   P+                  4        V P-                  V P                   P&                  P.                  V4       V P1                  V P                   P&                  \        P(                  4       V P                   P3                  4        V P                   P5                  R4      ;_uu_ 4       pV P-                  VP.                  V4       V P1                  V\        P(                  4       RRR4       R#   + '       g   i     R# ; i)F)keyfilerF  )certfilerF  )r  r  rF  rF  r   r   N)r  r  r=  r>  PROTOCOL_TLS_CLIENTcheck_hostname	CERT_NONEverify_moder  r8  r  r  rA  r   r  r  r  r   r  r   ro  r  assertIsrF  rT  r  r  r    ctxr   s   &  r   test_contextTestTLS_FTPClass.test_context  s   nnS445"--)V^^X"% 	 	')V^^h"% 	 	')V^^h"*C 	 	9 nnS'BDKK,,dkk.>.>?  !1!13==Adkk&&..4dkk..>[[$$V,,MM$,,,!!$6 -,,,s   5=I<<J	c                   V P                  \        V P                  P                  4       V P                  P	                  R R7       V P                  V P                  P                  \        P                  4       V P                  P                  4        V P                  \        V P                  P                  P                  4       R# )T)secureN)
r  r  r  cccr  rT  r   r=  ro  rZ  r.   s   &r   test_cccTestTLS_FTPClass.test_ccc  s{    *dkkoo6&dkk..>*dkk&6&6&=&=>r   FzFIXME: bpo-32706c           	        V P                   P                  4        \        P                  ! \        P                  4      pV P                  VP                  \        P                  4       V P                  VP                  R 4       VP                  \        4       \        P                  ! V\        R7      V n         V P                   P                  V P                  P                   V P                  P"                  4       V P%                  \        P&                  4      ;_uu_ 4        V P                   P)                  4        RRR4       V P                   P                  V P                  P                   V P                  P"                  4       V P                   P+                  4        V P%                  \        P&                  4      ;_uu_ 4        V P                   P-                  R4      ;_uu_ 4       p RRR4       RRR4       V P                   P                  4        V P                   P                  RV P                  P"                  4       V P                   P)                  4        V P                   P                  4        V P                   P                  RV P                  P"                  4       V P                   P+                  4        V P                   P-                  R4      ;_uu_ 4       p RRR4       R#   + '       g   i     EL; i  + '       g   i     EL$; i  + '       g   i     EL0; i  + '       g   i     R# ; i)Tr  Nr   	localhost)r  r  r=  r>  r  r  r  CERT_REQUIREDr  load_verify_locationsCAFILEr  r  r   r  r  r  r   r  CertificateErrorr  r  r  r  s   &  r   test_check_hostname$TestTLS_FTPClass.test_check_hostname  s   nnS445#*;*;<++T2!!&)nnS'B 	DKK,,dkk.>.>?s3344KK 5 	DKK,,dkk.>.>?s3344((00D 1 5 	K)9)9:K)9)9:[[$$V,, -,# 544 100 544 -,,s<   &K;$L#2L	4L#/L7;L	L 	L##L4	7M	r  N)rA   rB   rC   rD   r   r  r  r  r  r  r  r  r  r   r  rE   rF   r   s   @r   r  r    sP     
 . @,?
J4870? )* +r   r  c                   V   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RtV tR# )TestTimeoutsi  c                   \         P                  ! 4       V n        \        P                  ! \        P                  \        P
                  4      V n        V P                  P                  ^4       \        P                  ! V P                  4      V n
        \         P                  ! V P                  R7      V n        RV P                  n        V P                  P                  4        V P                  P!                  4        V P                  P#                  4        \$        P&                  P                  V n        V P                  \$        P&                  n
        R# )r  )targetTN)r  r  evtrQ   r5  r  r   r   r   	bind_portr   r  r  server_threadr  r  r  clearr  r  old_portr.   s   &r   r  TestTimeouts.setUp  s    ??$MM&..&2D2DE			R !++DII6	&--T[[A$(!  "

))

r   c                    V P                   \        P                  n        V P                  P                  4        R V n        R # r   )r  r  r  r   r  rj   r.   s   &r   r  TestTimeouts.tearDown'  s+    --

!!r   c                   V P                   P                  4        V P                  P                  4         V P                   P	                  4       w  rVP                  R 4       VP                  \        P                  4       V P                  P                  4        VP                  4        V P                   P                  4        R#   \         d     L)i ; i  T P                   P                  4        i ; i)s   1 Hola mundo
N)r   r  r  r  r   sendallr-   rQ   SHUT_WRr?   TimeoutErrorr)  s   &  r   r  TestTimeouts.server-  s    
 				))+JD LL*+MM&..)HHLLNJJLIIOO  		 IIOOs*   C AC CC CC C5c                   V P                  \        P                  ! 4       4       \        P                  ! ^4        \        P
                  ! \        4      p\        P                  ! R4       V P                  VP                  P                  4       ^4       V P                  P                  4        VP                  4        R#   \        P                  ! R4       i ; ir*  N)assertIsNonerQ   getdefaulttimeoutsetdefaulttimeoutr  r  r   r  r   
gettimeoutr  r  r?   r    ftps   & r   testTimeoutDefaultTestTimeouts.testTimeoutDefaultB  s    &2245  $	+**T"C$$T*,,.3		 $$T*s   C Cc                   V P                  \        P                  ! 4       4       \        P                  ! ^4        \        P
                  ! \        RR7      p\        P                  ! R4       V P                  VP                  P                  4       4       V P                  P                  4        VP                  4        R#   \        P                  ! R4       i ; i)r*  Nr   )r  rQ   r  r  r  r  r   r   r   r  r  r?   r  s   & r   testTimeoutNoneTestTimeouts.testTimeoutNoneN  s    &2245  $	+**T40C$$T*#((--/0		 $$T*s   C Cc                   \         P                  ! \        ^R7      pV P                  VP                  P                  4       ^4       V P                  P                  4        VP                  4        V P                  \        4      ;_uu_ 4        \         P                  ! \        ^ R7       RRR4       R#   + '       g   i     R# ; ir*  r   N)r  r  r   r  r   r   r  r  r?   r  r  r  s   & r   testTimeoutValueTestTimeouts.testTimeoutValueZ  su    jjr*,,.3		 z**JJtQ' +***s   B55C	c                   \         P                  ! 4       pVP                  \        ^R7       V P	                  VP
                  P                  4       ^4       V P                  P                  4        VP                  4        R# r	  
r  r  r  r   r  r   r   r  r  r?   r  s   & r   testTimeoutConnectTestTimeouts.testTimeoutConnecte  sP    jjlD"%,,.3		r   c                   \         P                  ! ^R7      pVP                  \        4       V P	                  VP
                  P                  4       ^4       V P                  P                  4        VP                  4        R# r	  r  r  s   & r   testTimeoutDifferentOrder&TestTimeouts.testTimeoutDifferentOrderl  sO    jj$D,,.3		r   c                   \         P                  ! 4       p^Vn        VP                  \        4       V P                  VP                  P                  4       ^4       V P                  P                  4        VP                  4        R# r  )r  r  r   r  r   r  r   r   r  r  r?   r  s   & r   testTimeoutDirectAccess$TestTimeouts.testTimeoutDirectAccesss  sS    jjlD,,.3		r   )r  r  r   r  r   N)rA   rB   rC   rD   r  r  r  r  r  r
  r  r  r  rE   rF   r   s   @r   r  r    s7     $"*

	( r   r  c                   &   a  ] tR tRt o R tRtV tR# )MiscTestCasei|  c                H    0 Rmp\         P                  ! V \        VR7       R# )MSG_OOB)not_exportedN>   CRLFtestr  ftpcpB_CRLFMAXLINEr  FTP_PORTparse150parse227parse229r  
print_line)r   check__all__r  )r    r  s   & r   test__all__MiscTestCase.test__all__}  s     	T6Er   r   N)rA   rB   rC   rD   r&  rE   rF   r   s   @r   r  r  |  s     F Fr   r  c                  |    \         P                  ! 4       p \        P                  ! \         P                  .V O5!   R # r   )r   threading_setupunittestaddModuleCleanupthreading_cleanup)thread_infos    r   setUpModuler.    s*    "224K.@@O;Or   __main__);r  rQ   r!  rR  osr  rz  r*  r=  ImportErrorr   r   r  r   test.supportr   r   r   r	   r
   r   test.support.socket_helperr   r   requires_working_socketLOOPBACK_TIMEOUTr   r   r[   r   r   r   r   r   r   rK   r  r  r   rE  rj   dirname__file__rA  r  r8  rs  rx  r  r  IPV6_ENABLEDr  r  r  r  r  r.  rA   mainr   r   r   <module>r:     sC     	  	    *  , ) & ( ! ! 3   t ,

"
"  ,d2	4	4	K	&	"h)) "Jn(h)) n(b0 X(()*:*: 0 f ?ww||BGGOOH5z>RHWW\\"''//(3ZPFf++ fR)m_ )%Fm_ %FP&^ &n<8 n<b M&&(:;(( ( <(V C$%L   & C$%wx w  &wtb8 bJF8 FP
 zMMO u#  
Cs   H( (	H54H5