python (3.12.0)

(root)/
lib/
python3.12/
test/
__pycache__/
test_ftplib.cpython-312.opt-1.pyc

Αeѧ*dZddlZddlZddlZddlZddlZddlZddlZddlZ	ddl	Z	ddlmZmZddl
mZddlmZddlmZddlmZddlmZdd	lmZdd
lmZmZej0dej2Zd
ZddzdzZdZdZdZdZ GddejBZ"GddejBZ#GddejHejJZ&e	ejNjQejNjSe*dZ+ejNjQejNjSe*dZ,GddejHZ-Gdde-e"Z.Gd d!e-e#Z/Gd"d#e&Z0Gd$d%eZ1eejdd&Gd'd(eZ3ee	d)Gd*d+e1Z4ee	d)Gd,d-eZ5Gd.d/eZ6Gd0d1eZ7d2Z8e9d3k(rejtyy#e
$rdZ	YwxYw)4zTest script for ftplib module.N)TestCase
skipUnless)support)threading_helper)
socket_helper)warnings_helper)asynchat)asyncore)HOSTHOSTv6T)moduleutf-8zabcde12345
iunon-ascii char ®
ufoo
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
cyNrD/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/test/test_ftplib.pydefault_error_handlerr9s	rc:eZdZdZdZdZdZfdZdZxZ	S)DummyDTPHandlerFctjj||||_d|j_|j
|_y)N)r	
async_chat__init__	baseclasslast_received_dataencodingselfconnrs   rrzDummyDTPHandler.__init__Cs8$$T40",.)!**
rc|jdj|jd}|jxj|z
c_y)Nreplace)recvdecoderrr)rnew_datas  rhandle_readzDummyDTPHandler.handle_readIs599T?))$--C))X5)rc|js3|jjd|jd|_yy)N226 transfer completeT)dtp_conn_closedrpushclosers rhandle_closezDummyDTPHandler.handle_closeMs6##NN 78JJL#'D $rc|jj'|jj}d|j_|s|jStt||j
|jyr)r	next_dataclose_when_donesuperrr+encoder)rwhat	__class__s  rr+zDummyDTPHandler.pushVs\>>##/>>++D'+DNN$''))
ot)$++dmm*DErctyrrr-s rhandle_errorzDummyDTPHandler.handle_error^r)
__name__
__module____qualname__r*rr'r.r+r8
__classcell__r5s@rrr@s"O+6(F rrceZdZeZefdZdZdZdZ	dZ
dZdZdZ
d	Zd
ZdZdZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$d Z%d!Z&y")#DummyFTPHandlerctjj|||jj	tj
tjd|jdg|_d|_	d|_
d|_d|_d|_
d|_t|_|j#d||_d|_y)N
r220 welcomez252.253.254.255)r	rrsocket
setsockopt
SOL_SOCKETSO_OOBINLINEset_terminator	in_bufferdtplast_received_cmdr
next_responser0rest	RETR_DATAnext_retr_datar+rfake_pasv_server_iprr rs   rrzDummyFTPHandler.__init__fs$$T40v00&2E2EqIG$!%"$	'		-  
$5 rc:|jj|yr)rJappendrdatas  rcollect_incoming_dataz%DummyFTPHandler.collect_incoming_datazsd#rcdj|jj|j}g|_|jr"|j|jd|_|j
ddj}||_|jd}|dk7r	||dzd}nd}t|d|zrt|d|z}||y|jd|zy)	Nrr rrBcmd_z 550 command "%s" not understood.)joinrJr%rrMr+splitlowerrLfindhasattrgetattr)rlinecmdspaceargmethods      rfound_terminatorz DummyFTPHandler.found_terminator}sxx'..t}}=IId(()!#Djjoa &&(!$		#B;uqyz"CC4#&T6C<0F3KII8#=>rctyrr7r-s rr8zDummyFTPHandler.handle_errorr9rc|tjj||j|jdzy)NrC)r	rr+r3rrUs  rr+zDummyFTPHandler.pushs*  t{{4=='AG'KLrcttt|jd}dt	|ddz}|ddz|dz}tj||ft}|j|||_	|jdy)	N,z%d.%d.%d.%dtimeoutr&200 active data connection established)listmapintr]tuplerEcreate_connectionTIMEOUTdtp_handlerrKr+)rreaddripportss      rcmd_portzDummyFTPHandler.cmd_portsCSYYs^,-
E$r(O
+Q#
a($$b$ZA##A#6		:;rctj|jjddf5}|jt|jd}|j
}|j
dd}|dz}|dz}|jd|||fz|j\}}|j|||_
dddy#1swYyxYw)NrrB.rkrmz$227 entering passive mode (%s,%d,%d)rq)rE
create_servergetsockname
settimeoutrxrQr#r+acceptryrK)	rresockr|r{p1p2r rzs	         rcmd_pasvzDummyFTPHandler.cmd_pasvs

!
!4;;#:#:#<Q#?"C
D	>OOG$##%a(D))BC%BD3JrTCZII<r2rlJKJD$'''=DH	>	>	>sBCCc|j|ddd\}}}t|}tj||ft}|j|||_|jdy)NrrBrZrorqrr)r]rurErwrxryrKr+)rreafr{r|r}s      rcmd_eprtzDummyFTPHandler.cmd_eprtsdyyQ(2.B4y$$b$ZA##A#6		:;rctj|jjddftj5}|j	t
|jd}|j
d|z|j\}}|j|||_	dddy#1swYyxYw)Nr)familyrBz+229 entering extended passive mode (|||%d|)rq)
rErrAF_INET6rrxr+rryrK)rrerr|r rzs      rcmd_epsvzDummyFTPHandler.cmd_epsvs

!
!4;;#:#:#<Q#?"C)/:	>=AOOG$##%a(DIICTIJJD$'''=DH
	>	>	>s
A(B44B=c&|j|yrr+rres  rcmd_echozDummyFTPHandler.cmd_echos
		#rc&|jdy)Nz200 noop okrrs  rcmd_noopzDummyFTPHandler.cmd_noop		- rc&|jdy)Nz331 username okrrs  rcmd_userzDummyFTPHandler.cmd_user		#$rc&|jdy)Nz230 password okrrs  rcmd_passzDummyFTPHandler.cmd_passrrc&|jdy)Nz230 acct okrrs  rcmd_acctzDummyFTPHandler.cmd_acctrrc&|jdy)Nz350 rnfr okrrs  rcmd_rnfrzDummyFTPHandler.cmd_rnfrrrc&|jdy)Nz250 rnto okrrs  rcmd_rntozDummyFTPHandler.cmd_rntorrc&|jdy)Nz250 dele okrrs  rcmd_delezDummyFTPHandler.cmd_delerrc&|jdy)N
250 cwd okrrs  rcmd_cwdzDummyFTPHandler.cmd_cwd		,rc&|jdy)Nz250 1000rrs  rcmd_sizezDummyFTPHandler.cmd_sizes		*rc,|jd|zy)Nz257 "%s"rrs  rcmd_mkdzDummyFTPHandler.cmd_mkds		*c/"rc&|jdy)Nz
250 rmd okrrs  rcmd_rmdzDummyFTPHandler.cmd_rmdrrc&|jdy)Nz257 "pwd ok"rrs  rcmd_pwdzDummyFTPHandler.cmd_pwds		.!rc&|jdy)Nz200 type okrrs  rcmd_typezDummyFTPHandler.cmd_typerrcF|jd|jyNz221 quit ok)r+r,rs  rcmd_quitzDummyFTPHandler.cmd_quits		- 

rc&|jdy)Nz226 abor okrrs  rcmd_aborzDummyFTPHandler.cmd_aborrrc&|jdy)Nz125 stor okrrs  rcmd_storzDummyFTPHandler.cmd_storrrc4||_|jdy)Nz350 rest ok)rNr+rs  rcmd_restzDummyFTPHandler.cmd_rests			- rc|jd|jt|j}nd}|jj|j|d|jjd|_y)Nz125 retr okr)r+rNrurKrPr1)rreoffsets   rcmd_retrzDummyFTPHandler.cmd_retrs^		- 99 ^FF

d))&'23  "	rc|jd|jjt|jjy)Nz125 list ok)r+rK	LIST_DATAr1rs  rcmd_listzDummyFTPHandler.cmd_list.		- 

i   "rc|jd|jjt|jjy)Nz125 nlst ok)r+rK	NLST_DATAr1rs  rcmd_nlstzDummyFTPHandler.cmd_nlstrrc&|jdy)Nz200 opts okrrs  rcmd_optszDummyFTPHandler.cmd_optsrrc|jd|jjt|jjy)Nz125 mlsd ok)r+rK	MLSD_DATAr1rs  rcmd_mlsdzDummyFTPHandler.cmd_mlsdrrcLdt|z|_|jdy)Nxz125 setlongretr ok)rurPr+rs  rcmd_setlongretrzDummyFTPHandler.cmd_setlongretr
s!CHn		&'rN)'r:r;r<rryDEFAULT_ENCODINGrrWrgr8r+r~rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr@r@bs!K&65($?& M<><>!%%!!!! # "!!!!#
#
!#
(rr@c^eZdZeZejefdZdZ	dZ
dZdZdZ
e
ZdZdZy	)
DummyFTPServerctjj|tjj|d|_|j
|tj|j||jdd|_tj|_
|jjdd\|_|_d|_||_y)NTrnF)	threadingThreadrr

dispatcherdaemon
create_socketrESOCK_STREAMbindlistenactiveLockactive_lockrhostr|handler_instancer)raddressrrs    rrzDummyFTPServer.__init__s!!$'$$T*2v112		'A$>>+#{{668!<	49 $ 
rctj|_tjj	||jjyr)rEvent_DummyFTPServer__flagrstartwaitr-s rrzDummyFTPServer.start$s4oo't$rczd|_|jj|jrxtjrh|j
j
tjdd|j
j|jrtjrhtjdy)NT皙?rB)rpcount
ignore_all)
rrsetr

socket_mapracquirelooprelease	close_allr-s rrunzDummyFTPServer.run*sykkh11$$&MM#Q/$$&kkh11	d+rc2d|_|jy)NF)rr\r-s rstopzDummyFTPServer.stop3s		rcH|j||j|_y)Nr)handlerrrrr rzs   rhandle_acceptedzDummyFTPServer.handle_accepted8s $TDMM Jrc$|jyr)r,r-s rhandle_connectzDummyFTPServer.handle_connect;s

rcyNrrr-s rwritablezDummyFTPServer.writable?srctyrr7r-s rr8zDummyFTPServer.handle_errorBr9rN)r:r;r<r@rrEAF_INETrrrrrrrr'rr8rrrrrs?G#)>><L!,
K K rrzkeycert3.pemzpycacert.pemcneZdZdZdZdZdZdZfdZfdZ	fdZ
fdZfd	Zd
Z
fdZxZS)
SSLConnectionz3An asyncore.dispatcher subclass supporting TLS/SSL.Fctjtj}|jt|j|jddd}|j|j|d|_	y)NFT)suppress_ragged_eofsserver_sidedo_handshake_on_connect)
ssl
SSLContextPROTOCOL_TLS_SERVERload_cert_chainCERTFILEwrap_socketrEdel_channel
set_socket_ssl_accepting)rcontextrEs   rsecure_connectionzSSLConnection.secure_connectionQsknnS%<%<=G##H-((>C59AF)HF
OOF#"&Drc*	|jjd|_y#tj$r}|j
dtjtjfvrYd}~y|j
dtjk(r|jcYd}~Sd|j
dvr|jcYd}~Sd}~wt$r?}|j
dtjk(r|jcYd}~SYd}~yd}~wwxYw)NFrSSLV3_ALERT_BAD_CERTIFICATErB)
rEdo_handshaker
rSSLErrorargsSSL_ERROR_WANT_READSSL_ERROR_WANT_WRITE
SSL_ERROR_EOFr.OSErrorerrnoECONNABORTED)rerrs  r_do_ssl_handshakezSSLConnection._do_ssl_handshake\s
,((*',#<<	
88A;3#:#:#&#;#;#==XXa[C$5$55,,..2chhqkA,,..
/88A;%"4"44,,..5
/sD$D/C+/CD  CDCD/D
D
Dcbd|_	|jj|_d|_t|dddurtt|3yy#tj$r>}|j
dtjtjfvrYd}~yYd}~vd}~wt$rYwxYw)NTrF_ccc)
_ssl_closingrEunwraprrrrrrrar2rr,)rrr5s  r_do_ssl_shutdownzSSLConnection._do_ssl_shutdownos $D
"kk002!&DtVU+u4mT02<<
88A;3#:#:#&#;#;#===


sAB.&/BB.-B.c|jr|jy|jr|jytt
|yr)r
rrr!r2rhandle_read_eventrr5s rr#zSSLConnection.handle_read_events:""&&(""%%'mT<>rc|jr|jy|jr|jytt
|yr)r
rrr!r2rhandle_write_eventr$s rr&z SSLConnection.handle_write_events:""&&(""%%'mT=?rc	tt||S#tj$rX}|j
dtjtjtjtjfvrYd}~yd}~wwxYwr)
r2rsendrrrrSSL_ERROR_ZERO_RETURNrr)rrVrr5s   rr(zSSLConnection.sendsm
]D6t<<<<
88A;3#4#4c6O6O#&#:#:#&#;#;#==
sBA
A<;A<<BcT	tt||S#tj$r~}|j
dtjtjfvrYd}~y|j
dtjtjfvr|jYd}~yd}~wwxYw)Nrr)r2rr$rrrrrrr)r.)rbuffer_sizerr5s   rr$zSSLConnection.recvs	
]D6{CC<<
88A;3#:#:#&#;#;#==88A;3#4#4c6O6O"PP%%'
s B'/B"?B"!B""B'ctyrr7r-s rr8zSSLConnection.handle_errors!#rct|jtjr'|jj|jytt|#yr)	
isinstancerEr	SSLSocket_sslobjr!r2rr,r$s rr,zSSLConnection.closes>4;;

6KK''3%%'mT02r)r:r;r<__doc__r
rrrr!r#r&r(r$r8r,r=r>s@rrrKsCA		'	,&	(	?	@	
		$	3	3rrceZdZdZdZy)DummyTLS_DTPHandlerz.A DummyDTPHandler subclass supporting TLS/SSL.ctj||||jjr|j	yyr)rrrsecure_data_channelrrs   rrzDummyTLS_DTPHandler.__init__s2$$T4;~~11&&(2rN)r:r;r<r1rrrrr3r3s
<	)rr3c6eZdZdZeZefdZdZdZ	dZ
dZy)DummyTLS_FTPHandlerz.A DummyFTPHandler subclass supporting TLS/SSL.cPtj|||d|_d|_y)NrF)r@rr5rrRs   rrzDummyTLS_FTPHandler.__init__s&$$T4($C',D$DIrcF|jd|jy)zSet up secure control channel.z234 AUTH TLS successfulN)r+rrrbs  rcmd_authzDummyTLS_FTPHandler.cmd_authsII/0""$rcT|jdd|_|jy)Nz 220 Reverting back to clear-textT)r+rr!r:s  rcmd_ccczDummyTLS_FTPHandler.cmd_cccs"II89DI!!#rc&|jdy)zNegotiate size of buffer for secure data transfer.
            For TLS/SSL the only valid value for the parameter is '0'.
            Any other value is accepted but ignored.
            z200 PBSZ=0 successful.Nrr:s  rcmd_pbszzDummyTLS_FTPHandler.cmd_pbszs

II./rc|j}|dk(r|jdd|_y|dk(r|jdd|_y|jdy)	zSetup un/secure data channel.Cz200 Protection set to ClearFPz200 Protection set to PrivateTz(502 Unrecognized PROT type (use C or P).N)upperr+r5)rrbres   rcmd_protzDummyTLS_FTPHandler.cmd_protsR**,Ccz		78+0(		9:+/(		DErN)r:r;r<r1r3ryrrr;r=r?rDrrrr7r7s'<)*:	
	%
	$
	0
	Frr7ceZdZeZy)DummyTLS_FTPServerN)r:r;r<r7rrrrrFrFs%rrFceZdZefdZdZdZdZdZdZ	dZ
dZd	Zd
Z
dZdZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"d Z#d!Z$d"Z%d#Z&d$Z'd%Z(d&Z)d'Z*d(Z+d)Z,y*)+TestFTPClassc0ttdf||_|jjt	j
t||_|jj|jj|jjyNrrrpr)rrserverrftplibFTPrxclientconnectrr|rrs  rsetUpzTestFTPClass.setUps^$dAYBjj8DDKK,,dkk.>.>?rc|jj|jjd|_t	j
dyNTrrOr,rLrr
rr-s rtearDownzTestFTPClass.tearDown7d+rcp|jt|t||j||yr)assertEquallen)rreceivedexpecteds   r
check_datazTestFTPClass.check_datas*XH
68,rcX|j|jjdy)NrD)rYrO
getwelcomer-s rtest_getwelcomezTestFTPClass.test_getwelcomes//1=Arc<|j|jjdtd|j|jjdtd|j|jjdtdy)Nfooz
pass 12345z
pass *****z
PASS 12345z
PASS *****)rYrOsanitizereprr-s r
test_sanitizezTestFTPClass.test_sanitizesm--e4d5kB--l;T,=OP--l;T,=OPrc|jt|jjd|jt|jjd|jt|jjd|jtj
|jjd|jtj
|jjd|jtj|jjd|jtj|jjd|jtj|jjdy)	Nz
echo 40
0z	echo 40
0z	echo 40
0zecho 400zecho 499zecho 500zecho 599zecho 999)assertRaises
ValueErrorrOsendcmdrM
error_temp
error_permerror_protor-s rtest_exceptionszTestFTPClass.test_exceptionss*dkk&9&9>J*dkk&9&9<H*dkk&9&9<H&++T[[-@-@*M&++T[[-@-@*M&++T[[-@-@*M&++T[[-@-@*M&,,dkk.A.A:Nrctjtjtjtjtj
ttf}|D]
}	|dy#tj$rY#wxYw)Nz(exception not included in all_errors set)	rMerror_replyrjrkrlErrorrEOFError
all_errors)r
exceptionsrs   rtest_all_errorszTestFTPClass.test_all_errorssr((&*;*;V=N=N((&,, 
	A
BCC	$$

sA((A>=A>cN|j|jj|jjd|j|jj|jjd|j	|jjy)NTF)
assertTruerO
passiveserverset_pasvassertFalser-s r
test_set_pasvzTestFTPClass.test_set_pasvsj112T"112U#223rcD|jjd|jjd|jtj|jjd|jtj|jjdy)Nzecho 200zecho 299zecho 199zecho 300)rOvoidcmdrgrMror-s rtest_voidcmdzTestFTPClass.test_voidcmd sjJ'J'&,,dkk.A.A:N&,,dkk.A.A:Nrc8|jjyr)rOloginr-s r
test_loginzTestFTPClass.test_login&rc:|jjdy)Npasswd)rOacctr-s r	test_acctzTestFTPClass.test_acct)s"rc|jjddd|jj_|jtj|jjddy)Nab200)rOrenamerLrrMrgrMror-s rtest_renamezTestFTPClass.test_rename,sL3$5:$$2&,,dkk.@.@#sKrc|jjdd|jj_|jtj|jjdy)Nrb199)rOdeleterLrrMrgrMror-s rtest_deletezTestFTPClass.test_delete1sH5!5:$$2&,,dkk.@.@%Hrc:|jjdyNrb)rOsizer-s r	test_sizezTestFTPClass.test_size6src^|jjd}|j|dy)N/foo)rOmkdrYrdirs  rtest_mkdzTestFTPClass.test_mkd9s$kkoof%f%rc:|jjdyr)rOrmdr-s rtest_rmdzTestFTPClass.test_rmd=src^|jjd}|j|dy)Nrr)rOcwdrYrs  rtest_cwdzTestFTPClass.test_cwd@s$kkoof%l+rc\|jj}|j|dy)Nzpwd ok)rOpwdrYrs  rtest_pwdzTestFTPClass.test_pwdDs"kkooh'rc|j|jjd|j|jjdyr)rYrOquitrr-s r	test_quitzTestFTPClass.test_quitHs9))+];))40rc8|jjyr)rOabortr-s r
test_abortzTestFTPClass.test_abortMrrcfd}gjjd|jdjty)Ncnj|jjjyrrTr%rOrrVr[rs rcallbackz.TestFTPClass.test_retrbinary.<locals>.callbackQ"OODKK(<(<=>rretrrrO
retrbinaryr]r\rO)rrr[s` @rtest_retrbinaryzTestFTPClass.test_retrbinaryPs8	?vx0)95rcfd}dD]J}gjjd||jdjt|dLy)Ncnj|jjjyrrrs rrz3TestFTPClass.test_retrbinary_rest.<locals>.callbackXrr)r
rrNrr)rrrNr[s`  @rtest_retrbinary_restz!TestFTPClass.test_retrbinary_restWsU	?	ADHKK""68$"?OOBGGH-y/?@	Arcg}|jjd|j|jdj	|t
j
ddy)Nrr
)rO	retrlinesrTr]r\rOr#rr[s  rtest_retrlineszTestFTPClass.test_retrlines_sCfhoo6)9+<+<VR+HIrctjtj|jj
}|jj
d||j|jjjtg|jd|jj
d|fd|jy)Nstorrc&jdSrrTrflags r<lambda>z.TestFTPClass.test_storbinary.<locals>.<lambda>ksT[[=Nrr)
ioBytesIOrOr3rOr
storbinaryr]rLrrseekrv)rfrs  @rtest_storbinaryzTestFTPClass.test_storbinarydsJJy''(<(<=>vq)44GGS	q	vq3NOrc~tjddj|jj}tj|}dD]j}|jd|jjd|||j|jjjt|ly)Nr
)30rrr)rOr#r3rOrrrrrrYrLrrNstr)rrVrrs    rtest_storbinary_restz!TestFTPClass.test_storbinary_restns  .55dkk6J6JKJJt	HA
FF1IKK""611"5T[[99>>AG	Hrctjddj|jj}tj|}|jjd||j|jjjtg|jd|jjd|fd|jtjtjdd}tj dt"fd	
5|j%t&|jjd|dddy#1swYyxYw)Nrrrrzstor fooc&jdSrrrs rrz-TestFTPClass.test_storlines.<locals>.<lambda>~sD@QrrrT)quiet)rOr#r3rOrrr	storlinesr]rLrrrrvStringIOrcheck_warningsBytesWarningrg	TypeError)rrVrrs   @rtest_storlineszTestFTPClass.test_storlinesvs  .55dkk6J6JKJJtfa(44GGS	q	j!6QRKK	))&$78

+
+R,>d
K	Oi)>)>
AN	O	O	Os+-E!!E*c|jj|j|jjtj	dddy)NrrZ)rOnlstrYrr]r-s r	test_nlstzTestFTPClass.test_nlsts?))+Y__V-DSb-IJrcg|jjfd|jdjtjddy)Nc&j|Srr)rls rrz'TestFTPClass.test_dir.<locals>.<lambda>s!((1+rrr)rOrrYr\rr#)rrs @rtest_dirzTestFTPClass.test_dirs>-.Y%6%6vr%BCrctjjtjjdtjjdddgtjj}|D]x\}}j|tj|t
j
|jd|jd|jd|zfdd(fd		}|d
|dd
|dd
|dd
|dd
|dd|dd|dd|dd|dd|dd |d!d"|d#d$d%tjj\}}|D]!}j
|j#d&jttjjd&jjD]}jd'|zy))N/)pathrtype)rfactspermuniquec<|jj_yr)rLrr0)rVrs rset_dataz(TestFTPClass.test_mlsd.<locals>.set_datas59DKK((2rc4|dn|}|dn|}|dn|}|dn|}|tjj\}}j||j|d|j|d|j|d|y)Nrrrname)nextrOmlsdrY)	rbrrrr_namerrrs	       r
test_entryz*TestFTPClass.test_mlsd.<locals>.test_entrys!\6tD!\6tD!'XVF!\6tDTN 0 0 23LE5UD)U6]D1U6]D1U8_f5rz)type=type;perm=perm;unique=unique; name
z*type=ty=pe;perm=perm;unique=unique; name
zty=pe)rz*type==type;perm=perm;unique=unique; name
z=typez+type=t=y=pe;perm=perm;unique=unique; name
zt=y=pez)type=====;perm=perm;unique=unique; name
z====z*type=type;perm=perm;unique=unique; na me
zna me)rz*type=type;perm=perm;unique=unique; name 
zname z*type=type;perm=perm;unique=unique;  name
z namez,type=type;perm=perm;unique=unique; n am  e
zn am  ez*type=type;perm=perm;unique=unique; na;me
zna;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
rzunexpected data %s)NNNN)
rsrOrassertIsInstancerdictrvassertInrislowerrg
StopIterationfail)rlsrrrrrrs`      @r	test_mlsdzTestFTPClass.test_mlsdsT[[


 T[[

3

'(T[[

3vv.>

?@
$++""$
%	+KD%!!$,!!%.OOD!MM&%(MM&%(MM(E*
	+	:
	6	@AAPAPBR@vNAPAPAPC)TAPAPBR@vN>?DKK,,./u	)AOOAIIK(	)	-t{{/?/?/AB!!#	0AII*Q./	0rc|jj5|j|jjj
ddddy#1swYyxYw)Nr|rOmakeportrYrLrrLr-s r
test_makeportzTestFTPClass.test_makeportsJ
[[
!
!
#	(T[[99KK &
(	(	(	(1AAc|jj\}}tj||ft}|j|j
|jjjdy)Nropasv
rOmakepasvrErwrxr,rYrLrrLrrr|r s    r
test_makepasvzTestFTPClass.test_makepasvsW[[))+
d''tgF

55GGPrc`d|j_|jj\}}|j||jj
jtj|jjjd|ftjy)z/Test the opt-in to the old vulnerable behavior.TrroN)
rOtrust_server_pasv_ipv4_addressrrYrLrrQrErwrgetpeernamerxr,)rbad_hostr|s   r*test_makepasv_issue43285_security_disabledz7TestFTPClass.test_makepasv_issue43285_security_disableds592--/$$++66JJ	L	  $++"2"2">">"@"CT!J)0	227%'rc>|j|jj|jj\}}|j	||j
jjtj||ftjy)Nro)ryrOrrassertNotEqualrLrrQrErwrxr,)rtrusted_hostr|s   r1test_makepasv_issue43285_security_enabled_defaultz>TestFTPClass.test_makepasv_issue43285_security_enabled_defaultsuCCD![[113ddkk::NN	P	  ,!5wGMMOrcjjfd}tjt5_jjjjjjjjdj|dddjjjjdj|tjt5_jjjjjjjjdjjdddjjjjdj|	tjt5_jjjjjjjjddjj_dddj!dt'j(djjjjdj|y#1swYGxYw#1swYmxYw#1swYxYw#tj"$r%}jt%|dYd}~d}~wwxYw)Ncjjy	jjdy#ttf$rYywxYw)NFnoopT)rOrrirrqr-sris_client_connectedz=TestFTPClass.test_with_statement.<locals>.is_client_connectedsK{{'
##F+X&

s6AArorrz550 error on quitzException not raisedr)rOrrMrNrxrPrLrr|rirvrYrrLryrMrrkrtimesleep)rrrs`  rtest_with_statementz TestFTPClass.test_with_statementsY	ZZ
(	3DKKK 0 0$++2B2BCKK'OO/12	3	
55GGP,./ZZ
(	DKKK 0 0$++2B2BCKK'KK		
55GGP,./	.G,
Q##DKK$4$4dkk6F6FG##F+=P,,:
Q
II,-	

355GGP,./=	3	3		
Q
Q  	<SX':;;	<sJA;K;A?L,L!BLL!;LLLL!!M4MMc"|jjtj}	|jj	|j
j|j
jt|f|j|jjjd||jjy#t$r7}|jtjk(r|jd|zd}~wwxYw)N)source_addressrBcouldn't bind to port %d)rOrrfind_unused_portrPrLrr|rrYrrrr
EADDRINUSEskipTest)rr|es   rtest_source_addressz TestFTPClass.test_source_addresss--/	KK 0 0$++2B2B04d|
 
=T[[--99;A>EKK	ww%***

84?@	sBC	D2D		Dctj}t|f|j_	|jjd5}|j
|jd|dddy#1swYyxYw#t$r7}|jtjk(r|jd|zd}~wwxYw)NrsrBr)rrrrOrtransfercmdrYrrrrr)rr|rrs    r&test_source_address_passive_connectionz3TestFTPClass.test_source_address_passive_connection$s--/&*D\"	((0
>D  !1!1!3A!6=
>
>
>	ww%***

84?@	s5B$A5,B5A>:B>B	C
2B<<Cc|jtjdd|jtjdd|jtjdd|jtjdd|jtjtjd|jtjdd	|jtjd
d	y)Nz257 "/foo/bar"z/foo/barz257 "/foo/bar" createdz257 ""rz257 "" createdz250 "/foo/bar"z257 "/foo/b""ar"z	/foo/b"arz257 "/foo/b""ar" created)rYrMparse257rgror-s r
test_parse257zTestFTPClass.test_parse257/s)9:JG)ABJO2B7)9:B?&,,foo?OP	
);<kJ)CDkRrc|jtj|jjd|jj
zdzy)Nrr)rgrMrprOrimaxliner-s rtest_line_too_longzTestFTPClass.test_line_too_long;s9&,,(;(; 3 33a7	9rc|jjd|jjdzzg}|jtj
|jjd|jy)NzSETLONGRETR %drr)rOrir$rgrMrprrTrs  rtest_retrlines_too_longz$TestFTPClass.test_retrlines_too_long?sX,0C0Ca0GHI&,,++//	Jrctjd|jjzdz}|j	t
j|jjd|y)Nxrr)rrrOr$rgrMrpr)rrs  rtest_storlines_too_longz$TestFTPClass.test_storlines_too_longEsFJJtdkk111A56&,,(=(=vqIrc(ddg}|D]}|j|5|j|j||j||jj
|j
|j|j|jjd}|j|ddddtjt}|jt|j
y#1swY
xYw)Nzlatin-1rru/non-ascii dir ®ro)subTestrVrRrYrOrrrrrr]rMrNrxr)r	encodingsrnew_dirrOs     rtest_encoding_paramz TestFTPClass.test_encoding_paramIs(	!		@Hx0
@



H
-  4;;+?+?@$$&$$&##%++//*?@)>?
@
@		@G,)6??;
@
@sB&DD	N)-r:r;r<rrRrVr]r`rermrtrzr}rrrrrrrrrrrrrrrrrrrrrrr	r
rrrr"r%r'r*r/rrrrHrHs-@,-BQ
O4O#L
I
 &,(1
6AJ
HO KD
80t(Q	:P+0Z	
S9JJ<rrHzIPv6 not enabledc0eZdZdZdZdZdZdZdZy)TestIPv6Environmentc^ttdftjt|_|j
j
tjtt|_
|jj|j
j|j
jy)Nr)rrrK)rrrErrrLrrMrNrxrOrPrr|r-s rrRzTestIPv6Environment.setUp]sl$fa[(..>@	
jj;KLDKK,,dkk.>.>?rc|jj|jjd|_t	j
dyrTrUr-s rrVzTestIPv6Environment.tearDownerWrcl|j|jjtjyr)rYrOrrErr-s rtest_afzTestIPv6Environment.test_afls9rc|jj5|j|jjj
ddddy#1swYyxYw)Neprtrr-s rrz!TestIPv6Environment.test_makeportosJ
[[
!
!
#	(T[[99KK &
(	(	(	(rc|jj\}}tj||ft}|j|j
|jjjdy)Nroepsvrrs    rrz!TestIPv6Environment.test_makepasvtsW[[))+
d''tgF

55GGPrcfd}jjd|jjd|y)Ncfd}gjjd|jtdj	tt
jdj	t
y)Ncnj|jjjyrrrs rrzATestIPv6Environment.test_transfer.<locals>.retr.<locals>.callback|s"DKK,@,@ ABrrr)rOrrYrZr\rO)rr[rs @rrz/TestIPv6Environment.test_transfer.<locals>.retr{s]
CHKK""684S!23S^DRWWX.	:rTF)rOrx)rrs` r
test_transferz!TestIPv6Environment.test_transferzs8	;	
T"U#rN)	r:r;r<rRrVr5rrr=rrrr1r1Zs"@,:(
Qrr1zSSL not availableceZdZdZefdZy)TestTLS_FTPClassMixinzfRepeat TestFTPClass tests starting the TLS layer for both control
    and data connections first.
    cttdf||_|jjt	j
t||_|jj|jj|jj|jj|jjyrJ)
rFrrLrrMFTP_TLSrxrOrPrr|authprot_prQs  rrRzTestTLS_FTPClassMixin.setUps~($XFnnWxHDKK,,dkk.>.>?rN)r:r;r<r1rrRrrrr?r?s.rr?cbeZdZdZefdZdZdZdZdZ	dZ
dZd	Ze
d
ddZy
)TestTLS_FTPClasszSpecific TLS_FTP class tests.c.ttdf||_|jjt	j
t|_|jj|jj|jjy)Nrrro)rFrrLrrMrArxrOrPrr|rQs  rrRzTestTLS_FTPClass.setUps\($XFnnW5DKK,,dkk.>.>?rc|jj|jjd|_t	j
dyrTrUr-s rrVzTestTLS_FTPClass.tearDownrWrc|j|jjtj|jj|j
|jjtjyr)assertNotIsInstancerOrrr/rBrr-s rtest_control_connectionz(TestTLS_FTPClass.test_control_connectionsN  !1!13==Adkk..

>rc|jjd5}|j|tj|j|j
dtj|jjddd|j|jjd|jj|jjd5}|j|tj|j|j
dtj|jjddd|j|jjd|jj|jjd5}|j|tj|j|j
dtj|jjddd|j|jjdy#1swYxYw#1swYxYw#1swYNxYw)Nrsr"r))rOrrIrr/rYr$rr3rvoidresprCrprot_c)rrs  rtest_data_connectionz%TestTLS_FTPClass.test_data_connections
[[
$
$V
,	E$$T3==9TYYt_&--dkk.B.BC
E	E	
--/1HI	

[[
$
$V
,	E!!$

6
TYYt_&--dkk.B.BC
E		E	
--/1HI	

[[
$
$V
,	E$$T3==9TYYt_&--dkk.B.BC
E	E	
--/1HI-	E	E	E	E	E	Es&A)I,A)I%<A)I2I"%I/2I;c<|j|jjtj|jj|j
|jjtj|jjyr)rIrOrrr/rrr-s rrzTestTLS_FTPClass.test_logins^  !1!13==Adkk..

>rc|jj|jt|jjyr)rOrBrgrhr-s rtest_auth_issued_twicez'TestTLS_FTPClass.test_auth_issued_twices,*dkk&6&67rc|jjtjtj}d|_tj|_|jttjt||jttjt||jttjtt|tj|t|_|jj|jj |jj"|j%|jj&tj(|jj+|j-|jj&j.||j1|jj&tj(|jj3|jj5d5}|j-|j.||j1|tj(dddy#1swYyxYw)NF)keyfiler)certfiler)rTrSrrrprs)rOrrrPROTOCOL_TLS_CLIENTcheck_hostname	CERT_NONEverify_modergrrMrAr	rxrPrLrr|rIrr/rBassertIsrrrCrrctxrs   rtest_contextzTestTLS_FTPClass.test_contextsnnS445"--)V^^X"%		')V^^h"%		')V^^h"*C		9nnS'BDKK,,dkk.>.>?  !1!13==A

dkk&&..4dkk..

>
[[
$
$V
,	7MM$,,,!!$

6	7	7	7s+=I11I:c|jt|jj|jj	d|j|jjtj|jj|jt|jjjy)NT)secure)
rgrhrOcccrrrrr/r r-s rtest_ccczTestTLS_FTPClass.test_cccs{*dkkoo6&dkk..

>*dkk&6&6&=&=>rFzFIXME: bpo-32706c|jjtjtj}|j|jtj|j|jd|jttj|t|_|jj|jj |jj"|j%tj&5|jj)ddd|jj|jj |jj"|jj+|j%tj&5|jj-d5}	dddddd|jj|jjd|jj"|jj)|jj|jjd|jj"|jj+|jj-d5}	dddy#1swYxYw#1swY
xYw#1swYxYw#1swYyxYw)NTrUrs	localhost)rOrrrrVrYrY
CERT_REQUIREDrWload_verify_locationsCAFILErMrArxrPrLrr|rgCertificateErrorrBrCrr[s   rtest_check_hostnamez$TestTLS_FTPClass.test_check_hostnamesnnS445#*;*;<++T2!!&)nnS'B	
DKK,,dkk.>.>?


s33
4	KK		
DKK,,dkk.>.>?


s33
4	((0
D
		
K)9)9:K)9)9:
[[
$
$V
,			#		

				s<K<K2K%K2
K?K"%K/	*K22K<?LN)r:r;r<r1rrRrVrJrNrrQr]rarrhrrrrErEsN'-@,?
J4870?)*+rrEcBeZdZdZdZdZdZdZdZdZ	dZ
d	Zy
)TestTimeoutsctj|_tjtjtj
|_|jjdtj|j|_
tj|j|_
d|j_|jj|jj!|jj#t$j&j|_|jt$j&_
y)Nr)targetT)rrevtrErrrrr	bind_portr|rrL
server_threadrrrclearrMrNold_portr-s rrRzTestTimeouts.setUps??$MM&..&2D2DE			R !++DII6	&--T[[A$(!  "




))

rc|jtj_|jjd|_yr)rqrMrNr|ror\r-s rrVzTestTimeouts.tearDown#s+--

!!rc|jj|jj	|jj	\}}|jd|j
tj|jj|j|jjy#t$rY&wxYw#|jjwxYw)Ns
1 Hola mundo
)rrrmrrsendallshutdownrESHUT_WRr,TimeoutErrorrs   rrLzTestTimeouts.server)s
	
			))+JD$
LL*+MM&..)HHLLNJJLIIOO		
IIOOs*CAC	CCCCC3c|jtjtjd	t	j
t}tjd|j|jjd|jj|jy#tjdwxYwNr)
assertIsNonerEgetdefaulttimeoutsetdefaulttimeoutrMrNrrYr
gettimeoutrmrr,rftps  rtestTimeoutDefaultzTestTimeouts.testTimeoutDefault>s&2245  $	+**T"C$$T*,,.3

		
$$T*sB==Cc|jtjtjd	t	j
td}tjd|j|jj|jj|jy#tjdwxYwNrro)rzrEr{r|rMrNrrr}rmrr,r~s  rtestTimeoutNonezTestTimeouts.testTimeoutNoneJs&2245  $	+**T40C$$T*#((--/0

		
$$T*sB>>Ccltjtd}|j|jjd|jj|j|jt5tjtddddy#1swYyxYw)Nrror)rMrNrrYrr}rmrr,rgrhr~s  rtestTimeoutValuezTestTimeouts.testTimeoutValueVsxjjr*,,.3

		

z
*	(JJtQ'	(	(	(sB**B3ctj}|jtd|j	|j
j
d|jj|jyr
rMrNrPrrYrr}rmrr,r~s  rtestTimeoutConnectzTestTimeouts.testTimeoutConnectasPjjlD"%,,.3

		rctjd}|jt|j	|j
j
d|jj|jyrrr~s  rtestTimeoutDifferentOrderz&TestTimeouts.testTimeoutDifferentOrderhsOjj$D,,.3

		rctj}d|_|jt|j|jjd|jj|jyry)rMrNrprPrrYrr}rmrr,r~s  rtestTimeoutDirectAccessz$TestTimeouts.testTimeoutDirectAccessosSjjlD,,.3

		rN)r:r;r<rRrVrLrrrrrrrrrrjrjs/$"*

	(rrjceZdZdZy)MiscTestCasecDhd}tj|t|y)N>
CRLFtestrpftpcpB_CRLFMAXLINEMSG_OOBFTP_PORTparse150parse227parse229r!
print_line)not_exported)rcheck__all__rM)rrs  rtest__all__zMiscTestCase.test__all__ys	T6ErN)r:r;r<rrrrrrxsFrrcttj}tjtjg|yr)rthreading_setupunittestaddModuleCleanupthreading_cleanup)thread_infos rsetUpModulers*"224K.@@O;Or__main__);r1rMrErrosrrrrImportErrorrrrrtest.supportrrrr	r
test.support.socket_helperrrrequires_working_socketLOOPBACK_TIMEOUTrxrrOrrrrrrr@rrrrr\dirname__file__r	rfrr3r7rFrHIPV6_ENABLEDr1r?rErjrrr:mainrrr<module>rs3$

		*)&(!!3 t,

"
"
t#&??	4	4	K	&	 h)) Dn(h))n(b0 X(()*:*:0 f?ww||BGGOOH5~FH
WW\\"''//(3^
DFf3++f3R)m_)%Fm_%FP&^&n<8n<bM&&(:;*(*<*ZC$%L&C$%wxw&wtb8bJF8FP
zHMMOm#
CsHHH