ó }”ÍZc@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(t ETC_FIREWALLD(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(RtconfigtitemR((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.pyR9ns>    "    (R0R1R9(((s;/usr/lib/python2.7/site-packages/firewall/core/io/helper.pyR8msc Cs:tƒ}|jdƒs1ttjd|ƒ‚n|d |_|j|jƒ||_||_|j t ƒrut nt |_ |j |_t|ƒ}tjƒ}|j|ƒd||f}t|dƒM}y|j|ƒWn2tjk r}ttjd|jƒƒ‚nXWdQX~~tr6|jƒn|S(Ns.xmls'%s' is missing .xml suffixiüÿÿÿs%s/%strsnot a valid helper file: %s(RtendswithR R t INVALID_NAMERt check_nametfilenametpathR)RtFalsetTruetbuiltintdefaultR8tsaxt make_parsertsetContentHandlertopentparsetSAXParseExceptiontINVALID_HELPERt getExceptionRR!(RCRDRthandlertparserRtftmsg((s;/usr/lib/python2.7/site-packages/firewall/core/io/helper.pyRs4           c Cs|r |n|j}|jr4d||jf}nd||jf}tjj|ƒrytj|d|ƒWqtk r™}tj d||ƒqXntjj |ƒ}|j t ƒr tjj|ƒ r tjjt ƒsötj t dƒntj |dƒntj|dddd ƒ}t|ƒ}|jƒi}|j|d <|jru|jd kru|j|d s   .G#