diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/l10n/nn_NO.js | 7 | ||||
-rw-r--r-- | lib/l10n/nn_NO.json | 7 | ||||
-rw-r--r-- | lib/private/App/AppStore/Bundles/HubBundle.php | 4 | ||||
-rw-r--r-- | lib/private/Authentication/Listeners/UserDeletedFilesCleanupListener.php | 2 | ||||
-rw-r--r-- | lib/private/Comments/Manager.php | 2 | ||||
-rw-r--r-- | lib/private/Http/Client/LocalAddressChecker.php | 16 | ||||
-rw-r--r-- | lib/private/Share20/DefaultShareProvider.php | 28 | ||||
-rw-r--r-- | lib/private/Share20/Manager.php | 6 | ||||
-rw-r--r-- | lib/public/AppFramework/Db/Entity.php | 3 | ||||
-rw-r--r-- | lib/public/Share/IManager.php | 3 | ||||
-rw-r--r-- | lib/public/Share/IShareProvider.php | 3 |
11 files changed, 60 insertions, 21 deletions
diff --git a/lib/l10n/nn_NO.js b/lib/l10n/nn_NO.js index 33a31973071..924adc60a85 100644 --- a/lib/l10n/nn_NO.js +++ b/lib/l10n/nn_NO.js @@ -1,6 +1,7 @@ OC.L10N.register( "lib", { + "Authentication" : "Godkjenning", "Unknown filetype" : "Ukjend filtype", "Invalid image" : "Ugyldig bilete", "today" : "i dag", @@ -13,9 +14,10 @@ OC.L10N.register( "_%n hour ago_::_%n hours ago_" : ["%n time sidan","%n timar sidan"], "_%n minute ago_::_%n minutes ago_" : ["%n minutt sidan","%n minutt sidan"], "seconds ago" : "sekund sidan", + "File name is too long" : "Filnamnet er for langt", "__language_name__" : "Nynorsk", "Help" : "Hjelp", - "Apps" : "Program", + "Apps" : "Appar", "Settings" : "Instillingar", "Log out" : "Logg ut", "Users" : "Brukarar", @@ -27,6 +29,7 @@ OC.L10N.register( "Full name" : "Fult namn", "Unknown user" : "Ukjend brukar", "Additional settings" : "Tilleggsinnstillingar", + "Set an admin password." : "Vel eit admin-passord.", "Open »%s«" : "Opna »%s«", "Sunday" : "Søndag", "Monday" : "Måndag", @@ -75,6 +78,8 @@ OC.L10N.register( "Dec." : "Des.", "A valid username must be provided" : "Du må oppgje eit gyldig brukarnamn", "A valid password must be provided" : "Du må oppgje eit gyldig passord", + "User disabled" : "Brukar deaktivert", + "Login canceled by app" : "Innlogging avbroten av app", "Authentication error" : "Feil i autentisering" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/nn_NO.json b/lib/l10n/nn_NO.json index 53b50337a17..219148e7b1b 100644 --- a/lib/l10n/nn_NO.json +++ b/lib/l10n/nn_NO.json @@ -1,4 +1,5 @@ { "translations": { + "Authentication" : "Godkjenning", "Unknown filetype" : "Ukjend filtype", "Invalid image" : "Ugyldig bilete", "today" : "i dag", @@ -11,9 +12,10 @@ "_%n hour ago_::_%n hours ago_" : ["%n time sidan","%n timar sidan"], "_%n minute ago_::_%n minutes ago_" : ["%n minutt sidan","%n minutt sidan"], "seconds ago" : "sekund sidan", + "File name is too long" : "Filnamnet er for langt", "__language_name__" : "Nynorsk", "Help" : "Hjelp", - "Apps" : "Program", + "Apps" : "Appar", "Settings" : "Instillingar", "Log out" : "Logg ut", "Users" : "Brukarar", @@ -25,6 +27,7 @@ "Full name" : "Fult namn", "Unknown user" : "Ukjend brukar", "Additional settings" : "Tilleggsinnstillingar", + "Set an admin password." : "Vel eit admin-passord.", "Open »%s«" : "Opna »%s«", "Sunday" : "Søndag", "Monday" : "Måndag", @@ -73,6 +76,8 @@ "Dec." : "Des.", "A valid username must be provided" : "Du må oppgje eit gyldig brukarnamn", "A valid password must be provided" : "Du må oppgje eit gyldig passord", + "User disabled" : "Brukar deaktivert", + "Login canceled by app" : "Innlogging avbroten av app", "Authentication error" : "Feil i autentisering" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/private/App/AppStore/Bundles/HubBundle.php b/lib/private/App/AppStore/Bundles/HubBundle.php index a52de1dfbd4..d5d236a1855 100644 --- a/lib/private/App/AppStore/Bundles/HubBundle.php +++ b/lib/private/App/AppStore/Bundles/HubBundle.php @@ -39,8 +39,8 @@ class HubBundle extends Bundle { 'mail', ]; - $architecture = php_uname('m'); - if (PHP_OS_FAMILY === 'Linux' && in_array($architecture, ['x86_64', 'aarch64'])) { + $architecture = function_exists('php_uname') ? php_uname('m') : null; + if (isset($architecture) && PHP_OS_FAMILY === 'Linux' && in_array($architecture, ['x86_64', 'aarch64'])) { $hubApps[] = 'richdocuments'; $hubApps[] = 'richdocumentscode' . ($architecture === 'aarch64' ? '_arm64' : ''); } diff --git a/lib/private/Authentication/Listeners/UserDeletedFilesCleanupListener.php b/lib/private/Authentication/Listeners/UserDeletedFilesCleanupListener.php index 2fb05159d09..5e657be0763 100644 --- a/lib/private/Authentication/Listeners/UserDeletedFilesCleanupListener.php +++ b/lib/private/Authentication/Listeners/UserDeletedFilesCleanupListener.php @@ -72,12 +72,12 @@ class UserDeletedFilesCleanupListener implements IEventListener { } $storage = $this->homeStorageCache[$event->getUser()->getUID()]; $cache = $storage->getCache(); + $storage->rmdir(''); if ($cache instanceof Cache) { $cache->clear(); } else { throw new \Exception("Home storage has invalid cache"); } - $storage->rmdir(''); } } } diff --git a/lib/private/Comments/Manager.php b/lib/private/Comments/Manager.php index b82df1bccc8..53603e51e56 100644 --- a/lib/private/Comments/Manager.php +++ b/lib/private/Comments/Manager.php @@ -1652,7 +1652,7 @@ class Manager implements ICommentsManager { public function deleteCommentsExpiredAtObject(string $objectType, string $objectId = ''): bool { $qb = $this->dbConn->getQueryBuilder(); $qb->delete('comments') - ->where($qb->expr()->lt('expire_date', + ->where($qb->expr()->lte('expire_date', $qb->createNamedParameter($this->timeFactory->getDateTime(), IQueryBuilder::PARAM_DATE))) ->andWhere($qb->expr()->eq('object_type', $qb->createNamedParameter($objectType))); diff --git a/lib/private/Http/Client/LocalAddressChecker.php b/lib/private/Http/Client/LocalAddressChecker.php index c69d1007a16..f4fea503ab9 100644 --- a/lib/private/Http/Client/LocalAddressChecker.php +++ b/lib/private/Http/Client/LocalAddressChecker.php @@ -27,6 +27,7 @@ namespace OC\Http\Client; use OCP\Http\Client\LocalServerException; use Psr\Log\LoggerInterface; +use Symfony\Component\HttpFoundation\IpUtils; class LocalAddressChecker { private LoggerInterface $logger; @@ -36,7 +37,16 @@ class LocalAddressChecker { } public function ThrowIfLocalIp(string $ip) : void { - if ((bool)filter_var($ip, FILTER_VALIDATE_IP) && !filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { + $localRanges = [ + '100.64.0.0/10', // See RFC 6598 + '192.0.0.0/24', // See RFC 6890 + ]; + if ( + (bool)filter_var($ip, FILTER_VALIDATE_IP) && + ( + !filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) || + IpUtils::checkIp($ip, $localRanges) + )) { $this->logger->warning("Host $ip was not connected to because it violates local access rules"); throw new LocalServerException('Host violates local access rules'); } @@ -46,7 +56,9 @@ class LocalAddressChecker { $delimiter = strrpos($ip, ':'); // Get last colon $ipv4Address = substr($ip, $delimiter + 1); - if (!filter_var($ipv4Address, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { + if ( + !filter_var($ipv4Address, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) || + IpUtils::checkIp($ip, $localRanges)) { $this->logger->warning("Host $ip was not connected to because it violates local access rules"); throw new LocalServerException('Host violates local access rules'); } diff --git a/lib/private/Share20/DefaultShareProvider.php b/lib/private/Share20/DefaultShareProvider.php index 520bd17d3cf..7719a1e6be3 100644 --- a/lib/private/Share20/DefaultShareProvider.php +++ b/lib/private/Share20/DefaultShareProvider.php @@ -641,9 +641,12 @@ class DefaultShareProvider implements IShareProvider { return $share; } - public function getSharesInFolder($userId, Folder $node, $reshares) { + public function getSharesInFolder($userId, Folder $node, $reshares, $shallow = true) { $qb = $this->dbConn->getQueryBuilder(); - $qb->select('*') + $qb->select('s.*', + 'f.fileid', 'f.path', 'f.permissions AS f_permissions', 'f.storage', 'f.path_hash', + 'f.parent AS f_parent', 'f.name', 'f.mimetype', 'f.mimepart', 'f.size', 'f.mtime', 'f.storage_mtime', + 'f.encrypted', 'f.unencrypted_size', 'f.etag', 'f.checksum') ->from('share', 's') ->andWhere($qb->expr()->orX( $qb->expr()->eq('item_type', $qb->createNamedParameter('file')), @@ -679,12 +682,21 @@ class DefaultShareProvider implements IShareProvider { }, $childMountNodes); $qb->innerJoin('s', 'filecache', 'f', $qb->expr()->eq('s.file_source', 'f.fileid')); - $qb->andWhere( - $qb->expr()->orX( - $qb->expr()->eq('f.parent', $qb->createNamedParameter($node->getId())), - $qb->expr()->in('f.fileid', $qb->createParameter('chunk')) - ) - ); + if ($shallow) { + $qb->andWhere( + $qb->expr()->orX( + $qb->expr()->eq('f.parent', $qb->createNamedParameter($node->getId())), + $qb->expr()->in('f.fileid', $qb->createParameter('chunk')) + ) + ); + } else { + $qb->andWhere( + $qb->expr()->orX( + $qb->expr()->like('f.path', $qb->createNamedParameter($this->dbConn->escapeLikeParameter($node->getInternalPath()) . '/%')), + $qb->expr()->in('f.fileid', $qb->createParameter('chunk')) + ) + ); + } $qb->orderBy('id'); diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index 905a006372f..46f256df54d 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -1303,11 +1303,11 @@ class Manager implements IManager { return $provider->move($share, $recipientId); } - public function getSharesInFolder($userId, Folder $node, $reshares = false) { + public function getSharesInFolder($userId, Folder $node, $reshares = false, $shallow = true) { $providers = $this->factory->getAllProviders(); - return array_reduce($providers, function ($shares, IShareProvider $provider) use ($userId, $node, $reshares) { - $newShares = $provider->getSharesInFolder($userId, $node, $reshares); + return array_reduce($providers, function ($shares, IShareProvider $provider) use ($userId, $node, $reshares, $shallow) { + $newShares = $provider->getSharesInFolder($userId, $node, $reshares, $shallow); foreach ($newShares as $fid => $data) { if (!isset($shares[$fid])) { $shares[$fid] = []; diff --git a/lib/public/AppFramework/Db/Entity.php b/lib/public/AppFramework/Db/Entity.php index a059e3a27b0..dcd1c77c042 100644 --- a/lib/public/AppFramework/Db/Entity.php +++ b/lib/public/AppFramework/Db/Entity.php @@ -113,6 +113,9 @@ abstract class Entity { $type = $this->_fieldTypes[$name]; if ($type === 'blob') { // (B)LOB is treated as string when we read from the DB + if (is_resource($args[0])) { + $args[0] = stream_get_contents($args[0]); + } $type = 'string'; } diff --git a/lib/public/Share/IManager.php b/lib/public/Share/IManager.php index f207ca87a2c..0810acc673a 100644 --- a/lib/public/Share/IManager.php +++ b/lib/public/Share/IManager.php @@ -135,10 +135,11 @@ interface IManager { * @param string $userId * @param Folder $node * @param bool $reshares + * @param bool $shallow Whether the method should stop at the first level, or look into sub-folders. * @return IShare[][] [$fileId => IShare[], ...] * @since 11.0.0 */ - public function getSharesInFolder($userId, Folder $node, $reshares = false); + public function getSharesInFolder($userId, Folder $node, $reshares = false, $shallow = true); /** * Get shares shared by (initiated) by the provided user. diff --git a/lib/public/Share/IShareProvider.php b/lib/public/Share/IShareProvider.php index 6af513360fe..c549592d6f6 100644 --- a/lib/public/Share/IShareProvider.php +++ b/lib/public/Share/IShareProvider.php @@ -123,10 +123,11 @@ interface IShareProvider { * @param string $userId * @param Folder $node * @param bool $reshares Also get the shares where $user is the owner instead of just the shares where $user is the initiator + * @param bool $shallow Whether the method should stop at the first level, or look into sub-folders. * @return \OCP\Share\IShare[][] * @since 11.0.0 */ - public function getSharesInFolder($userId, Folder $node, $reshares); + public function getSharesInFolder($userId, Folder $node, $reshares, $shallow = true); /** * Get all shares by the given user |