o ?Og@sL ddlZddlZddlmZgdZdZdZdZGdddeZGd d d eZ Gd d d eZ Gd ddeZ GdddeZ ee efZdZdZGdddZzddlZWn eybdZYnwejZGdddeZedee eejfZdaddZdaddZddZddZdd Z d(d#d$Z!d%d&Z"e#d'kre"dSdS))N)_GLOBAL_DEFAULT_TIMEOUT)FTP error_reply error_temp error_perm error_proto all_errors c@ eZdZdS)ErrorN__name__ __module__ __qualname__rr-/opt/alt/python310/lib64/python3.10/ftplib.pyr 9 r c@r )rNrrrrrr:rrc@r )rNrrrrrr;rrc@r )rNrrrrrr<rrc@r )rNrrrrrr=rr s c@seZdZ dZdZeZeZdZ dZ dZ dZ dZ ddddedfdddd Zd d Zd d Zd\ddZddZddZeZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Z d+d,Z!d-d.Z"d/d0Z#d1d2Z$d]d3d4Z%d]d5d6Z&d^d7d8Z'd_d:d;Z(d]dd?Z*d]d@dAZ+dBdCZ,dDdEZ-dFdGZ.dgfdHdIZ/dJdKZ0dLdMZ1dNdOZ2dPdQZ3dRdSZ4dTdUZ5dVdWZ6dXdYZ7dZd[Z8dS)arrNTFutf-8encodingcCs@ ||_||_||_|r|||r||||dSdSdSN)rsource_addresstimeoutconnectlogin)selfhostuserpasswdacctrrrrrr__init__ms z FTP.__init__cCs|Srrrrrr __enter__}sz FTP.__enter__c Gsf|jdur1z z|Wn ttfyYnwW|jdur$|dSdS|jdur0|wwdSr)sockquitOSErrorEOFErrorclose)rargsrrr__exit__s     z FTP.__exit__cCs |dkr||_|dkr||_|dkr||_|jdur"|js"td|dur)||_td||j|jtj|j|jf|j|jd|_ |j j |_ |j j d|j d|_||_|jS) Nrrr.z0Non-blocking socket (timeout=0) is not supportedzftplib.connectrrr)r portr ValueErrorrsysauditsocketcreate_connectionr'familyafmakefilerfilegetrespwelcome)rr r1rrrrrrs&  z FTP.connectcCs |jr td||j|jS)Nz *welcome*) debuggingprintsanitizer<r%rrr getwelcomeszFTP.getwelcomecC ||_dSr)r=)rlevelrrrset_debuglevels zFTP.set_debuglevelcCrAr) passiveserver)rvalrrrset_pasvs z FTP.set_pasvcCsJ|dddvr!t|d}|ddd|d||d}t|S)N>zpass PASS r*)lenrstriprepr)rsirrrr?s$z FTP.sanitizecCs`d|vsd|vr tdtd|||t}|jdkr$td|||j| |j dS)N  z4an illegal newline character should not be containedzftplib.sendcmdr z*put*) r2r3r4CRLFr=r>r?r'sendallencoderrlinerrrputlines z FTP.putlinecCs$|jr td||||dS)Nz*cmd*)r=r>r?rVrTrrrputcmdsz FTP.putcmdcCs|j|jd}t||jkrtd|j|jdkr$td|||s(t|ddt kr8|dd}|S|ddt vrF|dd}|S)Nr got more than %d bytesz*get*) r:readlinemaxlinerJr r=r>r?r*rQrTrrrgetlines   z FTP.getlinecCsf|}|dddkr1|dd} |}|d|}|dd|kr0|dddkr0 |Sq|S)N-r rP)r])rrUcodeZnextlinerrr getmultilines  zFTP.getmultilinecCsl|}|jrtd|||dd|_|dd}|dvr"|S|dkr*t||dkr2t|t|)Nz*resp*r^r >31245)rbr=r>r?Zlastresprrr)rrespcrrrr;s z FTP.getrespcCs& |}|dddkrt||S)Nr re)r;rrrhrrrvoidresps z FTP.voidrespcCsV dt}|jdkrtd|||j|t|}|dddvr)t||S)NABORr z *put urgent*r^Z226Z225Z426) B_CRLFr=r>r?r'rRMSG_OOBrbrrrUrhrrraborts z FTP.abortcC |||Sr)rWr;rcmdrrrsendcmd z FTP.sendcmdcCrrr)rWrkrsrrrvoidcmdrvz FTP.voidcmdcCsD |d}t|dt|dg}||}dd|}||S)N.zPORT ,)splitrLjoinrw)rr r1ZhbytesZpbytesbytesrtrrrsendport s   z FTP.sendportcCsd d}|jtjkr d}|jtjkrd}|dkrtddt||t|dg}dd|}||S)Nrr zunsupported address familyrzEPRT |)r8r5AF_INETZAF_INET6rrLr|rw)rr r1r8Zfieldsrtrrrsendeprt*s   z FTP.sendeprtcCsn tjd|jdd}|d}|jd}|jtjkr$|||}n|||}|jt ur5| |j|S)N)rrr )r7Zbacklogr) r5Z create_serverr8Z getsocknamer'rr~rrr settimeout)rr'r1r rhrrrmakeport7s     z FTP.makeportcCsj |jtjkr$t|d\}}|jr|}||fS|jd}||fSt|d|j\}}||fS)NPASVrZEPSV) r8r5rparse227rutrust_server_pasv_ipv4_addressr'Z getpeernameparse229)rZuntrusted_hostr1r rrrmakepasvDs z FTP.makepasvc Cs@ d}|jrG|\}}tj||f|j|jd}z&|dur$|d|||}|ddkr3|}|ddkr=t|WnQ| | =}|durW|d|||}|ddkrf|}|ddkrpt|| \}} |jt ur| |jWdn1swY|dddkrt|}||fS)Nr/zREST %srrerdr^150)rDrr5r6rrrur;rr+rZacceptrrparse150) rrtrestsizer r1connrhr'Zsockaddrrrr ntransfercmdPsF            zFTP.ntransfercmdcCs |||dS)Nr)r)rrtrrrr transfercmdszFTP.transfercmdcCs |sd}|s d}|s d}|dkr|dvr|d}|d|}|ddkr-|d|}|ddkr:|d |}|dd krDt||S) NZ anonymousr>rr`z anonymous@zUSER rrcrHACCT rerur)rr!r"r#rhrrrrs"   z FTP.loginr cCs |d|||:} ||}|sn||qtdur2t|tr<|Wd|SWd|SWd|S1sIwY|SNzTYPE I)rwrZrecv _SSLSocket isinstanceunwraprk)rrtcallback blocksizerrdatarrr retrbinarys*          zFTP.retrbinaryc Cs> |durt}|d}||}|jd|jd]} ||jd}t||jkr2td|j|j dkr>t dt ||sAn"|ddt krP|dd}n|d dd kr^|dd }||qt durpt|t rp|Wdn1szwYWd|SWd|S1swY|S) NTYPE Ar0rr rXrz*retr*rYrZrP) print_linerurr9rr[r\rJr r=r>rLrQrrrrk)rrtrrhrfprUrrr retrliness>     ( z FTP.retrlinescCs |d|||A} ||}|sn |||r!||qtdur9t|trC|Wd|SWd|SWd|S1sPwY|Sr)rwrreadrRrrrrk)rrtrrrrrbufrrr storbinarys.           zFTP.storbinarycCs |d||j} ||jd}t||jkr#td|j|s&n$|ddtkr>|dtvr:|dd}|t}|||rI||q tdurat |trk| Wd| SWd| SWd| S1sxwY| S)Nrr rXrYrZ) rwrr[r\rJr rnrRrrrrk)rrtrrrrrrr storliness8      z FTP.storlinescCs d|}||S)Nrrw)rZpasswordrtrrrr#s zFTP.acctcGs2 d}|D]}|d|}qg}|||j|S)NZNLST )rappend)rr,rtargfilesrrrnlst#szFTP.nlstcGsj d}d}|ddr t|dtdkr |dd|d}}|D] }|r,|d|}q"|||dS)NZLISTrZrr)typer)rr,rtfuncrrrrdir,s  zFTP.dirc cs |r|dd|d|rd|}nd}g}|||j|D].}|td\}}}i} |dddD]} | d\} }} | | | <q<|| fVq$dS)Nz OPTS MLST ;zMLSD %sZMLSDrrZ=) rur|rrrKrQ partitionr{lower) rpathZfactsrtlinesrUZ facts_found_nameentryZfactkeyvaluerrrmlsd;s"   zFTP.mlsdcCs2 |d|}|ddkrt||d|S)NzRNFR rrczRNTO )rurrw)rZfromnameZtonamerhrrrrenameWs  z FTP.renamecCs, |d|}|dddvr|St|)NzDELE r^>Z250Z200r)rfilenamerhrrrdelete^s z FTP.deletec Csr |dkr*z|dWSty)}z|jddddkrWYd}~n d}~ww|dkr0d}d|}||S) Nz..ZCDUPrr^500rrxzCWD )rwrr,)rdirnamemsgrtrrrcwdfs   zFTP.cwdcCs< |d|}|dddkr|dd}t|SdS)NzSIZE r^Z213)rustripint)rrrhrMrrrrss zFTP.sizecCs& |d|}|dsdSt|S)NzMKD 257rrw startswithparse257)rrrhrrrmkd{s  zFTP.mkdcCs |d|S)NzRMD r)rrrrrrmdszFTP.rmdcCs" |d}|ds dSt|S)NZPWDrrrrjrrrpwds   zFTP.pwdcCs |d}||S)NZQUIT)rwr+rjrrrr(s zFTP.quitcCsf z!|j}d|_|dur|W|j}d|_|dur!|dSdS|j}d|_|dur2|wwr)r:r+r')rr:r'rrrr+s"  z FTP.close)rrr.Nr)rrr)r N)r NN)9rrrr=r FTP_PORTr1MAXLINEr\r'r:r<rDrrr$r&r-rr@rCdebugrFr?rVrWr]rbr;rkrqrurwr~rrrrrrrrrrr#rrrrrrrrrrr(r+rrrrrJsr      7    #     rc seZdZ ejZdddddddedf ddfdd Zdfdd Zd d Z d d Z ddZ ddZ dfdd Z ddZZS)FTP_TLSrNrrc  s|dur |dur td|dur|durtd|dus |dur+ddl} | dtd||_||_|dur>tj|j||d}||_ d|_ t j |||||| | ddS) Nz4context and keyfile arguments are mutually exclusivez5context and certfile arguments are mutually exclusiverzAkeyfile and certfile are deprecated, use a custom context insteadr)certfilekeyfileFr) r2warningswarnDeprecationWarningrrsslZ_create_stdlib_context ssl_versioncontext_prot_psuperr$) rr r!r"r#rrrrrrr __class__rrr$s* zFTP_TLS.__init__Tcs*|r t|jtjs |t|||Sr)rr'r SSLSocketauthrr)rr!r"r#Zsecurerrrrsz FTP_TLS.logincCsh t|jtjr td|jtjkr|d}n|d}|jj |j|j d|_|jj d|j d|_ |S)NzAlready using TLSzAUTH TLSzAUTH SSLZserver_hostnamer0)moder)rr'rrr2rZ PROTOCOL_TLSrwr wrap_socketr r9rr:rjrrrrs   z FTP_TLS.authcCs2 t|jtjs td|d}|j|_|S)Nz not using TLSZCCC)rr'rrr2rwrrjrrrcccs   z FTP_TLS.ccccCs |d|d}d|_|S)NzPBSZ 0zPROT PTrwrrjrrrprot_ps  zFTP_TLS.prot_pcCs |d}d|_|S)NzPROT CFrrjrrrprot_cs zFTP_TLS.prot_ccs2t||\}}|jr|jj||jd}||fS)Nr)rrrrrr )rrtrrrrrrrs zFTP_TLS.ntransfercmdcCs8dt}|j||}|dddvrt||S)Nrlr^rm)rnr'rRrbrrprrrrqs  z FTP_TLS.abort)rrrTr)rrrrZPROTOCOL_TLS_CLIENTrrr$rrrrrrrq __classcell__rrrrrs   rcCs^ |dddkr t|tdurddl}|d|j|jBat|}|s(dSt|dS)Nr^rrz150 .* \((\d+) bytes\)r ) r_150_rerecompile IGNORECASEASCIImatchrgroup)rhrmrrrr.s  rcCs |dddkr t|tdurddl}|d|jat|}|s't||}d|dd}t |dd>t |d}||fS) Nr^Z227rz#(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)rxr_rG) r_227_rerrrsearchrgroupsr|r)rhrrZnumbersr r1rrrrBs rcCs |dddkr t||d}|dkrt||d|d}|dkr*t|||d||dkr:t|||d|||d}t|dkrSt||d}t|d}||fS)Nr^Z229(r)r rG)rfindrr{rJr)rhZpeerleftrightpartsr r1rrrrUs    rcCs |dddkr t||dddkrdSd}d}t|}||krH||}|d}|dkr@||ks9||dkr< |S|d}||}||ks#|S)Nr^rrGz "rr ")rrJ)rhrrNnrirrrrjs&rcCs t|dSr)r>)rUrrrrs rrIc Cs |s|}d|}||||t|d\}}||||d|}|dddvr3t|d|}|dddvrDt||dS)NzTYPE rzSTOR r^>rZ125RETR )rwrrur~rrk) sourceZ sourcenametargetZ targetnamerZ sourcehostZ sourceportZtreplyZsreplyrrrftpcps     rc Cs ttjdkrttjtdddl}d}d}tjddkr0|d}tjd=tjddks!tjddddkrHtjddd}tjd=tjd}t|}| |d}}}z||}Wnt yv|durttj dYnwz | |\}}}Wntytj dYnw||||tjddD]K} | ddd kr|| ddq| dddkrd } | ddr| d | dd} || } q| d kr||j q|d | tjj dq|dS)Nrrr z-dz-rrz5Could not open account file -- using anonymous login.z$No account -- using anonymous login.z-lZCWDrz-pri)rJr3argvr>test__doc__exitnetrcrrCr)stderrwriteZauthenticatorsKeyErrorrrrurFrDrstdoutr() rr=Zrcfiler ZftpZuseridr"r#Znetrcobjr:rtrhrrrrs\            r__main__)rr)$r3r5r__all__rorr Exceptionr rrrrr)r*rrQrnrr ImportErrorrrrrZSSLErrorrrrrrrrrrrrrrrsT&  ^   } 9