+
    iVT  c                   s    R t ^ RIH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Ht ^ RIHtHtHt ^ RIHtHt ^ RIHtHtHtHt ^ RIHt ^ RIHt ^ R	I H!t!  ! R
 R]4      t" ! R R]4      t#R t$RR lt%R# )z$ipset io XML handler, reader, writerN)config)checkIPcheckIP6checkIPnMaskcheckIP6nMask	check_mac
check_portcheckInterfacecheckProtocol)	IO_ObjectIO_Object_ContentHandlerIO_Object_XMLGenerator)IPSET_TYPESIPSET_CREATE_OPTIONS)check_icmp_namecheck_icmp_type_codecheck_icmpv6_namecheck_icmpv6_type_code)log)errors)FirewallErrorc                   s   a a ] tR t^+t oRRRRRRRRRRR/RR./tRt. ROtRR	RR	R
R.RR.RR	/tR
R.RR./tV 3R lt	R t
]R 4       tR tV 3R ltRtVtV ;t# )IPSetversion shortdescriptiontypeoptionsentriesz(ssssa{ss}as)Nipsetoptionnameentryvaluec                s   < \         \        V `  4        R V n        R V n        R V n        R V n        . V n        / V n        RV n	        R# )r   FN)
superr   __init__r   r   r   r   r   r   applied)self	__class__s   &;/usr/lib/python3.14/site-packages/firewall/core/io/ipset.pyr#   ZIPSet.__init__B   sB    eT#%
	    c                s    R V n         R V n        R V n        R V n        V P                  R V P
                  P                  4        RV n        R# )r   NNNFN)r   r   r   r   r   r   Zclearr$   )r%   s   &r'   cleanupZIPSet.cleanupL   sA    
	LLOr(   c                s   R pRV9   d   VR,          R8X  d   RpVP                  R4      '       g"   \        \        P                  RV,          4      hVR,          P	                  R4      pV P	                  R4      p\        V4      \        V4      8w  g   \        V4      ^8  d$   \        \        P                  RV : R	V: R
24      h\        V4       EF  w  rgWV,          pVR8X  Ed~   RV9   d   VR 8X  d   V^8  d$   \        \        P                  RWV3,          4      hVP	                  R4      p	\        V	4      ^8w  d,   \        \        P                  RV: RV : RV: RV: R2	4      hV	 F`  p
VR 8X  d   \        V
4      '       d   VR8X  g   K$  \        V
4      '       d   K7  \        \        P                  RV
: RV : RV: RV: R2	4      h	  EK  VR 8X  dH   VR8X  d,   \        \        P                  RV: RV : RV: RV: R2	4      hV^ 8X  d   \        pM\        pM\        pV! V4      '       g,   \        \        P                  RV: RV : RV: RV: R2	4      hEK  VR8X  Ed   RV9   Ed3   VP	                  R4      p	\        V	4      ^8w  d,   \        \        P                  RV: RV : RV: RV: R2	4      hVR 8X  d   \        V	^ ,          4      '       d    VR8X  dK   \        V	^ ,          4      '       g3   \        \        P                  RV	^ ,          : RV : RV: RV: R2	4      hVR 8X  d   \        V	^,          4      '       d    VR8X  dN   \        V	^,          4      '       g3   \        \        P                  RV	^,          : RV : RV: RV: R2	4      hEK  EK  VP                  R4      '       dA   VR8X  d   V^ 8X  d   VR8X  g,   \        \        P                  RV: RV : RV: RV: R2	4      hVR 8X  d   \        V4      '       d   VR8X  d@   \        V4      '       g,   \        \        P                  RV: RV : RV: RV: R2	4      hEK  EK  VR8X  d?   \        V4      '       d   VR8X  d$   \        \        P                  RV: RV : R
24      hEK  VR8X  Ed   RV9   Ed   VP	                  R4      p	\        V	4      ^8w  d"   \        \        P                  RV,          4      hV	^ ,          R8X  d   VR 8w  d$   \        \        P                  RV: RV : R
24      h\        V	^,          4      '       g9   R V	^,          9  d+   \        \        P                  R!V	^,          : RV : R
24      hV	^,          P	                  R 4      w  r\        W4      '       g+   \        \        P                  R!V	^,          : RV : R
24      hEK  V	^ ,          R-9   d   VR8w  d$   \        \        P                  RV: RV : R
24      h\!        V	^,          4      '       g9   R V	^,          9  d+   \        \        P                  R"V	^,          : RV : R
24      hV	^,          P	                  R 4      w  r\#        W4      '       g+   \        \        P                  R"V	^,          : RV : R
24      hEK  V	^ ,          R.9  dC   \%        V	^ ,          4      '       g+   \        \        P                  R#V	^ ,          : RV : R
24      h\'        V	^,          4      '       g+   \        \        P                  R$V	^,          : R%V : R
24      hEKy  \'        V4      '       g$   \        \        P                  R$V: RV : R
24      hEK  VR&8X  df   VP                  R'4      '       d    \)        V^4      pM \)        V4      pV^ 8  g   VR)8  d$   \        \        P                  R(V: RV : R
24      hEK  VR*8X  dH   \-        V4      '       d   \        V4      ^8  d$   \        \        P                  R+V: RV : R
24      hEKj  \        \        P                  RV,          4      h	  R,#   \*         d%    \        \        P                  R(T: RT : R
24      hi ; i  \*         d%    \        \        P                  R(T: RT : R
24      hi ; i)/Zipv4familyinet6Zipv6zhash:zipset type '%s' not usable:i   NNZ,zentry 'z' does not match ipset type ''Zip-z invalid address '%s' in '%s'[%d]zinvalid address range 'z' in 'z' for z (Z)zinvalid address 'z0.0.0.0Znetz/0zhash:net,ifaceZmacz00:00:00:00:00:00zinvalid mac address 'Zport:zinvalid port '%s'Zicmpzinvalid protocol for family '/zinvalid icmp type 'zinvalid icmpv6 type 'zinvalid protocol 'zinvalid port 'z'in 'ZmarkZ0xzinvalid mark 'l    Zifacezinvalid interface 'N)Zicmpv6z	ipv6-icmp)ZtcpZsctpZudpZudplite)
startswithr   r   INVALID_IPSETZsplitlenZINVALID_ENTRYZ	enumerater   r   r   r   endswithr   r   r   r   r   r   r   int
ValueErrorr   )r    r   Z
ipset_typer+   ZflagsitemsiZflagitemZsplitsZ_splitZip_checkZ_typeZ_codeZint_vals   &&&            r'   check_entryZIPSet.check_entryU   s   wx G+$$W--$$&BZ&O  2$$S)C u:U#s5zA~$$?DjQ 
 !'GA8Dt|$;6V#31u+"00>$qAQQ  "ZZ_F6{a'+"00#UJ@ 
 #)"f,WV__"f,Xf5E5E"/ & 4 4#)5*f!F# 	 #) '9,"/ & 4 4#'
F!D# 
 6'3H'.H#+#D>>+"00#UJ@  * $;!ZZ_F6{a'+"00#UJ@  &(1C1C&(&)1D1D+"00%ayy%VE  &(fQi1H1H&(vay1I1I+"00%ayy%VE  2J( }}T**"f, !Q *.> >"/ & 4 4#'
F!D# 
 &(d1C1C&(t1D1D+"00#UJ@  2E(  $2E*E',,>BEJ  +F
 $;!ZZ_F6{a'+"002E2N  ayF*!V+"/ & 4 4#)5!2# 
  /vay99cPQ>R"/ & 4 4DJ1IIu U# 
 .4AY__S-ANU#7#E#E&3$*$8$8'-ayy%%9'" !" $F  &==!V+"/ & 4 4#)5!2# 
  1;;6RS9@T"/ & 4 4FLQiiQV W# 
 .4AY__S-ANU#9%#G#G&3$*$8$8'-ayy%%9'" !" $H   + 
 ,F1I66+"00?Eayy%P  (q	22+"00:@))UK  3 &d+++"00;?G  ,
 ??4(("%dB-"%d) Q;'J"6',,7;UC  #7
 %d++s4y2~',,<@%H  0> $((*F*S U (b & +"00;?G  & +"00;?G s   !a!/b!/b/cc           
     s   VR 8X  d-   V\         9  d"   \        \        P                  RV,          4      hVR8X  Ed   VP                  ! 4        F  pV\
        9  d"   \        \        P                  RV,          4      hVR9   d    \        W,          4      pT^ 8  d*   \        \        P                  RT: RY,          : R24      hTR8X  d>   \        T P                  4      T8  d"   \        \        P                  R	T,          4      hK  K  VR
8X  g   K  W,          R9  g   K  \        \        P                  W,          4      h	  R# R#   \         d+    \        \        P                  RT: RY,          : R24      hi ; i)r   z'%s' is not valid ipset typer   zipset invalid option '%s'maxelemOption '
': Value '' is not an integer' is negativez>the number of ipset entries exceeds the maximum set size of %dr+   Ntimeouthashsizer;   Zinetr,   )r   r   r   INVALID_TYPEZkeysr   r2   r5   r6   INVALID_VALUEr3   r   INVALID_FAMILY)r%   r    r9   Z
all_configall_io_objectskey	int_values   &&&&&  r'   _check_configZIPSet._check_config7  s]   6>[(#'')G&)P  9{{}22',,.IC.O  <<$'$4	 !1}+"00EH&++V  i'C,=	,I+"00\'(  -J' H_<M)M'(=(=v{KK5 %  & +"00"FKK1 s   E		5E>c                s<  < R V^,          9   dF   V^,          R ,          R8w  d1   \        V^,          4      ^ 8w  d   \        \        P                  4      hV^,           F'  p\        P                  W1^,          V^,          4       K)  	  \        \        V `  W4       R# )rA   0N)r3   r   r   ZIPSET_WITH_TIMEOUTr   r:   r"   import_config)r%   r    rG   r    r&   s   &&& r'   rL   ZIPSet.import_configZ  sw    q	!fQi	&:c&A6!9~"#F$=$=>>AYYEeAYq	: eT(@r(   )r$   r   r   r   r   r   r   )Z_r.   r/   Z.)__name__
__module____qualname____firstlineno__ZIMPORT_EXPORT_STRUCTUREZDBUS_SIGNATUREZADDITIONAL_ALNUM_CHARSZPARSER_REQUIRED_ELEMENT_ATTRSZPARSER_OPTIONAL_ELEMENT_ATTRSr#   r*   Zstaticmethodr:   rJ   rL   __static_attributes____classdictcell__Z__classcell__)r&   __classdict__s   @@r'   r   r   +   s     2rB8B4 %N1t&6(%! 	)7)%!
 _ _B!LFA Ar(   r   c                   s,   a  ] tR tRt o R tR tRtV tR# )ipset_ContentHandlerif  c           	     s   \         P                  ! WV4       V P                  P                  W4       VR 8X  d}   RV9   dS   VR,          \        9  d)   \        \        P                  RVR,          ,          4      hVR,          V P                  n        RV9   d   VR,          V P                  n	        R# R# VR8X  d   R# VR8X  d   R# VR8X  Ed   RpRV9   d
   VR,          pVR	,          R9  d)   \        \        P                  RVR	,          ,          4      hV P                  P                  R8X  dM   VR	,          R9   d?   \        \        P                  RVR	,          : RV P                  P                  : R24      hVR	,          R9   d1   V'       g)   \        \        P                  RVR	,          ,          4      hVR	,          R9   d>    \        V4      pT^ 8  d+   \        \        P                  RTR	,          : RT: R24      hVR	,          R
8X  d"   VR9  d   \        \        P                  V4      hVR	,          V P                  P                  9  d"   W0P                  P                  VR	,          &   R# \         P"                  ! RVR	,          4       R# R#   \         d,    \        \        P                  RTR	,          : RT: R24      hi ; i)r   r   z%sr   r   r   r   r   r!   r   r+   zUnknown option '%s'zhash:maczUnsupported option 'z' for type 'r-   z&Missing mandatory value of option '%s'r<   r=   r>   r?   z Option %s already set, ignoring.N)r+   rA   rB   r;   )r+   r@   rC   )r
   startElementr9   Zparser_check_element_attrsr   r   r   rD   r   r   ZINVALID_OPTIONr5   r6   rE   rF   r   r   warning)r%   r   attrsr!   rI   s   &&&  r'   rU   Z!ipset_ContentHandler.startElementg  sX    --d%@		,,T97?=3'(;(;TE&M=QRR!&v		E!$))$4		! "W_]"XE%gV}$PP#))+@5=+P  yy~~+f0K#))V}}diinn6  f!MM#))<uV}L  V} BB #E
I q=',,AFvPUV  V}(U:K-K#F$9$95AAV}DII$5$5538		!!%-0>fNU 4 " ',, ==%1 s   J 6Kc                s    \         P                  ! W4       VR 8X  d2   V P                  P                  P	                  V P
                  4       R# R# )r    N)r
   
endElementr9   r   ZappendZ_element)r%   r   s   &&r'   rX   Zipset_ContentHandler.endElement  s8     ++D77?II$$T]]3 r(    N)rM   rN   rO   rP   rU   rX   rQ   rR   )rS   s   @r'   rT   rT   f  s     8Ov4 4r(   rT   c           	      s   \        4       pV P                  R 4      '       g"   \        \        P                  RV ,          4      hV RR Vn        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       ??RTP2                  9   da   TP2                  R,          R	8w  dI   \5        TP6                  4      ^ 8  d/   \8        P:                  ! R
TP
                  4       TP6                  R ^ p	\=        4       p
T	\5        TP6                  4      8  d   TP6                  T	,          T
9   dF   \8        P:                  ! RTP6                  T	,          4       TP6                  P?                  T	4       Kw   TPA                  TP6                  T	,          TP2                  TPB                  4       T
PE                  TP6                  T	,          4       T	^,          p	K  ?
T#   \        P,                   d5   p\        \        P.                  RTP1                  4       ,          4      hRp?ii ; i  + '       g   i     EL; i  \         d?   p\8        P:                  ! RT4       TP6                  P?                  T	4        Rp?EK  Rp?ii ; i).xmlz'%s' is missing .xml suffixNFTr0   Zrbznot a valid ipset file: %srA   rK   z6ipset '%s': timeout option is set, entries are ignoredr)   zEntry %s already set, ignoring.z%s, ignoring.i)#r   r4   r   r   ZINVALID_NAMEr   Z
check_namefilenamepathr1   r    ETC_FIREWALLDZbuiltinZdefaultrT   saxZmake_parserZsetContentHandleropenZInputSourceZsetByteStreamZparseZSAXParseExceptionr2   ZgetExceptionr   r3   r   r   rV   ZsetZpopr:   r   Zadd)r[   r\   r   handlerZparserr   fZsourcemsgr8   Zentries_setZe   &&          r'   ipset_readerrd     s}   GEV$$!>!I
 	
 #2EJ	UZZ NJ!__V-A-ABBEEMMMEM"5)G__F
W%H%D	dD		Q&Q	LL 	 
 	U]]"MM)$+" 	Dejj	
 MM!	A%K
c%-- 
 =={*KK95==;KLMMa !!%--"2EMM5::N
 a 01QLC $$ 	$$&BSEUEUEW&W 	 
		< ! %OQ/!!!$$%sB   (K/*J#;8L #K,8/K''K,,K//L 	M2MM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        R	V P&                  /pV P(                  '       d!   V P(                  R
8w  d   V P(                  VR&   VP+                  RV4       VP-                  R4       V P.                  '       dr   V P.                  R
8w  da   VP-                  R4       VP+                  R/ 4       VP1                  V P.                  4       VP3                  R4       VP-                  R4       V P4                  '       dr   V P4                  R
8w  da   VP-                  R4       VP+                  R/ 4       VP1                  V P4                  4       VP3                  R4       VP-                  R4       V P6                  P9                  4        FY  w  rVP-                  R4       V
R
8w  d   VP;                  RRV	RV
/4       MVP;                  RRV	/4       VP-                  R4       K[  	  V P<                   FY  pVP-                  R4       VP+                  R/ 4       VP1                  V4       VP3                  R4       VP-                  R4       K[  	  VP3                  R4       VP-                  R4       VP?                  4        VPA                  4        ?R#   \         d#   p\        P                  ! RY44        Rp?ELRp?ii ; i)r0   rZ   z%s.oldzBackup of file '%s' failed: %sNi  ZwtzUTF-8)ZmodeZencodingr   r   r   r   Z
z  r   r   r   r   r!   r    )!r\   r[   r   osZexistsshutilZcopy2Z	Exceptionr   ZerrorZdirnamer1   r    r]   Zmkdirior_   r   ZstartDocumentr   r   rU   ZignorableWhitespacer   Z
charactersrX   r   r   r7   ZsimpleElementr   ZendDocumentZclose)r   r\   Z_pathr   rb   Zdirpathra   r`   rW   rH   r!   r    rc   r'   ipset_writerrh     s:   DejjE~~~0#UZZ0	ww~~d	CLLx$/ ggood#G&..//w8O8Oww~~f2233HHV))51
% 
4'2A$Q'G UZZ E}}}", ==i%(% {{{u{{b(##D)Wb)5;;'7###D) U.."4##D)]B/5,,-=)##D) mm))+
##D)B;!!(VS'5,IJ!!(VSM:##D) , ##D)Wb)5!7###D)  w%GGIu  	CII6BB	Cs   7P/ /Q:QQ)N)&Z__doc__Zxml.saxr^   re   rg   rf   Zfirewallr    Zfirewall.functionsr   r   r   r   r   r   r   r   Zfirewall.core.io.io_objectr	   r
   r   Zfirewall.core.ipsetr   r   Zfirewall.core.icmpr   r   r   r   Zfirewall.core.loggerr   r   Zfirewall.errorsr   r   rT   rd   rh   rY   r(   r'   <module>ri      sx    +  	 	  	 	 	 
 B  %  )uAI uAv	?43 ?4D6rEr(   