ó  c‰`c@s˜dZddgZddlmZddlmZddlmZddlm Z de fd „ƒYZ de fd „ƒYZ de fd „ƒYZ d S( s!Transaction classes for firewalldtFirewallTransactiontFirewallZoneTransactioniÿÿÿÿ(tlog(terrors(t FirewallError(tLastUpdatedOrderedDicttSimpleFirewallTransactioncBs‰eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z ddd „Z d „Zd „Zd „ZRS(s>Base class for FirewallTransaction and FirewallZoneTransactioncCs1||_i|_g|_g|_g|_dS(N(tfwtrulest pre_funcst post_funcst fail_funcs(tselfR((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyt__init__"s     cCs&|jjƒ|j2|j2|j2dS(N(RtclearR R R (R ((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyR)s cCs#|jj|jgƒj|ƒdS(N(Rt setdefaulttnametappend(R tbackendtrule((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pytadd_rule/scCs%x|D]}|j||ƒqWdS(N(R(R RRR((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyt add_rules2s cCs&|j|jko%||j|jkS(N(RR(R RR((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyt query_rule6scCsF|j|jkrB||j|jkrB|j|jj|ƒndS(N(RRtremove(R RR((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyt remove_rule9s(cGs|jj||fƒdS(N(R R(R tfunctargs((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pytadd_pre=scGs|jj||fƒdS(N(R R(R RR((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pytadd_post@scGs|jj||fƒdS(N(R R(R RR((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pytadd_failCscCsñtjdt|ƒ|dfƒ|dkr5i}n|dkrJg}n|s³x”|jD]R}xIt|j|ƒD]4}|j|gƒj|jj |ƒj |ƒƒqtWqZWn4x1|jD]&}|j|gƒj |j|ƒq½W||fS(Ns%s.prepare(%s, %s)s...( Rtdebug4ttypetNoneRtreversedRRRtget_backend_by_namet reverse_ruletextend(R tenableRtmodulest backend_nameR((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pytprepareFs     '$cCs1tjdt|ƒ|fƒ|j|ƒ\}}|jƒt}d}g}xe|D]]}y|jj|||ƒWn,tk r¤}t }|}tj |ƒqUX|j |ƒqUW|sÿ|jj ||ƒ} | rÿ| \} }| rütj |ƒqüqÿn|r#i} xY|D]Q}g| |t||ƒD],} | |j |jj|ƒj| ƒƒq3WqWxL| D]D}y|jj|| |ƒWqntk r±}tj |ƒqnXqnWxU|jD]J\} }y| |ŒWqÀtk r }tj d| ||fƒqÀXqÀWttj|ƒ‚n|jƒdS(Ns%s.execute(%s)ts#Calling fail func %s(%s) failed: %s(RRRR(tpretFalseRRt ExceptiontTrueterrorRthandle_modulestdebug1R!R"R#R RRtCOMMAND_FAILEDtpost(R R%RR&R.terrorMsgtdoneR'tmsgt module_returntstatust undo_rulesRRR((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pytexecuteZsP      $  cCsstjdt|ƒƒxU|jD]J\}}y||ŒWq!tk rj}tjd|||fƒq!Xq!WdS(Ns%s.pre()s"Calling pre func %s(%s) failed: %s(RRRR R,R.(R RRR5((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyR*—s cCsstjdt|ƒƒxU|jD]J\}}y||ŒWq!tk rj}tjd|||fƒq!Xq!WdS(Ns %s.post()s#Calling post func %s(%s) failed: %s(RRRR R,R.(R RRR5((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyR2¡s N(t__name__t __module__t__doc__R RRRRRRRRR R(R9R*R2(((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyRs          = cBsJeZdZd„Zd„Zd„Zddd„Zd„Zd„Z RS(s<General FirewallTransaction, contains also zone transactionscCs&tt|ƒj|ƒtƒ|_dS(N(tsuperRR Rtzone_transactions(R R((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyR °scCs$tt|ƒjƒ|jjƒdS(N(R=RRR>(R ((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyR´scCs9||jkr.t|j||ƒ|j|RR(R tzone((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pytzone_transaction¸scCsàtjdt|ƒ|dfƒtt|ƒj|||ƒ\}}x|jD]„}yR|j|j||ƒx4|j|jD]"}||kr|j|ƒqqWWqNt k rÑ}tj dt |ƒƒqNXqNW||fS(Ns%s.prepare(%s, %s)s...s1Failed to prepare transaction rules for zone '%s'( RRRR=RR(R>R&RRR.tstr(R R%RR&R?tmoduleR5((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyR(¾s   cCsStjdt|ƒƒtt|ƒjƒx"|jD]}|j|jƒq4WdS(Ns%s.pre()(RRRR=RR*R>(R R?((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyR*ÐscCsStjdt|ƒƒtt|ƒjƒx"|jD]}|j|jƒq4WdS(Ns %s.post()(RRRR=RR2R>(R R?((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyR2ØsN( R:R;R<R RR@R R(R*R2(((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyR­s    cBsƒeZdZd d„Zd„Zd d d„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zd „ZRS(s;Zone transaction with additional chain and module interfacecCs>tt|ƒj|ƒ||_||_g|_g|_dS(N(R=RR R?tfw_transactiontchainsR&(R RR?RC((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyR ås    cCs£|jr~tt|jƒjƒx}|jjjƒD]E}tt|jj|ƒjƒ|jj|j2|jj|j2q2Wn!tt|ƒjƒ|j2|j2dS(N( RCR=RRR>tkeysRRDR&(R R?((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyRìs cCs~tjdt|ƒ|dfƒtt|ƒj|||ƒ\}}x-|jD]"}||krN|j|ƒqNqNW||fS(Ns%s.prepare(%s, %s)s...(RRRR=RR(R&R(R R%RR&RB((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyR(ûs  cCs6|jr|jj|ƒntt|ƒj|ƒdS(N(RCR9R=R(R R%((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyR9s cCsT||f}||jkrP|jjj|jt|g|ƒ|jj|ƒndS(N(RDRR?tgen_chain_rulesR-R(R ttabletchaint table_chain((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyt add_chains "cCs2||f}||jkr.|jj|ƒndS(N(RDR(R RGRHRI((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyt remove_chains cCs?x8|D]0}||jkr|j|d|dƒqqWdS(Nii(RDRJ(R RDRI((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyt add_chainss cCs7x0|D](}||jkr|jj|ƒqqWdS(N(RDR(R RDRI((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyt remove_chains s cCs&||jkr"|jj|ƒndS(N(R&R(R RB((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyt add_module%scCs&||jkr"|jj|ƒndS(N(R&R(R RB((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyt remove_module)scCs"x|D]}|j|ƒqWdS(N(RN(R R&RB((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyt add_modules-s cCs"x|D]}|j|ƒqWdS(N(RO(R R&RB((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pytremove_modules1s N(R:R;R<R R RR(R9RJRKRLRMRNRORPRQ(((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyRâs         N(R<t__all__tfirewall.core.loggerRtfirewallRtfirewall.errorsRtfirewall.fw_typesRtobjectRRR(((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyts Ž5