Skip to content

Commit 731ce99

Browse files
authored
Merge pull request #86 from Botinoc/dev
JuniperSRX: parsing groups tag
2 parents 4daa24d + 1283299 commit 731ce99

File tree

2 files changed

+66
-10
lines changed

2 files changed

+66
-10
lines changed

JuniperMigration/JuniperConverter.cs

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4033,19 +4033,29 @@ private void MatchNATRulesIntoFirewallPolicy()
40334033
{
40344034
continue;
40354035
}
4036-
4037-
var parentLayerRuleZone = (CheckPoint_Zone)cpParentRule.Source[0];
4038-
if (parentLayerRuleZone == null)
4036+
try
40394037
{
4040-
continue;
4041-
}
4038+
var parentLayerRuleZone = (CheckPoint_Zone)cpParentRule.Source[0];
40424039

4043-
// NAT rule source zone(s)/interface(s) should match on firewall rule source zone
4044-
if (!IsFirewallRuleSourceZoneMatchedByNATRule(parentLayerRuleZone.Name, juniperNatCustomData))
4040+
if (parentLayerRuleZone == null)
4041+
{
4042+
continue;
4043+
}
4044+
4045+
// NAT rule source zone(s)/interface(s) should match on firewall rule source zone
4046+
if (!IsFirewallRuleSourceZoneMatchedByNATRule(parentLayerRuleZone.Name, juniperNatCustomData))
4047+
{
4048+
continue;
4049+
}
4050+
} catch (Exception ex)
40454051
{
4046-
continue;
4052+
if (ex.Message == "Unable to cast object of type 'CheckPointObjects.CheckPoint_NetworkGroup' to type 'CheckPointObjects.CheckPoint_Zone'.")
4053+
continue;
4054+
else throw ex;
40474055
}
40484056

4057+
4058+
40494059
// Get into the relevant sub-policy
40504060
foreach (CheckPoint_Layer subPolicy in cpPackage.SubPolicies)
40514061
{
@@ -4709,8 +4719,15 @@ private CheckPointObject GetCheckPointObjectOrCreateDummy(string cpObjectName, s
47094719

47104720
juniperObject.ConversionIncidentType = ConversionIncidentType.ManualActionRequired;
47114721

4712-
errorDescription = string.Format("{0} Using dummy object: {1}.", errorDescription, cpDummyObject.Name);
4713-
_conversionIncidents.Add(new ConversionIncident(juniperObject.LineNumber, errorTitle, errorDescription, juniperObject.ConversionIncidentType));
4722+
if (cpObjectName.Contains("<") && cpObjectName.Contains(">") && cpObjectName.Contains("*"))
4723+
{
4724+
errorDescription = string.Format("wildcard expression is not supported");
4725+
_conversionIncidents.Add(new ConversionIncident(juniperObject.LineNumber, "Error creating a parent layer rule", errorDescription, juniperObject.ConversionIncidentType));
4726+
} else
4727+
{
4728+
errorDescription = string.Format("{0} Using dummy object: {1}.", errorDescription, cpDummyObject.Name);
4729+
_conversionIncidents.Add(new ConversionIncident(juniperObject.LineNumber, errorTitle, errorDescription, juniperObject.ConversionIncidentType));
4730+
}
47144731
}
47154732

47164733
return cpDummyObject;

JuniperMigration/JuniperParser.cs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public override void Parse(string filename)
5959
ParseApplicationsAndGroups(configNode);
6060
parseSchedulers(configNode);
6161
ParsePolicy(configNode);
62+
ParsePolicyFromGroups(configNode);
6263
ParseNat(configNode);
6364
AttachRoutesToInterfacesTopology();
6465
}
@@ -448,6 +449,44 @@ private void ParsePolicy(XElement configNode)
448449
_juniperGlobalPolicyRules.Add(juniperDefaultActionRule);
449450
}
450451

452+
private void ParsePolicyFromGroups(XElement configNode)
453+
{
454+
var zonePolicies = configNode.XPathSelectElements("./groups/security/policies/policy");
455+
foreach (var zonePolicy in zonePolicies)
456+
{
457+
JuniperObject juniperZonePolicy = new Juniper_ZonePolicy();
458+
juniperZonePolicy.Parse(zonePolicy, null);
459+
_juniperObjects.Add(juniperZonePolicy);
460+
461+
var policies = zonePolicy.Elements("policy");
462+
foreach (var policy in policies)
463+
{
464+
var juniperRule = new Juniper_PolicyRule();
465+
juniperRule.Parse(policy, null);
466+
((Juniper_ZonePolicy)juniperZonePolicy).Rules.Add(juniperRule);
467+
}
468+
}
469+
470+
var globalPolicies = configNode.XPathSelectElements("./groups/security/policies/global/policy");
471+
foreach (var globalPolicy in globalPolicies)
472+
{
473+
var juniperGlobalRule = new Juniper_GlobalPolicyRule();
474+
juniperGlobalRule.Parse(globalPolicy, null);
475+
_juniperGlobalPolicyRules.Add(juniperGlobalRule);
476+
}
477+
478+
var defaultAction = Juniper_PolicyRule.ActionType.Deny;
479+
var policyDefaultAction = configNode.XPathSelectElement("./groups/security/policies/default-policy");
480+
if (policyDefaultAction != null && policyDefaultAction.Element("permit-all") != null)
481+
{
482+
defaultAction = Juniper_PolicyRule.ActionType.Permit;
483+
}
484+
485+
var juniperDefaultActionRule = new Juniper_GlobalPolicyRule();
486+
juniperDefaultActionRule.GenerateDefaultActionRule(defaultAction);
487+
_juniperGlobalPolicyRules.Add(juniperDefaultActionRule);
488+
}
489+
451490
private void ParseNat(XElement configNode)
452491
{
453492
var nat = configNode.XPathSelectElement("./security/nat");

0 commit comments

Comments
 (0)