Yair Zaslavsky has uploaded a new change for review.

Change subject: aaa: two providers produce the same "domain id"
......................................................................

aaa: two providers produce the same "domain id"

This may occur if two authz names have the same prefix that gets
converted to the same Guid.
This happens as the Guid ctor that receives an array of bytes needs
only the first 16 bytes to consturct a guid and ignores the rest.
The fix suggest an id that is based on base64 encoding of the entire string.

Change-Id: Ieddb2c31645d7276652db17df190bc4f2cfdaacb
Bug-Url: https://bugzilla.redhat.com/1172187
Topic: AAA
Signed-off-by: Yair Zaslavsky <yzasl...@redhat.com>
---
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainsResource.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GroupMapper.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java
6 files changed, 29 insertions(+), 15 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/92/36092/1

diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java
index 14faa78..07bc5e3 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java
@@ -15,6 +15,7 @@
 import org.ovirt.engine.api.restapi.resource.SingleEntityResource;
 import org.ovirt.engine.core.aaa.DirectoryGroup;
 import org.ovirt.engine.core.common.interfaces.SearchType;
+import org.ovirt.engine.core.compat.Guid;
 
 /**
  * This resource corresponds to the groups that exist in a directory 
accessible to the engine. Those groups may or may
@@ -90,4 +91,9 @@
         return model;
     }
 
+    @Override
+    protected Guid asGuidOr404(String id) {
+        return null;
+    }
+
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainResource.java
index 2812c31..74d252d 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainResource.java
@@ -1,7 +1,7 @@
 package org.ovirt.engine.api.restapi.resource.aaa;
 
-import static org.ovirt.engine.api.utils.ReflectionHelper.assignChildModel;
 import static 
org.ovirt.engine.api.restapi.resource.aaa.BackendDomainsResource.SUB_COLLECTIONS;
+import static org.ovirt.engine.api.utils.ReflectionHelper.assignChildModel;
 
 import org.ovirt.engine.api.model.Domain;
 import org.ovirt.engine.api.resource.aaa.DomainGroupsResource;
@@ -9,6 +9,7 @@
 import org.ovirt.engine.api.resource.aaa.DomainUsersResource;
 import org.ovirt.engine.api.restapi.model.Directory;
 import org.ovirt.engine.api.restapi.resource.AbstractBackendSubResource;
+import org.ovirt.engine.core.compat.Guid;
 
 public class BackendDomainResource extends AbstractBackendSubResource<Domain, 
Directory>
 implements DomainResource {
@@ -53,4 +54,9 @@
     protected Domain doPopulate(Domain model, Directory entity) {
         return model;
     }
+
+    @Override
+    protected Guid asGuidOr404(String id) {
+        return null;
+    }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java
index a7a783f..befbb9b 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java
@@ -15,6 +15,7 @@
 import org.ovirt.engine.api.restapi.resource.SingleEntityResource;
 import org.ovirt.engine.core.aaa.DirectoryUser;
 import org.ovirt.engine.core.common.interfaces.SearchType;
+import org.ovirt.engine.core.compat.Guid;
 
 /**
  * This resource corresponds to the users that exist in a directory accessible
@@ -84,4 +85,9 @@
         return model;
     }
 
+    @Override
+    protected Guid asGuidOr404(String id) {
+        return null;
+    }
+
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainsResource.java
index a7b4f35..a6770df 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainsResource.java
@@ -14,9 +14,9 @@
 import org.ovirt.engine.api.restapi.model.Directory;
 import org.ovirt.engine.api.restapi.resource.AbstractBackendCollectionResource;
 import org.ovirt.engine.api.restapi.resource.SingleEntityResource;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
-import org.ovirt.engine.core.compat.Guid;
 
 public class BackendDomainsResource extends 
AbstractBackendCollectionResource<Domain, Directory>
     implements DomainsResource {
@@ -53,8 +53,7 @@
         for(String domain : getDomainList()){
             Directory ds = new Directory();
             ds.setDomain(domain);
-            Guid guid = asGuid(domain.getBytes(), true);
-            ds.setId(guid.toString());
+            ds.setId(DirectoryEntryIdUtils.encode(domain));
             dsl.add(ds);
         }
         return dsl;
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GroupMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GroupMapper.java
index a376a73..58e5158 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GroupMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GroupMapper.java
@@ -1,7 +1,5 @@
 package org.ovirt.engine.api.restapi.types;
 
-import java.nio.charset.Charset;
-
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.api.model.Domain;
 import org.ovirt.engine.api.model.Group;
@@ -9,7 +7,6 @@
 import org.ovirt.engine.api.restapi.utils.GuidUtils;
 import org.ovirt.engine.core.aaa.DirectoryGroup;
 import org.ovirt.engine.core.common.businessentities.aaa.DbGroup;
-import org.ovirt.engine.core.compat.Guid;
 
 public class GroupMapper {
 
@@ -20,8 +17,8 @@
         model.setId(entity.getId().toString());
         if (!StringUtils.isEmpty(entity.getDomain())) {
             Domain dom = new Domain();
-            dom.setId(new 
Guid(entity.getDomain().getBytes(Charset.forName("UTF-8")), true).toString());
-            model.setDomain(dom);
+            dom.setName(entity.getDomain());
+            dom.setId(DirectoryEntryIdUtils.encode(dom.getName()));
         }
         
model.setDomainEntryId(DirectoryEntryIdUtils.encode(entity.getExternalId()));
         model.setNamespace(entity.getNamespace());
@@ -34,7 +31,8 @@
         model.setName(entity.getName());
         if (!StringUtils.isEmpty(entity.getDirectoryName())) {
             Domain dom = new Domain();
-            dom.setId(new 
Guid(entity.getDirectoryName().getBytes(Charset.forName("UTF-8")), 
true).toString());
+            dom.setName(entity.getDirectoryName());
+            dom.setId(DirectoryEntryIdUtils.encode(dom.getName()));
             model.setDomain(dom);
         }
         model.setId(DirectoryEntryIdUtils.encode(entity.getId()));
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java
index 172f83a..a3dd0d9 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java
@@ -1,7 +1,5 @@
 package org.ovirt.engine.api.restapi.types;
 
-import java.nio.charset.Charset;
-
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.api.model.Domain;
 import org.ovirt.engine.api.model.Group;
@@ -12,7 +10,6 @@
 import org.ovirt.engine.core.aaa.DirectoryGroup;
 import org.ovirt.engine.core.aaa.DirectoryUser;
 import org.ovirt.engine.core.common.businessentities.aaa.DbUser;
-import org.ovirt.engine.core.compat.Guid;
 
 public class UserMapper {
 
@@ -38,7 +35,8 @@
         }
         if (!StringUtils.isEmpty(entity.getDomain())) {
             Domain dom = new Domain();
-            dom.setId(new 
Guid(entity.getDomain().getBytes(Charset.forName("UTF-8")), true).toString());
+            dom.setName(entity.getDomain());
+            dom.setId(DirectoryEntryIdUtils.encode(dom.getName()));
             model.setDomain(dom);
         }
         return model;
@@ -65,7 +63,8 @@
         }
         if (!StringUtils.isEmpty(entity.getDirectoryName())) {
             Domain dom = new Domain();
-            dom.setId(new 
Guid(entity.getDirectoryName().getBytes(Charset.forName("UTF-8")), 
true).toString());
+            dom.setName(entity.getDirectoryName());
+            dom.setId(DirectoryEntryIdUtils.encode(dom.getName()));
             model.setDomain(dom);
         }
         return model;


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ieddb2c31645d7276652db17df190bc4f2cfdaacb
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
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