JFIF$        dd7 

Viewing File: /usr/lib/python3.9/site-packages/firewall/core/__pycache__/fw_direct.cpython-39.pyc

a

	�	i�Y�@sndgZddlmZddlmZddlmZddlmZddlm	Z	ddl
mZddlm
Z
Gd	d�de�Zd
S)�FirewallDirect�)�LastUpdatedOrderedDict)�	ipXtables)�ebtables)�FirewallTransaction)�log)�errors)�
FirewallErrorc@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dNdd�Zdd�Zdd�Z
dOdd�Zdd�Zdd�Zdd�Zd d!�ZdPd"d#�ZdQd$d%�Zd&d'�Zd(d)�Zd*d+�ZdRd,d-�ZdSd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�ZdTd<d=�Z dUd>d?�Z!d@dA�Z"dBdC�Z#dDdE�Z$dFdG�Z%dHdI�Z&dJdK�Z'dLdM�Z(dS)VrcCs||_|��dS�N)�_fw�_FirewallDirect__init_vars)�self�fw�r�;/usr/lib/python3.9/site-packages/firewall/core/fw_direct.py�__init__'szFirewallDirect.__init__cCsd|j|j|j|jfS)Nz%s(%r, %r, %r))�	__class__�_chains�_rules�_rule_priority_positions�r
rrr�__repr__+s�zFirewallDirect.__repr__cCs"i|_i|_i|_i|_d|_dSr
)rrr�
_passthroughs�_objrrrrZ__init_vars/s
zFirewallDirect.__init_varscCs|��dSr
)rrrrr�cleanup6szFirewallDirect.cleanupcCs
t|j�Sr
)rrrrrr�new_transaction;szFirewallDirect.new_transactioncCs
||_dSr
)r)r
�objrrr�set_permanent_config@sz#FirewallDirect.set_permanent_configcCs*t|j�t|j�t|j�dkr&dSdS)NrTF)�lenrrrrrrr�has_runtime_configurationCs"z(FirewallDirect.has_runtime_configurationcCsB|��rdSt|j���t|j���t|j���dkr>dSdS)NTrF)rrr�get_all_chains�
get_all_rules�get_all_passthroughsrrrr�has_configurationHs���z FirewallDirect.has_configurationNcCsP|dur|��}n|}|�|j��|j��|j��f|�|durL|�d�dS�NT)r�
set_configrr r!r"�execute)r
�use_transaction�transactionrrr�apply_directQs
��zFirewallDirect.apply_directc	Csi}i}i}|jD]>}|\}}|j|D]&}|j�|||�s(|�|g��|�q(q|jD]X}|\}}}|j|D]>\}	}
|j�||||	|
�sp||vr�t�||<|	|||	|
f<qpqX|jD]@}|j|D]0}
|j�	||
�s�||vr�g||<||�|
�q�q�|||fSr
)
rr�query_chain�
setdefault�appendr�
query_rulerr�query_passthrough)r
Zchains�rulesZpassthroughs�table_id�ipv�table�chain�chain_id�priority�argsrrr�get_runtime_configbs,




z!FirewallDirect.get_runtime_configcCs|j|j|jfSr
)rrrrrrr�
get_config�szFirewallDirect.get_configcCs�|dur|��}n|}|\}}}|D]r}|\}}	||D]\}
|�||	|
�s8z|j||	|
|d�Wq8ty�}zt�t|��WYd}~q8d}~00q8q$|D]�}|\}}	}
||D]j\}
}|�||	|
|
|�s�z|j||	|
|
||d�Wq�t�y}zt�t|��WYd}~q�d}~00q�q�|D]n}||D]^}|�	||��s0z|j
|||d�Wn4t�y�}zt�t|��WYd}~n
d}~00�q0�q$|du�r�|�d�dS)N)r'T)rr*�	add_chainr	rZwarning�strr-�add_ruler.�add_passthroughr&)r
Zconfr'r(rrrr0r1r2r3�errorr4r5r6rrrr%�sF


�
(
�
(�
,
zFirewallDirect.set_configcCs(gd�}||vr$ttjd||f��dS)N)�ipv4�ipv6Zeb�'%s' not in '%s')r	rZINVALID_IPV)r
r1Zipvsrrr�
_check_ipv�s

�zFirewallDirect._check_ipvcCsF|�|�|dvrtj��ntj��}||vrBttjd||f��dS)N�r>r?r@)rAr�BUILT_IN_CHAINS�keysrr	rZ
INVALID_TABLE)r
r1r2Ztablesrrr�_check_ipv_table�s
�
�zFirewallDirect._check_ipv_tablecCs�|dvr4tj|}|jjr i}qH|j�|�j|}ntj|}tj|}||vr`tt	j
d|��||vrxtt	j
d|��|dvr�|jj�|�dur�tt	j
d|��dS)NrBzchain '%s' is built-in chainzchain '%s' is reservedzChain '%s' is reserved)rrCr�nftables_enabled�get_direct_backend_by_ipv�
our_chainsrZ
OUR_CHAINSr	rZ
BUILTIN_CHAIN�zoneZzone_from_chainZ
INVALID_CHAIN)r
r1r2r3Zbuilt_in_chainsrHrrr�_check_builtin_chain�s(


���z#FirewallDirect._check_builtin_chaincCsH|r|j�|g��|�n*|j|�|�t|j|�dkrD|j|=dS�Nr)rr+r,�remover)r
r0r3�addrrr�_register_chain�s
zFirewallDirect._register_chaincCs�|dur|��}n|}|j��r.|�|jj�|jjrZ|jj��rZ|�|jjj|jj	g�|�
d||||�|dur~|�d�dSr$)rr�may_skip_flush_direct_backends�add_pre�flush_direct_backends�
ipset_enabled�ipset�omit_native_ipset�apply_ipsets�
ipset_backend�_chainr&�r
r1r2r3r'r(rrrr9�s

zFirewallDirect.add_chaincCs>|dur|��}n|}|�d||||�|dur:|�d�dS�NFT)rrWr&rXrrr�remove_chain�s
zFirewallDirect.remove_chaincCs:|�||�|�|||�||f}||jvo8||j|vSr
)rErJr)r
r1r2r3r0rrrr*�s
�zFirewallDirect.query_chaincCs,|�||�||f}||jvr(|j|SgSr
)rEr)r
r1r2r0rrr�
get_chains�s


zFirewallDirect.get_chainscCs<g}|jD],}|\}}|j|D]}|�|||f�q q
|Sr
)rr,)r
�r�keyr1r2r3rrrr s
zFirewallDirect.get_all_chainsc	Cs�|dur|��}n|}|j��r.|�|jj�|jjrZ|jj��rZ|�|jjj|jj	g�|�
d||||||�|dur�|�d�dSr$)rrrOrPrQrRrSrTrUrV�_ruler&�r
r1r2r3r5r6r'r(rrrr;s

zFirewallDirect.add_rulec	CsB|dur|��}n|}|�d||||||�|dur>|�d�dSrY)rr^r&r_rrr�remove_rules
zFirewallDirect.remove_rulecCs2|�||�|||f}||jvo0||f|j|vSr
)rEr)r
r1r2r3r5r6r4rrrr-)s


�zFirewallDirect.query_rulecCs6|�||�|||f}||jvr2t|j|���SgSr
)rEr�listrD)r
r1r2r3r4rrr�	get_rules/s


zFirewallDirect.get_rulesc
CsJg}|jD]:}|\}}}|j|D] \}}|�||||t|�f�q"q
|Sr
)rr,ra)r
r\r]r1r2r3r5r6rrrr!6s

zFirewallDirect.get_all_rulescCs�|rr||jvrt�|j|<||j||<||jvr<i|j|<||j|vrb|j|||7<q�||j||<n<|j||=t|j|�dkr�|j|=|j|||8<dSrK)rrrr)r
�rule_idr4r5�enable�countrrr�_register_rule>s


zFirewallDirect._register_rulec
CsZz|j�|j�|�j|�WStyT}z"t�|�ttj	|��WYd}~n
d}~00dSr
)
r�rulerG�name�	ExceptionrZdebug2r	rZCOMMAND_FAILED)r
r1r6�msgrrr�passthroughRs

zFirewallDirect.passthroughcCsX|r*||jvrg|j|<|j|�|�n*|j|�|�t|j|�dkrT|j|=dSrK)rr,rLr)r
r1r6rdrrr�_register_passthroughZs

z$FirewallDirect._register_passthroughcCs�|dur|��}n|}|j��r.|�|jj�|jjrZ|jj��rZ|�|jjj|jj	g�|�
d|t|�|�|dur�|�d�dSr$)
rrrOrPrQrRrSrTrUrV�_passthroughrar&�r
r1r6r'r(rrrr<ds

zFirewallDirect.add_passthroughcCs@|dur|��}n|}|�d|t|�|�|dur<|�d�dSrY)rrmrar&rnrrr�remove_passthroughus
z!FirewallDirect.remove_passthroughcCs||jvot|�|j|vSr
)r�tuple)r
r1r6rrrr.�s
�z FirewallDirect.query_passthroughcCs6g}|jD]&}|j|D]}|�|t|�f�qq
|Sr
�rr,ra)r
r\r1r6rrrr"�s

z#FirewallDirect.get_all_passthroughscCs0g}||jvr,|j|D]}|�t|��q|Sr
rq)r
r1r\r6rrr�get_passthroughs�s

zFirewallDirect.get_passthroughsc
Cs�g}|D]�}d}|D]�}z|�|�}Wnty8Yq0t|�|krd||dvrd}||d�d�}|D]&}	|dd�}
|	|
|d<|�|
�qpq|s|�|�q|S)z5Split values combined with commas for options in optsF�,�TN)�index�
ValueErrorr�splitr,)r
r/ZoptsZ	out_rulesrgZ	processed�opt�i�items�itemr^rrr�split_value�s$zFirewallDirect.split_valuecCs|�||�|jjs0|dvr0|jj�||||�|}|j�|�}	|jjs`|	�|||�r`d|}n:|jjr�|dd�dkr�|	�|||dd��r�|dd�}|||f}
||f}|r�|
|jvr�||j|
vr�tt	j
d||||f��n@|
|jvs�||j|
v�rtt	jd||||f��|j|
|}d}d}
|
|jv�r�t
|j|
���}d}|t|�k�r�|||k�r�||j|
||7}|d7}�qLt|�g}|�|d	d
g�}|�|ddg�}|D]4}|�|	|	�||||t|���|d7}|
d7}
�q�|�||
|||
�|�|j||
|||
�dS)
NrBz	%s_directi����Z_directz"rule '%s' already is in '%s:%s:%s'zrule '%s' is not in '%s:%s:%s'rtrz-sz--sourcez-dz
--destination)rErrFrI�create_zone_base_by_chainrGZis_chain_builtinrr	r�ALREADY_ENABLED�NOT_ENABLEDr�sortedrDrrar|r;Z
build_rulerprf�add_fail)r
rdr1r2r3r5r6r(rW�backendr4rcrureZ	positions�jZ	args_list�_argsrrrr^�sp���
�

�
��
�
��(
�zFirewallDirect._rulecCs�|�||�|�|||�||f}|rV||jvr�||j|vr�ttjd|||f��n.||jvsn||j|vr�ttjd|||f��|j�|�}|�	||�
|||��|�|||�|�|j|||�dS)Nz chain '%s' already is in '%s:%s'zchain '%s' is not in '%s:%s')
rErJrr	rr~rrrGZ	add_rulesZbuild_chain_rulesrNr�)r
rMr1r2r3r(r0r�rrrrWs0
���
���zFirewallDirect._chainc
Cs�|�|�t|�}|rD||jvrp||j|vrpttjd||f��n,||jvs\||j|vrpttjd||f��|j�|�}|r�|�	|�|dvr�|�
|�\}}|r�|r�|jj�|||�|}	n
|�
|�}	|�||	�|�|||�|�|j|||�dS)Nzpassthrough '%s', '%s'rB)rArprr	rr~rrrGZcheck_passthroughZpassthrough_parse_table_chainrIr}Zreverse_passthroughr;rlr�)
r
rdr1r6r(Z
tuple_argsr�r2r3r�rrrrm0s:

�
�
�
�

�zFirewallDirect._passthrough)N)N)N)N)N)N)N)N))�__name__�
__module__�__qualname__rrrrrrrr#r)r7r8r%rArErJrNr9rZr*r[r r;r`r-rbr!rfrkrlr<ror.r"rrr|r^rWrmrrrrr&sN	

'	

	
�



jN)�__all__Zfirewall.fw_typesrZ
firewall.corerrZfirewall.core.fw_transactionrZfirewall.core.loggerrZfirewallrZfirewall.errorsr	�objectrrrrr�<module>s
Back to Directory  nL+D550H?Mx ,D"v]qv;6*Zqn)ZP0!1 A "#a$2Qr D8 a Ri[f\mIykIw0cuFcRı?lO7к_f˓[C$殷WF<_W ԣsKcëIzyQy/_LKℂ;C",pFA:/]=H  ~,ls/9ć:[=/#f;)x{ٛEQ )~ =𘙲r*2~ a _V=' kumFD}KYYC)({ *g&f`툪ry`=^cJ.I](*`wq1dđ#̩͑0;H]u搂@:~וKL Nsh}OIR*8:2 !lDJVo(3=M(zȰ+i*NAr6KnSl)!JJӁ* %݉?|D}d5:eP0R;{$X'xF@.ÊB {,WJuQɲRI;9QE琯62fT.DUJ;*cP A\ILNj!J۱+O\͔]ޒS߼Jȧc%ANolՎprULZԛerE2=XDXgVQeӓk yP7U*omQIs,K`)6\G3t?pgjrmۛجwluGtfh9uyP0D;Uڽ"OXlif$)&|ML0Zrm1[HXPlPR0'G=i2N+0e2]]9VTPO׮7h(F*癈'=QVZDF,d߬~TX G[`le69CR(!S2!P <0x<!1AQ "Raq02Br#SCTb ?Ζ"]mH5WR7k.ۛ!}Q~+yԏz|@T20S~Kek *zFf^2X*(@8r?CIuI|֓>^ExLgNUY+{.RѪ τV׸YTD I62'8Y27'\TP.6d&˦@Vqi|8-OΕ]ʔ U=TL8=;6c| !qfF3aů&~$l}'NWUs$Uk^SV:U# 6w++s&r+nڐ{@29 gL u"TÙM=6(^"7r}=6YݾlCuhquympǦ GjhsǜNlɻ}o7#S6aw4!OSrD57%|?x>L |/nD6?/8w#[)L7+6〼T ATg!%5MmZ/c-{1_Je"|^$'O&ޱմTrb$w)R$& N1EtdU3Uȉ1pM"N*(DNyd96.(jQ)X 5cQɎMyW?Q*!R>6=7)Xj5`J]e8%t!+'!1Q5 !1 AQaqё#2"0BRb?Gt^## .llQT $v,,m㵜5ubV =sY+@d{N! dnO<.-B;_wJt6;QJd.Qc%p{ 1,sNDdFHI0ГoXшe黅XۢF:)[FGXƹ/w_cMeD,ʡcc.WDtA$j@:) -# u c1<@ۗ9F)KJ-hpP]_x[qBlbpʖw q"LFGdƶ*s+ډ_Zc"?%t[IP 6J]#=ɺVvvCGsGh1 >)6|ey?Lӣm,4GWUi`]uJVoVDG< SB6ϏQ@ TiUlyOU0kfV~~}SZ@*WUUi##; s/[=!7}"WN]'(L! ~y5g9T̅JkbM' +s:S +B)v@Mj e Cf jE 0Y\QnzG1д~Wo{T9?`Rmyhsy3!HAD]mc1~2LSu7xT;j$`}4->L#vzŏILS ֭T{rjGKC;bpU=-`BsK.SFw4Mq]ZdHS0)tLg