+
        -                     >   R t ^ RIt^ RIHt ^ RIHu Ht ^ RI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
 R]4      t ! R R]4      t ! R R]P&                  P(                  4      t ! R R]P,                  4      tR tR tR tR tR# )z5Generic io_object handler, io specific check methods.N)OrderedDict)	functions)errors)FirewallErrorc                      a  ] tR t^t o Rt/ tRt. t/ t/ t	R t
R t]R 4       tR tR tRR	 ltR
 tR tR t/ 3R ltR tR tR tR tRtV tR# )	IO_Objectz9Abstract IO_Object as base for icmptype, service and zonez()c                L    R V n         R V n        R V n        RV n        RV n        R# ) FN)filenamepathnamedefaultbuiltinselfs   &?/usr/lib/python3.14/site-packages/firewall/core/io/io_object.py__init__IO_Object.__init__   s%    		    c                   a  \         ;QJ d!    . V 3R  lS P                   4       F  NK  	  5# ! V 3R  lS P                   4       4      # )c              3   d   <"   T F%  p\         P                  ! \        SV4      4      x  K'  	  R # 5iNcopydeepcopygetattr).0keyr   s   & r   	<genexpr>*IO_Object.export_config.<locals>.<genexpr>&   s(      
9U#DMM'$,--9Us   -0)tupleIMPORT_EXPORT_STRUCTUREr   s   fr   export_configIO_Object.export_config%   sA    u 
9=9U9U
u 	
u 
9=9U9U
 
 	
r   c                    \        V4      \        V 4      8  d'   \        P                  ! R V R\        V 4       R24      h\	        \        W4      4      # )z-conf tuple has unexpected too many elements (z vs. ))lenr   BugErrorlistdictzip)r!   confs   &&r   get_dict_from_tuple_static$IO_Object.get_dict_from_tuple_static*   sR    t9s233//?vU4PgKhJiijk  C/677r   c                B    \         P                  V P                  V4      # r   )r   r,   r!   )objr+   s   &&r   get_dict_from_tupleIO_Object.get_dict_from_tuple2   s    33C4O4OQUVVr   c                    / pV P                    F\  p\        W4      pV'       g/   \        V\        4      '       g   \        V\        4      '       g   KD  \
        P                  ! V4      W&   K^  	  V# r   )r!   r   
isinstanceboolintr   r   )r   r+   r   vs   &   r   export_config_dictIO_Object.export_config_dict5   sS    //C"AJq$'':a+=+= MM!,	 0 r   Nc                $  a aa Sf   S P                  4       oS P                  pVe2   \        \        P                  ! W24      4      pV\        V4      8X  g   Q hR o\        ;QJ d    . VVV 3R lV 4       F  NK  	  5# ! VVV 3R lV 4       4      # )Nc                 \    W!9  d    \         P                  ! \        W4      4      # W,          # r   r   )r   	conf_dictr   s   &&&r   _get+IO_Object.export_config_tuple.<locals>._getG   s&    # }}WT%788>!r   c              3   8   <"   T F  pS! SSV4      x  K  	  R # 5ir    )r   r   r<   r;   r   s   & r   r   0IO_Object.export_config_tuple.<locals>.<genexpr>N   s     @4CT$	3//4s   )r7   r!   r    	itertoolsislicer&   )r   r;   lengthkeysr<   s   ff& @r   export_config_tupleIO_Object.export_config_tuple=   sx    //1I++))$78DSY&&&	" u@4@u@u@4@@@r   c           	        V P                  W4       \        V P                  4       F  w  r4\        W,          \        4      '       di   . p\        4       pW,           F-  pWv9  g   K  VP                  V4       VP                  V4       K/  	  ?\        W\        P                  ! V4      4       K  \        W\        P                  ! W,          4      4       K  	  R # r   )check_config	enumerater!   r3   r(   setappendaddsetattrr   r   )r   r+   all_io_objectsielement_conf_setxs   &&&     r   import_configIO_Object.import_configP   s    $/#D$@$@AJA$'4((uA}Q ! t}}U';<t}}TW'=> Br   c                   V P                  W4       V F  p\        W4      '       g*   \        \        P                  R P                  V4      4      h\        W,          \        4      '       dF   \        W\        \        P                  ! \        P                  ! W,          4      4      4      4       K  \        W\        P                  ! W,          4      4       K  	  R# )z-Internal error. '{}' is not a valid attributeN)check_config_dicthasattrr   r   UNKNOWN_ERRORformatr3   r(   rM   r   fromkeysr   r   )r   r+   rN   r   s   &&& r   import_config_dictIO_Object.import_config_dict`   s    t4C4%%#((CJJ3O  $)T**4(<(<T]]49=U(V#WX4==#;< r   c                   \        V\        4      '       g9   \        \        P                  R V: R\        R4      : R\        V4      : 24      h\        V4      ^8  d   \        \        P                  R4      hV FN  pVP                  4       '       d   K  W P                  9  g   K-  \        \        P                  R V: RV: R 24      h	  R# )'' not of type r	   , but zname can't be emptyz' is not allowed in 'N)
r3   strr   r   INVALID_TYPEtyper&   INVALID_NAMEisalnumADDITIONAL_ALNUM_CHARS)r   r   chars   && r   
check_nameIO_Object.check_nameo   s    $$$##15tBxdL  t9q= 3 35JKKD<<>>d2M2M&M#''4QU)W  r   c                *   \        V4      \        V P                  4      8w  d@   \        \        P                  R \        V4      \        V P                  4      3,          4      h\        \        V P                  V4      4      pV P                  W24       R# )z structure size mismatch %d != %dN)r&   r!   r   r   rc   r)   r*   rW   )r   r+   rN   r;   s   &&& r   rH   IO_Object.check_config}   sv    t9D8899##2t9c$">">?@A 
 T994@A	y9r   c                
   V F|  pV P                   P                  V4      pVf*   \        \        P                  RP                  V4      4      hV P                  W,          V4       V P                  W,          W1V4       K~  	  R # )Nzoption '{}' is not valid)r!   getr   r   INVALID_OPTIONrZ   _check_config_structure_check_config)r   r+   rN   r   type_formats   &&&  r   rW   IO_Object.check_config_dict   st    C66::3?K"#))+E+L+LS+Q  ((K@ty#^D r   c                    R # r   r?   )r   dummy1dummy2dummy3dummy4s   &&&&&r   rq   IO_Object._check_config   s    r   c                   \        V\        V4      4      '       g9   \        \        P                  R V: R\        V4      : R\        V4      : 24      h\        V\
        4      '       dU   \        V4      ^8w  d"   \        \        P                  RV,          4      hV F  pV P                  W2^ ,          4       K  	  R# \        V\        4      '       dt   \        V4      \        V4      8w  d-   \        \        P                  RV\        V4      3,          4      h\        V4       F  w  rEV P                  W,          V4       K  	  R# \        V\        4      '       d   \        VP                  4       4      ^ ,          w  rgVP                  4        F  w  r\        V\        V4      4      '       g9   \        \        P                  R V: R\        V4      : R\        V4      : 24      h\        V\        V4      4      '       d   Ku  \        \        P                  R V: R\        V4      : R\        V4      : 24      h	  R# R# )r_   r`   ra   zlen('%s') != 1zlen('%s') != %dN)r3   rd   r   r   rc   r(   r&   rp   r    rI   r)   items)	r   r+   	structurerS   rO   valueskeysvaluer   s	   &&&      r   rp   !IO_Object._check_config_structure   s   $Y00##15tIT
S  i&&9~"#F$7$79II9UVV,,Q!= 	5))9~T*#''):dC	N=S)S  &i0,,TWe< 1	4((!)//"34Q7NT"jjl
!#tDz22'++9<d4j$s)T  "%f66'++ $v,U=  + )r   c                J   VP                  4       pR pWP                  9   dk   RpV P                  V,          eT   V P                  V,           F<  pWS9   d   VP                  V4       K  \        \        P
                  RV: RV: 24      h	  WP                  9   d6   RpV P                  V,           F  pWS9   g   K  VP                  V4       K  	  V'       g"   \        \        P
                  RV,          4      hV F"  p\        \        P
                  V: RV: 24      h	  R# )FTNzMissing attribute z for zUnexpected element %sz: Unexpected attribute )getNamesPARSER_REQUIRED_ELEMENT_ATTRSremover   r   PARSE_ERRORPARSER_OPTIONAL_ELEMENT_ATTRS)r   r   attrs_attrsfoundrS   s   &&&   r   parser_check_element_attrs$IO_Object.parser_check_element_attrs   s    !555E11$7C;;DAAA{a(+"..=>E 	 B 555E77==;MM!$ >  2 24Kd4RSSA""T1$M  r   )r   r   r
   r   r   )NN)__name__
__module____qualname____firstlineno____doc__r!   DBUS_SIGNATURErg   r   r   r   r"   staticmethodr,   r0   r7   rE   rT   r\   ri   rH   rW   rq   rp   r   __static_attributes____classdictcell____classdict__s   @r   r   r      s     C N$&!$&!

 8 8WA&? = 13 :E!H r   r   c                   8   a a ] tR t^t oV 3R ltR tRtVtV ;t# )UnexpectedElementErrorc                8   < \         \        V `  4        Wn        R # r   )superr   r   r   )r   r   	__class__s   &&r   r   UnexpectedElementError.__init__   s    $d46	r   c                (    R V P                   ,          # )zUnexpected element '%s'r   r   s   &r   __str__UnexpectedElementError.__str__   s    (DII66r   r   	r   r   r   r   r   r   r   r   __classcell__r   r   s   @@r   r   r      s     7 7r   r   c                   8   a a ] tR t^t oV 3R ltR tRtVtV ;t# )MissingAttributeErrorc                D   < \         \        V `  4        Wn        W n        R # r   )r   r   r   r   	attributer   r   r   r   s   &&&r   r   MissingAttributeError.__init__   s    #T35	"r   c                @    R V P                   : RV P                  : R2# )	Element 'z': missing 'z' attributer   r   r   s   &r   r   MissingAttributeError.__str__   s    9=DNNSSr   r   r   r   r   s   @@r   r   r      s     #
T Tr   r   c                   8   a a ] tR t^t oV 3R ltR tRtVtV ;t# )UnexpectedAttributeErrorc                D   < \         \        V `  4        Wn        W n        R # r   )r   r   r   r   r   r   s   &&&r   r   !UnexpectedAttributeError.__init__   s    &68	"r   c                @    R V P                   : RV P                  : R2# )r   z': unexpected attribute 'r_   r   r   s   &r   r    UnexpectedAttributeError.__str__   s    <@IIt~~VVr   r   r   r   s   @@r   r   r      s     #
W Wr   r   c                   >   a  ] tR t^t o R tR tR tR tR tRt	V t
R# )IO_Object_ContentHandlerc                     Wn         R V n        R# r	   N)item_element)r   r   s   &&r   r   !IO_Object_ContentHandler.__init__   s    	r   c                    R V n         R# r   r   r   s   &r   startDocument&IO_Object_ContentHandler.startDocument   	    r   c                    R V n         R# r   r   )r   r   r   s   &&&r   startElement%IO_Object_ContentHandler.startElement   r   r   c                    VR 8X  d   V P                   V P                  n        R# VR8X  d   V P                   V P                  n        R# R# )shortdescriptionN)r   r   r   r   )r   r   s   &&r   
endElement#IO_Object_ContentHandler.endElement  s5    7?"mmDIIO]"$(MMDII! #r   c                X    V ;P                   VP                  R R4      ,          un         R# )
 N)r   replace)r   contents   &&r   
characters#IO_Object_ContentHandler.characters  s    s33r   )r   r   N)r   r   r   r   r   r   r   r   r   r   r   r   s   @r   r   r      s#     24 4r   r   c                   ,   a  ] tR tRt o R tR tRtV tR# )IO_Object_XMLGeneratori  c                   \         P                  P                  P                  V 4       VP                  V n        VP                  V n        / .V n        V P                  R,          V n	        . V n
        RV n        RV n        RV n        R# )   zutf-8FN)saxhandlerContentHandlerr   write_writeflush_flush_ns_contexts_current_context_undeclared_ns_maps	_encoding_pending_start_element_short_empty_elements)r   outs   &&r   r   IO_Object_XMLGenerator.__init__  sn     	""++D1iiiiD $ 1 1" 5#%  &+#%*"r   c           	         V P                  RV,           4       VP                  4        F2  w  rV P                  RV: R\        P                  ! V4      : 24       K4  	  V P                  R4       R# )z slightly modified startElement()<r   =z/>N)r   r{   saxutils	quoteattr)r   r   r   r}   s   &&& r   simpleElement$IO_Object_XMLGenerator.simpleElement  sL    C$J ;;=KDKKD(*<*<U*CDE )Dr   )r   r   r   r   r   r   r   r   N)r   r   r   r   r   r   r   r   r   s   @r   r   r     s     +" r   r   c                    \         P                  ! V 4      pVR8X  d"   \        \        P                  RV ,          4      hVR8X  d"   \        \        P                  RV ,          4      hVf"   \        \        P                  RV ,          4      h\        V4      ^8X  d9   V^ ,          V^,          8  d"   \        \        P                  RV ,          4      hR# R# )   zport number in '%s' is too bigz'%s' is invalid port rangeNzport range '%s' is ambiguousr   )r   getPortRanger   r   INVALID_PORTr&   )port
port_ranges   & r   
check_portr   %  s    ''-JR!AD!H
 	
 
r	F//1MPT1TUU		F//1ORV1VWW	ZA	*Q-:a="@F//1MPT1TUU #A	r   c                 V    V R9  d"   \        \        P                  RV ,          4      hR# )tcpz)'%s' not from {'tcp'|'udp'|'sctp'|'dccp'}N)r   udpsctpdccp)r   r   INVALID_PROTOCOLprotocols   &r   check_tcpudpr   3  s.    55##7(B
 	
 6r   c                 r    \         P                  ! V 4      '       g   \        \        P                  V 4      hR # r   )r   checkProtocolr   r   r   r   s   &r   check_protocolr   ;  s+    ""8,,F33X>> -r   c                     \         P                  ! W4      '       g$   \        \        P                  R V: RV : R24      hR# )r_   z' is not valid z addressN)r   check_addressr   r   INVALID_ADDR)ipvaddrs   &&r   r   r   @  s5    ""3--4!M
 	
 .r   )r   rA   xml.saxr   xml.sax.saxutilsr   r   collectionsr   firewallr   r   firewall.errorsr   r   	Exceptionr   r   r   r   r   r   XMLGeneratorr   r   r   r   r   r?   r   r   <module>r     s    <   # #  #   )~ ~H7Y 7TI TWy W4s{{99 4*X22 4V
?

r   