mirror of
https://github.com/gtbu/Typesetter-5.3-p8.git
synced 2024-11-24 23:29:12 +01:00
148 lines
3 KiB
PHP
148 lines
3 KiB
PHP
<?php
|
|
|
|
namespace gp\install;
|
|
|
|
defined('is_running') or die('Not an entry point...');
|
|
|
|
class FilePermissions{
|
|
|
|
public static function GetExpectedPerms($file){
|
|
return static::_GetExpectedPerms($file, ['755','775','777']);
|
|
}
|
|
|
|
public static function GetExpectedPerms_file($file){
|
|
return static::_GetExpectedPerms($file, ['644','664','666']);
|
|
}
|
|
|
|
public static function _GetExpectedPerms($file, $expected = ['644','664','666'] ){
|
|
|
|
$file_info = self::file_info($file);
|
|
|
|
//if user id's match
|
|
if( isset($file_info['uid']) ){
|
|
$puid = posix_geteuid();
|
|
if( $puid == $file_info['uid'] ){
|
|
return $expected[0];
|
|
}
|
|
}
|
|
|
|
//if group id's match
|
|
if( isset($file_info['gid']) ){
|
|
$pgid = posix_getegid();
|
|
if( $pgid == $file_info['gid'] ){
|
|
return $expected[1];
|
|
}
|
|
}
|
|
|
|
//if user is a member of group
|
|
$members = self::process_members();
|
|
if( isset($file_info['name']) && in_array($file_info['name'], $members) ){
|
|
return $expected[1];
|
|
}
|
|
|
|
if( isset($file_info['uid']) && in_array($file_info['uid'], $members) ){
|
|
return $expected[1];
|
|
}
|
|
|
|
return $expected[2];
|
|
}
|
|
|
|
public static function HasFunctions(){
|
|
|
|
return function_exists('posix_getpwuid')
|
|
&& function_exists('posix_geteuid')
|
|
&& function_exists('fileowner')
|
|
&& function_exists('posix_getegid')
|
|
&& function_exists('posix_getgrgid')
|
|
&& function_exists('posix_getgrgid');
|
|
}
|
|
|
|
|
|
/*
|
|
* Compare Permissions
|
|
*/
|
|
public static function perm_compare($perm1, $perm2) {
|
|
|
|
if( !self::ValidPermission($perm1) ){
|
|
return false;
|
|
}
|
|
|
|
if( !self::ValidPermission($perm2) ){
|
|
return false;
|
|
}
|
|
|
|
if (intval($perm1[0]) > intval($perm2[0])) {
|
|
return false;
|
|
}
|
|
|
|
if (intval($perm1[1]) > intval($perm2[1])) {
|
|
return false;
|
|
}
|
|
|
|
if (intval($perm1[2]) > intval($perm2[2])) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public static function ValidPermission(&$permission){
|
|
if( strlen($permission) == 3 ){
|
|
return true;
|
|
}
|
|
if( strlen($permission) == 4 ){
|
|
if( intval($permission[0]) === 0 ){
|
|
$permission = substr($permission,1);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
/**
|
|
* @description Gets Groups members of the PHP Engine
|
|
* @return array The Group members of the PHP Engine
|
|
*
|
|
*/
|
|
public static function process_members() {
|
|
$info = self::process_info();
|
|
if (isset($info['members'])) {
|
|
return $info['members'];
|
|
}
|
|
return array();
|
|
}
|
|
|
|
|
|
/**
|
|
* @description Gets User ID of the file owner
|
|
* @return int The user ID of the file owner
|
|
*
|
|
*/
|
|
public static function file_uid($file) {
|
|
$info = self::file_info($file);
|
|
if( is_array($info) && isset($info['uid']) ){
|
|
return $info['uid'];
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* @description Gets Info array of the file owner
|
|
* @return array The Info array of the file owner
|
|
*
|
|
*/
|
|
public static function file_info($file) {
|
|
return posix_getpwuid(@fileowner($file));
|
|
}
|
|
|
|
/**
|
|
* @description Gets Group Info of the PHP Engine
|
|
* @return array The Group Info of the PHP Engine
|
|
*
|
|
*/
|
|
public static function process_info() {
|
|
return posix_getgrgid(posix_getegid());
|
|
}
|
|
|
|
}
|