+
    i9  c                   s    ^ RI Ht ^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RI	H
t
Ht ^ RIHtHt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 R]4      tR# )    N)config)LastUpdatedOrderedDict)	splitArgsjoinArgs)	IO_ObjectIO_Object_ContentHandlerIO_Object_XMLGenerator)log)	ipXtables)ebtables)errors)FirewallErrorc                   s2   a  ] tR t^t o R tR tR tRtV tR# )direct_ContentHandlerc                s@    \         P                  ! W4       R V n        R# )FN)r   __init__direct)selfitem   &&</usr/lib/python3.14/site-packages/firewall/core/io/direct.pyr   Zdirect_ContentHandler.__init__   s     ))$5    c                s   \         P                  ! WV4       V P                  P                  W4       VR 8X  d6   V P                  '       d   \        \        P                  R4      hRV n        R# VR8X  dd   V P                  '       g   \        P                  ! R4       R# VR,          pVR,          pVR,          pV P                  P                  W4V4       R# VR8X  d   V P                  '       g   \        P                  ! R	4       R# VR,          pVR9  d"   \        \        P                  R
V,          4      hVR,          pVR,          p \        VR,          4      pY4YV.T n        R# VR8X  d>   V P                  '       g   \        P                  ! R4       R# VR,          pV.V n        R# \        P                  ! RV,          4       R#   \         d)    \        P                  ! RTR,          ,          4        R# i ; i)r   zMore than one direct tag.Tchainz$Parse Error: chain outside of directNipvtablerulez#Parse Error: rule outside of directz"'%s' not from {'ipv4'|'ipv6'|'eb'}priorityz'Parse Error: %s is not a valid prioritypassthroughz&Parse Error: command outside of directzUnknown XML element %sipv4ipv6Zeb)r   startElementr   Zparser_check_element_attrsr   r   r   ZPARSE_ERRORr   error	add_chainINVALID_IPVZint
ValueError_rule_passthrough)r   nameZattrsr   r   r   r   s   &&&    r   r   Z"direct_ContentHandler.startElement!   s    --d%@		,,T98{{{#F$6$68STTDKW_;;;		@A,C'NE'NEIIE2V^;;;		?@,C00#&&(Ls(R  'NE'NEuZ01 e6DJ]";;;		BC,C!$D II.56  		CeJFWWXs   G /H Hc                s^   \         P                  ! W4       VR 8X  d   V P                  '       dT   V P                  P	                  \        V P                  4      4       V P                  P                  ! V P                  !   M\        P                  ! R4       RV n        R# VR8X  d   V P                  '       dT   V P                  P	                  \        V P                  4      4       V P                  P                  ! V P                  !   M\        P                  ! R4       RV n
        R# R# )r   z2Error: rule does not have any arguments, ignoring.Nr   z9Error: passthrough does not have any arguments, ignoring.)r   
endElementZ_elementr#   appendr   r   add_ruler   r   r$   add_passthrough)r   r%   r   r   r&   Z direct_ContentHandler.endElementP   s     ++D76>}}}

!!)DMM":;		""DJJ/		NODJ]"}}}!!((4==)AB		))4+<+<=		T !%D #r   )r$   r#   r   N)	__name__
__module____qualname____firstlineno__r   r   r&   __static_attributes____classdictcell__)__classdict__s   @r   r   r      s     -^% %r   r   c                   s  a a ] tR t^gt oRtRR(.RRRR^ R.3.RRR.3./tRtRRR	. R)OR. R*ORR
./t/ tV 3R lt	R t
R tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR  tR! tR" tR# tR$ t R% t!R& t"R't#Vt$V ;t%# )+DirectzDirect classchains rulespassthroughsz(a(sss)a(sssias)a(sas))r   Nr   r   r   r   c                s   < \         \        V `  4        Wn        \	        4       V n        \	        4       V n        \	        4       V n        R # N)Zsuperr1   r   filenamer   r2   r4   r5   )r   r7   	__class__s   &&r   r   ZDirect.__init__{   s4    fd$& ,.+-
24r   c                s    R # r6    )r   confr   Zall_confall_io_objectss   &&&&&r   _check_configZDirect._check_config   s    r   c                s   . p. pV P                    FQ  pV P                   V,           F7  pVP                  \        \        V4      \        V.4      ,           4      4       K9  	  KS  	  VP                  V4       . pV P                   Fh  pV P                  V,           FN  pVP                  \        V^ ,          V^,          V^,          V^ ,          \        V^,          4      34      4       KP  	  Kj  	  VP                  V4       . pV P
                   FB  pV P
                  V,           F(  pVP                  \        V\        V4      34      4       K*  	  KD  	  VP                  V4       \        V4      # )r    )r2   r'   tupleZlistr4   r5   )r   Zretxkeyr   r      &     r   export_configZDirect.export_config   s#   ;;CS))tCy4=89: *  	

1::C

3AAAQd1gOPQ (  	

1$$C))#..T$Z012 / % 	

1Szr   c                st   V P                  4        V P                  V4       \        V P                  4       F}  w  r4VR 8X  d"   W,           F  pV P                  ! V!   K  	  K-  VR8X  d"   W,           F  pV P
                  ! V!   K  	  KU  VR8X  g   K^  W,           F  pV P                  ! V!   K  	  K  	  R# )r2   r4   r5   N)cleanupZcheck_configZ	enumerateIMPORT_EXPORT_STRUCTUREr    r(   r)   )r   r:   r;   ZiZelementr>   s   &&&   r   import_configZDirect.import_config   s    $#D$@$@AJA("ANNA& !G#AMM1% !N*A((!, ! Br   c                s    V P                   P                  4        V P                  P                  4        V P                  P                  4        R # r6   )r2   Zclearr4   r5   r      &r   rB   ZDirect.cleanup   s4    

!r   c                s   \        R 4       V P                   FH  p\        RV^ ,          : RV^,          : RRP                  V P                  V,          4      : 24       KJ  	  \        R4       V P                   Fo  p\        RV^ ,          : RV^,          : RV^,          : R24       V P                  V,           F(  w  r#\        RVRP                  V4      3,          4       K*  	  Kq  	  \        R	4       V P                   FP  p\        R
V,          4       V P                  V,           F$  p\        RRP                  V4      ,          4       K&  	  KR  	  R# )r2   z  (z, z): Z,r4   z):z    (%d, ('%s'))z','r5   z  %s:z
    ('%s')N)Zprintr2   joinr4   r5   )r   r?   r   argss   &   r   outputZDirect.output   s    h;;Cc!ffc!ffchht{{3?O6PQR g::Cs1vvs1vvs1vv>?"&**S//(Hejj6F+GGH #2  	n$$C'S/"))#..lejj&678 / %r   c                s`    . ROpW9  d$   \        \        P                  RV: RV: R24      hR# )r   '
' not in 'Nr   )r   r   r!   )r   r   Zipvss   && r   
_check_ipvZDirect._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# )r   rJ   rK   N)r   r   )rL   r	   ZBUILT_IN_CHAINSkeysr
   r   r   ZINVALID_TABLE)r   r   r   Ztables   &&& r   _check_ipv_tableZDirect._check_ipv_table   sn     && %%**,))..0 	
 $$E6&J  r   c           	     s6   V P                  W4       W3pW@P                  9  d   . V P                  V&   W0P                  V,          9  d%   V P                  V,          P                  V4       R# \        P                  ! R V: RV: RV: R2R,           4       R# )Chain '' for table '' with ipv '' already in list, ignoringN)rO   r2   r'   r   warningr   r   r   r   r?      &&&& r   r    ZDirect.add_chain   ss    c)lkk!!DKKC((KK##E*KK>CUCP-.r   c           	     sP   V P                  W4       W3pW@P                  9   dl   W0P                  V,          9   dU   V P                  V,          P                  V4       \        V P                  V,          4      ^ 8X  d   V P                  V R# R# \	        RV: RV: RV: R24      h)r    rP   z' with table 'rR   z' not in listN)rO   r2   removelenr"   rV   rW   r   remove_chainZDirect.remove_chain   s    c)l++%;;s+;";KK##E*4;;s#$)KK$ * %& r   c                s    V P                  W4       W3pW@P                  9   ;'       d    W0P                  V,          9   # r6   )rO   r2   rV   rW   r   query_chainZDirect.query_chain   s8    c)lkk!??e{{3/?&??r   c                s    V P                  W4       W3pW0P                  9   d   V P                  V,          # \        R V: RV: R24      h)zNo chains for table 'rR   rJ   )rO   r2   r"   )r   r   r   r?   rN   r   
get_chainsZDirect.get_chains   sA    c)l++;;s##PSTUUr   c                    V P                   # r6   )r2   rE   rF   r   get_all_chainsZDirect.get_all_chains   s    {{r   c           	     s   V P                  W4       WV3pW`P                  9  d   \        4       V P                  V&   V\        V4      3pWpP                  V,          9  d   W@P                  V,          V&   R# \        P
                  ! R RP                  V4      : RV: RV: R2RW3,          ,           R,           4       R# )Rule '',rQ   ' and chain 'rS   zwith ipv '%s' and priority %d rT   N)rO   r4   r   r=   r   rU   rG   r   r   r   r   r   rH   r?   value   &&&&&&  r   r(   ZDirect.add_rule   s    c)5!jj 46DJJsO5;'

3'%-JJsOE"KK99T?E522c_DE ..r   c           	     s   V P                  W4       WV3pV\        V4      3pW`P                  9   d^   WpP                  V,          9   dG   V P                  V,          V \        V P                  V,          4      ^ 8X  d   V P                  V R# R# \	        RRP                  V4      : RV: RV: R2RW3,          ,           4      h)r    r_   r`   rQ   ra   rS   z)with ipv '%s' and priority %d not in listN)rO   r=   r4   rY   r"   rG   rb   rd   r   remove_ruleZDirect.remove_rule  s    c)5!5;'****S/!9

3&4::c?#q(JJsO ) 99T?E52=OP r   c                s,   V P                  W4       WV3pW@P                  9   do   V P                  V,          P                  4        F  pV P                  V,          V K  	  \        V P                  V,          4      ^ 8X  d   V P                  V R# R# R# )r    N)rO   r4   rM   rY   )r   r   r   r   r?   rc   s   &&&&  r   remove_rulesZDirect.remove_rules  sy    c)5!**C--/JJsOE* 04::c?#q(JJsO ) r   c                s    V P                  W4       WV3pV\        V4      3pW`P                  9   ;'       d    WpP                  V,          9   # r6   )rO   r=   r4   rb   rd   r   
query_ruleZDirect.query_rule#  sH    c)5!5;'jj ==Ujjo%==r   c                s    V P                  W4       WV3pW@P                  9   d   V P                  V,          # \        R V: RV: R2RV,          ,           4      h)zNo rules for table 'ra   rS   zwith ipv '%s')rO   r4   r"   rV   rW   r   	get_rulesZDirect.get_rules)  sT    c)5!**::c?"=BEJ!S)* r   c                r]   r6   )r4   rE   rF   r   get_all_rulesZDirect.get_all_rules4  s    zzr   c                sF   V P                  V4       WP                  9  d   . V P                  V&   W P                  V,          9  d%   V P                  V,          P                  V4       R# \        P                  ! R RP                  V4      : RV: R2R,           4       R# )Passthrough 'r`   ' for ipv 'rJ   rT   N)rL   r5   r'   r   rU   rG   r   r   rH      &&&r   r)   ZDirect.add_passthrough9  sx    '''%'Dc"((--c"))$/KK3799T?CH-.r   c                sn   V P                  V4       WP                  9   dl   W P                  V,          9   dU   V P                  V,          P                  V4       \        V P                  V,          4      ^ 8X  d   V P                  V R# R# \	        RRP                  V4      : RV: R2R,           4      h)r    rj   r`   rk   rJ   znot in listN)rL   r5   rX   rY   r"   rG   rl   rm   r   remove_passthroughZDirect.remove_passthroughE  s    ###0A0A#0F(Fc"))$/4$$S)*a/%%c* 0 3799T?CH=X r   c                sz    V P                  V4       WP                  9   ;'       d    W P                  V,          9   # r6   )rL   r5   rl   rm   r   query_passthroughZDirect.query_passthroughP  s3    '''JJD4E4Ec4J,JJr   c                s    V P                  V4       WP                  9   d   V P                  V,          # \        R V,          4      h)zNo passthroughs for ipv '%s')rL   r5   r"   )r   r   r   r   get_passthroughsZDirect.get_passthroughsT  s<    ###$$S));sCDDr   c                r]   r6   )r5   rE   rF   r   get_all_passthroughsZDirect.get_all_passthroughs[  s       r   c           	     s   V P                  4        V P                  P                  R 4      '       g,   \        \        P
                  RV P                  ,          4      h\        V 4      p\        P                  ! 4       pVP                  V4       \        V P                  R4      ;_uu_ 4       p\        P                  ! R4      pVP                  V4        VP                  V4        RRR4       R#   \        P                   d5   p\        \        P                  RTP!                  4       ,          4      hRp?ii ; i  + '       g   i     R# ; i)z.xmlz'%s' is missing .xml suffixZrbNzNot a valid file: %s)rB   r7   Zendswithr   r   ZINVALID_NAMEr   saxZmake_parserZsetContentHandleropenZInputSourceZsetByteStreamZparseZSAXParseExceptionZINVALID_TYPEZgetException)r   handlerZparserfZsourcemsgr@   r   readZDirect.read`  s    }}%%f--##%BT]]%R  (-"  )$--&&!__T*F  #V$	 '&
 (( #'')?#BRBRBT)T  '&&s*   ,(D=C11D:/D55D::D==E	c                s   \         P                  P                  V P                  4      '       d4    \        P
                  ! V P                  R V P                  ,          4       \         P                  P                  \        P                  4      '       g&   \         P                  ! \        P                  R4       \        P                  ! V P                  RRR7      p\        V4      pVP                  4        VP                  R/ 4       VP!                  R	4       V P"                   F[  pVw  rVV P"                  V,           F=  pVP!                  R
4       VP%                  RRVRVRV/4       VP!                  R	4       K?  	  K]  	  V P&                   F  pVw  rVpV P&                  V,           F  w  r\)        V	4      ^8  d   K  VP!                  R
4       VP                  RRVRVRVRRV,          /4       VP!                  \*        P,                  P/                  \1        V	4      4      4       VP3                  R4       VP!                  R	4       K  	  K  	  V P4                   F  pV P4                  V,           F  p	\)        V	4      ^8  d   K  VP!                  R
4       VP                  RRV/4       VP!                  \*        P,                  P/                  \1        V	4      4      4       VP3                  R4       VP!                  R	4       K  	  K  	  VP3                  R4       VP!                  R	4       VP7                  4        VP9                  4        ?R#   \         d#   p\        RT P                  : RT: 24      hRp?ii ; i)z%s.oldzBackup of 'z
' failed: Ni  ZwtzUTF-8)ZmodeZencodingr   Z
z  r   r   r   r   r   z%dr   )osZpathZexistsr7   shutilZcopy2Z	ExceptionZIOErrorr   ZETC_FIREWALLDZmkdiriors   r   ZstartDocumentr   ZignorableWhitespacer2   ZsimpleElementr4   rY   rr   ZsaxutilsZescaper   r&   r5   ZendDocumentZclose)
r   rv   ru   rt   r?   r   r   r   r   rH   s
   &         r   writeZDirect.writes  s   77>>$--((RT]]Ht}},DE ww~~f2233HHV))51GGDMMw?(+ 	Xr*##D) ;;CLSS))++D1%%eS'5'5I ++D1 *  ::C"%S"&**S//t9q=++D1$$s"D8O	 ++CLL,?,?,OP""6*++D1 #2 ( $$C))#..t9q=++D1$$]UCLA++CLL,?,?,OP""=1++D1 / % 	8$##D)		y  RT]]CPQQRs   2M N%NN)r2   r7   r5   r4   )r3   r3   r3   )r   r   r   )r   r   r   r   )&r*   r+   r,   r-   Z__doc__rC   ZDBUS_SIGNATUREZPARSER_REQUIRED_ELEMENT_ATTRSZPARSER_OPTIONAL_ELEMENT_ATTRSr   r<   rA   rD   rB   rI   rL   rO   r    rZ   r[   r\   r^   r(   re   rf   rg   rh   ri   r)   rn   ro   rp   rq   rw   r{   r.   r/   Z__classcell__)r8   r0   s   @@r   r1   r1   g   s      	<.2r2q2$'("rd /N$*5w	%! %'!5&-"
9V
@
V
 $>	

	KE!
&@ @r   r1   )Zxml.saxrr   rx   rz   ry   Zfirewallr   Zfirewall.fw_typesr   Zfirewall.functionsr   r   Zfirewall.core.io.io_objectr   r   r   Zfirewall.core.loggerr   Zfirewall.corer	   r
   r   Zfirewall.errorsr   r   r1   r9   r   r   <module>r|      sU     	 	   4 2 
 % # "  )H%4 H%VLY Lr   