Control: tags -1 moreinfo Control: retitle -1 unblock: owncloud/7.0.4+dfsg-2 Hi Niels, Le 10/12/2014 00:46, Niels Thykier a écrit : > Feel free to add those changes on top of the original upload. Thanks, it’s in. Updated (and filtered) debdiff from the version currently in testing attached. debdiff ../owncloud_7.0.3+dfsg-1.dsc ../owncloud_7.0.4+dfsg-2.dsc | \ filterdiff -x '*/core/doc/*' -x '*/apps/*/tests/*' \ -x '*/apps/*/l10n/fr.php' > I probably won't have time to do the second review / add unblocks before > tomorrow or maybe Saturday. No hurry from my side, thanks for giving the opportunity to update directly to this upstream point release. Regards David
diff -Nru owncloud-7.0.3+dfsg/apps/activity/l10n/fr.php owncloud-7.0.4+dfsg/apps/activity/l10n/fr.php
diff -Nru owncloud-7.0.3+dfsg/apps/bookmarks/l10n/fr.php owncloud-7.0.4+dfsg/apps/bookmarks/l10n/fr.php
diff -Nru owncloud-7.0.3+dfsg/apps/calendar/js/calendar.js owncloud-7.0.4+dfsg/apps/calendar/js/calendar.js
--- owncloud-7.0.3+dfsg/apps/calendar/js/calendar.js 2014-11-10 12:18:35.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/calendar/js/calendar.js 2014-12-08 14:34:16.000000000 -0400
@@ -133,10 +133,14 @@
$('#fullcalendar').fullCalendar('unselect');
Calendar.UI.lockTime();
$( "#from" ).datepicker({
+ minDate: null,
+ maxDate: null,
dateFormat : 'dd-mm-yy',
onSelect: function(){ Calendar.Util.adjustDate(); }
});
$( "#to" ).datepicker({
+ minDate: null,
+ maxDate: null,
dateFormat : 'dd-mm-yy'
});
$('#fromtime').timepicker({
diff -Nru owncloud-7.0.3+dfsg/apps/calendar/l10n/fr.php owncloud-7.0.4+dfsg/apps/calendar/l10n/fr.php
diff -Nru owncloud-7.0.3+dfsg/apps/documents/js/viewer/viewer.js owncloud-7.0.4+dfsg/apps/documents/js/viewer/viewer.js
--- owncloud-7.0.3+dfsg/apps/documents/js/viewer/viewer.js 2014-11-10 12:18:36.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/documents/js/viewer/viewer.js 2014-12-08 14:34:18.000000000 -0400
@@ -63,7 +63,9 @@
} else {
//Public page, files app, etc
var dirName = $('#dir').val()!='/' ? $('#dir').val() + '/' : '/';
- var location = OC.filePath('documents', 'ajax', 'download.php') + '?path=' + dirName + encodeURIComponent(filename);
+ var location = OC.filePath('documents', 'ajax', 'download.php') + '?path=' + encodeURIComponent(dirName) + encodeURIComponent(filename)
+ + '&requesttoken=' + oc_requesttoken;
+
OC.addStyle('documents', '3rdparty/webodf/editor');
}
diff -Nru owncloud-7.0.3+dfsg/apps/documents/lib/db/session.php owncloud-7.0.4+dfsg/apps/documents/lib/db/session.php
--- owncloud-7.0.3+dfsg/apps/documents/lib/db/session.php 2014-11-10 12:18:09.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/documents/lib/db/session.php 2014-12-08 14:34:18.000000000 -0400
@@ -122,7 +122,7 @@
public function insert(){
$esId = $this->getUniqueSessionId();
array_unshift($this->data, $esId);
- return parent::insert($this->data);
+ return parent::insert();
}
public function updateGenesisHash($esId, $genesisHash){
diff -Nru owncloud-7.0.3+dfsg/apps/files/appinfo/remote.php owncloud-7.0.4+dfsg/apps/files/appinfo/remote.php
--- owncloud-7.0.3+dfsg/apps/files/appinfo/remote.php 2014-11-10 12:17:24.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/files/appinfo/remote.php 2014-12-08 14:32:57.000000000 -0400
@@ -38,7 +38,7 @@
$defaults = new OC_Defaults();
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, $defaults->getName()));
$server->addPlugin(new \Sabre\DAV\Locks\Plugin($lockBackend));
-$server->addPlugin(new \Sabre\DAV\Browser\Plugin(false)); // Show something in the Browser, but no upload
+$server->addPlugin(new \Sabre\DAV\Browser\Plugin(false, false)); // Show something in the Browser, but no upload
$server->addPlugin(new OC_Connector_Sabre_FilesPlugin());
$server->addPlugin(new OC_Connector_Sabre_MaintenancePlugin());
$server->addPlugin(new OC_Connector_Sabre_ExceptionLoggerPlugin('webdav'));
diff -Nru owncloud-7.0.3+dfsg/apps/files/tests/ajax_rename.php owncloud-7.0.4+dfsg/apps/files/tests/ajax_rename.php
diff -Nru owncloud-7.0.3+dfsg/apps/files_encryption/ajax/updatePrivateKeyPassword.php owncloud-7.0.4+dfsg/apps/files_encryption/ajax/updatePrivateKeyPassword.php
--- owncloud-7.0.3+dfsg/apps/files_encryption/ajax/updatePrivateKeyPassword.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/files_encryption/ajax/updatePrivateKeyPassword.php 2014-12-08 14:34:14.000000000 -0400
@@ -26,9 +26,10 @@
$view = new \OC\Files\View('/');
$session = new \OCA\Encryption\Session($view);
$user = \OCP\User::getUser();
+$loginName = \OC::$server->getUserSession()->getLoginName();
// check new password
-$passwordCorrect = \OCP\User::checkPassword($user, $newPassword);
+$passwordCorrect = \OCP\User::checkPassword($loginName, $newPassword);
if ($passwordCorrect !== false) {
diff -Nru owncloud-7.0.3+dfsg/apps/files_encryption/lib/stream.php owncloud-7.0.4+dfsg/apps/files_encryption/lib/stream.php
--- owncloud-7.0.3+dfsg/apps/files_encryption/lib/stream.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/files_encryption/lib/stream.php 2014-12-08 14:34:14.000000000 -0400
@@ -573,6 +573,7 @@
\OC_FileProxy::$enabled = false;
if ($this->rootView->file_exists($this->rawPath) && $this->size === 0) {
+ fclose($this->handle);
$this->rootView->unlink($this->rawPath);
}
diff -Nru owncloud-7.0.3+dfsg/apps/files_encryption/lib/util.php owncloud-7.0.4+dfsg/apps/files_encryption/lib/util.php
--- owncloud-7.0.3+dfsg/apps/files_encryption/lib/util.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/files_encryption/lib/util.php 2014-12-08 14:34:14.000000000 -0400
@@ -889,6 +889,25 @@
}
/**
+ * Returns whether the given user is ready for encryption.
+ * Also returns true if the given user is the public user
+ * or the recovery key user.
+ *
+ * @param string $user user to check
+ *
+ * @return boolean true if the user is ready, false otherwise
+ */
+ private function isUserReady($user) {
+ if ($user === $this->publicShareKeyId
+ || $user === $this->recoveryKeyId
+ ) {
+ return true;
+ }
+ $util = new Util($this->view, $user);
+ return $util->ready();
+ }
+
+ /**
* Filter an array of UIDs to return only ones ready for sharing
* @param array $unfilteredUsers users to be checked for sharing readiness
* @return array as multi-dimensional array. keys: ready, unready
@@ -900,16 +919,9 @@
// Loop through users and create array of UIDs that need new keyfiles
foreach ($unfilteredUsers as $user) {
-
- $util = new Util($this->view, $user);
-
// Check that the user is encryption capable, or is the
- // public system user 'ownCloud' (for public shares)
- if (
- $user === $this->publicShareKeyId
- or $user === $this->recoveryKeyId
- or $util->ready()
- ) {
+ // public system user (for public shares)
+ if ($this->isUserReady($user)) {
// Construct array of ready UIDs for Keymanager{}
$readyIds[] = $user;
diff -Nru owncloud-7.0.3+dfsg/apps/files_encryption/tests/crypt.php owncloud-7.0.4+dfsg/apps/files_encryption/tests/crypt.php
diff -Nru owncloud-7.0.3+dfsg/apps/files_encryption/tests/helper.php owncloud-7.0.4+dfsg/apps/files_encryption/tests/helper.php
diff -Nru owncloud-7.0.3+dfsg/apps/files_encryption/tests/hooks.php owncloud-7.0.4+dfsg/apps/files_encryption/tests/hooks.php
diff -Nru owncloud-7.0.3+dfsg/apps/files_encryption/tests/keymanager.php owncloud-7.0.4+dfsg/apps/files_encryption/tests/keymanager.php
diff -Nru owncloud-7.0.3+dfsg/apps/files_encryption/tests/proxy.php owncloud-7.0.4+dfsg/apps/files_encryption/tests/proxy.php
diff -Nru owncloud-7.0.3+dfsg/apps/files_encryption/tests/share.php owncloud-7.0.4+dfsg/apps/files_encryption/tests/share.php
diff -Nru owncloud-7.0.3+dfsg/apps/files_encryption/tests/stream.php owncloud-7.0.4+dfsg/apps/files_encryption/tests/stream.php
diff -Nru owncloud-7.0.3+dfsg/apps/files_encryption/tests/testcase.php owncloud-7.0.4+dfsg/apps/files_encryption/tests/testcase.php
diff -Nru owncloud-7.0.3+dfsg/apps/files_encryption/tests/trashbin.php owncloud-7.0.4+dfsg/apps/files_encryption/tests/trashbin.php
diff -Nru owncloud-7.0.3+dfsg/apps/files_encryption/tests/util.php owncloud-7.0.4+dfsg/apps/files_encryption/tests/util.php
diff -Nru owncloud-7.0.3+dfsg/apps/files_encryption/tests/webdav.php owncloud-7.0.4+dfsg/apps/files_encryption/tests/webdav.php
diff -Nru owncloud-7.0.3+dfsg/apps/files_external/lib/config.php owncloud-7.0.4+dfsg/apps/files_external/lib/config.php
--- owncloud-7.0.3+dfsg/apps/files_external/lib/config.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/files_external/lib/config.php 2014-12-08 14:34:15.000000000 -0400
@@ -121,6 +121,14 @@
if ($data['user']) {
$user = \OC::$server->getUserManager()->get($data['user']);
+ if (!$user) {
+ \OC_Log::write(
+ 'files_external',
+ 'Cannot init external mount points for non-existant user "' . $data['user'] . '".',
+ \OC_Log::WARN
+ );
+ return;
+ }
$userView = new \OC\Files\View('/' . $user->getUID() . '/files');
$changePropagator = new \OC\Files\Cache\ChangePropagator($userView);
$etagPropagator = new \OCA\Files_External\EtagPropagator($user, $changePropagator, \OC::$server->getConfig());
diff -Nru owncloud-7.0.3+dfsg/apps/files_external/lib/smb_oc.php owncloud-7.0.4+dfsg/apps/files_external/lib/smb_oc.php
--- owncloud-7.0.3+dfsg/apps/files_external/lib/smb_oc.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/files_external/lib/smb_oc.php 2014-12-08 14:34:15.000000000 -0400
@@ -13,12 +13,16 @@
class SMB_OC extends \OC\Files\Storage\SMB {
private $username_as_share;
+ /**
+ * @param array $params
+ * @throws \Exception
+ */
public function __construct($params) {
if (isset($params['host']) && \OC::$session->exists('smb-credentials')) {
$host=$params['host'];
$this->username_as_share = ($params['username_as_share'] === 'true');
- $params_auth = \OC::$session->get('smb-credentials');
+ $params_auth = json_decode(\OC::$server->getCrypto()->decrypt(\OC::$session->get('smb-credentials')), true);
$user = \OC::$session->get('loginname');
$password = $params_auth['password'];
@@ -44,14 +48,34 @@
}
}
- public static function login( $params ) {
- \OC::$session->set('smb-credentials', $params);
+ /**
+ * Intercepts the user credentials on login and stores them
+ * encrypted inside the session if SMB_OC storage is enabled.
+ * @param array $params
+ */
+ public static function login($params) {
+ $mountpoints = \OC_Mount_Config::getAbsoluteMountPoints($params['uid']);
+ $mountpointClasses = array();
+ foreach($mountpoints as $mountpoint) {
+ $mountpointClasses[$mountpoint['class']] = true;
+ }
+ if(isset($mountpointClasses['\OC\Files\Storage\SMB_OC'])) {
+ \OC::$session->set('smb-credentials', \OC::$server->getCrypto()->encrypt(json_encode($params)));
+ }
}
+ /**
+ * @param string $path
+ * @return boolean
+ */
public function isSharable($path) {
return false;
}
+ /**
+ * @param bool $isPersonal
+ * @return bool
+ */
public function test($isPersonal = true) {
if ($isPersonal) {
if ($this->stat('')) {
diff -Nru owncloud-7.0.3+dfsg/apps/files_sharing/appinfo/database.xml owncloud-7.0.4+dfsg/apps/files_sharing/appinfo/database.xml
--- owncloud-7.0.3+dfsg/apps/files_sharing/appinfo/database.xml 2014-11-10 12:17:24.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/files_sharing/appinfo/database.xml 2014-12-08 14:34:15.000000000 -0400
@@ -32,7 +32,7 @@
<field>
<name>password</name>
<type>text</type>
- <notnull>true</notnull>
+ <notnull>false</notnull>
<length>64</length>
<comments>Optional password for the public share</comments>
</field>
diff -Nru owncloud-7.0.3+dfsg/apps/files_sharing/public.php owncloud-7.0.4+dfsg/apps/files_sharing/public.php
--- owncloud-7.0.3+dfsg/apps/files_sharing/public.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/files_sharing/public.php 2014-12-08 14:34:15.000000000 -0400
@@ -1,5 +1,7 @@
<?php
// Load other apps for file previews
+use OCA\Files_Sharing\Helper;
+
OC_App::loadApps();
$appConfig = \OC::$server->getAppConfig();
@@ -132,6 +134,7 @@
$tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path));
$tmpl->assign('dirToken', $linkItem['token']);
$tmpl->assign('sharingToken', $token);
+ $tmpl->assign('server2serversharing', Helper::isOutgoingServer2serverShareEnabled());
$tmpl->assign('protected', isset($linkItem['share_with']) ? 'true' : 'false');
$urlLinkIdentifiers= (isset($token)?'&t='.$token:'')
@@ -171,7 +174,7 @@
$tmpl->assign('downloadURL',
OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=' . urlencode($getPath));
} else {
- $tmpl->assign('dir', $dir);
+ $tmpl->assign('dir', '');
// Show file preview if viewer is available
if ($type == 'file') {
diff -Nru owncloud-7.0.3+dfsg/apps/files_sharing/templates/public.php owncloud-7.0.4+dfsg/apps/files_sharing/templates/public.php
--- owncloud-7.0.3+dfsg/apps/files_sharing/templates/public.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/files_sharing/templates/public.php 2014-12-08 14:34:15.000000000 -0400
@@ -30,13 +30,18 @@
<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
<div class="header-right">
<span id="details">
- <span id="save" data-protected="<?php p($_['protected'])?>" data-owner="<?php p($_['displayName'])?>" data-name="<?php p($_['filename'])?>">
+ <?php
+ if ($_['server2serversharing']) {
+ ?>
+ <span id="save" data-protected="<?php p($_['protected']) ?>"
+ data-owner="<?php p($_['displayName']) ?>" data-name="<?php p($_['filename']) ?>">
<button id="save-button"><?php p($l->t('Add to your ownCloud')) ?></button>
<form class="save-form hidden" action="#">
<input type="text" id="remote_address" placeholder="example.com/owncloud"/>
<button id="save-button-confirm" class="icon-confirm svg"></button>
</form>
</span>
+ <?php } ?>
<a href="<?php p($_['downloadURL']); ?>" id="download" class="button">
<img class="svg" alt="" src="<?php print_unescaped(OCP\image_path("core", "actions/download.svg")); ?>"/>
<span id="download-text"><?php p($l->t('Download'))?></span>
diff -Nru owncloud-7.0.3+dfsg/apps/files_sharing/tests/cache.php owncloud-7.0.4+dfsg/apps/files_sharing/tests/cache.php
diff -Nru owncloud-7.0.3+dfsg/apps/firstrunwizard/l10n/fr.php owncloud-7.0.4+dfsg/apps/firstrunwizard/l10n/fr.php
diff -Nru owncloud-7.0.3+dfsg/apps/gallery/js/slideshow.js owncloud-7.0.4+dfsg/apps/gallery/js/slideshow.js
--- owncloud-7.0.3+dfsg/apps/gallery/js/slideshow.js 2014-11-10 12:18:36.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/gallery/js/slideshow.js 2014-12-08 14:34:18.000000000 -0400
@@ -141,7 +141,7 @@
}
if (preloadUrl) {
jQuery.fn.slideShow.loadImage(
- fallBack,
+ preloadUrl,
preloadFallBack
);
}
@@ -371,6 +371,9 @@
for (var i = 0; i < files.length; i++) {
var file = files[i];
if (file.mimetype && file.mimetype.indexOf('image') >= 0) {
+ if (file.mimetype === 'image/tiff') {
+ continue;
+ }
if (file.mimetype === 'image/svg+xml') {
imageUrl = OCA.Files.Files.getDownloadUrl(file.name, dir);
} else {
@@ -406,5 +409,6 @@
jQuery.fn.slideShow.call(images, $('#slideshow'), start, {fallBacks: fallBacks});
});
OCA.Files.fileActions.setDefault('image', 'View');
+ OCA.Files.fileActions.setDefault('image/tiff', 'Download');
}
});
diff -Nru owncloud-7.0.3+dfsg/apps/updater/templates/update.php owncloud-7.0.4+dfsg/apps/updater/templates/update.php
--- owncloud-7.0.3+dfsg/apps/updater/templates/update.php 2014-11-10 12:18:24.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/updater/templates/update.php 2014-12-08 14:34:03.000000000 -0400
@@ -19,7 +19,7 @@
<?php p($l->t('A new version is available: %s', array($_['version']))) ?>
</p>
<p ng-show="<?php p(!$isNewVersionAvailable) ?>">
- <?php p($l->t('Up to date. Checked on %s', array('checkedAt' => $_['checkedAt']))) ?>
+ <?php p($l->t('Up to date. Checked on %s', array($_['checkedAt']))) ?>
</p>
<div id="upd-step-title" style="display:none;">
<ul class="track-progress" data-steps="3">
diff -Nru owncloud-7.0.3+dfsg/apps/user_ldap/appinfo/register_command.php owncloud-7.0.4+dfsg/apps/user_ldap/appinfo/register_command.php
--- owncloud-7.0.3+dfsg/apps/user_ldap/appinfo/register_command.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/user_ldap/appinfo/register_command.php 2014-12-08 14:34:15.000000000 -0400
@@ -9,3 +9,4 @@
$application->add(new OCA\user_ldap\Command\ShowConfig());
$application->add(new OCA\user_ldap\Command\SetConfig());
$application->add(new OCA\user_ldap\Command\TestConfig());
+$application->add(new OCA\user_ldap\Command\Search());
diff -Nru owncloud-7.0.3+dfsg/apps/user_ldap/command/search.php owncloud-7.0.4+dfsg/apps/user_ldap/command/search.php
--- owncloud-7.0.3+dfsg/apps/user_ldap/command/search.php 1969-12-31 20:00:00.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/user_ldap/command/search.php 2014-12-08 14:32:57.000000000 -0400
@@ -0,0 +1,100 @@
+<?php
+/**
+ * Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\user_ldap\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+use OCA\user_ldap\User_Proxy;
+use OCA\user_ldap\Group_Proxy;
+use OCA\user_ldap\lib\Helper;
+use OCA\user_ldap\lib\LDAP;
+
+class Search extends Command {
+ protected function configure() {
+ $this
+ ->setName('ldap:search')
+ ->setDescription('executes a user or group search')
+ ->addArgument(
+ 'search',
+ InputArgument::REQUIRED,
+ 'the search string (can be empty)'
+ )
+ ->addOption(
+ 'group',
+ null,
+ InputOption::VALUE_NONE,
+ 'searches groups instead of users'
+ )
+ ->addOption(
+ 'offset',
+ null,
+ InputOption::VALUE_REQUIRED,
+ 'The offset of the result set. Needs to be a multiple of limit. defaults to 0.',
+ 0
+ )
+ ->addOption(
+ 'limit',
+ null,
+ InputOption::VALUE_REQUIRED,
+ 'limit the results. 0 means no limit, defaults to 15',
+ 15
+ )
+ ;
+ }
+
+ /**
+ * Tests whether the offset and limit options are valid
+ * @param int $offset
+ * @param int $limit
+ * @throws \InvalidArgumentException
+ */
+ protected function validateOffsetAndLimit($offset, $limit) {
+ if($limit < 0) {
+ throw new \InvalidArgumentException('limit must be 0 or greater');
+ }
+ if($offset < 0) {
+ throw new \InvalidArgumentException('offset must be 0 or greater');
+ }
+ if($limit === 0 && $offset !== 0) {
+ throw new \InvalidArgumentException('offset must be 0 if limit is also set to 0');
+ }
+ if($offset > 0 && ($offset % $limit !== 0)) {
+ throw new \InvalidArgumentException('offset must be a multiple of limit');
+ }
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output) {
+ $configPrefixes = Helper::getServerConfigurationPrefixes(true);
+ $ldapWrapper = new LDAP();
+
+ $offset = intval($input->getOption('offset'));
+ $limit = intval($input->getOption('limit'));
+ $this->validateOffsetAndLimit($offset, $limit);
+
+ if($input->getOption('group')) {
+ $proxy = new Group_Proxy($configPrefixes, $ldapWrapper);
+ $getMethod = 'getGroups';
+ $printID = false;
+ } else {
+ $proxy = new User_Proxy($configPrefixes, $ldapWrapper);
+ $getMethod = 'getDisplayNames';
+ $printID = true;
+ }
+
+ $result = $proxy->$getMethod($input->getArgument('search'), $limit, $offset);
+ foreach($result as $id => $name) {
+ $line = $name . ($printID ? ' ('.$id.')' : '');
+ $output->writeln($line);
+ }
+ }
+}
diff -Nru owncloud-7.0.3+dfsg/apps/user_ldap/lib/access.php owncloud-7.0.4+dfsg/apps/user_ldap/lib/access.php
--- owncloud-7.0.3+dfsg/apps/user_ldap/lib/access.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/user_ldap/lib/access.php 2014-12-08 14:34:15.000000000 -0400
@@ -403,6 +403,8 @@
//a new user/group! Add it only if it doesn't conflict with other backend's users or existing groups
//disabling Cache is required to avoid that the new user is cached as not-existing in fooExists check
+ //NOTE: mind, disabling cache affects only this instance! Using it
+ // outside of core user management will still cache the user as non-existing.
$originalTTL = $this->connection->ldapCacheTTL;
$this->connection->setConfiguration(array('ldapCacheTTL' => 0));
if(($isUser && !\OCP\User::userExists($intName))
@@ -507,6 +509,7 @@
if($isUsers) {
//cache the user names so it does not need to be retrieved
//again later (e.g. sharing dialogue).
+ $this->cacheUserExists($ocName);
$this->cacheUserDisplayName($ocName, $nameByLDAP);
}
}
@@ -516,6 +519,14 @@
}
/**
+ * caches a user as existing
+ * @param string $ocName the internal ownCloud username
+ */
+ public function cacheUserExists($ocName) {
+ $this->connection->writeToCache('userExists'.$ocName, true);
+ }
+
+ /**
* caches the user display name
* @param string $ocName the internal ownCloud username
* @param string $displayName the display name
@@ -928,7 +939,7 @@
foreach($searchResults as $res) {
$count = intval($this->ldap->countEntries($cr, $res));
$counter += $count;
- if($count === $limit) {
+ if($count > 0 && $count === $limit) {
$hasHitLimit = true;
}
}
@@ -1073,12 +1084,18 @@
/**
* escapes (user provided) parts for LDAP filter
* @param string $input, the provided value
+ * @param bool $allowAsterisk wether in * at the beginning should be preserved
* @return string the escaped string
*/
- public function escapeFilterPart($input) {
+ public function escapeFilterPart($input, $allowAsterisk = false) {
+ $asterisk = '';
+ if($allowAsterisk && strlen($input) > 0 && $input[0] === '*') {
+ $asterisk = '*';
+ $input = mb_substr($input, 1, null, 'UTF-8');
+ }
$search = array('*', '\\', '(', ')');
$replace = array('\\*', '\\\\', '\\(', '\\)');
- return str_replace($search, $replace, $input);
+ return $asterisk . str_replace($search, $replace, $input);
}
/**
@@ -1141,6 +1158,33 @@
}
/**
+ * creates a filter part for searches by splitting up the given search
+ * string into single words
+ * @param string $search the search term
+ * @param string[] $searchAttributes needs to have at least two attributes,
+ * otherwise it does not make sense :)
+ * @return string the final filter part to use in LDAP searches
+ * @throws \Exception
+ */
+ private function getAdvancedFilterPartForSearch($search, $searchAttributes) {
+ if(!is_array($searchAttributes) || count($searchAttributes) < 2) {
+ throw new \Exception('searchAttributes must be an array with at least two string');
+ }
+ $searchWords = explode(' ', trim($search));
+ $wordFilters = array();
+ foreach($searchWords as $word) {
+ $word .= '*';
+ //every word needs to appear at least once
+ $wordMatchOneAttrFilters = array();
+ foreach($searchAttributes as $attr) {
+ $wordMatchOneAttrFilters[] = $attr . '=' . $word;
+ }
+ $wordFilters[] = $this->combineFilterWithOr($wordMatchOneAttrFilters);
+ }
+ return $this->combineFilterWithAnd($wordFilters);
+ }
+
+ /**
* creates a filter part for searches
* @param string $search the search term
* @param string[]|null $searchAttributes
@@ -1150,7 +1194,19 @@
*/
private function getFilterPartForSearch($search, $searchAttributes, $fallbackAttribute) {
$filter = array();
- $search = empty($search) ? '*' : '*'.$search.'*';
+ $haveMultiSearchAttributes = (is_array($searchAttributes) && count($searchAttributes) > 0);
+ if($haveMultiSearchAttributes && strpos(trim($search), ' ') !== false) {
+ try {
+ return $this->getAdvancedFilterPartForSearch($search, $searchAttributes);
+ } catch(\Exception $e) {
+ \OCP\Util::writeLog(
+ 'user_ldap',
+ 'Creating advanced filter for search failed, falling back to simple method.',
+ \OCP\Util::INFO
+ );
+ }
+ }
+ $search = empty($search) ? '*' : $search.'*';
if(!is_array($searchAttributes) || count($searchAttributes) === 0) {
if(empty($fallbackAttribute)) {
return '';
@@ -1316,32 +1372,38 @@
* converts a binary SID into a string representation
* @param string $sid
* @return string
- * @link http://blogs.freebsdish.org/tmclaugh/2010/07/21/finding-a-users-primary-group-in-ad/#comment-2855
*/
public function convertSID2Str($sid) {
- try {
- if(!function_exists('bcadd')) {
- \OCP\Util::writeLog('user_ldap',
- 'You need to install bcmath module for PHP to have support ' .
- 'for AD primary groups', \OCP\Util::WARN);
- throw new \Exception('missing bcmath module');
- }
- $srl = ord($sid[0]);
- $numberSubID = ord($sid[1]);
- $x = substr($sid, 2, 6);
- $h = unpack('N', "\x0\x0" . substr($x,0,2));
- $l = unpack('N', substr($x,2,6));
- $iav = bcadd(bcmul($h[1], bcpow(2,32)), $l[1]);
- $subIDs = array();
- for ($i=0; $i<$numberSubID; $i++) {
- $subID = unpack('V', substr($sid, 8+4*$i, 4));
- $subIDs[] = $subID[1];
- }
- } catch (\Exception $e) {
+ // The format of a SID binary string is as follows:
+ // 1 byte for the revision level
+ // 1 byte for the number n of variable sub-ids
+ // 6 bytes for identifier authority value
+ // n*4 bytes for n sub-ids
+ //
+ // Example: 010400000000000515000000a681e50e4d6c6c2bca32055f
+ // Legend: RRNNAAAAAAAAAAAA11111111222222223333333344444444
+ $revision = ord($sid[0]);
+ $numberSubID = ord($sid[1]);
+
+ $subIdStart = 8; // 1 + 1 + 6
+ $subIdLength = 4;
+ if (strlen($sid) !== $subIdStart + $subIdLength * $numberSubID) {
+ // Incorrect number of bytes present.
return '';
}
- return sprintf('S-%d-%d-%s', $srl, $iav, implode('-', $subIDs));
+ // 6 bytes = 48 bits can be represented using floats without loss of
+ // precision (see https://gist.github.com/bantu/886ac680b0aef5812f71)
+ $iav = number_format(hexdec(bin2hex(substr($sid, 2, 6))), 0, '', '');
+
+ $subIDs = array();
+ for ($i = 0; $i < $numberSubID; $i++) {
+ $subID = unpack('V', substr($sid, $subIdStart + $subIdLength * $i, $subIdLength));
+ $subIDs[] = sprintf('%u', $subID[1]);
+ }
+
+ // Result for example above: S-1-5-21-249921958-728525901-1594176202
+ return sprintf('S-%d-%s-%s', $revision, $iav, implode('-', $subIDs));
}
/**
diff -Nru owncloud-7.0.3+dfsg/apps/user_ldap/tests/access.php owncloud-7.0.4+dfsg/apps/user_ldap/tests/access.php
Les fichiers binaires /tmp/zV6oAxSKjw/owncloud-7.0.3+dfsg/apps/user_ldap/tests/data/sid.dat et /tmp/yL6vpOzOmz/owncloud-7.0.4+dfsg/apps/user_ldap/tests/data/sid.dat sont différents
diff -Nru owncloud-7.0.3+dfsg/apps/user_ldap/tests/user_ldap.php owncloud-7.0.4+dfsg/apps/user_ldap/tests/user_ldap.php
diff -Nru owncloud-7.0.3+dfsg/apps/user_ldap/user_ldap.php owncloud-7.0.4+dfsg/apps/user_ldap/user_ldap.php
--- owncloud-7.0.3+dfsg/apps/user_ldap/user_ldap.php 2014-11-10 12:17:24.000000000 -0400
+++ owncloud-7.0.4+dfsg/apps/user_ldap/user_ldap.php 2014-12-08 14:34:15.000000000 -0400
@@ -64,8 +64,14 @@
return false;
}
$dn = $ldap_users[0];
-
$user = $this->access->userManager->get($dn);
+ if(is_null($user)) {
+ \OCP\Util::writeLog('user_ldap',
+ 'LDAP Login: Could not get user object for DN ' . $dn .
+ '. Maybe the LDAP entry has no set display name attribute?',
+ \OCP\Util::WARN);
+ return false;
+ }
if($user->getUsername() !== false) {
//are the credentials OK?
if(!$this->access->areCredentialsValid($dn, $password)) {
@@ -87,7 +93,7 @@
* Get a list of all users.
*/
public function getUsers($search = '', $limit = 10, $offset = 0) {
- $search = $this->access->escapeFilterPart($search);
+ $search = $this->access->escapeFilterPart($search, true);
$cachekey = 'getUsers-'.$search.'-'.$limit.'-'.$offset;
//check if users are cached, if so return
@@ -286,7 +292,12 @@
public function countUsers() {
$filter = \OCP\Util::mb_str_replace(
'%uid', '*', $this->access->connection->ldapLoginFilter, 'UTF-8');
+ $cacheKey = 'countUsers-'.$filter;
+ if(!is_null($entries = $this->access->connection->getFromCache($cacheKey))) {
+ return $entries;
+ }
$entries = $this->access->countUsers($filter);
+ $this->access->connection->writeToCache($cacheKey, $entries);
return $entries;
}
}
diff -Nru owncloud-7.0.3+dfsg/config/config.sample.php owncloud-7.0.4+dfsg/config/config.sample.php
--- owncloud-7.0.3+dfsg/config/config.sample.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/config/config.sample.php 2014-12-08 14:34:15.000000000 -0400
@@ -65,13 +65,14 @@
'trusted_domains' =>
array (
'demo.example.org',
- 'otherdomain.example.org:8080',
+ 'otherdomain.example.org',
),
/**
* Where user files are stored; this defaults to ``data/`` in the ownCloud
- * directory. The SQLite database is also stored here, when you use SQLite.
+ * directory. The SQLite database is also stored here, when you use SQLite. (SQLite is
+ * available only in ownCloud Community Edition)
*/
'datadirectory' => '/var/www/owncloud/data',
@@ -82,8 +83,15 @@
'version' => '',
/**
- * Identifies the database used with this installation: ``sqlite``, ``mysql``,
- * ``pgsql``, ``oci``, or ``mssql``.
+ * Identifies the database used with this installation. See also config option
+ * ``supportedDatabases``
+ *
+ * Available:
+ * - sqlite (SQLite3 - Community Edition Only)
+ * - mysql (MySQL)
+ * - pgsql (PostgreSQL)
+ * - oci (Oracle - Enterprise Edition Only)
+ * - mssql (Microsoft SQL Server - Enterprise Edition Only)
*/
'dbtype' => 'sqlite',
@@ -428,6 +436,15 @@
*/
'check_for_working_htaccess' => true,
+/**
+ * In certain environments it is desired to have a read-only config file.
+ * When this switch is set to ``true`` ownCloud will not verify whether the
+ * configuration is writable. However, it will not be possible to configure
+ * all options via the web-interface. Furthermore, when updating ownCloud
+ * it is required to make the config file writable again for the update
+ * process.
+ */
+'config_is_read_only' => false,
/**
* Logging
@@ -521,6 +538,7 @@
/**
* When enabled, admins may install apps from the ownCloud app store.
+ * The app store is disabled by default for ownCloud Enterprise Edition
*/
'appstoreenabled' => true,
@@ -809,11 +827,11 @@
* Database types that are supported for installation.
*
* Available:
- * - sqlite (SQLite3)
+ * - sqlite (SQLite3 - Community Edition Only)
* - mysql (MySQL)
* - pgsql (PostgreSQL)
- * - oci (Oracle)
- * - mssql (Microsoft SQL Server)
+ * - oci (Oracle - Enterprise Edition Only)
+ * - mssql (Microsoft SQL Server - Enterprise Edition Only)
*/
'supportedDatabases' => array(
'sqlite',
@@ -831,4 +849,10 @@
"style-src 'self' 'unsafe-inline'; frame-src *; img-src *; ".
"font-src 'self' data:; media-src *",
+/**
+ * Secret used by ownCloud for various purposes, e.g. to encrypt data. If you
+ * lose this string there will be data corruption.
+ */
+'secret' => 'ICertainlyShouldHaveChangedTheDefaultSecret',
+
);
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/antivirus_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/antivirus_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/auth_ldap.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/auth_ldap.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/automatic_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/automatic_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/background_jobs_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/background_jobs_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/background_jobs.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/background_jobs.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/big_file_upload_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/big_file_upload_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/collaborative_documents_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/collaborative_documents_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/config_sample_php_parameters.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/config_sample_php_parameters.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_3rdparty.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_3rdparty.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration-antivirus.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration-antivirus.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_apps.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_apps.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_assets.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_assets.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_automation.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_automation.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_config_sample_php.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_config_sample_php.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_custom_clients.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_custom_clients.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_database.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_database.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_encryption.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_encryption.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_file_sharing.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_file_sharing.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_files_locking.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_files_locking.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_knowledgebase.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_knowledgebase.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_language.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_language.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_logging.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_logging.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_mail.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_mail.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_preview.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_preview.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_reverseproxy.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_reverseproxy.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuration_users.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuration_users.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuring_big_file_upload.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuring_big_file_upload.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuring_documents.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuring_documents.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/configuring_search.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/configuring_search.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/custom_client_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/custom_client_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/custom_mount_config_gui.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/custom_mount_config_gui.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/custom_mount_config.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/custom_mount_config.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/custom_user_backend.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/custom_user_backend.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/database_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/database_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/email_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/email_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/encryption_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/encryption_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/external_storage_configuration_gui.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/external_storage_configuration_gui.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/external_storage_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/external_storage_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/file_sharing_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/file_sharing_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/files_locking_enabling.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/files_locking_enabling.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/index.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/index.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/js_css_asset_management_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/js_css_asset_management_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/knowledgebase_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/knowledgebase_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/language_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/language_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/logging_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/logging_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/previews_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/previews_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/reverse_proxy_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/reverse_proxy_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/search_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/search_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/server_to_server_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/server_to_server_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/server_to_server_managing.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/server_to_server_managing.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/serving_static_files_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/serving_static_files_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/thirdparty_php_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/thirdparty_php_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/user_auth_ftp_smb_imap.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/user_auth_ftp_smb_imap.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/user_auth_ldap.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/user_auth_ldap.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/user_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/user_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/configuration/xsendfile.html owncloud-7.0.4+dfsg/core/doc/admin/configuration/xsendfile.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/contents.html owncloud-7.0.4+dfsg/core/doc/admin/contents.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/index.html owncloud-7.0.4+dfsg/core/doc/admin/index.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/appliance_installation.html owncloud-7.0.4+dfsg/core/doc/admin/installation/appliance_installation.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/apps_management_installation.html owncloud-7.0.4+dfsg/core/doc/admin/installation/apps_management_installation.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/configuration_hiawatha.html owncloud-7.0.4+dfsg/core/doc/admin/installation/configuration_hiawatha.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/configuration_lighttpd.html owncloud-7.0.4+dfsg/core/doc/admin/installation/configuration_lighttpd.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/configuration_nginx.html owncloud-7.0.4+dfsg/core/doc/admin/installation/configuration_nginx.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/configuration_yaws.html owncloud-7.0.4+dfsg/core/doc/admin/installation/configuration_yaws.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/hiawatha_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/installation/hiawatha_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/index.html owncloud-7.0.4+dfsg/core/doc/admin/installation/index.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/installation_appliance.html owncloud-7.0.4+dfsg/core/doc/admin/installation/installation_appliance.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/installation_linux.html owncloud-7.0.4+dfsg/core/doc/admin/installation/installation_linux.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/installation_macos.html owncloud-7.0.4+dfsg/core/doc/admin/installation/installation_macos.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/installation_others.html owncloud-7.0.4+dfsg/core/doc/admin/installation/installation_others.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/installation_source.html owncloud-7.0.4+dfsg/core/doc/admin/installation/installation_source.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/installation_ucs.html owncloud-7.0.4+dfsg/core/doc/admin/installation/installation_ucs.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/installation_windows.html owncloud-7.0.4+dfsg/core/doc/admin/installation/installation_windows.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/installation_wizard.html owncloud-7.0.4+dfsg/core/doc/admin/installation/installation_wizard.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/lighttpd_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/installation/lighttpd_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/linux_installation.html owncloud-7.0.4+dfsg/core/doc/admin/installation/linux_installation.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/macos_installation.html owncloud-7.0.4+dfsg/core/doc/admin/installation/macos_installation.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/nginx_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/installation/nginx_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/others_installation.html owncloud-7.0.4+dfsg/core/doc/admin/installation/others_installation.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/selinux_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/installation/selinux_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/source_installation.html owncloud-7.0.4+dfsg/core/doc/admin/installation/source_installation.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/ucs_installation.html owncloud-7.0.4+dfsg/core/doc/admin/installation/ucs_installation.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/windows_installation.html owncloud-7.0.4+dfsg/core/doc/admin/installation/windows_installation.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/installation/yaws_configuration.html owncloud-7.0.4+dfsg/core/doc/admin/installation/yaws_configuration.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/issues/index.html owncloud-7.0.4+dfsg/core/doc/admin/issues/index.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/maintenance/convert_db.html owncloud-7.0.4+dfsg/core/doc/admin/maintenance/convert_db.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/maintenance/index.html owncloud-7.0.4+dfsg/core/doc/admin/maintenance/index.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/maintenance/upgrade.html owncloud-7.0.4+dfsg/core/doc/admin/maintenance/upgrade.html
Les fichiers binaires /tmp/zV6oAxSKjw/owncloud-7.0.3+dfsg/core/doc/admin/objects.inv et /tmp/yL6vpOzOmz/owncloud-7.0.4+dfsg/core/doc/admin/objects.inv sont différents
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/antivirus_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/antivirus_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/auth_ldap.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/auth_ldap.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/automatic_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/automatic_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/background_jobs_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/background_jobs_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/background_jobs.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/background_jobs.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/big_file_upload_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/big_file_upload_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/collaborative_documents_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/collaborative_documents_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/config_sample_php_parameters.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/config_sample_php_parameters.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_3rdparty.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_3rdparty.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration-antivirus.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration-antivirus.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_apps.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_apps.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_assets.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_assets.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_automation.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_automation.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_config_sample_php.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_config_sample_php.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_custom_clients.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_custom_clients.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_database.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_database.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_encryption.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_encryption.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_file_sharing.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_file_sharing.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_files_locking.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_files_locking.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_knowledgebase.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_knowledgebase.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_language.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_language.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_logging.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_logging.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_mail.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_mail.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_preview.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_preview.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_reverseproxy.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_reverseproxy.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuration_users.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuration_users.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuring_big_file_upload.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuring_big_file_upload.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuring_documents.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuring_documents.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/configuring_search.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/configuring_search.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/custom_client_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/custom_client_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/custom_mount_config_gui.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/custom_mount_config_gui.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/custom_mount_config.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/custom_mount_config.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/custom_user_backend.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/custom_user_backend.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/database_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/database_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/email_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/email_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/encryption_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/encryption_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/external_storage_configuration_gui.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/external_storage_configuration_gui.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/external_storage_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/external_storage_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/file_sharing_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/file_sharing_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/files_locking_enabling.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/files_locking_enabling.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/index.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/index.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/js_css_asset_management_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/js_css_asset_management_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/knowledgebase_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/knowledgebase_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/language_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/language_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/logging_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/logging_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/previews_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/previews_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/reverse_proxy_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/reverse_proxy_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/search_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/search_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/server_to_server_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/server_to_server_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/server_to_server_managing.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/server_to_server_managing.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/serving_static_files_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/serving_static_files_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/thirdparty_php_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/thirdparty_php_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/user_auth_ftp_smb_imap.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/user_auth_ftp_smb_imap.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/user_auth_ldap.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/user_auth_ldap.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/user_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/user_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/configuration/xsendfile.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/configuration/xsendfile.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/contents.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/contents.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/index.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/index.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/appliance_installation.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/appliance_installation.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/apps_management_installation.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/apps_management_installation.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/configuration_hiawatha.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/configuration_hiawatha.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/configuration_lighttpd.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/configuration_lighttpd.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/configuration_nginx.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/configuration_nginx.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/configuration_yaws.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/configuration_yaws.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/hiawatha_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/hiawatha_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/index.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/index.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/installation_appliance.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/installation_appliance.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/installation_linux.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/installation_linux.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/installation_macos.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/installation_macos.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/installation_others.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/installation_others.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/installation_source.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/installation_source.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/installation_ucs.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/installation_ucs.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/installation_windows.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/installation_windows.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/installation_wizard.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/installation_wizard.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/lighttpd_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/lighttpd_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/linux_installation.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/linux_installation.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/macos_installation.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/macos_installation.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/nginx_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/nginx_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/others_installation.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/others_installation.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/selinux_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/selinux_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/source_installation.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/source_installation.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/ucs_installation.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/ucs_installation.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/windows_installation.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/windows_installation.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/installation/yaws_configuration.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/installation/yaws_configuration.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/issues/index.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/issues/index.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/maintenance/convert_db.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/maintenance/convert_db.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/maintenance/index.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/maintenance/index.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/admin/_sources/maintenance/upgrade.txt owncloud-7.0.4+dfsg/core/doc/admin/_sources/maintenance/upgrade.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/user/contents.html owncloud-7.0.4+dfsg/core/doc/user/contents.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/user/documents.html owncloud-7.0.4+dfsg/core/doc/user/documents.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/user/files/filesweb.html owncloud-7.0.4+dfsg/core/doc/user/files/filesweb.html
diff -Nru owncloud-7.0.3+dfsg/core/doc/user/_sources/documents.txt owncloud-7.0.4+dfsg/core/doc/user/_sources/documents.txt
diff -Nru owncloud-7.0.3+dfsg/core/doc/user/_sources/files/filesweb.txt owncloud-7.0.4+dfsg/core/doc/user/_sources/files/filesweb.txt
diff -Nru owncloud-7.0.3+dfsg/core/js/lostpassword.js owncloud-7.0.4+dfsg/core/js/lostpassword.js
--- owncloud-7.0.3+dfsg/core/js/lostpassword.js 2014-11-10 12:17:24.000000000 -0400
+++ owncloud-7.0.4+dfsg/core/js/lostpassword.js 2014-12-08 14:34:15.000000000 -0400
@@ -115,7 +115,11 @@
},
redirect : function(msg){
- window.location = OC.webroot;
+ if(OC.webroot !== '') {
+ window.location = OC.webroot;
+ } else {
+ window.location = '/';
+ }
},
resetError : function(msg){
diff -Nru owncloud-7.0.3+dfsg/core/js/share.js owncloud-7.0.4+dfsg/core/js/share.js
--- owncloud-7.0.3+dfsg/core/js/share.js 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/core/js/share.js 2014-12-08 14:34:15.000000000 -0400
@@ -444,10 +444,10 @@
}
});
}
- $('#shareWith').autocomplete({minLength: 1, source: function(search, response) {
+ $('#shareWith').autocomplete({minLength: 2, delay: 750, source: function(search, response) {
var $loading = $('#dropdown .shareWithLoading');
$loading.removeClass('hidden');
- $.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getShareWith', search: search.term, itemShares: OC.Share.itemShares }, function(result) {
+ $.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getShareWith', search: search.term.trim(), itemShares: OC.Share.itemShares }, function(result) {
$loading.addClass('hidden');
if (result.status == 'success' && result.data.length > 0) {
$( "#shareWith" ).autocomplete( "option", "autoFocus", true );
diff -Nru owncloud-7.0.3+dfsg/debian/changelog owncloud-7.0.4+dfsg/debian/changelog
--- owncloud-7.0.3+dfsg/debian/changelog 2014-11-13 13:50:08.000000000 -0400
+++ owncloud-7.0.4+dfsg/debian/changelog 2014-12-10 12:15:07.000000000 -0400
@@ -1,3 +1,107 @@
+owncloud (7.0.4+dfsg-2) unstable; urgency=medium
+
+ * Upload to unstable as agreed with the release team
+
+ -- David Prévot <taffit@debian.org> Wed, 10 Dec 2014 12:15:07 -0400
+
+owncloud (7.0.4+dfsg-1) experimental; urgency=medium
+
+ [ Lukas Reschke ]
+ * Trim port from domain
+ * Create config if it does not exists
+
+ [ Arthur Schiwon ]
+ * preserve an asterisk at the start when escaping a search term
+
+ [ Frank Karlitschek ]
+ * 7.0.4
+
+ [ David Prévot ]
+ * Refresh patches
+ * Update upstream changelog
+
+ -- David Prévot <taffit@debian.org> Tue, 09 Dec 2014 18:32:21 -0400
+
+owncloud (7.0.4~rc2+dfsg-1) experimental; urgency=medium
+
+ * Upload RC to experimental
+
+ [ Arthur Schiwon ]
+ * add ldap-search command to occ
+ * LDAP search filter creation changes
+
+ [ Lukas Reschke ]
+ * Allow read-only configuration
+
+ [ Frank Karlitschek ]
+ * 7.0.4 RC2
+
+ [ David Prévot ]
+ * Refresh patches
+
+ -- David Prévot <taffit@debian.org> Sat, 06 Dec 2014 01:51:30 -0400
+
+owncloud (7.0.4~rc1+dfsg-2) unstable; urgency=medium
+
+ * Upload to unstable as agreed with the release team
+
+ -- David Prévot <taffit@debian.org> Sat, 06 Dec 2014 17:38:10 -0400
+
+owncloud (7.0.4~rc1+dfsg-1) experimental; urgency=medium
+
+ * Upload RC to experimental
+
+ [ Morris Jobke ]
+ * Fix infinite loop if count and limit is 0
+
+ [ Lukas Reschke ]
+ * Run preupdate before an update
+ * Add repair steps for legacy config files
+ * Fix mapping of relative paths
+ * Backport \OC\Security\Crypto to ownCloud 7
+ * Only store user credentials when SMB_OC storage is enabled
+ * Use `/` as redirect location if webroot is set to an empty value
+ * Try to read the file only instead of trying to touch
+ * Don't show favicon to prevent iteration through subfolders
+ * Check for XMLWriter class
+
+ [ Vincent Petry ]
+ * Fix root path handling for WebDAV ext storage
+ * Fix file upload to ext storage when recovery key is enabled
+ * Show warning when invalid user was passed
+
+ [ Andreas Fischer ]
+ * user_ldap: Reimplement convertSID2Str() without BCMath dependency.
+
+ [ michag86 ]
+ * removal of wrong/double implemented check
+ * cleanup group admin(s) on deleteGroup
+
+ [ Clark Tomlinson ]
+ * Hiding add to your own cloud if server2server sharing is not enabled
+
+ [ Michael Roitzsch ]
+ * file size on non-(Linux/BSD/Windows)-installations
+
+ [ Bjoern Schiessle ]
+ * use login name to verify password
+
+ [ Craig Morrissey ]
+ * adjust autocomplete behavior for sharing menu
+
+ [ Georg Ehrke ]
+ * delete all children's previews when deleting a folder
+ * delete old previews
+
+ [ Frank Karlitschek ]
+ * 7.0.4 RC1
+
+ [ David Prévot ]
+ * Refresh patches
+ * Update upstream changelog
+
+ -- David Prévot <taffit@debian.org> Mon, 01 Dec 2014 19:10:39 -0400
+
owncloud (7.0.3+dfsg-1) unstable; urgency=medium
[ David Prévot ]
diff -Nru owncloud-7.0.3+dfsg/debian/patches/0001-Disable-the-appstore.patch owncloud-7.0.4+dfsg/debian/patches/0001-Disable-the-appstore.patch
--- owncloud-7.0.3+dfsg/debian/patches/0001-Disable-the-appstore.patch 2014-11-11 10:17:42.000000000 -0400
+++ owncloud-7.0.4+dfsg/debian/patches/0001-Disable-the-appstore.patch 2014-12-08 21:49:10.000000000 -0400
@@ -23,21 +23,21 @@
8 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/config/config.sample.php b/config/config.sample.php
-index a7f92d9..fb48959 100644
+index 6da3a68..fa627c5 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
-@@ -521,8 +521,9 @@ $CONFIG = array(
-
+@@ -539,8 +539,9 @@ $CONFIG = array(
/**
* When enabled, admins may install apps from the ownCloud app store.
-+ * Debian: disabled by default, see /usr/share/doc/owncloud/README.Debian
+ * The app store is disabled by default for ownCloud Enterprise Edition
++ * and for Debian, see /usr/share/doc/owncloud/README.Debian
*/
-'appstoreenabled' => true,
+'appstoreenabled' => false,
/**
* The URL of the appstore to use.
-@@ -536,12 +537,13 @@ $CONFIG = array(
+@@ -554,12 +555,13 @@ $CONFIG = array(
* file system path to the app folder. The key ``url`` defines the HTTP web path
* to that folder, starting from the ownCloud web root. The key ``writable``
* indicates if a web server can write files to that folder.
@@ -54,7 +54,7 @@
),
diff --git a/lib/base.php b/lib/base.php
-index 4cd9203..d39432a 100644
+index d653e06..f6684e0 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -157,7 +157,7 @@ class OC {
@@ -67,7 +67,7 @@
OC::$APPSROOTS[] = array(
'path' => rtrim(dirname(OC::$SERVERROOT), '/') . '/apps',
diff --git a/lib/private/app.php b/lib/private/app.php
-index 20c0f5f..ecfe180 100644
+index 9712775..f1984a9 100644
--- a/lib/private/app.php
+++ b/lib/private/app.php
@@ -487,7 +487,7 @@ class OC_App {
@@ -93,10 +93,10 @@
}
diff --git a/lib/private/setup.php b/lib/private/setup.php
-index 2d6cede..b4b9f0d 100644
+index a958aba..216d313 100644
--- a/lib/private/setup.php
+++ b/lib/private/setup.php
-@@ -186,6 +186,8 @@ class OC_Setup {
+@@ -189,6 +189,8 @@ class OC_Setup {
OC_Config::setValue('overwrite.cli.url', \OC_Request::serverProtocol() . '://' . \OC_Request::serverHost() . OC::$WEBROOT);
OC_Config::setValue('dbtype', $dbtype);
OC_Config::setValue('version', implode('.', OC_Util::getVersion()));
@@ -106,7 +106,7 @@
$dbSetup->initialize($options);
$dbSetup->setupDatabase($username);
diff --git a/lib/private/util.php b/lib/private/util.php
-index 08de46b..484b84c 100644
+index 2642a71..fa6c12d 100644
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -442,7 +442,7 @@ class OC_Util {
diff -Nru owncloud-7.0.3+dfsg/debian/patches/0002-Fix-displayed-version.patch owncloud-7.0.4+dfsg/debian/patches/0002-Fix-displayed-version.patch
--- owncloud-7.0.3+dfsg/debian/patches/0002-Fix-displayed-version.patch 2014-11-11 10:17:42.000000000 -0400
+++ owncloud-7.0.4+dfsg/debian/patches/0002-Fix-displayed-version.patch 2014-12-08 21:49:10.000000000 -0400
@@ -18,10 +18,10 @@
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/config/config.sample.php b/config/config.sample.php
-index fb48959..df81faa 100644
+index fa627c5..7e91a2e 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
-@@ -406,7 +406,7 @@ $CONFIG = array(
+@@ -414,7 +414,7 @@ $CONFIG = array(
* Check if ownCloud is up-to-date and shows a notification if a new version is
* available.
*/
@@ -44,10 +44,10 @@
if(isset($data['version']) && $data['version'] != '' and $data['version'] !== Array() && OC_User::isAdminUser(OC_User::getUser())) {
$this->assign('updateAvailable', true);
diff --git a/lib/private/util.php b/lib/private/util.php
-index 484b84c..360b170 100644
+index fa6c12d..b87449c 100644
--- a/lib/private/util.php
+++ b/lib/private/util.php
-@@ -1309,7 +1309,7 @@ class OC_Util {
+@@ -1316,7 +1316,7 @@ class OC_Util {
* @return string
*/
public static function getHumanVersion() {
diff -Nru owncloud-7.0.3+dfsg/debian/patches/0003-Improve-logfile-handling.patch owncloud-7.0.4+dfsg/debian/patches/0003-Improve-logfile-handling.patch
--- owncloud-7.0.3+dfsg/debian/patches/0003-Improve-logfile-handling.patch 2014-11-11 10:17:42.000000000 -0400
+++ owncloud-7.0.4+dfsg/debian/patches/0003-Improve-logfile-handling.patch 2014-12-08 21:49:11.000000000 -0400
@@ -14,10 +14,10 @@
3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/config/config.sample.php b/config/config.sample.php
-index df81faa..dfb774a 100644
+index 7e91a2e..2508e2e 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
-@@ -442,8 +442,9 @@ $CONFIG = array(
+@@ -459,8 +459,9 @@ $CONFIG = array(
/**
* Change the ownCloud logfile name from ``owncloud.log`` to something else.
@@ -29,10 +29,10 @@
/**
* Loglevel to start logging at. Valid values are: 0 = Debug, 1 = Info, 2 =
diff --git a/lib/base.php b/lib/base.php
-index d39432a..25992b2 100644
+index f6684e0..d7a9b0e 100644
--- a/lib/base.php
+++ b/lib/base.php
-@@ -615,7 +615,7 @@ class OC {
+@@ -617,7 +617,7 @@ class OC {
if (OC_Config::getValue('installed', false) && OC_Config::getValue('log_rotate_size', false) && !\OCP\Util::needUpgrade()) {
//don't try to do this before we are properly setup
//use custom logfile path if defined, otherwise use default of owncloud.log in data directory
diff -Nru owncloud-7.0.3+dfsg/debian/patches/path/0005-Adapt-Doctrine-Symphony-Patchwork-and-Pimple-path.patch owncloud-7.0.4+dfsg/debian/patches/path/0005-Adapt-Doctrine-Symphony-Patchwork-and-Pimple-path.patch
--- owncloud-7.0.3+dfsg/debian/patches/path/0005-Adapt-Doctrine-Symphony-Patchwork-and-Pimple-path.patch 2014-11-11 10:17:43.000000000 -0400
+++ owncloud-7.0.4+dfsg/debian/patches/path/0005-Adapt-Doctrine-Symphony-Patchwork-and-Pimple-path.patch 2014-12-08 21:49:11.000000000 -0400
@@ -14,10 +14,10 @@
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/lib/base.php b/lib/base.php
-index 25992b2..93eb6a6 100644
+index d7a9b0e..1f82058 100644
--- a/lib/base.php
+++ b/lib/base.php
-@@ -431,12 +431,12 @@ class OC {
+@@ -439,12 +439,12 @@ class OC {
// register autoloader
require_once __DIR__ . '/autoloader.php';
self::$loader = new \OC\Autoloader();
diff -Nru owncloud-7.0.3+dfsg/debian/upstream/changelog owncloud-7.0.4+dfsg/debian/upstream/changelog
--- owncloud-7.0.3+dfsg/debian/upstream/changelog 2014-11-13 13:49:45.000000000 -0400
+++ owncloud-7.0.4+dfsg/debian/upstream/changelog 2014-12-09 18:32:19.000000000 -0400
@@ -1,3 +1,19 @@
+Version 7.0.4 December 9th 2014
+
+ Added XMLWriter check
+ Better deleted outdated previews
+ Store storage credential in session only if needed
+ Don't disclose relative directory path for single shared files of user
+ Password reset fixes
+ Fix enable app only for a specific group
+ fixing port configuration in trusted domains
+ LDAP fixes
+ Make group search case sensitive
+ Allow admin to change users display name
+ ldap performance improvements
+ config.php can now be read only
+ Several smaller fixes
+
Version 7.0.3 November 13th 2014
Some OS X server fixes
diff -Nru owncloud-7.0.3+dfsg/lib/base.php owncloud-7.0.4+dfsg/lib/base.php
--- owncloud-7.0.3+dfsg/lib/base.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/base.php 2014-12-08 14:34:15.000000000 -0400
@@ -188,9 +188,17 @@
public static function checkConfig() {
$l = OC_L10N::get('lib');
- if (file_exists(self::$configDir . "/config.php")
- and !is_writable(self::$configDir . "/config.php")
- ) {
+
+ // Create config in case it does not already exists
+ $configFilePath = self::$configDir .'/config.php';
+ if(!file_exists($configFilePath)) {
+ @touch($configFilePath);
+ }
+
+ // Check if config is writable
+ $configFileWritable = is_writable($configFilePath);
+ if (!$configFileWritable && !OC_Helper::isReadOnlyConfigEnabled()
+ || !$configFileWritable && \OCP\Util::needUpgrade()) {
if (self::$CLI) {
echo $l->t('Cannot write into "config" directory!')."\n";
echo $l->t('This can usually be fixed by giving the webserver write access to the config directory')."\n";
@@ -573,14 +581,8 @@
header('HTTP/1.1 400 Bad Request');
header('Status: 400 Bad Request');
- $domain = $_SERVER['SERVER_NAME'];
- // Append port to domain in case it is not
- if($_SERVER['SERVER_PORT'] !== '80' && $_SERVER['SERVER_PORT'] !== '443') {
- $domain .= ':'.$_SERVER['SERVER_PORT'];
- }
-
$tmpl = new OCP\Template('core', 'untrustedDomain', 'guest');
- $tmpl->assign('domain', $domain);
+ $tmpl->assign('domain', $_SERVER['SERVER_NAME']);
$tmpl->printPage();
exit();
diff -Nru owncloud-7.0.3+dfsg/lib/private/appframework/middleware/security/securitymiddleware.php owncloud-7.0.4+dfsg/lib/private/appframework/middleware/security/securitymiddleware.php
--- owncloud-7.0.3+dfsg/lib/private/appframework/middleware/security/securitymiddleware.php 2014-11-10 12:17:24.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/appframework/middleware/security/securitymiddleware.php 2014-12-08 14:34:15.000000000 -0400
@@ -34,6 +34,7 @@
use OCP\IURLGenerator;
use OCP\IRequest;
use OCP\ILogger;
+use OCP\AppFramework\Controller;
/**
@@ -116,6 +117,16 @@
}
}
+ /**
+ * FIXME: Use DI once available
+ * Checks if app is enabled (also inclues a check whether user is allowed to access the resource)
+ * The getAppPath() check is here since components such as settings also use the AppFramework and
+ * therefore won't pass this check.
+ */
+ if(\OC_App::getAppPath($this->appName) !== false && !\OC_App::isEnabled($this->appName)) {
+ throw new SecurityException('App is not enabled', Http::STATUS_PRECONDITION_FAILED);
+ }
+
}
diff -Nru owncloud-7.0.3+dfsg/lib/private/app.php owncloud-7.0.4+dfsg/lib/private/app.php
--- owncloud-7.0.3+dfsg/lib/private/app.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/app.php 2014-12-08 14:34:15.000000000 -0400
@@ -1186,10 +1186,6 @@
* @return bool
*/
public static function updateApp($appId) {
- if (file_exists(self::getAppPath($appId) . '/appinfo/preupdate.php')) {
- self::loadApp($appId, false);
- include self::getAppPath($appId) . '/appinfo/preupdate.php';
- }
if (file_exists(self::getAppPath($appId) . '/appinfo/database.xml')) {
OC_DB::updateDbFromStructure(self::getAppPath($appId) . '/appinfo/database.xml');
}
diff -Nru owncloud-7.0.3+dfsg/lib/private/config.php owncloud-7.0.4+dfsg/lib/private/config.php
--- owncloud-7.0.3+dfsg/lib/private/config.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/config.php 2014-12-08 14:32:58.000000000 -0400
@@ -138,12 +138,12 @@
// Include file and merge config
foreach ($configFiles as $file) {
- if(!@touch($file) && $file === $this->configFilePath) {
- // Writing to the main config might not be possible, e.g. if the wrong
+ $filePointer = @fopen($file, 'r');
+ if($file === $this->configFilePath && $filePointer === false) {
+ // Opening the main config might not be possible, e.g. if the wrong
// permissions are set (likely on a new installation)
continue;
}
- $filePointer = fopen($file, 'r');
// Try to acquire a file lock
if(!flock($filePointer, LOCK_SH)) {
diff -Nru owncloud-7.0.3+dfsg/lib/private/files/filesystem.php owncloud-7.0.4+dfsg/lib/private/files/filesystem.php
--- owncloud-7.0.3+dfsg/lib/private/files/filesystem.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/files/filesystem.php 2014-12-08 14:34:15.000000000 -0400
@@ -695,13 +695,22 @@
* @param bool $stripTrailingSlash
* @return string
*/
- public static function normalizePath($path, $stripTrailingSlash = true) {
+ public static function normalizePath($path, $stripTrailingSlash = true, $isAbsolutePath = false) {
if ($path == '') {
return '/';
}
+
//no windows style slashes
$path = str_replace('\\', '/', $path);
+ // When normalizing an absolute path, we need to ensure that the drive-letter
+ // is still at the beginning on windows
+ $windows_drive_letter = '';
+ if ($isAbsolutePath && \OC_Util::runningOnWindows() && preg_match('#^([a-zA-Z])$#', $path[0]) && $path[1] == ':' && $path[2] == '/') {
+ $windows_drive_letter = substr($path, 0, 2);
+ $path = substr($path, 2);
+ }
+
//add leading slash
if ($path[0] !== '/') {
$path = '/' . $path;
@@ -730,7 +739,7 @@
//normalize unicode if possible
$path = \OC_Util::normalizeUnicode($path);
- return $path;
+ return $windows_drive_letter . $path;
}
/**
diff -Nru owncloud-7.0.3+dfsg/lib/private/files/mapper.php owncloud-7.0.4+dfsg/lib/private/files/mapper.php
--- owncloud-7.0.3+dfsg/lib/private/files/mapper.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/files/mapper.php 2014-12-08 14:32:58.000000000 -0400
@@ -66,8 +66,8 @@
*/
public function copy($path1, $path2)
{
- $path1 = $this->stripLast($path1);
- $path2 = $this->stripLast($path2);
+ $path1 = $this->resolveRelativePath($path1);
+ $path2 = $this->resolveRelativePath($path2);
$physicPath1 = $this->logicToPhysical($path1, true);
$physicPath2 = $this->logicToPhysical($path2, true);
@@ -113,18 +113,11 @@
return '';
}
- private function stripLast($path) {
- if (substr($path, -1) == '/') {
- $path = substr_replace($path, '', -1);
- }
- return $path;
- }
-
/**
* @param string $logicPath
*/
private function resolveLogicPath($logicPath) {
- $logicPath = $this->stripLast($logicPath);
+ $logicPath = $this->resolveRelativePath($logicPath);
$sql = 'SELECT * FROM `*PREFIX*file_map` WHERE `logic_path_hash` = ?';
$result = \OC_DB::executeAudited($sql, array(md5($logicPath)));
$result = $result->fetchRow();
@@ -136,7 +129,7 @@
}
private function resolvePhysicalPath($physicalPath) {
- $physicalPath = $this->stripLast($physicalPath);
+ $physicalPath = $this->resolveRelativePath($physicalPath);
$sql = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `physic_path_hash` = ?');
$result = \OC_DB::executeAudited($sql, array(md5($physicalPath)));
$result = $result->fetchRow();
@@ -144,12 +137,35 @@
return $result['logic_path'];
}
+ private function resolveRelativePath($path) {
+ $explodedPath = explode('/', $path);
+ $pathArray = array();
+ foreach ($explodedPath as $pathElement) {
+ if (empty($pathElement) || ($pathElement == '.')) {
+ continue;
+ } elseif ($pathElement == '..') {
+ if (count($pathArray) == 0) {
+ return false;
+ }
+ array_pop($pathArray);
+ } else {
+ array_push($pathArray, $pathElement);
+ }
+ }
+ if (substr($path, 0, 1) == '/') {
+ $path = '/';
+ } else {
+ $path = '';
+ }
+ return $path.implode('/', $pathArray);
+ }
+
/**
* @param string $logicPath
* @param boolean $store
*/
private function create($logicPath, $store) {
- $logicPath = $this->stripLast($logicPath);
+ $logicPath = $this->resolveRelativePath($logicPath);
$index = 0;
// create the slugified path
@@ -177,14 +193,12 @@
/**
* @param integer $index
*/
- public function slugifyPath($path, $index=null) {
+ public function slugifyPath($path, $index = null) {
$path = $this->stripRootFolder($path, $this->unchangedPhysicalRoot);
$pathElements = explode('/', $path);
$sluggedElements = array();
-
- $last= end($pathElements);
-
+
foreach ($pathElements as $pathElement) {
// remove empty elements
if (empty($pathElement)) {
@@ -196,20 +210,19 @@
// apply index to file name
if ($index !== null) {
- $last= array_pop($sluggedElements);
+ $last = array_pop($sluggedElements);
// if filename contains periods - add index number before last period
- if (preg_match('~\.[^\.]+$~i',$last,$extension)){
- array_push($sluggedElements, substr($last,0,-(strlen($extension[0]))).'-'.$index.$extension[0]);
+ if (preg_match('~\.[^\.]+$~i', $last, $extension)) {
+ array_push($sluggedElements, substr($last, 0, -(strlen($extension[0]))) . '-' . $index . $extension[0]);
} else {
// if filename doesn't contain periods add index ofter the last char
- array_push($sluggedElements, $last.'-'.$index);
- }
-
+ array_push($sluggedElements, $last . '-' . $index);
+ }
}
$sluggedPath = $this->unchangedPhysicalRoot.implode('/', $sluggedElements);
- return $this->stripLast($sluggedPath);
+ return $this->resolveRelativePath($sluggedPath);
}
/**
@@ -218,8 +231,8 @@
* @param string $text
* @return string
*/
- private function slugify($text)
- {
+ private function slugify($text) {
+ $originalText = $text;
// replace non letter or digits or dots by -
$text = preg_replace('~[^\\pL\d\.]+~u', '-', $text);
@@ -241,7 +254,17 @@
$text = preg_replace('~\.+$~', '', $text);
if (empty($text)) {
- return uniqid();
+ /**
+ * Item slug would be empty. Previously we used uniqid() here.
+ * However this means that the behaviour is not reproducible, so
+ * when uploading files into a "empty" folder, the folders name is
+ * different.
+ *
+ * If there would be a md5() hash collision, the deduplicate check
+ * will spot this and append an index later, so this should not be
+ * a problem.
+ */
+ return md5($originalText);
}
return $text;
diff -Nru owncloud-7.0.3+dfsg/lib/private/files/storage/dav.php owncloud-7.0.4+dfsg/lib/private/files/storage/dav.php
--- owncloud-7.0.3+dfsg/lib/private/files/storage/dav.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/files/storage/dav.php 2014-12-08 14:34:15.000000000 -0400
@@ -431,6 +431,7 @@
public function getPermissions($path) {
$this->init();
+ $path = $this->cleanPath($path);
$response = $this->client->propfind($this->encodePath($path), array('{http://owncloud.org/ns}permissions'));
if (isset($response['{http://owncloud.org/ns}permissions'])) {
return $this->parsePermissions($response['{http://owncloud.org/ns}permissions']);
@@ -475,6 +476,7 @@
*/
public function hasUpdated($path, $time) {
$this->init();
+ $path = $this->cleanPath($path);
try {
$response = $this->client->propfind($this->encodePath($path), array(
'{DAV:}getlastmodified',
diff -Nru owncloud-7.0.3+dfsg/lib/private/files/storage/mappedlocal.php owncloud-7.0.4+dfsg/lib/private/files/storage/mappedlocal.php
--- owncloud-7.0.3+dfsg/lib/private/files/storage/mappedlocal.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/files/storage/mappedlocal.php 2014-12-08 14:34:15.000000000 -0400
@@ -24,9 +24,6 @@
}
public function __destruct() {
- if (defined('PHPUNIT_RUN')) {
- $this->mapper->removePath($this->datadir, true, true);
- }
}
public function getId() {
diff -Nru owncloud-7.0.3+dfsg/lib/private/group/database.php owncloud-7.0.4+dfsg/lib/private/group/database.php
--- owncloud-7.0.3+dfsg/lib/private/group/database.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/group/database.php 2014-12-08 14:34:15.000000000 -0400
@@ -84,6 +84,10 @@
$stmt = OC_DB::prepare( "DELETE FROM `*PREFIX*group_user` WHERE `gid` = ?" );
$stmt->execute( array( $gid ));
+ // Delete the group-groupadmin relation
+ $stmt = OC_DB::prepare( "DELETE FROM `*PREFIX*group_admin` WHERE `gid` = ?" );
+ $stmt->execute( array( $gid ));
+
return true;
}
@@ -168,7 +172,7 @@
* Returns a list with all groups
*/
public function getGroups($search = '', $limit = null, $offset = null) {
- $stmt = OC_DB::prepare('SELECT `gid` FROM `*PREFIX*groups` WHERE `gid` LIKE ? ORDER BY `gid` ASC', $limit, $offset);
+ $stmt = OC_DB::prepare('SELECT `gid` FROM `*PREFIX*groups` WHERE LOWER(`gid`) LIKE LOWER(?) ORDER BY `gid` ASC', $limit, $offset);
$result = $stmt->execute(array('%' . $search . '%'));
$groups = array();
while ($row = $result->fetchRow()) {
diff -Nru owncloud-7.0.3+dfsg/lib/private/helper.php owncloud-7.0.4+dfsg/lib/private/helper.php
--- owncloud-7.0.3+dfsg/lib/private/helper.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/helper.php 2014-12-08 14:34:15.000000000 -0400
@@ -1049,4 +1049,12 @@
return array('free' => $free, 'used' => $used, 'total' => $total, 'relative' => $relative);
}
+
+ /**
+ * Returns whether the config file is set manually to read-only
+ * @return bool
+ */
+ public static function isReadOnlyConfigEnabled() {
+ return \OC::$server->getConfig()->getSystemValue('config_is_read_only', false);
+ }
}
diff -Nru owncloud-7.0.3+dfsg/lib/private/largefilehelper.php owncloud-7.0.4+dfsg/lib/private/largefilehelper.php
--- owncloud-7.0.3+dfsg/lib/private/largefilehelper.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/largefilehelper.php 2014-12-08 14:32:58.000000000 -0400
@@ -148,7 +148,7 @@
if (\OC_Helper::is_function_enabled('exec')) {
$os = strtolower(php_uname('s'));
$arg = escapeshellarg($filename);
- $result = '';
+ $result = null;
if (strpos($os, 'linux') !== false) {
$result = $this->exec("stat -c %s $arg");
} else if (strpos($os, 'bsd') !== false || strpos($os, 'darwin') !== false) {
diff -Nru owncloud-7.0.3+dfsg/lib/private/preview.php owncloud-7.0.4+dfsg/lib/private/preview.php
--- owncloud-7.0.3+dfsg/lib/private/preview.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/preview.php 2014-12-08 14:34:15.000000000 -0400
@@ -47,6 +47,7 @@
//filemapper used for deleting previews
// index is path, value is fileinfo
static public $deleteFileMapper = array();
+ static public $deleteChildrenMapper = array();
/**
* preview images object
@@ -188,6 +189,21 @@
return $this->info;
}
+
+ /**
+ * @return array|null
+ */
+ private function getChildren() {
+ $absPath = $this->fileView->getAbsolutePath($this->file);
+ $absPath = Files\Filesystem::normalizePath($absPath);
+
+ if (array_key_exists($absPath, self::$deleteChildrenMapper)) {
+ return self::$deleteChildrenMapper[$absPath];
+ }
+
+ return null;
+ }
+
/**
* set the path of the file you want a thumbnail from
* @param string $file
@@ -268,6 +284,10 @@
return $this;
}
+ /**
+ * @param bool $keepAspect
+ * @return $this
+ */
public function setKeepAspect($keepAspect) {
$this->keepAspect = $keepAspect;
return $this;
@@ -311,20 +331,25 @@
/**
* deletes all previews of a file
- * @return bool
*/
public function deleteAllPreviews() {
$file = $this->getFile();
$fileInfo = $this->getFileInfo($file);
- if($fileInfo !== null && $fileInfo !== false) {
- $fileId = $fileInfo->getId();
- $previewPath = $this->getThumbnailsFolder() . '/' . $fileId . '/';
- $this->userView->deleteAll($previewPath);
- return $this->userView->rmdir($previewPath);
+ $toDelete = $this->getChildren();
+ $toDelete[] = $fileInfo;
+
+ foreach ($toDelete as $delete) {
+ if ($delete !== null && $delete !== false) {
+ /** @var \OCP\Files\FileInfo $delete */
+ $fileId = $delete->getId();
+
+ $previewPath = $this->getPreviewPath($fileId);
+ $this->userView->deleteAll($previewPath);
+ $this->userView->rmdir($previewPath);
+ }
}
- return false;
}
/**
@@ -390,7 +415,7 @@
return array();
}
- $previewPath = $this->getThumbnailsFolder() . '/' . $fileId . '/';
+ $previewPath = $this->getPreviewPath($fileId);
$wantedAspectRatio = (float) ($this->getMaxX() / $this->getMaxY());
@@ -504,7 +529,7 @@
$this->preview = $preview;
$this->resizeAndCrop();
- $previewPath = $this->getThumbnailsFolder() . '/' . $fileId . '/';
+ $previewPath = $this->getPreviewPath($fileId);
$cachePath = $this->buildCachePath($fileId);
if ($this->userView->is_dir($this->getThumbnailsFolder() . '/') === false) {
@@ -661,6 +686,7 @@
/**
* register a new preview provider to be used
+ * @param string $class
* @param array $options
* @return void
*/
@@ -726,14 +752,24 @@
array_multisort($keys, SORT_DESC, self::$providers);
}
+ /**
+ * @param array $args
+ */
public static function post_write($args) {
self::post_delete($args, 'files/');
}
+ /**
+ * @param array $args
+ */
public static function prepare_delete_files($args) {
self::prepare_delete($args, 'files/');
}
+ /**
+ * @param array $args
+ * @param string $prefix
+ */
public static function prepare_delete($args, $prefix='') {
$path = $args['path'];
if (substr($path, 0, 1) === '/') {
@@ -741,20 +777,63 @@
}
$view = new \OC\Files\View('/' . \OC_User::getUser() . '/' . $prefix);
- $info = $view->getFileInfo($path);
- \OC\Preview::$deleteFileMapper = array_merge(
- \OC\Preview::$deleteFileMapper,
- array(
- Files\Filesystem::normalizePath($view->getAbsolutePath($path)) => $info,
- )
- );
+ $absPath = Files\Filesystem::normalizePath($view->getAbsolutePath($path));
+ self::addPathToDeleteFileMapper($absPath, $view->getFileInfo($path));
+ if ($view->is_dir($path)) {
+ $children = self::getAllChildren($view, $path);
+ self::$deleteChildrenMapper[$absPath] = $children;
+ }
+ }
+
+ /**
+ * @param string $absolutePath
+ * @param \OCP\Files\FileInfo $info
+ */
+ private static function addPathToDeleteFileMapper($absolutePath, $info) {
+ self::$deleteFileMapper[$absolutePath] = $info;
}
+ /**
+ * @param \OC\Files\View $view
+ * @param string $path
+ * @return array
+ */
+ private static function getAllChildren($view, $path) {
+ $children = $view->getDirectoryContent($path);
+ $childrensFiles = array();
+
+ $fakeRootLength = strlen($view->getRoot());
+
+ for ($i = 0; $i < count($children); $i++) {
+ $child = $children[$i];
+
+ $childsPath = substr($child->getPath(), $fakeRootLength);
+
+ if ($view->is_dir($childsPath)) {
+ $children = array_merge(
+ $children,
+ $view->getDirectoryContent($childsPath)
+ );
+ } else {
+ $childrensFiles[] = $child;
+ }
+ }
+
+ return $childrensFiles;
+ }
+
+ /**
+ * @param array $args
+ */
public static function post_delete_files($args) {
self::post_delete($args, 'files/');
}
+ /**
+ * @param array $args
+ * @param string $prefix
+ */
public static function post_delete($args, $prefix='') {
$path = Files\Filesystem::normalizePath($args['path']);
@@ -802,12 +881,18 @@
$maxX = $this->getMaxX();
$maxY = $this->getMaxY();
- $previewPath = $this->getThumbnailsFolder() . '/' . $fileId . '/';
- $preview = $previewPath . $maxX . '-' . $maxY . '.png';
+ $previewPath = $this->getPreviewPath($fileId);
+ $preview = $previewPath . strval($maxX) . '-' . strval($maxY);
if ($this->keepAspect) {
- $preview = $previewPath . $maxX . '-with-aspect.png';
- return $preview;
+ $preview .= '-with-aspect';
}
+ $preview .= '.png';
+
return $preview;
}
+
+
+ private function getPreviewPath($fileId) {
+ return $this->getThumbnailsFolder() . '/' . $fileId . '/';
+ }
}
diff -Nru owncloud-7.0.3+dfsg/lib/private/repair.php owncloud-7.0.4+dfsg/lib/private/repair.php
--- owncloud-7.0.3+dfsg/lib/private/repair.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/repair.php 2014-12-08 14:34:15.000000000 -0400
@@ -10,6 +10,7 @@
use OC\Hooks\BasicEmitter;
use OC\Hooks\Emitter;
+use OC\Repair\RepairConfig;
class Repair extends BasicEmitter {
/**
@@ -69,7 +70,8 @@
*/
public static function getRepairSteps() {
return array(
- new \OC\Repair\RepairMimeTypes()
+ new \OC\Repair\RepairMimeTypes(),
+ new RepairConfig(),
);
}
@@ -83,14 +85,15 @@
$steps = array(
new \OC\Repair\InnoDB(),
new \OC\Repair\Collation(\OC::$server->getConfig(), \OC_DB::getConnection()),
- new \OC\Repair\SearchLuceneTables()
+ new \OC\Repair\SearchLuceneTables(),
+ new \OC\Repair\RepairConfig()
);
//There is no need to delete all previews on every single update
//only 7.0.0 thru 7.0.2 generated broken previews
$currentVersion = \OC_Config::getValue('version');
if (version_compare($currentVersion, '7.0.0.0', '>=') &&
- version_compare($currentVersion, '7.0.2.2', '<=')) {
+ version_compare($currentVersion, '7.0.3.4', '<=')) {
$steps[] = new \OC\Repair\Preview();
}
diff -Nru owncloud-7.0.3+dfsg/lib/private/request.php owncloud-7.0.4+dfsg/lib/private/request.php
--- owncloud-7.0.3+dfsg/lib/private/request.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/request.php 2014-12-08 14:34:15.000000000 -0400
@@ -13,7 +13,7 @@
const USER_AGENT_ANDROID_MOBILE_CHROME = '#Android.*Chrome/[.0-9]*#';
const USER_AGENT_FREEBOX = '#^Mozilla/5\.0$#';
- const REGEX_LOCALHOST = '/^(127\.0\.0\.1|localhost)(:[0-9]+|)$/';
+ const REGEX_LOCALHOST = '/^(127\.0\.0\.1|localhost)$/';
/**
* Check overwrite condition
@@ -27,22 +27,50 @@
}
/**
+ * Strips a potential port from a domain (in format domain:port)
+ * @param $host
+ * @return string $host without appended port
+ */
+ public static function getDomainWithoutPort($host) {
+ $pos = strrpos($host, ':');
+ if ($pos !== false) {
+ $port = substr($host, $pos + 1);
+ if (is_numeric($port)) {
+ $host = substr($host, 0, $pos);
+ }
+ }
+ return $host;
+ }
+
+ /**
* Checks whether a domain is considered as trusted from the list
* of trusted domains. If no trusted domains have been configured, returns
* true.
* This is used to prevent Host Header Poisoning.
- * @param string $domain
+ * @param string $domainWithPort
* @return bool true if the given domain is trusted or if no trusted domains
* have been configured
*/
- public static function isTrustedDomain($domain) {
- $trustedList = \OC_Config::getValue('trusted_domains', array());
+ public static function isTrustedDomain($domainWithPort) {
+ // Extract port from domain if needed
+ $domain = self::getDomainWithoutPort($domainWithPort);
+
+ // FIXME: Empty config array defaults to true for now. - Deprecate this behaviour with ownCloud 8.
+ $trustedList = \OC::$server->getConfig()->getSystemValue('trusted_domains', array());
if (empty($trustedList)) {
return true;
}
+
+ // FIXME: Workaround for older instances still with port applied. Remove for ownCloud 9.
+ if(in_array($domainWithPort, $trustedList)) {
+ return true;
+ }
+
+ // Always allow access from localhost
if (preg_match(self::REGEX_LOCALHOST, $domain) === 1) {
return true;
}
+
return in_array($domain, $trustedList);
}
diff -Nru owncloud-7.0.3+dfsg/lib/private/security/crypto.php owncloud-7.0.4+dfsg/lib/private/security/crypto.php
--- owncloud-7.0.3+dfsg/lib/private/security/crypto.php 1969-12-31 20:00:00.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/security/crypto.php 2014-12-08 14:34:15.000000000 -0400
@@ -0,0 +1,130 @@
+<?php
+/**
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+
+namespace OC\Security;
+
+use Crypt_AES;
+use Crypt_Hash;
+use OCP\Security\ICrypto;
+use OCP\Security\StringUtils;
+use OCP\IConfig;
+
+/**
+ * Class Crypto provides a high-level encryption layer using AES-CBC. If no key has been provided
+ * it will use the secret defined in config.php as key. Additionally the message will be HMAC'd.
+ *
+ * Usage:
+ * $encryptWithDefaultPassword = \OC::$server->getCrypto()->encrypt('EncryptedText');
+ * $encryptWithCustompassword = \OC::$server->getCrypto()->encrypt('EncryptedText', 'password');
+ *
+ * @package OC\Security
+ */
+class Crypto implements ICrypto {
+ /** @var Crypt_AES $cipher */
+ private $cipher;
+ /** @var int */
+ private $ivLength = 16;
+ /** @var IConfig */
+ private $config;
+
+ /**
+ * @param IConfig $config
+ */
+ function __construct(IConfig $config) {
+ $this->cipher = new Crypt_AES();
+ $this->config = $config;
+ }
+
+ /**
+ * Custom implementation of hex2bin since the function is only available starting
+ * with PHP 5.4
+ *
+ * @TODO Remove this once 5.3 support for ownCloud is dropped
+ * @param $message
+ * @return string
+ */
+ protected static function hexToBin($message) {
+ if (function_exists('hex2bin')) {
+ return hex2bin($message);
+ }
+
+ return pack("H*", $message);
+ }
+
+ /**
+ * @param string $message The message to authenticate
+ * @param string $password Password to use (defaults to `secret` in config.php)
+ * @return string Calculated HMAC
+ */
+ public function calculateHMAC($message, $password = '') {
+ if($password === '') {
+ $password = $this->config->getSystemValue('secret');
+ }
+
+ // Append an "a" behind the password and hash it to prevent reusing the same password as for encryption
+ $password = hash('sha512', $password . 'a');
+
+ $hash = new Crypt_Hash('sha512');
+ $hash->setKey($password);
+ return $hash->hash($message);
+ }
+
+ /**
+ * Encrypts a value and adds an HMAC (Encrypt-Then-MAC)
+ * @param string $plaintext
+ * @param string $password Password to encrypt, if not specified the secret from config.php will be taken
+ * @return string Authenticated ciphertext
+ */
+ public function encrypt($plaintext, $password = '') {
+ if($password === '') {
+ $password = $this->config->getSystemValue('secret');
+ }
+ $this->cipher->setPassword($password);
+
+ $iv = \OC_Util::generateRandomBytes($this->ivLength);
+ $this->cipher->setIV($iv);
+
+ $ciphertext = bin2hex($this->cipher->encrypt($plaintext));
+ $hmac = bin2hex($this->calculateHMAC($ciphertext.$iv, $password));
+
+ return $ciphertext.'|'.$iv.'|'.$hmac;
+ }
+
+ /**
+ * Decrypts a value and verifies the HMAC (Encrypt-Then-Mac)
+ * @param string $authenticatedCiphertext
+ * @param string $password Password to encrypt, if not specified the secret from config.php will be taken
+ * @return string plaintext
+ * @throws \Exception If the HMAC does not match
+ */
+ public function decrypt($authenticatedCiphertext, $password = '') {
+ if($password === '') {
+ $password = $this->config->getSystemValue('secret');
+ }
+ $this->cipher->setPassword($password);
+
+ $parts = explode('|', $authenticatedCiphertext);
+ if(sizeof($parts) !== 3) {
+ throw new \Exception('Authenticated ciphertext could not be decoded.');
+ }
+
+ $ciphertext = self::hexToBin($parts[0]);
+ $iv = $parts[1];
+ $hmac = self::hexToBin($parts[2]);
+
+ $this->cipher->setIV($iv);
+
+ if(!StringUtils::equals($this->calculateHMAC($parts[0].$parts[1], $password), $hmac)) {
+ throw new \Exception('HMAC does not match.');
+ }
+
+ return $this->cipher->decrypt($ciphertext);
+ }
+
+}
\ Pas de fin de ligne à la fin du fichier
diff -Nru owncloud-7.0.3+dfsg/lib/private/security/stringutils.php owncloud-7.0.4+dfsg/lib/private/security/stringutils.php
--- owncloud-7.0.3+dfsg/lib/private/security/stringutils.php 1969-12-31 20:00:00.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/security/stringutils.php 2014-12-08 14:34:15.000000000 -0400
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Security;
+
+class StringUtils {
+
+ /**
+ * Compares whether two strings are equal. To prevent guessing of the string
+ * length this is done by comparing two hashes against each other and afterwards
+ * a comparison of the real string to prevent against the unlikely chance of
+ * collisions.
+ *
+ * Be aware that this function may leak whether the string to compare have a different
+ * length.
+ *
+ * @param string $expected The expected value
+ * @param string $input The input to compare against
+ * @return bool True if the two strings are equal, otherwise false.
+ */
+ public static function equals($expected, $input) {
+
+ if(!is_string($expected) || !is_string($input)) {
+ return false;
+ }
+
+ if(function_exists('hash_equals')) {
+ return hash_equals($expected, $input);
+ }
+
+ $randomString = \OC_Util::generateRandomBytes(10);
+
+ if(hash('sha512', $expected.$randomString) === hash('sha512', $input.$randomString)) {
+ if($expected === $input) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
\ Pas de fin de ligne à la fin du fichier
diff -Nru owncloud-7.0.3+dfsg/lib/private/server.php owncloud-7.0.4+dfsg/lib/private/server.php
--- owncloud-7.0.3+dfsg/lib/private/server.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/server.php 2014-12-08 14:34:15.000000000 -0400
@@ -10,6 +10,7 @@
use OC\Files\Node\Root;
use OC\Files\View;
use OCP\IServerContainer;
+use OC\Security\Crypto;
/**
* Class Server
@@ -199,6 +200,9 @@
$this->registerService('Search', function ($c) {
return new Search();
});
+ $this->registerService('Crypto', function ($c) {
+ return new Crypto(\OC::$server->getConfig());
+ });
$this->registerService('Db', function ($c) {
return new Db();
});
@@ -480,6 +484,15 @@
}
/**
+ * Returns a Crypto instance
+ *
+ * @return \OCP\Security\ICrypto
+ */
+ function getCrypto() {
+ return $this->query('Crypto');
+ }
+
+ /**
* Returns an instance of the db facade
*
* @return \OCP\IDb
diff -Nru owncloud-7.0.3+dfsg/lib/private/setup.php owncloud-7.0.4+dfsg/lib/private/setup.php
--- owncloud-7.0.3+dfsg/lib/private/setup.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/setup.php 2014-12-08 14:34:15.000000000 -0400
@@ -90,7 +90,9 @@
'name' => 'MS SQL'
)
);
- $configuredDatabases = $this->config->getSystemValue('supportedDatabases', array('sqlite', 'mysql', 'pgsql', 'oci', 'mssql'));
+
+ $configuredDatabases = $this->config->getSystemValue('supportedDatabases',
+ array('sqlite', 'mysql', 'pgsql'));
if(!is_array($configuredDatabases)) {
throw new Exception('Supported databases are not properly configured.');
}
@@ -164,7 +166,7 @@
&& is_array($options['trusted_domains'])) {
$trustedDomains = $options['trusted_domains'];
} else {
- $trustedDomains = array(OC_Request::serverHost());
+ $trustedDomains = array(\OC_Request::getDomainWithoutPort(\OC_Request::serverHost()));
}
if (OC_Util::runningOnWindows()) {
@@ -179,6 +181,7 @@
//generate a random salt that is used to salt the local user passwords
$salt = OC_Util::generateRandomBytes(30);
OC_Config::setValue('passwordsalt', $salt);
+ OC_Config::setValue('secret', OC_Util::generateRandomBytes(96));
//write the config file
OC_Config::setValue('trusted_domains', $trustedDomains);
diff -Nru owncloud-7.0.3+dfsg/lib/private/share/helper.php owncloud-7.0.4+dfsg/lib/private/share/helper.php
--- owncloud-7.0.3+dfsg/lib/private/share/helper.php 2014-11-10 12:17:24.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/share/helper.php 2014-12-08 14:32:58.000000000 -0400
@@ -189,20 +189,23 @@
public static function calculateExpireDate($defaultExpireSettings, $creationTime, $userExpireDate = null) {
$expires = false;
+ $defaultExpires = null;
if (!empty($defaultExpireSettings['defaultExpireDateSet'])) {
- $expires = $creationTime + $defaultExpireSettings['expireAfterDays'] * 86400;
+ $defaultExpires = $creationTime + $defaultExpireSettings['expireAfterDays'] * 86400;
}
if (isset($userExpireDate)) {
// if the admin decided to enforce the default expire date then we only take
// the user defined expire date of it is before the default expire date
- if ($expires && !empty($defaultExpireSettings['enforceExpireDate'])) {
- $expires = min($userExpireDate, $expires);
+ if ($defaultExpires && !empty($defaultExpireSettings['enforceExpireDate'])) {
+ $expires = min($userExpireDate, $defaultExpires);
} else {
$expires = $userExpireDate;
}
+ } else if ($defaultExpires && !empty($defaultExpireSettings['enforceExpireDate'])) {
+ $expires = $defaultExpires;
}
return $expires;
diff -Nru owncloud-7.0.3+dfsg/lib/private/share/share.php owncloud-7.0.4+dfsg/lib/private/share/share.php
--- owncloud-7.0.3+dfsg/lib/private/share/share.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/share/share.php 2014-12-08 14:34:15.000000000 -0400
@@ -288,9 +288,10 @@
* @param string $itemType
* @param string $itemSource
* @param string $user User user to whom the item was shared
+ * @param int $shareType only look for a specific share type
* @return array Return list of items with file_target, permissions and expiration
*/
- public static function getItemSharedWithUser($itemType, $itemSource, $user) {
+ public static function getItemSharedWithUser($itemType, $itemSource, $user, $shareType = null) {
$shares = array();
$fileDependend = false;
@@ -314,6 +315,11 @@
$arguments[] = $user;
}
+ if ($shareType !== null) {
+ $where .= ' AND `share_type` = ? ';
+ $arguments[] = $shareType;
+ }
+
$query = \OC_DB::prepare('SELECT ' . $select . ' FROM `*PREFIX*share` '. $where);
$result = \OC_DB::executeAudited($query, $arguments);
@@ -695,7 +701,7 @@
// check if it is a valid itemType
self::getBackend($itemType);
- $items = self::getItemSharedWithUser($itemType, $itemSource, $shareWith);
+ $items = self::getItemSharedWithUser($itemType, $itemSource, $shareWith, $shareType);
$toDelete = array();
$newParent = null;
@@ -1254,14 +1260,18 @@
if (isset($shareType)) {
// Include all user and group items
if ($shareType == self::$shareTypeUserAndGroups && isset($shareWith)) {
- $where .= ' AND `share_type` IN (?,?,?)';
+ $where .= ' AND ((`share_type` in (?, ?) AND `share_with` = ?) ';
$queryArgs[] = self::SHARE_TYPE_USER;
- $queryArgs[] = self::SHARE_TYPE_GROUP;
$queryArgs[] = self::$shareTypeGroupUserUnique;
- $userAndGroups = array_merge(array($shareWith), \OC_Group::getUserGroups($shareWith));
- $placeholders = join(',', array_fill(0, count($userAndGroups), '?'));
- $where .= ' AND `share_with` IN ('.$placeholders.')';
- $queryArgs = array_merge($queryArgs, $userAndGroups);
+ $queryArgs[] = $shareWith;
+ $groups = \OC_Group::getUserGroups($shareWith);
+ if (!empty($groups)) {
+ $placeholders = join(',', array_fill(0, count($groups), '?'));
+ $where .= ' OR (`share_type` = ? AND `share_with` IN ('.$placeholders.')) ';
+ $queryArgs[] = self::SHARE_TYPE_GROUP;
+ $queryArgs = array_merge($queryArgs, $groups);
+ }
+ $where .= ')';
// Don't include own group shares
$where .= ' AND `uid_owner` != ?';
$queryArgs[] = $shareWith;
@@ -1452,8 +1462,11 @@
$row['permissions'] &= ~\OCP\PERMISSION_SHARE;
}
// Add display names to result
- if ( isset($row['share_with']) && $row['share_with'] != '') {
+ if ( isset($row['share_with']) && $row['share_with'] != '' &&
+ isset($row['share_with']) && $row['share_type'] === self::SHARE_TYPE_USER) {
$row['share_with_displayname'] = \OCP\User::getDisplayName($row['share_with']);
+ } else {
+ $row['share_with_displayname'] = $row['share_with'];
}
if ( isset($row['uid_owner']) && $row['uid_owner'] != '') {
$row['displayname_owner'] = \OCP\User::getDisplayName($row['uid_owner']);
diff -Nru owncloud-7.0.3+dfsg/lib/private/updater.php owncloud-7.0.4+dfsg/lib/private/updater.php
--- owncloud-7.0.3+dfsg/lib/private/updater.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/updater.php 2014-12-08 14:34:15.000000000 -0400
@@ -262,7 +262,6 @@
protected function checkAppUpgrade($version) {
$apps = \OC_App::getEnabledApps();
-
foreach ($apps as $appId) {
if ($version) {
$info = \OC_App::getAppInfo($appId);
@@ -272,6 +271,15 @@
}
if ($compatible && \OC_App::shouldUpgrade($appId)) {
+ /**
+ * FIXME: The preupdate check is performed before the database migration, otherwise database changes
+ * are not possible anymore within it. - Consider this when touching the code.
+ * @link https://github.com/owncloud/core/issues/10980
+ * @see \OC_App::updateApp
+ */
+ if (file_exists(\OC_App::getAppPath($appId) . '/appinfo/preupdate.php')) {
+ $this->includePreUpdate($appId);
+ }
if (file_exists(\OC_App::getAppPath($appId) . '/appinfo/database.xml')) {
\OC_DB::simulateUpdateDbFromStructure(\OC_App::getAppPath($appId) . '/appinfo/database.xml');
}
@@ -281,6 +289,14 @@
$this->emit('\OC\Updater', 'appUpgradeCheck');
}
+ /**
+ * Includes the pre-update file. Done here to prevent namespace mixups.
+ * @param string $appId
+ */
+ private function includePreUpdate($appId) {
+ include \OC_App::getAppPath($appId) . '/appinfo/preupdate.php';
+ }
+
protected function doAppUpgrade() {
$apps = \OC_App::getEnabledApps();
diff -Nru owncloud-7.0.3+dfsg/lib/private/user/user.php owncloud-7.0.4+dfsg/lib/private/user/user.php
--- owncloud-7.0.3+dfsg/lib/private/user/user.php 2014-11-10 12:17:24.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/user/user.php 2014-12-08 14:34:15.000000000 -0400
@@ -115,7 +115,7 @@
*/
public function setDisplayName($displayName) {
$displayName = trim($displayName);
- if ($this->canChangeDisplayName() && !empty($displayName)) {
+ if ($this->backend->implementsActions(\OC_USER_BACKEND_SET_DISPLAYNAME) && !empty($displayName)) {
$this->displayName = $displayName;
$result = $this->backend->setDisplayName($this->uid, $displayName);
return $result !== false;
diff -Nru owncloud-7.0.3+dfsg/lib/private/util.php owncloud-7.0.4+dfsg/lib/private/util.php
--- owncloud-7.0.3+dfsg/lib/private/util.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/private/util.php 2014-12-08 14:34:15.000000000 -0400
@@ -497,6 +497,13 @@
);
$webServerRestart = true;
}
+ if(!class_exists('XMLWriter')) {
+ $errors[] = array(
+ 'error'=> $l->t('PHP module %s not installed.', array('XMLWriter')),
+ 'hint'=>$moduleHint
+ );
+ $webServerRestart = true;
+ }
if(!class_exists('DOMDocument')) {
$errors[] = array(
'error'=> $l->t('PHP module %s not installed.', array('dom')),
diff -Nru owncloud-7.0.3+dfsg/lib/public/security/icrypto.php owncloud-7.0.4+dfsg/lib/public/security/icrypto.php
--- owncloud-7.0.3+dfsg/lib/public/security/icrypto.php 1969-12-31 20:00:00.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/public/security/icrypto.php 2014-12-08 14:34:15.000000000 -0400
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Security;
+
+/**
+ * Class Crypto provides a high-level encryption layer using AES-CBC. If no key has been provided
+ * it will use the secret defined in config.php as key. Additionally the message will be HMAC'd.
+ *
+ * Usage:
+ * $encryptWithDefaultPassword = \OC::$server->getCrypto()->encrypt('EncryptedText');
+ * $encryptWithCustomPassword = \OC::$server->getCrypto()->encrypt('EncryptedText', 'password');
+ *
+ * @package OCP\Security
+ */
+interface ICrypto {
+
+ /**
+ * @param string $message The message to authenticate
+ * @param string $password Password to use (defaults to `secret` in config.php)
+ * @return string Calculated HMAC
+ */
+ public function calculateHMAC($message, $password = '');
+
+ /**
+ * Encrypts a value and adds an HMAC (Encrypt-Then-MAC)
+ * @param string $plaintext
+ * @param string $password Password to encrypt, if not specified the secret from config.php will be taken
+ * @return string Authenticated ciphertext
+ */
+ public function encrypt($plaintext, $password = '');
+
+ /**
+ * Decrypts a value and verifies the HMAC (Encrypt-Then-Mac)
+ * @param string $authenticatedCiphertext
+ * @param string $password Password to encrypt, if not specified the secret from config.php will be taken
+ * @return string plaintext
+ * @throws \Exception If the HMAC does not match
+ */
+ public function decrypt($authenticatedCiphertext, $password = '');
+}
\ Pas de fin de ligne à la fin du fichier
diff -Nru owncloud-7.0.3+dfsg/lib/public/security/stringutils.php owncloud-7.0.4+dfsg/lib/public/security/stringutils.php
--- owncloud-7.0.3+dfsg/lib/public/security/stringutils.php 1969-12-31 20:00:00.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/public/security/stringutils.php 2014-12-08 14:34:15.000000000 -0400
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+
+namespace OCP\Security;
+
+class StringUtils {
+ /**
+ * Compares whether two strings are equal. To prevent guessing of the string
+ * length this is done by comparing two hashes against each other and afterwards
+ * a comparison of the real string to prevent against the unlikely chance of
+ * collisions.
+ * @param string $expected The expected value
+ * @param string $input The input to compare against
+ * @return bool True if the two strings are equal, otherwise false.
+ */
+ public static function equals($expected, $input) {
+ return \OC\Security\StringUtils::equals($expected, $input);
+ }
+}
\ Pas de fin de ligne à la fin du fichier
diff -Nru owncloud-7.0.3+dfsg/lib/repair/repairconfig.php owncloud-7.0.4+dfsg/lib/repair/repairconfig.php
--- owncloud-7.0.3+dfsg/lib/repair/repairconfig.php 1969-12-31 20:00:00.000000000 -0400
+++ owncloud-7.0.4+dfsg/lib/repair/repairconfig.php 2014-12-08 14:34:15.000000000 -0400
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Repair;
+
+use OC\Hooks\BasicEmitter;
+use OC\RepairStep;
+use Sabre\DAV\Exception;
+
+/**
+ * Class RepairConfig
+ *
+ * @package OC\Repair
+ */
+class RepairConfig extends BasicEmitter implements RepairStep {
+
+ /**
+ * @return string
+ */
+ public function getName() {
+ return 'Repair config';
+ }
+
+ /**
+ * Updates the configuration after running an update
+ */
+ public function run() {
+ $this->removePortsFromTrustedDomains();
+ $this->addSecret();
+ }
+
+ /**
+ * Remove ports from existing trusted domains in config.php
+ */
+ private function removePortsFromTrustedDomains() {
+ $trustedDomains = \OC::$server->getConfig()->getSystemValue('trusted_domains', array());
+ $newTrustedDomains = array();
+ foreach($trustedDomains as $domain) {
+ $pos = strrpos($domain, ':');
+ if ($pos !== false) {
+ $port = substr($domain, $pos + 1);
+ if (is_numeric($port)) {
+ $domain = substr($domain, 0, $pos);
+ }
+ }
+ $newTrustedDomains[] = $domain;
+ }
+ \OC::$server->getConfig()->setSystemValue('trusted_domains', $newTrustedDomains);
+ }
+
+ /**
+ * Adds a secret to config.php
+ */
+ private function addSecret() {
+ if(\OC::$server->getConfig()->getSystemValue('secret', null) === null) {
+ $secret = \OC_Util::generateRandomBytes(96);
+ \OC::$server->getConfig()->setSystemValue('secret', $secret);
+ }
+ }
+}
diff -Nru owncloud-7.0.3+dfsg/settings/admin.php owncloud-7.0.4+dfsg/settings/admin.php
--- owncloud-7.0.3+dfsg/settings/admin.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/settings/admin.php 2014-12-08 14:34:15.000000000 -0400
@@ -42,6 +42,7 @@
$tmpl->assign('entries', $entries);
$tmpl->assign('entriesremain', $entriesremain);
$tmpl->assign('htaccessworking', $htaccessworking);
+$tmpl->assign('readOnlyConfigEnabled', OC_Helper::isReadOnlyConfigEnabled());
$tmpl->assign('isLocaleWorking', OC_Util::isSetLocaleWorking());
$tmpl->assign('isAnnotationsWorking', OC_Util::isAnnotationsWorking());
$tmpl->assign('has_fileinfo', OC_Util::fileInfoLoaded());
@@ -56,6 +57,7 @@
$excludeGroups = OC_Appconfig::getValue('core', 'shareapi_exclude_groups', 'no') === 'yes' ? true : false;
$tmpl->assign('shareExcludeGroups', $excludeGroups);
$excludedGroupsList = OC_Appconfig::getValue('core', 'shareapi_exclude_groups_list', '');
+
$excludedGroupsList = explode(',', $excludedGroupsList); // FIXME: this should be JSON!
$tmpl->assign('shareExcludedGroupsList', implode('|', $excludedGroupsList));
diff -Nru owncloud-7.0.3+dfsg/settings/js/apps.js owncloud-7.0.4+dfsg/settings/js/apps.js
--- owncloud-7.0.3+dfsg/settings/js/apps.js 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/settings/js/apps.js 2014-12-08 14:34:15.000000000 -0400
@@ -235,7 +235,7 @@
element.val(t('settings','Uninstall'));
} else {
OC.Settings.Apps.removeNavigation(appid);
- appitem.removeClass('active');
+ $('#app-navigation ul li').filterAttr('data-id', appid).remove();
}
},'json');
},
diff -Nru owncloud-7.0.3+dfsg/settings/templates/admin.php owncloud-7.0.4+dfsg/settings/templates/admin.php
--- owncloud-7.0.3+dfsg/settings/templates/admin.php 2014-11-10 12:18:34.000000000 -0400
+++ owncloud-7.0.4+dfsg/settings/templates/admin.php 2014-12-08 14:34:15.000000000 -0400
@@ -62,14 +62,28 @@
// is htaccess working ?
if (!$_['htaccessworking']) {
?>
-<div class="section">
- <h2><?php p($l->t('Security Warning'));?></h2>
+ <div class="section">
+ <h2><?php p($l->t('Security Warning')); ?></h2>
<span class="securitywarning">
<?php p($l->t('Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root.')); ?>
</span>
-</div>
+ </div>
+<?php
+}
+
+// is read only config enabled
+if ($_['readOnlyConfigEnabled']) {
+?>
+<div class="section">
+ <h2><?php p($l->t('Read-Only config enabled'));?></h2>
+
+ <span class="securitywarning">
+ <?php p($l->t('The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update.')); ?>
+ </span>
+
+ </div>
<?php
}
diff -Nru owncloud-7.0.3+dfsg/version.php owncloud-7.0.4+dfsg/version.php
--- owncloud-7.0.3+dfsg/version.php 2014-11-10 12:19:38.000000000 -0400
+++ owncloud-7.0.4+dfsg/version.php 2014-12-08 14:35:45.000000000 -0400
@@ -1,6 +1,6 @@
<?php
-$OC_Version = array(7,0,3,4);
-$OC_VersionString = '7.0.3';
+$OC_Version = array(7,0,4,2);
+$OC_VersionString = '7.0.4';
$OC_Edition = '';
$OC_Channel = 'stable';
-$OC_Build = '2014-11-10T16:19:38+00:00';
+$OC_Build = '2014-12-08T18:35:45+00:00';
Attachment:
signature.asc
Description: OpenPGP digital signature