asda?‰PNG  IHDR ? f ??C1 sRGB ??é gAMA ±? üa pHYs ? ??o¨d GIDATx^íüL”÷e÷Y?a?("Bh?_ò???¢§?q5k?*:t0A-o??¥]VkJ¢M??f?±8\k2íll£1]q?ù???T a bYh@s.dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z z ddl Z Wne yvdZ Yn0ddl m Z mZddlmZddlmZddlmZmZejZdZdd d Zd Zd Zd Zd dZGdddejZGdddejZ Gdddej!ej"Z#e durej$%ej$&e'dZ(ej$%ej$&e'dZ)Gdddej!Z*Gddde*eZ+Gddde*e Z,Gddde#Z-Gdd d e Z.eej/d!Gd"d#d#e Z0ee d$Gd%d&d&e.Z1ee d$Gd'd(d(e Z2Gd)d*d*e Z3Gd+d,d,e Z4d-d.Z5e6d/kr*e 7dS)0zTest 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 cCsdSNr r r ,/usr/local/lib/python3.9/test/test_ftplib.pydefault_error_handler4sr cs@eZdZdZddZddZddZfdd Zd d ZZ S) DummyDTPHandlerFcCs(tj||||_d|j_|j|_dS)N)asynchat async_chat__init__ baseclasslast_received_dataencodingselfconnrr r r r>szDummyDTPHandler.__init__cCs(|d|jd}|jj|7_dS)Nreplace)recvdecoderrr)rZnew_datar r r handle_readDszDummyDTPHandler.handle_readcCs$|js |jd|d|_dS)N226 transfer completeT)dtp_conn_closedrpushcloserr r r handle_closeHs zDummyDTPHandler.handle_closecsD|jjdur|jj}d|j_|s(|Stt|||jdSr )r next_dataclose_when_donesuperr rencoder)rZwhat __class__r r rQs  zDummyDTPHandler.pushcCs tdSr r r!r r r handle_errorYszDummyDTPHandler.handle_error) __name__ __module__ __qualname__rrrr"rr* __classcell__r r r'r r ;s  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)rrrsocket setsockopt SOL_SOCKET SO_OOBINLINEZset_terminator in_bufferdtplast_received_cmdr next_responser#rest RETR_DATAnext_retr_datarrfake_pasv_server_iprrrr r r ras  zDummyFTPHandler.__init__cCs|j|dSr )r7appendrdatar r r collect_incoming_datausz%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)rlinecmdspaceargmethodr r r found_terminatorxs   z DummyFTPHandler.found_terminatorcCs tdSr r)r!r r r r*szDummyFTPHandler.handle_errorcCstj|||jddS)Nr1)rrrr&rrAr r r rszDummyFTPHandler.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)rrPaddripportsr r r cmd_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) rrPsockrdrcZp1Zp2rrbr r r cmd_pasvs   zDummyFTPHandler.cmd_pasvcCsT||ddd\}}}t|}tj||ftd}|j||d|_|ddS)Nrr0rFrWrYrZ)rHr]r3r_r`rar8r)rrPafrcrdrer r r cmd_eprts zDummyFTPHandler.cmd_eprtcCstj|jddftjdP}|t|d}|d||\}}|j||d|_ Wdn1st0YdS)Nr)familyr0z+229 entering extended passive mode (|||%d|)rY) r3rhriAF_INET6rjr`rrkrar8)rrPrlrdrrbr r r cmd_epsvs   zDummyFTPHandler.cmd_epsvcCs||dSr rrrPr r r cmd_echoszDummyFTPHandler.cmd_echocCs|ddS)Nz 200 noop okrsrtr r r cmd_noopszDummyFTPHandler.cmd_noopcCs|ddS)Nz331 username okrsrtr r r cmd_userszDummyFTPHandler.cmd_usercCs|ddS)Nz230 password okrsrtr r r cmd_passszDummyFTPHandler.cmd_passcCs|ddS)Nz 230 acct okrsrtr r r cmd_acctszDummyFTPHandler.cmd_acctcCs|ddS)Nz 350 rnfr okrsrtr r r cmd_rnfrszDummyFTPHandler.cmd_rnfrcCs|ddS)Nz 250 rnto okrsrtr r r cmd_rntoszDummyFTPHandler.cmd_rntocCs|ddS)Nz 250 dele okrsrtr r r cmd_deleszDummyFTPHandler.cmd_delecCs|ddS)N 250 cwd okrsrtr r r cmd_cwdszDummyFTPHandler.cmd_cwdcCs|ddS)Nz250 1000rsrtr r r cmd_sizeszDummyFTPHandler.cmd_sizecCs|d|dS)Nz257 "%s"rsrtr r r cmd_mkdszDummyFTPHandler.cmd_mkdcCs|ddS)Nz 250 rmd okrsrtr r r cmd_rmdszDummyFTPHandler.cmd_rmdcCs|ddS)Nz 257 "pwd ok"rsrtr r r cmd_pwdszDummyFTPHandler.cmd_pwdcCs|ddS)Nz 200 type okrsrtr r r cmd_typeszDummyFTPHandler.cmd_typecCs|d|dSNz 221 quit ok)rr rtr r r cmd_quits zDummyFTPHandler.cmd_quitcCs|ddS)Nz 226 abor okrsrtr r r cmd_aborszDummyFTPHandler.cmd_aborcCs|ddS)Nz 125 stor okrsrtr r r cmd_storszDummyFTPHandler.cmd_storcCs||_|ddS)Nz 350 rest ok)r;rrtr r r cmd_restszDummyFTPHandler.cmd_restcCsN|d|jdur t|j}nd}|j|j|d|jd|_dS)Nz 125 retr okr)rr;r]r8r=r$)rrPoffsetr r r cmd_retrs    zDummyFTPHandler.cmd_retrcCs$|d|jt|jdS)Nz 125 list ok)rr8 LIST_DATAr$rtr r r cmd_lists  zDummyFTPHandler.cmd_listcCs$|d|jt|jdS)Nz 125 nlst ok)rr8 NLST_DATAr$rtr r r cmd_nlsts  zDummyFTPHandler.cmd_nlstcCs|ddS)Nz 200 opts okrsrtr r r cmd_optsszDummyFTPHandler.cmd_optscCs$|d|jt|jdS)Nz 125 mlsd ok)rr8 MLSD_DATAr$rtr r r cmd_mlsds  zDummyFTPHandler.cmd_mlsdcCsdt||_|ddS)Nxz125 setlongretr ok)r]r=rrtr r r cmd_setlongretrszDummyFTPHandler.cmd_setlongretrN)'r+r,r-r raDEFAULT_ENCODINGrrCrRr*rrfrmrorrrurvrwrxryrzr{r|r~rrrrrrrrrrrrrrrr r r r r/]sD    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) threadingThreadrasyncore dispatcherdaemonZ create_socketr3 SOCK_STREAMbindlistenactiveLock active_lockrihostrdhandler_instancer)raddressrnrr r r rs     zDummyFTPServer.__init__cCs.|jr Jt|_tj||jdSr )rrEvent_DummyFTPServer__flagrstartwaitr!r r r rs   zDummyFTPServer.startcCsPd|_|j|jr@tjr@|jtjddd|jqtj dddS)NT皙?r0)rXcountZ ignore_all) rrsetrZ socket_mapracquireZlooprelease close_allr!r r r run%s    zDummyFTPServer.runcCs|js Jd|_|dS)NF)rrGr!r r r stop.s zDummyFTPServer.stopcCs|j||jd|_dS)Nr)handlerrrrrrbr r r handle_accepted3szDummyFTPServer.handle_acceptedcCs |dSr )r r!r r r handle_connect6szDummyFTPServer.handle_connectcCsdSNrr r!r r r writable:szDummyFTPServer.writablecCs tdSr r)r!r r r r*=szDummyFTPServer.handle_errorN)r+r,r-r/rr3AF_INETrrrrrrrrrr*r r r r rs  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)rcontextr3r r r secure_connectionLs  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 ECONNABORTEDrrerrr r r _do_ssl_handshakeWs  *zSSLConnection._do_ssl_handshakec sd|_z|j|_WnZtjy`}z0|jdtjtjfvrLWYd}~dSWYd}~nd}~0typYn0d|_t |dddurt t | ndS)NTrF_ccc) _ssl_closingr3unwraprrrrrrrLr%rr rr'r r _do_ssl_shutdownjs " zSSLConnection._do_ssl_shutdowncs2|jr|n|jr |ntt|dSr )rrrrr%rhandle_read_eventr!r'r r r~s   zSSLConnection.handle_read_eventcs2|jr|n|jr |ntt|dSr )rrrrr%rhandle_write_eventr!r'r r rs   z SSLConnection.handle_write_eventc slztt||WStjyf}z:|jdtjtjtjtj fvrPWYd}~dSWYd}~n d}~00dSr) r%rsendrrrrSSL_ERROR_ZERO_RETURNrr)rrBrr'r r rszSSLConnection.sendc sztt||WStjy}z^|jdtjtjfvrHWYd}~dS|jdtjtj fvrt| WYd}~dSWYd}~n d}~00dS)NrrD) r%rrrrrrrrrr")rZ buffer_sizerr'r r rs zSSLConnection.recvcCs tdSr r)r!r r r r*szSSLConnection.handle_errorcs6t|jtjr$|jjdur$|ntt|dSr ) isinstancer3r SSLSocketZ_sslobjrr%rr r!r'r r r s   zSSLConnection.close)r+r,r-__doc__rrrrrrrrrr*r r.r r r'r rFs     rc@seZdZdZddZdS)DummyTLS_DTPHandlerz.A DummyDTPHandler subclass supporting TLS/SSL.cCs"t||||jjr|dSr )r rrsecure_data_channelrrr r r rszDummyTLS_DTPHandler.__init__N)r+r,r-rrr r r r rsrc@s@eZdZdZeZefddZddZddZ dd Z d d Z d S) DummyTLS_FTPHandlerz.A DummyFTPHandler subclass supporting TLS/SSL.cCs tj|||dd|_d|_dS)NrF)r/rrrr?r r r rszDummyTLS_FTPHandler.__init__cCs|d|dS)zSet up secure control channel.z234 AUTH TLS successfulN)rrrrMr r r cmd_auths zDummyTLS_FTPHandler.cmd_authcCs|dd|_|dS)Nz 220 Reverting back to clear-textT)rrrrr r r cmd_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.Nrsrr r r cmd_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)rrMrPr r r cmd_prots  zDummyTLS_FTPHandler.cmd_protN) r+r,r-rrrarrrrrrr r r r rs rc@seZdZeZdS)DummyTLS_FTPServerN)r+r,r-rrr r r r rsrc@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`clientconnectrrdrrr r r setUps zTestFTPClass.setUpcCs*|j|jd|_tjdddSNTrrr rrrrr!r r r tearDowns  zTestFTPClass.tearDowncCs$|t|t||||dSr ) assertEquallen)rreceivedZexpectedr r r check_dataszTestFTPClass.check_datacCs||jddS)Nr2)rrZ getwelcomer!r r r test_getwelcomeszTestFTPClass.test_getwelcomecCsL||jdtd||jdtd||jdtddS)Nfooz pass 12345z pass *****z PASS 12345z PASS *****)rrZsanitizereprr!r r r 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_protor!r r r test_exceptionsszTestFTPClass.test_exceptionsc CsLtjtjtjtjtjttf}|D]&}z |dWq tjyDYq 0q dS)Nz(exception not included in all_errors set) r error_replyrrrErrorrEOFErrorZ all_errors)r exceptionsrr r r test_all_errors s   zTestFTPClass.test_all_errorscCsF||jj|jd||jj|jd||jjdS)NTF) assertTruerZ passiveserverset_pasv assertFalser!r r r test_set_pasvs   zTestFTPClass.test_set_pasvcCsD|jd|jd|tj|jjd|tj|jjddS)Nzecho 200zecho 299zecho 199zecho 300)rZvoidcmdrrrr!r r r test_voidcmds  zTestFTPClass.test_voidcmdcCs|jdSr )rloginr!r r r test_login!szTestFTPClass.test_logincCs|jddS)Npasswd)rZacctr!r r r test_acct$szTestFTPClass.test_acctcCs2|jddd|jj_|tj|jjdddS)NabZ200)rrenamerrr:rrrr!r r r test_rename's zTestFTPClass.test_renamecCs.|jdd|jj_|tj|jjddS)NrZ199)rdeleterrr:rrrr!r r r test_delete,s  zTestFTPClass.test_deletecCs|jddSNr)rsizer!r r r test_size1szTestFTPClass.test_sizecCs|jd}||ddS)N/foo)rmkdrrdirr r r test_mkd4s zTestFTPClass.test_mkdcCs|jddSr)rZrmdr!r r r test_rmd8szTestFTPClass.test_rmdcCs|jd}||ddS)Nrr})rcwdrrr r r test_cwd;s zTestFTPClass.test_cwdcCs|j}||ddS)Nzpwd ok)rpwdrrr r r test_pwd?s zTestFTPClass.test_pwdcCs&||jd||jjddSr)rrquitrlr!r r r test_quitCszTestFTPClass.test_quitcCs|jdSr )rabortr!r r r test_abortHszTestFTPClass.test_abortcs6fdd}gjd|dtdS)Ncs|jjdSr r@rrrrBrrr r callbackLsz.TestFTPClass.test_retrbinary..callbackretrrr retrbinaryrrGr<)rr&r r%r test_retrbinaryKszTestFTPClass.test_retrbinarycsLfdd}dD]4}gjjd||ddt|dqdS)Ncs|jjdSr r#r$r%r r r&Ssz3TestFTPClass.test_retrbinary_rest..callback)r r'r;rr()rr&r;r r%r test_retrbinary_restRs z!TestFTPClass.test_retrbinary_restcCs2g}|jd|j|d|tdddS)Nr'r )r retrlinesr@rrGr<rrrr r r test_retrlinesZszTestFTPClass.test_retrlinescsjtt|jj}|jd|||jj j tg| d|jjd|fddd| dS)Nstorrcs dSr r@rflagr r frDz.TestFTPClass.test_storbinary..r&) ioBytesIOr<r&rr storbinaryrrrrseekrrfr r6r test_storbinary_s 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?rr r r test_storbinary_restis   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 r4r5r6r r r8yrDz-TestFTPClass.test_storlines..r9rT)quiet)r<rr&rrr:r; storlinesrrrrr=rStringIOrZcheck_warnings BytesWarningr TypeError)rrBr?r r6r test_storlinesqs   zTestFTPClass.test_storlinescCs.|j||jtddddS)Nr/rF)rZnlstrrrHr!r r r test_nlsts zTestFTPClass.test_nlstcs6g|jfdd|dtdddS)Ncs |Sr r4r5lr r r8rDz'TestFTPClass.test_dir..rr/)rrrrGrrr!r rMr test_dirszTestFTPClass.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$r!r r set_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 rzunexpected data %s)NNNN) r[rrYassertIsInstancerCdictrZassertInrXislowerr StopIterationfail)rZlsrWrSr\rZrr r[r test_mlsdsF                    zTestFTPClass.test_mlsdcCs@|j"||jjjdWdn1s20YdS)NrdrZmakeportrrrr9r!r r r test_makeports  zTestFTPClass.test_makeportcCs>|j\}}tj||ftd}|||jjj ddS)NrWZpasv rmakepasvr3r_r`r rrrr9rrrdrr r r 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_hostrdr r r *test_makepasv_issue43285_security_disableds z7TestFTPClass.test_makepasv_issue43285_security_disabledcCsH||jj|j\}}|||jjjtj ||ft d dS)NrW) rrrirfZassertNotEqualrrr>r3r_r`r )rZ trusted_hostrdr r r 1test_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)rrlrrrr r!r r is_client_connecteds z=TestFTPClass.test_with_statement..is_client_connectedrWrmrz550 error on quitzException not raisedr)rrrrr`rrrrdrrrrr9rr:rrCratimesleep)rrnrr r!r test_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)rrder r r test_source_addresss  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)rrdrlrwr r r &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 ""rz257 "" createdz250 "/foo/bar"z257 "/foo/b""ar"z /foo/b"arz257 "/foo/b""ar" created)rrparse257rrr!r r r test_parse257*szTestFTPClass.test_parse257cCs$|tj|jjd|jjddS)Nrr)rrrrrmaxliner!r r r test_line_too_long6szTestFTPClass.test_line_too_longcCs8|jd|jjdg}|tj|jjd|jdS)NzSETLONGRETR %drr')rrr}rrrr0r@r1r r r test_retrlines_too_long:s  z$TestFTPClass.test_retrlines_too_longcCs0td|jjd}|tj|jjd|dS)Nxrr3)r:r;rr}rrrrGr>r r r test_storlines_too_long@sz$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_dirrr r r test_encoding_paramDs  , z TestFTPClass.test_encoding_paramN)-r+r,r-rrrrrrrrrrr r rrrrrrrr r"r*r.r2r@rErKrLrOrbrdrhrkrlrqrxrzr|r~rrrr r r r rsR    :  -   rzIPv6 not enabledc@s<eZdZddZddZddZddZd d Zd d Zd S)TestIPv6EnvironmentcCsJttdftjtd|_|jtjt td|_ |j |jj |jj dS)Nr)rnrr)rrr3rqrrrrrr`rrrrdr!r r r rXs zTestIPv6Environment.setUpcCs*|j|jd|_tjdddSrrr!r r r r`s  zTestIPv6Environment.tearDowncCs||jjtjdSr )rrrnr3rqr!r r r test_afgszTestIPv6Environment.test_afcCs@|j"||jjjdWdn1s20YdS)NZeprtrcr!r r r rdjs  z!TestIPv6Environment.test_makeportcCs>|j\}}tj||ftd}|||jjj ddS)NrWZepsvrergr r r rhosz!TestIPv6Environment.test_makepasvcs4fdd}jd|jd|dS)NcsPfdd}gjd|tdttdtdS)Ncs|jjdSr r#r$r%r r r&wszATestIPv6Environment.test_transfer..retr..callbackr'r)rr)rrrGr<r9r!)rr r'vs z/TestIPv6Environment.test_transfer..retrTF)rr)rr'r r!r test_transferus    z!TestIPv6Environment.test_transferN) r+r,r-rrrrdrhrr r r r rUs 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_prr r r rs   zTestTLS_FTPClassMixin.setUpN)r+r,r-rrrr r r r rsrc@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`rrrrdrr r r rs zTestTLS_FTPClass.setUpcCs*|j|jd|_tjdddSrrr!r r r rs  zTestTLS_FTPClass.tearDowncCs2||jjtj|j||jjtjdSr )assertNotIsInstancerrlrrrr]r!r r r test_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)rrlr r r test_data_connections(  "   "   $z%TestTLS_FTPClass.test_data_connectioncCs<||jjtj|j||jjtj|jdSr )rrrlrrrr]r!r r r r s zTestTLS_FTPClass.test_logincCs|j|t|jjdSr )rrrrr!r r r test_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]rryrctxrlr r r test_contexts.       zTestTLS_FTPClass.test_contextcCsP|t|jj|jjdd||jjtj|j|t|jjj dS)NT)Zsecure) rrrcccrr]rlrrrr!r r r test_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`rrrrdrZCertificateErrorrrryrr r r test_check_hostnames,   ( >    z$TestTLS_FTPClass.test_check_hostnameN)r+r,r-rrrrrrr rrrrrr r r r rs 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_portr!r r r rs      zTestTimeouts.setUpcCs|jtj_|jd|_dSr )rrrrdrrGr!r r r rs  zTestTimeouts.tearDowncCs|j|jz^z|j\}}Wntjy<Yn*0|d|tj |j| W|j n |j 0dS)Ns 1 Hola mundo ) rlrrrrkr3rXsendallshutdownSHUT_WRr rr r r r$s      zTestTimeouts.serverc Csf|ttdztt}Wtdn td0||j d|j | dSNrB) assertIsNoner3getdefaulttimeoutsetdefaulttimeoutrrrrrl gettimeoutrrr rftpr r r testTimeoutDefault9s   zTestTimeouts.testTimeoutDefaultc Csh|ttdztjtdd}Wtdn td0||j|j | dSNrBrW) rr3rrrrrrlrrrr rr r r testTimeoutNoneEs  zTestTimeouts.testTimeoutNonecCsntjtdd}||jd|j|| t tjtddWdn1s`0YdS)NrBrWr) rrrrrlrrrr rrrr r r testTimeoutValueQs   zTestTimeouts.testTimeoutValuecCs>t}|jtdd||jd|j| dSr rrrrrrlrrrr rr r r testTimeoutConnect\s  zTestTimeouts.testTimeoutConnectcCs>tjdd}|t||jd|j| dSrrrr r r testTimeoutDifferentOrdercs    z&TestTimeouts.testTimeoutDifferentOrdercCs@t}d|_|t||jd|j | dSr) rrrXrrrrlrrrr rr r r testTimeoutDirectAccessjs   z$TestTimeouts.testTimeoutDirectAccessN) r+r,r-rrrrrrrrrr r r r rs   rc@seZdZddZdS) MiscTestCasecCshd}tj|t|ddS)N> MSG_OOBZ print_liner{ZFTP_PORTZCRLFtestZftpcpZparse227Zparse229ZMAXLINEZparse150ZB_CRLFr) blacklist)rZ check__all__r)rrr r r test__all__tszMiscTestCase.test__all__N)r+r,r-rr r r r rssrcCs t}tjtjg|RdSr )rZthreading_setupunittestZaddModuleCleanupZthreading_cleanup) thread_infor r r setUpModule{sr__main__)8rrrrr3r:rosrrorr ImportErrorrrrrZ test.supportrZtest.support.socket_helperrrZLOOPBACK_TIMEOUTr`rr<rrrr rr r/rrrrQrGdirname__file__rrrrrrrZ IPV6_ENABLEDrrrrrrr+mainr r r r sd      "23 i (s -ze