ó  c‰`c@sdddgZddljZddlZddlZddlZddlmZddlm Z ddl m Z m Z m Z mZmZmZddlmZdd lmZdd lmZde fd „ƒYZd e fd „ƒYZd„Zdd„ZdS(tHelpert helper_readert helper_writeriÿÿÿÿN(tconfig(t u2b_if_py2(tPY2t IO_ObjecttIO_Object_ContentHandlertIO_Object_XMLGeneratort check_portt check_tcpudp(tlog(terrors(t FirewallErrorcBs©eZdddddddgffZdZdd gZidd6dd6dgd 6Zid ddgd 6d d gd 6Zd„Zd„Z d„Z d„Z d„Z RS(tversionttshortt descriptiontfamilytmoduletportss (sssssa(ss))t-t.thelpertnametporttprotocolcCsMtt|ƒjƒd|_d|_d|_d|_d|_g|_dS(NR( tsuperRt__init__RRRRRR(tself((s;/usr/lib/python2.7/site-packages/firewall/core/io/helper.pyR;s     cCs8d|_d|_d|_d|_d|_|j2dS(NR(RRRRRR(R((s;/usr/lib/python2.7/site-packages/firewall/core/io/helper.pytcleanupDs      cCs•t|jƒ|_t|jƒ|_t|jƒ|_t|jƒ|_t|jƒ|_g|jD]$\}}t|ƒt|ƒf^qd|_dS(s» HACK. I haven't been able to make sax parser return strings encoded (because of python 2) instead of in unicode. Get rid of it once we throw out python 2 support.N(RRRRRRR(Rtpotpr((s;/usr/lib/python2.7/site-packages/firewall/core/io/helper.pytencode_stringsLs cCs;ddg}||kr7ttjd||fƒ‚ndS(Ntipv4tipv6s'%s' not in '%s'(R R t INVALID_IPV(Rtipvtipvs((s;/usr/lib/python2.7/site-packages/firewall/core/io/helper.pyt check_ipvWs   cCs®|dkr<x›|D]"}t|dƒt|dƒqWnn|dkrª|jdƒspttjd|ƒ‚nt|jddƒƒdkrªttjd|ƒ‚qªndS( NRiiRt nf_conntrack_s('%s' does not start with 'nf_conntrack_'RsModule name '%s' too short(R R t startswithR R tINVALID_MODULEtlentreplace(RRtitemR((s;/usr/lib/python2.7/site-packages/firewall/core/io/helper.pyt _check_config]s    (sversionR(sshortR(s descriptionR(sfamilyR(smoduleR(RRN( t__name__t __module__tIMPORT_EXPORT_STRUCTUREtDBUS_SIGNATUREtADDITIONAL_ALNUM_CHARStNonetPARSER_REQUIRED_ELEMENT_ATTRStPARSER_OPTIONAL_ELEMENT_ATTRSRRR!R'R.(((s;/usr/lib/python2.7/site-packages/firewall/core/io/helper.pyR&s(    thelper_ContentHandlercBseZd„ZRS(cCs¹tj|||ƒ|jj||ƒ|dkrd|krQ|d|j_nd|kr„|jj|dƒ|d|j_nd|krµ|djdƒsÀtt j d|dƒ‚nt |dj ddƒƒdkrÿtt j d |dƒ‚n|d|j_ qµn |d kr$n‘|d kr3n‚|d krµt|d ƒt|d ƒ|d |d f}||jjkr—|jjj|ƒqµtjd|d |d ƒndS(NRRRRR(s('%s' does not start with 'nf_conntrack_'RisModule name '%s' too shortRRRRs#Port '%s/%s' already set, ignoring.(Rt startElementR-tparser_check_element_attrsRR'RR)R R R*R+R,RR R RtappendR twarning(RRtattrstentry((s;/usr/lib/python2.7/site-packages/firewall/core/io/helper.pyR8ns>    "    (R/R0R8(((s;/usr/lib/python2.7/site-packages/firewall/core/io/helper.pyR7msc CsYtƒ}|jdƒs1ttjd|ƒ‚n|d |_|j|jƒ||_||_|j t j ƒrxt nt |_|j|_t|ƒ}tjƒ}|j|ƒd||f}t|dƒi}tjdƒ}|j|ƒy|j|ƒWn2tjk r5}ttjd|jƒƒ‚nXWdQX~~trU|jƒn|S(Ns.xmls'%s' is missing .xml suffixiüÿÿÿs%s/%strbsnot a valid helper file: %s(RtendswithR R t INVALID_NAMERt check_nametfilenametpathR)Rt ETC_FIREWALLDtFalsetTruetbuiltintdefaultR7tsaxt make_parsertsetContentHandlertopent InputSourceR4t setByteStreamtparsetSAXParseExceptiontINVALID_HELPERt getExceptionRR!( RBRCRthandlertparserRtftsourcetmsg((s;/usr/lib/python2.7/site-packages/firewall/core/io/helper.pyRs8     !       c Cs|r |n|j}|jr4d||jf}nd||jf}tjj|ƒrytj|d|ƒWqtk r™}tj d||ƒqXntjj |ƒ}|j t j ƒrtjj|ƒ rtjjt j ƒsÿtjt j dƒntj|dƒntj|dddd ƒ}t|ƒ}|jƒi}|j|d <|jr~|jd kr~|j|d s   .G#