소스 검색

[useradmin] On batch LDAP user import, validate first_name and last_name, log warning and continue

Jenny Kim 10 년 전
부모
커밋
71f338997d

+ 8 - 0
apps/useradmin/src/useradmin/forms.py

@@ -67,6 +67,14 @@ def validate_groupname(groupname_pattern):
   if not validator.match(groupname_pattern):
     raise ValidationError(_("Group name can be any character as long as it's 80 characters or fewer."))
 
+def validate_first_name(first_name):
+  if first_name and len(first_name) > 30:
+    raise ValidationError(_('first_name must be fewer than 30 characters.'))
+
+def validate_last_name(last_name):
+  if last_name and len(last_name) > 30:
+    raise ValidationError(_('last_name must be fewer than 30 characters.'))
+
 
 class UserChangeForm(django.contrib.auth.forms.UserChangeForm):
   """

+ 4 - 2
apps/useradmin/src/useradmin/test_ldap.py

@@ -573,8 +573,10 @@ class TestUserAdminLdap(BaseUserAdminTests):
       assert_true('/useradmin/groups' in response['Location'])
 
       # Test warning notification for failed users on group import
-      response = c.post(URL, dict(server='nonsense', groupname_pattern='TestUsers'), follow=True)
-      assert_true('Failed to import following users: test_toolongusernametoolongusername' in response.content, response.content)
+      # Import test_longfirstname user
+      ldap_access.CACHED_LDAP_CONN.add_user_group_for_test('uid=test_longfirstname,ou=People,dc=example,dc=com', 'TestUsers')
+      response = c.post(URL, dict(server='nonsense', groupname_pattern='TestUsers', import_members=True), follow=True)
+      assert_true('Failed to import following users: test_toolongusernametoolongusername, test_longfirstname' in response.content, response.content)
 
       # Test with space
       response = c.post(URL, dict(server='nonsense', groupname_pattern='Test Administrators'))

+ 2 - 1
apps/useradmin/src/useradmin/tests.py

@@ -161,7 +161,8 @@ class LdapTestConnection(object):
                     'posix_person2': {'dn': 'uid=posix_person2,ou=People,dc=example,dc=com', 'username': 'posix_person2', 'first': 'pos', 'last': 'ix', 'email': 'pos@ix.com'},
                     'user with space': {'dn': 'uid=user with space,ou=People,dc=example,dc=com', 'username': 'user with space', 'first': 'user', 'last': 'space', 'email': 'user@space.com'},
                     'spaceless': {'dn': 'uid=user without space,ou=People,dc=example,dc=com', 'username': 'spaceless', 'first': 'user', 'last': 'space', 'email': 'user@space.com'},
-                    'test_toolongusernametoolongusername': {'dn': 'uid=test_toolongusernametoolongusername,ou=People,dc=example,dc=com', 'username': 'test_toolongusernametoolongusername', 'first': 'toolong', 'last': 'username', 'email': 'toolong@username.com'},}
+                    'test_toolongusernametoolongusername': {'dn': 'uid=test_toolongusernametoolongusername,ou=People,dc=example,dc=com', 'username': 'test_toolongusernametoolongusername', 'first': 'toolong', 'last': 'username', 'email': 'toolong@username.com'},
+                    'test_longfirstname': {'dn': 'uid=test_longfirstname,ou=People,dc=example,dc=com', 'username': 'test_longfirstname', 'first': 'test_longfirstname_test_longfirstname', 'last': 'username', 'email': 'toolong@username.com'},}
 
       self.groups = {'TestUsers': {
                         'dn': 'cn=TestUsers,ou=Groups,dc=example,dc=com',

+ 4 - 2
apps/useradmin/src/useradmin/views.py

@@ -44,8 +44,8 @@ from hadoop.fs.exceptions import WebHdfsException
 from useradmin.models import HuePermission, UserProfile, LdapGroup
 from useradmin.models import get_profile, get_default_user_group
 from useradmin.forms import SyncLdapUsersGroupsForm, AddLdapGroupsForm, AddLdapUsersForm,\
-  PermissionsEditForm, GroupEditForm, SuperUserChangeForm, UserChangeForm, validate_username,\
-  PasswordChangeForm
+  PermissionsEditForm, GroupEditForm, SuperUserChangeForm, UserChangeForm, validate_username, validate_first_name, \
+  validate_last_name, PasswordChangeForm
 
 
 LOG = logging.getLogger(__name__)
@@ -771,8 +771,10 @@ def _import_ldap_users_info(connection, user_info, sync_groups=False, import_by_
         user.groups.add(default_group)
 
       if 'first' in ldap_info:
+        validate_first_name(ldap_info['first'])
         user.first_name = ldap_info['first']
       if 'last' in ldap_info:
+        validate_last_name(ldap_info['last'])
         user.last_name = ldap_info['last']
       if 'email' in ldap_info:
         user.email = ldap_info['email']