+
    iR  c                   sb    ^ RI Ht ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
  ! R R4      tR	# )
    )LastUpdatedOrderedDict)	ipXtables)ebtables)log)errors)FirewallErrorc                   s  a  ] tR t^t o R tR tR tR tR tR t	R t
R tR	 tR
 tR(R ltR tR tR tR tR(R ltR(R ltR tR tR tR(R ltR(R ltR tR tR tR tR tR tR(R lt R(R lt!R  t"R! t#R" t$R# t%R$ t&R% t'R& t(R't)V t*R# ))FirewallDirectc                s2    Wn         V P                  4        R # N)_fw_FirewallDirect__init_vars)selfZfw   &&</usr/lib/python3.14/site-packages/firewall/core/fw_direct.py__init__ZFirewallDirect.__init__   s        c                sv    V P                   : R V P                  : RV P                  : RV P                  : R2# )Z(z, Z))Z	__class___chains_rules_rule_priority_positionsr      &r   __repr__ZFirewallDirect.__repr__   s*    NNLLKK))	
 	
r   c                sL    / V n         / V n        / V n        / V n        R V n        R # r   )r   r   r   _passthroughs_objr   r   r   Z__init_varsZFirewallDirect.__init_vars#   s'    (*%	r   c                s&    V P                  4        R # r   )r
   r   r   r   cleanupZFirewallDirect.cleanup*   s    r   c                s    Wn         R # r   )r   )r   Zobjr   r   set_permanent_configZ#FirewallDirect.set_permanent_config/   s    	r   c                s    \        V P                  4      \        V P                  4      ,           \        V P                  4      ,           ^ 8  d   R# R# )r    TF)lenr   r   r   r   r   r   has_runtime_configurationZ(FirewallDirect.has_runtime_configuration2   s7    t||s4;;//#d6H6H2IIAMr   c                s*   V P                  4       '       d   R # \        V P                  P                  4       4      \        V P                  P	                  4       4      ,           \        V P                  P                  4       4      ,           ^ 8  d   R # R# )TF)r   r   r   get_all_chainsget_all_rulesget_all_passthroughsr   r   r   has_configurationZ FirewallDirect.has_configuration7   so    ))++		((*+$))))+,-$))00234 
 r   c                s    V P                  V P                  P                  4       V P                  P                  4       V P                  P	                  4       3V4       R # r   )
set_configr   r   r   r   )r   transactionr   r   apply_directZFirewallDirect.apply_directC   sJ     			((*		'')		..0
 	
r   c           	     s   / p/ p/ pV P                    Ff  pVw  rVV P                   V,           FH  pV P                  P                  WVV4      '       d   K'  VP                  V. 4      P	                  V4       KJ  	  Kh  	  V P
                   Fg  pVw  rVpV P
                  V,           FH  w  rV P                  P                  WVWyV
4      '       d   K*  W9  d   \        4       W(&   WV,          W3&   KJ  	  Ki  	  V P                   Fa  pV P                  V,           FG  p
V P                  P                  WZ4      '       d   K&  WS9  d   . W5&   W5,          P	                  V
4       KI  	  Kc  	  WV3# r   )
r   r   query_chain
setdefaultappendr   
query_ruler   r   query_passthrough)r   ZchainsrulesZpassthroughstable_idipvtablechainchain_idpriorityargss   &          r   get_runtime_configZ!FirewallDirect.get_runtime_configP   sE    H#LSh//yy,,S??%%h3::5A 0 % H"*S"&++h"7"7yy++CNN,*@*B8@(OX$45	 #8 $ %%C**3//yy223==.,.) %,,T2	 0 & |,,r   c                sH    V P                   V P                  V P                  3# r   )r   r   r   r   r   r   
get_configZFirewallDirect.get_configo   s    dkk4+=+=>>r   Nc                s   V P                   P                  V4      ;_uu_ 4       pVw  rEpV FD  pVw  rWG,           F1  p
V P                  WV
4      '       d   K   V P                  WWR 7       K3  	  KF  	  V FL  pVw  rp
W\,           F8  w  rV P                  WWV4      '       d   K    V P                  VV	V
VVVR 7       K:  	  KN  	  V F?  pWh,           F0  pV P                  W4      '       d   K   V P                  WVR 7       K2  	  KA  	  RRR4       R#   \         d,   p\
        P                  ! \        T4      4        Rp?EK  Rp?ii ; i  \         d+   p\
        P                  ! \        T4      4        Rp?K  Rp?ii ; i  \         d+   p\
        P                  ! \        T4      4        Rp?K  Rp?ii ; i  + '       g   i     R# ; i))use_transactionN)r	   with_transactionr#   	add_chainr   r   ZwarningZstrr&   add_ruler'   add_passthrough)r   Zconfr2   r!   r   r   r   r)   r*   r+   r,   Zerrorr-   r.   r/   s   &&&            r   r    ZFirewallDirect.set_configr   s   XX&&77;/3,Wm#'$..E++C>>4 NN #E +  / $ #&.#U&,&6&6NH??3uMM
4 MM # % % ( $0; *  '7 #  %)..D11#<<4 00K0X / %= 87  - 4KKE
334   - 4KKE
334  - 4KKE
334G 877s   /F>D,5F>'E>,F>0FF>E E?F>EF>FE>8F>>FF>F;F60F>6F;;F>>G	c                s`    . ROpW9  d$   \        \        P                  RV: RV: R24      hR# )ipv4'
' not in 'N)r7   ipv6Zeb)r   r   ZINVALID_IPV)r   r*   Zipvss   && r   
_check_ipvZFirewallDirect._check_ipv   s)    %? 2 2#t4TUU r   c                s    V P                  V4       VR9   d   \        P                  P                  4       M\        P                  P                  4       pW#9  d$   \        \        P                  RV: RV: R24      hR# )r7   r8   r9   Nr7   r:   )r;   r   BUILT_IN_CHAINSkeysr   r   r   ZINVALID_TABLE)r   r*   r+   Ztables   &&& r   _check_ipv_tableZFirewallDirect._check_ipv_table   sn     && %%**,))..0 	
 $$E6&J  r   c                st   VR9   dd   \         P                  V,          pV P                  P                  '       d   / pM[V P                  P	                  V4      P
                  V,          pM.\        P                  V,          p\        P                  V,          pW49   d"   \        \        P                  RV,          4      hW59   d"   \        \        P                  RV,          4      hVR9   dK   V P                  P                  P                  V4      e"   \        \        P                  RV,          4      hR# R# )r7   zchain '%s' is built-in chainzchain '%s' is reservedNzChain '%s' is reservedr<   )r   r=   r	   nftables_enabledget_direct_backend_by_ipv
our_chainsr   Z
OUR_CHAINSr   r   ZBUILTIN_CHAINzoneZzone_from_chainZINVALID_CHAIN)r   r*   r+   r,   Zbuilt_in_chainsrC   s   &&&&  r   _check_builtin_chainZ#FirewallDirect._check_builtin_chain   s   ""'77>Oxx(((
!XX??DOOPUV
&66u=O!,,U3J#$$&Du&L   4 46NQV6VWW""xx}},,U3?#((*BU*J  @ #r   c                s   V'       d.   V P                   P                  V. 4      P                  V4       R# V P                   V,          P                  V4       \	        V P                   V,          4      ^ 8X  d   V P                   V R# R# r    N)r   r$   r%   remover   )r   r)   r,   add   &&&&r   _register_chainZFirewallDirect._register_chain   sb    LL##Hb188?LL"))%04<<)*a/LL* 0r   c           	     sL   V P                   P                  V4      ;_uu_ 4       pV P                   P                  4       '       d&   VP                  V P                   P                  4       V P                   P
                  '       dp   V P                   P                  P                  4       '       dF   VP                  V P                   P                  P                  V P                   P                  .4       V P                  R WW54       RRR4       R#   + '       g   i     R# ; iTN)r	   r3   may_skip_flush_direct_backendsadd_preflush_direct_backendsipset_enabledipsetomit_native_ipsetapply_ipsetsipset_backend_chainr   r*   r+   r,   r2   r!      &&&&& r   r4   ZFirewallDirect.add_chain   s    XX&&77;xx6688##DHH$B$BCxx%%%$((..*J*J*L*L##HHNN//$((2H2H1I
 KKc%= 8777s   A!D)D0ADD#	c           	     s    V P                   P                  V4      ;_uu_ 4       pV P                  R WW54       RRR4       R#   + '       g   i     R# ; iFN)r	   r3   rT   rU   rV   r   remove_chainZFirewallDirect.remove_chain   s8    XX&&77;KKs5> 8777s   AA	c                s    V P                  W4       V P                  WV4       W3pW@P                  9   ;'       d    W0P                  V,          9   # r   )r@   rE   r   )r   r*   r+   r,   r)      &&&& r   r#   ZFirewallDirect.query_chain   sH    c)!!#e4<<<'KKE\\(5K,KKr   c                st    V P                  W4       W3pW0P                  9   d   V P                  V,          # . # r   )r@   r   )r   r*   r+   r)   r?   r   
get_chainsZFirewallDirect.get_chains   s5    c)<||#<<))	r   c                s    . pV P                    F4  pVw  r4V P                   V,           F  pVP                  W4V34       K  	  K6  	  V# r   )r   r%   )r   rkeyr*   r+   r,   s   &     r   r   ZFirewallDirect.get_all_chains   sJ    <<CLSc**#e,- +   r   c                sN   V P                   P                  V4      ;_uu_ 4       pV P                   P                  4       '       d&   VP                  V P                   P                  4       V P                   P
                  '       dp   V P                   P                  P                  4       '       dF   VP                  V P                   P                  P                  V P                   P                  .4       V P                  R WW4WW4       RRR4       R#   + '       g   i     R# ; irK   )r	   r3   rL   rM   rN   rO   rP   rQ   rR   rS   _ruler   r*   r+   r,   r.   r/   r2   r!      &&&&&&& r   r5   ZFirewallDirect.add_rule   s    XX&&77;xx6688##DHH$B$BCxx%%%$((..*J*J*L*L##HHNN//$((2H2H1I JJtS$L 8777s   A!D)D0ADD$	c                s    V P                   P                  V4      ;_uu_ 4       pV P                  R WW4WW4       RRR4       R#   + '       g   i     R# ; irW   )r	   r3   r]   r^   r_   r   remove_ruleZFirewallDirect.remove_rule   s:    XX&&77;JJuc%4M 8777s   AA	c                s    V P                  W4       WV3pW`P                  9   ;'       d    WE3V P                  V,          9   # r   )r@   r   )r   r*   r+   r,   r.   r/   r-   s   &&&&&& r   r&   ZFirewallDirect.query_rule  s@    c)&;;&TTH+;t{{8?T+TTr   c                s    V P                  W4       WV3pW@P                  9   d+   \        V P                  V,          P                  4       4      # . # r   )r@   r   listr>   )r   r*   r+   r,   r-   rY   r   	get_rulesZFirewallDirect.get_rules  sF    c)&{{"H-22455	r   c                s    . pV P                    FA  pVw  r4pV P                   V,           F"  w  rgVP                  W4WV\        V4      34       K$  	  KC  	  V# r   )r   r%   ra   )r   r[   r\   r*   r+   r,   r.   r/   s   &       r   r   ZFirewallDirect.get_all_rules  sU    ;;C"%S"&++c"2"2#etDzBC #3  r   c                sH   V'       d   W P                   9  d   \        4       V P                   V&   W0P                   V,          V&   W P                  9  d   / V P                  V&   W0P                  V,          9   d)   V P                  V,          V;;,          V,          uu&   R# WPP                  V,          V&   R# V P                   V,          V \        V P                   V,          4      ^ 8X  d   V P                   V V P                  V,          V;;,          V,          uu&   R# rF   )r   r   r   r   )r   rule_idr-   r.   enablecounts   &&&&&&r   _register_ruleZFirewallDirect._register_rule  s    {{*(>(@H%-5KK!'*<<<:<--h788BB--h7AUJADI--h7AH%g.4;;x()Q.KK)))(3H=F=r   c                s    V P                   P                  V P                   P                  V4      P                  V4      #   \         d6   p\
        P                  ! T4       \        \        P                  T4      hR p?ii ; ir   )
r	   rulerB   ZnameZ	Exceptionr   Zdebug2r   r   ZCOMMAND_FAILED)r   r*   r/   Zmsgr?   r   passthroughZFirewallDirect.passthrough)  s_    	<88==!C!CC!H!M!MtTT 	<JJsO 5 5s;;	<s   >A B0A<<Bc                s@   V'       dD   WP                   9  d   . V P                   V&   V P                   V,          P                  V4       R# V P                   V,          P                  V4       \        V P                   V,          4      ^ 8X  d   V P                   V R# R# rF   )r   r%   rG   r   )r   r*   r/   rd   rI   r   _register_passthroughZ$FirewallDirect._register_passthrough0  s~    ,,,*,""3's#**40s#**404%%c*+q0&&s+ 1r   c           	     s`   V P                   P                  V4      ;_uu_ 4       pV P                   P                  4       '       d&   VP                  V P                   P                  4       V P                   P
                  '       dp   V P                   P                  P                  4       '       dF   VP                  V P                   P                  P                  V P                   P                  .4       V P                  R V\        V4      V4       RRR4       R#   + '       g   i     R# ; irK   )r	   r3   rL   rM   rN   rO   rP   rQ   rR   rS   _passthroughra   r   r*   r/   r2   r!   rY   r   r6   ZFirewallDirect.add_passthrough:  s    XX&&77;xx6688##DHH$B$BCxx%%%$((..*J*J*L*L##HHNN//$((2H2H1I dCd[A 8777s   A!D)D0A"DD-	c           	     s    V P                   P                  V4      ;_uu_ 4       pV P                  R V\        V4      V4       RRR4       R#   + '       g   i     R# ; irW   )r	   r3   rj   ra   rk   rY   r   remove_passthroughZ!FirewallDirect.remove_passthroughF  s@    XX&&77;eS$t*kB 8777s   AA	c                sl    WP                   9   ;'       d     \        V4      V P                   V,          9   # r   )r   tuple)r   r*   r/   s   &&&r   r'   Z FirewallDirect.query_passthroughJ  s-    (((SSU4[D<N<Ns<S-SSr   c                s    . pV P                    F9  pV P                   V,           F  pVP                  V\        V4      34       K!  	  K;  	  V# r   r   r%   ra   )r   r[   r*   r/   s   &   r   r   Z#FirewallDirect.get_all_passthroughsM  sK    %%C**3//#tDz*+ 0 & r   c                s    . pWP                   9   d5   V P                   V,           F  pVP                  \        V4      4       K  	  V# r   rn   )r   r*   r[   r/   s   &&  r   get_passthroughsZFirewallDirect.get_passthroughsT  s@    $$$**3//d$ 0r   c                s   . pV F  pRpV F  p VP                  V4      p\        V4      V8  dg   RWG^,           ,          9   dQ   RpWG^,           ,          P                  R4      pV F(  p	VR,          p
WV^,           &   VP                  V
4       K*  	  K  K  K  	  V'       d   K  VP                  V4       K  	  V#   \         d     K  i ; i)z5Split values combined with commas for options in optsFZ,T:NNN)indexr   Zsplitr%   Z
ValueError)r   r(   ZoptsZ	out_rulesrg   Z	processedZoptZiZitemsZitemr]   s   &&&        r   split_valueZFirewallDirect.split_value[  s     	DI4

3A 4y1}U); %)	 $U 1 1# 6$)D$(GE+/!a%L%,,U3 %* *<}   9  &' * ! " s   B<<C
Cc                s   V P                  W#4       V P                  P                  '       g.   VR9   d'   V P                  P                  P	                  W#WG4       TpV P                  P                  V4      p	V P                  P                  '       g#   V	P                  W#V4      '       d   RV,          pMFV P                  P                  '       d+   VRR R8X  d!   V	P                  W#VRR 4      '       d   VRR pW#V3p
WV3pV'       dT   WP                  9   dC   WP                  V
,          9   d,   \        \        P                  RV: RV: RV: RV: R2	4      hMlWP                  9  g   WP                  V
,          9  d,   \        \        P                  RV: RV: RV: RV: R2	4      hV P                  V
,          V,          p^p^ pWP                  9   d{   \        V P                  V
,          P                  4       4      p^ pV\        V4      8  d?   W^V,          8  d2   WP                  V
,          W,          ,          ,          pV^,          pKN  \!        V4      .pV P#                  VR	R
.4      pV P#                  VRR.4      pV F@  pVP%                  WP'                  WW\)        V4      4      4       V^,          pV^,          pKB  	  V P+                  WWQV4       VP-                  V P*                  WWQ'       * V4       R# )r7   z	%s_directNZ_directzrule '' already is in ':r8   ' is not in 'z-sz--sourcez-dz--destinationr<   i)r@   r	   rA   rD   create_zone_base_by_chainrB   Zis_chain_builtinr   r   r   ALREADY_ENABLEDNOT_ENABLEDr   Zsortedr>   r   ra   rq   r5   Z
build_rulerm   rf   add_fail)r   rd   r*   r+   r,   r.   r/   r!   rT   backendr-   rc   rp   re   Z	positionsZjZ	args_list_argss   &&&&&&&&          r   r]   ZFirewallDirect._rulev  s   c) xx(((S4D-DHHMM33CS((44S9 xx(((W-E-E.
 .
 !E*FHH%%%bc
i'((U3BZ@@ 3BZF&";;&7kk(6K+K#**<@#ueT 
 {{*g[[=R.R#&&8<c5%P  {{8,W5HP 444t<<XFKKMNIAc)n$q\)A66x@NNQ
 $ZL	$$Yz0BC	$$Y0GH	E  ++F6%PU,W QJEQJE  	GxGHj%	
r   c           
     s|   V P                  W#4       V P                  W#V4       W#3pV'       dP   W`P                  9   d?   W@P                  V,          9   d(   \        \        P
                  R V: RV: RV: R24      hMNW`P                  9  g   W@P                  V,          9  d(   \        \        P                  R V: RV: RV: R24      hV P                  P                  V4      pVP                  WwP                  WV4      4       V P                  WdV4       VP                  V P                  WdV'       * 4       R# )zchain 'rr   rs   r8   rt   N)r@   rE   r   r   r   rv   rw   r	   rB   Z	add_rulesZbuild_chain_rulesrJ   rx   )r   rH   r*   r+   r,   r!   r)   ry   s   &&&&&&  r   rT   ZFirewallDirect._chain  s    c)!!#e4<<<'E\\(5K,K#**:?eL 
 ||+uLL<R/R#&&6;S%H 
 ((44S9g'@'@U'STXc2T118GLr   c                s2   V P                  V4       \        V4      pV'       dL   W P                  9   d;   WPP                  V,          9   d$   \        \        P
                  R V: RV: R24      hMJW P                  9  g   WPP                  V,          9  d$   \        \        P                  R V: RV: R24      hV P                  P                  V4      pV'       de   VP                  V4       VR9   dJ   VP                  V4      w  rxV'       d/   V'       d'   V P                  P                  P                  W'W4       Tp	MVP                  V4      p	VP                  Wi4       V P                  W%V4       VP!                  V P                  W%V'       * 4       R# )zpassthrough 'z', 'r8   Nr<   )r;   rm   r   r   r   rv   rw   r	   rB   Zcheck_passthroughZpassthrough_parse_table_chainrD   ru   Zreverse_passthroughr5   ri   rx   )
r   rd   r*   r/   r!   Z
tuple_argsry   r+   r,   rz   s
   &&&&&     r   rj   ZFirewallDirect._passthrough  sA   4[
(((Z;M;Mc;R-R#**T,R 
 ---%7%7%<<#&&C(N  ((44S9%%d+&&&DDTJUHHMM;;E E//5EW,""3F;T77f*Ur   )r   r	   r   r   r   r   r   )+Z__name__Z
__module__Z__qualname__Z__firstlineno__r   r   r
   r   r   r   r   r"   r0   r1   r    r;   r@   rE   rJ   r4   rX   r#   rZ   r   r5   r`   r&   rb   r   rf   rh   ri   r6   rl   r'   r   ro   rq   r]   rT   rj   Z__static_attributes__Z__classdictcell__)Z__classdict__s   @r   r   r      s     




->?%4NV
,+>?LMNU
G(<,
BCT6m
^M0$V $Vr   r   N)Zfirewall.fw_typesr   Zfirewall.corer   r   Zfirewall.core.loggerr   Zfirewallr   Zfirewall.errorsr   r   ) r   r   <module>r{      s'    5 # " $  )KV KVr   