a i2@sgdZddlmZddlZddlZddlZddlmZddlm Z m Z m Z m Z m Z ddlmZddlmZddlmZGdd d e ZGd d d e Zd d ZdddZdS))Helper helper_reader helper_writerN)config) IO_ObjectIO_Object_ContentHandlerIO_Object_XMLGenerator check_port check_tcpudp)log)errors) FirewallErrorcsveZdZdddddddgffZdZd d gZd d d gd ZgdddgdZfddZddZ ddZ ddZ Z S)r)version)shortr) descriptionr)familyr)modulerports)rrz (sssssa(ss))-.Nr)rrhelper)namerrportprotocol)rrcs6tt|d|_d|_d|_d|_d|_g|_dSNr) superr__init__rrrrrrself __class__;/usr/lib/python3.9/site-packages/firewall/core/io/helper.pyr:szHelper.__init__cCs.d|_d|_d|_d|_d|_|jdd=dSr)rrrrrrrr"r"r#cleanupCs zHelper.cleanupcCs(ddg}||vr$ttjd||fdS)NZipv4Zipv6z'%s' not in '%s')r r Z INVALID_IPV)rZipvZipvsr"r"r# check_ipvKs  zHelper.check_ipvcCsv|dkr,|D]}t|dt|dq nF|dkrr|dsNttjd|t|dddkrrttjd|dS) Nrrr nf_conntrack_('%s' does not start with 'nf_conntrack_'rModule name '%s' too short)r r startswithr r INVALID_MODULElenreplace)rritemZ all_configZall_io_objectsrr"r"r# _check_configQs  zHelper._check_config) __name__ __module__ __qualname__ZIMPORT_EXPORT_STRUCTUREZDBUS_SIGNATUREZADDITIONAL_ALNUM_CHARSZPARSER_REQUIRED_ELEMENT_ATTRSZPARSER_OPTIONAL_ELEMENT_ATTRSrr$r%r/ __classcell__r"r"r r#r%s( rc@seZdZddZdS)helper_ContentHandlercCs>t||||j|||dkrd|vr8|d|j_d|vr\|j|d|d|j_d|vr|ddstt j d|dt |d dddkrtt j d |d|d|j_ nz|d krnp|d krnf|d kr:t|d t|d |d |d f}||jjvr$|jj|ntd|d |d dS)Nrrrrr'r(rr&r)rrrrz#Port '%s/%s' already set, ignoring.)r startElementr.Zparser_check_element_attrsrr%rr*r r r+r,r-rr r rappendr Zwarning)rrattrsentryr"r"r#r5bsF       z"helper_ContentHandler.startElementN)r0r1r2r5r"r"r"r#r4asr4c Cst}|ds ttjd||dd|_||j||_||_| t j rVdnd|_ |j |_ t|}t}||d||f}t|dn}td}||z||Wn:tjy}z ttjd|WYd}~n d}~00Wdn1s 0Y~~|S) Nz.xmlz'%s' is missing .xml suffixFT%s/%srbznot a valid helper file: %s)rendswithr r Z INVALID_NAMErZ check_namefilenamepathr*r ETC_FIREWALLDZbuiltindefaultr4saxZ make_parserZsetContentHandleropenZ InputSourceZ setByteStreamparseZSAXParseExceptionZINVALID_HELPERZ getException) r=r>rhandlerparserrfsourcemsgr"r"r#rs:       :rc CsL|r|n|j}|jr$d||jf}nd||jf}tj|rzt|d|Wn2ty}zt d||WYd}~n d}~00tj |}| t j rtj|stjt j stt j dt|dtj|ddd}t|}|i}|j|d <|jr|jd kr|j|d <|jr<|jd kr<|j|d <|d ||d|jr|jd kr|d|di||j|d|d|jr|jd kr|d|di||j|d|d|jD]4} |d|d| d| dd|dq|d |d||~dS)Nr:z %s/%s.xmlz%s.oldzBackup of file '%s' failed: %siZwtzUTF-8)modeencodingrrrrr z rrrrr&)rr) r>r=rosexistsshutilcopy2 Exceptionr errordirnamer*rr?mkdiriorBrZ startDocumentrrrr5ZignorableWhitespacerZ charactersZ endElementrrZ simpleElementZ endDocumentclose) rr>_pathrrHdirpathrFrDr7rr"r"r#rs\ $                     r)N)__all__Zxml.saxrArLrTrNZfirewallrZfirewall.core.io.io_objectrrrr r Zfirewall.core.loggerr r Zfirewall.errorsr rr4rrr"r"r"r#s     <#