Current File : //lib/python3.9/site-packages/firewall/core/io/__pycache__/service.cpython-39.pyc
a

���g'0�@s�gd�ZddlmZddlZddlZddlZddlmZddlm	Z	m
Z
mZmZm
Z
mZmZddlmZddlmZddlmZGdd	�d	e	�ZGd
d�de
�Zdd
�Zddd�ZdS))�Service�service_reader�service_writer�N)�config)�	IO_Object�IO_Object_ContentHandler�IO_Object_XMLGenerator�
check_port�check_tcpudp�check_protocol�
check_address)�log)�errors)�
FirewallErrorcs�eZdZdddddgfddgfdddifd	dgfd
dgfddgfddgff
Zd
dgZdddd�Zddgddgdgdgddgddgdgdgd�Z�fdd�Zdd�Zdd�Z	�Z
S) r)�version�)�shortr)�descriptionr�ports)rr�modulesr�destination�	protocols�source_ports�includes�helpers�_�-N)rr�service�namer�port�protocol�value�ipv4�ipv6r)rrr �moduler�source-port�include�helpercsNtt|���d|_d|_d|_g|_g|_g|_i|_	g|_
g|_g|_dS�Nr)
�superr�__init__rrrrrrrrrr��self��	__class__��</usr/lib/python3.9/site-packages/firewall/core/io/service.pyr*CszService.__init__cCshd|_d|_d|_|jdd�=|jdd�=|jdd�=|j��|jdd�=|j	dd�=|j
dd�=dSr()rrrrrrr�clearrrrr+r/r/r0�cleanupPs
zService.cleanupc
Csd|dkrH|D]6}|ddkr6t|d�t|d�qt|d�q�n|dkrd|D]}t|�qTn�|dkr�|D]}t|d�t|d�qpn�|dkr�|D]*}|dvr�ttjd	|��t|||�q�n�|d
k�r&|D]J}|�d��r
|�dd�}d|v�r
|�dd
�}t	|�dkr�ttj
|��q�n:|dk�r`|D]*}	|	|dv�r4ttjd�|j
|	����q4dS)Nrrr�rrr�r"r#z'%s' not in {'ipv4'|'ipv6'}r�
nf_conntrack_rr�rZservicesz.Service '{}': Included service '{}' not found.)r	r
rrrZINVALID_DESTINATIONr�
startswith�replace�lenZINVALID_MODULE�INVALID_SERVICE�formatr)
r,r�itemZ
all_configZall_io_objectsr�protorr$r&r/r/r0�
_check_config\sL��


��zService._check_config)�__name__�
__module__�__qualname__ZIMPORT_EXPORT_STRUCTUREZADDITIONAL_ALNUM_CHARSZPARSER_REQUIRED_ELEMENT_ATTRSZPARSER_OPTIONAL_ELEMENT_ATTRSr*r2r>�
__classcell__r/r/r-r0r%s8
���
rc@seZdZdd�ZdS)�service_ContentHandlercCs,t�|||�|j�||�|dkrTd|vr<t�d|d�d|vrP|d|j_�n�|dkr`�n�|dkrl�n�|dk�r$|ddkr�t|d�t|d	�|d|d	f}||jj	vr�|jj	�
|�nt�d
|d|d	�nBt|d	�|d	|jjv�r|jj�
|d	�nt�d|d	��n|d	k�rtt|d�|d|jjv�r`|jj�
|d�nt�d|d��n�|d
k�r�t|d�t|d	�|d|d	f}||jj
v�r�|jj
�
|�nt�d|d|d	��nJ|dk�r:dD]J}||v�r�t|||�||jjv�r$t�d|�n|||jj|<�q�n�|dk�r�|d}|�d��rz|�dd�}d|v�rz|�dd�}||jjv�r�|jj�
|�nt�d|�n�|dk�r�|d|jjv�r�|jj�
|d�nt�d|d�n@|dk�r(|d|jjv�r|jj�
|d�nt�d|d�dS)Nrrz'Ignoring deprecated attribute name='%s'rrrrrr z#Port '%s/%s' already set, ignoring.z$Protocol '%s' already set, ignoring.r!r%z)SourcePort '%s/%s' already set, ignoring.rr4z2Destination address for '%s' already set, ignoringr$r5rrz"Module '%s' already set, ignoring.r&z#Include '%s' already set, ignoring.r'z"Helper '%s' already set, ignoring.)r�startElementr<Zparser_check_element_attrsr
Zwarningrr	r
r�appendrrrrrr7r8rrr)r,r�attrs�entry�xr$r/r/r0rD�s��
��
�
�

�

�
�
�z#service_ContentHandler.startElementN)r?r@rArDr/r/r/r0rC�srCc	Cst�}|�d�s ttjd|��|dd�|_|�|j�||_||_|�	t
j�rVdnd|_|j|_
t|�}t��}|�|�d||f}t|d��n}t�d�}|�|�z|�|�Wn:tjy�}z ttjd|����WYd}~n
d}~00Wd�n1�s
0Y~~|S)	Nz.xmlz'%s' is missing .xml suffix���FT�%s/%s�rbznot a valid service file: %s)r�endswithrrZINVALID_NAMErZ
check_name�filename�pathr7r�
ETC_FIREWALLDZbuiltin�defaultrC�saxZmake_parserZsetContentHandler�openZInputSourceZ
setByteStream�parseZSAXParseExceptionr:ZgetException)	rMrNr�handler�parserr�f�source�msgr/r/r0r�s:
�


��:rc
CsZ|r|n|j}|jr$d||jf}nd||jf}tj�|�r�zt�|d|�Wn2ty�}zt�	d||�WYd}~n
d}~00tj�
|�}|�tj
�r�tj�|�s�tj�tj
�s�t�tj
d�t�|d�tj|ddd�}t|�}|��i}|j�r|jd	k�r|j|d
<|�d|�|�d�|j�rt|jd	k�rt|�d
�|�di�|�|j�|�d�|�d�|j�r�|jd	k�r�|�d
�|�di�|�|j�|�d�|�d�|jD]4}	|�d
�|�d|	d|	dd��|�d��q�|jD]*}
|�d
�|�dd|
i�|�d��q|jD]4}	|�d
�|�d|	d|	dd��|�d��q2|jD]*}|�d
�|�dd|i�|�d��qnt|j �dk�r�|�d
�|�d|j �|�d�|j!D]*}|�d
�|�dd|i�|�d��q�|j"D]*}
|�d
�|�dd|
i�|�d��q|�d�|�d�|�#�|�$�~dS)NrJz	%s/%s.xmlz%s.oldzBackup of file '%s' failed: %si�ZwtzUTF-8)�mode�encodingrrr�
z  rrrrr3)rr r r!r%r$rrr&r')%rNrMr�os�exists�shutil�copy2�	Exceptionr
�error�dirnamer7rrO�mkdir�iorRrZ
startDocumentrrDZignorableWhitespacerZ
charactersZ
endElementrrZ
simpleElementrrrr9rrrZendDocument�close)rrN�_pathrrX�dirpathrVrTrFrr r$r&r'r/r/r0r�s�$













�









r)N)�__all__Zxml.saxrQr\rdr^ZfirewallrZfirewall.core.io.io_objectrrrr	r
rrZfirewall.core.loggerr
rZfirewall.errorsrrrCrrr/r/r/r0�<module>s$dQ