a ze@s&dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z z ddl Z Wne yvdZ Yn0ddl m Z mZddlmZddlmZddlmZmZejZdZdd d Zd Zd Zd ZGd ddejZGdddejZGdddej ej!Z"e durej#$ej#%e&dZ'ej#$ej#%e&dZ(Gdddej Z)Gddde)eZ*Gddde)eZ+Gddde"Z,Gddde Z-eej.dGd d!d!e Z/ee d"Gd#d$d$e-Z0ee d"Gd%d&d&e Z1Gd'd(d(e Z2Gd)d*d*e Z3d+d,Z4e5d-kr"e 6dS).zTest script for ftplib module.N)TestCase skipUnless)support) socket_helper)HOSTHOSTv6utf-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 cs@eZdZdZddZddZddZfdd Zd d ZZ S) DummyDTPHandlerFcCs(tj||||_d|j_|j|_dS)N)asynchat async_chat__init__ baseclasslast_received_dataencodingselfconnrrD/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_ftplib.pyr 7szDummyDTPHandler.__init__cCs(|d|jd}|jj|7_dS)Nreplace)recvdecoderrr)rZnew_datarrr handle_read=szDummyDTPHandler.handle_readcCs$|js |jd|d|_dS)N226 transfer completeT)dtp_conn_closedrpushcloserrrr handle_closeAs zDummyDTPHandler.handle_closecsD|jjdur|jj}d|j_|s(|Stt|||jdSN)r next_dataclose_when_donesuperr rencoder)rZwhat __class__rrrJs  zDummyDTPHandler.pushcCstdSr! Exceptionrrrr handle_errorRszDummyDTPHandler.handle_error) __name__ __module__ __qualname__rr rr rr* __classcell__rrr&rr 4s  r c@seZdZeZefddZddZddZddZ d d Z d d Z d dZ ddZ ddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Z d7d8Z!d9d:Z"d;d<Z#d=d>Z$d?d@Z%dAdBZ&dCS)DDummyFTPHandlercCsvtj|||jtjtjd|dg|_d|_ d|_ d|_ d|_ d|_ d|_t|_|d||_d|_dS)N r 220 welcomez252.253.254.255)r r r socket setsockopt SOL_SOCKET SO_OOBINLINEZset_terminator in_bufferdtplast_received_cmdr next_responser"rest RETR_DATAnext_retr_datarrfake_pasv_server_iprrrrrrr Zs  zDummyFTPHandler.__init__cCs|j|dSr!)r7appendrdatarrrcollect_incoming_datansz%DummyFTPHandler.collect_incoming_datacCsd|j|j}g|_|jr2||jd|_|dd}||_| d}|dkrn||dd}nd}t |d|rt |d|}||n|d|dS) Nr  rr0Zcmd_z 550 command "%s" not understood.) joinr7rrr:rsplitlowerr9findhasattrgetattr)rlinecmdspaceargmethodrrrfound_terminatorqs   z DummyFTPHandler.found_terminatorcCstdSr!r(rrrrr*szDummyFTPHandler.handle_errorcCstj|||jddS)Nr1)r r rr%rrArrrrszDummyFTPHandler.pushcCslttt|d}dt|dd}|dd|d}tj||ftd}|j||d|_ | ddS) N,z %d.%d.%d.%dtimeoutr&200 active data connection established) listmapintrHtupler3create_connectionTIMEOUT dtp_handlerr8r)rrPaddripportsrrrcmd_ports zDummyFTPHandler.cmd_portc Cst|jddfx}|t|d}|j}|dd}|d}|d}|d|||f|\}}|j ||d|_ Wdn1s0YdS)Nrr0.rSrUz$227 entering passive mode (%s,%d,%d)rY) r3 create_server getsockname settimeoutr`r>rracceptrar8) rrPsockrdrcZp1Zp2rrbrrrcmd_pasvs   zDummyFTPHandler.cmd_pasvcCsT||ddd\}}}t|}tj||ftd}|j||d|_|ddS)Nrr0rFrWrYrZ)rHr]r3r_r`rar8r)rrPafrcrdrerrrcmd_eprts zDummyFTPHandler.cmd_eprtcCstj|jddftjdP}|t|d}|d||\}}|j||d|_ Wdn1st0YdS)Nr)familyr0z+229 entering extended passive mode (|||%d|)rY) r3rhriAF_INET6rjr`rrkrar8)rrPrlrdrrbrrrcmd_epsvs   zDummyFTPHandler.cmd_epsvcCs||dSr!rrrPrrrcmd_echoszDummyFTPHandler.cmd_echocCs|ddS)Nz 200 noop okrsrtrrrcmd_noopszDummyFTPHandler.cmd_noopcCs|ddS)Nz331 username okrsrtrrrcmd_userszDummyFTPHandler.cmd_usercCs|ddS)Nz230 password okrsrtrrrcmd_passszDummyFTPHandler.cmd_passcCs|ddS)Nz 230 acct okrsrtrrrcmd_acctszDummyFTPHandler.cmd_acctcCs|ddS)Nz 350 rnfr okrsrtrrrcmd_rnfrszDummyFTPHandler.cmd_rnfrcCs|ddS)Nz 250 rnto okrsrtrrrcmd_rntoszDummyFTPHandler.cmd_rntocCs|ddS)Nz 250 dele okrsrtrrrcmd_deleszDummyFTPHandler.cmd_delecCs|ddS)N 250 cwd okrsrtrrrcmd_cwdszDummyFTPHandler.cmd_cwdcCs|ddS)Nz250 1000rsrtrrrcmd_sizeszDummyFTPHandler.cmd_sizecCs|d|dS)Nz257 "%s"rsrtrrrcmd_mkdszDummyFTPHandler.cmd_mkdcCs|ddS)Nz 250 rmd okrsrtrrrcmd_rmdszDummyFTPHandler.cmd_rmdcCs|ddS)Nz 257 "pwd ok"rsrtrrrcmd_pwdszDummyFTPHandler.cmd_pwdcCs|ddS)Nz 200 type okrsrtrrrcmd_typeszDummyFTPHandler.cmd_typecCs|d|dSNz 221 quit ok)rrrtrrrcmd_quits zDummyFTPHandler.cmd_quitcCs|ddS)Nz 226 abor okrsrtrrrcmd_aborszDummyFTPHandler.cmd_aborcCs|ddS)Nz 125 stor okrsrtrrrcmd_storszDummyFTPHandler.cmd_storcCs||_|ddS)Nz 350 rest ok)r;rrtrrrcmd_restszDummyFTPHandler.cmd_restcCsN|d|jdur t|j}nd}|j|j|d|jd|_dS)Nz 125 retr okr)rr;r]r8r=r#)rrPoffsetrrrcmd_retrs    zDummyFTPHandler.cmd_retrcCs$|d|jt|jdS)Nz 125 list ok)rr8 LIST_DATAr#rtrrrcmd_lists  zDummyFTPHandler.cmd_listcCs$|d|jt|jdS)Nz 125 nlst ok)rr8 NLST_DATAr#rtrrrcmd_nlsts  zDummyFTPHandler.cmd_nlstcCs|ddS)Nz 200 opts okrsrtrrrcmd_optsszDummyFTPHandler.cmd_optscCs$|d|jt|jdS)Nz 125 mlsd ok)rr8 MLSD_DATAr#rtrrrcmd_mlsds  zDummyFTPHandler.cmd_mlsdcCsdt||_|ddS)Nxz125 setlongretr ok)r]r=rrtrrrcmd_setlongretrszDummyFTPHandler.cmd_setlongretrN)'r+r,r-r raDEFAULT_ENCODINGr rCrRr*rrfrmrorrrurvrwrxryrzr{r|r~rrrrrrrrrrrrrrrrrrrr/VsD    r/c@s\eZdZeZejefddZddZ ddZ ddZ d d Z d d Z e Zd dZddZdS)DummyFTPServercCsztj|tj|d|_||tj| || dd|_ t |_ |jdd\|_|_d|_||_dS)NTrVF) threadingThreadr asyncore dispatcherdaemonZ create_socketr3 SOCK_STREAMbindlistenactiveLock active_lockrihostrdhandler_instancer)raddressrnrrrrr s     zDummyFTPServer.__init__cCs.|jr Jt|_tj||jdSr!)rrEvent_DummyFTPServer__flagrstartwaitrrrrrs   zDummyFTPServer.startcCsPd|_|j|jr@tjr@|jtjddd|jqtj dddS)NT皙?r0)rXcountZ ignore_all) rrsetrZ socket_mapracquireZlooprelease close_allrrrrruns    zDummyFTPServer.runcCs|js Jd|_|dS)NF)rrGrrrrstop's zDummyFTPServer.stopcCs|j||jd|_dS)Nr)handlerrrrrrbrrrhandle_accepted,szDummyFTPServer.handle_acceptedcCs |dSr!)rrrrrhandle_connect/szDummyFTPServer.handle_connectcCsdSNrrrrrrwritable3szDummyFTPServer.writablecCstdSr!r(rrrrr*6szDummyFTPServer.handle_errorN)r+r,r-r/rr3AF_INETrr rrrrrrrr*rrrrrs  rz keycert3.pemz pycacert.pemcs|eZdZdZdZdZddZddZfddZfd d Z fd d Z fd dZ fddZ ddZ fddZZS) SSLConnectionz3An asyncore.dispatcher subclass supporting TLS/SSL.FcCsBt}|t|j|jdddd}|||d|_dS)NFT)Zsuppress_ragged_eofsZ server_sideZdo_handshake_on_connect) ssl SSLContextZload_cert_chainCERTFILEZ wrap_socketr3Z del_channelZ set_socket_ssl_accepting)rcontextr3rrrsecure_connectionEs  zSSLConnection.secure_connectionc Csz|jWntjy}zx|jdtjtjfvrDWYd}~dS|jdtjkrh|WYd}~Sd|jdvr|WYd}~SWYd}~nVd}~0t y}z0|jdt j kr|WYd}~SWYd}~nd}~00d|_ dS)NrZSSLV3_ALERT_BAD_CERTIFICATEr0F) r3Z do_handshakerSSLErrorargsSSL_ERROR_WANT_READSSL_ERROR_WANT_WRITE SSL_ERROR_EOFr OSErrorerrnoZ ECONNABORTEDrrerrrrr_do_ssl_handshakePs  *zSSLConnection._do_ssl_handshakec sd|_z|j|_WnZtjy`}z0|jdtjtjfvrLWYd}~dSWYd}~nd}~0typYn0d|_t |dddurt t | ndS)NTrF_ccc) _ssl_closingr3unwraprrrrrrrLr$rrrr&rr_do_ssl_shutdowncs " zSSLConnection._do_ssl_shutdowncs2|jr|n|jr |ntt|dSr!)rrrrr$rhandle_read_eventrr&rrrws   zSSLConnection.handle_read_eventcs2|jr|n|jr |ntt|dSr!)rrrrr$rhandle_write_eventrr&rrrs   z SSLConnection.handle_write_eventc slztt||WStjyf}z:|jdtjtjtjtj fvrPWYd}~dSWYd}~n d}~00dSr) r$rsendrrrrSSL_ERROR_ZERO_RETURNrr)rrBrr&rrrszSSLConnection.sendc sztt||WStjy}z^|jdtjtjfvrHWYd}~dS|jdtjtj fvrt| WYd}~dSWYd}~n d}~00dS)NrrD) r$rrrrrrrrrr )rZ buffer_sizerr&rrrs zSSLConnection.recvcCstdSr!r(rrrrr*szSSLConnection.handle_errorcs6t|jtjr$|jjdur$|ntt|dSr!) isinstancer3r SSLSocketZ_sslobjrr$rrrr&rrrs   zSSLConnection.close)r+r,r-__doc__rrrrrrrrrr*rr.rrr&rr?s     rc@seZdZdZddZdS)DummyTLS_DTPHandlerz.A DummyDTPHandler subclass supporting TLS/SSL.cCs"t||||jjr|dSr!)r r rsecure_data_channelrrrrrr szDummyTLS_DTPHandler.__init__N)r+r,r-rr rrrrrsrc@s@eZdZdZeZefddZddZddZ dd Z d d Z d S) DummyTLS_FTPHandlerz.A DummyFTPHandler subclass supporting TLS/SSL.cCs tj|||dd|_d|_dS)NrF)r/r rrr?rrrr szDummyTLS_FTPHandler.__init__cCs|d|dS)zSet up secure control channel.z234 AUTH TLS successfulN)rrrrMrrrcmd_auths zDummyTLS_FTPHandler.cmd_authcCs|dd|_|dS)Nz 220 Reverting back to clear-textT)rrrrrrrcmd_cccs zDummyTLS_FTPHandler.cmd_ccccCs|ddS)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.Nrsrrrrcmd_pbszszDummyTLS_FTPHandler.cmd_pbszcCsJ|}|dkr"|dd|_n$|dkr<|dd|_n |ddS) zSetup un/secure data channel.Cz200 Protection set to ClearFPz200 Protection set to PrivateTz(502 Unrecognized PROT type (use C or P).N)upperrr)rrMrPrrrcmd_prots  zDummyTLS_FTPHandler.cmd_protN) r+r,r-rrrarr rrrrrrrrrs rc@seZdZeZdS)DummyTLS_FTPServerN)r+r,r-rrrrrrrsrc@sXeZdZefddZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Z d;d<Z!d=d>Z"d?d@Z#dAdBZ$dCdDZ%dEdFZ&dGdHZ'dIdJZ(dKdLZ)dMdNZ*dOdPZ+dQdRZ,dSS)T TestFTPClasscCsFttdf|d|_|jtjt|d|_|j|jj |jj dSNrrrXr) rrserverrftplibFTPr`clientconnectrrdrrrrrsetUps zTestFTPClass.setUpcCs*|j|jd|_tjdddSNTrrrrrrrrrrrtearDowns  zTestFTPClass.tearDowncCs$|t|t||||dSr!) assertEquallen)rreceivedZexpectedrrr check_dataszTestFTPClass.check_datacCs||jddS)Nr2)rrZ getwelcomerrrrtest_getwelcomeszTestFTPClass.test_getwelcomecCsL||jdtd||jdtd||jdtddS)Nfooz pass 12345z pass *****z PASS 12345z PASS *****)rrZsanitizereprrrrr test_sanitizeszTestFTPClass.test_sanitizecCs|t|jjd|t|jjd|t|jjd|tj|jjd|tj|jjd|tj|jjd|tj|jjd|tj|jjddS) Nz echo 40 0z echo 40 0z echo 40 0zecho 400zecho 499zecho 500zecho 599zecho 999) assertRaises ValueErrorrsendcmdr error_temp error_perm error_protorrrrtest_exceptionsszTestFTPClass.test_exceptionsc CsLtjtjtjtjtjttf}|D]&}z |dWq tjyDYq 0q dS)Nz(exception not included in all_errors set) r error_replyrrrErrorrEOFErrorZ all_errors)r exceptionsrrrrtest_all_errorss   zTestFTPClass.test_all_errorscCsF||jj|jd||jj|jd||jjdS)NTF) assertTruerZ passiveserverset_pasv assertFalserrrr test_set_pasv s   zTestFTPClass.test_set_pasvcCsD|jd|jd|tj|jjd|tj|jjddS)Nzecho 200zecho 299zecho 199zecho 300)rZvoidcmdrrrrrrr test_voidcmds  zTestFTPClass.test_voidcmdcCs|jdSr!)rloginrrrr test_loginszTestFTPClass.test_logincCs|jddS)Npasswd)rZacctrrrr test_acctszTestFTPClass.test_acctcCs2|jddd|jj_|tj|jjdddS)NabZ200)rrenamerrr:rrrrrrr test_rename s zTestFTPClass.test_renamecCs.|jdd|jj_|tj|jjddS)NrZ199)rdeleterrr:rrrrrrr test_delete%s  zTestFTPClass.test_deletecCs|jddSNr)rsizerrrr test_size*szTestFTPClass.test_sizecCs|jd}||ddS)N/foo)rmkdrrdirrrrtest_mkd-s zTestFTPClass.test_mkdcCs|jddSr)rZrmdrrrrtest_rmd1szTestFTPClass.test_rmdcCs|jd}||ddS)Nrr})rcwdrrrrrtest_cwd4s zTestFTPClass.test_cwdcCs|j}||ddS)Nzpwd ok)rpwdrrrrrtest_pwd8s zTestFTPClass.test_pwdcCs&||jd||jjddSr)rrquitrlrrrr test_quit<szTestFTPClass.test_quitcCs|jdSr!)rabortrrrr test_abortAszTestFTPClass.test_abortcs6fdd}gjd|dtdS)Ncs|jjdSr!r@rrrrBrrrrcallbackEsz.TestFTPClass.test_retrbinary..callbackretrr r retrbinaryrrGr<)rr&rr%rtest_retrbinaryDszTestFTPClass.test_retrbinarycsLfdd}dD]4}gjjd||ddt|dqdS)Ncs|jjdSr!r#r$r%rrr&Lsz3TestFTPClass.test_retrbinary_rest..callback)r r'r;r r()rr&r;rr%rtest_retrbinary_restKs z!TestFTPClass.test_retrbinary_restcCs2g}|jd|j|d|tdddS)Nr'r  )r retrlinesr@rrGr<rrrrrrtest_retrlinesSszTestFTPClass.test_retrlinescsjtt|jj}|jd|||jj j tg| d|jjd|fddd| dS)Nstorrcs dSr!r@rflagrr_rDz.TestFTPClass.test_storbinary..r&) ioBytesIOr<r%rr storbinaryrrrrseekrrfrr6rtest_storbinaryXs zTestFTPClass.test_storbinarycCs`tdd|jj}t|}dD]6}|d|jjd||d| |j j j t |q$dS)Nr/ )Z30rr3r-)r<rr%rrr:r;r=r<rrrr;str)rrBr?rrrrtest_storbinary_restbs   z!TestFTPClass.test_storbinary_restcstdd|jj}t|}|jd|||j j j tg| d|jjd|fddd| ttdd}tjd tfd d $|t|jjd|Wdn1s0YdS) Nr/rAr3rzstor foocs dSr!r4r5r6rrr8rrDz-TestFTPClass.test_storlines..r9r T)quiet)r<rr%rrr:r; storlinesrrrrr=rStringIOrZcheck_warnings BytesWarningr TypeError)rrBr?rr6rtest_storlinesjs   zTestFTPClass.test_storlinescCs.|j||jtddddS)Nr/rF)rZnlstrrrHrrrr test_nlstzs zTestFTPClass.test_nlstcs6g|jfdd|dtdddS)Ncs |Sr!r4r5lrrr8rDz'TestFTPClass.test_dir..r r/)rrrrGrrrrrMrtest_dir~szTestFTPClass.test_dircstjtjjddtjjdddgdtj}|D]N\}}|t|t|d|d|d|qJfdd d*fd d }|d |d dd|ddd|ddd|ddd|ddd|ddd|ddd|ddd|dd d|d!d"d|d#d$d|d%d&dd'tj\}}|D]}| qld( t tjd(jD]} d)|qdS)+N/)pathrtype)rQfactspermuniquecs|jj_dSr!)rrr"r$rrrset_datasz(TestFTPClass.test_mlsd..set_datacs|dur dn|}|durdn|}|dur,dn|}|dur.test_entryz)type=type;perm=perm;unique=unique; name z*type=ty=pe;perm=perm;unique=unique; name zty=pe)rRz*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)rWz*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 r zunexpected data %s)NNNN) r[rrYassertIsInstancerCdictrZassertInrXislowerr StopIterationfail)rZlsrWrSr\rZrrr[r test_mlsdsF                    zTestFTPClass.test_mlsdcCs@|j"||jjjdWdn1s20YdS)NrdrZmakeportrrrr9rrrr test_makeports  zTestFTPClass.test_makeportcCs>|j\}}tj||ftd}|||jjj ddS)NrWZpasv rmakepasvr3r_r`rrrrr9rrrdrrrr test_makepasvszTestFTPClass.test_makepasvcCsNd|j_|j\}}|||jjjtj|jj d|ft d dS)z/Test the opt-in to the old vulnerable behavior.TrrWN) rtrust_server_pasv_ipv4_addressrfrrrr>r3r_rl getpeernamer`r)rZbad_hostrdrrr*test_makepasv_issue43285_security_disableds z7TestFTPClass.test_makepasv_issue43285_security_disabledcCsH||jj|j\}}|||jjjtj ||ft d dS)NrW) rrrirfZassertNotEqualrrr>r3r_r`r)rZ trusted_hostrdrrr1test_makepasv_issue43285_security_enabled_defaults  z>TestFTPClass.test_makepasv_issue43285_security_enabled_defaultc sjfdd}tjtd@_jjjjjj d |Wdn1sh0Y jj j d|tjtd>_jjjjjj djWdn1s0Y jj j d|z`tjtd>_jjjjjj ddjj _Wdn1s\0YWn8tjy}z t|dWYd}~nd}~00dtd jj j d|dS) Nc s>jjdurdSzjdWnttfy8YdS0dS)NFnoopT)rrlrrrrrrris_client_connecteds z=TestFTPClass.test_with_statement..is_client_connectedrWrmrz550 error on quitzException not raisedr)rrrrr`rrrrdrrrrr9rr:rrCratimesleep)rrnrrrrtest_with_statements2   *  (  .&  z TestFTPClass.test_with_statementc Cs|jt}zD|jj|jj|jjt|fd| |jj d||jWn@t y}z(|j t jkr|d|WYd}~n d}~00dS)N)source_addressr0couldn't bind to port %d)rrrfind_unused_portrrrrdrrrlrirr EADDRINUSEskipTest)rrderrrtest_source_address s  z TestFTPClass.test_source_addressc Cst}t|f|j_zD|jd$}||d|Wdn1sL0YWn@ty}z(|j t j kr| d|WYd}~n d}~00dS)Nr[r0rs) rrtrrrr transfercmdrrirrrurv)rrdrlrwrrr&test_source_address_passive_connections 6 z3TestFTPClass.test_source_address_passive_connectioncCs|tdd|tdd|tdd|tdd|tjtjd|tdd |td d dS) Nz257 "/foo/bar"z/foo/barz257 "/foo/bar" createdz257 ""r z257 "" createdz250 "/foo/bar"z257 "/foo/b""ar"z /foo/b"arz257 "/foo/b""ar" created)rrparse257rrrrrr test_parse257#szTestFTPClass.test_parse257cCs$|tj|jjd|jjddS)Nrr)rrrrrmaxlinerrrrtest_line_too_long/szTestFTPClass.test_line_too_longcCs8|jd|jjdg}|tj|jjd|jdS)NzSETLONGRETR %drr')rrr}rrrr0r@r1rrrtest_retrlines_too_long3s  z$TestFTPClass.test_retrlines_too_longcCs0td|jjd}|tj|jjd|dS)Nxrr3)r:r;rr}rrrrGr>rrrtest_storlines_too_long9sz$TestFTPClass.test_storlines_too_longc Csddg}|D]}|j|dd||j|d|||jj||||j d}| |dWdq 1s0Yq t j t d}|t|jdS)Nzlatin-1rru/non-ascii dir ®rW)ZsubTestrrrrrr*r@r2rrrrr`r)r encodingsrZnew_dirrrrrtest_encoding_param=s  , z TestFTPClass.test_encoding_paramN)-r+r,r-rrrrrrrrrrr r rrrrrrrr r"r*r.r2r@rErKrLrOrbrdrhrkrlrqrxrzr|r~rrrrrrrrsR    :  -   rzIPv6 not enabledc@s<eZdZddZddZddZddZd d Zd d Zd S)TestIPv6EnvironmentcCsJttdftjtd|_|jtjt td|_ |j |jj |jj dS)Nr)rnrr)rrr3rqrrrrrr`rrrrdrrrrrQs zTestIPv6Environment.setUpcCs*|j|jd|_tjdddSrrrrrrrYs  zTestIPv6Environment.tearDowncCs||jjtjdSr!)rrrnr3rqrrrrtest_af`szTestIPv6Environment.test_afcCs@|j"||jjjdWdn1s20YdS)NZeprtrcrrrrrdcs  z!TestIPv6Environment.test_makeportcCs>|j\}}tj||ftd}|||jjj ddS)NrWZepsvrergrrrrhhsz!TestIPv6Environment.test_makepasvcs4fdd}jd|jd|dS)NcsPfdd}gjd|tdttdtdS)Ncs|jjdSr!r#r$r%rrr&pszATestIPv6Environment.test_transfer..retr..callbackr'r )rr)rrrGr<r9r)rrr'os z/TestIPv6Environment.test_transfer..retrTF)rr)rr'rrr test_transferns    z!TestIPv6Environment.test_transferN) r+r,r-rrrrdrhrrrrrrNs rzSSL not availablec@seZdZdZefddZdS)TestTLS_FTPClassMixinzfRepeat TestFTPClass tests starting the TLS layer for both control and data connections first. cCsZttdf|d|_|jtjt|d|_|j|jj |jj |j |j dSr) rrrrrFTP_TLSr`rrrrdauthprot_prrrrrs   zTestTLS_FTPClassMixin.setUpN)r+r,r-rrrrrrrr|src@sfeZdZdZefddZddZddZdd Zd d Z d d Z ddZ ddZ e ddddZdS)TestTLS_FTPClasszSpecific TLS_FTP class tests.cCsDttdf|d|_|jtjtd|_|j|jj |jj dS)NrrrW) rrrrrrr`rrrrdrrrrrs zTestTLS_FTPClass.setUpcCs*|j|jd|_tjdddSrrrrrrrs  zTestTLS_FTPClass.tearDowncCs2||jjtj|j||jjtjdSr!)assertNotIsInstancerrlrrrr]rrrrtest_control_connections z(TestTLS_FTPClass.test_control_connectioncCsR|jd:}||tj||dt|jj Wdn1sL0Y||j d|j |jd:}| |tj||dt|jj Wdn1s0Y||j d|j |jd:}||tj||dt|jj Wdn1s20Y||j ddS)Nr[rr)rryrrrrrrr%rZvoidresprr]Zprot_c)rrlrrrtest_data_connections(  "   "   $z%TestTLS_FTPClass.test_data_connectioncCs<||jjtj|j||jjtj|jdSr!)rrrlrrrr]rrrrr s zTestTLS_FTPClass.test_logincCs|j|t|jjdSr!)rrrrrrrrtest_auth_issued_twices z'TestTLS_FTPClass.test_auth_issued_twicecCs |jttj}d|_tj|_|jt t j t |d|jt t j t |d|jt t j t t |dt j |t d|_|j|jj|jj||jjtj|j||jjj|||jjtj|j|jd,}||j|||tjWdn1s0YdS)NF)keyfiler)certfiler)rrrrrXr[)rrrrPROTOCOL_TLS_CLIENTcheck_hostnameZ CERT_NONE verify_moderrrrrr`rrrrdrrlrrZassertIsrr]rryrctxrlrrr test_contexts.       zTestTLS_FTPClass.test_contextcCsP|t|jj|jjdd||jjtj|j|t|jjj dS)NT)Zsecure) rrrcccrr]rlrrrrrrrtest_cccs  zTestTLS_FTPClass.test_cccFzFIXME: bpo-32706c Cs|jttj}||jtj||jd| t t j |t d|_|j|jj|jj|tj|jWdn1s0Y|j|jj|jj|j|tj<|jd}Wdn1s0YWdn1s 0Y|j|jd|jj|j|j|jd|jj|j|jd}Wdn1s0YdS)NTrr[ localhost)rrrrrrrZ CERT_REQUIREDrZload_verify_locationsCAFILErrr`rrrrdrZCertificateErrorrrryrrrrtest_check_hostnames,   ( >    z$TestTLS_FTPClass.test_check_hostnameN)r+r,r-rrrrrrr rrrrrrrrrrs rc@sTeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS) TestTimeoutscCst|_ttjtj|_|jdt |j|_ tj |j d|_ d|j _|j |j|jtjj |_|j tj_ dS)Nr,)targetT)rrevtr3rrrlrjrZ bind_portrdrr server_threadrrrclearrrold_portrrrrr s      zTestTimeouts.setUpcCs|jtj_|jd|_dSr!)rrrrdrrGrrrrrs  zTestTimeouts.tearDowncCs|j|jz^z|j\}}Wntjy<Yn*0|d|tj |j| W|j n |j 0dS)Ns 1 Hola mundo ) rlrrrrkr3rXsendallshutdownSHUT_WRrrrrrrs      zTestTimeouts.serverc Csf|ttdztt}Wtdn td0||j d|j | dSNrB) assertIsNoner3getdefaulttimeoutsetdefaulttimeoutrrrrrl gettimeoutrrrrftprrrtestTimeoutDefault2s   zTestTimeouts.testTimeoutDefaultc Csh|ttdztjtdd}Wtdn td0||j|j | dSNrBrW) rr3rrrrrrlrrrrrrrrtestTimeoutNone>s  zTestTimeouts.testTimeoutNonecCsntjtdd}||jd|j|| t tjtddWdn1s`0YdS)NrBrWr) rrrrrlrrrrrrrrrrtestTimeoutValueJs   zTestTimeouts.testTimeoutValuecCs>t}|jtdd||jd|j| dSr rrrrrrlrrrrrrrrtestTimeoutConnectUs  zTestTimeouts.testTimeoutConnectcCs>tjdd}|t||jd|j| dSrrrrrrtestTimeoutDifferentOrder\s    z&TestTimeouts.testTimeoutDifferentOrdercCs@t}d|_|t||jd|j | dSr) rrrXrrrrlrrrrrrrrtestTimeoutDirectAccesscs   z$TestTimeouts.testTimeoutDirectAccessN) r+r,r-rrrrrrrrrrrrrrs   rc@seZdZddZdS) MiscTestCasecCshd}tj|t|ddS)N> MSG_OOBZMAXLINEZparse150Zparse229ZftpcpZ print_linetestZB_CRLFZparse227ZCRLFrZFTP_PORTr{) blacklist)rZ check__all__r)rrrrr test__all__mszMiscTestCase.test__all__N)r+r,r-rrrrrrlsrcCs t}tjtjg|RdSr!)rZthreading_setupunittestZaddModuleCleanupZthreading_cleanup) thread_inforrr setUpModuletsr__main__)7rrrr r3r:rosrrorr ImportErrorrrrrZ test.supportrZtest.support.socket_helperrrZLOOPBACK_TIMEOUTr`rr<rrrr r r/rrrrQrGdirname__file__rrrrrrrZ IPV6_ENABLEDrrrrrrr+mainrrrrsb      "23 i (s -ze