[fwbuilder-commits] [SCM] Firewall Builder GUI and Policy Compilers Open Source Code branch, develo
Brought to you by:
mikehorn
From: <gi...@ir...> - 2011-01-27 19:58:14
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Firewall Builder GUI and Policy Compilers Open Source Code". The branch, development has been updated via b3f34b06ac068441235972a2b087a2dcee137f83 (commit) from 804189fb75cb0d775ca6a73bffcc8e1e10e3d632 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b3f34b06ac068441235972a2b087a2dcee137f83 Author: Vadim Kurland <va...@sl...> Date: Thu Jan 27 11:58:02 2011 -0800 * Rule.cpp (removeRef): fixes #1997 "add removeRef and addRef methods to class NATRule". Now undo and redo correctly remove and restore references to NAT rule sets in NAT rules with action Branch. diff --git a/doc/ChangeLog b/doc/ChangeLog index 9ac3cb8..8df8115 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,5 +1,10 @@ 2011-01-27 vadim <va...@ne...> + * Rule.cpp (removeRef): fixes #1997 "add removeRef and addRef + methods to class NATRule". Now undo and redo correctly remove and + restore references to NAT rule sets in NAT rules with action + Branch. + * Rule.cpp (addRef): fixes #1991 "Undo does not restore object as a parameter of policy rule action Branch or Tag after it was deleted deleted". Now Undo restores references to rule sets and tag diff --git a/src/libfwbuilder/src/fwbuilder/FWObjectDatabase_search.cpp b/src/libfwbuilder/src/fwbuilder/FWObjectDatabase_search.cpp index 958e98e..64b58ff 100644 --- a/src/libfwbuilder/src/fwbuilder/FWObjectDatabase_search.cpp +++ b/src/libfwbuilder/src/fwbuilder/FWObjectDatabase_search.cpp @@ -222,6 +222,17 @@ bool FWObjectDatabase::_findWhereObjectIsUsed(FWObject *o, } } + NATRule *nat_rule = NATRule::cast(p); + if (nat_rule && nat_rule->getAction() == NATRule::Branch) + { + FWObject *ruleset = nat_rule->getBranch(); + if (o==ruleset) + { + resset.insert(p); + res = true; + } + } + if (Firewall::isA(o) && Cluster::isA(p)) { if (Cluster::cast(p)->hasMember(Firewall::cast(o))) diff --git a/src/libfwbuilder/src/fwbuilder/Rule.cpp b/src/libfwbuilder/src/fwbuilder/Rule.cpp index 79d0d67..478d37c 100644 --- a/src/libfwbuilder/src/fwbuilder/Rule.cpp +++ b/src/libfwbuilder/src/fwbuilder/Rule.cpp @@ -597,6 +597,37 @@ void NATRule::init(FWObjectDatabase *root) } } +/** + * Add reference to given object. In case of NATRule this only + * makes sense in terms of adding reference to this object as an + * argument for action Branch. + */ +void NATRule::addRef(FWObject *obj) +{ + if (RuleSet::cast(obj)) + { + setBranch(RuleSet::cast(obj)); + } +} + +/** + * Removes reference to given object among children of 'this'. In case + * of NATRule we should also clear reference to it if action is + * Branch. Caveat: clear reference to it even if action is not branch + * right now but was in the past and reference got stuck in options. + */ +void NATRule::removeRef(FWObject *obj) +{ + if (RuleSet::cast(obj)) + { + string branch_id = FWObjectDatabase::getStringId(obj->getId()); + string rule_branch_id = getOptionsObject()->getStr("branch_id"); + if (branch_id == rule_branch_id) + getOptionsObject()->setStr("branch_id", ""); + } + FWObject::removeRef(obj); +} + RuleElementOSrc* NATRule::getOSrc() { if (osrc_re) return osrc_re; diff --git a/src/libfwbuilder/src/fwbuilder/Rule.h b/src/libfwbuilder/src/fwbuilder/Rule.h index 5bf2ce1..981419a 100644 --- a/src/libfwbuilder/src/fwbuilder/Rule.h +++ b/src/libfwbuilder/src/fwbuilder/Rule.h @@ -366,6 +366,18 @@ public: virtual bool isEmpty(); + /** + * Removes reference to given object among + * children of 'this'. + */ + virtual void removeRef(FWObject *obj); + + /** + * Add reference to given object to 'this'. In case of a PolicyRule, + * change action and add parameter if @obj is TagService or RuleSet. + */ + virtual void addRef(FWObject *obj); + libfwbuilder::RuleElementOSrc* getOSrc(); libfwbuilder::RuleElementODst* getODst(); libfwbuilder::RuleElementOSrv* getOSrv(); ----------------------------------------------------------------------- Summary of changes: doc/ChangeLog | 5 +++ .../src/fwbuilder/FWObjectDatabase_search.cpp | 11 +++++++ src/libfwbuilder/src/fwbuilder/Rule.cpp | 31 ++++++++++++++++++++ src/libfwbuilder/src/fwbuilder/Rule.h | 12 +++++++ 4 files changed, 59 insertions(+), 0 deletions(-) hooks/post-receive -- Firewall Builder GUI and Policy Compilers Open Source Code |