Repository: cloudstack
Updated Branches:
  refs/heads/4.4-forward 8ffb2c114 -> eb28f77d1


CLOUDSTACK-6581: IAM - Shared Network -Root Admin user is allowed to deploy VM 
in a shared network that is scoped for a specific domain/account.

Changes:
- Strict access check in NetworkModel is needed as CS 4.3
- We cannot go through accountMgr since accountMgr is relaxed for rootAdmin


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

Branch: refs/heads/4.4-forward
Commit: eb28f77d1a07e902577a38194196b463ba5aef42
Parents: 8ffb2c1
Author: Prachi Damle <pra...@cloud.com>
Authored: Tue May 6 15:58:05 2014 -0700
Committer: Prachi Damle <pra...@cloud.com>
Committed: Tue May 6 17:21:05 2014 -0700

----------------------------------------------------------------------
 .../spring-server-core-managers-context.xml     |  1 +
 .../src/com/cloud/network/NetworkModelImpl.java | 21 +++++++++++++++++++-
 2 files changed, 21 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/eb28f77d/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
----------------------------------------------------------------------
diff --git 
a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
 
b/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
index fc1c7e2..09abcb7 100644
--- 
a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
+++ 
b/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
@@ -74,6 +74,7 @@
 
     <bean id="networkModelImpl" class="com.cloud.network.NetworkModelImpl">
         <property name="networkElements" 
value="#{networkElementsRegistry.registered}" />
+        <property name="securityCheckers" 
value="#{securityCheckersRegistry.registered}" />
     </bean>
 
     <bean id="configurationServerImpl" 
class="com.cloud.server.ConfigurationServerImpl" />

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/eb28f77d/server/src/com/cloud/network/NetworkModelImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkModelImpl.java 
b/server/src/com/cloud/network/NetworkModelImpl.java
index 4267967..f84eccd 100755
--- a/server/src/com/cloud/network/NetworkModelImpl.java
+++ b/server/src/com/cloud/network/NetworkModelImpl.java
@@ -34,6 +34,7 @@ import javax.naming.ConfigurationException;
 
 import org.apache.log4j.Logger;
 
+import org.apache.cloudstack.acl.SecurityChecker;
 import org.apache.cloudstack.acl.ControlledEntity.ACLType;
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
@@ -219,6 +220,16 @@ public class NetworkModelImpl extends ManagerBase 
implements NetworkModel {
     static HashMap<Service, List<Provider>> s_serviceToImplementedProvidersMap 
= new HashMap<Service, List<Provider>>();
     static HashMap<String, String> s_providerToNetworkElementMap = new 
HashMap<String, String>();
 
+    List<SecurityChecker> _securityCheckers;
+
+    public List<SecurityChecker> getSecurityCheckers() {
+        return _securityCheckers;
+    }
+
+    public void setSecurityCheckers(List<SecurityChecker> securityCheckers) {
+        _securityCheckers = securityCheckers;
+    }
+
     /**
      *
      */
@@ -1586,7 +1597,15 @@ public class NetworkModelImpl extends ManagerBase 
implements NetworkModel {
                         + ", permission denied");
             }
         } else {
-            _accountMgr.checkAccess(owner, accessType, network);
+            // Go through IAM (SecurityCheckers)
+            for (SecurityChecker checker : _securityCheckers) {
+                if (checker.checkAccess(owner, accessType, null, network)) {
+                    if (s_logger.isDebugEnabled()) {
+                        s_logger.debug("Access to " + network + " granted to " 
+ owner + " by " + checker.getName());
+                    }
+                    break;
+                }
+            }
         }
     }
 

Reply via email to