
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
³Y„j8„  ã               @   s–  d ddddddddd	d
dddddddgZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 G dd „ d e
ƒZG dd„ de
ƒZG dd„ de
ƒZG dd„ de
ƒZG dd„ deƒZG dd„ de
ƒZG dd„ de
ƒZG dd„ de
ƒZG d d„ de
ƒZG d!d	„ d	e
ƒZG d"d
„ d
e
ƒZG d#d„ de
ƒZG d$d„ de
ƒZG d%d„ de
ƒZG d&d„ deƒZG d'd„ de
ƒZd(d)d/d1d+œZG d,d„ de
ƒZG d-d„ de
ƒZd.S )2ÚRich_SourceÚRich_DestinationÚRich_ServiceÚ	Rich_PortÚRich_ProtocolÚRich_MasqueradeÚRich_IcmpBlockÚRich_IcmpTypeÚRich_SourcePortÚRich_ForwardPortÚRich_LogÚ
Rich_AuditÚRich_AcceptÚRich_RejectÚ	Rich_DropÚ	Rich_MarkÚ
Rich_LimitÚ	Rich_Ruleé    )Ú	functions)Úcheck_ipset_name)ÚREJECT_TYPES)Úerrors)ÚFirewallErrorc               @   s   e Zd Zddd„Zdd„ ZdS )r   Fc             C   s˜   || _ | j dkrd | _ || _| jdks0| jd kr8d | _n| jd k	rN| jjƒ | _|| _| jdkrdd | _|| _| j d kr”| jd kr”| jd kr”ttjdƒ‚d S )NÚ zno address, mac and ipset)ÚaddrÚmacÚupperÚipsetÚinvertr   r   ÚINVALID_RULE)Úselfr   r   r   r   © r!   ú/usr/lib/python3.6/rich.pyÚ__init__$   s    


zRich_Source.__init__c             C   sj   d| j rdnd }| jd k	r*|d| j  S | jd k	rB|d| j  S | jd k	rZ|d| j  S ttjdƒ‚d S )Nz	source%s z NOTr   zaddress="%s"zmac="%s"z
ipset="%s"zno address, mac and ipset)r   r   r   r   r   r   r   )r    Úretr!   r!   r"   Ú__str__5   s    


zRich_Source.__str__N)F)Ú__name__Ú
__module__Ú__qualname__r#   r%   r!   r!   r!   r"   r   #   s   
c               @   s   e Zd Zddd„Zdd„ ZdS )r   Fc             C   sV   || _ | j dkrd | _ || _| jdkr,d | _|| _| j d krR| jd krRttjdƒ‚d S )Nr   zno address and ipset)r   r   r   r   r   r   )r    r   r   r   r!   r!   r"   r#   B   s    

zRich_Destination.__init__c             C   sR   d| j rdnd }| jd k	r*|d| j  S | jd k	rB|d| j  S ttjdƒ‚d S )Nzdestination%s z NOTr   zaddress="%s"z
ipset="%s"zno address and ipset)r   r   r   r   r   r   )r    r$   r!   r!   r"   r%   N   s    

zRich_Destination.__str__N)F)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   A   s   
c               @   s   e Zd Zdd„ Zdd„ ZdS )r   c             C   s
   || _ d S )N)Úname)r    r)   r!   r!   r"   r#   Y   s    zRich_Service.__init__c             C   s
   d| j  S )Nzservice name="%s")r)   )r    r!   r!   r"   r%   \   s    zRich_Service.__str__N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   X   s   c               @   s   e Zd Zdd„ Zdd„ ZdS )r   c             C   s   || _ || _d S )N)ÚportÚprotocol)r    r*   r+   r!   r!   r"   r#   `   s    zRich_Port.__init__c             C   s   d| j | jf S )Nzport port="%s" protocol="%s")r*   r+   )r    r!   r!   r"   r%   d   s    zRich_Port.__str__N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   _   s   c               @   s   e Zd Zdd„ ZdS )r	   c             C   s   d| j | jf S )Nz#source-port port="%s" protocol="%s")r*   r+   )r    r!   r!   r"   r%   h   s    zRich_SourcePort.__str__N)r&   r'   r(   r%   r!   r!   r!   r"   r	   g   s   c               @   s   e Zd Zdd„ Zdd„ ZdS )r   c             C   s
   || _ d S )N)Úvalue)r    r,   r!   r!   r"   r#   m   s    zRich_Protocol.__init__c             C   s
   d| j  S )Nzprotocol value="%s")r,   )r    r!   r!   r"   r%   p   s    zRich_Protocol.__str__N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   l   s   c               @   s   e Zd Zdd„ Zdd„ ZdS )r   c             C   s   d S )Nr!   )r    r!   r!   r"   r#   t   s    zRich_Masquerade.__init__c             C   s   dS )NÚ
masquerader!   )r    r!   r!   r"   r%   w   s    zRich_Masquerade.__str__N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   s   s   c               @   s   e Zd Zdd„ Zdd„ ZdS )r   c             C   s
   || _ d S )N)r)   )r    r)   r!   r!   r"   r#   {   s    zRich_IcmpBlock.__init__c             C   s
   d| j  S )Nzicmp-block name="%s")r)   )r    r!   r!   r"   r%   ~   s    zRich_IcmpBlock.__str__N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   z   s   c               @   s   e Zd Zdd„ Zdd„ ZdS )r   c             C   s
   || _ d S )N)r)   )r    r)   r!   r!   r"   r#   ‚   s    zRich_IcmpType.__init__c             C   s
   d| j  S )Nzicmp-type name="%s")r)   )r    r!   r!   r"   r%   …   s    zRich_IcmpType.__str__N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   �   s   c               @   s   e Zd Zdd„ Zdd„ ZdS )r
   c             C   s<   || _ || _|| _|| _| jd kr(d| _| jd kr8d| _d S )Nr   )r*   r+   Úto_portÚ
to_address)r    r*   r+   r.   r/   r!   r!   r"   r#   ‰   s    

zRich_ForwardPort.__init__c             C   s<   d| j | j| jdkrd| j nd| jdkr4d| j ndf S )Nz(forward-port port="%s" protocol="%s"%s%sr   z to-port="%s"z to-addr="%s")r*   r+   r.   r/   )r    r!   r!   r"   r%   ”   s    zRich_ForwardPort.__str__N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r
   ˆ   s   c               @   s   e Zd Zddd„Zdd„ ZdS )r   Nc             C   s   || _ || _|| _d S )N)ÚprefixÚlevelÚlimit)r    r0   r1   r2   r!   r!   r"   r#   ›   s    zRich_Log.__init__c             C   s>   d| j rd| j  nd| jr$d| j nd| jr6d| j ndf S )Nz	log%s%s%sz prefix="%s"r   z level="%s"z %s)r0   r1   r2   )r    r!   r!   r"   r%   ¡   s    zRich_Log.__str__)NNN)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   š   s   
c               @   s   e Zd Zddd„Zdd„ ZdS )r   Nc             C   s
   || _ d S )N)r2   )r    r2   r!   r!   r"   r#   ¨   s    zRich_Audit.__init__c             C   s   d| j rd| j  nd S )Nzaudit%sz %sr   )r2   )r    r!   r!   r"   r%   ¬   s    zRich_Audit.__str__)N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   §   s   
c               @   s   e Zd Zddd„Zdd„ ZdS )r   Nc             C   s
   || _ d S )N)r2   )r    r2   r!   r!   r"   r#   °   s    zRich_Accept.__init__c             C   s   d| j rd| j  nd S )Nzaccept%sz %sr   )r2   )r    r!   r!   r"   r%   ³   s    zRich_Accept.__str__)N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   ¯   s   
c               @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	r   Nc             C   s   || _ || _d S )N)Útyper2   )r    Z_typer2   r!   r!   r"   r#   ·   s    zRich_Reject.__init__c             C   s,   d| j rd| j  nd| jr$d| j ndf S )Nz
reject%s%sz
 type="%s"r   z %s)r3   r2   )r    r!   r!   r"   r%   »   s    zRich_Reject.__str__c             C   sT   | j rP|sttjdƒ‚|dkrP| j t| krPdjt| ƒ}ttjd| j |f ƒ‚d S )Nz9When using reject type you must specify also rule family.Úipv4Úipv6z, z%Wrong reject type %s.
Use one of: %s.)r4   r5   )r3   r   r   r   r   Újoin)r    ÚfamilyZvalid_typesr!   r!   r"   Úcheck¿   s    zRich_Reject.check)NN)r&   r'   r(   r#   r%   r8   r!   r!   r!   r"   r   ¶   s   
c               @   s   e Zd Zdd„ ZdS )r   c             C   s   d| j rd| j  nd S )Nzdrop%sz %sr   )r2   )r    r!   r!   r"   r%   É   s    zRich_Drop.__str__N)r&   r'   r(   r%   r!   r!   r!   r"   r   È   s   c               @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	r   Nc             C   s   || _ || _d S )N)Úsetr2   )r    Z_setr2   r!   r!   r"   r#   Î   s    zRich_Mark.__init__c             C   s   d| j | jrd| j ndf S )Nzmark set=%s%sz %sr   )r9   r2   )r    r!   r!   r"   r%   Ò   s    zRich_Mark.__str__c             C   s�   | j d k	r| j }nttjdƒ‚d|krv|jdƒ}t|ƒdkrHttj|ƒ‚tj|d ƒ shtj|d ƒ rŒttj|ƒ‚ntj|ƒsŒttj|ƒ‚d S )Nzno value setú/é   r   é   )r9   r   r   ZINVALID_MARKÚsplitÚlenr   ZcheckUINT32)r    ÚxÚsplitsr!   r!   r"   r8   Ö   s    


zRich_Mark.check)N)r&   r'   r(   r#   r%   r8   r!   r!   r!   r"   r   Í   s   
r<   é<   é   )ÚsÚmÚhÚdc               @   s‚   e Zd Zd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
dd„ Ze	dd„ ƒZdd„ Zdd„ ZdS )r   Nc             C   s   || _ || _d S )N)r,   Úburst)r    r,   rG   r!   r!   r"   r#   ñ   s    zRich_Limit.__init__c             C   s   | j ƒ  | jƒ  d S )N)Úvalue_parseÚburst_parse)r    r!   r!   r"   r8   õ   s    zRich_Limit.checkc             C   s   | j S )N)Ú_value)r    r!   r!   r"   r,   ù   s    zRich_Limit.valuec             C   sf   |d krd | _ d S y| j|ƒ\}}W n tk
r<   |}Y nX |› d|› �}t| dd ƒ|krb|| _ d S )Nr:   rJ   )rJ   Ú_value_parser   Úgetattr)r    r,   ÚrateÚdurationÚvr!   r!   r"   r,   ý   s    
c             C   s   | j S )N)Ú_burst)r    r!   r!   r"   rG     s    zRich_Limit.burstc             C   s\   |d krd | _ d S y| j|ƒ}W n tk
r8   |}Y n
X t|ƒ}t| dd ƒ|krX|| _ d S )NrP   )rP   Ú_burst_parser   ÚstrrL   )r    rG   Úbr!   r!   r"   rG     s    
c             C   sâ   d }d| kr| j dƒ}| s(t|ƒdkr4ttj| ƒ‚|\}}yt|ƒ}W n   ttj| ƒ‚Y nX |dkrv|d d… }|dk s†|dkr’ttj| ƒ‚dt|  | dkr¸ttjd| f ƒ‚|dkrÚ|dkrÚttjd| f ƒ‚||fS )Nr:   r;   ÚsecondÚminuteÚhourÚdayr<   rC   rD   rE   rF   i'  r   z%s too fastz%s too slow)rT   rU   rV   rW   )rC   rD   rE   rF   )r=   r>   r   r   ÚINVALID_LIMITÚintÚDURATION_TO_MULT)r,   r@   rM   rN   r!   r!   r"   rK     s&    
zRich_Limit._value_parsec             C   s   | j | jƒS )N)rK   rJ   )r    r!   r!   r"   rH   :  s    zRich_Limit.value_parsec          	   C   sR   | d krd S yt | ƒ}W n   ttj| ƒ‚Y nX |dk sB|dkrNttj| ƒ‚|S )Nr<   i€–˜ )rY   r   r   rX   )rG   rS   r!   r!   r"   rQ   =  s    zRich_Limit._burst_parsec             C   s   | j | jƒS )N)rQ   rP   )r    r!   r!   r"   rI   K  s    zRich_Limit.burst_parsec             C   s,   d| j › d�}| jd k	r(|d| j› �7 }|S )Nzlimit value="ú"z burst=)rJ   rP   )r    rC   r!   r!   r"   r%   N  s    
zRich_Limit.__str__)N)r&   r'   r(   r#   r8   Úpropertyr,   ÚsetterrG   ÚstaticmethodrK   rH   rQ   rI   r%   r!   r!   r!   r"   r   ð   s   
c               @   s>   e Zd ZdZdZddd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )r   i €  iÿ  Nr   c             C   sV   |d k	rt |ƒ| _nd | _|| _d | _d | _d | _d | _d | _d | _|rR| j	|ƒ d S )N)
rR   r7   ÚpriorityÚsourceÚdestinationÚelementÚlogÚauditÚactionÚ_import_from_string)r    r7   Úrule_strr_   r!   r!   r"   r#   X  s    zRich_Rule.__init__c             C   s”   g }x|t j|ƒD ]n}d|krp|jdƒ}t|ƒdksF|d  sF|d  rVttjd| ƒ‚|j|d |d dœƒ q|jd|iƒ qW |jddiƒ |S )	z Lexical analysis ú=r;   r   r<   zinternal error in _lexer(): %s)Ú	attr_nameÚ
attr_valuerb   ÚEOL)r   Z	splitArgsr=   r>   r   r   r   Úappend)r    rg   ÚtokensÚrÚattrr!   r!   r"   Ú_lexeri  s    
 
zRich_Rule._lexerc             C   sò  |st tjdƒ‚tj|ƒ}d| _d | _d | _d | _d | _	d | _
d | _d | _| j|ƒ}|rv|d jdƒdkrvt tjdƒ‚i }g }d}�x`|| jdƒdko |dgk�sä|| jdƒ}|| jdƒ}|| jdƒ}|� rò|dHk�ràt tjd| ƒ‚� nî|dIk�rÐ|dk�r| j�rt tjd+ƒ‚n²|dk�r<| j�r<t tjd,ƒ‚n’|dJk�rf| j	�rft tjd-|| j	f ƒ‚nh|d"k�r†| j
�r†t tjd.ƒ‚nH|d#k�r¦| j�r¦t tjd/ƒ‚n(|dKk�rà| j�ràt tjd0|| jf ƒ‚nt tjd1| ƒ‚t|ƒdk�rþ|t|ƒd2  nd3}	|	d3k�rŽ| �r`|�r`|d	k�r2t tjd4ƒ‚n,|dk�rJt tjd5ƒ‚nt tjd6||f ƒ‚n*d|k�r€t tjd7||f ƒ‚n
|jdƒ �nL|	dk�rD|d	k�rÄ|dLk�r¼t tjd:| ƒ‚|| _n||dk�ryt|ƒ| _W n& tk
�r   t tjd;| ƒ‚Y nX n:|�r6|dk�rd<}
nd=||f }
t tj|
ƒ‚n
|j|ƒ �n–|	dk�r¼|dMk�rb|||< nV|dNk�rvd>|d< nBt|jd
ƒ|jdƒ|jdƒ|jdd?ƒƒ| _|jƒ  |jƒ  |d2 }�n|	dk�r,|dOk�rÚ|||< nN|dPk�rîd>|d< n:t|jd
ƒ|jdƒ|jdd?ƒƒ| _|jƒ  |jƒ  |d2 }�n®|	dk�rd|dk�rTt|ƒ| _	|jƒ  nt tjd@ƒ‚�nv|	dk�rœ|dk�rŒt|ƒ| _	|jƒ  nt tjdAƒ‚�n>|	dk�rî|dQk�rº|||< n0t|jdƒ|jdƒƒ| _	|jƒ  |jƒ  |d2 }�nì|	dk�r&|dk�rt|ƒ| _	|jƒ  nt tjdBƒ‚�n´|	dk�r^|dk�rNt|ƒ| _	|jƒ  nt tjdCƒ‚�n||	dk�rŒtƒ | _	|jƒ  |jƒ  |d2 }�nN|	d k�rî|dRk�rª|||< n@t|jdƒ|jdƒ|jdƒ|jdƒƒ| _	|jƒ  |jƒ  |d2 }�nì|	d!k�r@|dSk�r|||< n0t|jdƒ|jdƒƒ| _	|jƒ  |jƒ  |d2 }�nš|	d"k�r°|dTk�r^|||< nN|d(k�rt|jd(ƒ n8t |jdƒ|jdƒ|jd(ƒƒ| _
|jƒ  |jƒ  |d2 }�n*|	d#k�rü|d(k�rÐ|jd(ƒ n(t!|jd(ƒƒ| _|jƒ  |jƒ  |d2 }�nÞ|	d$k�rH|d(k�r|jd(ƒ n(t"|jd(ƒƒ| _|jƒ  |jƒ  |d2 }�n’|	d%k�r”|d(k�rh|jd(ƒ n(t#|jd(ƒƒ| _|jƒ  |jƒ  |d2 }�nF|	d&k�rú|dk�r²|||< nF|d(k�rÈ|jd(ƒ n0t$|jdƒ|jd(ƒƒ| _|jƒ  |jƒ  |d2 }nà|	d'k�r`|dk�r|||< nF|d(k�r.|jd(ƒ n0t%|jdƒ|jd(ƒƒ| _|jƒ  |jƒ  |d2 }nz|	d(k�rÚ|dUk�r„||dD|› �< nVdE|k�ršt tjdFƒ‚t&|dE |jdGƒƒ|d(< |jdEd ƒ |jdGd ƒ |jƒ  |d2 }|d2 }q†W | j'ƒ  d S )VNz
empty ruler   rb   rk   Úruleri   rj   r_   r7   Úaddressr   r   r   r,   r*   r+   úto-portúto-addrr)   r0   r1   r3   r9   rG   zbad attribute '%s'r`   ra   Úserviceú
icmp-blockú	icmp-typer-   úforward-portúsource-portrc   rd   ÚacceptÚdropÚrejectÚmarkr2   ÚnotÚNOTzmore than one 'source' elementz#more than one 'destination' elementzFmore than one element. There cannot be both '%s' and '%s' in one rule.zmore than one 'log' elementzmore than one 'audit' elementzOmore than one 'action' element. There cannot be both '%s' and '%s' in one rule.zunknown element %sr<   r   z0'family' outside of rule. Use 'rule family=...'.z4'priority' outside of rule. Use 'rule priority=...'.z:'%s' outside of any element. Use 'rule <element> %s= ...'.z,'%s' outside of rule. Use 'rule ... %s ...'.r4   r5   zH'family' attribute cannot have '%s' value. Use 'ipv4' or 'ipv6' instead.z(invalid 'priority' attribute value '%s'.zdwrong 'protocol' usage. Use either 'rule protocol value=...' or  'rule [forward-]port protocol=...'.zDattribute '%s' outside of any element. Use 'rule <element> %s= ...'.TFzinvalid 'protocol' elementzinvalid 'service' elementzinvalid 'icmp-block' elementzinvalid 'icmp-type' elementzlimit.zlimit.valuezinvalid 'limit' elementzlimit.burst)r_   r7   rr   r   r   r   r,   r*   r+   rs   rt   r)   r0   r1   r3   r9   rG   )rq   r`   ra   r+   ru   r*   rv   rw   r-   rx   ry   rc   rd   rz   r{   r|   r}   r2   r~   r   rk   )r+   ru   r*   rv   rw   r-   rx   ry   )rz   r{   r|   r}   )r4   r5   )rr   r   r   r   )r~   r   )rr   r   r   )r~   r   )r*   r+   )r*   r+   rs   rt   )r*   r+   )r0   r1   )r,   rG   )(r   r   r   r   ZstripNonPrintableCharactersr_   r7   r`   ra   rb   rc   rd   re   rp   Úgetr>   rl   rY   Ú
ValueErrorÚINVALID_PRIORITYr   ÚpopÚclearr   r   r   r   r   r   r   r
   r	   r   r   r   r   r   r   r   r8   )r    rg   rm   ZattrsZin_elementsÚindexrb   ri   rj   Z
in_elementZerr_msgr!   r!   r"   rf   z  s”   

"       "













*




"






















(






 




















zRich_Rule._import_from_stringc          	   C   s`  | j d k	r"| j d kr"ttj| j ƒ‚| j d krn| jd k	rB| jjd k	sL| jd k	rVttjƒ‚t| j	ƒt
krnttjƒ‚| j| jk s†| j| jkržttjd| j| jf ƒ‚| j	d koÄ| jd ksÈ| jd k	oÄ| jdk�r
| jd krÞttjdƒ‚| jd koú| jd koú| jdk�r
ttjdƒ‚t| j	ƒtt
tgk�rP| jd k�rP| jd k�rP| jd k�rPttjdƒ‚| jd k	�rj| jjd k	�rÞ| j d k�r€ttjƒ‚| jjd k	�ršttjdƒ‚| jjd k	�r´ttjd	ƒ‚tj| j | jjƒ�sjttjt| jjƒƒ‚nŒ| jjd k	�r,| jjd k	�rttjd
ƒ‚tj| jjƒ�sjttjt| jjƒƒ‚n>| jjd k	�r^t| jjƒ�sjttjt| jjƒƒ‚nttjdƒ‚| jd k	�r| jjd k	�rÞ| j d k�ršttjƒ‚| jjd k	�r´ttjd	ƒ‚tj| j | jjƒ�sttjt| jjƒƒ‚n>| jjd k	�rt| jjƒ�sttjt| jjƒƒ‚nttjdƒ‚t| j	ƒt k�rd| j	j!d k�sLt"| j	j!ƒdk �r`ttj#t| j	j!ƒƒ‚�nüt| j	ƒt$k�r¶tj%| j	j&ƒ�s”ttj'| j	j&ƒ‚| j	j(d!k�r`ttj)| j	j(ƒ‚�nªt| j	ƒt*k�rêtj+| j	j,ƒ�s`ttj)| j	j,ƒ‚�nvt| j	ƒtk�r<| jd k	�rttjdƒ‚| jd k	�r`| jjd k	�r`ttjdƒ‚�n$t| j	ƒtk�r˜| j	j!d k�slt"| j	j!ƒdk �r€ttj-t| j	j!ƒƒ‚| j�r`ttjdƒ‚�nÈt| j	ƒt.k�rà| j	j!d k�sÈt"| j	j!ƒdk �r`ttj-t| j	j!ƒƒ‚�n€t| j	ƒt
k�rîtj%| j	j&ƒ�sttj'| j	j&ƒ‚| j	j(d"k�r.ttj)| j	j(ƒ‚| j	j/dk�rZ| j	j0dk�rZttj'| j	j/ƒ‚| j	j/dk�rŠtj%| j	j/ƒ �rŠttj'| j	j/ƒ‚| j	j0dk�r¾tj1| j | j	j0ƒ �r¾ttj| j	j0ƒ‚| j d k�rÔttjƒ‚| jd k	�r`ttjdƒ‚nrt| j	ƒt2k�r>tj%| j	j&ƒ�sttj'| j	j&ƒ‚| j	j(d#k�r`ttj)| j	j(ƒ‚n"| j	d k	�r`ttjdt| j	ƒ ƒ‚| jd k	�r®| jj3�r”| jj3d$k�r”ttj4| jj3ƒ‚| jj5d k	�r®| jj5j6ƒ  | jd k	�rüt| jƒt7t8t9gk�râttj:t| jƒƒ‚| jj5d k	�rü| jj5j6ƒ  | jd k	�r\t| jƒt8k�r(| jj6| j ƒ nt| jƒt;k�rB| jj6ƒ  | jj5d k	�r\| jj5j6ƒ  d S )%Nr4   r5   z/'priority' attribute must be between %d and %d.r   zno element, no actionz%no element, no source, no destinationzno action, no log, no auditzaddress and maczaddress and ipsetzmac and ipsetzinvalid sourcezinvalid destinationr<   ÚtcpÚudpÚsctpÚdccpzmasquerade and actionzmasquerade and mac sourcezicmp-block and actionr   zforward-port and actionzUnknown element %sÚemergÚalertÚcritÚerrorÚwarningÚnoticeÚinfoÚdebug)r4   r5   )r†   r‡   rˆ   r‰   )r†   r‡   rˆ   r‰   )r†   r‡   rˆ   r‰   )rŠ   r‹   rŒ   r�   rŽ   r�   r�   r‘   )<r7   r   r   ZINVALID_FAMILYr`   r   ra   ZMISSING_FAMILYr3   rb   r
   r_   Úpriority_minÚpriority_maxr‚   rc   re   r   r   r   rd   r   r   r   Zcheck_addressZINVALID_ADDRrR   Z	check_macZINVALID_MACr   ZINVALID_IPSETZINVALID_DESTINATIONr   r)   r>   ZINVALID_SERVICEr   Z
check_portr*   ZINVALID_PORTr+   ZINVALID_PROTOCOLr   ZcheckProtocolr,   ZINVALID_ICMPTYPEr   r.   r/   Zcheck_single_addressr	   r1   ZINVALID_LOG_LEVELr2   r8   r   r   r   ZINVALID_AUDIT_TYPEr   )r    r!   r!   r"   r8   h  sö    




 
 



   


zRich_Rule.checkc             C   s¸   d}| j r|d| j  7 }| jr,|d| j 7 }| jr@|d| j 7 }| jrT|d| j 7 }| jrh|d| j 7 }| jr||d| j 7 }| jr�|d| j 7 }| jr¤|d| j 7 }tj	r´tj
|ƒS |S )Nrq   z priority="%d"z family="%s"z %s)r_   r7   r`   ra   rb   rc   rd   re   r   ZPY2Zu2b)r    r$   r!   r!   r"   r%     s$    zRich_Rule.__str__i €ÿÿ)NNr   )
r&   r'   r(   r’   r“   r#   rp   rf   r8   r%   r!   r!   r!   r"   r   T  s   
 o -Ni  i   i€Q )Ú__all__Zfirewallr   Zfirewall.core.ipsetr   Zfirewall.core.baser   r   Zfirewall.errorsr   Úobjectr   r   r   r   r	   r   r   r   r   r
   r   r   r   r   r   r   rZ   r   r   r!   r!   r!   r"   Ú<module>   s@   d