Selaa lähdekoodia

HUE-8499 [useradmin] Fix ensure_home_directory if path contains special character

Ying Chen 7 vuotta sitten
vanhempi
commit
dda146b
2 muutettua tiedostoa jossa 15 lisäystä ja 0 poistoa
  1. 13 0
      apps/useradmin/src/useradmin/tests.py
  2. 2 0
      apps/useradmin/src/useradmin/views.py

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

@@ -924,6 +924,19 @@ class TestUserAdminWithHadoop(BaseUserAdminTests):
       assert_equal('test2', dir_stat.group)
       assert_equal('40755', '%o' % dir_stat.mode)
 
+      # special character in username ctestë01
+      path_with_special_char = '/user/ctestë01'.decode("utf-8")
+      if cluster.fs.exists(path_with_special_char):
+        cluster.fs.do_as_superuser(cluster.fs.rmtree, path_with_special_char)
+      response = c.post('/useradmin/users/new', dict(username='ctestë01', password1='test', password2='test', ensure_home_directory=True))
+      assert_true(cluster.fs.exists(path_with_special_char))
+      dir_stat = cluster.fs.stats(path_with_special_char)
+      assert_equal(u'ctestë01', dir_stat.user)
+      assert_equal(u'ctestë01', dir_stat.group)
+      assert_equal('40755', '%o' % dir_stat.mode)
+      if cluster.fs.exists(path_with_special_char):  # clean special characters
+        cluster.fs.do_as_superuser(cluster.fs.rmtree, path_with_special_char)
+
       # 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'))

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

@@ -805,6 +805,8 @@ def ensure_home_directory(fs, user):
     home_directory = userprofile.home_directory.split('@')[0]
 
   if userprofile is not None and userprofile.home_directory:
+    if not isinstance(home_directory, unicode):
+      home_directory = home_directory.decode("utf-8")
     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)