<!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j5                 @   s  d Z ddddddddgZd	d
ljZd	d
ljjZd	d
lZd	d
l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 ejdk 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jjZG dd dejZdd Zdd Zdd Z dd Z!d
S )z5Generic io_object handler, io specific check methods.PY2	IO_ObjectIO_Object_ContentHandlerIO_Object_XMLGenerator
check_portcheck_tcpudpcheck_protocolcheck_address    N)OrderedDict)	functions)b2u)errors)FirewallError3c               @   s|   e Zd ZdZf ZdZg Zi Zi Zdd Z	dd Z
dd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )r   z; Abstract IO_Object as base for icmptype, service and zone z()c             C   s"   d| _ d| _d| _d| _d| _d S )N F)filenamepathnamedefaultZbuiltin)self r   /usr/lib/python3.6/io_object.py__init__2   s
    zIO_Object.__init__c             C   s6   g }x(| j D ]}|jtjt| |d  qW t|S )Nr	   )IMPORT_EXPORT_STRUCTUREappendcopydeepcopygetattrtuple)r   retxr   r   r   export_config9   s    zIO_Object.export_configc             C   sX   i }t dd | jD }x:|D ]2}t| |s<tt| |trtjt| |||< qW |S )Nc             S   s   g | ]}|d  |d fqS )r	      r   ).0r    r   r   r   
<listcomp>A   s    z0IO_Object.export_config_dict.<locals>.<listcomp>)dictr   r   
isinstanceboolr   r   )r   conftype_formatskeyr   r   r   export_config_dict?   s    
zIO_Object.export_config_dictc             C   s   | j | xt| jD ]~\}\}}t|| tr~g }t }x,|| D ] }||krD|j| |j| qDW ~t| |t	j
| qt| |t	j
||  qW d S )N)check_config	enumerater   r&   listsetr   addsetattrr   r   )r   r(   ielementZdummyZ_confZ_setr    r   r   r   import_configG   s    

zIO_Object.import_configc          	   C   s~   | j | xn|D ]f}t| |s0ttjdj|t|| tr`t| |tt	j
tj||  qt| |tj||  qW d S )Nz-Internal error. '{}' is not a valid attribute)check_config_dicthasattrr   r   ZUNKNOWN_ERRORformatr&   r.   r1   r
   fromkeysr   r   )r   r(   r*   r   r   r   import_config_dictW   s    


"zIO_Object.import_config_dictc             C   sz   t |ts(ttjd|tdt|f t|dk r@ttjdx4|D ],}|j  rF|| j	krFttjd||f qFW d S )Nz'%s' not of type %s, but %sr   r"   zname can't be emptyz'%s' is not allowed in '%s')
r&   strr   r   INVALID_TYPEtypelenZINVALID_NAMEisalnumADDITIONAL_ALNUM_CHARS)r   r   charr   r   r   
check_namec   s    


zIO_Object.check_namec             C   sj   t |t | jkr0ttjdt |t | jf i }x&t| jD ]\}\}}|| ||< q@W | j| d S )Nz structure size mismatch %d != %d)r=   r   r   r   r;   r-   r5   )r   r(   Z	conf_dictr2   r    yr   r   r   r,   p   s    zIO_Object.check_configc             C   sr   t dd | jD }xX|D ]P}|dd | jD krDttjdj|| j|| ||  | j|| || qW d S )Nc             S   s   g | ]}|d  |d fqS )r	   r"   r   )r#   r    r   r   r   r$   |   s    z/IO_Object.check_config_dict.<locals>.<listcomp>c             S   s   g | ]\}}|qS r   r   )r#   r    rB   r   r   r   r$   ~   s    zoption '{}' is not valid)r%   r   r   r   ZINVALID_OPTIONr7   _check_config_structure_check_config)r   r(   r)   r*   r   r   r   r5   {   s    
zIO_Object.check_config_dictc             C   s   d S )Nr   )r   Zdummy1Zdummy2Zdummy3r   r   r   rD      s    zIO_Object._check_configc       	      C   s`  t |t|s,ttjd|t|t|f t |trrt|dkrRttjd| x|D ]}| j||d  qXW nt |trt|t|krttjd|t|f xt	|D ]\}}| j|| | qW nt |t
r\t|j d \}}xn|j D ]b\}}t |t|s,ttjd|t|t|f t |t|sttjd|t|t|f qW d S )Nz'%s' not of type %s, but %sr"   zlen('%s') != 1r	   zlen('%s') != %d)r&   r<   r   r   r;   r.   r=   rC   r   r-   r%   items)	r   r(   Z	structurer    r2   valueZskeyZsvaluer*   r   r   r   rC      s8    



z!IO_Object._check_config_structurec             C   s   |j  }d}|| jkrdd}| j| d k	rdx:| j| D ],}||krL|j| q4ttjd||f q4W || jkrd}x$| j| D ]}||kr~|j| q~W |sttjd| x |D ]}ttjd||f qW d S )NFTzMissing attribute %s for %szUnexpected element %sz%s: Unexpected attribute %s)ZgetNamesPARSER_REQUIRED_ELEMENT_ATTRSremover   r   ZPARSE_ERRORPARSER_OPTIONAL_ELEMENT_ATTRS)r   r   attrsZ_attrsfoundr    r   r   r   parser_check_element_attrs   s,    



z$IO_Object.parser_check_element_attrsN)__name__
__module____qualname____doc__r   ZDBUS_SIGNATUREr?   rG   rI   r   r!   r+   r4   r9   rA   r,   r5   rD   rC   rL   r   r   r   r   r   )   s"   !c                   s$   e Zd Z fddZdd Z  ZS )UnexpectedElementErrorc                s   t t| j  || _d S )N)superrQ   r   r   )r   r   )	__class__r   r   r      s    zUnexpectedElementError.__init__c             C   s
   d| j  S )NzUnexpected element '%s')r   )r   r   r   r   __str__   s    zUnexpectedElementError.__str__)rM   rN   rO   r   rT   __classcell__r   r   )rS   r   rQ      s   rQ   c                   s$   e Zd Z fddZdd Z  ZS )MissingAttributeErrorc                s   t t| j  || _|| _d S )N)rR   rV   r   r   	attribute)r   r   rW   )rS   r   r   r      s    zMissingAttributeError.__init__c             C   s   d| j | jf S )Nz$Element '%s': missing '%s' attribute)r   rW   )r   r   r   r   rT      s    zMissingAttributeError.__str__)rM   rN   rO   r   rT   rU   r   r   )rS   r   rV      s   rV   c                   s$   e Zd Z fddZdd Z  ZS )UnexpectedAttributeErrorc                s   t t| j  || _|| _d S )N)rR   rX   r   r   rW   )r   r   rW   )rS   r   r   r      s    z!UnexpectedAttributeError.__init__c             C   s   d| j | jf S )Nz'Element '%s': unexpected attribute '%s')r   rW   )r   r   r   r   rT      s    z UnexpectedAttributeError.__str__)rM   rN   rO   r   rT   rU   r   r   )rS   r   rX      s   rX   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )r   c             C   s   || _ d| _d S )Nr   )item_element)r   rY   r   r   r   r      s    z!IO_Object_ContentHandler.__init__c             C   s
   d| _ d S )Nr   )rZ   )r   r   r   r   startDocument   s    z&IO_Object_ContentHandler.startDocumentc             C   s
   d| _ d S )Nr   )rZ   )r   r   rJ   r   r   r   startElement   s    z%IO_Object_ContentHandler.startElementc             C   s*   |dkr| j | j_n|dkr&| j | j_d S )Nshortdescription)rZ   rY   r]   r^   )r   r   r   r   r   
endElement   s    z#IO_Object_ContentHandler.endElementc             C   s   |  j |jdd7  _ d S )N
 )rZ   replace)r   contentr   r   r   
characters   s    z#IO_Object_ContentHandler.charactersN)rM   rN   rO   r   r[   r\   r_   rd   r   r   r   r   r      s
   c               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )r   c             C   sN   t jjj|  |j| _|j| _i g| _| jd | _	g | _
d| _d| _d| _d S )Nr"   zutf-8F)saxhandlerContentHandlerr   write_writeflushZ_flushZ_ns_contextsZ_current_contextZ_undeclared_ns_mapsZ	_encodingZ_pending_start_elementZ_short_empty_elements)r   outr   r   r   r      s    zIO_Object_XMLGenerator.__init__c             C   s*   t rdd |j D }tjj| || dS )a   saxutils.XMLGenerator.startElement() expects name and attrs to be
            unicode and bad things happen if any of them is (utf-8) encoded.
            We override the method here to sanitize this case.
            Can be removed once we drop Python2 support.
        c             S   s   i | ]\}}t |t |qS r   )r   )r#   r   rF   r   r   r   
<dictcomp>  s    z7IO_Object_XMLGenerator.startElement.<locals>.<dictcomp>N)r   rE   saxutilsXMLGeneratorr\   )r   r   rJ   r   r   r   r\     s    z#IO_Object_XMLGenerator.startElementc             C   s   t rX| jdt|  x4|j D ](\}}| jdt|tjt|f  q W | jd nF| jd|  x,|j D ] \}}| jd|tj|f  qpW | jd dS )z* slightly modified startElement()
        <z %s=%sz/>N)r   rj   r   rE   rn   Z	quoteattr)r   r   rJ   rF   r   r   r   simpleElement  s    z$IO_Object_XMLGenerator.simpleElementc             C   s   t jj| t| dS )z saxutils.XMLGenerator.endElement() expects name to be
            unicode and bad things happen if it's (utf-8) encoded.
            We override the method here to sanitize this case.
            Can be removed once we drop Python2 support.
        N)rn   ro   r_   r   )r   r   r   r   r   r_     s    z!IO_Object_XMLGenerator.endElementc             C   s   t jj| t| dS )z saxutils.XMLGenerator.characters() expects content to be
            unicode and bad things happen if it's (utf-8) encoded.
            We override the method here to sanitize this case.
            Can be removed once we drop Python2 support.
        N)rn   ro   rd   r   )r   rc   r   r   r   rd   %  s    z!IO_Object_XMLGenerator.charactersc             C   s   t jj| t| dS )a   saxutils.XMLGenerator.ignorableWhitespace() expects content to be
            unicode and bad things happen if it's (utf-8) encoded.
            We override the method here to sanitize this case.
            Can be removed once we drop Python2 support.
        N)rn   ro   ignorableWhitespacer   )r   rc   r   r   r   rr   -  s    z*IO_Object_XMLGenerator.ignorableWhitespaceN)	rM   rN   rO   r   r\   rq   r_   rd   rr   r   r   r   r   r      s   
c             C   s   t j| }|dkr$ttjd|  n`|dkr>ttjd|  nF|d krXttjd|  n,t|dkr|d |d krttjd|  d S )	N   zport number in '%s' is too bigr"   z'%s' is invalid port rangezport range '%s' is ambiguousr	   re   )r   ZgetPortRanger   r   ZINVALID_PORTr=   )ZportZ
port_ranger   r   r   r   5  s    
c             C   s   | dkrt tjd|  d S )Ntcpudpsctpdccpz)'%s' not from {'tcp'|'udp'|'sctp'|'dccp'})ru   rv   rw   rx   )r   r   INVALID_PROTOCOL)protocolr   r   r   r   D  s    c             C   s   t j| sttj| d S )N)r   ZcheckProtocolr   r   ry   )rz   r   r   r   r   J  s    
c             C   s$   t j| |s ttjd|| f d S )Nz'%s' is not valid %s address)r   r   r   r   ZINVALID_ADDR)ZipvZaddrr   r   r   r   N  s    )"rP   __all__Zxml.saxrf   Zxml.sax.saxutilsrn   r   syscollectionsr
   Zfirewallr   Zfirewall.functionsr   r   Zfirewall.errorsr   versionr   objectr   	ExceptionrQ   rV   rX   rg   rh   r   ro   r   r   r   r   r   r   r   r   r   <module>   s0   

 		C