<!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                 @   sJ   d Z dgZddlZddlmZ ddlmZ ddlmZ G dd de	Z
dS )z!Transaction classes for firewalldFirewallTransaction    N)log)errors)FirewallErrorc               @   s   e Z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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   s(   || _ i | _g | _g | _g | _g | _d S )N)fwrules	pre_funcs
post_funcs
fail_funcsmodules)selfr    r   $/usr/lib/python3.6/fw_transaction.py__init__!   s    zFirewallTransaction.__init__c             C   s2   | j j  | jd d = | jd d = | jd d = d S )N)r   clearr   r	   r
   )r   r   r   r   r   )   s    
zFirewallTransaction.clearc             C   s   | j j|jg j| d S )N)r   
setdefaultnameappend)r   backendruler   r   r   add_rule/   s    zFirewallTransaction.add_rulec             C   s   x|D ]}| j || qW d S )N)r   )r   r   r   r   r   r   r   	add_rules2   s    
zFirewallTransaction.add_rulesc             C   s   |j | jko|| j|j  kS )N)r   r   )r   r   r   r   r   r   
query_rule6   s    zFirewallTransaction.query_rulec             C   s2   |j | jkr.|| j|j  kr.| j|j  j| d S )N)r   r   remove)r   r   r   r   r   r   remove_rule9   s    zFirewallTransaction.remove_rulec             G   s   | j j||f d S )N)r   r   )r   funcargsr   r   r   add_pre=   s    zFirewallTransaction.add_prec             G   s   | j j||f d S )N)r	   r   )r   r   r   r   r   r   add_post@   s    zFirewallTransaction.add_postc             G   s   | j j||f d S )N)r
   r   )r   r   r   r   r   r   add_failC   s    zFirewallTransaction.add_failc             C   s   || j kr| j j| d S )N)r   r   )r   moduler   r   r   
add_moduleF   s    
zFirewallTransaction.add_modulec             C   s   || j kr| j j| d S )N)r   r   )r   r    r   r   r   remove_moduleJ   s    
z!FirewallTransaction.remove_modulec             C   s   x|D ]}| j | qW d S )N)r!   )r   r   r    r   r   r   add_modulesN   s    
zFirewallTransaction.add_modulesc             C   s   x|D ]}| j | qW d S )N)r"   )r   r   r    r   r   r   remove_modulesR   s    
z"FirewallTransaction.remove_modulesc             C   s   t jdt| |df  i }|sjxp| jD ]<}x6t| j| D ]$}|j|g j| jj|j	| q<W q(W n(x&| jD ]}|j|g j
| j|  qrW || jfS )Nz%s.prepare(%s, %s)z...)r   debug4typer   reversedr   r   r   get_backend_by_namereverse_ruleextendr   )r   enabler   backend_namer   r   r   r   prepareV   s    zFirewallTransaction.preparec             C   s  t jdt| |f  | j|\}}| j  d}d}g }xp|D ]h}y| jj|||  W nB tk
r } z&d}|}t jt	j
  t j| W Y d d }~X q>X |j| q>W |s| jj||}	|	r|	\}
}|
rt j| |ri }xH|D ]@}g ||< x2t|| D ]"}|| j| jj|j| q W qW xb|D ]Z}y| jj|||  W n< tk
r } zt jt	j
  t j| W Y d d }~X nX q0W xh| jD ]^\}}y||  W nF tk
r } z(t jt	j
  t jd|||f  W Y d d }~X nX qW ttj|| j  d S )Nz%s.execute(%s)F Tz#Calling fail func %s(%s) failed: %s)r   r%   r&   r-   prer   r   	Exceptiondebug1	traceback
format_excerrorr   Zhandle_modulesr'   r(   r)   r
   r   r   ZCOMMAND_FAILEDpost)r   r+   r   r   r4   ZerrorMsgdoner,   msgZmodule_returnZstatusZ
undo_rulesr   r   r   r   r   r   executef   sV    



"&zFirewallTransaction.executec             C   s|   t jdt|   xd| jD ]Z\}}y||  W q tk
rr } z(t jtj  t jd|||f  W Y d d }~X qX qW d S )Nz%s.pre()z"Calling pre func %s(%s) failed: %s)	r   r%   r&   r   r0   r1   r2   r3   r4   )r   r   r   r7   r   r   r   r/      s    zFirewallTransaction.prec             C   s|   t jdt|   xd| jD ]Z\}}y||  W q tk
rr } z(t jtj  t jd|||f  W Y d d }~X qX qW d S )Nz	%s.post()z#Calling post func %s(%s) failed: %s)	r   r%   r&   r	   r0   r1   r2   r3   r4   )r   r   r   r7   r   r   r   r5      s    zFirewallTransaction.postN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r!   r"   r#   r$   r-   r8   r/   r5   r   r   r   r   r       s"   @)__doc____all__r2   Zfirewall.core.loggerr   Zfirewallr   Zfirewall.errorsr   objectr   r   r   r   r   <module>   s   