Skip to content

Commit 73d31b8

Browse files
committed
SQLiteJournal: filesystem permissions like ordinary file [Closes #29]
1 parent 8725eaf commit 73d31b8

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
@@ -37,6 +37,10 @@ public function __construct($path)
3737

3838
private function open()
3939
{
40+
if ($this->path !== ':memory:' && !is_file($this->path)) {
41+
touch($this->path); // ensures ordinary file permissions
42+
}
43+
4044
$this->pdo = new \PDO('sqlite:' . $this->path);
4145
$this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
4246
$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)