U e5d9@sRddlZddlZddlmZddddddgZd Zd Zd ZGd d d eZGdddeZ GdddeZ GdddeZ GdddeZ ee efZdZdZGdddZz ddlZWnek rdZYn0XejZGdddeZedee eejfZdaddZdaddZddZddZdd Z d(d#d$Z!d%d&Z"e#d'krNe"dS))N)_GLOBAL_DEFAULT_TIMEOUTFTP error_reply error_temp error_perm error_proto all_errors c@s eZdZdS)ErrorN__name__ __module__ __qualname__rr/usr/lib64/python3.8/ftplib.pyr 9sr c@s eZdZdS)rNr rrrrr:sc@s eZdZdS)rNr rrrrr;sc@s eZdZdS)rNr rrrrr<sc@s eZdZdS)rNr rrrrr=s s c@seZdZdZdZeZeZdZ dZ dZ dZ dZ dZddddedfddZd d Zd d Zd[ddZddZddZeZddZddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Z d(d)Z!d*d+Z"d,d-Z#d.d/Z$d0d1Z%d\d2d3Z&d]d4d5Z'd^d6d7Z(d_d9d:Z)d`d;d<Z*dad=d>Z+dbd?d@Z,dAdBZ-dCdDZ.dEdFZ/dgfdGdHZ0dIdJZ1dKdLZ2dMdNZ3dOdPZ4dQdRZ5dSdTZ6dUdVZ7dWdXZ8dYdZZ9dS)crrNr zlatin-1FcCs0||_||_|r,|||r,||||dSN)source_addresstimeoutconnectlogin)selfhostuserpasswdacctrrrrr__init__rs  z FTP.__init__cCs|Srrrrrr __enter__{sz FTP.__enter__c GsN|jdk rJz*z |Wnttfk r0YnXW5|jdk rH|XdSr)sockclosequitOSErrorEOFError)rargsrrr__exit__s    z FTP.__exit__cCs|dkr||_|dkr||_|dkr*||_|dk r8||_td||j|jtj|j|jf|j|jd|_|jj |_ |jj d|j d|_ ||_|jS)Nrrr)zftplib.connectrrencoding)rportrrsysauditsocketcreate_connectionr"familyafmakefiler-filegetrespwelcome)rrr.rrrrrrs   z FTP.connectcCs|jrtd||j|jS)Nz *welcome*) debuggingprintsanitizer8r rrr getwelcomeszFTP.getwelcomecCs ||_dSr)r9)rlevelrrrset_debuglevelszFTP.set_debuglevelcCs ||_dSr) passiveserver)rvalrrrset_pasvsz FTP.set_pasvcCsJ|dddkrBt|d}|ddd|d||d}t|S)N>PASS pass r*)lenrstriprepr)rsirrrr;s$z FTP.sanitizecCs`d|ksd|krtdtd|||t}|jdkrHtd|||j| |j dS)N  z4an illegal newline character should not be containedzftplib.sendcmdr z*put*) ValueErrorr/r0CRLFr9r:r;r"sendallencoder-rlinerrrputlines z FTP.putlinecCs$|jrtd||||dS)Nz*cmd*)r9r:r;rSrQrrrputcmdsz FTP.putcmdcCs|j|jd}t||jkr.td|j|jdkrHtd|||sPt|ddt krn|dd}n|ddt kr|dd}|S)Nr got more than %d bytesz*get*) r6readlinemaxlinerFr r9r:r;r&rNrQrrrgetlines  z FTP.getlinecCs`|}|dddkr\|dd}|}|d|}|dd|kr$|dddkr$q\q$|S)N-rL)rZ)rrRcodeZnextlinerrr getmultilines  zFTP.getmultilinecCsp|}|jrtd|||dd|_|dd}|dkrD|S|dkrTt||dkrdt|t|dS)Nz*resp*r[r >13245)r_r9r:r;Zlastresprrr)rrespcrrrr7s z FTP.getrespcCs$|}|dddkr t||S)Nr rb)r7rrrerrrvoidrespsz FTP.voidrespcCsTdt}|jdkr"td|||j|t|}|dddkrPt||S)NABORr z *put urgent*r[225426226) B_CRLFr9r:r;r"rOMSG_OOBr_rrrRrerrraborts z FTP.abortcCs|||Sr)rTr7rcmdrrrsendcmds z FTP.sendcmdcCs|||Sr)rTrhrrrrrvoidcmds z FTP.voidcmdcCsB|d}t|dt|dg}||}dd|}||S)N.zPORT ,)splitrHjoinru)rrr.ZhbytesZpbytesbytesrsrrrsendports  z FTP.sendportcCsbd}|jtjkrd}|jtjkr$d}|dkr4tddt||t|dg}dd|}||S)Nrr zunsupported address familyrzEPRT |)r4r1AF_INETZAF_INET6rrHrzru)rrr.r4Zfieldsrsrrrsendeprt&s  z FTP.sendeprtcCsltjd|jdd}|d}|jd}|jtjkrF|||}n |||}|jt k rh| |j|S)N)rrr )r3Zbacklogr) r1Z create_serverr4Z getsocknamer"rr|rrr settimeout)rr"r.rrerrrmakeport3s     z FTP.makeportcCs\|jtjkr:t|d\}}|jr*|}qT|jd}nt|d|j\}}||fS)NPASVrZEPSV) r4r1rparse227rttrust_server_pasv_ipv4_addressr"Z getpeernameparse229)rZuntrusted_hostr.rrrrmakepasv@s z FTP.makepasvc Cs6d}|jr|\}}tj||f|j|jd}zL|dk rF|d|||}|ddkrd|}|ddkrxt|Wn| YnXn| r}|dk r|d|||}|ddkr|}|ddkrt|| \}} |jt k r | |jW5QRX|dddkr.t|}||fS)Nr*zREST %srrbr`r[150)r?rr1r2rrrtr7rr#rZacceptrrparse150) rrsrestsizerr.connrer"Zsockaddrrrr ntransfercmdLs>            zFTP.ntransfercmdcCs|||dS)Nr)r)rrsrrrr transfercmdszFTP.transfercmdcCs|sd}|sd}|sd}|dkr0|dkr0|d}|d|}|ddkrX|d|}|ddkrr|d |}|dd krt||S) NZ anonymousr>rr]z anonymous@zUSER rrarCACCT rbrtr)rrrrrerrrrs    z FTP.loginr c Cs^|d|||:}||}|s(q2||qtdk rLt|trL|W5QRX|SNzTYPE I)rurZrecv _SSLSocket isinstanceunwraprh)rrscallback blocksizerrdatarrr retrbinarys   zFTP.retrbinaryc Cs|dkr t}|d}||}|jd|jd}||jd}t||jkr`td|j|j dkrxt dt ||s~q|ddt kr|dd}n|d dd kr|dd }||q4t dk rt|t r|W5QRXW5QRX|S) NTYPE Ar+r,r rUr}z*retr*rVrWrL) print_linertrr5r-rXrYrFr r9r:rHrNrrrrh)rrsrrerfprRrrr retrliness,      z FTP.retrlinesc Csl|d|||H}||}|s(q@|||r||qtdk rZt|trZ|W5QRX|Sr)rurreadrOrrrrh)rrsrrrrrbufrrr storbinarys    zFTP.storbinaryc Cs|d||}||jd}t||jkrBtd|j|sHq|ddtkrx|dtkrp|dd}|t}|||r||qtdk rt |tr| W5QRX| S)Nrr rUrVrW) rurrXrYrFr rnrOrrrrh)rrsrrrrrrr storliness"     z FTP.storlinescCsd|}||S)Nrru)rZpasswordrsrrrrszFTP.acctcGs0d}|D]}|d|}qg}|||j|S)NZNLST )rappend)rr'rsargfilesrrrnlsts zFTP.nlstcGshd}d}|ddr>t|dtdkr>|dd|d}}|D]}|rB|d|}qB|||dS)NZLISTrWrr)typer)rr'rsfuncrrrrdir(s zFTP.dirc cs|r|dd|d|r*d|}nd}g}|||j|D]\}|td\}}}i} |dddD] } | d\} }} | | | <qt|| fVqDdS)Nz OPTS MLST ;zMLSD %sZMLSDrrW=) rtrzrrrGrN partitionrylower) rpathZfactsrslinesrRZ facts_found_nameentryZfactkeyvaluerrrmlsd7s  zFTP.mlsdcCs0|d|}|ddkr"t||d|S)NzRNFR rrazRNTO )rtrru)rZfromnameZtonamererrrrenameSs z FTP.renamecCs.|d|}|dddkr"|St|dS)NzDELE r[>250200r)rfilenamererrrdeleteZsz FTP.deletec Csp|dkrRz |dWStk rN}z|jddddkr>W5d}~XYq^Xn |dkr^d}d|}||S) Nz..ZCDUPrr[500rrvzCWD )rurr')rdirnamemsgrsrrrcwdbs zFTP.cwdcCs:|d|}|dddkr6|dd}t|SdS)NzSIZE r[Z213)rtstripint)rrrerIrrrroszFTP.sizecCs$|d|}|dsdSt|S)NzMKD 257rru startswithparse257)rrrerrrmkdws zFTP.mkdcCs|d|S)NzRMD r)rrrrrrmdszFTP.rmdcCs |d}|dsdSt|S)NZPWDrrrrgrrrpwds  zFTP.pwdcCs|d}||S)NZQUIT)rur#rgrrrr$s zFTP.quitcCsDz |j}d|_|dk r|W5|j}d|_|dk r>|XdSr)r"r#r6)rr"r6rrrr#s z FTP.close)rrr)N)N)N)rrr)r N)N)r NN)N):rrrr9rFTP_PORTr.MAXLINErYr"r6r8r?r-rrrr!r(rr<r>debugrAr;rSrTrZr_r7rhrqrtrur|rrrrrrrrrrrrrrrrrrrrrr$r#rrrrrJsn       7    #      c @sjeZdZejZdddddddedf ddZdddZdd Z d d Z d d Z ddZ dddZ ddZdS)FTP_TLSrNc Cs|dk r|dk rtd|dk r0|dk r0td|dk s@|dk rVddl} | dtd||_||_|dkr|tj|j||d}||_ d|_ t ||||||| dS)Nz4context and keyfile arguments are mutually exclusivez5context and certfile arguments are mutually exclusiverzAkeyfile and certfile are deprecated, use a custom context insteadr})certfilekeyfileF) rMwarningswarnDeprecationWarningrrsslZ_create_stdlib_context ssl_versioncontext_prot_prr) rrrrrrrrrrrrrrrs(zFTP_TLS.__init__TcCs*|rt|jtjs|t||||Sr)rr"r SSLSocketauthrr)rrrrZsecurerrrrsz FTP_TLS.logincCsft|jtjrtd|jtjkr.|d}n |d}|jj |j|j d|_|jj d|j d|_ |S)NzAlready using TLSzAUTH TLSzAUTH SSLZserver_hostnamer+)moder-)rr"rrrMrZ PROTOCOL_TLSrur wrap_socketrr5r-r6rgrrrrs    z FTP_TLS.authcCs0t|jtjstd|d}|j|_|S)Nz not using TLSZCCC)rr"rrrMrurrgrrrcccs   z FTP_TLS.ccccCs|d|d}d|_|S)NzPBSZ 0zPROT PTrurrgrrrprot_ps  zFTP_TLS.prot_pcCs|d}d|_|S)NzPROT CFrrgrrrprot_c s zFTP_TLS.prot_ccCs2t|||\}}|jr*|jj||jd}||fS)Nr)rrrrrr)rrsrrrrrrrs zFTP_TLS.ntransfercmdcCs8dt}|j||}|dddkr4t||S)Nrir[rj)rnr"rOr_rrprrrrqs  z FTP_TLS.abort)rrrT)N)rrrrZPROTOCOL_TLS_CLIENTrrrrrrrrrrqrrrrrs!     rcCs\|dddkrt|tdkrt |d}||fS) Nr[Z227rz#(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)rvr\rB) r_227_rerrrsearchrgroupsrzr)rerrZnumbersrr.rrrr=s rcCs|dddkrt||d}|dkr2t||d|d}|dkrRt|||d||dkrrt|||d|||d}t|dkrt||d}t|d}||fS)Nr[Z229(r)r rB)rfindrryrFr)reZpeerleftrightpartsrr.rrrrQs    rcCs|dddkrt||dddkr,dSd}d}t|}||kr||}|d}|dkrz||ks||dkrrq|d}||}q<|S)Nr[rrBz "rr ")rrF)rerrJnrfrrrrgs  rcCs t|dSr)r:)rRrrrr~srrIc Cs|s|}d|}||||t|d\}}||||d|}|dddkrdt|d|}|dddkrt||dS)NzTYPE rzSTOR r[>125rRETR )rurrtr|rrh) sourceZ sourcenametargetZ targetnamerZ sourcehostZ sourceportZtreplyZsreplyrrrftpcps   rc Csttjdkr"ttjtdddl}d}d}tjddkrR|d}tjd=q2tjddddkrtjddd}tjd=tjd}t|}| |d}}}z||}Wn(t k r|dk rtj dYn:Xz| |\}}}Wn"tk rtj dYnX||||tjddD]} | ddd kr`|| ddnt| dddkrd } | ddr| d | dd} || } n0| d kr||j n|d | tjj dq6|dS)Nr}rr z-dz-rrz5Could not open account file -- using anonymous login.z$No account -- using anonymous login.z-lZCWDrz-pri)rFr/argvr:test__doc__exitnetrcrr>r%stderrwriteZauthenticatorsKeyErrorrrrtrAr?rstdoutr$) rr9ZrcfilerZftpZuseridrrZnetrcobjr6rsrerrrrsV           r__main__)rr)$r/r1r__all__rorr Exceptionr rrrrr%r&rrNrnrr ImportErrorrrrrZSSLErrorrrrrrrrrrrrrrr'sP   Z  |  9