]> source.dussan.org Git - nextcloud-server.git/commitdiff
Correctly apply quota
authorJuan Pablo Villafáñez <jvillafanez@solidgear.es>
Tue, 14 Mar 2017 13:07:33 +0000 (14:07 +0100)
committerArthur Schiwon <blizzz@arthur-schiwon.de>
Wed, 29 Mar 2017 11:32:11 +0000 (13:32 +0200)
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
apps/user_ldap/lib/User/User.php

index e29b10616ca59aef21146c6ed2261616a05d1d1d..7a840de87f64220676712e3d321bdc5db51c083f 100644 (file)
@@ -169,6 +169,10 @@ class User {
                $attr = strtolower($this->connection->ldapQuotaAttribute);
                if(isset($ldapEntry[$attr])) {
                        $this->updateQuota($ldapEntry[$attr][0]);
+               } else {
+                       if ($this->connection->ldapQuotaDefault !== '') {
+                               $this->updateQuota();
+                       }
                }
                unset($attr);
 
@@ -464,25 +468,48 @@ class User {
                if($this->wasRefreshed('quota')) {
                        return;
                }
-               //can be null
-               $quotaDefault = $this->connection->ldapQuotaDefault;
-               $quota = $quotaDefault !== '' ? $quotaDefault : null;
-               $quota = !is_null($valueFromLDAP) ? $valueFromLDAP : $quota;
 
+               $quota = false;
                if(is_null($valueFromLDAP)) {
                        $quotaAttribute = $this->connection->ldapQuotaAttribute;
                        if ($quotaAttribute !== '') {
                                $aQuota = $this->access->readAttribute($this->dn, $quotaAttribute);
                                if($aQuota && (count($aQuota) > 0)) {
-                                       $quota = $aQuota[0];
+                                       if ($this->verifyQuotaValue($aQuota[0])) {
+                                               $quota = $aQuota[0];
+                                       } else {
+                                               $this->log->log('not suitable LDAP quota found for user ' . $this->uid . ': [' . $aQuota[0] . ']', \OCP\Util::WARN);
+                                       }
                                }
                        }
+               } else {
+                       if ($this->verifyQuotaValue($valueFromLDAP)) {
+                               $quota = $valueFromLDAP;
+                       } else {
+                               $this->log->log('not suitable LDAP quota found for user ' . $this->uid . ': [' . $valueFromLDAP . ']', \OCP\Util::WARN);
+                       }
+               }
+
+               if ($quota === false) {
+                       // quota not found using the LDAP attribute (or not parseable). Try the default quota
+                       $defaultQuota = $this->connection->ldapQuotaDefault;
+                       if ($this->verifyQuotaValue($defaultQuota)) {
+                               $quota = $defaultQuota;
+                       }
                }
-               if(!is_null($quota)) {
+
+               if($quota !== false) {
                        $this->userManager->get($this->uid)->setQuota($quota);
+               } else {
+                       $this->log->log('not suitable default quota found for user ' . $this->uid . ': [' . $defaultQuota . ']', \OCP\Util::WARN);
+                       $this->userManager->get($this->uid)->setQuota('default');
                }
        }
 
+       private function verifyQuotaValue($quotaValue) {
+               return $quotaValue === 'none' || $quotaValue === 'default' || \OC_Helper::computerFileSize($quotaValue) !== false;
+       }
+
        /**
         * called by a post_login hook to save the avatar picture
         *