Yair Zaslavsky has uploaded a new change for review.

Change subject: aaa: Fix group name issues for legacy provider
......................................................................

aaa: Fix group name issues for legacy provider

Chagning format from: authz/a/b/c/d to: a/b/c/d@authz
to conform to the users format.
Removed specific code at rest-api that handled old format.

Change-Id: I8c1feed08e33156c794b230fa04f33f2ebd82240
Topic: AAA
Signed-off-by: Yair Zaslavsky <yzasl...@redhat.com>
---
M 
backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/kerberosldap/KerberosLdapAuthz.java
M 
backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/kerberosldap/LdapBrokerUtils.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResource.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResourceTest.java
5 files changed, 36 insertions(+), 40 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/52/32652/1

diff --git 
a/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/kerberosldap/KerberosLdapAuthz.java
 
b/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/kerberosldap/KerberosLdapAuthz.java
index ea9cfa0..dae3df2 100644
--- 
a/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/kerberosldap/KerberosLdapAuthz.java
+++ 
b/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/kerberosldap/KerberosLdapAuthz.java
@@ -272,13 +272,13 @@
                         user.getSurName()
                 ).mput(
                         Authz.PrincipalRecord.NAME,
-                        removeUpnSuffix(user.getUserName())
+                        formatValue(user.getUserName(), 
Authz.PrincipalRecord.NAME)
                 ).mput(
                         Authz.PrincipalRecord.TITLE,
                         user.getTitle()
                 ).mput(
                         Authz.PrincipalRecord.PRINCIPAL,
-                        removeUpnSuffix(user.getUserName())
+                        formatValue(user.getUserName(), 
Authz.PrincipalRecord.PRINCIPAL)
                 );
         if (user.getGroups() != null) {
             List<ExtMap> groups = new ArrayList<>();
@@ -327,7 +327,7 @@
                     String.format(
                             "(%1$s%2$s%3$s)", keysToAttributes.get(key),
                             
operatorsToChars.get(queryFilterRecord.get(QueryFilterRecord.OPERATOR)),
-                            
removeUpnSuffix(queryFilterRecord.get(key).toString())
+                            formatValue(queryFilterRecord.get(key).toString(), 
key)
                             )
                     );
         } else {
@@ -346,8 +346,14 @@
         return query;
     }
 
-    private String removeUpnSuffix(String value) {
-        return value.contains("@") ? value.substring(0, value.indexOf("@")) : 
value;
+    private String formatValue(String value, ExtKey key) {
+        String result = value;
+        if (key.equals(Authz.PrincipalRecord.NAME) || 
key.equals(Authz.PrincipalRecord.PRINCIPAL)) {
+            result = value.contains("@") ? value.substring(0, 
value.indexOf("@")) : value;
+        } else if (key.equals(Authz.GroupRecord.NAME)) {
+            result = value.contains("/") ? 
value.substring(value.lastIndexOf('/') + 1) : value;
+        }
+        return result;
     }
 
 }
diff --git 
a/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/kerberosldap/LdapBrokerUtils.java
 
b/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/kerberosldap/LdapBrokerUtils.java
index eec7e24..ea7e32b 100644
--- 
a/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/kerberosldap/LdapBrokerUtils.java
+++ 
b/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/kerberosldap/LdapBrokerUtils.java
@@ -44,19 +44,25 @@
         }
 
         StringBuilder sb = new StringBuilder();
+        StringBuilder domainName = new StringBuilder();
 
         List<Rdn> rdns = name.getRdns();
         for (Rdn rdn : rdns) {
             String type = rdn.getType();
             String val = (String) rdn.getValue();
             if (type.equalsIgnoreCase("dc")) {
-                sb.insert(0, "." + val);
+                if (domainName.length() > 0) {
+                    domainName.insert(0, ".");
+                }
+                domainName.insert(0, val);
                 continue;
+            } else {
+                sb.append("/" + val);
             }
-            sb.append("/" + val);
         }
         // remove the first "." character.
         sb.delete(0, 1);
+        sb.append("@").append(domainName);
         return sb.toString();
     }
 
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResource.java
index d524491..003b3fb 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResource.java
@@ -16,6 +16,7 @@
 import org.ovirt.engine.api.restapi.resource.AbstractBackendCollectionResource;
 import org.ovirt.engine.api.restapi.resource.ResourceConstants;
 import org.ovirt.engine.api.restapi.resource.SingleEntityResource;
+import org.ovirt.engine.api.restapi.utils.AuthzUtils;
 import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.aaa.DirectoryGroup;
 import org.ovirt.engine.core.common.action.AddGroupParameters;
@@ -87,10 +88,7 @@
                 Response.Status.BAD_REQUEST
             );
         }
-        else if (group.isSetName() && group.getName().contains("/")) {
-            return group.getName().substring(0, group.getName().indexOf("/"));
-        }
-        return null;
+        return AuthzUtils.getAuthzNameFromEntityName(group.getName());
     }
 
     /**
@@ -151,7 +149,7 @@
     @Override
     public Response add(Group group) {
         validateParameters(group, "name");
-        if (!isNameContainsDomain(group)) {
+        if (AuthzUtils.getAuthzNameFromEntityName(group.getName()) == null) {
             validateParameters(group, "domain.id|name");
         }
         String directoryName = getDirectoryName(group);
@@ -182,16 +180,11 @@
         } else if (groupModel.isSetDomainEntryId()) {
             return getGroupById(directoryName, namespace, 
groupModel.getDomainEntryId());
         } else if (groupModel.isSetName()) {
-            String groupName = groupModel.getName();
-            if (groupName.startsWith(directoryName + "/")) {
-                int lastSlash = groupName.lastIndexOf("/");
-                groupName = groupName.substring(lastSlash + 1);
-            }
             return getEntity(
-                DirectoryGroup.class,
-                SearchType.DirectoryGroup,
-                getDirectoryGroupSearchPattern(groupName, directoryName)
-            );
+                    DirectoryGroup.class,
+                    SearchType.DirectoryGroup,
+                    
getDirectoryGroupSearchPattern(AuthzUtils.getEntityNameWithoutAuthz(groupModel.getName()),
 directoryName)
+                );
         }
 
         return null;
@@ -210,11 +203,6 @@
     @Override
     public Response performRemove(String id) {
         return performAction(VdcActionType.RemoveGroup, new 
IdParameters(asGuid(id)));
-    }
-
-    private boolean isNameContainsDomain(Group group) {
-        String name = group.getName();
-        return name.contains("/") && name.indexOf('/') != name.length() - 1;
     }
 
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResource.java
index fe0a8dd..6273f88 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResource.java
@@ -19,6 +19,7 @@
 import org.ovirt.engine.api.restapi.resource.AbstractBackendCollectionResource;
 import org.ovirt.engine.api.restapi.resource.ResourceConstants;
 import org.ovirt.engine.api.restapi.resource.SingleEntityResource;
+import org.ovirt.engine.api.restapi.utils.AuthzUtils;
 import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.aaa.DirectoryUser;
 import org.ovirt.engine.core.common.action.AddUserParameters;
@@ -93,10 +94,7 @@
             }
             throw new WebFaultException(null, "Domain: '" + 
user.getDomain().getId().toString() + "' does not exist.", 
Response.Status.BAD_REQUEST);
         }
-        else if (isNameContainsDomain(user)) {
-            return 
user.getUserName().substring(user.getUserName().lastIndexOf("@") + 1);
-        }
-        return null;
+        return AuthzUtils.getAuthzNameFromEntityName(user.getUserName());
     }
 
     /**
@@ -174,7 +172,7 @@
     @Override
     public Response add(User user) {
         validateParameters(user, "userName");
-        if (!isNameContainsDomain(user)) {// user-name may contain the domain 
(e.g: ol...@xxx.yyy)
+        if (AuthzUtils.getAuthzNameFromEntityName(user.getUserName()) == null) 
{// user-name may contain the domain (e.g: ol...@xxx.yyy)
             validateParameters(user, "domain.id|name");
         }
         String domain = getDomain(user);
@@ -187,11 +185,6 @@
         AddUserParameters parameters = new AddUserParameters(new 
DbUser(directoryUser));
         QueryIdResolver<Guid> resolver = new 
QueryIdResolver<>(VdcQueryType.GetDbUserByUserId, IdQueryParameters.class);
         return performCreate(VdcActionType.AddUser, parameters, resolver, 
BaseResource.class);
-    }
-
-    private boolean isNameContainsDomain(User user) {
-        return ((user.getUserName().contains("@")) && 
(user.getUserName().lastIndexOf('@') != user.getUserName()
-                .length() - 1));
     }
 
     /**
@@ -217,7 +210,7 @@
                         DirectoryUser.class,
                         SearchType.DirectoryUser,
                         getDirectoryUserSearchPattern(
-                                isNameContainsDomain(user) ? 
user.getUserName().substring(0, user.getUserName().lastIndexOf("@")) : 
user.getUserName(),
+                                
AuthzUtils.getEntityNameWithoutAuthz(user.getUserName()),
                                 user.getNamespace(),
                                 directoryName)
                         );
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResourceTest.java
index 7999513..12c286c 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResourceTest.java
@@ -45,11 +45,14 @@
      * searches, thus then must have the same format that we generate when 
searching in directories.
      */
     private static final String[] GROUP_NAMES;
+    private static final String[] GROUP_NAMES_WITH_NO_DOMAIN;
 
     static {
         GROUP_NAMES = new String[NAMES.length];
+        GROUP_NAMES_WITH_NO_DOMAIN = new String[NAMES.length];
         for (int i = 0; i < NAMES.length; i++) {
-            GROUP_NAMES[i] = DOMAIN + "/Groups/" + NAMES[i];
+            GROUP_NAMES_WITH_NO_DOMAIN[i] = "Groups/" + NAMES[i];
+            GROUP_NAMES[i] = GROUP_NAMES_WITH_NO_DOMAIN[i] + "@" + DOMAIN;
         }
     }
 
@@ -205,7 +208,7 @@
     public void testAddGroupWithExplicitDirectoryName() throws Exception {
         setUriInfo(setUpBasicUriExpectations());
         setUpGetEntityExpectations(
-                "ADGROUP@" + DOMAIN + ":: name=" + NAMES[0],
+                "ADGROUP@" + DOMAIN + ":: name=" + 
GROUP_NAMES_WITH_NO_DOMAIN[0],
             SearchType.DirectoryGroup,
             getDirectoryGroup(0)
         );
@@ -244,7 +247,7 @@
     public void testAddGroupWithImplicitDirectoryName() throws Exception {
         setUriInfo(setUpBasicUriExpectations());
         setUpGetEntityExpectations(
-                "ADGROUP@" + DOMAIN + ":: name=" + NAMES[0],
+                "ADGROUP@" + DOMAIN + ":: name=" + 
GROUP_NAMES_WITH_NO_DOMAIN[0],
             SearchType.DirectoryGroup,
             getDirectoryGroup(0)
         );


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8c1feed08e33156c794b230fa04f33f2ebd82240
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