+
    i  c                   s$   ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	H
t
HtHtHtHtHt ^ RIHtHtHt ^ RIHtHtHtHtHtHt ^ RIHt ^ RIHt ^ RIHt ^ R	I H!t! R
 t"R t#R t$R t%R t& ! R R]4      t' ! R R]4      t(RR lt)RR lt*R# )i    N)config)checkIPcheckIP6coalescePortRangemax_policy_name_lenportInPortRangeportStruniqify)DEFAULT_POLICY_TARGETPOLICY_TARGETSDEFAULT_POLICY_PRIORITY)	IO_ObjectIO_Object_ContentHandlerIO_Object_XMLGenerator
check_portcheck_tcpudpcheck_protocol)richlog)errors)FirewallErrorc           	      s&  a VR 8X  d    R# VR8X  d    R# VR8X  d   V P                   '       d   V P                   P                  '       d2   \        \        P                  R\        V P                   4       R24      h\        P                  ! V P                   \        P                  ! SR,          4      R7      V n         R# SR,          V P                  P                  9  d-   V P                  P                  P                  SR,          4       R# VR8X  Ed   V P                   '       d   V P                   P                  '       d2   \        \        P                  R\        V P                   4       R24      h\        P                  ! V P                   \        P                  ! SR,          SR	,          4      R7      V n         R# \        SR,          4       \        SR	,          4       \!        SR,          R
4      SR	,          3p\#        \%        V3R lV P                  P&                  4      4      pV F&  p\)        V^ ,          V^ ,          4      '       g   K%   R# 	  \+        V^ ,          V UUu. uF  w  rgVNK	  	  upp4      w  rV	 F=  p
\!        V
R
4      SR	,          3pV P                  P&                  P-                  V4       K?  	  V F=  p
\!        V
R
4      SR	,          3pV P                  P&                  P                  V4       K?  	   R# VR	8X  Ed   V P                   '       d   V P                   P                  '       d2   \        \        P                  R\        V P                   4       R24      h\        P                  ! V P                   \        P.                  ! SR,          4      R7      V n         R# \1        SR,          4       SR,          V P                  P2                  9  d-   V P                  P2                  P                  SR,          4       R# VR8X  d   V P                   '       d   V P                   P                  '       d2   \        \        P                  R\        V P                   4       R24      hRpRS9   d   SR,          RD9  d
   SR,          p\        P                  ! V P                   \        P4                  ! V4      R7      V n         R# \        \        P                  R4      hVR8X  d   V P                   '       d   V P                   P                  '       d2   \        \        P                  R\        V P                   4       R24      h\        P                  ! V P                   \        P6                  ! SR,          4      R7      V n         R# SR,          V P                  P8                  9  d-   V P                  P8                  P                  SR,          4       R# VR8X  d   V P                   '       d   V P                   P                  '       d2   \        \        P                  R\        V P                   4       R24      h\        P                  ! V P                   \        P:                  ! SR,          4      R7      V n         R# \        \        P                  R4      hVR8X  d   V P                   '       d   V P                   P                  '       d2   \        \        P                  R\        V P                   4       R24      h\        P                  ! V P                   \        P<                  ! 4       R7      V n         R# RV P                  n         R# VR8X  Ed   RpRS9   d
   SR,          pRpRS9   d
   SR,          pV P                   '       d   V P                   P                  '       d2   \        \        P                  R\        V P                   4       R24      h\        P                  ! V P                   \        P@                  ! SR,          SR	,          W4      R7      V n         R# \        SR,          4       \        SR	,          4       V'       d   \        V4       V'       dD   \C        V4      '       g3   \E        V4      '       g"   \        \        PF                  RV,          4      h\!        SR,          R
4      SR	,          \!        VR
4      \        V4      3pWP                  PH                  9  d&   V P                  PH                  P                  V4       R# VR8X  Ed   V P                   '       d   V P                   P                  '       d2   \        \        P                  R\        V P                   4       R24      h\        P                  ! V P                   \        PJ                  ! SR,          SR	,          4      R7      V n         R# \        SR,          4       \        SR	,          4       \!        SR,          R
4      SR	,          3p\#        \%        V3R lV P                  PL                  4      4      pV F&  p\)        V^ ,          V^ ,          4      '       g   K%   R# 	  \+        V^ ,          V UUu. uF  w  rgVNK	  	  upp4      w  rV	 F=  p
\!        V
R
4      SR	,          3pV P                  PL                  P-                  V4       K?  	  V F=  p
\!        V
R
4      SR	,          3pV P                  PL                  P                  V4       K?  	   R# VR8X  Ed   V P                   '       g   \        \        P                  R4      hV P                   PN                  '       d2   \        \        P                  R\        V P                   4       R24      hRpRpR S9   d
   SR ,          pRpR!S9   d
   SR!,          pR"S9   d   SR",          PQ                  4       RE9   d   Rp\        P                  ! V P                   \        PR                  ! VVV4      R#7      V n         R# VRF9   Ed   V P                   '       g   \        \        P                  R(4      hV P                   PT                  '       d2   \        \        P                  R)\        V P                   4       R24      hVR$8X  d<   \        P                  ! V P                   \        PV                  ! 4       R*7      V n         MVR%8X  dO   RpR+S9   d
   SR+,          p\        P                  ! V P                   \        PX                  ! V4      R*7      V n         MVR&8X  d<   \        P                  ! V P                   \        PZ                  ! 4       R*7      V n         MKVR'8X  dE   SR,,          p\        P                  ! V P                   \        P\                  ! V4      R*7      V n         V P                   PT                  V n/        R# VR-8X  d   V P                   '       g   \        \        P                  R.4      hV P                   P`                  '       d2   \        \        P                  R/\        V P                   4       R24      hRpR0S9   d
   SR0,          pRpR1S9   d
   SR1,          p\        P                  ! V P                   \        Pb                  ! VV4      R27      V n         V P                   P`                  V n/        R# VR38X  Ed
   V P                   '       g   \        \        P                  R44      hV P                   P`                  '       d2   \        \        P                  R/\        V P                   4       R24      hRpR5S9   d
   SR5,          pRpR1S9   d
   SR1,          pRpR6S9   d
   SR6,          p\        P                  ! V P                   \        Pd                  ! VVV4      R27      V n         V P                   P`                  V n/        R# VR78X  d   V P                   '       g   \        \        P                  R84      hV P                   Pf                  '       d2   \        \        P                  R9\        V P                   4       R24      h\        P                  ! V P                   \        Ph                  ! 4       R:7      V n         V P                   Pf                  V n/        R# VR;8X  dM   Rp^ pR<S9   d
   SR<,          pR=S9   d   \k        SR=,          4      p\        Pl                  ! VVR>7      V n         R# VR?8X  Ed#   V P^                  '       g   \        \        P                  R@4      hV P^                  Pn                  '       d2   \        \        P                  RA\        V P                   4       R24      hSR,          p\        P                  ! V P^                  \        Pp                  ! VSPs                  RB4      4      RC7      V n/        \u        V P^                  \        Ph                  4      '       d4   \        P                  ! V P                   V P^                  R:7      V n         R# \u        V P^                  \        Pb                  \        Pd                  34      '       d4   \        P                  ! V P                   V P^                  R27      V n         R# \u        V P^                  \        PV                  \        PX                  \        PZ                  \        P\                  34      '       d2   \        P                  ! V P                   V P^                  R*7      V n         R# R# u uppi u uppi )GshortdescriptionservicezMore than one element in rule ''.name)elementTportprotocol-c                 *   < V ^,          SR,          8H  # i   r    Zxattrs   &</usr/lib/python3.14/site-packages/firewall/core/io/policy.py<lambda>%common_startElement.<locals>.<lambda>L       QqTU:%66    valuetcp-mss-clamppmtuNztcp-mss-clamp outside of rule.
icmp-block	icmp-typezicmp-block outside of rule.
masqueradeforward-port to-portto-addrz#to-addr '%s' is not a valid addresssource-portc                 r   r    r!   r"   r$   r%   r&   r'      r(   r)   destinationz!Destination outside of rich rule.z#More than one destination in rule 'Faddressipsetinvert)r5   acceptrejectdropmarkzAction outside of rich rule.zMore than one action in rule ')actiontypesetr   zLog outside of rich rule.zMore than one log in rule 'levelprefixr   nflogzLog outside of rule.group
queue-sizeauditzAudit outside of rule.zMore than one audit in rule ')rE   rulefamilypriority)rG   rH   limitz'Limit outside of action, log and audit.zMore than one limit in rule 'burst)rI   )NZNoneZyesZtrue)r9   r:   r;   r<   );_ruler   r   r   INVALID_RULEstrdataclassesreplacer   Rich_Serviceitemservicesappend	Rich_Portr   r   r   listZfilterportsr   r   ZremoveRich_Protocolr   	protocolsRich_Tcp_Mss_ClampRich_IcmpBlockicmp_blocksRich_IcmpTypeRich_Masquerader/   Rich_ForwardPortr   r   INVALID_ADDRforward_portsRich_SourcePortsource_portsr5   lowerZRich_Destinationr=   Rich_AcceptRich_Reject	Rich_Drop	Rich_Mark	_limit_okr   Rich_LogZ
Rich_NFLogrE   Z
Rich_Auditint	Rich_RulerI   Z
Rich_Limitget
isinstance)objr   r#   Znew_port_idZexisting_port_idsZport_idZ_portZ	_protocolZadded_rangesZremoved_rangesZ_rangeZentryZ_valueto_portZto_addrr8   r6   r7   Z_typeZ_setr@   rA   rC   	thresholdrG   rH   r*   s   &&f                        r%   common_startElementrr   '   sA   wL
 K
 
	H
 E
 
	999yy   #''5c#))n5ERH  $++		4#4#4U6]#CCI = 1 11HH$$U6]3l	 i	 
999yy   #''5c#))n5ERH  $++		4>>%-zAR#SCI 5=!U:&' uV}c2E*4EF 6G
 )G{1~wqz::| C	 ) ,=AAR SAR+=EAR S,(L ) -uZ/@A%%e, ) ' -uZ/@A%%e, 'h a 
	999yy   #''5c#))n5ERH  $++		4#5#5eGn#ECIR K 5>*W~SXX%7%77""))%.9F C 
	 999yy   #''5c#))n5ERH  F%E'N.$Hw#++		4#:#:6#BCIn g   3 35UVV		999yy   #''5c#))n5ERH  $++		4#6#6uV}#ECI = 4 44HH  ''f6J G 
	999yy   #''5c#))n5ERH  $++		4#5#5eFm#DCI  3 35RSS		999yy   #''5c#))n5ERH  $++CIIt?S?S?UVCI\ Y #'CHHX U 
	I&GI&G999yy   #''5c#))n5ERH  $++		--&M5#4gCI 5=!U:&'w7##HW,=,=#'')NQX)X  E&M3'*GS!L	
 ...HH""))%0H E 
	999yy   #''5c#))n5ERH  $++		,,U6]E*<MNCI 5=!U:&' uV}c2E*4EF 68M8MN
 )G{1~wqz::V ] ) ,=AAR SAR+=EAR S,(L ) -uZ/@A%%,,U3 ) ' -uZ/@A%%,,U3 'B { 
	yyy##%H  99   ##5c#))n5ERH  I&Ge'NEux!6!6!8O!KF''II4#8#8%#P
	T M 
5	5yyy 3 35STT99##'Ec#))nEUUW%X  8#++CIId>N>N>PQCIXEf#++CIId>N>Nu>UVCIV^#++CIIdnn>NOCIV^<D#++CIIdnnT>RSCI		((f c 
yyy 3 35PQQ99===##'B3syy>BRRT%U  e'NEu8_F''		t}}VU7ST			F C 
yyy 3 35KLL99===##'B3syy>BRRT%U  e'NEu8_F	5 l+I''II4??5&)D
	 		\ Y 
yyy 3 35MNN99???##'DS^DTTV%W   ''		9JK			H E 
u8_F5,-HNN&8D	6 3 
}}}##%N  ==##'DS^DTTV%W  g#++MM		'8J!K
 cmmT__55#++CIIS]]KCI  t'GHH#++CII3==ICI  MMt//P
 
 $++CIIcmmLCI  q !Tf !Ts   .AM'AM-c                 s    VR 8X  dS   V P                   P                  4        V P                  P                  P	                  V P                   4       RV n         R# VR9   d
   RV n        R# R# )rF   N)r9   r:   r;   r<   r   rE   )rL   ZcheckrR   rulesZaddri   )ro   r      &&r%   common_endElementru   r  sN    v~		399%		E	E 
Fr)   c           
      s   \        V \        4      '       d   R MRpVR8X  dV   RV9   dO   VR,          pV F=  pWv9  g   K  \        \        P                  RP                  WPP                  V4      4      h	  R# VR8X  d0   V F'  p\        V^ ,          4       \        V^,          4       K)  	  R# VR8X  d   V F  p	\        V	4       K  	  R# VR8X  d   RV9   d   VR,          p
V F  pW9  g   K  \        \        P                  RP                  WPP                  V4      4      pWP                  R	/ 4      P                  R
/ 4      9   d(   \        P                  ! RP                  V4      4       K  Vh	  R# VR8X  Ed"   V EF  p\        V^ ,          4       \        V^,          4       V^,          '       gD   V^,          '       g5   \        \        P                  RP                  WPP                  V4      4      hV^,          '       d   \        V^,          4       V^,          '       g   K  \        V^,          4      '       d   K  \!        V^,          4      '       d   K  \        \        P"                  RP                  WPP                  V^,          4      4      h	  R# VR8X  d0   V F'  p\        V^ ,          4       \        V^,          4       K)  	  R# VR9   Ed   V EF  p\$        P&                  ! VR7      pVP(                  '       Ed   RV9   Ed   \        VP(                  \$        P*                  4      '       g,   \        VP(                  \$        P,                  4      '       Ed8   VR,          p
VP(                  P                  V
9  d   \        \        P                  RP                  WPP                  VP(                  P                  4      4      pVP(                  P                  VP                  R	/ 4      P                  R
/ 4      9   d)   \        P                  ! RP                  V4      4       EKZ  VhVP.                  '       EdQ   VR,          VP(                  P                  ,          pVP0                  '       Ed   VP.                  VP0                  9  d   \        \        P                  RP                  VV P                  VP.                  VP(                  P                  4      4      pVP                  R	/ 4      P                  R
/ 4      P                  VP(                  P                  4      pV'       dV   VP0                  '       dD   VP.                  VP0                  9   d)   \        P                  ! RP                  V4      4       EK  VhEK  EK  EK  \        VP(                  \$        P2                  4      '       dn   VP(                  P                  VR,          9  dI   \        \        P                  RP                  WPP                  VP(                  P                  4      4      hEKY  VP4                  '       d   VP4                  P6                  '       dn   VP4                  P6                  VR,          9  dI   \        \        P8                  RP                  WPP                  VP4                  P6                  4      4      hEK  VP0                  '       g   EK	  VP0                  P6                  '       g   EK(  VP0                  P6                  VR,          9  g   EKM  \        \        P8                  RP                  WPP                  VP0                  P6                  4      4      h	  R# R# )PolicyZZonerS   z){} '{}': '{}' not among existing servicesrW   rY   r\   Z	icmptypesz+{} '{}': '{}' not among existing ICMP typesZruntimeZicmptypes_unsupportedz{} (unsupported)ra   z-{} '{}': '{}' is missing to-port AND to-addr z,{} '{}': to-addr '{}' is not a valid addressrc   Zrule_strz<{} '{}': rich rule family '{}' conflicts with icmp type '{}'Zipsetsz'{} '{}': '{}' not among existing ipsetsN)Z	rules_str
rich_rules)rn   rv   r   r   ZINVALID_SERVICEformatr   r   r   r   ZINVALID_ICMPTYPErm   r   Zdebug1INVALID_FORWARDr   r   r`   r   rl   r   r[   r]   rG   r5   rQ   sourcer7   ZINVALID_IPSET)ro   r    rR   
all_configall_io_objectsZobj_typeZexisting_servicesr   r   ZprotoZexisting_icmptypesZicmptypeZexfwd_portrF   Zobj_richZictZict_unsupporteds   &&&&&             r%   common_check_configr   {  s   %c622xHzjN:*:6G/#**?FF ((G   
DtAwa!  
	E5! 		;.#@+K8H1"++AHH ((H 11)R@DD+R   JJ188<=H  
	 Hx{#!%A;;x{{#**CJJ ((H  {{8A;'{{x{++HXa[4I4I'++FMM$hh  ( 
	DtAwa!  
,	,D~~t4H   >1x//1D1DEE!("2"2D4F4FGG &4K%@"##((0BB&//ELL$hh0@0@0E0EB  '',,0B0B9b0Q0U0U/1  

#5#<#<R#@A ___(5h6F6F6K6KLC8??#//+Q*"33Zaa ( # ( ( 0 0 5 5	 +..y"= S!8"= S!1!1!6!67 ( , / ; ; ; (?3N3N NJJ'9'@'@'DE"$H- ,R %2 H,,d.?.?@@##((z0JJ'..CJJ$hh0@0@0E0E  K X__%:%:%:??((x0HH',,AHH$hh0E0E  I %%%(*>*>*D*D*D''--^H5MM',,AHH$hh0D0D0J0J G  
-r)   c                 s    R VP                   /pVP                  pVe   \        V4      VR&   V P                  RV4       R# )r*   NrJ   rI   )r*   rJ   rN   simpleElement)handlerrI   ZdrJ   s   &&  r%   _handler_add_rich_limitr     s<    	%++AKKEZ'
'1%r)   c           	      s   V P                   '       dr   V P                   R 8w  da   VP                  R4       VP                  R/ 4       VP                  V P                   4       VP	                  R4       VP                  R4       V P
                  '       dr   V P
                  R 8w  da   VP                  R4       VP                  R/ 4       VP                  V P
                  4       VP	                  R4       VP                  R4       \        V P                  4       F9  pVP                  R4       VP                  RRV/4       VP                  R4       K;  	  \        V P                  4       FI  pVP                  R4       VP                  RRV^ ,          RV^,          /4       VP                  R4       KK  	  \        V P                  4       F9  pVP                  R4       VP                  RR	V/4       VP                  R4       K;  	  \        V P                  4       F9  pVP                  R4       VP                  R
RV/4       VP                  R4       K;  	  V P                  '       d5   VP                  R4       VP                  R/ 4       VP                  R4       \        V P                  4       F  pVP                  R4       RV^ ,          RV^,          /pV^,          '       d   V^,          R 8w  d   V^,          VR&   V^,          '       d   V^,          R 8w  d   V^,          VR&   VP                  RV4       VP                  R4       K  	  \        V P                  4       FI  pVP                  R4       VP                  RRV^ ,          RV^,          /4       VP                  R4       KK  	  \        V P                   4       EF  p/ pVP"                  '       d   VP"                  VR&   VP$                  ^ 8w  d   \'        VP$                  4      VR&   VP                  R4       VP                  RV4       VP                  R4       VP(                  '       d   / pVP(                  P*                  '       d   VP(                  P*                  VR&   VP(                  P,                  '       d   VP(                  P,                  VR&   VP(                  P.                  '       d   VP(                  P.                  VR&   VP(                  P0                  '       d   RVR&   VP                  R4       VP                  RV4       VP                  R4       VP2                  '       d   / pVP2                  P*                  '       d   VP2                  P*                  VR&   VP2                  P.                  '       d   VP2                  P.                  VR&   VP2                  P0                  '       d   RVR&   VP                  R4       VP                  RV4       VP                  R4       VP4                  '       Ed   R p	/ p\7        VP4                  \8        P:                  4      '       d   Rp	VP4                  P<                  VR&   EM;\7        VP4                  \8        P>                  4      '       d7   Rp	VP4                  P@                  VR&   VP4                  PB                  VR&   EM\7        VP4                  \8        PD                  4      '       d   Rp	VP4                  PF                  VR	&   EM\7        VP4                  \8        PH                  4      '       dU   Rp	VP4                  PF                  '       d5   VP4                  PF                  R8w  d   VP4                  PF                  VR	&   EM\7        VP4                  \8        PJ                  4      '       d   Rp	EM\7        VP4                  \8        PL                  4      '       d   R
p	VP4                  P<                  VR&   EM\7        VP4                  \8        PN                  4      '       d   Rp	VP4                  P<                  VR&   EMZ\7        VP4                  \8        PP                  4      '       d   Rp	VP4                  P@                  VR&   VP4                  PB                  VR&   VP4                  PR                  R 8w  d   VP4                  PR                  VR&   VP4                  PT                  R 8w  d   VP4                  PT                  VR&   M\7        VP4                  \8        PV                  4      '       d6   Rp	VP4                  P@                  VR&   VP4                  PB                  VR&   M4\Y        \Z        P\                  R\_        VP4                  4      ,          4      hVP                  R4       VP                  W4       VP                  R4       VP`                  '       Ed   \7        VP`                  \8        Pb                  4      '       Ed$   / pVP`                  Pd                  '       d   VP`                  Pd                  VR&   VP`                  Pf                  '       d   VP`                  Pf                  VR &   VP                  R4       VP`                  Ph                  '       df   VP                  R!V4       VP                  R"4       \k        WP`                  Ph                  4       VP                  R#4       VP	                  R!4       MVP                  R!V4       VP                  R4       EMh/ pVP`                  Pl                  '       d#   \'        VP`                  Pl                  4      VR$&   VP`                  Pd                  '       d   VP`                  Pd                  VR&   VP`                  Pn                  '       d#   \'        VP`                  Pn                  4      VR%&   VP                  R4       VP`                  Ph                  '       df   VP                  R&V4       VP                  R"4       \k        WP`                  Ph                  4       VP                  R#4       VP	                  R&4       MVP                  R&V4       VP                  R4       VPp                  '       d   / pVP                  R4       VPp                  Ph                  '       df   VP                  R'/ 4       VP                  R"4       \k        WPp                  Ph                  4       VP                  R#4       VP	                  R'4       MVP                  R'V4       VP                  R4       VPr                  '       Ed   R p
/ p\7        VPr                  \8        Pt                  4      '       d   R(p
EM\7        VPr                  \8        Pv                  4      '       d9   R)p
VPr                  P^                  '       d   VPr                  P^                  VR*&   M\7        VPr                  \8        Px                  4      '       d   R+p
Mw\7        VPr                  \8        Pz                  4      '       d   R,p
VPr                  P|                  VR-&   M1\Y        \Z        P~                  R.\'        V P                  4       R/24      hVP                  R4       VPr                  Ph                  '       de   VP                  W4       VP                  R"4       \k        WPr                  Ph                  4       VP                  R#4       VP	                  V
4       MVP                  W4       VP                  R4       VP                  R4       VP	                  R4       VP                  R4       EK  	  R0# )1r1     r   
r   r   r   r   r   r*   r-   r/   r2   r3   r0   r4   rG   rH   rF   r6   macr7   ZTruer8   z    r{   r5   r+   r,   r.   z"Unknown element '%s' in obj_writerrA   r@   r   z
      z
    rC   rD   rB   rE   r9   r:   r>   r;   r<   r?   zUnknown action in rule 'r   N)Ar   ignorableWhitespacestartElementZ
characters
endElementr   r   rS   r   rW   rY   r\   r/   ra   rc   sortedrs   rG   rH   rN   r{   addrr   r7   r8   r5   r   rn   r   rQ   r   rU   r   r   rX   r*   rZ   r^   r[   r]   r_   rp   
to_addressrb   r   r   ZINVALID_OBJECTr>   r   rj   rA   r@   rI   r   rC   rq   rE   r=   re   rf   rg   rh   r?   rM   rL   )ro   r   r   r   r   ZicmpZforwardr#   rF   r   r=   s   &&         r%   common_writerr     s   
yyySYY"_##D)Wb)399%7###D) 3??b0##D)]B/3??+=)##D) 3<<(##D)i&'):;##D) ) 		"##D)fvtAw
DG&LM##D) # CMM*##D)j7H*=>##D) + (##D)lVTN;##D) ) ~~~##D)lB/##D) 3,,-##D)Z<1::'!**&qzE)1::'!**&qzE)ne4##D) . (()##D)mfd1gz4PQ7-ST##D) * syy!;;;"kkE(O==A #DMM 2E*##D)VU+##D) ;;;E{{#';;#3#3i {{#{{e{{   !%!2!2g{{!!!"(h''/!!(E2''- E$$$#'#3#3#8#8i %%%!%!1!1!7!7g&&&"(h''/!!-7''- <<<GE$,,(9(9::# $ 1 1fDLL$..99  $ 1 1f$(LL$9$9j!DLL$*<*<==$!%!3!3gDLL$*A*ABB)<<%%%$,,*<*<*F%)\\%7%7E'NDLL$*>*>??&DLL$*=*=>>& $ 1 1fDLL$*<*<==% $ 1 1fDLL$*?*?@@( $ 1 1f$(LL$9$9j!<<''2-'+||';';E)$<<**b0'+||'>'>E)$DLL$*>*>??' $ 1 1f$(LL$9$9j!#))84;MM 
 ''/!!'1''-
 888$((DMM2288???&*hhooE(O88>>>%)XX^^E'N++F388>>>((6//
;+GXX^^D//9&&u-))%7++D188>>>%(%8E'N88???&*hhooE(O88%%%*-dhh.@.@*AE,'++F388>>>((%8//
;+GXX^^D//9&&w/))'59++D1 :::E''/zz$$Wb1++J7'1A1AB++H5""7+%%gu5''- ;;;FE$++t'7'788!DKK)9)9::!;;###$(KK$4$4E&MDKK88DKK88#{{e#''+CC		NCSSU)V  ''/{{   $$V3++J7'1B1BC++H5""6*%%f4''-##D)6"##D)Y "r)   c                   s  a a ] tR tRt oR<tRt]t^ .tRRRRRRRRRR.R	R=.R
R.RRRR>.RR.RR.RR=.R^ RR.RR./t	. R?Ot
/ RRbRRbRR.bRR.bRRR.bRR.bRR.bRRbRRR.bRRbRRbRRbRR .bR!RR.bR"RbR#RbR$RbR%RR&RR'RR(R).R*R .R+R.R,R./CtRRR.RR-R..RR/R.R. R@OR. RAOR"R0R1.R#. RBOR&R2.R3R .R*R4./
tV 3R5 ltR6 tV 3R7 ltV 3R8 ltR9 tV 3R: ltR;tVtV ;t# )Crv   i  i  versionr1   r   r   targetrS   rW   r\   r/   Fra   rx   rY   rc   rH   ingress_zonesegress_zonesNpolicyr   r   r   r   r-   r.   r0   rF   r{   r5   r*   r4   r   rB   rE   r9   r:   r;   r<   r?   rI   ingress-zoneegress-zoner2   r3   rG   rA   r@   r>   r+   rJ   c                sT  < \         \        V `  4        R V n        R V n        R V n        \        V n        . V n        . V n	        . V n
        . V n        RV n        RV n        . V n        . V n        \!        4       V n        RV n        V P&                  V n        RV n        . V n        . V n        R# )r1   FN)superrv   __init__r   r   r   r   r   rS   rW   rY   r\   icmp_block_inversionr/   ra   rc   r?   rs   appliedpriority_defaultrH   derived_from_zoner   r   )self	__class__r$   r%   r   ZPolicy.__init__=  s    fd$&
+
$)!U
--!%r)   c                s   R V n         R V n        R V n        \        V n        V P
                  R V P                  R V P                  R V P                  R RV n	        RV n
        V P                  R V P                  R V P                  P                  4        RV n        V P                   V n        V P$                  R V P&                  R R# )r1   :NNNFN)r   r   r   r   r   rS   rW   rY   r\   r   r/   ra   rc   rs   Zclearr   r   rH   r   r   )r   s   &r%   cleanupZPolicy.cleanupR  s    
+MM!JJqMNN1Q$)!q!a 

--q!a r)   c                s   < VR 8X  d/   \        V P                  4       Uu. uF  p\        V4      NK  	  up# \        \	        \
        V 4      V4      # u upi )rx   )r   rs   rN   Zgetattrr   rv   )r   r   Zrr      && r%   __getattr__ZPolicy.__getattr__e  sH    <$*4::$67$6qCF$6775.55 8s   Ac           	     s   < VR 8X  d8   \        V Uu. uF  p\        P                  ! VR7      NK  	  up4      V n        R# \        \
        V `  W4       R# u upi )rx   rw   N)r?   r   rl   rs   r   rv   __setattr__)r   r   r*   Zsr   s   &&& r%   r   ZPolicy.__setattr__k  sD    <%H%Qdnna8%HIDJ&$+D8 Is    Ac           
     s   \        WW#V4       V P                  VR ,          9   d4   \        \        P                  RP                  V P                  4      4      hVR8X  dB   V\        9  d5   \        \        P                  RP                  V P                  V4      4      hR# VR8X  d   WP                  9   g!   WP                  8  g   WP                  8  dV   \        \        P                  RP                  V P                  VV P                  V P                  V P                  4      4      hR# VR9   Edp   RR	.\        VR ,          P                  4       4      ,           pV EF=  pWe9  d5   \        \        P                  R
P                  V P                  V4      4      hVR9  d$   \        RR	.4      \        V4      ,          '       g*   VR9   dW   \        V4      \        V.4      ,
          '       d5   \        \        P                  RP                  V P                  V4      4      hVR	8X  g   K  VR8X  d   RV9   d   R	VR,          9   g$   VR8X  g   K  RV9   g   K  R	VR,          9   g   EK  \        \        P                  RP                  V P                  4      4      h	  R# VR8X  Edl   V'       Edc   RV9   dB   R	VR,          9   d4   \        \        P                  RP                  V P                  4      4      hRV9   Ed   R	VR,          9   d4   \        \        P                  RP                  V P                  4      4      hVR,           F  pVR8X  d   K  WdR ,          9  d5   \        \        P                  RP                  V P                  V4      4      hVR,          P!                  R4      R8w  g   Kl  VR ,          V,          P"                  '       g   K  \        \        P                  RP                  V P                  V4      4      h	  R# R# VR8X  Ed+   V EF!  p\$        P&                  ! VR7      pVP(                  '       Ed   \+        VP(                  \$        P,                  4      '       Ede   RV9   dB   R	VR,          9   d4   \        \        P                  RP                  V P                  4      4      hRV9   Ed   R	VR,          9   d4   \        \        P                  RP                  V P                  4      4      hVR,           F  pVR8X  d   K  WdR ,          9  d5   \        \        P                  RP                  V P                  V4      4      hVR,          P!                  R4      R8w  g   Kl  VR ,          V,          P"                  '       g   K  \        \        P                  RP                  V P                  V4      4      h	  EK  EK  VP(                  '       EdX   \+        VP(                  \$        P.                  4      '       Ed-   RV9   Ed"   VR,          '       Ed   R	VR,          9  dP   VP(                  P0                  '       g4   \        \        P2                  RP                  V P                  4      4      hVR,           F  pVR9   d   K  WdR ,          9  d5   \        \        P                  RP                  V P                  V4      4      hVR ,          V,          P"                  '       g   Ko  \        \        P                  RP                  V P                  V4      4      h	  EK!  EK$  EK'  VP4                  '       g   EK<  \+        VP4                  \$        P6                  4      '       g   EKi  RV9   g   EKs  VR,           F  pVR9   d   K  WdR ,          9  d5   \        \        P                  RP                  V P                  V4      4      hVR ,          V,          P"                  '       g   Ko  \        \        P                  RP                  V P                  V4      4      h	  EK$  	  R# VR8X  Ed&   V EF  p	RV9   g   K  VR,          '       g   K  R	VR,          9  dC   V	^,          '       g4   \        \        P2                  RP                  V P                  4      4      hVR,           F  pVR9   d   K  WdR ,          9  d5   \        \        P                  RP                  V P                  V4      4      hVR ,          V,          P"                  '       g   Ko  \        \        P                  RP                  V P                  V4      4      h	  EK  	  R# R# )Zzonesz0Policy '{}': Can't have the same name as a zone.r   z#Policy '{}': '{}' is invalid targetrH   z^Policy '{}': {} is invalid priority. Must be in range [{}, {}]. The following are reserved: {}r   r   ANYHOSTz*Policy '{}': '{}' not among existing zoneszKPolicy '{}': '{}' may only contain one of: many regular zones, ANY, or HOSTzSPolicy '{}': 'HOST' can only appear in either ingress or egress zones, but not bothr/   z;Policy '{}': 'masquerade' is invalid for egress zone 'HOST'z<Policy '{}': 'masquerade' is invalid for ingress zone 'HOST'z&Policy '{}': Zone '{}' does not exist.ZconfZFirewallBackendZnftablesz\Policy '{}': 'masquerade' cannot be used because ingress zone '{}' has assigned interfaces. rx   rw   zPPolicy '{}': 'forward-port' requires 'to-addr' if egress zone is 'ANY' or a zonez[Policy '{}': 'forward-port' cannot be used because egress zone '{}' has assigned interfaceszZPolicy '{}': 'mark' action cannot be used because egress zone '{}' has assigned interfacesra   N)r   r   )r   r   )r   r   )r   r   r   r   ZNAME_CONFLICTry   r	   INVALID_TARGETpriority_reservedpriority_maxpriority_minZINVALID_PRIORITYrV   ZkeysZINVALID_ZONEr?   rm   Z
interfacesr   rl   r   rn   r^   r_   r   rz   r=   rh   )
r   r    rR   r|   r}   Zexisting_zoneszonerF   ro   r~   s
   &&&&&     r%   _check_configZPolicy._check_configq  s,   D$NK99w//$$BII$))T 
 8^+#))9@@FS  ,
 Z000------#++t{{		))))..	 	 . 66#V_tN74K4P4P4R/SSN-'++DKK IIt  /S%5ICPVK5W5Wo-3v;dV3L3L'++ell IIt  6>/*j8"j&@@ .+z9"j&AA (++mtt II ; F \!ff+*^:T0T#''QXX		  !J.Z88'++V]] II  '77Du} '#::+"//DKK $		4  'v.223DES*73D9DDD+"//z  B  B $		4  8 /8 \!nnd3;;;:ckk4;O;O#P#P&*4"j&@@+"//Y`` $		  )J6!Z%@@"/ & 3 3 ^ e e$(II!"#  %/$?$?D#u} (#'+BB&3$*$7$7$L$S$S(,		4%&'" !" !/v 6 : :;L M#-!.$27$;D$A$L$L$L&3$*$7$7 %C  %J  %J(,		4%&'" !" %@ 7: [[[ZT=R=R%S%S%3%n55 &j.H H(+(>(>(>&3$*$:$:$v$}$}(,		%&'" !" )3>(B(B#'?#:$,#'g/F#F*7(.(;(;(P(W(W,0IIt)*+& %& $2'#:4#@#K#K#K*7(.(;(; )F  )M  )M,0IIt)*+& %& )C 6 4: ZZZJszz4>>$J$J%3$.~$>$>D#6 (#'+BB&3$*$7$7$L$S$S(,		4%&'" !"  .g6t<GGG&3$*$7$7 %A  %H  %H(,		4%&'" !" %?U v _$"!Z/!.11!N)CCHUVKK"/ & 6 6 r y y$(II!"#  %/~$>$>D#6 (#'+BB&3$*$7$7$L$S$S(,		4%&'" !"  .g6t<GGG&3$*$7$7 %B  %I  %I(,		4%&'" !" %? # %r)   c           	     s  < \         \        V `  V4       VP                  R 4      '       d*   \	        \
        P                  RP                  V4      4      hVP                  R 4      '       d*   \	        \
        P                  RP                  V4      4      hVP                  R 4      ^8  d*   \	        \
        P                  RP                  V4      4      hR V9   d   VRVP                  R 4       pMTp\        V4      \        4       8  d=   \	        \
        P                  RP                  V\        V4      \        4       4      4      hR# )/z&Policy '{}': name can't start with '/'z$Policy '{}': name can't end with '/'z'Policy '{}': name has more than one '/'Nz)Policy '{}': name has {} chars, max is {})r   rv   
check_name
startswithr   r   INVALID_NAMEry   endswithZcountZfindZlenr   )r   r   Zchecked_namer   r   r%   r   ZPolicy.check_nameR  s   fd&t,??3##8??E  ]]3##%K%R%RSW%X  ZZ_q ##9@@F 
 d{#$4diin5#< #6#88#''?FFc,/1D1F  9r)   )r   r   r   r   ra   r   r\   r   r/   rW   rH   rY   rs   rS   r   rc   r   r   i )r1   r1   )r1   r1   r1   r1   )Z_r   r   )r6   r   r8   rG   r7   )r6   r8   r7   )rC   rA   rD   )__name__
__module____qualname____firstlineno__r   r   r
   r   r   ZIMPORT_EXPORT_STRUCTUREZADDITIONAL_ALNUM_CHARSZPARSER_REQUIRED_ELEMENT_ATTRSZPARSER_OPTIONAL_ELEMENT_ATTRSr   r   r   r   r   r   __static_attributes____classdictcell__Z__classcell__)r   __classdict__s   @@r%   rv   rv     s'    LL. 	2r"RD(te*+rdbT
A"" -%%t% 	8*% 	F8	%
 	$% 	vh% 	fX% 	d% 	,% 	% 	$% 	t% 	WI% 	
+% 	t%  	!%" 	#%$ 	$$'x1%!6 	9j)I.:&A5'"26(''%!*!&69_"B r)   rv   c                   s2   a  ] tR tRt o R tR tR tRtV tR# )policy_ContentHandleris  c                sN    \         P                  ! W4       R V n        R V n        R # N)r   r   rL   ri   )r   rR   rt   r%   r   Zpolicy_ContentHandler.__init__t  s     ))$5
r)   c           
     s   \         P                  ! WV4       V P                  P                  W4       \	        WV4      '       d   R # VR8X  d   RV9   d   VR,          V P                  n        RV9   d"   \        VR,          4      V P                  n        RV9   dK   VR,          pV\        9  d   \        \        P                  V4      hV'       d   W0P                  n        R # R # R # VR8X  dS   VR,          V P                  P                  9  d/   V P                  P                  P                  VR,          4       R # R # VR8X  dS   VR,          V P                  P                  9  d/   V P                  P                  P                  VR,          4       R # R # VR8X  Ed   V P                   '       g   \        \        P"                  R	4      hV P                   P$                  '       d2   \        \        P"                  R
\'        V P                   4       R24      hRpRV9   d   VR,          P)                  4       R9   d   RpR ;p;rgRV9   d
   VR,          pRV9   d
   VR,          pRV9   d
   VR,          p\*        P,                  ! V P                   \.        P0                  ! WVWtR7      R7      V n        R # \        \        P2                  RV R24      h)Nr   r   rH   r   r   r   r   r{   zSource outside of rule.zMore than one source in rule 'r   Fr8   Tr6   r   r7   )r8   )r{   zUnknown XML element 'rK   )r   r   rR   Zparser_check_element_attrsrr   r   rk   rH   r	   r   r   r   r   r   rT   r   rL   rM   r{   rN   rd   rO   rP   r   ZRich_SourceINVALID_POLICY)r   r   r#   r   r8   r   r   r7   s   &&&     r%   r   Z"policy_ContentHandler.startElementy  sO    --d%@		,,T9t511XE!$))$4		!U"%(z):%;		"5 x/'(=(=vFF'-II$ 	 ! ^#V}DII$;$;;		''..uV}= < ]"V}DII$:$::		&&--eFm< ; X:::#F$7$79RSSzz   #''4S_4ERH  F5 U8_%:%:%<%O!%%D%3E!Y'~El%g$,,

4#3#3Du#TDJ    5 59NtfTV7WXXr)   c                sH    \         P                  ! W4       \        W4       R # r   )r   r   ru   )r   r   rt   r%   r   Z policy_ContentHandler.endElement  s     ++D7$%r)   )ri   rL   N)	r   r   r   r   r   r   r   r   r   )r   s   @r%   r   r   s  s     
5Yn& &r)   r   c           	      sd   \        4       pV P                  R 4      '       g"   \        \        P                  RV ,          4      hV RR Vn        V'       g   VP                  VP
                  4       Wn        Wn        VP                  \        P                  4      '       d   RMRVn        VP                  Vn        \        V4      p\        P                   ! 4       pVP#                  V4       V: RV : 2p\%        VR4      ;_uu_ 4       p\        P&                  ! R4      pVP)                  V4        VP+                  V4        RRR4       ??T#   \        P,                   d5   p	\        \        P.                  RT	P1                  4       ,          4      hRp	?	ii ; i  + '       g   i     ??T# ; i)	.xmlz'%s' is missing .xml suffixNFTr   Zrbznot a valid policy file: %si)rv   r   r   r   r   r   r   filenamepathr   r    ETC_FIREWALLDZbuiltinZdefaultr   saxZmake_parserZsetContentHandleropenZInputSourceZsetByteStreamZparseZSAXParseExceptionr   ZgetException)
r   r   Zno_check_namer   r   Zparserr   fr{   msgs
   &&&       r%   policy_readerr     s_   XFV$$!>!I
 	
 3B-FK&++&OK"oof.B.BCCUFN^^FN#F+G__F
W%H%D	dD		Q&Q	LL 	 
 	M $$ 	%%-0@0@0BB 	 
	 	Ms*   	(F2EF%/FFFF/	c                 s   V'       d   TMV P                   pV P                  '       d   V: R V P                  : 2pMV: R V P                  : R2p\        P                   P	                  V4      '       d     \
        P                  ! VRV,          4       \        P                   P                  V4      pVP                  \        P                  4      '       d   \        P                   P	                  V4      '       gp   \        P                   P	                  \        P                  4      '       g&   \        P                  ! \        P                  R4       \        P                  ! VR4       \        P                   ! VRRR7      p\#        V4      pVP%                  4        / pV P&                  '       d!   V P&                  R	8w  d   V P&                  VR
&   V P(                  V P*                  8w  d   \-        V P(                  4      VR&   V P.                  VR&   VP1                  RV4       VP3                  R4       \5        W4       \7        V P8                  4       F9  p	VP3                  R4       VP;                  RRV	/4       VP3                  R4       K;  	  \7        V P<                  4       F9  p	VP3                  R4       VP;                  RRV	/4       VP3                  R4       K;  	  VP?                  R4       VP3                  R4       VPA                  4        VPC                  4        ?R#   \         d#   p\        P                  ! RY44        Rp?ELRp?ii ; i)r   r   z%s.oldzBackup of file '%s' failed: %sNi  ZwtzUTF-8)ZmodeZencodingr1   r   rH   r   r   r   r   r   r   r   )"r   r   r   osZexistsshutilZcopy2Z	Exceptionr   ZerrorZdirnamer   r    r   Zmkdirior   r   ZstartDocumentr   rH   r   rN   r   r   r   r   r   r   r   r   r   ZendDocumentZclose)
r   r   Z_pathr   r   Zdirpathr   r   r#   r   s
   &&        r%   policy_writerr     sk   DfkkE1#V[[1	ww~~d	CLLx$/ ggood#G&..//w8O8Oww~~f2233HHV))51
% 
4'2A$Q'G E~~~&..B.!>>i&1110jmmE(O5)%&" ,,-##D)nvtn=##D) . ++,##D)mfd^<##D) - x %GGIU  	CII6BB	Cs   7L. .M9MM)Fr   )+Zxml.saxr   r   r   r   rO   Zfirewallr    Zfirewall.functionsr   r   r   r   r   r   r   Zfirewall.core.baser   r	   r
   Zfirewall.core.io.io_objectr   r   r   r   r   r   Zfirewall.corer   Zfirewall.core.loggerr   r   Zfirewall.errorsr   rr   ru   r   r   r   rv   r   r   r   r!   r)   r%   <module>r      s     	 	      
   $  )HV
GT&n*boY oj@&4 @&F@5r)   