Repository: cloudstack
Updated Branches:
  refs/heads/master 99e4da15d -> f89100ed7


CLOUDSTACK-6793 : Added fix

Signed-off-by: Abhinandan Prateek <aprat...@apache.org>


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

Branch: refs/heads/master
Commit: f89100ed72bd8e854dc01af244907fe02e7525a3
Parents: 99e4da1
Author: Santhosh Edukulla <santhosh.eduku...@gmail.com>
Authored: Thu Jun 12 22:34:17 2014 +0530
Committer: Abhinandan Prateek <aprat...@apache.org>
Committed: Mon Jun 16 17:11:14 2014 +0530

----------------------------------------------------------------------
 .../schema/src/com/cloud/user/dao/AccountDao.java   |  9 +++++++++
 .../src/com/cloud/user/dao/AccountDaoImpl.java      | 16 ++++++++++++++++
 .../com/cloud/tags/TaggedResourceManagerImpl.java   | 16 ++++++++++++----
 3 files changed, 37 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f89100ed/engine/schema/src/com/cloud/user/dao/AccountDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/user/dao/AccountDao.java 
b/engine/schema/src/com/cloud/user/dao/AccountDao.java
index 2f737cd..4c7ce8e 100644
--- a/engine/schema/src/com/cloud/user/dao/AccountDao.java
+++ b/engine/schema/src/com/cloud/user/dao/AccountDao.java
@@ -63,4 +63,13 @@ public interface AccountDao extends GenericDao<AccountVO, 
Long> {
     Account findActiveNonProjectAccount(String accountName, Long domainId);
 
     List<Long> getAccountIdsForDomains(List<Long> ids);
+
+    /*
+    @Desc:   Retrieves the DomainId for a given Account Id
+    @Input:  id : Id of the Account
+    @Output: DomainId matching for the given Account Id. Returns -1
+             in case of no match;
+     */
+    long getDomainIdForGivenAccountId(long id);
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f89100ed/engine/schema/src/com/cloud/user/dao/AccountDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/user/dao/AccountDaoImpl.java 
b/engine/schema/src/com/cloud/user/dao/AccountDaoImpl.java
index 4bc23ed..99bd7ee 100755
--- a/engine/schema/src/com/cloud/user/dao/AccountDaoImpl.java
+++ b/engine/schema/src/com/cloud/user/dao/AccountDaoImpl.java
@@ -278,4 +278,20 @@ public class AccountDaoImpl extends 
GenericDaoBase<AccountVO, Long> implements A
         return customSearch(sc, null);
     }
 
+    @Override
+    public long getDomainIdForGivenAccountId(long id) {
+        long domain_id = -1;
+        try {
+            AccountVO account_vo = findById(id);
+            domain_id = account_vo.getDomainId();
+        }
+        catch (Exception e) {
+            s_logger.warn("getDomainIdForGivenAccountId: Exception :" + 
e.getMessage());
+        }
+        finally {
+            return domain_id;
+        }
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f89100ed/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java 
b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
index c4c003e..e6f317c 100644
--- a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
+++ b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
@@ -25,6 +25,8 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
+import com.cloud.user.dao.AccountDao;
+import com.cloud.utils.exception.CloudRuntimeException;
 import org.apache.cloudstack.api.Identity;
 import org.apache.cloudstack.api.InternalIdentity;
 import org.apache.cloudstack.context.CallContext;
@@ -33,7 +35,6 @@ import org.apache.log4j.Logger;
 
 import com.cloud.api.query.dao.ResourceTagJoinDao;
 import com.cloud.dc.DataCenterVO;
-import com.cloud.domain.Domain;
 import com.cloud.domain.PartOf;
 import com.cloud.event.ActionEvent;
 import com.cloud.event.EventTypes;
@@ -136,6 +137,8 @@ public class TaggedResourceManagerImpl extends ManagerBase 
implements TaggedReso
     ResourceTagJoinDao _resourceTagJoinDao;
     @Inject
     DomainManager _domainMgr;
+    @Inject
+    AccountDao _accountDao;
 
 
     @Override
@@ -185,10 +188,10 @@ public class TaggedResourceManagerImpl extends 
ManagerBase implements TaggedReso
             accountId = Account.ACCOUNT_ID_SYSTEM;
         }
 
-        if (domainId == null) {
-            domainId = Domain.ROOT_DOMAIN;
+        if ( ((accountId != null) && (domainId == -1)) || (domainId == null) )
+        {
+            domainId = _accountDao.getDomainIdForGivenAccountId(accountId);
         }
-
         return new Pair<Long, Long>(accountId, domainId);
     }
 
@@ -226,6 +229,11 @@ public class TaggedResourceManagerImpl extends ManagerBase 
implements TaggedReso
                         Pair<Long, Long> accountDomainPair = 
getAccountDomain(id, resourceType);
                         Long domainId = accountDomainPair.second();
                         Long accountId = accountDomainPair.first();
+
+                        if ((domainId != null) && (domainId == -1))
+                        {
+                           throw new CloudRuntimeException("Invalid DomainId : 
-1");
+                        }
                         if (accountId != null) {
                             _accountMgr.checkAccess(caller, null, false, 
_accountMgr.getAccount(accountId));
                         } else if (domainId != null && 
!_accountMgr.isNormalUser(caller.getId())) {

Reply via email to