ó }”ÍZc@s°dZddddgZddlmZddlmZddlmZdd lm Z d „Z d „Z d e fd „ƒYZ de fd„ƒYZde fd„ƒYZdS(s!Transaction classes for firewalldt check_rulet reverse_ruletFirewallTransactiontFirewallZoneTransactioniÿÿÿÿ(tlog(terrors(t FirewallError(tLastUpdatedOrderedDictcCsÞt|ƒ}tddddddddd d d d d dddddgƒ}t||@ƒdkr‹ttjdt||@ƒdƒ‚ntddddddddgƒ}t||@ƒdkrÚttjdƒ‚ndS(sO Check if rule is valid (only add, insert and new chain rules are allowed) s-Ds--deletes-Rs --replaces-Ls--lists-Ss --list-ruless-Fs--flushs-Zs--zeros-Xs--delete-chains-Ps--policys-Es--rename-chainisarg '%s' is not alloweds-As--appends-Is--inserts-Cs--checks-Ns --new-chainsno '-A', '-I', '-C' or '-N' argN(tsettlenRRt INVALID_RULEtlist(targstused_settnot_allowed_sett needed_set((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyR"s(     cCsÎidd6dd6dd6dd6dd6d d 6}|}x|D]ˆ}y|j|ƒ}Wntk rmq>nX|d kr¸yt||d ƒWntk r£q¸X|j|d ƒn||||W|S( s Inverse valid rule s-Ds-As--deletes--appends-Is--inserts-Xs-Ns--delete-chains --new-chaini(s-Is--insert(tindext Exceptiontinttpop(R t replace_argstret_argstargtidx((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyRCs*     tSimpleFirewallTransactioncBs’eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z ddd „Zd „Zd „Zd„ZRS(s>Base class for FirewallTransaction and FirewallZoneTransactioncCs:||_i|_g|_g|_g|_t|_dS(N(tfwtrulest pre_funcst post_funcst fail_funcstFalset generous_mode(tselfR((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyt__init__ms      cCs/|jjƒ|j2|j2|j2t|_dS(N(RtclearRRRRR(R ((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyR"us  cCs t|_dS(N(tTrueR(R ((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pytenable_generous_mode|scCs t|_dS(N(RR(R ((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pytdisable_generous_modescCsE||jks"||j|krA|jj|gƒj|ƒndS(N(Rt setdefaulttappend(R tipvtrule((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pytadd_rule‚s"cCs ||jko||j|kS(N(R(R R(R)((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyt query_rule†scCs=||jkr9||j|kr9|j|j|ƒndS(N(Rtremove(R R(R)((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pyt remove_rule‰s"cGs|jj||fƒdS(N(RR'(R tfuncR ((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pytadd_prescGs|jj||fƒdS(N(RR'(R R.R ((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pytadd_postscGs|jj||fƒdS(N(RR'(R R.R ((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pytadd_fail“scCsâtjdt|ƒ|dfƒ|dkr5i}n|dkrJg}n|s¤x…|jD]C}x:t|j|ƒD]%}|j|gƒjt|ƒƒqtWqZWn4x1|jD]&}|j|gƒj |j|ƒq®W||fS(Ns%s.prepare(%s, %s)s...( Rtdebug4ttypetNoneRtreversedR&R'Rtextend(R tenableRtmodulesR(R)((s@/usr/lib/python2.7/site-packages/firewall/core/fw_transaction.pytprepare–s     *$cCsÉtjdt|ƒ|fƒ|j|ƒ\}}|jƒt}g}xk|D]c}y|jj|||ƒWn2tk r¤}t }|j s²tj |ƒq²qOX|j |ƒqOW|rM|j rMx||D]t}||kräqÌnxL||D]@}y|jj ||ƒWqïtk r.}tj |ƒqïXqïW|j |ƒqÌWt}n|s©|jj||ƒ} | r©| \} }| dk r¦t }|jj| | ƒq¦q©n|r»i} xJ|D]B}g| |s  ! '˜5