소스 검색

HUE-4916 [core] Truncate last name to 30 chars on ldap import

krish 9 년 전
부모
커밋
1248c19b7d
2개의 변경된 파일18개의 추가작업 그리고 3개의 파일을 삭제
  1. 8 3
      apps/useradmin/src/useradmin/ldap_access.py
  2. 10 0
      apps/useradmin/src/useradmin/test_ldap.py

+ 8 - 3
apps/useradmin/src/useradmin/ldap_access.py

@@ -170,7 +170,8 @@ class LdapConnection(object):
     else:
       return (base_dn, '(' + attr + '=' + name + ')')
 
-  def _transform_find_user_results(self, result_data, user_name_attr):
+  @classmethod
+  def _transform_find_user_results(cls, result_data, user_name_attr):
     """
     :param result_data: List of dictionaries that have ldap attributes and their associated values. Generally the result list from an ldapsearch request.
     :param user_name_attr: The ldap attribute that is returned by the server to map to ``username`` in the return dictionary.
@@ -203,9 +204,13 @@ class LdapConnection(object):
           }
 
           if 'givenName' in data:
-            ldap_info['first'] = data['givenName'][0]
+            if len(data['givenName'][0]) > 30:
+              LOG.warn('First name is truncated to 30 characters for [<User: %s>].' % ldap_info['username'])
+            ldap_info['first'] = data['givenName'][0][:30]
           if 'sn' in data:
-            ldap_info['last'] = data['sn'][0]
+            if len(data['sn'][0]) > 30:
+              LOG.warn('Last name is truncated to 30 characters for [<User: %s>].' % ldap_info['username'])
+            ldap_info['last'] = data['sn'][0][:30]
           if 'mail' in data:
             ldap_info['email'] = data['mail'][0]
           # memberOf and isMemberOf should be the same if they both exist

+ 10 - 0
apps/useradmin/src/useradmin/test_ldap.py

@@ -615,6 +615,16 @@ class TestUserAdminLdap(BaseUserAdminTests):
       for finish in done:
         finish()
 
+  def test_ldap_import_truncate_first_last_name(self):
+    test_ldap_data = [('uid=testuser,ou=people,dc=sec,dc=test,dc=com', {'objectClass': ['inetOrgPerson', 'posixAccount', 'shadowAccount'], 'mail': ['testuser@sec.test.com'], 'givenName': ['Firstnamehasmorethanthirtycharacters'], 'uid': ['testuser'], 'sn': ['Lastnamehasmorethanthirtycharacters']})]
+
+    # Checking if first/last name truncation works for LDAP imports
+    user_info = ldap_access.LdapConnection._transform_find_user_results(result_data=test_ldap_data, user_name_attr='uid')
+    assert_false(len(user_info[0]['first']) > 30)
+    assert_false(len(user_info[0]['last']) > 30)
+    assert_true(user_info[0]['first'] == 'Firstnamehasmorethanthirtychar', user_info[0]['first'])
+    assert_true(user_info[0]['last'] == 'Lastnamehasmorethanthirtychara', user_info[0]['last'])
+
 
   def test_add_ldap_groups(self):
     URL = reverse(add_ldap_groups)