ó  c‰`c@s ddljZddlZddlZddlZddlmZddlmZddl m Z m Z m Z ddl mZmZmZddlmZddlmZddlmZdd lmZdd lmZd efd „ƒYZd efd„ƒYZdS(iÿÿÿÿN(tconfig(tLastUpdatedOrderedDict(t splitArgstjoinArgst u2b_if_py2(t IO_ObjecttIO_Object_ContentHandlertIO_Object_XMLGenerator(tlog(t ipXtables(tebtables(terrors(t FirewallErrortdirect_ContentHandlercBs#eZd„Zd„Zd„ZRS(cCstj||ƒt|_dS(N(Rt__init__tFalsetdirect(tselftitem((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyR(scCsútj|||ƒ|jj||ƒ|dkr\|jrPttjdƒ‚nt|_nš|dkrË|js‚t j dƒdS|d}|d}|d}|jj t |ƒt |ƒt |ƒƒn+|dkrœ|jsñt j dƒdS|d}|dkr ttj d |ƒ‚n|d}|d}yt|d ƒ}Wn'tk rqt j d|d ƒdSXt |ƒt |ƒt |ƒ|g|_nZ|dkrá|jsÂt j dƒdS|d}t |ƒg|_nt j d|ƒdSdS(NRsMore than one direct tag.tchains$Parse Error: chain outside of directtipvttabletrules#Parse Error: rule outside of directtipv4tipv6tebs"'%s' not from {'ipv4'|'ipv6'|'eb'}tprioritys'Parse Error: %s is not a valid priorityt passthroughs&Parse Error: command outside of directsUnknown XML element %s(RRR(Rt startElementRtparser_check_element_attrsRR R t PARSE_ERRORtTrueRterrort add_chainRt INVALID_IPVtintt ValueErrort_rulet _passthrough(RtnametattrsRRRR((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyR,sT                          cCstj||ƒ|dkr†|jrm|jjgt|jƒD]}t|ƒ^q>ƒ|jj|jŒn t j dƒd|_nz|dkr|jrã|j jgt|jƒD]}t|ƒ^q´ƒ|jj |j Œnt j ddƒd|_ ndS(NRs2Error: rule does not have any arguments, ignoring.Rs0Error: passthrough does not have any arguments, s ignoring.(Rt endElementt_elementR%tappendRRRtadd_ruleRR tNoneR&tadd_passthrough(RR'tx((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyR)^s    &     & (t__name__t __module__RRR)(((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyR 's  2tDirectcBsƒeZdZdd(gfddddddgfgfdddgfgffZdZid)d6dd d gd 6dd d d gd 6dgd 6ZiZd„Zd„Z d„Z d„Z d„Z d„Z d„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd „Zd!„Zd"„Zd#„Zd$„Zd%„Zd&„Z d'„Z!RS(*s Direct class tchainsttrulesit passthroughss(a(sss)a(sssias)a(sas))RRRRRRRcCsDtt|ƒjƒ||_tƒ|_tƒ|_tƒ|_dS(N(tsuperR2RtfilenameRR3R5R6(RR8((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyRŠs    cCsdS(N((RtconfR((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyt _check_config‘sc CsNg}g}xO|jD]D}x;|j|D],}|jtt|ƒt|gƒƒƒq*WqW|j|ƒg}xe|jD]Z}xQ|j|D]B}|jt|d|d|d|dt|dƒfƒƒqWq{W|j|ƒg}xH|jD]=}x4|j|D]%}|jt|t|ƒfƒƒq WqöW|j|ƒt|ƒS(Niii(R3R+ttupletlistR5R6(RtretR/tkeyRR((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyt export_config•s$. % ' cCsÔ|jƒ|j|ƒx¶t|jƒD]¥\}\}}|dkrjx"||D]}|j|ŒqPWn|dkr›x"||D]}|j|ŒqWn|dkr'x"||D]}|j|Œq²Wq'q'WdS(NR3R5R6(tcleanupt check_configt enumeratetIMPORT_EXPORT_STRUCTURER!R,R.(RR9titelementtdummyR/((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyt import_config©s  "   cCs+|jjƒ|jjƒ|jjƒdS(N(R3tclearR5R6(R((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyR@·s  cCsdGHx;|jD]0}d|d|ddj|j|ƒfGHqWdGHxe|jD]Z}d|d|d|dfGHx3|j|D]$\}}d |d j|ƒfGHq„WqRWd GHxD|jD]9}d |GHx'|j|D]}d d j|ƒGHqÜWq¿WdS(NR3s (%s, %s): %siit,R5s (%s, %s, %s):is (%d, ('%s'))s','R6s %s:s ('%s')(R3tjoinR5R6(RR>Rtargs((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pytoutput¼s  cCs>dddg}||kr:ttjd||fƒ‚ndS(NRRRs'%s' not in '%s'(R R R"(RRtipvs((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyt _check_ipvÌs  cCsf|j|ƒ|dkr(tjjƒn tjjƒ}||krbttjd||fƒ‚ndS(NRRs'%s' not in '%s'(sipv4sipv6(RNR tBUILT_IN_CHAINStkeysR R R t INVALID_TABLE(RRRttables((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyt_check_ipv_tableÒs    cCs‡|j||ƒ||f}||jkr;g|j|((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyR!Ýs  cCs˜|j||ƒ||f}||jkr{||j|kr{|j|j|ƒt|j|ƒdkr”|j|=q”ntd|||fƒ‚dS(Nis4Chain '%s' with table '%s' with ipv '%s' not in list(RSR3tremovetlenR$(RRRRR>((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyt remove_chainès "cCs<|j||ƒ||f}||jko;||j|kS(N(RSR3(RRRRR>((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyt query_chainôs cCsP|j||ƒ||f}||jkr6|j|Std||fƒ‚dS(Ns&No chains for table '%s' with ipv '%s'(RSR3R$(RRRR>((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyt get_chainsùs   cCs|jS(N(R3(R((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pytget_all_chainsscCs³|j||ƒ|||f}||jkrAtƒ|j|tvalue((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyR,s'cCs¾|j||ƒ|||f}|t|ƒf}||jkrŠ||j|krŠ|j||=t|j|ƒdkrº|j|=qºn0tddj|ƒ||fd||fƒ‚dS(Nis(Rule '%s' for table '%s' and chain '%s' s',s)with ipv '%s' and priority %d not in list(RSR;R5RVR$RJ(RRRRRRKR>R[((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyt remove_rules"cCs‡|j||ƒ|||f}||jkrƒx)|j|jƒD]}|j||=qBWt|j|ƒdkrƒ|j|=qƒndS(Ni(RSR5RPRV(RRRRR>R[((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyt remove_rules"scCsQ|j||ƒ|||f}|t|ƒf}||jkoP||j|kS(N(RSR;R5(RRRRRRKR>R[((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyt query_rule+scCs[|j||ƒ|||f}||jkr9|j|Std||fd|ƒ‚dS(Ns'No rules for table '%s' and chain '%s' s with ipv '%s'(RSR5R$(RRRRR>((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyt get_rules1s  cCs|jS(N(R5(R((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyt get_all_rules:scCs~|j|ƒ||jkr,g|j|RRRRRK((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pytwriteusZ               (R4R4R4N("R0R1t__doc__RCtDBUS_SIGNATURER-tPARSER_REQUIRED_ELEMENT_ATTRStPARSER_OPTIONAL_ELEMENT_ATTRSRR:R?RGR@RLRNRSR!RWRXRYRZR,R\R]R^R_R`R.RaRbRcRdRwRŒ(((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyR2usJ                  (txml.saxRhR{R„R~tfirewallRtfirewall.fw_typesRtfirewall.functionsRRRtfirewall.core.io.io_objectRRRtfirewall.core.loggerRt firewall.coreR R R tfirewall.errorsR R R2(((s;/usr/lib/python2.7/site-packages/firewall/core/io/direct.pyts   N