Эх сурвалжийг харах

HUE-4447 [auth] Try to ensure the user has a home directory when logging from any backend

Romain Rigaux 9 жил өмнө
parent
commit
2f8ddf2

+ 11 - 6
apps/useradmin/src/useradmin/views.py

@@ -294,7 +294,7 @@ def edit_user(request, username=None):
       # Ensure home directory is created, if necessary.
       if form.cleaned_data.get('ensure_home_directory'):
         try:
-          ensure_home_directory(request.fs, get_profile(request.user))
+          ensure_home_directory(request.fs, instance.user)
         except (IOError, WebHdfsException), e:
           request.error(_('Cannot make home directory for user %s.') % instance.username)
 
@@ -483,7 +483,7 @@ def add_ldap_users(request):
       if users and form.cleaned_data['ensure_home_directory']:
         for user in users:
           try:
-            ensure_home_directory(request.fs, get_profile(user))
+            ensure_home_directory(request.fs, user)
           except (IOError, WebHdfsException), e:
             request.error(_("Cannot make home directory for user %s.") % user.username)
 
@@ -554,7 +554,7 @@ def add_ldap_groups(request):
             unique_users.add(user)
         for user in unique_users:
           try:
-            ensure_home_directory(request.fs, get_profile(user))
+            ensure_home_directory(request.fs, user)
           except (IOError, WebHdfsException), e:
             raise PopupException(_("Exception creating home directory for LDAP user %s in group %s.") % (user, group), detail=e)
 
@@ -635,7 +635,7 @@ def sync_ldap_users_and_groups(connection, is_ensuring_home_directory=False, fs=
   if is_ensuring_home_directory:
     for user in users:
       try:
-        ensure_home_directory(fs, get_profile(user))
+        ensure_home_directory(fs, user)
       except (IOError, WebHdfsException), e:
         raise PopupException(_("The import may not be complete, sync again."), detail=e)
 
@@ -677,13 +677,18 @@ def sync_ldap_groups(connection, failed_users=None):
   return groups
 
 
-def ensure_home_directory(fs, userprofile):
+def ensure_home_directory(fs, user):
   """
   Adds a users home directory if it doesn't already exist.
 
   Throws IOError, WebHdfsException.
   """
-  fs.do_as_user(username, fs.create_home_dir, userprofile.home_directory)
+  userprofile = get_profile(user)
+
+  if userprofile is not None and userprofile.home_directory:
+    fs.do_as_user(user.username, fs.create_home_dir, userprofile.home_directory)
+  else:
+    LOG.warn("Not creating home directory of %s as his profile is empty" % user)
 
 
 def sync_unix_users_and_groups(min_uid, max_uid, min_gid, max_gid, check_shell):

+ 4 - 9
desktop/core/src/desktop/auth/views.py

@@ -123,15 +123,10 @@ def dt_login(request, from_modal=False):
         if request.session.test_cookie_worked():
           request.session.delete_test_cookie()
 
-        auto_create_home_backends = ['AllowAllBackend', 'LdapBackend', 'SpnegoDjangoBackend']
-        if is_first_login_ever or any(backend in backend_names for backend in auto_create_home_backends)\
-                or (userprofile and userprofile.home_directory):
-          # Create home directory for first user.
-          try:
-            ensure_home_directory(request.fs, userprofile)
-          except (IOError, WebHdfsException), e:
-            LOG.error(_('Could not create home directory.'), exc_info=e)
-            request.error(_('Could not create home directory.'))
+        try:
+          ensure_home_directory(request.fs, user)
+        except (IOError, WebHdfsException), e:
+          LOG.error('Could not create home directory at login for %s.' % user, exc_info=e)
 
         if require_change_password(userprofile):
           return HttpResponseRedirect(urlresolvers.reverse('useradmin.views.edit_user', kwargs={'username': user.username}))