???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
2a                 @   sZ  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZmZ dddddgZe jd  Zd	ZG d
d dZe adZdZdZd$ddZG dd dejZG dd dejZG dd deZG dd deZG dd deZG dd dZdd Z e!dkrVe  Z"e"j#Z#de#krle#j$dZ%e&e#de% e' e( dgZ)e#e%d d Z#nd dl*Z)e+e)e#Z,e,e"j-e"j.fe"j/e"j0fe"j1e"j2dZ3e"j4r2yd dl5Z5W n. e6k
r   e7de j8d  e j9d Y nX e5j:d!d" Z;yej4e; W n. e<k
r0   e7d#e j8d  e j9d Y nX yej=  W n e>k
rT   Y nX dS )%    N)warn)get_addr_specget_angle_addrSMTPChannel
SMTPServerDebuggingServer	PureProxyMailmanProxyzPython SMTP proxy version 0.3c               @   s   e Zd Zdd Zdd ZdS )Devnullc             C   s   d S )N )selfmsgr   r   */opt/alt/python36/lib64/python3.6/smtpd.pywritef   s    zDevnull.writec             C   s   d S )Nr   )r   r   r   r   flushg   s    zDevnull.flushN)__name__
__module____qualname__r   r   r   r   r   r   r
   e   s   r
   
z, i    c             C   s4   t tt  tjd |r&t |tjd tj|  d S )N)file)print__doc__globalssysstderrexit)coder   r   r   r   usagep   s    r   c               @   s  e Zd ZdZdZdZejefddZe	dd Z
edd	d	fd
dZdd Zdd Ze	dd Zejdd Ze	dd Zejdd Ze	dd Zejdd Ze	dd Zejdd Ze	dd Zejdd Ze	dd  Zejd!d  Ze	d"d# Zejd$d# Ze	d%d& Zejd'd& Ze	d(d) Zejd*d) Ze	d+d, Zejd-d, Ze	d.d/ Zejd0d/ Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dS )Sr   r      i   c             C   s   | S )Nr   )xr   r   r   <lambda>|   s    zSMTPChannel.<lambda>c             C   s*   yt | jj S  tk
r$   | jS X d S )N)maxcommand_size_limitsvalues
ValueErrorcommand_size_limit)r   r   r   r   max_command_size_limit~   s    z"SMTPChannel.max_command_size_limitNFc       	      C   s  t jj| ||d || _|| _|| _|| _|| _|| _|rF|rFt	d|rdd| _
d| _d| _t| _nd| _
d| _td| _d	| _| j  d| _d
| _| jj  tj | _y|j | _W n: tk
r } z| j  |jd tjkr d S d }~X nX tdt | jt!d | j"d| jt#f  d S )N)mapzFdecode_data and enable_SMTPUTF8 cannot be set to True at the same timer   z
.    s   
   .   
Fr   zPeer:)r   z	220 %s %s)$asynchat
async_chat__init__smtp_serverconnaddrdata_size_limitenable_SMTPUTF8_decode_datar%   _emptystring_linesep_dotsepNEWLINE_newlineord_set_rset_stateseen_greetingextended_smtpr#   clearsocketZgetfqdnfqdnZgetpeernamepeerOSErrorcloseargserrnoZENOTCONNr   reprDEBUGSTREAMpush__version__)	r   Zserverr1   r2   r3   r(   r4   decode_dataerrr   r   r   r/      s@    


zSMTPChannel.__init__c             C   s.   | j | _d | _g | _d| _d| _| jd d S )NFr   s   
)COMMAND
smtp_statemailfromrcpttosrequire_SMTPUTF8	num_bytesset_terminator)r   r   r   r   _set_post_data_state   s    z SMTPChannel._set_post_data_statec             C   s   | j   d| _g | _d S )Nr   )rT   received_datareceived_lines)r   r   r   r   r<      s    zSMTPChannel._set_rset_statec             C   s   t dtd | jS )NzTAccess to __server attribute on SMTPChannel is deprecated, use 'smtp_server' instead   )r   DeprecationWarningr0   )r   r   r   r   __server   s    zSMTPChannel.__serverc             C   s   t dtd || _d S )NzRSetting __server attribute on SMTPChannel is deprecated, set 'smtp_server' insteadrW   )r   rX   r0   )r   valuer   r   r   rY      s    c             C   s   t dtd | jS )NzUAccess to __line attribute on SMTPChannel is deprecated, use 'received_lines' insteadrW   )r   rX   rV   )r   r   r   r   __line   s    zSMTPChannel.__linec             C   s   t dtd || _d S )NzSSetting __line attribute on SMTPChannel is deprecated, set 'received_lines' insteadrW   )r   rX   rV   )r   rZ   r   r   r   r[      s    c             C   s   t dtd | jS )NzRAccess to __state attribute on SMTPChannel is deprecated, use 'smtp_state' insteadrW   )r   rX   rN   )r   r   r   r   __state   s    zSMTPChannel.__statec             C   s   t dtd || _d S )NzPSetting __state attribute on SMTPChannel is deprecated, set 'smtp_state' insteadrW   )r   rX   rN   )r   rZ   r   r   r   r\      s    c             C   s   t dtd | jS )NzXAccess to __greeting attribute on SMTPChannel is deprecated, use 'seen_greeting' insteadrW   )r   rX   r=   )r   r   r   r   
__greeting   s    zSMTPChannel.__greetingc             C   s   t dtd || _d S )NzVSetting __greeting attribute on SMTPChannel is deprecated, set 'seen_greeting' insteadrW   )r   rX   r=   )r   rZ   r   r   r   r]      s    c             C   s   t dtd | jS )NzSAccess to __mailfrom attribute on SMTPChannel is deprecated, use 'mailfrom' insteadrW   )r   rX   rO   )r   r   r   r   
__mailfrom   s    zSMTPChannel.__mailfromc             C   s   t dtd || _d S )NzQSetting __mailfrom attribute on SMTPChannel is deprecated, set 'mailfrom' insteadrW   )r   rX   rO   )r   rZ   r   r   r   r^      s    c             C   s   t dtd | jS )NzQAccess to __rcpttos attribute on SMTPChannel is deprecated, use 'rcpttos' insteadrW   )r   rX   rP   )r   r   r   r   	__rcpttos   s    zSMTPChannel.__rcpttosc             C   s   t dtd || _d S )NzOSetting __rcpttos attribute on SMTPChannel is deprecated, set 'rcpttos' insteadrW   )r   rX   rP   )r   rZ   r   r   r   r_      s    c             C   s   t dtd | jS )NzTAccess to __data attribute on SMTPChannel is deprecated, use 'received_data' insteadrW   )r   rX   rU   )r   r   r   r   __data   s    zSMTPChannel.__datac             C   s   t dtd || _d S )NzRSetting __data attribute on SMTPChannel is deprecated, set 'received_data' insteadrW   )r   rX   rU   )r   rZ   r   r   r   r`     s    c             C   s   t dtd | jS )NzKAccess to __fqdn attribute on SMTPChannel is deprecated, use 'fqdn' insteadrW   )r   rX   rA   )r   r   r   r   __fqdn
  s    zSMTPChannel.__fqdnc             C   s   t dtd || _d S )NzISetting __fqdn attribute on SMTPChannel is deprecated, set 'fqdn' insteadrW   )r   rX   rA   )r   rZ   r   r   r   ra     s    c             C   s   t dtd | jS )NzKAccess to __peer attribute on SMTPChannel is deprecated, use 'peer' insteadrW   )r   rX   rB   )r   r   r   r   __peer  s    zSMTPChannel.__peerc             C   s   t dtd || _d S )NzISetting __peer attribute on SMTPChannel is deprecated, set 'peer' insteadrW   )r   rX   rB   )r   rZ   r   r   r   rb     s    c             C   s   t dtd | jS )NzKAccess to __conn attribute on SMTPChannel is deprecated, use 'conn' insteadrW   )r   rX   r1   )r   r   r   r   __conn   s    zSMTPChannel.__connc             C   s   t dtd || _d S )NzISetting __conn attribute on SMTPChannel is deprecated, set 'conn' insteadrW   )r   rX   r1   )r   rZ   r   r   r   rc   %  s    c             C   s   t dtd | jS )NzKAccess to __addr attribute on SMTPChannel is deprecated, use 'addr' insteadrW   )r   rX   r2   )r   r   r   r   __addr+  s    zSMTPChannel.__addrc             C   s   t dtd || _d S )NzISetting __addr attribute on SMTPChannel is deprecated, set 'addr' insteadrW   )r   rX   r2   )r   rZ   r   r   r   rd   0  s    c             C   s&   t jj| t|d | jrdnd d S )Nz
zutf-8ascii)r-   r.   rI   bytesrQ   )r   r   r   r   r   rI   7  s    
zSMTPChannel.pushc             C   s|   d }| j | jkr| j}n| j | jkr*| j}|r<| j|kr<d S |rR|  jt|7  _| jrl| jj	t
|d n| jj	| d S )Nzutf-8)rN   rM   r'   DATAr3   rR   lenr5   rV   appendstr)r   datalimitr   r   r   collect_incoming_data<  s    z!SMTPChannel.collect_incoming_datac             C   s  | j j| j}tdt|td g | _| j| jkr| jd }| _|sT| j	d d S | j
sdt|d}|jd}|dk r|j }d }n$|d | j }||d d  j }| jr| j| n| j}||kr| j	d d S t| d	| d }| s| j	d
|  d S || d S | j| jkr*| j	d d| _d S | jrT| j| jkrT| j	d d| _d S g }xJ|j| jD ]:}	|	r|	d | jkr|j|	dd   n
|j|	 qfW | jj|| _| j| j| j| jf}
i }| j
s| j| jd}| j j!|
|}| j"  |s| j	d n
| j	| d S )NzData:)r   r   z500 Error: bad syntaxzutf-8 r   z500 Error: line too longZsmtp_z&500 Error: command "%s" not recognizedz451 Internal confusionz552 Error: Too much mail data)mail_optionsrcpt_optionsz250 OK)#r6   joinrV   r   rG   rH   rN   rM   rR   rI   r5   rj   findupperstripr>   r#   r&   getattrrg   r3   splitr7   r8   ri   r:   rU   rB   rO   rP   ro   rp   r0   process_messagerT   )r   lineZszicommandargZmax_szmethodrk   textrE   kwargsstatusr   r   r   found_terminatorL  sd    






zSMTPChannel.found_terminatorc             C   sH   |s| j d d S | jr&| j d d S | j  || _| j d| j  d S )Nz501 Syntax: HELO hostnamez503 Duplicate HELO/EHLOz250 %s)rI   r=   r<   rA   )r   r{   r   r   r   	smtp_HELO  s    

zSMTPChannel.smtp_HELOc             C   s   |s| j d d S | jr&| j d d S | j  || _d| _| j d| j  | jrr| j d| j  | jd  d7  < | js| j d | jr| j d	 | jd  d
7  < | j d d S )Nz501 Syntax: EHLO hostnamez503 Duplicate HELO/EHLOTz250-%sz250-SIZE %sMAIL   z250-8BITMIMEz250-SMTPUTF8
   z250 HELP)	rI   r=   r<   r>   rA   r3   r#   r5   r4   )r   r{   r   r   r   	smtp_EHLO  s&    



zSMTPChannel.smtp_EHLOc             C   s   |r| j d n
| j d d S )Nz501 Syntax: NOOPz250 OK)rI   )r   r{   r   r   r   	smtp_NOOP  s    zSMTPChannel.smtp_NOOPc             C   s   | j d | j  d S )Nz221 Bye)rI   Zclose_when_done)r   r{   r   r   r   	smtp_QUIT  s    
zSMTPChannel.smtp_QUITc             C   s0   t |}|d | j |kr,||d  j S dS )Nr   )rh   rs   rt   )r   keywordr{   Zkeylenr   r   r   _strip_command_keyword  s    z"SMTPChannel._strip_command_keywordc             C   sF   |sdS |j  jdr$t|\}}nt|\}}|s<||fS |j|fS )Nr   <)r   r   )lstrip
startswithr   r   Z	addr_spec)r   r{   addressrestr   r   r   _getaddr  s    zSMTPChannel._getaddrc             C   sN   i }xD|D ]<}|j d\}}}|j  s2|r6| r6d S |r>|nd||< q
W |S )N=T)	partitionisalnum)r   paramsresultZparameqrZ   r   r   r   
_getparams  s    
zSMTPChannel._getparamsc             C   s  |rd}|j  }|dkr$| jd q|dkr8| jd q|dkr^d}| jrR||7 }| j| q|dkrd	}| jrx||7 }| j| q|d
kr| jd q|dkr| jd q|dkr| jd q|dkr| jd q|dkr| jd q| jd n
| jd d S )Nz [SP <mail-parameters>]ZEHLOz250 Syntax: EHLO hostnameZHELOz250 Syntax: HELO hostnamer   z 250 Syntax: MAIL FROM: <address>ZRCPTz250 Syntax: RCPT TO: <address>rg   z250 Syntax: DATAZRSETz250 Syntax: RSETZNOOPz250 Syntax: NOOPZQUITz250 Syntax: QUITZVRFYz250 Syntax: VRFY <address>zD501 Supported commands: EHLO HELO MAIL RCPT DATA RSET NOOP QUIT VRFYzD250 Supported commands: EHLO HELO MAIL RCPT DATA RSET NOOP QUIT VRFY)rs   rI   r>   )r   r{   ZextendedZlc_argr   r   r   r   	smtp_HELP  s:    zSMTPChannel.smtp_HELPc             C   s@   |r2| j |\}}|r"| jd q<| jd|  n
| jd d S )NzB252 Cannot VRFY user, but will accept message and attempt deliveryz502 Could not VRFY %sz501 Syntax: VRFY <address>)r   rI   )r   r{   r   r   r   r   r   	smtp_VRFY  s    zSMTPChannel.smtp_VRFYc             C   s  | j s| jd d S td|td d}| jr4|d7 }|d krJ| j| d S | jd|}| j|\}}|sv| j| d S | j r|r| j| d S | jr| jd d S |j j	 | _
| j| j
}|d kr| j| d S | js |jdd	}|dkr | jd d S | jr>|jdd}|dkr&d| _n|dk	r>| jd d S |jdd }|r|j sh| j| d S | jrt|| jkr| jd d S t|j dkr| jd d S || _td| jtd | jd d S )Nz503 Error: send HELO firstz	===> MAIL)r   z 501 Syntax: MAIL FROM: <address>z [SP <mail-parameters>]zFROM:z503 Error: nested MAIL commandZBODY7BIT8BITMIMEz1501 Error: BODY can only be one of 7BIT, 8BITMIMEZSMTPUTF8FTz&501 Error: SMTPUTF8 takes no argumentsZSIZEz:552 Error: message size exceeds fixed maximum message sizer   z:555 MAIL FROM parameters not recognized or not implementedzsender:z250 OK)r   r   )r=   rI   r   rH   r>   r   r   rO   rs   rv   ro   r   r5   popr4   rQ   isdigitr3   intrh   keys)r   r{   	syntaxerrr   r   Zbodysmtputf8sizer   r   r   	smtp_MAIL  sh    














zSMTPChannel.smtp_MAILc             C   s  | j s| jd d S td|td | js6| jd d S d}| jrH|d7 }|d kr^| j| d S | jd|}| j|\}}|s| j| d S | j r|r| j| d S |j j	 | _
| j| j
}|d kr| j| d S t|j dkr| jd	 d S | jj| td
| jtd | jd d S )Nz503 Error: send HELO firstz	===> RCPT)r   z503 Error: need MAIL commandz501 Syntax: RCPT TO: <address>z [SP <mail-parameters>]zTO:r   z8555 RCPT TO parameters not recognized or not implementedzrecips:z250 OK)r=   rI   r   rH   rO   r>   r   r   rs   rv   rp   r   rh   r   rP   ri   )r   r{   r   r   r   r   r   r   	smtp_RCPT7  s@    






zSMTPChannel.smtp_RCPTc             C   s(   |r| j d d S | j  | j d d S )Nz501 Syntax: RSETz250 OK)rI   r<   )r   r{   r   r   r   	smtp_RSETZ  s
    
zSMTPChannel.smtp_RSETc             C   sZ   | j s| jd d S | js(| jd d S |r:| jd d S | j| _| jd | jd d S )Nz503 Error: send HELO firstz503 Error: need RCPT commandz501 Syntax: DATAs   
.
z#354 End data with <CR><LF>.<CR><LF>)r=   rI   rP   rg   rN   rS   )r   r{   r   r   r   	smtp_DATAa  s    



zSMTPChannel.smtp_DATAc             C   s   | j d d S )Nz502 EXPN not implemented)rI   )r   r{   r   r   r   	smtp_EXPNp  s    zSMTPChannel.smtp_EXPN),r   r   r   rM   rg   r&   collectionsdefaultdictr#   propertyr'   DATA_SIZE_DEFAULTr/   rT   r<   Z_SMTPChannel__serversetterZ_SMTPChannel__lineZ_SMTPChannel__stateZ_SMTPChannel__greetingZ_SMTPChannel__mailfromZ_SMTPChannel__rcpttosZ_SMTPChannel__dataZ_SMTPChannel__fqdnZ_SMTPChannel__peerZ_SMTPChannel__connZ_SMTPChannel__addrrI   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   w   s`   &	>#6#c               @   s2   e Zd ZeZedddfddZdd Zdd ZdS )	r   NFc             C   s   || _ || _|| _|| _|| _|r.|r.tdtjj| |d yNt	j
|dt	ji}| j|d d |d d  | j  | j| | jd W n   | j   Y n(X td| jjtjtj ||f td d S )	NzFdecode_data and enable_SMTPUTF8 cannot be set to True at the same time)r(   typer   r      z0%s started at %s
	Local addr: %s
	Remote addr:%s)r   )Z
_localaddr_remoteaddrr3   r4   r5   r%   asyncore
dispatcherr/   r@   ZgetaddrinfoZSOCK_STREAMZcreate_socketZset_reuse_addrZbindZlistenrD   r   	__class__r   timectimerH   )r   Z	localaddrZ
remoteaddrr3   r(   r4   rK   Zgai_resultsr   r   r   r/   x  s*    

zSMTPServer.__init__c             C   s6   t dt| td | j| ||| j| j| j| j}d S )NzIncoming connection from %s)r   )r   rG   rH   channel_classr3   Z_mapr4   r5   )r   r1   r2   Zchannelr   r   r   handle_accepted  s    zSMTPServer.handle_acceptedc             K   s   t d S )N)NotImplementedError)r   rB   rO   rP   rk   r~   r   r   r   rw     s    zSMTPServer.process_message)	r   r   r   r   r   r   r/   r   rw   r   r   r   r   r   t  s
   c               @   s   e Zd Zdd Zdd ZdS )r   c             C   sr   d}|j  }x`|D ]X}|rP| rPd|d  }t|tsDt|jd}t| d}t|tsbt|}t| qW d S )Nr   zX-Peer: r   zutf-8)
splitlines
isinstancerj   rG   encoder   )r   rB   rk   Z	inheaderslinesrx   Z
peerheaderr   r   r   _print_message_content  s    



z&DebuggingServer._print_message_contentc             K   sX   t d |r@|jdr&t d|d   |jdr@t d|d   | j|| t d d S )Nz%---------- MESSAGE FOLLOWS ----------ro   zmail options: %srp   zrcpt options: %s
z%------------ END MESSAGE ------------)r   getr   )r   rB   rO   rP   rk   r~   r   r   r   rw     s    

zDebuggingServer.process_messageN)r   r   r   r   rw   r   r   r   r   r     s   c                   s,   e Zd Z fddZdd Zdd Z  ZS )r   c                s.   d|kr|d rt dtt| j|| d S )Nr4   z$PureProxy does not support SMTPUTF8.)r%   superr   r/   )r   rE   r~   )r   r   r   r/     s    zPureProxy.__init__c       	      C   sh   |j d}d}x|D ]}|sP |d7 }qW |j|d|d   tj|}| j|||}td|td d S )Nr   r   r   z
X-Peer: %szwe got some refusals:)r   )rv   insertr9   rq   _deliverr   rH   )	r   rB   rO   rP   rk   r   ry   rx   refusedr   r   r   rw     s    


zPureProxy.process_messagec             C   s   dd l }i }yB|j }|j| jd | jd  z|j|||}W d |j  X W n |jk
r } ztdtd |j	}W Y d d }~X nj t
|jfk
r } zHtd|jtd t|dd	}t|dd}	x|D ]}
||	f||
< qW W Y d d }~X nX |S )
Nr   r   zgot SMTPRecipientsRefused)r   ZgotZ	smtp_codeZ
smtp_errorignore)smtplibZSMTPZconnectr   ZsendmailquitZSMTPRecipientsRefusedr   rH   Z
recipientsrC   ZSMTPExceptionr   ru   )r   rO   rP   rk   r   r   seZerrcodeerrmsgrr   r   r   r     s$    
"zPureProxy._deliver)r   r   r   r/   rw   r   __classcell__r   r   )r   r   r     s   c                   s$   e Zd Z fddZdd Z  ZS )r	   c                s.   d|kr|d rt dtt| j|| d S )Nr4   z'MailmanProxy does not support SMTPUTF8.)r%   r   r   r/   )r   rE   r~   )r   r   r   r/     s    zMailmanProxy.__init__c             C   s:  ddl m} ddlm} ddlm} ddlm} g }	x~|D ]v}
|
j jdd }|jd}t|dkrhq:|d }t|dkr|d	 }nd
}|j	| s:|d!krq:|	j
|
||f q:W x|	D ]\}
}}|j|
 qW tddj|td |r| j|||}td|td i }||}|j|}|jds2||d< |jdsPtjtj |d< x|	D ]\}
}}td|
td |j|}|s|j|dd}|||< |d
kr|j|d	d n|dkr|j|d	d nh|dkr|j|d	d nN|dkr|j|d	d n4|d"krV|dkrd|d< nd |d< |j|d	d qVW d S )#Nr   )StringIO)Utils)Message)MailList@-rW   r   r   adminownerrequestrq   leavezforwarding recips:rn   )r   zwe got refusals:fromZFromZdateZDatezsending message to)lock)tolist)Ztoadmin)Ztoowner)Z	torequestZ	subscribeZSubjectZunsubscribe)r   r   r   r   rq   r   )rq   r   )ior   ZMailmanr   r   r   lowerrv   rh   Zlist_existsri   remover   rq   rH   r   r   r   r   ZEnqueue)r   rB   rO   rP   rk   r   r   r   r   Z	listnamesZrcptZlocalpartsZlistnamerz   r   Zmlistsr   r   Zmlistr   r   r   rw     sd    











zMailmanProxy.process_message)r   r   r   r/   rw   r   r   r   )r   r   r	     s   c               @   s   e Zd ZdZdZdZdZdS )OptionsTr   NF)r   r   r   setuid	classname
size_limitr4   r   r   r   r   r   _  s   r   c        
   !   C   st  y.t j tjdd  dddddddd	g\} }W n. t jk
r\ } ztd| W Y d d }~X nX t }x| D ]\}}|d'krtd qj|d(krtt tjd qj|d)krd|_	qj|d*kr||_
qj|d+krtjaqj|d,krd|_qj|d-krjyt|}||_W qj   td| tjd tjd Y qjX qjW t|dk r@d}d}nPt|dk r\|d }d}n4t|d k r||d }|d }ntdd!tj|  |jd"}	|	dk rtdd#|  |d |	 |_yt||	d d  |_W n$ tk
r   tdd$|  Y nX |jd"}	|	dk r"tdd%|  |d |	 |_yt||	d d  |_W n$ tk
rn   tdd&|  Y nX |S ).Nr   z	nVhc:s:duzclass=Znosetuidversionhelpzsize=debugr   -h--helpr   -V	--version-n
--nosetuidF-c--class-d--debug-u
--smtputf8T-s--sizezInvalid size: )r   zlocalhost:8025zlocalhost:25rW      zInvalid arguments: %s:zBad local spec: %szBad local port: %szBad remote spec: %szBad remote port: %s)r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )getoptr   argverrorr   r   r   rJ   r   r   r   r   rH   r4   r   r   rh   
COMMASPACErq   rr   	localhost	localportr%   
remotehost
remoteport)
ZoptsrE   r   optionsoptr{   Zint_sizeZ	localspecZ
remotespecry   r   r   r   	parseargsf  sp    






r   __main__r)   r   )r4   z7Cannot import module "pwd"; try running with -n option.)r   nobodyrW   z3Cannot setuid "nobody"; try running with -n option.)r   )?r   osrF   r   r   r@   r   r-   r   warningsr   Zemail._header_value_parserr   r   __all__r   ZprogramrJ   r
   rH   r9   r   r   r   r.   r   r   r   r   r   r	   r   r   r   r   r   rfindZlastdot
__import__r   localsmodr   ru   class_r   r   r   r   r   r4   proxyr   pwdImportErrorr   r   r   getpwnamr   PermissionErrorZloopKeyboardInterruptr   r   r   r   <module>P   sv   

    M-SB




