This is an automated email from the ASF dual-hosted git repository.

spolavarapu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new daafdf7  RANGER-3175: Adding back support to retrieve users using 
group member attribute from AD/LDAP
daafdf7 is described below

commit daafdf75655d0800ed7cea8fbb3f374c253f6253
Author: Sailaja Polavarapu <[email protected]>
AuthorDate: Mon Feb 8 21:45:57 2021 -0800

    RANGER-3175: Adding back support to retrieve users using group member 
attribute from AD/LDAP
---
 .../ldapusersync/process/LdapUserGroupBuilder.java | 79 +++++++++++++++++++++-
 .../unixusersync/config/UserGroupSyncConfig.java   |  3 +
 2 files changed, 79 insertions(+), 3 deletions(-)

diff --git 
a/ugsync/src/main/java/org/apache/ranger/ldapusersync/process/LdapUserGroupBuilder.java
 
b/ugsync/src/main/java/org/apache/ranger/ldapusersync/process/LdapUserGroupBuilder.java
index c8fe3fc..86556f8 100644
--- 
a/ugsync/src/main/java/org/apache/ranger/ldapusersync/process/LdapUserGroupBuilder.java
+++ 
b/ugsync/src/main/java/org/apache/ranger/ldapusersync/process/LdapUserGroupBuilder.java
@@ -26,7 +26,9 @@ import java.util.Arrays;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
+import java.util.NoSuchElementException;
 import java.util.Properties;
 import java.util.Set;
 import java.util.HashMap;
@@ -35,6 +37,7 @@ import java.util.UUID;
 import javax.naming.Context;
 import javax.naming.InvalidNameException;
 import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
 import javax.naming.directory.Attribute;
 import javax.naming.directory.Attributes;
 import javax.naming.directory.SearchControls;
@@ -42,8 +45,10 @@ import javax.naming.directory.SearchResult;
 import javax.naming.ldap.Control;
 import javax.naming.ldap.InitialLdapContext;
 import javax.naming.ldap.LdapContext;
+import javax.naming.ldap.LdapName;
 import javax.naming.ldap.PagedResultsControl;
 import javax.naming.ldap.PagedResultsResponseControl;
+import javax.naming.ldap.Rdn;
 import javax.naming.ldap.StartTlsRequest;
 import javax.naming.ldap.StartTlsResponse;
 import org.apache.commons.lang.StringUtils;
@@ -206,7 +211,7 @@ public class LdapUserGroupBuilder implements 
UserGroupSource {
 
                currentSyncSource = config.getCurrentSyncSource();
                groupSearchFirstEnabled =   true;
-               userSearchEnabled =   true;
+               userSearchEnabled =   config.isUserSearchEnabled();;
                groupSearchEnabled =   true;
     ldapUrl = config.getLdapUrl();
     ldapBindDn = config.getLdapBindDn();
@@ -326,6 +331,7 @@ public class LdapUserGroupBuilder implements 
UserGroupSource {
                sourceGroups = new HashMap<>();
                sourceUsers = new HashMap<>();
                sourceGroupUsers = new HashMap<>();
+               long highestdeltaSyncUserTime = 0;
 
                if (config.isUserSyncDeletesEnabled() && deleteCycles >= 
config.getUserSyncDeletesFrequency()) {
                        deleteCycles = 1;
@@ -338,7 +344,10 @@ public class LdapUserGroupBuilder implements 
UserGroupSource {
                        deleteCycles++;
                }
         long highestdeltaSyncGroupTime = getGroups(computeDeletes);
-        long highestdeltaSyncUserTime = getUsers(computeDeletes);
+               if (userSearchEnabled) {
+                       LOG.info("Performing user search to retrieve users from 
AD/LDAP");
+                       highestdeltaSyncUserTime = getUsers(computeDeletes);
+               }
 
                if (groupHierarchyLevels > 0) {
                        LOG.info("Going through group hierarchy for nested 
group evaluation");
@@ -719,6 +728,18 @@ public class LdapUserGroupBuilder implements 
UserGroupSource {
                                                                        
continue;
                                                                }
                                                                userCount++;
+                                                               if 
(!userSearchEnabled) {
+                                                                       
Map<String, String> userAttrMap = new HashMap<>();
+                                                                       String 
userName = getShortName(originalUserFullName);
+                                                                       
userAttrMap.put(UgsyncCommonConstants.ORIGINAL_NAME, userName);
+                                                                       
userAttrMap.put(UgsyncCommonConstants.FULL_NAME, originalUserFullName);
+                                                                       
userAttrMap.put(UgsyncCommonConstants.SYNC_SOURCE, currentSyncSource);
+                                                                       
userAttrMap.put(UgsyncCommonConstants.LDAP_URL, config.getLdapUrl());
+                                                                       
sourceUsers.put(originalUserFullName, userAttrMap);
+                                                                       if 
(LOG.isDebugEnabled()) {
+                                                                               
LOG.debug("As usersearch is disabled, adding user " + userName + " from group 
member attribute for group " + gName);
+                                                                       }
+                                                               }
 
                                                                
groupUserTable.put(groupFullName, originalUserFullName, originalUserFullName);
                                                        }
@@ -900,7 +921,7 @@ public class LdapUserGroupBuilder implements 
UserGroupSource {
                                                                        
groupAttrMap.put(otherGroupAttribute, (String) otherGroupAttr.get());
                                                                }
                                                        }
-                                                       sourceGroups.put(gName, 
groupAttrMap);
+                                                       
sourceGroups.put(groupFullName, groupAttrMap);
 
                                                        NamingEnumeration<?> 
userEnum = groupMemberAttr.getAll();
                                                        while 
(userEnum.hasMore()) {
@@ -909,6 +930,15 @@ public class LdapUserGroupBuilder implements 
UserGroupSource {
                                                                        
continue;
                                                                }
                                                                userCount++;
+                                                               if 
(!userSearchEnabled && !sourceGroups.containsKey(originalUserFullName)) {
+                                                                       
Map<String, String> userAttrMap = new HashMap<>();
+                                                                       String 
userName = getShortName(originalUserFullName);
+                                                                       
userAttrMap.put(UgsyncCommonConstants.ORIGINAL_NAME, userName);
+                                                                       
userAttrMap.put(UgsyncCommonConstants.FULL_NAME, originalUserFullName);
+                                                                       
userAttrMap.put(UgsyncCommonConstants.SYNC_SOURCE, currentSyncSource);
+                                                                       
userAttrMap.put(UgsyncCommonConstants.LDAP_URL, config.getLdapUrl());
+                                                                       
sourceUsers.put(originalUserFullName, userAttrMap);
+                                                               }
                                                                
groupUserTable.put(groupFullName, originalUserFullName, originalUserFullName);
 
                                                        }
@@ -986,4 +1016,47 @@ public class LdapUserGroupBuilder implements 
UserGroupSource {
                        LOG.warn("Attribute Type " + attrType + " not supported 
for " + attrName);
                }
        }
+
+       private static String getShortName(String longName) {
+               if (StringUtils.isEmpty(longName)) {
+                       return null;
+               }
+               String shortName = "";
+               try {
+                       LdapName subjectDN = new LdapName(longName);
+                       List<Rdn> rdns = subjectDN.getRdns();
+                       for (int i = rdns.size() - 1; i >= 0; i--) {
+                               if (StringUtils.isNotEmpty(shortName)) {
+                                       break;
+                               }
+                               Rdn rdn = rdns.get(i);
+                               Attributes attributes = rdn.toAttributes();
+                               try {
+                                       Attribute uid = attributes.get("uid");
+                                       if (uid != null) {
+                                               Object value = uid.get();
+                                               if (value != null) {
+                                                       shortName = 
value.toString();
+                                               }
+                                       } else {
+                                               Attribute cn = 
attributes.get("cn");
+                                               if (cn != null) {
+                                                       Object value = cn.get();
+                                                       if (value != null) {
+                                                               shortName = 
value.toString();
+                                                       }
+                                               }
+                                       }
+                               } catch (NoSuchElementException ignore) {
+                                       shortName = longName;
+                               } catch (NamingException ignore) {
+                                       shortName = longName;
+                               }
+                       }
+               } catch (InvalidNameException ex) {
+                       shortName = longName;
+               }
+               LOG.info("longName: " + longName + ", userName: " + shortName);
+               return shortName;
+       }
 }
diff --git 
a/ugsync/src/main/java/org/apache/ranger/unixusersync/config/UserGroupSyncConfig.java
 
b/ugsync/src/main/java/org/apache/ranger/unixusersync/config/UserGroupSyncConfig.java
index 31e15a1..dc47ec1 100644
--- 
a/ugsync/src/main/java/org/apache/ranger/unixusersync/config/UserGroupSyncConfig.java
+++ 
b/ugsync/src/main/java/org/apache/ranger/unixusersync/config/UserGroupSyncConfig.java
@@ -789,6 +789,9 @@ public class UserGroupSyncConfig  {
                } else {
                        userSearchEnabled  = Boolean.valueOf(val);
                }
+               if (!isGroupSearchFirstEnabled()) {
+                       userSearchEnabled = true;
+               }
                return userSearchEnabled;
        }
 

Reply via email to