Преглед изворни кода

HUE-7084 [useradmin] Remove @domain part of username when creating home directory for LDAP user

krish пре 8 година
родитељ
комит
32cd816
2 измењених фајлова са 31 додато и 5 уклоњено
  1. 19 0
      apps/useradmin/src/useradmin/tests.py
  2. 12 5
      apps/useradmin/src/useradmin/views.py

+ 19 - 0
apps/useradmin/src/useradmin/tests.py

@@ -816,6 +816,25 @@ class TestUserAdminWithHadoop(BaseUserAdminTests):
       assert_equal('test2', dir_stat.user)
       assert_equal('test2', dir_stat.group)
       assert_equal('40755', '%o' % dir_stat.mode)
+
+      # Ignore domain in username when importing LDAP users
+      # eg: Ignore '@ad.sec.cloudera.com' when importing 'test@ad.sec.cloudera.com'
+      resets.append(desktop.conf.LDAP.LDAP_URL.set_for_testing('default.example.com'))
+      if cluster.fs.exists('/user/test3@ad.sec.cloudera.com'):
+        cluster.fs.do_as_superuser(cluster.fs.rmtree, '/user/test3@ad.sec.cloudera.com')
+      if cluster.fs.exists('/user/test3'):
+        cluster.fs.do_as_superuser(cluster.fs.rmtree, '/user/test3')
+      assert_false(cluster.fs.exists('/user/test3'))
+      response = c.post('/useradmin/users/new', dict(username="test3@ad.sec.cloudera.com", password1='test', password2='test', ensure_home_directory=True))
+      assert_false(cluster.fs.exists('/user/test3@ad.sec.cloudera.com'))
+      assert_true(cluster.fs.exists('/user/test3'))
+
+      dir_stat = cluster.fs.stats('/user/test3')
+      assert_equal('test3', dir_stat.user)
+      assert_equal('test3', dir_stat.group)
+      assert_not_equal('test3@ad.sec.cloudera.com', dir_stat.user)
+      assert_not_equal('test3@ad.sec.cloudera.com', dir_stat.group)
+      assert_equal('40755', '%o' % dir_stat.mode)
     finally:
       for reset in resets:
         reset()

+ 12 - 5
apps/useradmin/src/useradmin/views.py

@@ -58,26 +58,27 @@ __users_lock = threading.Lock()
 __groups_lock = threading.Lock()
 
 
+def is_ldap_setup():
+  return bool(LDAP.LDAP_SERVERS.get()) or LDAP.LDAP_URL.get() is not None
+
 def list_users(request):
-  is_ldap_setup = bool(LDAP.LDAP_SERVERS.get()) or LDAP.LDAP_URL.get() is not None
 
   return render("list_users.mako", request, {
       'users': User.objects.all(),
       'users_json': json.dumps(list(User.objects.values_list('id', flat=True))),
       'request': request,
       'is_embeddable': request.GET.get('is_embeddable', False),
-      'is_ldap_setup': is_ldap_setup
+      'is_ldap_setup': is_ldap_setup()
   })
 
 
 def list_groups(request):
-  is_ldap_setup = bool(LDAP.LDAP_SERVERS.get()) or LDAP.LDAP_URL.get() is not None
 
   return render("list_groups.mako", request, {
       'groups': Group.objects.all(),
       'groups_json': json.dumps(list(Group.objects.values_list('name', flat=True))),
       'is_embeddable': request.GET.get('is_embeddable', False),
-      'is_ldap_setup': is_ldap_setup
+      'is_ldap_setup': is_ldap_setup()
   })
 
 
@@ -779,9 +780,15 @@ def ensure_home_directory(fs, user):
   Throws IOError, WebHdfsException.
   """
   userprofile = get_profile(user)
+  username = user.username
+  home_directory = userprofile.home_directory
+
+  if is_ldap_setup():
+    username = user.username.split('@')[0]
+    home_directory = userprofile.home_directory.split('@')[0]
 
   if userprofile is not None and userprofile.home_directory:
-    fs.do_as_user(user.username, fs.create_home_dir, userprofile.home_directory)
+    fs.do_as_user(username, fs.create_home_dir, home_directory)
   else:
     LOG.warn("Not creating home directory of %s as his profile is empty" % user)