Remove the upload and memory setting
* Remove unneeded private method phpFileSize() * Bump autoloader * Remove setUploadLimit tests * Remove integrity check hacks for upload limit Signed-off-by: Joas Schilling <coding@schilljs.com> Signed-off-by: Morris Jobke <hey@morrisjobke.de>
This commit is contained in:
parent
814bf0de20
commit
c6a69ba925
19 changed files with 7 additions and 649 deletions
|
@ -31,9 +31,6 @@
|
||||||
</FilesMatch>
|
</FilesMatch>
|
||||||
</IfModule>
|
</IfModule>
|
||||||
<IfModule mod_php7.c>
|
<IfModule mod_php7.c>
|
||||||
php_value upload_max_filesize 511M
|
|
||||||
php_value post_max_size 511M
|
|
||||||
php_value memory_limit 512M
|
|
||||||
php_value mbstring.func_overload 0
|
php_value mbstring.func_overload 0
|
||||||
php_value default_charset 'UTF-8'
|
php_value default_charset 'UTF-8'
|
||||||
php_value output_buffering 0
|
php_value output_buffering 0
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
upload_max_filesize=511M
|
|
||||||
post_max_size=511M
|
|
||||||
memory_limit=512M
|
|
||||||
mbstring.func_overload=0
|
mbstring.func_overload=0
|
||||||
always_populate_raw_post_data=-1
|
always_populate_raw_post_data=-1
|
||||||
default_charset='UTF-8'
|
default_charset='UTF-8'
|
||||||
|
|
|
@ -35,10 +35,6 @@
|
||||||
<command>OCA\Files\Command\ScanAppData</command>
|
<command>OCA\Files\Command\ScanAppData</command>
|
||||||
</commands>
|
</commands>
|
||||||
|
|
||||||
<settings>
|
|
||||||
<admin>OCA\Files\Settings\Admin</admin>
|
|
||||||
</settings>
|
|
||||||
|
|
||||||
<activity>
|
<activity>
|
||||||
<settings>
|
<settings>
|
||||||
<setting>OCA\Files\Activity\Settings\FavoriteAction</setting>
|
<setting>OCA\Files\Activity\Settings\FavoriteAction</setting>
|
||||||
|
|
|
@ -76,11 +76,6 @@ $application->registerRoutes(
|
||||||
'url' => '/',
|
'url' => '/',
|
||||||
'verb' => 'GET',
|
'verb' => 'GET',
|
||||||
],
|
],
|
||||||
[
|
|
||||||
'name' => 'settings#setMaxUploadSize',
|
|
||||||
'url' => '/settings/maxUpload',
|
|
||||||
'verb' => 'POST',
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
'name' => 'ajax#getStorageStats',
|
'name' => 'ajax#getStorageStats',
|
||||||
'url' => '/ajax/getstoragestats.php',
|
'url' => '/ajax/getstoragestats.php',
|
||||||
|
|
|
@ -31,9 +31,7 @@ return array(
|
||||||
'OCA\\Files\\Command\\TransferOwnership' => $baseDir . '/../lib/Command/TransferOwnership.php',
|
'OCA\\Files\\Command\\TransferOwnership' => $baseDir . '/../lib/Command/TransferOwnership.php',
|
||||||
'OCA\\Files\\Controller\\AjaxController' => $baseDir . '/../lib/Controller/AjaxController.php',
|
'OCA\\Files\\Controller\\AjaxController' => $baseDir . '/../lib/Controller/AjaxController.php',
|
||||||
'OCA\\Files\\Controller\\ApiController' => $baseDir . '/../lib/Controller/ApiController.php',
|
'OCA\\Files\\Controller\\ApiController' => $baseDir . '/../lib/Controller/ApiController.php',
|
||||||
'OCA\\Files\\Controller\\SettingsController' => $baseDir . '/../lib/Controller/SettingsController.php',
|
|
||||||
'OCA\\Files\\Controller\\ViewController' => $baseDir . '/../lib/Controller/ViewController.php',
|
'OCA\\Files\\Controller\\ViewController' => $baseDir . '/../lib/Controller/ViewController.php',
|
||||||
'OCA\\Files\\Helper' => $baseDir . '/../lib/Helper.php',
|
'OCA\\Files\\Helper' => $baseDir . '/../lib/Helper.php',
|
||||||
'OCA\\Files\\Service\\TagService' => $baseDir . '/../lib/Service/TagService.php',
|
'OCA\\Files\\Service\\TagService' => $baseDir . '/../lib/Service/TagService.php',
|
||||||
'OCA\\Files\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -46,11 +46,9 @@ class ComposerStaticInitFiles
|
||||||
'OCA\\Files\\Command\\TransferOwnership' => __DIR__ . '/..' . '/../lib/Command/TransferOwnership.php',
|
'OCA\\Files\\Command\\TransferOwnership' => __DIR__ . '/..' . '/../lib/Command/TransferOwnership.php',
|
||||||
'OCA\\Files\\Controller\\AjaxController' => __DIR__ . '/..' . '/../lib/Controller/AjaxController.php',
|
'OCA\\Files\\Controller\\AjaxController' => __DIR__ . '/..' . '/../lib/Controller/AjaxController.php',
|
||||||
'OCA\\Files\\Controller\\ApiController' => __DIR__ . '/..' . '/../lib/Controller/ApiController.php',
|
'OCA\\Files\\Controller\\ApiController' => __DIR__ . '/..' . '/../lib/Controller/ApiController.php',
|
||||||
'OCA\\Files\\Controller\\SettingsController' => __DIR__ . '/..' . '/../lib/Controller/SettingsController.php',
|
|
||||||
'OCA\\Files\\Controller\\ViewController' => __DIR__ . '/..' . '/../lib/Controller/ViewController.php',
|
'OCA\\Files\\Controller\\ViewController' => __DIR__ . '/..' . '/../lib/Controller/ViewController.php',
|
||||||
'OCA\\Files\\Helper' => __DIR__ . '/..' . '/../lib/Helper.php',
|
'OCA\\Files\\Helper' => __DIR__ . '/..' . '/../lib/Helper.php',
|
||||||
'OCA\\Files\\Service\\TagService' => __DIR__ . '/..' . '/../lib/Service/TagService.php',
|
'OCA\\Files\\Service\\TagService' => __DIR__ . '/..' . '/../lib/Service/TagService.php',
|
||||||
'OCA\\Files\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
public static function getInitializer(ClassLoader $loader)
|
public static function getInitializer(ClassLoader $loader)
|
||||||
|
|
|
@ -1,70 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2014
|
|
||||||
*
|
|
||||||
* This file is licensed under the Affero General Public License version 3
|
|
||||||
* or later.
|
|
||||||
*
|
|
||||||
* See the COPYING-README file.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
if (!OCA.Files) {
|
|
||||||
/**
|
|
||||||
* Namespace for the files app
|
|
||||||
* @namespace OCA.Files
|
|
||||||
*/
|
|
||||||
OCA.Files = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @namespace OCA.Files.Admin
|
|
||||||
*/
|
|
||||||
OCA.Files.Admin = {
|
|
||||||
initialize: function() {
|
|
||||||
$('#submitMaxUpload').on('click', _.bind(this._onClickSubmitMaxUpload, this));
|
|
||||||
},
|
|
||||||
|
|
||||||
_onClickSubmitMaxUpload: function () {
|
|
||||||
OC.msg.startSaving('#maxUploadSizeSettingsMsg');
|
|
||||||
|
|
||||||
var request = $.ajax({
|
|
||||||
url: OC.generateUrl('/apps/files/settings/maxUpload'),
|
|
||||||
type: 'POST',
|
|
||||||
data: {
|
|
||||||
maxUploadSize: $('#maxUploadSize').val()
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
request.done(function (data) {
|
|
||||||
$('#maxUploadSize').val(data.maxUploadSize);
|
|
||||||
OC.msg.finishedSuccess('#maxUploadSizeSettingsMsg', 'Saved');
|
|
||||||
});
|
|
||||||
|
|
||||||
request.fail(function () {
|
|
||||||
OC.msg.finishedError('#maxUploadSizeSettingsMsg', 'Error');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
|
|
||||||
function switchPublicFolder() {
|
|
||||||
var publicEnable = $('#publicEnable').is(':checked');
|
|
||||||
// find all radiobuttons of that group
|
|
||||||
var sharingaimGroup = $('input:radio[name=sharingaim]');
|
|
||||||
$.each(sharingaimGroup, function(index, sharingaimItem) {
|
|
||||||
// set all buttons to the correct state
|
|
||||||
sharingaimItem.disabled = !publicEnable;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
$(document).ready(function() {
|
|
||||||
OCA.Files.Admin.initialize();
|
|
||||||
|
|
||||||
// Execute the function after loading DOM tree
|
|
||||||
switchPublicFolder();
|
|
||||||
$('#publicEnable').click(function() {
|
|
||||||
// To get rid of onClick()
|
|
||||||
switchPublicFolder();
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,51 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
|
||||||
*
|
|
||||||
* @license GNU AGPL version 3 or any later version
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License as
|
|
||||||
* published by the Free Software Foundation, either version 3 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
namespace OCA\Files\Controller;
|
|
||||||
|
|
||||||
use OCP\AppFramework\Controller;
|
|
||||||
use OCP\AppFramework\Http;
|
|
||||||
use OCP\AppFramework\Http\JSONResponse;
|
|
||||||
use OCP\IRequest;
|
|
||||||
use OCP\Util;
|
|
||||||
|
|
||||||
class SettingsController extends Controller {
|
|
||||||
public function __construct($appName, IRequest $request) {
|
|
||||||
parent::__construct($appName, $request);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $maxUploadSize
|
|
||||||
* @return JSONResponse
|
|
||||||
*/
|
|
||||||
public function setMaxUploadSize($maxUploadSize) {
|
|
||||||
$setMaxSize = \OC_Files::setUploadLimit(Util::computerFileSize($maxUploadSize));
|
|
||||||
|
|
||||||
if ($setMaxSize === false) {
|
|
||||||
return new JSONResponse([], Http::STATUS_BAD_REQUEST);
|
|
||||||
} else {
|
|
||||||
return new JSONResponse([
|
|
||||||
'maxUploadSize' => Util::humanFileSize($setMaxSize)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,87 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de>
|
|
||||||
*
|
|
||||||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
|
|
||||||
* @author Joas Schilling <coding@schilljs.com>
|
|
||||||
*
|
|
||||||
* @license GNU AGPL version 3 or any later version
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License as
|
|
||||||
* published by the Free Software Foundation, either version 3 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace OCA\Files\Settings;
|
|
||||||
|
|
||||||
use bantu\IniGetWrapper\IniGetWrapper;
|
|
||||||
use OCP\AppFramework\Http\TemplateResponse;
|
|
||||||
use OCP\IRequest;
|
|
||||||
use OCP\Settings\ISettings;
|
|
||||||
use OCP\Util;
|
|
||||||
|
|
||||||
class Admin implements ISettings {
|
|
||||||
|
|
||||||
/** @var IniGetWrapper */
|
|
||||||
private $iniWrapper;
|
|
||||||
|
|
||||||
/** @var IRequest */
|
|
||||||
private $request;
|
|
||||||
|
|
||||||
public function __construct(IniGetWrapper $iniWrapper, IRequest $request) {
|
|
||||||
$this->iniWrapper = $iniWrapper;
|
|
||||||
$this->request = $request;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return TemplateResponse
|
|
||||||
*/
|
|
||||||
public function getForm() {
|
|
||||||
$htaccessWorking = (getenv('htaccessWorking') === 'true');
|
|
||||||
$htaccessWritable = is_writable(\OC::$SERVERROOT.'/.htaccess');
|
|
||||||
$userIniWritable = is_writable(\OC::$SERVERROOT.'/.user.ini');
|
|
||||||
|
|
||||||
$upload_max_filesize = $this->iniWrapper->getBytes('upload_max_filesize');
|
|
||||||
$post_max_size = $this->iniWrapper->getBytes('post_max_size');
|
|
||||||
$maxUploadFilesize = Util::humanFileSize(min($upload_max_filesize, $post_max_size));
|
|
||||||
|
|
||||||
$parameters = [
|
|
||||||
'uploadChangable' => ($htaccessWorking and $htaccessWritable) or $userIniWritable,
|
|
||||||
'uploadMaxFilesize' => $maxUploadFilesize,
|
|
||||||
// max possible makes only sense on a 32 bit system
|
|
||||||
'displayMaxPossibleUploadSize' => PHP_INT_SIZE === 4,
|
|
||||||
'maxPossibleUploadSize' => Util::humanFileSize(PHP_INT_MAX),
|
|
||||||
];
|
|
||||||
|
|
||||||
return new TemplateResponse('files', 'admin', $parameters, '');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string the section ID, e.g. 'sharing'
|
|
||||||
*/
|
|
||||||
public function getSection() {
|
|
||||||
return 'server';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return int whether the form should be rather on the top or bottom of
|
|
||||||
* the admin section. The forms are arranged in ascending order of the
|
|
||||||
* priority values. It is required to return a value between 0 and 100.
|
|
||||||
*
|
|
||||||
* E.g.: 70
|
|
||||||
*/
|
|
||||||
public function getPriority() {
|
|
||||||
return 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
<?php OCP\Util::addScript('files', 'admin'); ?>
|
|
||||||
|
|
||||||
<div class="section">
|
|
||||||
<h2><?php p($l->t('File handling')); ?></h2>
|
|
||||||
<label for="maxUploadSize"><?php p($l->t( 'Maximum upload size' )); ?> </label>
|
|
||||||
<span id="maxUploadSizeSettingsMsg" class="msg"></span>
|
|
||||||
<br />
|
|
||||||
<input type="text" name='maxUploadSize' id="maxUploadSize" value='<?php p($_['uploadMaxFilesize']) ?>' <?php if(!$_['uploadChangable']) { p('disabled'); } ?> />
|
|
||||||
<?php if($_['displayMaxPossibleUploadSize']):?>
|
|
||||||
(<?php p($l->t('max. possible: ')); p($_['maxPossibleUploadSize']) ?>)
|
|
||||||
<?php endif;?>
|
|
||||||
<input type="hidden" value="<?php p($_['requesttoken']); ?>" name="requesttoken" />
|
|
||||||
<?php if($_['uploadChangable']): ?>
|
|
||||||
<input type="submit" id="submitMaxUpload"
|
|
||||||
value="<?php p($l->t( 'Save' )); ?>"/>
|
|
||||||
<p><em><?php p($l->t('With PHP-FPM it might take 5 minutes for changes to be applied.')); ?></em></p>
|
|
||||||
<?php else: ?>
|
|
||||||
<p><em><?php p($l->t('Missing permissions to edit from here.')); ?></em></p>
|
|
||||||
<?php endif; ?>
|
|
||||||
</div>
|
|
|
@ -1,84 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
|
|
||||||
*
|
|
||||||
* @author Lukas Reschke <lukas@statuscode.ch>
|
|
||||||
* @author Morris Jobke <hey@morrisjobke.de>
|
|
||||||
*
|
|
||||||
* @license GNU AGPL version 3 or any later version
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License as
|
|
||||||
* published by the Free Software Foundation, either version 3 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace OCA\Files\Tests\Settings;
|
|
||||||
|
|
||||||
use bantu\IniGetWrapper\IniGetWrapper;
|
|
||||||
use OCA\Files\Settings\Admin;
|
|
||||||
use OCP\AppFramework\Http\TemplateResponse;
|
|
||||||
use OCP\IRequest;
|
|
||||||
use OCP\Util;
|
|
||||||
use Test\TestCase;
|
|
||||||
|
|
||||||
class AdminTest extends TestCase {
|
|
||||||
/** @var Admin */
|
|
||||||
private $admin;
|
|
||||||
/** @var IniGetWrapper */
|
|
||||||
private $iniGetWrapper;
|
|
||||||
/** @var IRequest */
|
|
||||||
private $request;
|
|
||||||
|
|
||||||
public function setUp() {
|
|
||||||
parent::setUp();
|
|
||||||
$this->iniGetWrapper = $this->getMockBuilder('\bantu\IniGetWrapper\IniGetWrapper')->disableOriginalConstructor()->getMock();
|
|
||||||
$this->request = $this->getMockBuilder(IRequest::class)->getMock();
|
|
||||||
$this->admin = new Admin(
|
|
||||||
$this->iniGetWrapper,
|
|
||||||
$this->request
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetForm() {
|
|
||||||
$htaccessWorking = (getenv('htaccessWorking') == 'true');
|
|
||||||
$htaccessWritable = is_writable(\OC::$SERVERROOT.'/.htaccess');
|
|
||||||
$userIniWritable = is_writable(\OC::$SERVERROOT.'/.user.ini');
|
|
||||||
|
|
||||||
$this->iniGetWrapper
|
|
||||||
->expects($this->at(0))
|
|
||||||
->method('getBytes')
|
|
||||||
->with('upload_max_filesize')
|
|
||||||
->willReturn(1234);
|
|
||||||
$this->iniGetWrapper
|
|
||||||
->expects($this->at(1))
|
|
||||||
->method('getBytes')
|
|
||||||
->with('post_max_size')
|
|
||||||
->willReturn(1234);
|
|
||||||
$params = [
|
|
||||||
'uploadChangable' => (($htaccessWorking and $htaccessWritable) or $userIniWritable ),
|
|
||||||
'uploadMaxFilesize' => '1 KB',
|
|
||||||
'displayMaxPossibleUploadSize' => PHP_INT_SIZE === 4,
|
|
||||||
'maxPossibleUploadSize' => Util::humanFileSize(PHP_INT_MAX),
|
|
||||||
];
|
|
||||||
$expected = new TemplateResponse('files', 'admin', $params, '');
|
|
||||||
$this->assertEquals($expected, $this->admin->getForm());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetSection() {
|
|
||||||
$this->assertSame('server', $this->admin->getSection());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetPriority() {
|
|
||||||
$this->assertSame(5, $this->admin->getPriority());
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -158,8 +158,6 @@ class Checker {
|
||||||
private function generateHashes(\RecursiveIteratorIterator $iterator,
|
private function generateHashes(\RecursiveIteratorIterator $iterator,
|
||||||
string $path): array {
|
string $path): array {
|
||||||
$hashes = [];
|
$hashes = [];
|
||||||
$copiedWebserverSettingFiles = false;
|
|
||||||
$tmpFolder = '';
|
|
||||||
|
|
||||||
$baseDirectoryLength = \strlen($path);
|
$baseDirectoryLength = \strlen($path);
|
||||||
foreach($iterator as $filename => $data) {
|
foreach($iterator as $filename => $data) {
|
||||||
|
@ -180,36 +178,6 @@ class Checker {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The .user.ini and the .htaccess file of ownCloud can contain some
|
|
||||||
// custom modifications such as for example the maximum upload size
|
|
||||||
// to ensure that this will not lead to false positives this will
|
|
||||||
// copy the file to a temporary folder and reset it to the default
|
|
||||||
// values.
|
|
||||||
if($filename === $this->environmentHelper->getServerRoot() . '/.htaccess'
|
|
||||||
|| $filename === $this->environmentHelper->getServerRoot() . '/.user.ini') {
|
|
||||||
|
|
||||||
if(!$copiedWebserverSettingFiles) {
|
|
||||||
$tmpFolder = rtrim($this->tempManager->getTemporaryFolder(), '/');
|
|
||||||
copy($this->environmentHelper->getServerRoot() . '/.htaccess', $tmpFolder . '/.htaccess');
|
|
||||||
copy($this->environmentHelper->getServerRoot() . '/.user.ini', $tmpFolder . '/.user.ini');
|
|
||||||
\OC_Files::setUploadLimit(
|
|
||||||
\OCP\Util::computerFileSize('511MB'),
|
|
||||||
[
|
|
||||||
'.htaccess' => $tmpFolder . '/.htaccess',
|
|
||||||
'.user.ini' => $tmpFolder . '/.user.ini',
|
|
||||||
]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// The .user.ini file can contain custom modifications to the file size
|
|
||||||
// as well.
|
|
||||||
if($filename === $this->environmentHelper->getServerRoot() . '/.user.ini') {
|
|
||||||
$fileContent = file_get_contents($tmpFolder . '/.user.ini');
|
|
||||||
$hashes[$relativeFileName] = hash('sha512', $fileContent);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The .htaccess file in the root folder of ownCloud can contain
|
// The .htaccess file in the root folder of ownCloud can contain
|
||||||
// custom content after the installation due to the fact that dynamic
|
// custom content after the installation due to the fact that dynamic
|
||||||
// content is written into it at installation time as well. This
|
// content is written into it at installation time as well. This
|
||||||
|
@ -218,7 +186,7 @@ class Checker {
|
||||||
// "#### DO NOT CHANGE ANYTHING ABOVE THIS LINE ####" and have the
|
// "#### DO NOT CHANGE ANYTHING ABOVE THIS LINE ####" and have the
|
||||||
// hash generated based on this.
|
// hash generated based on this.
|
||||||
if($filename === $this->environmentHelper->getServerRoot() . '/.htaccess') {
|
if($filename === $this->environmentHelper->getServerRoot() . '/.htaccess') {
|
||||||
$fileContent = file_get_contents($tmpFolder . '/.htaccess');
|
$fileContent = file_get_contents($filename);
|
||||||
$explodedArray = explode('#### DO NOT CHANGE ANYTHING ABOVE THIS LINE ####', $fileContent);
|
$explodedArray = explode('#### DO NOT CHANGE ANYTHING ABOVE THIS LINE ####', $fileContent);
|
||||||
if(\count($explodedArray) === 2) {
|
if(\count($explodedArray) === 2) {
|
||||||
$hashes[$relativeFileName] = hash('sha512', $explodedArray[0]);
|
$hashes[$relativeFileName] = hash('sha512', $explodedArray[0]);
|
||||||
|
|
|
@ -378,88 +378,6 @@ class OC_Files {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* set the maximum upload size limit for apache hosts using .htaccess
|
|
||||||
*
|
|
||||||
* @param int $size file size in bytes
|
|
||||||
* @param array $files override '.htaccess' and '.user.ini' locations
|
|
||||||
* @return bool|int false on failure, size on success
|
|
||||||
*/
|
|
||||||
public static function setUploadLimit($size, $files = []) {
|
|
||||||
//don't allow user to break his config
|
|
||||||
$size = (int)$size;
|
|
||||||
if ($size < self::UPLOAD_MIN_LIMIT_BYTES) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$size = OC_Helper::phpFileSize($size);
|
|
||||||
|
|
||||||
$phpValueKeys = array(
|
|
||||||
'upload_max_filesize',
|
|
||||||
'post_max_size'
|
|
||||||
);
|
|
||||||
|
|
||||||
// default locations if not overridden by $files
|
|
||||||
$files = array_merge([
|
|
||||||
'.htaccess' => OC::$SERVERROOT . '/.htaccess',
|
|
||||||
'.user.ini' => OC::$SERVERROOT . '/.user.ini'
|
|
||||||
], $files);
|
|
||||||
|
|
||||||
$updateFiles = [
|
|
||||||
$files['.htaccess'] => [
|
|
||||||
'pattern' => '/php_value %1$s (\S)*/',
|
|
||||||
'setting' => 'php_value %1$s %2$s'
|
|
||||||
],
|
|
||||||
$files['.user.ini'] => [
|
|
||||||
'pattern' => '/%1$s=(\S)*/',
|
|
||||||
'setting' => '%1$s=%2$s'
|
|
||||||
]
|
|
||||||
];
|
|
||||||
|
|
||||||
$success = true;
|
|
||||||
|
|
||||||
foreach ($updateFiles as $filename => $patternMap) {
|
|
||||||
// suppress warnings from fopen()
|
|
||||||
$handle = @fopen($filename, 'r+');
|
|
||||||
if (!$handle) {
|
|
||||||
\OCP\Util::writeLog('files',
|
|
||||||
'Can\'t write upload limit to ' . $filename . '. Please check the file permissions',
|
|
||||||
ILogger::WARN);
|
|
||||||
$success = false;
|
|
||||||
continue; // try to update as many files as possible
|
|
||||||
}
|
|
||||||
|
|
||||||
$content = '';
|
|
||||||
while (!feof($handle)) {
|
|
||||||
$content .= fread($handle, 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($phpValueKeys as $key) {
|
|
||||||
$pattern = vsprintf($patternMap['pattern'], [$key]);
|
|
||||||
$setting = vsprintf($patternMap['setting'], [$key, $size]);
|
|
||||||
$hasReplaced = 0;
|
|
||||||
$newContent = preg_replace($pattern, $setting, $content, 2, $hasReplaced);
|
|
||||||
if ($newContent !== null) {
|
|
||||||
$content = $newContent;
|
|
||||||
}
|
|
||||||
if ($hasReplaced === 0) {
|
|
||||||
$content .= "\n" . $setting;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// write file back
|
|
||||||
ftruncate($handle, 0);
|
|
||||||
rewind($handle);
|
|
||||||
fwrite($handle, $content);
|
|
||||||
|
|
||||||
fclose($handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($success) {
|
|
||||||
return OC_Helper::computerFileSize($size);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $dir
|
* @param string $dir
|
||||||
* @param $files
|
* @param $files
|
||||||
|
|
|
@ -86,32 +86,6 @@ class OC_Helper {
|
||||||
return "$bytes PB";
|
return "$bytes PB";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Make a php file size
|
|
||||||
* @param int $bytes file size in bytes
|
|
||||||
* @return string a php parseable file size
|
|
||||||
*
|
|
||||||
* Makes 2048 to 2k and 2^41 to 2048G
|
|
||||||
*/
|
|
||||||
public static function phpFileSize($bytes) {
|
|
||||||
if ($bytes < 0) {
|
|
||||||
return "?";
|
|
||||||
}
|
|
||||||
if ($bytes < 1024) {
|
|
||||||
return $bytes . "B";
|
|
||||||
}
|
|
||||||
$bytes = round($bytes / 1024, 1);
|
|
||||||
if ($bytes < 1024) {
|
|
||||||
return $bytes . "K";
|
|
||||||
}
|
|
||||||
$bytes = round($bytes / 1024, 1);
|
|
||||||
if ($bytes < 1024) {
|
|
||||||
return $bytes . "M";
|
|
||||||
}
|
|
||||||
$bytes = round($bytes / 1024, 1);
|
|
||||||
return $bytes . "G";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make a computer file size
|
* Make a computer file size
|
||||||
* @param string $str file size in human readable format
|
* @param string $str file size in human readable format
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
# Start of valid file
|
# Start of valid file
|
||||||
<IfModule mod_php7.c>
|
<IfModule mod_php7.c>
|
||||||
php_value upload_max_filesize 519M
|
|
||||||
php_value post_max_size 519M
|
|
||||||
php_value memory_limit 512M
|
|
||||||
php_value mbstring.func_overload 0
|
php_value mbstring.func_overload 0
|
||||||
php_value always_populate_raw_post_data -1
|
php_value always_populate_raw_post_data -1
|
||||||
php_value default_charset 'UTF-8'
|
php_value default_charset 'UTF-8'
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
upload_max_filesize=519M
|
|
||||||
post_max_size=519M
|
|
||||||
memory_limit=512M
|
|
||||||
mbstring.func_overload=0
|
|
||||||
always_populate_raw_post_data=-1
|
|
||||||
default_charset='UTF-8'
|
|
||||||
output_buffering=0
|
|
|
@ -1,137 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* @author Robin McCorkell <rmccorkell@karoshi.org.uk>
|
|
||||||
*
|
|
||||||
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
|
||||||
* @license AGPL-3.0
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 3 of the License, or any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public
|
|
||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Test;
|
|
||||||
|
|
||||||
class FilesTest extends \Test\TestCase {
|
|
||||||
|
|
||||||
const UPLOAD_LIMIT_DEFAULT_STR = '511M';
|
|
||||||
const UPLOAD_LIMIT_SETTING_STR = '2M';
|
|
||||||
const UPLOAD_LIMIT_SETTING_BYTES = 2097152;
|
|
||||||
|
|
||||||
/** @var array $tmpDirs */
|
|
||||||
private $tmpDirs = [];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
private function getUploadLimitTestFiles() {
|
|
||||||
$dir = \OC::$server->getTempManager()->getTemporaryFolder();
|
|
||||||
$this->tmpDirs[] = $dir;
|
|
||||||
$result = [
|
|
||||||
'.htaccess' => $dir . '/htaccess',
|
|
||||||
'.user.ini' => $dir . '/user.ini'
|
|
||||||
];
|
|
||||||
copy(\OC::$SERVERROOT . '/tests/data/setUploadLimit/htaccess', $result['.htaccess']);
|
|
||||||
copy(\OC::$SERVERROOT . '/tests/data/setUploadLimit/user.ini', $result['.user.ini']);
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function tearDown() {
|
|
||||||
foreach ($this->tmpDirs as $dir) {
|
|
||||||
\OC_Helper::rmdirr($dir);
|
|
||||||
}
|
|
||||||
parent::tearDown();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSetUploadLimitSizeSanity() {
|
|
||||||
$this->assertFalse(\OC_Files::setUploadLimit(PHP_INT_MAX + 10));
|
|
||||||
$this->assertFalse(\OC_Files::setUploadLimit(\OC_Files::UPLOAD_MIN_LIMIT_BYTES - 10));
|
|
||||||
$this->assertFalse(\OC_Files::setUploadLimit('foobar'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setUploadLimitWriteProvider() {
|
|
||||||
return [
|
|
||||||
[
|
|
||||||
// both files writable
|
|
||||||
true, true,
|
|
||||||
self::UPLOAD_LIMIT_SETTING_BYTES, self::UPLOAD_LIMIT_SETTING_BYTES,
|
|
||||||
self::UPLOAD_LIMIT_SETTING_STR, self::UPLOAD_LIMIT_SETTING_STR
|
|
||||||
],
|
|
||||||
[
|
|
||||||
// neither file writable
|
|
||||||
false, false,
|
|
||||||
self::UPLOAD_LIMIT_SETTING_BYTES, false,
|
|
||||||
self::UPLOAD_LIMIT_DEFAULT_STR, self::UPLOAD_LIMIT_DEFAULT_STR
|
|
||||||
],
|
|
||||||
[
|
|
||||||
// only .htaccess writable
|
|
||||||
true, false,
|
|
||||||
self::UPLOAD_LIMIT_SETTING_BYTES, false,
|
|
||||||
self::UPLOAD_LIMIT_SETTING_STR, self::UPLOAD_LIMIT_DEFAULT_STR
|
|
||||||
],
|
|
||||||
[
|
|
||||||
// only .user.ini writable
|
|
||||||
false, true,
|
|
||||||
self::UPLOAD_LIMIT_SETTING_BYTES, false,
|
|
||||||
self::UPLOAD_LIMIT_DEFAULT_STR, self::UPLOAD_LIMIT_SETTING_STR
|
|
||||||
],
|
|
||||||
[
|
|
||||||
// test rounding of values
|
|
||||||
true, true,
|
|
||||||
self::UPLOAD_LIMIT_SETTING_BYTES + 20, self::UPLOAD_LIMIT_SETTING_BYTES,
|
|
||||||
self::UPLOAD_LIMIT_SETTING_STR, self::UPLOAD_LIMIT_SETTING_STR
|
|
||||||
]
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @dataProvider setUploadLimitWriteProvider
|
|
||||||
*/
|
|
||||||
public function testSetUploadLimitWrite(
|
|
||||||
$htaccessWritable, $userIniWritable,
|
|
||||||
$setSize, $expectedSize,
|
|
||||||
$htaccessStr, $userIniStr
|
|
||||||
) {
|
|
||||||
$this->markTestSkipped('TODO: Disable because fails on drone');
|
|
||||||
|
|
||||||
$files = $this->getUploadLimitTestFiles();
|
|
||||||
chmod($files['.htaccess'], ($htaccessWritable ? 0644 : 0444));
|
|
||||||
chmod($files['.user.ini'], ($userIniWritable ? 0644 : 0444));
|
|
||||||
|
|
||||||
$htaccessSize = filesize($files['.htaccess']);
|
|
||||||
$userIniSize = filesize($files['.user.ini']);
|
|
||||||
$htaccessSizeMod = 2*(strlen($htaccessStr) - strlen(self::UPLOAD_LIMIT_DEFAULT_STR));
|
|
||||||
$userIniSizeMod = 2*(strlen($userIniStr) - strlen(self::UPLOAD_LIMIT_DEFAULT_STR));
|
|
||||||
|
|
||||||
$this->assertEquals($expectedSize, \OC_Files::setUploadLimit($setSize, $files));
|
|
||||||
|
|
||||||
// check file contents
|
|
||||||
$htaccess = file_get_contents($files['.htaccess']);
|
|
||||||
$this->assertEquals(1,
|
|
||||||
preg_match('/php_value upload_max_filesize '.$htaccessStr.'/', $htaccess)
|
|
||||||
);
|
|
||||||
$this->assertEquals(1,
|
|
||||||
preg_match('/php_value post_max_size '.$htaccessStr.'/', $htaccess)
|
|
||||||
);
|
|
||||||
$this->assertEquals($htaccessSize + $htaccessSizeMod, filesize($files['.htaccess']));
|
|
||||||
|
|
||||||
$userIni = file_get_contents($files['.user.ini']);
|
|
||||||
$this->assertEquals(1,
|
|
||||||
preg_match('/upload_max_filesize='.$userIniStr.'/', $userIni)
|
|
||||||
);
|
|
||||||
$this->assertEquals(1,
|
|
||||||
preg_match('/post_max_size='.$userIniStr.'/', $userIni)
|
|
||||||
);
|
|
||||||
$this->assertEquals($userIniSize + $userIniSizeMod, filesize($files['.user.ini']));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -624,14 +624,13 @@ class CheckerTest extends TestCase {
|
||||||
$this->checker->writeCoreSignature($x509, $rsa, \OC::$SERVERROOT . '/tests/data/integritycheck/htaccessWithInvalidModifiedContent/');
|
$this->checker->writeCoreSignature($x509, $rsa, \OC::$SERVERROOT . '/tests/data/integritycheck/htaccessWithInvalidModifiedContent/');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testWriteCoreSignatureWithValidModifiedHtaccessAndUserIni() {
|
public function testWriteCoreSignatureWithValidModifiedHtaccess() {
|
||||||
$expectedSignatureFileData = '{
|
$expectedSignatureFileData = '{
|
||||||
"hashes": {
|
"hashes": {
|
||||||
".htaccess": "04d8d8eaa5893d2c30df955ff25d8f75e4ee7eb7d24f7f28b47e7b1d0cce2c339db47debf8de8c80b3d25b5da4da50128720564a30ad1af8d7106d48e6f07ae8",
|
".htaccess": "7e6a7a4d8ee4f3fbc45dd579407c643471575a9d127d1c75f6d0a49e80766c3c587104b2139ef76d2a4bffce3f45777900605aaa49519c9532909b71e5030227",
|
||||||
".user.ini": "467d4f028c447895716a2b7859ed6e569f8ee34b87b51d73dab2e6a9ca4fbe63172c7be3e365ae864a60408286afcce852dd38ee544b61685ed4ee5e021fecb0",
|
|
||||||
"subfolder\/.htaccess": "2c57b1e25050e11dc3ae975832f378c452159f7b69f818e47eeeafadd6ba568517461dcb4d843b90b906cd7c89d161bc1b89dff8e3ae0eb6f5088508c47befd1"
|
"subfolder\/.htaccess": "2c57b1e25050e11dc3ae975832f378c452159f7b69f818e47eeeafadd6ba568517461dcb4d843b90b906cd7c89d161bc1b89dff8e3ae0eb6f5088508c47befd1"
|
||||||
},
|
},
|
||||||
"signature": "HpDOx2nLrquRkez2BINtfAOyStlzxWKrE8NJtNdj9ZkSA4iV9GVhgnw6e38jH5Ql+mf+d+r5xM0WRgByTul3Z+9gvtv7huAYLSumwxF4g8u42Q3zC+iB6H8nurea7TQy6WOkDl9XSxXv79DqpDsd3kvLTQi4JpYt\/bI8UXo9jcfB13Yp6s4tQLbCLwLcPxGCAifviB+cHsCGvu01ewyVIFSbLeOaIgAxujXZyodDPJCKPLd5ctKfy4t9YHrCG3HYTh\/HdT3N1gJ62tCJDj+EjwpnIdxSl3aAR8wXyxCvhoGxUNe8pvT8Q9TiI5t+eSjZ8wh+4AavA9lFLipukRO\/ZElSj55nsuRPS8PhszN6Ph57mNX1pIKhgaCp6ERhmD3PGsPQAK9Ymj4j6RCJZ06Cj6+ck4Vs+FJSmvVfz2FLleGBM6tfXgHDvbSPebq9zFukCSID7K1p0p07qu4Z1uuZI9JycghrWoVchQYjx1GndizTSaa55JtVY\/c1yLSHXBXlxt7M8Dc26vvGW+Dpn2aVtoG2N0eigyY7KMukgsBy9jUqEI7094kxtdIaCew7lLf0lRqpKEc+RweR+ielfpP+2r3hmVLYHQ+6Cbroht8clfbkEYpRBOGwf9Bg+uqdDqS6EIhKtFE0wp7QzRSiqGT3\/wiS\/UqM5MV1BM3R5JWRH54=",
|
"signature": "YVwQvl9Dh8UebCumfgzFxfz3NiZJLmYG8oJVTfEBhulI4KXBnTG1jZTprf4XxG2XIriEYAZXsoXpu9xWsUFe9QfdncwoEpqJtGq7l6aVDTofX5Be5b03MQFJr4cflgllqW77QZ84D9O9qWF\/vNDAofXcwrzT04CxLDhyQgTCgYUnRjG9pnuP\/gtbDKbTjRvxhTyfg3T0Phv1+XAvpTPnH2q5A+1+LmiqziUJ1sMipsKo+jQP614eCi9qjmqhHIgLRgcuOBvsi4g5WUcdcAIZ6qLt5gm2Y3r6rKNVchosU9ZydMUTfjuejDbVwE2fNH5UUnV57fQBxwg9CfX7iFHqKv1bfv5Zviu12paShgWCB12uR3iH\/3lmTJn8K5Xqit3G4eymFaJ5IChdUThBp\/jhQSI2r8sPcZDYSJ\/UZKuFnezFdKhEBd5hMXe8aKAd6ijGDjLARksFuqpi1sS8llC5K1Q+DzktSL\/o64TY4Vuvykiwe\/BAk2SkL9voOtrvU7vfDBcuCPbDJnSBBC0ESpcXeClTBIn6xZ9WaxqoS7sinE\/kUwtWsRd04I7d79\/ouotyNb+mBhTuRsZT12p\/gn4JHXXNUAIpTwchYzGxbfNJ4kxnYBFZWVmvsSqOLFZu1yi5BP3ktA9yhFyWIa5659azRFEKRdXpVHtQVa4IgdhxEqA=",
|
||||||
"certificate": "-----BEGIN CERTIFICATE-----\r\nMIIEvjCCAqagAwIBAgIUc\/0FxYrsgSs9rDxp03EJmbjN0NwwDQYJKoZIhvcNAQEF\r\nBQAwIzEhMB8GA1UECgwYb3duQ2xvdWQgQ29kZSBTaWduaW5nIENBMB4XDTE1MTEw\r\nMzIxMDMzM1oXDTE2MTEwMzIxMDMzM1owDzENMAsGA1UEAwwEY29yZTCCAiIwDQYJ\r\nKoZIhvcNAQEBBQADggIPADCCAgoCggIBALb6EgHpkAqZbO5vRO8XSh7G7XGWHw5s\r\niOf4RwPXR6SE9bWZEm\/b72SfWk\/\/J6AbrD8WiOzBuT\/ODy6k5T1arEdHO+Pux0W1\r\nMxYJJI4kH74KKgMpC0SB0Rt+8WrMqV1r3hhJ46df6Xr\/xolP3oD+eLbShPcblhdS\r\nVtkZEkoev8Sh6L2wDCeHDyPxzvj1w2dTdGVO9Kztn0xIlyfEBakqvBWtcxyi3Ln0\r\nklnxlMx3tPDUE4kqvpia9qNiB1AN2PV93eNr5\/2riAzIssMFSCarWCx0AKYb54+d\r\nxLpcYFyqPJ0ydBCkF78DD45RCZet6PNYkdzgbqlUWEGGomkuDoJbBg4wzgzO0D77\r\nH87KFhYW8tKFFvF1V3AHl\/sFQ9tDHaxM9Y0pZ2jPp\/ccdiqnmdkBxBDqsiRvHvVB\r\nCn6qpb4vWGFC7vHOBfYspmEL1zLlKXZv3ezMZEZw7O9ZvUP3VO\/wAtd2vUW8UFiq\r\ns2v1QnNLN6jNh51obcwmrBvWhJy9vQIdtIjQbDxqWTHh1zUSrw9wrlklCBZ\/zrM0\r\ni8nfCFwTxWRxp3H9KoECzO\/zS5R5KIS7s3\/wq\/w9T2Ie4rcecgXwDizwnn0C\/aKc\r\nbDIjujpL1s9HO05pcD\/V3wKcPZ1izymBkmMyIbL52iRVN5FTVHeZdXPpFuq+CTQJ\r\nQ238lC+A\/KOVAgMBAAEwDQYJKoZIhvcNAQEFBQADggIBAGoKTnh8RfJV4sQItVC2\r\nAvfJagkrIqZ3iiQTUBQGTKBsTnAqE1H7QgUSV9vSd+8rgvHkyZsRjmtyR1e3A6Ji\r\noNCXUbExC\/0iCPUqdHZIVb+Lc\/vWuv4ByFMybGPydgtLoEUX2ZrKFWmcgZFDUSRd\r\n9Uj26vtUhCC4bU4jgu6hIrR9IuxOBLQUxGTRZyAcXvj7obqRAEZwFAKQgFpfpqTb\r\nH+kjcbZSaAlLVSF7vBc1syyI8RGYbqpwvtREqJtl5IEIwe6huEqJ3zPnlP2th\/55\r\ncf3Fovj6JJgbb9XFxrdnsOsDOu\/tpnaRWlvv5ib4+SzG5wWFT5UUEo4Wg2STQiiX\r\nuVSRQxK1LE1yg84bs3NZk9FSQh4B8vZVuRr5FaJsZZkwlFlhRO\/\/+TJtXRbyNgsf\r\noMRZGi8DLGU2SGEAHcRH\/QZHq\/XDUWVzdxrSBYcy7GSpT7UDVzGv1rEJUrn5veP1\r\n0KmauAqtiIaYRm4f6YBsn0INcZxzIPZ0p8qFtVZBPeHhvQtvOt0iXI\/XUxEWOa2F\r\nK2EqhErgMK\/N07U1JJJay5tYZRtvkGq46oP\/5kQG8hYST0MDK6VihJoPpvCmAm4E\r\npEYKQ96x6A4EH9Y9mZlYozH\/eqmxPbTK8n89\/p7Ydun4rI+B2iiLnY8REWWy6+UQ\r\nV204fGUkJqW5CrKy3P3XvY9X\r\n-----END CERTIFICATE-----"
|
"certificate": "-----BEGIN CERTIFICATE-----\r\nMIIEvjCCAqagAwIBAgIUc\/0FxYrsgSs9rDxp03EJmbjN0NwwDQYJKoZIhvcNAQEF\r\nBQAwIzEhMB8GA1UECgwYb3duQ2xvdWQgQ29kZSBTaWduaW5nIENBMB4XDTE1MTEw\r\nMzIxMDMzM1oXDTE2MTEwMzIxMDMzM1owDzENMAsGA1UEAwwEY29yZTCCAiIwDQYJ\r\nKoZIhvcNAQEBBQADggIPADCCAgoCggIBALb6EgHpkAqZbO5vRO8XSh7G7XGWHw5s\r\niOf4RwPXR6SE9bWZEm\/b72SfWk\/\/J6AbrD8WiOzBuT\/ODy6k5T1arEdHO+Pux0W1\r\nMxYJJI4kH74KKgMpC0SB0Rt+8WrMqV1r3hhJ46df6Xr\/xolP3oD+eLbShPcblhdS\r\nVtkZEkoev8Sh6L2wDCeHDyPxzvj1w2dTdGVO9Kztn0xIlyfEBakqvBWtcxyi3Ln0\r\nklnxlMx3tPDUE4kqvpia9qNiB1AN2PV93eNr5\/2riAzIssMFSCarWCx0AKYb54+d\r\nxLpcYFyqPJ0ydBCkF78DD45RCZet6PNYkdzgbqlUWEGGomkuDoJbBg4wzgzO0D77\r\nH87KFhYW8tKFFvF1V3AHl\/sFQ9tDHaxM9Y0pZ2jPp\/ccdiqnmdkBxBDqsiRvHvVB\r\nCn6qpb4vWGFC7vHOBfYspmEL1zLlKXZv3ezMZEZw7O9ZvUP3VO\/wAtd2vUW8UFiq\r\ns2v1QnNLN6jNh51obcwmrBvWhJy9vQIdtIjQbDxqWTHh1zUSrw9wrlklCBZ\/zrM0\r\ni8nfCFwTxWRxp3H9KoECzO\/zS5R5KIS7s3\/wq\/w9T2Ie4rcecgXwDizwnn0C\/aKc\r\nbDIjujpL1s9HO05pcD\/V3wKcPZ1izymBkmMyIbL52iRVN5FTVHeZdXPpFuq+CTQJ\r\nQ238lC+A\/KOVAgMBAAEwDQYJKoZIhvcNAQEFBQADggIBAGoKTnh8RfJV4sQItVC2\r\nAvfJagkrIqZ3iiQTUBQGTKBsTnAqE1H7QgUSV9vSd+8rgvHkyZsRjmtyR1e3A6Ji\r\noNCXUbExC\/0iCPUqdHZIVb+Lc\/vWuv4ByFMybGPydgtLoEUX2ZrKFWmcgZFDUSRd\r\n9Uj26vtUhCC4bU4jgu6hIrR9IuxOBLQUxGTRZyAcXvj7obqRAEZwFAKQgFpfpqTb\r\nH+kjcbZSaAlLVSF7vBc1syyI8RGYbqpwvtREqJtl5IEIwe6huEqJ3zPnlP2th\/55\r\ncf3Fovj6JJgbb9XFxrdnsOsDOu\/tpnaRWlvv5ib4+SzG5wWFT5UUEo4Wg2STQiiX\r\nuVSRQxK1LE1yg84bs3NZk9FSQh4B8vZVuRr5FaJsZZkwlFlhRO\/\/+TJtXRbyNgsf\r\noMRZGi8DLGU2SGEAHcRH\/QZHq\/XDUWVzdxrSBYcy7GSpT7UDVzGv1rEJUrn5veP1\r\n0KmauAqtiIaYRm4f6YBsn0INcZxzIPZ0p8qFtVZBPeHhvQtvOt0iXI\/XUxEWOa2F\r\nK2EqhErgMK\/N07U1JJJay5tYZRtvkGq46oP\/5kQG8hYST0MDK6VihJoPpvCmAm4E\r\npEYKQ96x6A4EH9Y9mZlYozH\/eqmxPbTK8n89\/p7Ydun4rI+B2iiLnY8REWWy6+UQ\r\nV204fGUkJqW5CrKy3P3XvY9X\r\n-----END CERTIFICATE-----"
|
||||||
}';
|
}';
|
||||||
$this->environmentHelper
|
$this->environmentHelper
|
||||||
|
@ -721,7 +720,7 @@ class CheckerTest extends TestCase {
|
||||||
$this->assertSame([], $this->checker->verifyCoreSignature());
|
$this->assertSame([], $this->checker->verifyCoreSignature());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testVerifyCoreSignatureWithValidModifiedHtaccessAndUserIniSignatureData() {
|
public function testVerifyCoreSignatureWithValidModifiedHtaccessSignatureData() {
|
||||||
$this->environmentHelper
|
$this->environmentHelper
|
||||||
->expects($this->once())
|
->expects($this->once())
|
||||||
->method('getChannel')
|
->method('getChannel')
|
||||||
|
@ -738,11 +737,10 @@ class CheckerTest extends TestCase {
|
||||||
->will($this->returnValue(\OC::$SERVERROOT . '/tests/data/integritycheck/htaccessWithValidModifiedContent'));
|
->will($this->returnValue(\OC::$SERVERROOT . '/tests/data/integritycheck/htaccessWithValidModifiedContent'));
|
||||||
$signatureDataFile = '{
|
$signatureDataFile = '{
|
||||||
"hashes": {
|
"hashes": {
|
||||||
".htaccess": "04d8d8eaa5893d2c30df955ff25d8f75e4ee7eb7d24f7f28b47e7b1d0cce2c339db47debf8de8c80b3d25b5da4da50128720564a30ad1af8d7106d48e6f07ae8",
|
".htaccess": "7e6a7a4d8ee4f3fbc45dd579407c643471575a9d127d1c75f6d0a49e80766c3c587104b2139ef76d2a4bffce3f45777900605aaa49519c9532909b71e5030227",
|
||||||
".user.ini": "467d4f028c447895716a2b7859ed6e569f8ee34b87b51d73dab2e6a9ca4fbe63172c7be3e365ae864a60408286afcce852dd38ee544b61685ed4ee5e021fecb0",
|
|
||||||
"subfolder\/.htaccess": "2c57b1e25050e11dc3ae975832f378c452159f7b69f818e47eeeafadd6ba568517461dcb4d843b90b906cd7c89d161bc1b89dff8e3ae0eb6f5088508c47befd1"
|
"subfolder\/.htaccess": "2c57b1e25050e11dc3ae975832f378c452159f7b69f818e47eeeafadd6ba568517461dcb4d843b90b906cd7c89d161bc1b89dff8e3ae0eb6f5088508c47befd1"
|
||||||
},
|
},
|
||||||
"signature": "HpDOx2nLrquRkez2BINtfAOyStlzxWKrE8NJtNdj9ZkSA4iV9GVhgnw6e38jH5Ql+mf+d+r5xM0WRgByTul3Z+9gvtv7huAYLSumwxF4g8u42Q3zC+iB6H8nurea7TQy6WOkDl9XSxXv79DqpDsd3kvLTQi4JpYt\/bI8UXo9jcfB13Yp6s4tQLbCLwLcPxGCAifviB+cHsCGvu01ewyVIFSbLeOaIgAxujXZyodDPJCKPLd5ctKfy4t9YHrCG3HYTh\/HdT3N1gJ62tCJDj+EjwpnIdxSl3aAR8wXyxCvhoGxUNe8pvT8Q9TiI5t+eSjZ8wh+4AavA9lFLipukRO\/ZElSj55nsuRPS8PhszN6Ph57mNX1pIKhgaCp6ERhmD3PGsPQAK9Ymj4j6RCJZ06Cj6+ck4Vs+FJSmvVfz2FLleGBM6tfXgHDvbSPebq9zFukCSID7K1p0p07qu4Z1uuZI9JycghrWoVchQYjx1GndizTSaa55JtVY\/c1yLSHXBXlxt7M8Dc26vvGW+Dpn2aVtoG2N0eigyY7KMukgsBy9jUqEI7094kxtdIaCew7lLf0lRqpKEc+RweR+ielfpP+2r3hmVLYHQ+6Cbroht8clfbkEYpRBOGwf9Bg+uqdDqS6EIhKtFE0wp7QzRSiqGT3\/wiS\/UqM5MV1BM3R5JWRH54=",
|
"signature": "YVwQvl9Dh8UebCumfgzFxfz3NiZJLmYG8oJVTfEBhulI4KXBnTG1jZTprf4XxG2XIriEYAZXsoXpu9xWsUFe9QfdncwoEpqJtGq7l6aVDTofX5Be5b03MQFJr4cflgllqW77QZ84D9O9qWF\/vNDAofXcwrzT04CxLDhyQgTCgYUnRjG9pnuP\/gtbDKbTjRvxhTyfg3T0Phv1+XAvpTPnH2q5A+1+LmiqziUJ1sMipsKo+jQP614eCi9qjmqhHIgLRgcuOBvsi4g5WUcdcAIZ6qLt5gm2Y3r6rKNVchosU9ZydMUTfjuejDbVwE2fNH5UUnV57fQBxwg9CfX7iFHqKv1bfv5Zviu12paShgWCB12uR3iH\/3lmTJn8K5Xqit3G4eymFaJ5IChdUThBp\/jhQSI2r8sPcZDYSJ\/UZKuFnezFdKhEBd5hMXe8aKAd6ijGDjLARksFuqpi1sS8llC5K1Q+DzktSL\/o64TY4Vuvykiwe\/BAk2SkL9voOtrvU7vfDBcuCPbDJnSBBC0ESpcXeClTBIn6xZ9WaxqoS7sinE\/kUwtWsRd04I7d79\/ouotyNb+mBhTuRsZT12p\/gn4JHXXNUAIpTwchYzGxbfNJ4kxnYBFZWVmvsSqOLFZu1yi5BP3ktA9yhFyWIa5659azRFEKRdXpVHtQVa4IgdhxEqA=",
|
||||||
"certificate": "-----BEGIN CERTIFICATE-----\r\nMIIEvjCCAqagAwIBAgIUc\/0FxYrsgSs9rDxp03EJmbjN0NwwDQYJKoZIhvcNAQEF\r\nBQAwIzEhMB8GA1UECgwYb3duQ2xvdWQgQ29kZSBTaWduaW5nIENBMB4XDTE1MTEw\r\nMzIxMDMzM1oXDTE2MTEwMzIxMDMzM1owDzENMAsGA1UEAwwEY29yZTCCAiIwDQYJ\r\nKoZIhvcNAQEBBQADggIPADCCAgoCggIBALb6EgHpkAqZbO5vRO8XSh7G7XGWHw5s\r\niOf4RwPXR6SE9bWZEm\/b72SfWk\/\/J6AbrD8WiOzBuT\/ODy6k5T1arEdHO+Pux0W1\r\nMxYJJI4kH74KKgMpC0SB0Rt+8WrMqV1r3hhJ46df6Xr\/xolP3oD+eLbShPcblhdS\r\nVtkZEkoev8Sh6L2wDCeHDyPxzvj1w2dTdGVO9Kztn0xIlyfEBakqvBWtcxyi3Ln0\r\nklnxlMx3tPDUE4kqvpia9qNiB1AN2PV93eNr5\/2riAzIssMFSCarWCx0AKYb54+d\r\nxLpcYFyqPJ0ydBCkF78DD45RCZet6PNYkdzgbqlUWEGGomkuDoJbBg4wzgzO0D77\r\nH87KFhYW8tKFFvF1V3AHl\/sFQ9tDHaxM9Y0pZ2jPp\/ccdiqnmdkBxBDqsiRvHvVB\r\nCn6qpb4vWGFC7vHOBfYspmEL1zLlKXZv3ezMZEZw7O9ZvUP3VO\/wAtd2vUW8UFiq\r\ns2v1QnNLN6jNh51obcwmrBvWhJy9vQIdtIjQbDxqWTHh1zUSrw9wrlklCBZ\/zrM0\r\ni8nfCFwTxWRxp3H9KoECzO\/zS5R5KIS7s3\/wq\/w9T2Ie4rcecgXwDizwnn0C\/aKc\r\nbDIjujpL1s9HO05pcD\/V3wKcPZ1izymBkmMyIbL52iRVN5FTVHeZdXPpFuq+CTQJ\r\nQ238lC+A\/KOVAgMBAAEwDQYJKoZIhvcNAQEFBQADggIBAGoKTnh8RfJV4sQItVC2\r\nAvfJagkrIqZ3iiQTUBQGTKBsTnAqE1H7QgUSV9vSd+8rgvHkyZsRjmtyR1e3A6Ji\r\noNCXUbExC\/0iCPUqdHZIVb+Lc\/vWuv4ByFMybGPydgtLoEUX2ZrKFWmcgZFDUSRd\r\n9Uj26vtUhCC4bU4jgu6hIrR9IuxOBLQUxGTRZyAcXvj7obqRAEZwFAKQgFpfpqTb\r\nH+kjcbZSaAlLVSF7vBc1syyI8RGYbqpwvtREqJtl5IEIwe6huEqJ3zPnlP2th\/55\r\ncf3Fovj6JJgbb9XFxrdnsOsDOu\/tpnaRWlvv5ib4+SzG5wWFT5UUEo4Wg2STQiiX\r\nuVSRQxK1LE1yg84bs3NZk9FSQh4B8vZVuRr5FaJsZZkwlFlhRO\/\/+TJtXRbyNgsf\r\noMRZGi8DLGU2SGEAHcRH\/QZHq\/XDUWVzdxrSBYcy7GSpT7UDVzGv1rEJUrn5veP1\r\n0KmauAqtiIaYRm4f6YBsn0INcZxzIPZ0p8qFtVZBPeHhvQtvOt0iXI\/XUxEWOa2F\r\nK2EqhErgMK\/N07U1JJJay5tYZRtvkGq46oP\/5kQG8hYST0MDK6VihJoPpvCmAm4E\r\npEYKQ96x6A4EH9Y9mZlYozH\/eqmxPbTK8n89\/p7Ydun4rI+B2iiLnY8REWWy6+UQ\r\nV204fGUkJqW5CrKy3P3XvY9X\r\n-----END CERTIFICATE-----"
|
"certificate": "-----BEGIN CERTIFICATE-----\r\nMIIEvjCCAqagAwIBAgIUc\/0FxYrsgSs9rDxp03EJmbjN0NwwDQYJKoZIhvcNAQEF\r\nBQAwIzEhMB8GA1UECgwYb3duQ2xvdWQgQ29kZSBTaWduaW5nIENBMB4XDTE1MTEw\r\nMzIxMDMzM1oXDTE2MTEwMzIxMDMzM1owDzENMAsGA1UEAwwEY29yZTCCAiIwDQYJ\r\nKoZIhvcNAQEBBQADggIPADCCAgoCggIBALb6EgHpkAqZbO5vRO8XSh7G7XGWHw5s\r\niOf4RwPXR6SE9bWZEm\/b72SfWk\/\/J6AbrD8WiOzBuT\/ODy6k5T1arEdHO+Pux0W1\r\nMxYJJI4kH74KKgMpC0SB0Rt+8WrMqV1r3hhJ46df6Xr\/xolP3oD+eLbShPcblhdS\r\nVtkZEkoev8Sh6L2wDCeHDyPxzvj1w2dTdGVO9Kztn0xIlyfEBakqvBWtcxyi3Ln0\r\nklnxlMx3tPDUE4kqvpia9qNiB1AN2PV93eNr5\/2riAzIssMFSCarWCx0AKYb54+d\r\nxLpcYFyqPJ0ydBCkF78DD45RCZet6PNYkdzgbqlUWEGGomkuDoJbBg4wzgzO0D77\r\nH87KFhYW8tKFFvF1V3AHl\/sFQ9tDHaxM9Y0pZ2jPp\/ccdiqnmdkBxBDqsiRvHvVB\r\nCn6qpb4vWGFC7vHOBfYspmEL1zLlKXZv3ezMZEZw7O9ZvUP3VO\/wAtd2vUW8UFiq\r\ns2v1QnNLN6jNh51obcwmrBvWhJy9vQIdtIjQbDxqWTHh1zUSrw9wrlklCBZ\/zrM0\r\ni8nfCFwTxWRxp3H9KoECzO\/zS5R5KIS7s3\/wq\/w9T2Ie4rcecgXwDizwnn0C\/aKc\r\nbDIjujpL1s9HO05pcD\/V3wKcPZ1izymBkmMyIbL52iRVN5FTVHeZdXPpFuq+CTQJ\r\nQ238lC+A\/KOVAgMBAAEwDQYJKoZIhvcNAQEFBQADggIBAGoKTnh8RfJV4sQItVC2\r\nAvfJagkrIqZ3iiQTUBQGTKBsTnAqE1H7QgUSV9vSd+8rgvHkyZsRjmtyR1e3A6Ji\r\noNCXUbExC\/0iCPUqdHZIVb+Lc\/vWuv4ByFMybGPydgtLoEUX2ZrKFWmcgZFDUSRd\r\n9Uj26vtUhCC4bU4jgu6hIrR9IuxOBLQUxGTRZyAcXvj7obqRAEZwFAKQgFpfpqTb\r\nH+kjcbZSaAlLVSF7vBc1syyI8RGYbqpwvtREqJtl5IEIwe6huEqJ3zPnlP2th\/55\r\ncf3Fovj6JJgbb9XFxrdnsOsDOu\/tpnaRWlvv5ib4+SzG5wWFT5UUEo4Wg2STQiiX\r\nuVSRQxK1LE1yg84bs3NZk9FSQh4B8vZVuRr5FaJsZZkwlFlhRO\/\/+TJtXRbyNgsf\r\noMRZGi8DLGU2SGEAHcRH\/QZHq\/XDUWVzdxrSBYcy7GSpT7UDVzGv1rEJUrn5veP1\r\n0KmauAqtiIaYRm4f6YBsn0INcZxzIPZ0p8qFtVZBPeHhvQtvOt0iXI\/XUxEWOa2F\r\nK2EqhErgMK\/N07U1JJJay5tYZRtvkGq46oP\/5kQG8hYST0MDK6VihJoPpvCmAm4E\r\npEYKQ96x6A4EH9Y9mZlYozH\/eqmxPbTK8n89\/p7Ydun4rI+B2iiLnY8REWWy6+UQ\r\nV204fGUkJqW5CrKy3P3XvY9X\r\n-----END CERTIFICATE-----"
|
||||||
}';
|
}';
|
||||||
$this->fileAccessHelper
|
$this->fileAccessHelper
|
||||||
|
|
|
@ -46,28 +46,6 @@ class LegacyHelperTest extends \Test\TestCase {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @dataProvider phpFileSizeProvider
|
|
||||||
*/
|
|
||||||
public function testPhpFileSize($expected, $input)
|
|
||||||
{
|
|
||||||
$result = OC_Helper::phpFileSize($input);
|
|
||||||
$this->assertEquals($expected, $result);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function phpFileSizeProvider()
|
|
||||||
{
|
|
||||||
return array(
|
|
||||||
array('0B', 0),
|
|
||||||
array('1K', 1024),
|
|
||||||
array('9.5M', 10000000),
|
|
||||||
array('1.3G', 1395864371),
|
|
||||||
array('465.7G', 500000000000),
|
|
||||||
array('465661.3G', 500000000000000),
|
|
||||||
array('465661287.3G', 500000000000000000),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider providesComputerFileSize
|
* @dataProvider providesComputerFileSize
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue