Merge pull request #23108 from owncloud/set-encrypted-version-at-least-to-1
Ensure that stored version is at least 1 for cross-storage copy
This commit is contained in:
commit
2f5b929ee9
|
@ -634,7 +634,18 @@ class Encryption extends Wrapper {
|
||||||
'encrypted' => (bool)$isEncrypted,
|
'encrypted' => (bool)$isEncrypted,
|
||||||
];
|
];
|
||||||
if($isEncrypted === 1) {
|
if($isEncrypted === 1) {
|
||||||
$cacheInformation['encryptedVersion'] = $sourceStorage->getCache()->get($sourceInternalPath)['encryptedVersion'];
|
$encryptedVersion = $sourceStorage->getCache()->get($sourceInternalPath)['encryptedVersion'];
|
||||||
|
|
||||||
|
// In case of a move operation from an unencrypted to an encrypted
|
||||||
|
// storage the old encrypted version would stay with "0" while the
|
||||||
|
// correct value would be "1". Thus we manually set the value to "1"
|
||||||
|
// for those cases.
|
||||||
|
// See also https://github.com/owncloud/core/issues/23078
|
||||||
|
if($encryptedVersion === 0) {
|
||||||
|
$encryptedVersion = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$cacheInformation['encryptedVersion'] = $encryptedVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
// in case of a rename we need to manipulate the source cache because
|
// in case of a rename we need to manipulate the source cache because
|
||||||
|
|
|
@ -672,6 +672,48 @@ class Encryption extends Storage {
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testCopyBetweenStorageMinimumEncryptedVersion() {
|
||||||
|
$storage2 = $this->getMockBuilder('OCP\Files\Storage')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$sourceInternalPath = $targetInternalPath = 'file.txt';
|
||||||
|
$preserveMtime = $isRename = false;
|
||||||
|
|
||||||
|
$storage2->expects($this->any())
|
||||||
|
->method('fopen')
|
||||||
|
->willReturnCallback(function($path, $mode) {
|
||||||
|
$temp = \OC::$server->getTempManager();
|
||||||
|
return fopen($temp->getTemporaryFile(), $mode);
|
||||||
|
});
|
||||||
|
$cache = $this->getMock('\OCP\Files\Cache\ICache');
|
||||||
|
$cache->expects($this->once())
|
||||||
|
->method('get')
|
||||||
|
->with($sourceInternalPath)
|
||||||
|
->willReturn(['encryptedVersion' => 0]);
|
||||||
|
$storage2->expects($this->once())
|
||||||
|
->method('getCache')
|
||||||
|
->willReturn($cache);
|
||||||
|
$this->encryptionManager->expects($this->any())
|
||||||
|
->method('isEnabled')
|
||||||
|
->willReturn(true);
|
||||||
|
global $mockedMountPointEncryptionEnabled;
|
||||||
|
$mockedMountPointEncryptionEnabled = true;
|
||||||
|
|
||||||
|
$expectedCachePut = [
|
||||||
|
'encrypted' => true,
|
||||||
|
];
|
||||||
|
$expectedCachePut['encryptedVersion'] = 1;
|
||||||
|
|
||||||
|
$this->cache->expects($this->once())
|
||||||
|
->method('put')
|
||||||
|
->with($sourceInternalPath, $expectedCachePut);
|
||||||
|
|
||||||
|
$this->invokePrivate($this->instance, 'copyBetweenStorage', [$storage2, $sourceInternalPath, $targetInternalPath, $preserveMtime, $isRename]);
|
||||||
|
|
||||||
|
$this->assertFalse(false);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider dataCopyBetweenStorage
|
* @dataProvider dataCopyBetweenStorage
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue