]> source.dussan.org Git - nextcloud-server.git/commitdiff
throw NoUserException in getHome when the requested user does not exist anymore
authorArthur Schiwon <blizzz@owncloud.com>
Thu, 10 Dec 2015 23:12:41 +0000 (00:12 +0100)
committerArthur Schiwon <blizzz@owncloud.com>
Thu, 10 Dec 2015 23:12:41 +0000 (00:12 +0100)
apps/user_ldap/user_ldap.php

index 0097dda89b58c50ac8ac5c4a0911652628b628e1..fc62c168575879f3bb7e12b97217c8dcce44358d 100644 (file)
@@ -30,6 +30,7 @@
 
 namespace OCA\user_ldap;
 
+use OC\User\NoUserException;
 use OCA\user_ldap\lib\BackendUtility;
 use OCA\user_ldap\lib\Access;
 use OCA\user_ldap\lib\user\OfflineUser;
@@ -190,15 +191,18 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
 
        /**
         * checks whether a user is still available on LDAP
+        *
         * @param string|\OCA\User_LDAP\lib\user\User $user either the ownCloud user
         * name or an instance of that user
         * @return bool
+        * @throws \Exception
+        * @throws \OC\ServerNotAvailableException
         */
        public function userExistsOnLDAP($user) {
                if(is_string($user)) {
                        $user = $this->access->userManager->get($user);
                }
-               if(!$user instanceof User) {
+               if(is_null($user)) {
                        return false;
                }
 
@@ -212,6 +216,10 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
                        return false;
                }
 
+               if($user instanceof OfflineUser) {
+                       $user->unmark();
+               }
+
                return true;
        }
 
@@ -274,10 +282,13 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
        }
 
        /**
-       * get the user's home directory
-       * @param string $uid the username
-       * @return string|bool
-       */
+        * get the user's home directory
+        *
+        * @param string $uid the username
+        * @return bool|string
+        * @throws NoUserException
+        * @throws \Exception
+        */
        public function getHome($uid) {
                if(isset($this->homesToKill[$uid]) && !empty($this->homesToKill[$uid])) {
                        //a deleted user who needs some clean up
@@ -295,6 +306,15 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
                }
 
                $user = $this->access->userManager->get($uid);
+               if(is_null($user) || ($user instanceof OfflineUser && !$this->userExistsOnLDAP($user->getUID()))) {
+                       throw new NoUserException($uid . ' is not a valid user anymore');
+               }
+               if($user instanceof OfflineUser) {
+                       // apparently this user survived the userExistsOnLDAP check,
+                       // we request the user instance again in order to retrieve a User
+                       // instance instead
+                       $user = $this->access->userManager->get($uid);
+               }
                $path = $user->getHomePath();
                $this->access->cacheUserHome($uid, $path);