You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by al...@apache.org on 2012/07/10 03:28:49 UTC

[2/6] git commit: VPC: CS-15481: don't allow creating networkACLs for overlapping cidrs/ports

VPC: CS-15481: don't allow creating networkACLs for overlapping cidrs/ports


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/525ba472
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/525ba472
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/525ba472

Branch: refs/heads/vpc
Commit: 525ba472e8ce8738974d6944952b71dcaff92c42
Parents: 55db112
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Mon Jul 9 16:20:23 2012 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Mon Jul 9 18:23:58 2012 -0700

----------------------------------------------------------------------
 .../cloud/network/vpc/NetworkACLManagerImpl.java   |   20 +++++++++------
 1 files changed, 12 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/525ba472/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
index b8a6292..aec50b0 100644
--- a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
@@ -221,7 +221,7 @@ public class NetworkACLManagerImpl implements Manager,NetworkACLManager{
                 continue; // Skips my own rule.
             }
 
-            // if rules cidrs are different, we can skip port ranges verification
+            // if one cidr overlaps another, do port veirficatino
             boolean duplicatedCidrs = false;
             // Verify that the rules have different cidrs
             List<String> ruleCidrList = rule.getSourceCidrList();
@@ -230,15 +230,19 @@ public class NetworkACLManagerImpl implements Manager,NetworkACLManager{
             if (ruleCidrList == null || newRuleCidrList == null) {
                 continue;
             }
-
-            Collection<String> similar = new HashSet<String>(ruleCidrList);
-            similar.retainAll(newRuleCidrList);
-
-            if (similar.size() > 0) {
-                duplicatedCidrs = true;
+            
+            for (String newCidr : newRuleCidrList) {
+                for (String ruleCidr : ruleCidrList) {
+                    if (NetUtils.isNetworksOverlap(newCidr, ruleCidr)) {
+                        duplicatedCidrs = true;
+                        break;
+                    }
+                    if (duplicatedCidrs) {
+                        break;
+                    }
+                }
             }
             
-
             if (newRule.getProtocol().equalsIgnoreCase(NetUtils.ICMP_PROTO) && newRule.getProtocol().equalsIgnoreCase(rule.getProtocol())) {
                 if (newRule.getIcmpCode().longValue() == rule.getIcmpCode().longValue() 
                         && newRule.getIcmpType().longValue() == rule.getIcmpType().longValue()