Skip to content

Commit 9512ca5

Browse files
milodg
authored andcommitted
SQLiteJournal: filesystem permissions like ordinary file [Closes #29]
1 parent 485c09a commit 9512ca5

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

src/Caching/Storages/SQLiteJournal.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ private function open()
3838
throw new Nette\NotSupportedException('SQLiteJournal requires PHP extension pdo_sqlite which is not loaded.');
3939
}
4040

41+
if ($this->path !== ':memory:' && !is_file($this->path)) {
42+
touch($this->path); // ensures ordinary file permissions
43+
}
44+
4145
$this->pdo = new \PDO('sqlite:' . $this->path);
4246
$this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
4347
$this->pdo->exec('
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
/**
4+
* Test: Nette\Caching\Storages\SQLiteJournal database file permissions.
5+
*/
6+
7+
use Nette\Caching\Storages\SQLiteJournal;
8+
use Tester\Assert;
9+
10+
11+
require __DIR__ . '/../bootstrap.php';
12+
13+
14+
if (!extension_loaded('pdo_sqlite')) {
15+
Tester\Environment::skip('Requires PHP extension pdo_sqlite.');
16+
} elseif (defined('PHP_WINDOWS_VERSION_BUILD')) {
17+
Tester\Environment::skip('UNIX test only.');
18+
}
19+
20+
21+
test(function () {
22+
$file = TEMP_DIR . '/sqlitejournal.permissions.1.sqlite';
23+
Assert::false(file_exists($file));
24+
25+
umask(0);
26+
(new SQLiteJournal($file))->write('foo', []);
27+
28+
Assert::same(0666, fileperms($file) & 0777);
29+
});
30+
31+
32+
test(function () {
33+
$file = TEMP_DIR . '/sqlitejournal.permissions.2.sqlite';
34+
Assert::false(file_exists($file));
35+
36+
umask(0077);
37+
(new SQLiteJournal($file))->write('foo', []);
38+
39+
Assert::same(0600, fileperms($file) & 0777);
40+
});

0 commit comments

Comments
 (0)