Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1.1.x windows compatibility patches (resolves #15) #16

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/VirtualFileSystem/Factory.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ class Factory
*/
public function __construct()
{
$this->userid = posix_getuid();
$this->groupid = posix_getgid();
$this->userid = function_exists('posix_getuid') ? posix_getuid() : 0;
$this->groupid = function_exists('posix_getgid') ? posix_getgid() : 0;
}

/**
Expand Down
4 changes: 2 additions & 2 deletions src/VirtualFileSystem/Wrapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,7 @@ public function stream_metadata($path, $option, $value)
);
return false;
}
$uid = posix_getpwnam($value)['uid'];
$uid = function_exists('posix_getpwnam') ? posix_getpwnam($value)['uid'] : 0;
$node->chown($uid);
$node->setChangeTime(time());
break;
Expand All @@ -449,7 +449,7 @@ public function stream_metadata($path, $option, $value)
);
return false;
}
$gid = posix_getgrnam($value)['gid'];
$gid = function_exists('posix_getgrnam') ? posix_getgrnam($value)['gid'] : 0;
$node->chgrp($gid);
$node->setChangeTime(time());
break;
Expand Down
4 changes: 2 additions & 2 deletions src/VirtualFileSystem/Wrapper/PermissionHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ class PermissionHelper
*/
public function __construct($uid = null, $gid = null)
{
$this->userid = is_null($uid) ? posix_getuid() : $uid;
$this->groupid = is_null($gid) ? posix_getgid() : $gid;
$this->userid = is_null($uid) ? (function_exists('posix_getuid') ? posix_getuid() : 0) : $uid;
$this->groupid = is_null($gid) ? ((function_exists('posix_getgid') ? posix_getgid() : 0)) : $gid;
}

/**
Expand Down
28 changes: 18 additions & 10 deletions tests/VirtualFileSystem/Wrapper/PermissionHelperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,19 @@

class PermissionHelperTest extends \PHPUnit_Framework_TestCase
{
protected $uid;
protected $gid;

public function setUp() {
$this->uid = function_exists('posix_getuid') ? posix_getuid() : 0;
$this->gid = function_exists('posix_getgid') ? posix_getgid() : 0;
}

public function testUserPermissionsAreCalculatedCorrectly()
{

$file = new File('file');
$file->chown(posix_getuid());
$file->chown($this->uid);

$ph = new PermissionHelper();
$ph->setNode($file);
Expand Down Expand Up @@ -50,7 +58,7 @@ public function testUserPermissionsAreCalculatedCorrectly()
public function testGroupPermissionsAreCalculatedCorrectly()
{
$file = new File('file');
$file->chgrp(posix_getgid());
$file->chgrp($this->gid);

$ph = new PermissionHelper();
$ph->setNode($file);
Expand Down Expand Up @@ -147,43 +155,43 @@ public function testIsReadable()
$this->assertTrue($ph->isReadable(), 'File is readable root:root 0004');

$file->chmod(0000);
$file->chown(posix_getuid());
$file->chown($this->uid);
$file->chgrp(0);
$this->assertFalse($ph->isReadable(), 'File is not readable user:root 0000');

$file->chmod(0400);
$file->chown(posix_getuid());
$file->chown($this->uid);
$file->chgrp(0);
$this->assertTrue($ph->isReadable(), 'File is readable user:root 0400');

$file->chmod(0040);
$file->chown(posix_getuid());
$file->chown($this->uid);
$file->chgrp(0);
$this->assertFalse($ph->isReadable(), 'File is not readable user:root 0040');

$file->chmod(0004);
$file->chown(posix_getuid());
$file->chown($this->uid);
$file->chgrp(0);
$this->assertTrue($ph->isReadable(), 'File is readable user:root 0004');

$file->chmod(0000);
$file->chown(0);
$file->chgrp(posix_getgid());
$file->chgrp($this->gid);
$this->assertFalse($ph->isReadable(), 'File is not readable root:user 0000');

$file->chmod(0040);
$file->chown(0);
$file->chgrp(posix_getgid());
$file->chgrp($this->gid);
$this->assertTrue($ph->isReadable(), 'File is readable root:user 0040');

$file->chmod(0400);
$file->chown(0);
$file->chgrp(posix_getgid());
$file->chgrp($this->gid);
$this->assertFalse($ph->isReadable(), 'File is not readable root:user 0400');

$file->chmod(0004);
$file->chown(0);
$file->chgrp(posix_getgid());
$file->chgrp($this->gid);
$this->assertTrue($ph->isReadable(), 'File is readable root:user 0004');
}
}
51 changes: 28 additions & 23 deletions tests/VirtualFileSystem/WrapperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,13 @@

class WrapperTest extends \PHPUnit_Framework_TestCase
{
public function setUp()
{
protected $uid;
protected $gid;

public function setUp() {
$this->uid = function_exists('posix_getuid') ? posix_getuid() : 0;
$this->gid = function_exists('posix_getgid') ? posix_getgid() : 0;

@$na['n/a']; //putting error in known state
}

Expand Down Expand Up @@ -96,9 +101,9 @@ public function testChmod()

public function testChownByName()
{
if (posix_getuid() == 0) {
if ($this->uid == 0) {
$this->markTestSkipped(
'No point testing if user is already root. \Php unit shouldn\'t be run as root user.'
'No point testing if user is already root. \Php unit shouldn\'t be run as root user. (Unless you are a windows user!)'
);
}

Expand All @@ -116,7 +121,7 @@ public function testChownByName()

public function testChownById()
{
if (posix_getuid() == 0) {
if ($this->uid == 0) {
$this->markTestSkipped(
'No point testing if user is already root. Php unit shouldn\'t be run as root user.'
);
Expand All @@ -133,9 +138,9 @@ public function testChownById()

public function testChgrpByName()
{
if (posix_getgid() == 0) {
if ($this->uid == 0) {
$this->markTestSkipped(
'No point testing if group is already root. Php unit shouldn\'t be run as root group.'
'No point testing if group is already root. Php unit shouldn\'t be run as root group. (Unless you are on Windows - then we skip)'
);
}

Expand All @@ -153,9 +158,9 @@ public function testChgrpByName()

public function testChgrpById()
{
if (posix_getgid() == 0) {
if ($this->gid == 0) {
$this->markTestSkipped(
'No point testing if group is already root. Php unit shouldn\'t be run as root group.'
'No point testing if group is already root. Php unit shouldn\'t be run as root group. (Unless you are on Windows - then we skip)'
);
}

Expand Down Expand Up @@ -830,7 +835,7 @@ public function testPermissionsAreCheckedWhenOpeningFiles()
$this->assertFalse($wr->stream_open($fs->path('/file'), 'a+', 0, $path));

$file->chmod(0400);
$file->chown(posix_getuid());
$file->chown($this->uid);
$file->chgrp(0);
$this->assertTrue($wr->stream_open($fs->path('/file'), 'r', 0, $path));
$this->assertFalse($wr->stream_open($fs->path('/file'), 'r+', 0, $path));
Expand All @@ -840,7 +845,7 @@ public function testPermissionsAreCheckedWhenOpeningFiles()
$this->assertFalse($wr->stream_open($fs->path('/file'), 'a+', 0, $path));

$file->chmod(0200);
$file->chown(posix_getuid());
$file->chown($this->uid);
$file->chgrp(0);
$this->assertFalse($wr->stream_open($fs->path('/file'), 'r', 0, $path));
$this->assertFalse($wr->stream_open($fs->path('/file'), 'r+', 0, $path));
Expand All @@ -850,7 +855,7 @@ public function testPermissionsAreCheckedWhenOpeningFiles()
$this->assertFalse($wr->stream_open($fs->path('/file'), 'a+', 0, $path));

$file->chmod(0600);
$file->chown(posix_getuid());
$file->chown($this->uid);
$file->chgrp(0);
$this->assertTrue($wr->stream_open($fs->path('/file'), 'r', 0, $path));
$this->assertTrue($wr->stream_open($fs->path('/file'), 'r+', 0, $path));
Expand Down Expand Up @@ -879,7 +884,7 @@ public function testTemporaryFileCreatedToReadDirectoriesWithStreamOpenInheritsP
$this->assertFalse($wr->stream_open($fs->path('/dir'), 'a+', 0, $path));

$file->chmod(0400);
$file->chown(posix_getuid());
$file->chown($this->uid);
$file->chgrp(0);
$this->assertTrue($wr->stream_open($fs->path('/dir'), 'r', 0, $path));
$this->assertFalse($wr->stream_open($fs->path('/dir'), 'r+', 0, $path));
Expand All @@ -889,7 +894,7 @@ public function testTemporaryFileCreatedToReadDirectoriesWithStreamOpenInheritsP
$this->assertFalse($wr->stream_open($fs->path('/dir'), 'a+', 0, $path));

$file->chmod(0200);
$file->chown(posix_getuid());
$file->chown($this->uid);
$file->chgrp(0);
$this->assertFalse($wr->stream_open($fs->path('/dir'), 'r', 0, $path));
$this->assertFalse($wr->stream_open($fs->path('/dir'), 'r+', 0, $path));
Expand All @@ -899,7 +904,7 @@ public function testTemporaryFileCreatedToReadDirectoriesWithStreamOpenInheritsP
$this->assertFalse($wr->stream_open($fs->path('/dir'), 'a+', 0, $path));

$file->chmod(0600);
$file->chown(posix_getuid());
$file->chown($this->uid);
$file->chgrp(0);
$this->assertTrue($wr->stream_open($fs->path('/dir'), 'r', 0, $path));
$this->assertFalse($wr->stream_open($fs->path('/dir'), 'r+', 0, $path));
Expand All @@ -922,18 +927,18 @@ public function testPermissionsAreCheckedWhenOpeningDirectories()
$this->assertFalse(@$wr->dir_opendir($fs->path('/dir'), 0));

$file->chmod(0200);
$file->chown(posix_getuid());
$file->chown($this->uid);
$file->chgrp(0);
$this->assertFalse(@$wr->dir_opendir($fs->path('/dir'), 0));

$file->chmod(0400);
$file->chown(posix_getuid());
$file->chown($this->uid);
$file->chgrp(0);
$this->assertTrue(@$wr->stream_open($fs->path('/dir'), 'r', 0, $path));

$file->chmod(0040);
$file->chown(0);
$file->chgrp(posix_getgid());
$file->chgrp($this->gid);
$this->assertTrue(@$wr->stream_open($fs->path('/dir'), 'r', 0, $path));
}

Expand Down Expand Up @@ -1088,7 +1093,7 @@ public function testChmodNotAllowedIfNotOwner()
{
$fs = new FileSystem();
$file = $fs->createFile('/file');
$file->chown(posix_getuid() + 1); //set to non current
$file->chown($this->uid + 1); //set to non current

$wr = new Wrapper();

Expand All @@ -1109,7 +1114,7 @@ public function testChownAndChgrpNotAllowedIfNotRoot()
{
$fs = new FileSystem();
$file = $fs->createFile('/file');
$file->chown(posix_getuid() + 1); //set to non current
$file->chown($this->uid + 1); //set to non current

$wr = new Wrapper();

Expand Down Expand Up @@ -1172,7 +1177,7 @@ public function testTouchNotAllowedIfNotOwnerOrNotWritable()
{
$fs = new FileSystem();
$file = $fs->createFile('/file');
$file->chown(posix_getuid() + 1); //set to non current
$file->chown($this->uid + 1); //set to non current
$file->chmod(0000);

$wr = new Wrapper();
Expand All @@ -1189,14 +1194,14 @@ public function testTouchNotAllowedIfNotOwnerOrNotWritable()
$error['message']
);

$file->chown(posix_getuid());
$file->chown($this->uid);

$this->assertTrue(
$wr->stream_metadata($fs->path('/file'), STREAM_META_TOUCH, 0),
'Allowed to touch if owner and no permission'
);

$file->chown(posix_getuid() + 1); //set to non current
$file->chown($this->uid + 1); //set to non current
$file->chmod(0002);

$this->assertTrue(
Expand Down