Yair Zaslavsky has uploaded a new change for review.

Change subject: core: SQL exception is thrown when assigning a permissions
......................................................................

core: SQL exception is thrown when assigning a permissions

The SQL exception occurs as the user (or group) is added to the database,
even though it was already added.
This happens as webadmin passes the group and user objects with a NULL id
(the external ID is the one that represents the "real id" - that is the id
in the external directory system).

The solution is to check if such a user (or a group) already exists in DB,
and if not - add it.

Change-Id: Ie518061d081c09a25fe5582899a6105df629ab06
Bug-Url: https://bugzilla.redhat.com/1057147
Signed-off-by: Yair Zaslavsky <yzasl...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddPermissionCommand.java
1 file changed, 19 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/35/23835/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddPermissionCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddPermissionCommand.java
index 9694509..53c5b91 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddPermissionCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddPermissionCommand.java
@@ -3,17 +3,17 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
+import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.PermissionsOperationsParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.businessentities.DbGroup;
 import org.ovirt.engine.core.common.businessentities.DbUser;
-import org.ovirt.engine.core.common.businessentities.RoleType;
-import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.Permissions;
 import org.ovirt.engine.core.common.businessentities.Role;
+import org.ovirt.engine.core.common.businessentities.RoleType;
+import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.utils.transaction.TransactionMethod;
@@ -88,15 +88,25 @@
         // the database yet, this will be the case if they don't have an
         // internal identifier, if this is the case then they need to be
         // added to the database now, before the permission:
-        final DbUser user = parameters.getUser();
-        if (user != null && user.getId() == null) {
+        DbUser user = parameters.getUser();
+        if (user != null) {
             user.setId(Guid.newGuid());
-            getDbUserDAO().save(user);
+            DbUser userFromDb = 
getDbUserDAO().getByExternalId(user.getDomain(), user.getExternalId());
+            if (userFromDb == null) {
+                getDbUserDAO().save(user);
+            } else {
+                user = userFromDb;
+            }
         }
-        final DbGroup group = parameters.getGroup();
-        if (group != null && group.getId() == null) {
+        DbGroup group = parameters.getGroup();
+        if (group != null) {
             group.setId(Guid.newGuid());
-            getAdGroupDAO().save(group);
+            DbGroup groupFromDb = 
getAdGroupDAO().getByExternalId(group.getDomain(), group.getExternalId());
+            if (groupFromDb == null) {
+                getAdGroupDAO().save(group);
+            } else {
+                group = groupFromDb;
+            }
         }
 
         // The identifier of the owner of the permission can come from the 
parameters directly or from the user/group


-- 
To view, visit http://gerrit.ovirt.org/23835
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie518061d081c09a25fe5582899a6105df629ab06
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.4
Gerrit-Owner: Yair Zaslavsky <yzasl...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to