<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
Yj2                 @   s   d ddgZ ddljZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZ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dd ZdddZdS )Serviceservice_readerservice_writer    N)config)
u2b_if_py2)PY2	IO_ObjectIO_Object_ContentHandlerIO_Object_XMLGenerator
check_portcheck_tcpudpcheck_protocolcheck_address)log)errors)FirewallErrorc                   s   e Zd Zd d!d"dd#gfddgfdddifddgfd	d$gfd
dgfddgff
ZddgZddddZddgddgdgdgddgddgdgdgdZ fddZdd Zdd Z	dd Z
  ZS )%r   version shortdescriptionportsmodulesdestination	protocolssource_portsincludeshelpers_-N)r   r   servicenameportprotocolvalueipv4ipv6r   )r   r!   r"   moduler   zsource-portincludehelperc                sN   t t| j  d| _d| _d| _g | _g | _g | _i | _	g | _
g | _g | _d S )Nr   )superr   __init__r   r   r   r   r   r   r   r   r   r   )self)	__class__ /usr/lib/python3.6/service.pyr*   D   s    zService.__init__c             C   sh   d| _ d| _d| _| jd d = | jd d = | jd d = | jj  | jd d = | j	d d = | j
d d = d S )Nr   )r   r   r   r   r   r   r   clearr   r   r   )r+   r-   r-   r.   cleanupQ   s    
zService.cleanupc             C   s   t | j| _t | j| _t | j| _dd | jD | _dd | jD | _dd | jj D | _dd | jD | _dd | j	D | _	dd | j
D | _
d	d | jD | _d
S )z HACK. I haven't been able to make sax parser return
            strings encoded (because of python 2) instead of in unicode.
            Get rid of it once we throw out python 2 support.c             S   s    g | ]\}}t |t |fqS r-   )r   ).0poprr-   r-   r.   
<listcomp>d   s    z*Service.encode_strings.<locals>.<listcomp>c             S   s   g | ]}t |qS r-   )r   )r1   mr-   r-   r.   r4   e   s    c             S   s   i | ]\}}t |t |qS r-   )r   )r1   kvr-   r-   r.   
<dictcomp>f   s    z*Service.encode_strings.<locals>.<dictcomp>c             S   s   g | ]}t |qS r-   )r   )r1   r3   r-   r-   r.   r4   g   s    c             S   s    g | ]\}}t |t |fqS r-   )r   )r1   r2   r3   r-   r-   r.   r4   h   s    c             S   s   g | ]}t |qS r-   )r   )r1   sr-   r-   r.   r4   j   s    c             S   s   g | ]}t |qS r-   )r   )r1   r9   r-   r-   r.   r4   k   s    N)r   r   r   r   r   r   r   itemsr   r   r   r   )r+   r-   r-   r.   encode_strings]   s    zService.encode_stringsc             C   s:  |dkrJx>|D ]6}|d dkr8t |d  t|d  qt|d  qW n|dkrjx|D ]}t| qXW n|dkrx|D ]}t |d  t|d  qxW n|dkrx|D ]*}|dkrttjd
| t|||  qW n^|dkr6xR|D ]J}|jdr|jdd}d|kr|jdd}t	|dk rttj
|qW d S )Nr   r   r      r   r   r   r$   r%   z'%s' not in {'ipv4'|'ipv6'}r   nf_conntrack_r   r      )r$   r%   )r   r   r   r   r   ZINVALID_DESTINATIONr   
startswithreplacelenZINVALID_MODULE)r+   r   itemZ
all_configr!   protor   r&   r-   r-   r.   _check_configm   s8    






zService._check_config)r   r   )r   r   )r   r   )r   r   )r   r   )__name__
__module____qualname__ZIMPORT_EXPORT_STRUCTUREZADDITIONAL_ALNUM_CHARSZPARSER_REQUIRED_ELEMENT_ATTRSZPARSER_OPTIONAL_ELEMENT_ATTRSr*   r0   r;   rD   __classcell__r-   r-   )r,   r.   r   &   s4   

c               @   s   e Zd Zdd ZdS )service_ContentHandlerc             C   s0  t j| || | jj|| |dkrTd|kr<tjd|d  d|krP|d | j_n|dkr`n|dkrln|dkr$|d dkrt|d  t|d	  |d |d	 f}|| jj	kr| jj	j
| ntjd
|d |d	  nBt|d	  |d	 | jjkr| jjj
|d	  ntjd|d	  n|d	krtt|d  |d | jjkr`| jjj
|d  ntjd|d  n|dkrt|d  t|d	  |d |d	 f}|| jjkr| jjj
| ntjd|d |d	  nN|dkr>xRdD ]J}||krt|||  || jjkr&tjd| n|| | jj|< qW n|dkr|d }|jdr~|jdd}d|kr~|jdd}|| jjkr| jjj
| ntjd| n|dkr|d | jjkr| jjj
|d  ntjd|d  n@|dkr,|d | jjkr| jjj
|d  ntjd|d  d S )Nr   r    z'Ignoring deprecated attribute name='%s'r   r   r   r!   r   r"   z#Port '%s/%s' already set, ignoring.z$Protocol '%s' already set, ignoring.r#   zsource-portz)SourcePort '%s/%s' already set, ignoring.r   r$   r%   z2Destination address for '%s' already set, ignoringr&   r=   r   r   z"Module '%s' already set, ignoring.r'   z#Include '%s' already set, ignoring.r(   z"Helper '%s' already set, ignoring.)r$   r%   )r	   startElementrB   Zparser_check_element_attrsr   Zwarningr   r   r   r   appendr   r   r   r   r   r?   r@   r   r   r   )r+   r    attrsentryxr&   r-   r-   r.   rJ      s    










z#service_ContentHandler.startElementN)rE   rF   rG   rJ   r-   r-   r-   r.   rI      s   rI   c       	      C   s  t  }| jds ttjd|  | d d	 |_|j|j | |_||_|j	t
jrVdnd|_|j|_t|}tj }|j| d|| f }t|db}tjd }|j| y|j| W n8 tjk
r } zttjd|j  W Y d d }~X nX W d Q R X ~~tr|j  |S )
Nz.xmlz'%s' is missing .xml suffix   FTz%s/%srbznot a valid service file: %s)r   endswithr   r   ZINVALID_NAMEr    Z
check_namefilenamepathr?   r   ETC_FIREWALLDZbuiltindefaultrI   saxZmake_parserZsetContentHandleropenZInputSourceZsetByteStreamparseZSAXParseExceptionZINVALID_SERVICEZgetExceptionr   r;   )	rS   rT   r   handlerparserr    fsourcemsgr-   r-   r.   r      s8    




(c             C   sr  |r|n| j }| jr$d|| jf }nd|| jf }tj j|rytj|d|  W n0 tk
r } ztj	d|| W Y d d }~X nX tj j
|}|jtjrtj j| rtj jtjstjtjd tj|d tj|ddd}t|}|j  i }| jr| jd	kr| j|d
< |jd| |jd | jrt| jd	krt|jd |jdi  |j| j |jd |jd | jr| jd	kr|jd |jdi  |j| j |jd |jd x>| jD ]4}	|jd |jd|	d |	d d |jd qW x4| jD ]*}
|jd |jdd|
i |jd qW x>| jD ]4}	|jd |jd|	d |	d d |jd q<W x4| jD ]*}|jd |jdd|i |jd q|W t| j dkr|jd |jd| j  |jd x4| j!D ]*}|jd |jdd|i |jd qW x4| j"D ]*}|jd |jdd|i |jd qW |jd |jd |j#  |j$  ~d S )Nz%s/%sz	%s/%s.xmlz%s.oldzBackup of file '%s' failed: %si  ZwtzUTF-8)modeencodingr   r   r   
z  r   r   r!   r   r<   )r!   r"   r"   r#   zsource-portr&   r    r   r'   r(   )%rT   rS   r    osexistsshutilZcopy2	Exceptionr   errordirnamer?   r   rU   mkdiriorX   r
   ZstartDocumentr   rJ   ZignorableWhitespacer   Z
charactersZ
endElementr   r   ZsimpleElementr   r   r   rA   r   r   r   ZendDocumentclose)r   rT   _pathr    r^   dirpathr\   rZ   rL   r!   r"   r&   r'   r(   r-   r-   r.   r     s     

















)N)__all__Zxml.saxrW   rb   ri   rd   Zfirewallr   Zfirewall.functionsr   Zfirewall.core.io.io_objectr   r   r	   r
   r   r   r   r   Zfirewall.core.loggerr   r   Zfirewall.errorsr   r   rI   r   r   r-   r-   r-   r.   <module>   s   

(mQ