Typesetter/include/install/FilePermissions.php

149 lines
3 KiB
PHP
Raw Normal View History

2021-09-08 19:52:21 +02:00
<?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());
}
}