Spade
Mini Shell
3
\���@sRddlZddlZddlmZddddddgZd Zd
ZdZGdd
�d
e�ZGdd�de�Z Gdd�de�Z
Gdd�de�ZGdd�de�Zee
efZdZdZGdd�d�ZyddlZWnek
r�dZYn0XejZGdd�de�Zejd�ee
eejfZdadd�Zdadd�Zdd�Zdd�Zdd
�Z
d(d#d$�Z!d%d&�Z"e#d'k�rNe"�dS))�N)�_GLOBAL_DEFAULT_TIMEOUT�FTP�error_reply�
error_temp�
error_perm�error_proto�
all_errors��i c@seZdZdS)�ErrorN)�__name__�
__module__�__qualname__�rr�/usr/lib64/python3.6/ftplib.pyr9src@seZdZdS)rN)rr
rrrrrr:sc@seZdZdS)rN)rr
rrrrrr;sc@seZdZdS)rN)rr
rrrrrr<sc@seZdZdS)rN)rr
rrrrrr=sz
s
c@s�eZdZdZdZeZeZdZ dZ
dZdZdZ
ddddedfdd�Zdd �Zd
d�Zd[d
d�Zdd�Zdd�ZeZdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd
�Zd!d"�Zd#d$�Zd%d&�Zd'd(�Z
d)d*�Z!d+d,�Z"d-d.�Z#d/d0�Z$d\d1d2�Z%d]d3d4�Z&d^d5d6�Z'd_d8d9�Z(d`d:d;�Z)dad<d=�Z*dbd>d?�Z+d@dA�Z,dBdC�Z-dDdE�Z.dgfdFdG�Z/dHdI�Z0dJdK�Z1dLdM�Z2dNdO�Z3dPdQ�Z4dRdS�Z5dTdU�Z6dVdW�Z7dXdY�Z8dS)crr�Nr zlatin-1cCs0||_||_|r,|j|�|r,|j|||�dS)N)�source_address�timeout�connect�login)�self�host�user�passwd�acctrrrrr�__init__ps
zFTP.__init__cCs|S)Nr)rrrr� __enter__ysz
FTP.__enter__cGsN|jdk rJz*y|j�Wnttfk
r0YnXWd|jdk rH|j�XdS)N)�sock�quit�OSError�EOFError�close)r�argsrrr�__exit__}s
zFTP.__exit__i�cCs�|dkr||_|dkr||_|dkr*||_|dk r8||_tj|j|jf|j|jd�|_|jj|_|jj d|j
d�|_|j�|_
|j
S)Nrri�)r�r)�encodingi���)r�portrr�socket�create_connectionrZfamily�af�makefiler%�file�getresp�welcome)rrr&rrrrrr�s
zFTP.connectcCs|jrtd|j|j��|jS)Nz *welcome*)� debugging�print�sanitizer-)rrrr�
getwelcome�szFTP.getwelcomecCs
||_dS)N)r.)r�levelrrr�set_debuglevel�szFTP.set_debuglevelcCs
||_dS)N)�
passiveserver)r�valrrr�set_pasv�szFTP.set_pasvcCsJ|dd�dkrBt|jd��}|dd�d|d||d�}t|�S)N��pass
�PASS z
�*>r9r8)�len�rstrip�repr)r�s�irrrr0�s$zFTP.sanitizecCsRd|ksd|krtd��|t}|jdkr:td|j|��|jj|j|j��dS)N�
�
z4an illegal newline character should not be containedr z*put*) �
ValueError�CRLFr.r/r0r�sendall�encoder%)r�linerrr�putline�s
zFTP.putlinecCs$|jrtd|j|��|j|�dS)Nz*cmd*)r.r/r0rG)rrFrrr�putcmd�sz
FTP.putcmdcCs�|jj|jd�}t|�|jkr.td|j��|jdkrHtd|j|��|sPt�|dd�t krn|dd�}n|dd�t kr�|dd�}|S) Nr zgot
more than %d bytesz*get*����rJ���rK)
r+�readline�maxliner;rr.r/r0r rC)rrFrrr�getline�s
zFTP.getlinecCsd|j�}|dd�dkr`|dd�}x:|j�}|d|}|dd�|kr&|dd�dkr&Pq&W|S)N���-rA)rN)rrF�codeZnextlinerrr�getmultiline�szFTP.getmultilinecCsp|j�}|jrtd|j|��|dd�|_|dd�}|d krD|S|dkrTt|��|dkrdt|��t|��dS)
Nz*resp*rOr �1�2�3�4�5>rTrVrU)rSr.r/r0Zlastresprrr)r�resp�crrrr,�szFTP.getrespcCs$|j�}|dd�dkr
t|��|S)Nr rU)r,r)rrYrrr�voidresp�szFTP.voidrespcCsTdt}|jdkr"td|j|��|jj|t�|j�}|dd�dkrPt|��|S) NsABORr z*put
urgent*rO�426�225�226>r\r]r^) �B_CRLFr.r/r0rrD�MSG_OOBrSr)rrFrYrrr�aborts
z FTP.abortcCs|j|�|j�S)N)rHr,)r�cmdrrr�sendcmds
zFTP.sendcmdcCs|j|�|j�S)N)rHr[)rrbrrr�voidcmds
zFTP.voidcmdcCsB|jd�}t|d�t|d�g}||}ddj|�}|j|�S)N�.�zPORT
�,)�splitr=�joinrd)rrr&ZhbytesZpbytes�bytesrbrrr�sendports
zFTP.sendportcCsbd}|jtjkrd}|jtjkr$d}|dkr4td��dt|�|t|�dg}ddj|�}|j|�S)Nrr rIzunsupported
address familyrzEPRT
�|)r)r'�AF_INETZAF_INET6rr=rird)rrr&r)Zfieldsrbrrr�sendeprt"szFTP.sendeprtc
Csd}d}x�tjdd|jtjdtj�D]j}|\}}}}}ytj|||�}|j|�Wn8tk
r�} z| }|rt|j�d}w$WYdd} ~ XnXPq$W|dkr�|dk r�|�ntd��|jd�|j �d}
|j
j �d}|jtjkr�|j||
�}n|j
||
�}|jtk �r|j|j�|S)Nrz!getaddrinfo returns an empty
listr )r'Zgetaddrinfor)ZSOCK_STREAMZ
AI_PASSIVEZbindrr!ZlistenZgetsocknamerrmrkrnrr�
settimeout)
r�errr�resr)Zsocktype�protoZ canonnameZsa�_r&rrYrrr�makeport/s6
zFTP.makeportcCsB|jtjkr
t|jd��\}}nt|jd�|jj��\}}||fS)N�PASVZEPSV)r)r'rm�parse227rc�parse229rZgetpeername)rrr&rrr�makepasvOszFTP.makepasvc
Cs6d}|jr�|j�\}}tj||f|j|jd�}yL|dk rF|jd|�|j|�}|ddkrd|j�}|ddkrxt|��Wn|j ��YnXn�|j
��r}|dk r�|jd|�|j|�}|ddkr�|j�}|ddkr�t|��|j�\}} |jtk �r
|j
|j�WdQRX|dd�dk�r.t|�}||fS)N)rzREST
%srrUrTrO�150)r4rxr'r(rrrcr,rr!rtZacceptrro�parse150)
rrb�rest�sizerr&�connrYrZsockaddrrrr�ntransfercmdVs<
zFTP.ntransfercmdcCs|j||�dS)Nr)r~)rrbr{rrr�transfercmd�szFTP.transfercmdcCs�|sd}|sd}|sd}|dkr0|dkr0|d}|jd|�}|ddkrX|jd|�}|ddkrr|jd |�}|dd
kr�t|��|S)NZ anonymousrrQz
anonymous@zUSER rrVzPASS zACCT
rU>rrQ)rcr)rrrrrYrrrr�s
z FTP.login� c
Csb|jd�|j||��>}x|j|�}|s*P||�qWtdk rPt|t�rP|j�WdQRX|j�S)NzTYPE
I)rdrZrecv�
_SSLSocket�
isinstance�unwrapr[)rrb�callback� blocksizer{r}�datarrr�
retrbinary�s
zFTP.retrbinarycCs�|dkrt}|jd�}|j|���}|jd|jd���}x�|j|jd�}t|�|jkrbtd|j��|j dkrzt
dt|��|s�P|d d�tkr�|dd
�}n|dd�dkr�|dd�}||�q6Wt
dk r�t|t
�r�|j�WdQRXWdQRX|j�S)
NzTYPE
Ar$)r%r zgot more than %d bytesrIz*retr*rArJrJrKrK)�
print_linercrr*r%rLrMr;rr.r/r=rCr�r�r�r[)rrbr�rYr}�fprFrrr� retrlines�s*
z
FTP.retrlinesc
Csp|jd�|j||��L}x*|j|�}|s*P|j|�|r||�qWtdk r^t|t�r^|j�WdQRX|j�S)NzTYPE
I)rdr�readrDr�r�r�r[)rrbr�r�r�r{r}�bufrrr�
storbinary�s
zFTP.storbinaryc
Cs�|jd�|j|���}x||j|jd�}t|�|jkrDtd|j��|sJP|dd�tkrz|dtkrr|dd�}|t}|j|�|r||�qWtdk r�t |t�r�|j
�WdQRX|j�S)NzTYPE Ar zgot more than %d
bytesrIrJrKrK)rdrrLrMr;rr_rDr�r�r�r[)rrbr�r�r}r�rrr� storliness$
z
FTP.storlinescCsd|}|j|�S)NzACCT
)rd)rZpasswordrbrrrr$szFTP.acctcGs4d}x|D]}|d|}q
Wg}|j||j�|S)NZNLST�
)r��append)rr"rb�arg�filesrrr�nlst)s
zFTP.nlstcGsld}d}|dd�r>t|d�td�kr>|dd�|d}}x|D]}|rD|d|}qDW|j||�dS) NZLISTr rr�rKrKrKrK)�typer�)rr"rb�funcr�rrr�dir2s
zFTP.dirc
cs�|r|jddj|�d�|r*d|}nd}g}|j||j�xh|D]`}|jt�jd�\}}}i} x6|dd�jd�D]
}
|
jd�\}}}|| |j�<qxW|| fVqFWdS) Nz
OPTS MLST �;zMLSD
%sZMLSDr�r �=rK) rcrir�r�r<rC� partitionrh�lower)
r�pathZfactsrb�linesrFZfacts_foundrs�name�entryZfact�key�valuerrr�mlsdAs
zFTP.mlsdcCs0|jd|�}|ddkr"t|��|jd|�S)NzRNFR
rrVzRNTO )rcrrd)rZfromnameZtonamerYrrr�rename]sz
FTP.renamecCs.|jd|�}|dd�dkr"|St|��dS)NzDELE
rO�250�200>r�r�)rcr)r�filenamerYrrr�deletedsz
FTP.deletecCsn|dkrPy
|jd�Stk
rL}z|jddd�dkr<�WYdd}~Xq\Xn|dkr\d}d|}|j|�S) Nz..ZCDUPrrO�500rrezCWD
)rdrr")r�dirname�msgrbrrr�cwdls
zFTP.cwdcCs:|jd|�}|dd�dkr6|dd�j�}t|�SdS)NzSIZE
rOZ213)rc�strip�int)rr�rYr>rrrr|yszFTP.sizecCs$|jd|�}|jd�sdSt|�S)NzMKD
�257r)rd�
startswith�parse257)rr�rYrrr�mkd�s
zFTP.mkdcCs|jd|�S)NzRMD
)rd)rr�rrr�rmd�szFTP.rmdcCs
|jd�}|jd�sdSt|�S)NZPWDr�r)rdr�r�)rrYrrr�pwd�s
zFTP.pwdcCs|jd�}|j�|S)NZQUIT)rdr!)rrYrrrr�s
zFTP.quitcCsDz
|j}d|_|dk r|j�Wd|j}d|_|dk r>|j�XdS)N)r+r!r)rr+rrrrr!�sz FTP.close����)rrr�N)N)N)rrr)r�N)N)r�NN)N)9rr
rr.r�FTP_PORTr&�MAXLINErMrr+r-r4r%rrrr#rr1r3�debugr6r0rGrHrNrSr,r[rarcrdrkrnrtrxr~rrr�r�r�r�rr�r�r�r�r�r�r|r�r�r�rr!rrrrrJsh
7
#
c @sjeZdZejZdddddddedf dd�Zddd�Zdd �Z d
d�Z
dd
�Zdd�Zddd�Z
dd�ZdS)�FTP_TLSrNc
Cs�|dk r|dk rtd��|dk r0|dk r0td��|dk s@|dk rVddl}
|
jdtd�||_||_|dkr|tj|j||d�}||_ d|_
tj||||||| �dS)Nz4context and keyfile arguments are mutually
exclusivez5context and certfile arguments are mutually exclusiverzAkeyfile
and certfile are deprecated, use a custom context
insteadrI)�certfile�keyfileF)
rB�warnings�warn�DeprecationWarningr�r��sslZ_create_stdlib_context�ssl_version�context�_prot_prr)rrrrrr�r�r�rrr�rrrr�s"zFTP_TLS.__init__TcCs,|rt|jtj�r|j�tj||||�S)N)r�rr�� SSLSocket�authrr)rrrrZsecurerrrr�sz
FTP_TLS.logincCsft|jtj�rtd��|jtjkr.|jd�}n
|jd�}|jj |j|j
d�|_|jjd|jd�|_
|S)NzAlready using TLSzAUTH TLSzAUTH
SSL)�server_hostnamer$)�moder%)r�rr�r�rBr��PROTOCOL_SSLv23rdr��wrap_socketrr*r%r+)rrYrrrr��s
zFTP_TLS.authcCs0t|jtj�std��|jd�}|jj�|_|S)Nz
not
using TLSZCCC)r�rr�r�rBrdr�)rrYrrr�ccc�s
zFTP_TLS.ccccCs|jd�|jd�}d|_|S)NzPBSZ 0zPROT
PT)rdr�)rrYrrr�prot_ps
zFTP_TLS.prot_pcCs|jd�}d|_|S)NzPROT
CF)rdr�)rrYrrr�prot_cs
zFTP_TLS.prot_ccCs2tj|||�\}}|jr*|jj||jd�}||fS)N)r�)rr~r�r�r�r)rrbr{r}r|rrrr~s
zFTP_TLS.ntransfercmdcCs8dt}|jj|�|j�}|dd�dkr4t|��|S)NsABORrOr\r]r^>r\r]r^)r_rrDrSr)rrFrYrrrra$sz
FTP_TLS.abort)rrrT)N)rr
rr�r�r�rrrr�r�r�r�r~rarrrrr��s!
r�cCs\|dd�dkrt|��tdkr<ddl}|jd|j|jB�atj|�}|sNdSt|jd��S)NrOryrz150
.* \((\d+) bytes\)r ) r�_150_re�re�compile�
IGNORECASE�ASCII�matchr��group)rYr��mrrrrz3s
rzcCs�|dd�dkrt|��tdkr6ddl}|jd|j�atj|�}|sLt|��|j�}dj|dd��}t |d�d>t |d�}||fS) NrOZ227rz#(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)rerP�r7)
r�_227_rer�r�r��searchr�groupsrir�)rYr�r�Znumbersrr&rrrrvGs
rvcCs�|dd�dkrt|��|jd�}|dkr2t|��|jd|d�}|dkrRt|��||d||dkrrt|��||d|�j||d�}t|�dkr�t|��|d}t|d�}||fS)NrOZ229�(r�)r r7)r�findrrhr;r�)rYZpeer�left�right�partsrr&rrrrw[s
rwcCs�|dd�dkrt|��|dd�dkr,dSd}d}t|�}xJ||kr�||}|d}|dkr|||ksr||dkrtP|d}||}q>W|S)NrOr�r7z
"rr �")rr;)rYr�r?�nrZrrrr�qs
r�cCst|�dS)N)r/)rFrrrr��sr�r�Ic Cs�|s|}d|}|j|�|j|�t|jd��\}}|j||�|jd|�}|dd�dkrdt�|jd|�}|dd�d kr�t�|j�|j�dS)
NzTYPE ruzSTOR rO�125ryzRETR
>ryr�>ryr�)rdrvrcrkrr[) �sourceZ
sourcename�targetZ
targetnamer�Z
sourcehostZ
sourceportZtreplyZsreplyrrr�ftpcp�s
r�cCs�ttj�dkr"ttj�tjd�ddl}d}d}x"tjddkrT|d}tjd=q4Wtjddd�dkr�tjddd�}tjd=tjd}t|�}|j |�d}}}y|j|�}Wn(t
k
r�|dk r�tjjd�Yn:Xy|j
|�\}}}Wn"tk
�rtjjd�YnX|j|||�x�tjdd�D]�} | dd�d k�rf|j| dd��nt| dd�dk�r�d
}
| dd��r�|
d| dd�}
|j|
�}n0| dk�r�|j|j�n|jd
| tjjd��q<W|j�dS)NrIrr z-dz-rrz5Could
not open account file -- using anonymous login.z$No account -- using
anonymous login.z-lZCWDr�z-pzRETR
i)r;�sys�argvr/�test�__doc__�exit�netrcrr3r�stderr�writeZauthenticators�KeyErrorrr�rcr6r4r��stdoutr)r�r.ZrcfilerZftpZuseridrrZnetrcobjr+rbrYrrrr��sP
r��__main__)rr�)$r�r'r�__all__r`r�r�� Exceptionrrrrrrr
rrCr_rr��ImportErrorr�r�r�r�ZSSLErrorr�rzr�rvrwr�r�r�r�rrrrr�<module>'sN
d
|
9