mirror of
https://github.com/fwbuilder/fwbuilder
synced 2026-09-17 10:29:21 +02:00
Human-readable names for actions come from platform resource files. This way, we can have aliases for actions depending on the platform. Refs #84
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
2009-10-20 vadim <vadim@vk.crocodile.org>
|
||||
|
||||
* platforms.cpp (getActionNameForPlatform): Human-readable names
|
||||
for Policy and NAT rule actions come from the platform .xml
|
||||
resource file (attribute "description").
|
||||
|
||||
* Support for branch rules in NAT rule sets. Currently only
|
||||
supported on iptables and PF. NAT rules get column "Action" for
|
||||
these platforms, with possible acctions "Translate" and "Branch".
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "ActionsDialog.h"
|
||||
#include "FWWindow.h"
|
||||
#include "FWObjectDropArea.h"
|
||||
#include "DialogFactory.h"
|
||||
|
||||
#include "fwbuilder/Library.h"
|
||||
#include "fwbuilder/Interface.h"
|
||||
@@ -174,7 +175,6 @@ void ActionsDialog::applyChanges()
|
||||
data.saveAll();
|
||||
|
||||
PolicyRule *policy_rule = PolicyRule::cast(rule);
|
||||
NATRule *nat_rule = NATRule::cast(rule);
|
||||
|
||||
FWOptions *ropt = rule->getOptionsObject();
|
||||
|
||||
@@ -248,7 +248,6 @@ void ActionsDialog::setRule(Rule *r)
|
||||
rule = r;
|
||||
|
||||
PolicyRule *policy_rule = PolicyRule::cast(r);
|
||||
NATRule *nat_rule = NATRule::cast(r);
|
||||
|
||||
FWObject *o = r;
|
||||
while (o!=NULL && Firewall::cast(o)==NULL) o = o->getParent();
|
||||
@@ -261,13 +260,7 @@ void ActionsDialog::setRule(Rule *r)
|
||||
|
||||
platform=f->getStr("platform");
|
||||
|
||||
string act;
|
||||
if (policy_rule) act = policy_rule->getActionAsString();
|
||||
if (nat_rule)
|
||||
{
|
||||
act = nat_rule->getActionAsString();
|
||||
if (act == "Branch") act = "NATBranch";
|
||||
}
|
||||
string act = getRuleAction(r).toStdString();
|
||||
|
||||
help_name = string(platform + "_" + act).c_str();
|
||||
|
||||
@@ -280,7 +273,7 @@ void ActionsDialog::setRule(Rule *r)
|
||||
fillInterfaces(m_dialog->ipf_route_opt_if);
|
||||
fillInterfaces(m_dialog->pf_route_opt_if);
|
||||
|
||||
editor = Resources::getActionEditor(platform, act);
|
||||
editor = DialogFactory::getActionDialogPageName(f, r);
|
||||
|
||||
branchNameInput = NULL;
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "../../config.h"
|
||||
#include "global.h"
|
||||
#include "utils.h"
|
||||
#include "platforms.h"
|
||||
|
||||
#include "DialogFactory.h"
|
||||
|
||||
@@ -350,4 +351,17 @@ QWidget *DialogFactory::createClusterGroupOptionsDialog(QWidget *parent,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
string DialogFactory::getActionDialogPageName(Firewall *fw, Rule *rule)
|
||||
{
|
||||
string platform = fw->getStr("platform");
|
||||
string act = getRuleAction(rule).toStdString();
|
||||
string editor_page;
|
||||
try
|
||||
{
|
||||
editor_page = Resources::getTargetCapabilityStr(
|
||||
platform, "actions/" + act + "/editor_page");
|
||||
} catch (FWException &ex) { }
|
||||
return editor_page;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
namespace libfwbuilder {
|
||||
class FWObject;
|
||||
class FWException;
|
||||
class Firewall;
|
||||
class Rule;
|
||||
};
|
||||
|
||||
|
||||
@@ -51,6 +53,12 @@ class DialogFactory {
|
||||
throw(libfwbuilder::FWException);
|
||||
static QWidget *createClusterGroupOptionsDialog(QWidget *parent, libfwbuilder::FWObject *o)
|
||||
throw(libfwbuilder::FWException);
|
||||
|
||||
static std::string getActionDialogPageName(libfwbuilder::Firewall *fw,
|
||||
libfwbuilder::Rule *rule);
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
|
||||
#include "FWObjectPropertiesFactory.h"
|
||||
#include "platforms.h"
|
||||
#include "DialogFactory.h"
|
||||
|
||||
#include "fwbuilder/AddressRange.h"
|
||||
#include "fwbuilder/AddressTable.h"
|
||||
@@ -735,13 +736,13 @@ QString FWObjectPropertiesFactory::getObjectPropertiesDetailed(FWObject *obj,
|
||||
* Do not translate literals 'pipe', 'queue', 'divert' below, these refer
|
||||
* to actual ipfw parameters and should not be localized.
|
||||
*/
|
||||
QString FWObjectPropertiesFactory::getRuleActionProperties(PolicyRule *rule)
|
||||
QString FWObjectPropertiesFactory::getRuleActionProperties(Rule *rule)
|
||||
{
|
||||
QString par = "";
|
||||
|
||||
if (rule!=NULL)
|
||||
{
|
||||
string act = rule->getActionAsString();
|
||||
QString act = getRuleAction(rule);
|
||||
|
||||
FWObject *o = rule;
|
||||
while (o!=NULL && Firewall::cast(o)==NULL) o=o->getParent();
|
||||
@@ -751,22 +752,24 @@ QString FWObjectPropertiesFactory::getRuleActionProperties(PolicyRule *rule)
|
||||
string platform=f->getStr("platform");
|
||||
|
||||
FWOptions *ropt = rule->getOptionsObject();
|
||||
string editor=Resources::getActionEditor(platform,act);
|
||||
string editor = DialogFactory::getActionDialogPageName(f, rule);
|
||||
|
||||
if (editor!="None")
|
||||
if (editor == "None") return "";
|
||||
|
||||
if (PolicyRule::isA(rule))
|
||||
{
|
||||
switch (rule->getAction())
|
||||
switch (PolicyRule::cast(rule)->getAction())
|
||||
{
|
||||
case PolicyRule::Reject:
|
||||
par = ropt->getStr("action_on_reject").c_str();
|
||||
break;
|
||||
case PolicyRule::Tag:
|
||||
{
|
||||
FWObject *tag_object = rule->getTagObject();
|
||||
FWObject *tag_object = PolicyRule::cast(rule)->getTagObject();
|
||||
if (tag_object)
|
||||
par = tag_object->getName().c_str();
|
||||
else
|
||||
par = rule->getTagValue().c_str();
|
||||
par = PolicyRule::cast(rule)->getTagValue().c_str();
|
||||
break;
|
||||
}
|
||||
case PolicyRule::Accounting :
|
||||
@@ -847,25 +850,38 @@ QString FWObjectPropertiesFactory::getRuleActionProperties(PolicyRule *rule)
|
||||
default : {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (NATRule::isA(rule))
|
||||
{
|
||||
switch (NATRule::cast(rule)->getAction())
|
||||
{
|
||||
case NATRule::Translate:
|
||||
break;
|
||||
|
||||
case NATRule::Branch:
|
||||
FWObject *branch_ruleset = rule->getBranch();
|
||||
if (branch_ruleset)
|
||||
par = branch_ruleset->getName().c_str();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return par;
|
||||
}
|
||||
|
||||
QString FWObjectPropertiesFactory::getRuleActionPropertiesRich(PolicyRule *rule)
|
||||
QString FWObjectPropertiesFactory::getRuleActionPropertiesRich(Rule *rule)
|
||||
{
|
||||
FWObject *p=rule;
|
||||
while (p!=NULL && !Firewall::cast(p)) p=p->getParent();
|
||||
assert(p!=NULL);
|
||||
string platform=p->getStr("platform");
|
||||
QString act = getActionNameForPlatform(rule->getAction(),platform.c_str());
|
||||
|
||||
QString act = getActionNameForPlatform(Firewall::cast(p), rule);
|
||||
QString par = getRuleActionProperties(rule);
|
||||
QString res = QObject::tr("<b>Action :</b> ")+act+"<br>\n";
|
||||
QString res = QObject::tr("<b>Action :</b> %1<br>").arg(act);
|
||||
if (!par.isEmpty())
|
||||
{
|
||||
res+=QObject::tr("<b>Parameter:</b> ")+par;
|
||||
res += QObject::tr("<b>Parameter:</b> ")+par;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -51,8 +51,8 @@ class FWObjectPropertiesFactory {
|
||||
bool tooltip=false,
|
||||
bool accentName=true,
|
||||
bool richText=true);
|
||||
static QString getRuleActionProperties(libfwbuilder::PolicyRule *rule);
|
||||
static QString getRuleActionPropertiesRich(libfwbuilder::PolicyRule *rule);
|
||||
static QString getRuleActionProperties(libfwbuilder::Rule *rule);
|
||||
static QString getRuleActionPropertiesRich(libfwbuilder::Rule *rule);
|
||||
static QString getPolicyRuleOptions(libfwbuilder::Rule *rule);
|
||||
static QString getNATRuleOptions(libfwbuilder::Rule *rule);
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#include "FindObjectWidget.h"
|
||||
#include "FindWhereUsedWidget.h"
|
||||
#include "FWBTree.h"
|
||||
#include "platforms.h"
|
||||
|
||||
#include "fwbuilder/Firewall.h"
|
||||
#include "fwbuilder/RuleSet.h"
|
||||
@@ -185,10 +186,9 @@ void FWWindow::buildEditorTitleAndIcon(libfwbuilder::FWObject *obj,
|
||||
{
|
||||
FWObject *obj_for_icon = obj;
|
||||
if (ruleset) obj_for_icon = ruleset;
|
||||
if (rule && PolicyRule::isA(rule) && t == ObjectEditor::optAction)
|
||||
if (rule && t == ObjectEditor::optAction)
|
||||
{
|
||||
QString icn = ":/Icons/" ;
|
||||
icn += PolicyRule::cast(rule)->getActionAsString().c_str();
|
||||
QString icn = ":/Icons/" + getRuleAction(rule);
|
||||
LoadPixmap(icn, *pm); // in utils.cpp
|
||||
} else
|
||||
FWBTree().setObjectIcon(obj_for_icon, pm, false);
|
||||
|
||||
@@ -49,6 +49,8 @@
|
||||
<file alias="Icons/Both-tree" >Icons/both_16.png</file>
|
||||
<file alias="Icons/Branch-tree" >Icons/branch_16.png</file>
|
||||
<file alias="Icons/Branch" >Icons/branch_25.png</file>
|
||||
<file alias="Icons/NATBranch-tree" >Icons/branch_16.png</file>
|
||||
<file alias="Icons/NATBranch" >Icons/branch_25.png</file>
|
||||
<file>Icons/cancel.png</file>
|
||||
<file alias="Icons/Classify-tree" >Icons/classify_16.png</file>
|
||||
<file alias="Icons/Classify" >Icons/classify_25.png</file>
|
||||
|
||||
@@ -1190,16 +1190,6 @@ QStringList PolicyModel::getRuleOptions(Rule* r) const
|
||||
return res;
|
||||
}
|
||||
|
||||
QString PolicyModel::getRuleAction(Rule* r) const
|
||||
{
|
||||
PolicyRule *policy_rule = PolicyRule::cast( r );
|
||||
NATRule *nat_rule = NATRule::cast( r );
|
||||
QString res;
|
||||
if (policy_rule) res = policy_rule->getActionAsString().c_str();
|
||||
if (nat_rule) res = nat_rule->getActionAsString().c_str();
|
||||
return res;
|
||||
}
|
||||
|
||||
void PolicyModel::initRule(Rule *new_rule, Rule *old_rule)
|
||||
{
|
||||
//if (fwbdebug) qDebug() << "PolicyModel::initRule";
|
||||
@@ -1296,13 +1286,6 @@ QStringList NatModel::getRuleOptions(Rule* r) const
|
||||
return res;
|
||||
}
|
||||
|
||||
QString NatModel::getRuleAction(Rule* r) const
|
||||
{
|
||||
NATRule *natRule = NATRule::cast( r );
|
||||
QString res = natRule->getActionAsString().c_str();
|
||||
return res;
|
||||
}
|
||||
|
||||
void NatModel::initRule(Rule *new_rule, Rule *old_rule)
|
||||
{
|
||||
//if (fwbdebug) qDebug() << "NatModel::initRule";
|
||||
|
||||
@@ -195,7 +195,6 @@ private:
|
||||
QVariant getRuleDataForDisplayRole(const QModelIndex &index, RuleNode* node) const;
|
||||
QString getRuleDirection(libfwbuilder::Rule* r) const;
|
||||
QStringList getRuleOptions(libfwbuilder::Rule* r) const;
|
||||
QString getRuleAction(libfwbuilder::Rule* r) const;
|
||||
void configure();
|
||||
};
|
||||
|
||||
@@ -216,7 +215,6 @@ private:
|
||||
|
||||
QVariant getRuleDataForDisplayRole(const QModelIndex &index, RuleNode* node) const;
|
||||
QStringList getRuleOptions(libfwbuilder::Rule* r) const;
|
||||
QString getRuleAction(libfwbuilder::Rule* r) const;
|
||||
void configure();
|
||||
};
|
||||
|
||||
|
||||
+26
-26
@@ -364,16 +364,16 @@ void RuleSetView::addColumnRelatedMenu(QMenu *menu, const QModelIndex &index,
|
||||
{
|
||||
if (Resources::isTargetActionSupported(platform,"Translate"))
|
||||
{
|
||||
action_name = getNatActionNameForPlatform(NATRule::Translate,
|
||||
platform.c_str());
|
||||
action_name = getActionNameForPlatform(
|
||||
f, NATRule::getActionAsString(NATRule::Translate));
|
||||
menu->addAction( QIcon(LoadPixmap(":/Icons/Continue")),
|
||||
action_name,
|
||||
this, SLOT( changeActionToTranslate() ));
|
||||
}
|
||||
if (Resources::isTargetActionSupported(platform,"Branch"))
|
||||
{
|
||||
action_name = getNatActionNameForPlatform(NATRule::Branch,
|
||||
platform.c_str());
|
||||
action_name = getActionNameForPlatform(
|
||||
f, NATRule::getActionAsString(NATRule::Branch));
|
||||
menu->addAction( QIcon(LoadPixmap(":/Icons/Branch")),
|
||||
action_name,
|
||||
this, SLOT( changeActionToNATBranch() ));
|
||||
@@ -383,88 +383,88 @@ void RuleSetView::addColumnRelatedMenu(QMenu *menu, const QModelIndex &index,
|
||||
{
|
||||
if (Resources::isTargetActionSupported(platform,"Accept"))
|
||||
{
|
||||
action_name = getActionNameForPlatform(PolicyRule::Accept,
|
||||
platform.c_str());
|
||||
action_name = getActionNameForPlatform(
|
||||
f, PolicyRule::getActionAsString(PolicyRule::Accept));
|
||||
menu->addAction( QIcon(LoadPixmap(":/Icons/Accept")),
|
||||
action_name,
|
||||
this, SLOT( changeActionToAccept() ));
|
||||
}
|
||||
if (Resources::isTargetActionSupported(platform,"Deny"))
|
||||
{
|
||||
action_name = getActionNameForPlatform(PolicyRule::Deny,
|
||||
platform.c_str());
|
||||
action_name = getActionNameForPlatform(
|
||||
f, PolicyRule::getActionAsString(PolicyRule::Deny));
|
||||
menu->addAction( QIcon(LoadPixmap(":/Icons/Deny")),
|
||||
action_name,
|
||||
this, SLOT( changeActionToDeny() ));
|
||||
}
|
||||
if (Resources::isTargetActionSupported(platform,"Reject"))
|
||||
{
|
||||
action_name = getActionNameForPlatform(PolicyRule::Reject,
|
||||
platform.c_str());
|
||||
action_name = getActionNameForPlatform(
|
||||
f, PolicyRule::getActionAsString(PolicyRule::Reject));
|
||||
menu->addAction( QIcon(LoadPixmap(":/Icons/Reject")),
|
||||
action_name,
|
||||
this, SLOT( changeActionToReject() ));
|
||||
}
|
||||
if (Resources::isTargetActionSupported(platform,"Accounting"))
|
||||
{
|
||||
action_name = getActionNameForPlatform(PolicyRule::Accounting,
|
||||
platform.c_str());
|
||||
action_name = getActionNameForPlatform(
|
||||
f, PolicyRule::getActionAsString(PolicyRule::Accounting));
|
||||
menu->addAction( QIcon(LoadPixmap(":/Icons/Accounting")),
|
||||
action_name,
|
||||
this, SLOT( changeActionToAccounting() ));
|
||||
}
|
||||
if (Resources::isTargetActionSupported(platform,"Pipe"))
|
||||
{
|
||||
action_name = getActionNameForPlatform(PolicyRule::Pipe,
|
||||
platform.c_str());
|
||||
action_name = getActionNameForPlatform(
|
||||
f, PolicyRule::getActionAsString(PolicyRule::Pipe));
|
||||
menu->addAction( QIcon(LoadPixmap(":/Icons/Pipe")),
|
||||
action_name,
|
||||
this, SLOT( changeActionToPipe() ));
|
||||
}
|
||||
if (Resources::isTargetActionSupported(platform,"Tag"))
|
||||
{
|
||||
action_name = getActionNameForPlatform(PolicyRule::Tag,
|
||||
platform.c_str());
|
||||
action_name = getActionNameForPlatform(
|
||||
f, PolicyRule::getActionAsString(PolicyRule::Tag));
|
||||
menu->addAction( QIcon(LoadPixmap(":/Icons/Tag")),
|
||||
action_name,
|
||||
this, SLOT( changeActionToTag() ));
|
||||
}
|
||||
if (Resources::isTargetActionSupported(platform,"Classify"))
|
||||
{
|
||||
action_name = getActionNameForPlatform(PolicyRule::Classify,
|
||||
platform.c_str());
|
||||
action_name = getActionNameForPlatform(
|
||||
f, PolicyRule::getActionAsString(PolicyRule::Classify));
|
||||
menu->addAction( QIcon(LoadPixmap(":/Icons/Classify")),
|
||||
action_name,
|
||||
this, SLOT( changeActionToClassify() ));
|
||||
}
|
||||
if (Resources::isTargetActionSupported(platform,"Custom"))
|
||||
{
|
||||
action_name = getActionNameForPlatform(PolicyRule::Custom,
|
||||
platform.c_str());
|
||||
action_name = getActionNameForPlatform(
|
||||
f, PolicyRule::getActionAsString(PolicyRule::Custom));
|
||||
menu->addAction( QIcon(LoadPixmap(":/Icons/Custom")),
|
||||
action_name,
|
||||
this, SLOT( changeActionToCustom() ));
|
||||
}
|
||||
if (Resources::isTargetActionSupported(platform,"Branch"))
|
||||
{
|
||||
action_name = getActionNameForPlatform(PolicyRule::Branch,
|
||||
platform.c_str());
|
||||
action_name = getActionNameForPlatform(
|
||||
f, PolicyRule::getActionAsString(PolicyRule::Branch));
|
||||
menu->addAction( QIcon(LoadPixmap(":/Icons/Branch")),
|
||||
action_name,
|
||||
this, SLOT( changeActionToBranch() ));
|
||||
}
|
||||
if (Resources::isTargetActionSupported(platform,"Route"))
|
||||
{
|
||||
action_name = getActionNameForPlatform(PolicyRule::Route,
|
||||
platform.c_str());
|
||||
action_name = getActionNameForPlatform(
|
||||
f, PolicyRule::getActionAsString(PolicyRule::Route));
|
||||
menu->addAction( QIcon(LoadPixmap(":/Icons/Route")),
|
||||
action_name,
|
||||
this, SLOT( changeActionToRoute() ));
|
||||
}
|
||||
if (Resources::isTargetActionSupported(platform,"Continue"))
|
||||
{
|
||||
action_name = getActionNameForPlatform(PolicyRule::Continue,
|
||||
platform.c_str());
|
||||
action_name = getActionNameForPlatform(
|
||||
f, PolicyRule::getActionAsString(PolicyRule::Continue));
|
||||
menu->addAction( QIcon(LoadPixmap(":/Icons/Continue")),
|
||||
action_name,
|
||||
this, SLOT( changeActionToContinue() ));
|
||||
|
||||
+25
-66
@@ -653,6 +653,16 @@ QString getScreenName(QString s, const QStringList &sl)
|
||||
return res;
|
||||
}
|
||||
|
||||
QString getRuleAction(Rule *rule)
|
||||
{
|
||||
PolicyRule *policy_rule = PolicyRule::cast(rule);
|
||||
NATRule *nat_rule = NATRule::cast(rule);
|
||||
string act;
|
||||
if (policy_rule) act = policy_rule->getActionAsString();
|
||||
if (nat_rule) act = nat_rule->getActionAsString();
|
||||
return act.c_str();
|
||||
}
|
||||
|
||||
/*
|
||||
* will remap names of some actions to make it clear what commands or
|
||||
* configuration language keywords they will be translated to for the
|
||||
@@ -663,77 +673,26 @@ QString getScreenName(QString s, const QStringList &sl)
|
||||
* files and are not pulled using Rule::getActionAsString.
|
||||
*/
|
||||
|
||||
QString getActionNameForPlatform(PolicyRule::Action action,
|
||||
const QString &platform)
|
||||
QString getActionNameForPlatform(Firewall *fw, Rule *rule)
|
||||
{
|
||||
QString action_name = "";
|
||||
switch (action)
|
||||
{
|
||||
case PolicyRule::Accept: action_name = QObject::tr("Accept"); break;
|
||||
|
||||
case PolicyRule::Deny: action_name = QObject::tr("Deny"); break;
|
||||
|
||||
case PolicyRule::Reject: action_name = QObject::tr("Reject"); break;
|
||||
|
||||
case PolicyRule::Scrub: action_name = QObject::tr("Scrub"); break;
|
||||
|
||||
case PolicyRule::Return: action_name = QObject::tr("Return"); break;
|
||||
|
||||
case PolicyRule::Skip: action_name = QObject::tr("Skip"); break;
|
||||
|
||||
case PolicyRule::Continue: action_name = QObject::tr("Continue"); break;
|
||||
|
||||
case PolicyRule::Modify: action_name = QObject::tr("Modify"); break;
|
||||
|
||||
case PolicyRule::Classify: action_name = QObject::tr("Classify"); break;
|
||||
|
||||
case PolicyRule::Custom: action_name = QObject::tr("Custom"); break;
|
||||
|
||||
case PolicyRule::Branch:
|
||||
action_name = QObject::tr("Branch");
|
||||
if (platform=="iptables") action_name = QObject::tr("Chain");
|
||||
if (platform=="pf") action_name = QObject::tr("Anchor");
|
||||
break;
|
||||
|
||||
case PolicyRule::Accounting:
|
||||
action_name = QObject::tr("Accounting");
|
||||
if (platform=="ipf" || platform=="ipfw") action_name = QObject::tr("Count");
|
||||
break;
|
||||
|
||||
case PolicyRule::Tag:
|
||||
action_name = QObject::tr("Tag");
|
||||
if (platform=="iptables") action_name = QObject::tr("Mark");
|
||||
break;
|
||||
|
||||
case PolicyRule::Pipe:
|
||||
action_name = QObject::tr("Pipe");
|
||||
if (platform=="iptables") action_name = QObject::tr("Queue");
|
||||
break;
|
||||
case PolicyRule::Route:
|
||||
action_name = QObject::tr("Routing");
|
||||
break;
|
||||
default:
|
||||
;
|
||||
}
|
||||
return action_name;
|
||||
PolicyRule *policy_rule = PolicyRule::cast(rule);
|
||||
NATRule *nat_rule = NATRule::cast(rule);
|
||||
string act;
|
||||
if (policy_rule) act = policy_rule->getActionAsString();
|
||||
if (nat_rule) act = nat_rule->getActionAsString();
|
||||
return getActionNameForPlatform(fw, act);
|
||||
}
|
||||
|
||||
QString getNatActionNameForPlatform(NATRule::NATAction action,
|
||||
const QString &platform)
|
||||
QString getActionNameForPlatform(Firewall *fw, const std::string &action)
|
||||
{
|
||||
Q_UNUSED(platform);
|
||||
QString action_name = "";
|
||||
switch (action)
|
||||
string platform = fw->getStr("platform");
|
||||
string name;
|
||||
try
|
||||
{
|
||||
case NATRule::Translate:
|
||||
action_name = QObject::tr("Translate");
|
||||
break;
|
||||
|
||||
case NATRule::Branch:
|
||||
action_name = QObject::tr("Branch");
|
||||
break;
|
||||
}
|
||||
return action_name;
|
||||
name = Resources::getTargetCapabilityStr(
|
||||
platform, "actions/" + action + "/description");
|
||||
} catch (FWException &ex) { }
|
||||
return name.c_str();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+7
-4
@@ -133,10 +133,13 @@ QStringList getScreenNames(const QStringList &sl);
|
||||
*/
|
||||
QString getScreenName(QString s,const QStringList &sl);
|
||||
|
||||
QString getActionNameForPlatform(libfwbuilder::PolicyRule::Action action,
|
||||
const QString &platform);
|
||||
QString getNatActionNameForPlatform(libfwbuilder::NATRule::NATAction action,
|
||||
const QString &platform);
|
||||
QString getRuleAction(libfwbuilder::Rule *rule);
|
||||
|
||||
QString getActionNameForPlatform(libfwbuilder::Firewall *fw,
|
||||
libfwbuilder::Rule *rule);
|
||||
|
||||
QString getActionNameForPlatform(libfwbuilder::Firewall *fw,
|
||||
const std::string &action);
|
||||
|
||||
bool getStatelessFlagForAction(libfwbuilder::PolicyRule *rule);
|
||||
|
||||
|
||||
+24
-12
@@ -137,51 +137,63 @@ nameif %in %il security%sl
|
||||
<actions>
|
||||
<Accept>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Accept</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Accept>
|
||||
<Deny>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Deny</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Deny>
|
||||
<Reject>
|
||||
<supported>True</supported>
|
||||
<parameter>Reject</parameter>
|
||||
<description>Reject</description>
|
||||
<dialog_page>Reject</dialog_page>
|
||||
</Reject>
|
||||
<Accounting>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Accounting</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Accounting>
|
||||
<Tag>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Tag</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Tag>
|
||||
<Pipe>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Pipe</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Pipe>
|
||||
<Classify>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Classify</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Classify>
|
||||
<Custom>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Custom</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Custom>
|
||||
<Branch>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Branch</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Branch>
|
||||
<Route>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Route</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Route>
|
||||
<Translate>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Translate</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Translate>
|
||||
<NATBranch>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Branch</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</NATBranch>
|
||||
</actions>
|
||||
</capabilities>
|
||||
|
||||
+24
-12
@@ -60,51 +60,63 @@ interface %in
|
||||
<actions>
|
||||
<Accept>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Accept</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Accept>
|
||||
<Deny>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Deny</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Deny>
|
||||
<Reject>
|
||||
<supported>False</supported>
|
||||
<parameter>Reject</parameter>
|
||||
<description>Reject</description>
|
||||
<dialog_page>Reject</dialog_page>
|
||||
</Reject>
|
||||
<Accounting>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Accounting</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Accounting>
|
||||
<Tag>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Tag</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Tag>
|
||||
<Pipe>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Pipe</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Pipe>
|
||||
<Classify>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Classify</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Classify>
|
||||
<Custom>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Custom</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Custom>
|
||||
<Branch>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Branch</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Branch>
|
||||
<Route>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Route</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Route>
|
||||
<Translate>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Translate</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Translate>
|
||||
<NATBranch>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Branch</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</NATBranch>
|
||||
</actions>
|
||||
</capabilities>
|
||||
|
||||
+24
-12
@@ -41,51 +41,63 @@
|
||||
<actions>
|
||||
<Accept>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Accept</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Accept>
|
||||
<Deny>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Deny</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Deny>
|
||||
<Reject>
|
||||
<supported>True</supported>
|
||||
<parameter>Reject</parameter>
|
||||
<description>Reject</description>
|
||||
<dialog_page>Reject</dialog_page>
|
||||
</Reject>
|
||||
<Accounting>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Count</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Accounting>
|
||||
<Tag>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Tag</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Tag>
|
||||
<Pipe>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Pipe</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Pipe>
|
||||
<Classify>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Classify</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Classify>
|
||||
<Custom>
|
||||
<supported>True</supported>
|
||||
<parameter>CustomStr</parameter>
|
||||
<description>Custom</description>
|
||||
<dialog_page>CustomStr</dialog_page>
|
||||
</Custom>
|
||||
<Branch>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Branch</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Branch>
|
||||
<Route>
|
||||
<supported>True</supported>
|
||||
<parameter>RouteIPF</parameter>
|
||||
<description>Route</description>
|
||||
<dialog_page>RouteIPF</dialog_page>
|
||||
</Route>
|
||||
<Translate>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Translate</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Translate>
|
||||
<NATBranch>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Branch</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</NATBranch>
|
||||
</actions>
|
||||
</capabilities>
|
||||
|
||||
+24
-12
@@ -39,51 +39,63 @@
|
||||
<actions>
|
||||
<Accept>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Accept</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Accept>
|
||||
<Deny>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Deny</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Deny>
|
||||
<Reject>
|
||||
<supported>True</supported>
|
||||
<parameter>Reject</parameter>
|
||||
<description>Reject</description>
|
||||
<dialog_page>Reject</dialog_page>
|
||||
</Reject>
|
||||
<Accounting>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Count</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Accounting>
|
||||
<Tag>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Tag</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Tag>
|
||||
<Pipe>
|
||||
<supported>True</supported>
|
||||
<parameter>PipeArgsIPFW</parameter>
|
||||
<description>Pipe</description>
|
||||
<dialog_page>PipeArgsIPFW</dialog_page>
|
||||
</Pipe>
|
||||
<Classify>
|
||||
<supported>True</supported>
|
||||
<parameter>ClassifyArgsIPFW</parameter>
|
||||
<description>Classify</description>
|
||||
<dialog_page>ClassifyArgsIPFW</dialog_page>
|
||||
</Classify>
|
||||
<Custom>
|
||||
<supported>True</supported>
|
||||
<parameter>CustomStr</parameter>
|
||||
<description>Custom</description>
|
||||
<dialog_page>CustomStr</dialog_page>
|
||||
</Custom>
|
||||
<Branch>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Branch</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Branch>
|
||||
<Route>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Route</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Route>
|
||||
<Translate>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Translate</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Translate>
|
||||
<NATBranch>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Branch</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</NATBranch>
|
||||
</actions>
|
||||
</capabilities>
|
||||
|
||||
@@ -50,55 +50,68 @@
|
||||
<actions>
|
||||
<Accept>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Accept</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Accept>
|
||||
<Deny>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Deny</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Deny>
|
||||
<Reject>
|
||||
<supported>True</supported>
|
||||
<parameter>Reject</parameter>
|
||||
<description>Reject</description>
|
||||
<dialog_page>Reject</dialog_page>
|
||||
</Reject>
|
||||
<Accounting>
|
||||
<supported>True</supported>
|
||||
<parameter>AccountingStr</parameter>
|
||||
<description>Accounting</description>
|
||||
<dialog_page>AccountingStr</dialog_page>
|
||||
</Accounting>
|
||||
<Tag>
|
||||
<supported>True</supported>
|
||||
<parameter>TagInt</parameter>
|
||||
<description>Mark</description>
|
||||
<dialog_page>TagInt</dialog_page>
|
||||
</Tag>
|
||||
<Pipe>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Queue</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Pipe>
|
||||
<Classify>
|
||||
<supported>True</supported>
|
||||
<parameter>ClassifyStr</parameter>
|
||||
<description>Classify</description>
|
||||
<dialog_page>ClassifyStr</dialog_page>
|
||||
</Classify>
|
||||
<Custom>
|
||||
<supported>True</supported>
|
||||
<parameter>CustomStr</parameter>
|
||||
<description>Custom</description>
|
||||
<dialog_page>CustomStr</dialog_page>
|
||||
</Custom>
|
||||
<Branch>
|
||||
<supported>True</supported>
|
||||
<parameter>BranchChain</parameter>
|
||||
<description>Chain</description>
|
||||
<dialog_page>BranchChain</dialog_page>
|
||||
</Branch>
|
||||
<Route>
|
||||
<supported>True</supported>
|
||||
<parameter>RouteIPT</parameter>
|
||||
<description>Routing</description>
|
||||
<dialog_page>RouteIPT</dialog_page>
|
||||
</Route>
|
||||
<Continue>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Continue</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Continue>
|
||||
<Translate>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Translate</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Translate>
|
||||
<NATBranch>
|
||||
<supported>True</supported>
|
||||
<parameter>NATBranch</parameter>
|
||||
<description>Branch</description>
|
||||
<dialog_page>NATBranch</dialog_page>
|
||||
</NATBranch>
|
||||
</actions>
|
||||
</capabilities>
|
||||
|
||||
+24
-12
@@ -44,51 +44,63 @@
|
||||
<actions>
|
||||
<Accept>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Accept</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Accept>
|
||||
<Deny>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Deny</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Deny>
|
||||
<Reject>
|
||||
<supported>True</supported>
|
||||
<parameter>Reject</parameter>
|
||||
<description>Reject</description>
|
||||
<dialog_page>Reject</dialog_page>
|
||||
</Reject>
|
||||
<Accounting>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Accounting</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Accounting>
|
||||
<Tag>
|
||||
<supported>True</supported>
|
||||
<parameter>TagStr</parameter>
|
||||
<description>Tag</description>
|
||||
<dialog_page>TagStr</dialog_page>
|
||||
</Tag>
|
||||
<Pipe>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Pipe</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Pipe>
|
||||
<Classify>
|
||||
<supported>True</supported>
|
||||
<parameter>ClassifyStr</parameter>
|
||||
<description>Classify</description>
|
||||
<dialog_page>ClassifyStr</dialog_page>
|
||||
</Classify>
|
||||
<Custom>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Custom</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Custom>
|
||||
<Branch>
|
||||
<supported>True</supported>
|
||||
<parameter>BranchAnchor</parameter>
|
||||
<description>Anchor</description>
|
||||
<dialog_page>BranchAnchor</dialog_page>
|
||||
</Branch>
|
||||
<Route>
|
||||
<supported>True</supported>
|
||||
<parameter>RoutePF</parameter>
|
||||
<description>Route</description>
|
||||
<dialog_page>RoutePF</dialog_page>
|
||||
</Route>
|
||||
<Translate>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Translate</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Translate>
|
||||
<NATBranch>
|
||||
<supported>True</supported>
|
||||
<parameter>NATBranch</parameter>
|
||||
<description>Branch</description>
|
||||
<dialog_page>NATBranch</dialog_page>
|
||||
</NATBranch>
|
||||
</actions>
|
||||
</capabilities>
|
||||
|
||||
+24
-12
@@ -408,51 +408,63 @@ exit
|
||||
<actions>
|
||||
<Accept>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Accept</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Accept>
|
||||
<Deny>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Deny</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Deny>
|
||||
<Reject>
|
||||
<supported>True</supported>
|
||||
<parameter>Reject</parameter>
|
||||
<description>Reject</description>
|
||||
<dialog_page>Reject</dialog_page>
|
||||
</Reject>
|
||||
<Accounting>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Accounting</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Accounting>
|
||||
<Tag>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Tag</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Tag>
|
||||
<Pipe>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Pipe</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Pipe>
|
||||
<Classify>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Classify</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Classify>
|
||||
<Custom>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Custom</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Custom>
|
||||
<Branch>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Branch</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Branch>
|
||||
<Route>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Route</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Route>
|
||||
<Translate>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Translate</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Translate>
|
||||
<NATBranch>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>NATBranch</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</NATBranch>
|
||||
</actions>
|
||||
</capabilities>
|
||||
|
||||
@@ -31,51 +31,63 @@
|
||||
<actions>
|
||||
<Accept>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Accept</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Accept>
|
||||
<Deny>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Deny</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Deny>
|
||||
<Reject>
|
||||
<supported>True</supported>
|
||||
<parameter>Reject</parameter>
|
||||
<description>Reject</description>
|
||||
<dialog_page>Reject</dialog_page>
|
||||
</Reject>
|
||||
<Accounting>
|
||||
<supported>True</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Accounting</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Accounting>
|
||||
<Tag>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Tag</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Tag>
|
||||
<Pipe>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Pipe</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Pipe>
|
||||
<Classify>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Classify</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Classify>
|
||||
<Custom>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Custom</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Custom>
|
||||
<Branch>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Branch</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Branch>
|
||||
<Route>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Route</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Route>
|
||||
<Translate>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Translate</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</Translate>
|
||||
<NATBranch>
|
||||
<supported>False</supported>
|
||||
<parameter>None</parameter>
|
||||
<description>Branch</description>
|
||||
<dialog_page>None</dialog_page>
|
||||
</NATBranch>
|
||||
</actions>
|
||||
</capabilities>
|
||||
|
||||
Reference in New Issue
Block a user