File: //lib64/python3.6/__pycache__/smtpd.cpython-36.opt-2.pyc
3
  \��  �               @   sZ  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZm
Z
 dddddgZe jd  Zd	ZG d
d� d�Ze� adZd
ZdZd$dd�ZG dd� dej�ZG dd� dej�ZG dd� de�ZG dd� de�ZG dd� de�ZG dd� d�Zdd� Z e!dk�rVe � Z"e"j#Z#de#k�rle#j$d�Z%e&e#de%� e'� e(� dg�Z)e#e%d d� Z#nd dl*Z)e+e)e#�Z,e,e"j-e"j.fe"j/e"j0fe"j1e"j2d�Z3e"j4�r2yd dl5Z5W n. e6k
�r�   e7de j8d � e j9d� Y nX e5j:d!�d" Z;yej4e;� W n. e<k
�r0   e7d#e j8d � e j9d� Y nX yej=�  W n e>k
�rT   Y nX dS )%�    N)�warn)�
get_addr_spec�get_angle_addr�SMTPChannel�
SMTPServer�DebuggingServer�	PureProxy�MailmanProxyzPython SMTP proxy version 0.3c               @   s   e Zd Zdd� Zdd� ZdS )�Devnullc             C   s   d S )N� )�self�msgr   r   �/usr/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 tt�  tjd� |r&t |tjd� tj| � d S )N)�file)�print�__doc__�globals�sys�stderr�exit)�coder
   r   r   r   �usagep   s    r   c               @   s�  e Zd ZdZdZdZejefdd��Ze	dd� �Z
edd	d	fd
d�Zdd
� Z
dd� Ze	dd� �Zejdd� �Ze	dd� �Zejdd� �Ze	dd� �Zejdd� �Ze	dd� �Zejdd� �Ze	dd� �Zejdd� �Ze	dd � �Zejd!d � �Ze	d"d#� �Zejd$d#� �Ze	d%d&� �Zejd'd&� �Ze	d(d)� �Zejd*d)� �Ze	d+d,� �Zejd-d,� �Ze	d.d/� �Zejd0d/� �Zd1d2� Zd3d4� Zd5d6� Zd7d8� Zd9d:� Zd;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+dS )Sr   r   �   i   c             C   s   | S )Nr   )�xr   r   r   �<lambda>|   s    zSMTPChannel.<lambda>c             C   s*   yt | jj� �S  tk
r$   | jS 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 jj| ||d� || _|| _|| _|| _|| _|| _|rF|rFt	d��|rdd| _
d| _d| _t
| _nd| _
d| _td�| _d	| _| j�  d| _d
| _| jj�  tj� | _y|j� | _W n: tk
r� } z| j�  |jd tjkr� d S d }~X nX tdt | j�t!d
� | j"d| jt#f � d S )N)�mapzFdecode_data and enable_SMTPUTF8 cannot be set to True at the same timer   z
�.�    s   
�   .�   
Fr   zPeer:)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�socketZgetfqdn�fqdnZgetpeername�peer�OSError�close�args�errnoZENOTCONNr   �repr�DEBUGSTREAM�push�__version__)	r   Zserverr1   r2   r3   r(   r4   �decode_data�errr   r   r   r/   �   s@    
zSMTPChannel.__init__c             C   s.   | j | _d | _g | _d| _d| _| jd� 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<